diff --git a/main/java/shkd/repc/resm/formplugin/BatchEvaluatePageFormPlugin.java b/main/java/shkd/repc/resm/formplugin/BatchEvaluatePageFormPlugin.java
new file mode 100644
index 0000000..d1dce9a
--- /dev/null
+++ b/main/java/shkd/repc/resm/formplugin/BatchEvaluatePageFormPlugin.java
@@ -0,0 +1,640 @@
+package shkd.repc.resm.formplugin;
+
+import com.alibaba.fastjson.JSONArray;
+import kd.bos.dataentity.entity.DynamicObject;
+import kd.bos.dataentity.entity.DynamicObjectCollection;
+import kd.bos.dataentity.entity.LocaleString;
+import kd.bos.dataentity.metadata.dynamicobject.DynamicSimpleProperty;
+import kd.bos.entity.EntityMetadataCache;
+import kd.bos.entity.EntryType;
+import kd.bos.entity.MainEntityType;
+import kd.bos.entity.datamodel.events.GetEntityTypeEventArgs;
+import kd.bos.entity.datamodel.events.PropertyChangedArgs;
+import kd.bos.entity.operate.result.OperationResult;
+import kd.bos.entity.property.BasedataProp;
+import kd.bos.entity.property.DecimalProp;
+import kd.bos.entity.property.IntegerProp;
+import kd.bos.entity.property.TextProp;
+import kd.bos.exception.ErrorCode;
+import kd.bos.exception.KDException;
+import kd.bos.form.ClientProperties;
+import kd.bos.form.FormShowParameter;
+import kd.bos.form.IFormView;
+import kd.bos.form.control.Control;
+import kd.bos.form.control.EntryGrid;
+import kd.bos.form.control.Toolbar;
+import kd.bos.form.control.events.BeforeItemClickEvent;
+import kd.bos.form.events.BeforeDoOperationEventArgs;
+import kd.bos.form.events.LoadCustomControlMetasArgs;
+import kd.bos.form.events.OnGetControlArgs;
+import kd.bos.form.field.BasedataEdit;
+import kd.bos.form.field.IntegerEdit;
+import kd.bos.form.operate.FormOperate;
+import kd.bos.form.plugin.AbstractFormPlugin;
+import kd.bos.metadata.entity.businessfield.BasedataField;
+import kd.bos.metadata.entity.commonfield.IntegerField;
+import kd.bos.metadata.entity.commonfield.TextField;
+import kd.bos.metadata.form.control.EntryAp;
+import kd.bos.metadata.form.control.EntryFieldAp;
+import kd.bos.metadata.form.control.EntryFieldGroupAp;
+import kd.bos.servicehelper.BusinessDataServiceHelper;
+import kd.bos.servicehelper.operation.OperationServiceHelper;
+import kd.bos.servicehelper.operation.SaveServiceHelper;
+import kd.sdk.plugin.Plugin;
+
+import java.math.BigDecimal;
+import java.util.*;
+
+/**
+ * 动态表单插件
+ */
+public class BatchEvaluatePageFormPlugin extends AbstractFormPlugin implements Plugin {
+
+    Object evalschemepk;
+    ArrayList<String> indexNames ;//指标集合
+
+    ArrayList<String> indexColumnNames ;//指标列名称集合
+
+    ArrayList<Integer> indexColumnMaxNumber;//标准分集合
+
+
+    JSONArray primaryKeyValues;//主键集合
+
+    String scoremethod;//评分制/  标准分制:standard ;  权重制: weight ; 份额制: share
+
+    String planName;// 方案标识
+    String billName;//单据标识
+
+    String actiontype;//模式
+
+    @Override
+    public void registerListener(EventObject e) {
+        super.registerListener(e);
+        Toolbar mbar = this.getView().getControl("qeug_toolbarap1");
+        mbar.addItemClickListener(this);
+
+    }
+
+
+    @Override
+    public void propertyChanged(PropertyChangedArgs e) {
+        super.propertyChanged(e);
+    }
+
+    @Override
+    public void beforeItemClick(BeforeItemClickEvent evt) {
+        super.beforeItemClick(evt);
+        String itemKey = evt.getItemKey();
+        if ("qeug_baritemap4".equals(itemKey)) {
+            DynamicObjectCollection qeug_entryentity = this.getModel().getEntryEntity("qeug_entryentity");
+            for (DynamicObject dynamicObject : qeug_entryentity) {
+                String qeug_evalid = dynamicObject.getString("qeug_evalid");
+                DynamicObject resm_myeval_new = BusinessDataServiceHelper.loadSingle(qeug_evalid, "resm_myeval_new");
+                if (resm_myeval_new != null) {
+                    String myevalname = resm_myeval_new.getDynamicObject("evaltask").getString("name");
+                    BigDecimal evalscore = BigDecimal.ZERO;//初始化评估得分
+                    DynamicObjectCollection entry_stadardscore = resm_myeval_new.getDynamicObjectCollection("entry_stadardscore");//标准项
+                    for (DynamicObject object : entry_stadardscore) {
+                        DynamicObject std_evalindex = object.getDynamicObject("std_evalindex");
+                        String indexName = std_evalindex.getString("name");
+                        //评估得分evalscore
+                        for (int i = 0; i < indexNames.size(); i++) {
+                            String name = indexNames.get(i);
+                            if (name.equals(indexName)) {
+                                BigDecimal grade = dynamicObject.getBigDecimal("qeug_number" + i);
+                                object.set("std_score", grade);
+                                if ("weight".equals(scoremethod) || "share".equals(scoremethod)){//当评分制为权重制或者份额制时,根据指标权重计算总分
+                                    BigDecimal std_weight = object.getBigDecimal("std_weight");//当前指标权重
+                                    evalscore =  evalscore.add(grade.multiply(std_weight));
+                                }else if ("standard".equals(scoremethod)){
+                                    evalscore =  evalscore.add(grade);//计算累加评估得分
+                                    object.set("std_inputscore", grade);
+                                }
+//                                object.set("std_initscore", grade);//用户输入评分
+                                break;
+                            }
+                        }
+                    }
+                    resm_myeval_new.set("evalscore",evalscore);
+                    SaveServiceHelper.save(new DynamicObject[]{resm_myeval_new});
+                    OperationResult operationResult = OperationServiceHelper.executeOperate("submit", "resm_myeval_new", new DynamicObject[]{resm_myeval_new}, null);
+                    IFormView parentView = this.getView().getParentView();
+                    boolean success = operationResult.isSuccess();
+                    if (!success) {
+                        String message = operationResult.getMessage();
+                        String allErrorInfo = operationResult.getValidateResult().getValidateErrors().get(0).getAllErrorInfo().get(0).getMessage();
+                        parentView.showTipNotification("评估任务:" + myevalname +message +"-"+ allErrorInfo);
+                    }
+                    parentView.invokeOperation("refresh");
+                    this.getView().sendFormAction(parentView);
+                }
+
+            }
+        }
+    }
+
+    @Override
+    public void beforeDoOperation(BeforeDoOperationEventArgs args) {
+        super.beforeDoOperation(args);
+        FormOperate source = (FormOperate) args.getSource();
+        String operateKey = source.getOperateKey();
+    }
+
+    /**
+     * todo 1:
+     * 向前端浏览器界面发送指令,输出动态控件的元数据,从而实现控件能展示的效果
+     * 加载显示单据控件,能显示元数据,对应的数据模型没有与之进行绑定
+     *
+     * @param e
+     */
+    @Override
+    public void loadCustomControlMetas(LoadCustomControlMetasArgs e) {
+        super.loadCustomControlMetas(e);
+        //获取单据传参
+        FormShowParameter formShowParameter = (FormShowParameter) e.getSource();
+        if (null != formShowParameter) {
+            Map<String, Object> customParams = formShowParameter.getCustomParams();
+            if (null != customParams) {
+                evalschemepk = customParams.get("evalschemepk");//获取考察方案F7主键或者评估方案f7
+                billName = (String) customParams.get("pagetype");
+                actiontype = (String) customParams.get("actiontype");
+                if ("resm_myeval_new".equals(billName)) {
+                    planName = "resm_evalschemef7";
+                } else {
+                    planName = "resm_examschemef7";
+                }
+
+                DynamicObject resm_examschemef7 = BusinessDataServiceHelper.loadSingle(evalschemepk, planName);//查询考察方案f7完整数据
+                scoremethod = resm_examschemef7.getString("scoremethod");//评分制
+                indexNames = new ArrayList<>();
+                indexColumnNames = new ArrayList<>();
+                indexColumnMaxNumber = new ArrayList<>();
+                DynamicObjectCollection evalschemeentry = resm_examschemef7.getDynamicObjectCollection("evalschemeentry");//获取考评指标分录
+                for (DynamicObject dy : evalschemeentry) {
+                    DynamicObject evalindex = dy.getDynamicObject("evalindex");//获取考察指标
+                    if ("resm_evalschemef7".equals(planName)) {
+                        String name = evalindex.getString("name");
+                        indexNames.add(name);
+                        switch (scoremethod){
+                            case "standard":
+                                BigDecimal standardscore = dy.getBigDecimal("standardscore");
+                                standardscore = standardscore.setScale(2);
+                                name = name + "(标准分制:"+ standardscore+")";
+                                indexColumnMaxNumber.add(dy.getInt("standardscore"));
+                                break;
+                            case "weight":
+                                name = name + "(权重制:"+ dy.getBigDecimal("percent")+")";
+                                break;
+                            case "share":
+                                name = name + "(份额制:"+ dy.getInt("portion") +")";
+                                break;
+                        }
+                        indexColumnNames.add(name);
+                    } else {
+                        DynamicObject group = evalindex.getDynamicObject("group");
+                        indexNames.add(group.getString("name"));
+                    }
+
+                }
+                //
+                EntryAp dynamicEntryAp = this.createDynamicEntryAp(indexColumnNames, actiontype);//构建单据体模型
+                Map<String, Object> mapEntry = new HashMap();
+                mapEntry.put("id", "qeug_entryentity");//映射单据中的单据体
+                mapEntry.put("columns", dynamicEntryAp.createControl().get("columns"));
+                e.getItems().add(mapEntry);
+
+            }
+        }
+
+
+    }
+
+
+    /**
+     * 动态加载评价单据体控件
+     *
+     * @return
+     */
+    public EntryAp createDynamicEntryAp(ArrayList<String> indexNames, String actiontype) {
+
+        EntryAp entryAp = new EntryAp();
+        entryAp.setKey("entryAp");
+        entryAp.setShowSeq(true);
+        this.createSupplierFileAp(entryAp);
+        if ("scoring".equals(actiontype)) {
+            this.createNumberForScoringFileAp(entryAp, indexNames);
+        } else {
+            this.createWorkGroupNumberFileAp(entryAp, indexNames);
+            this.createParkGroupNumberFileAp(entryAp, indexNames);
+            this.createSupplyChainGroupNumberFileAp(entryAp, indexNames);
+        }
+        this.createEvalIdFileAp(entryAp);
+        return entryAp;
+    }
+
+    /**
+     * 在单据体实体创建供应商实体
+     *
+     * @param entryAp
+     */
+    public void createSupplierFileAp(EntryAp entryAp) {
+//        EntryFieldGroupAp apMats = new EntryFieldGroupAp();
+        EntryFieldAp apMat = new EntryFieldAp();
+        apMat.setId("qeug_supplier");
+        apMat.setKey("qeug_supplier");
+//        apMat.setFreeze(false);
+//        apMat.setEditPreview(true);
+
+        apMat.setName(new LocaleString("供应商"));
+        apMat.setLock("new,edit,view,submit,audit");//设置锁定性
+
+        BasedataField basedataField = new BasedataField();
+        basedataField.setBaseEntityNumber("resm_official_supplier"); //这里添加供应商基础资料字段之后,那具体供应商的值是在哪里复制的?
+
+        TextField textField = new TextField();
+
+        apMat.setField(basedataField);
+        entryAp.getItems().add(apMat);
+    }
+
+    /**
+     * 打分时不需要分项目加载数据
+     *
+     * @param entryAp
+     * @param indexNames
+     */
+    public void createNumberForScoringFileAp(EntryAp entryAp, ArrayList<String> indexNames) {
+        for (int i = 0; i < indexNames.size(); i++) {
+            EntryFieldAp apMat = new EntryFieldAp();
+            apMat.setId("qeug_number" + i);
+            apMat.setKey("qeug_number" + i);
+            apMat.setFireUpdEvt(true);//即时触发值更新事件
+            apMat.setName(new LocaleString(indexNames.get(i)));
+            IntegerField integerField = new IntegerField();
+            if ("standard".equals(scoremethod)){
+                Integer integer = indexColumnMaxNumber.get(i);
+                int intValue = integer.intValue();
+                String fw = "[0,"+intValue+"]";
+                integerField.setDataScope(fw);
+            }else {
+                integerField.setDataScope("[0,100]");
+            }
+
+            integerField.setScale(2);
+            integerField.setZeroShow(true);
+            apMat.setField(integerField);
+            entryAp.getItems().add(apMat);
+        }
+
+
+    }
+
+    public void createWorkGroupNumberFileAp(EntryAp entryAp, ArrayList<String> indexNames) {
+        EntryFieldGroupAp apMats = new EntryFieldGroupAp();
+        apMats.setId("workindex_group");
+        apMats.setKey("workindex_group");
+        apMats.setName(new LocaleString("工程中心评价项目"));
+
+        for (int i = 0; i < indexNames.size(); i++) {
+            EntryFieldAp apMat = new EntryFieldAp();
+            apMat.setId("qeug_numberwork_" + i);
+            apMat.setKey("qeug_numberwork_" + i);
+            apMat.setFireUpdEvt(true);//即时触发值更新事件
+            apMat.setName(new LocaleString(indexNames.get(i)));
+
+            IntegerField integerField = new IntegerField();
+            integerField.setDataScope("[0,100]");
+            integerField.setScale(2);
+            integerField.setZeroShow(true);
+
+            apMat.setField(integerField);
+            apMats.getItems().add(apMat);
+        }
+        entryAp.getItems().add(apMats);
+    }
+
+    public void createParkGroupNumberFileAp(EntryAp entryAp, ArrayList<String> indexNames) {
+        EntryFieldGroupAp apMats = new EntryFieldGroupAp();
+        apMats.setId("parkindex_group");
+        apMats.setKey("parkindex_group");
+        apMats.setName(new LocaleString("园区评价项目"));
+
+        for (int i = 0; i < indexNames.size(); i++) {
+            EntryFieldAp apMat = new EntryFieldAp();
+            apMat.setId("qeug_numberpark_" + i);
+            apMat.setKey("qeug_numberpark_" + i);
+            apMat.setFireUpdEvt(true);//即时触发值更新事件
+            apMat.setName(new LocaleString(indexNames.get(i)));
+
+            IntegerField integerField = new IntegerField();
+            integerField.setDataScope("[0,100]");
+            integerField.setScale(2);
+            integerField.setZeroShow(true);
+
+            apMat.setField(integerField);
+            apMats.getItems().add(apMat);
+        }
+        entryAp.getItems().add(apMats);
+    }
+
+
+    public void createSupplyChainGroupNumberFileAp(EntryAp entryAp, ArrayList<String> indexNames) {
+        EntryFieldGroupAp apMats = new EntryFieldGroupAp();
+        apMats.setId("supplychainindex_group");
+        apMats.setKey("supplychainindex_group");
+        apMats.setName(new LocaleString("供应链中心评价项目"));
+
+        for (int i = 0; i < indexNames.size(); i++) {
+            EntryFieldAp apMat = new EntryFieldAp();
+            apMat.setId("qeug_numbersupplychain_" + i);
+            apMat.setKey("qeug_numbersupplychain_" + i);
+            apMat.setFireUpdEvt(true);//即时触发值更新事件
+            apMat.setName(new LocaleString(indexNames.get(i)));
+
+            IntegerField integerField = new IntegerField();
+            integerField.setScale(2);
+            integerField.setZeroShow(true);
+
+            apMat.setField(integerField);
+            apMats.getItems().add(apMat);
+        }
+        entryAp.getItems().add(apMats);
+    }
+
+    /**
+     * 构建评估单据id字段
+     *
+     * @param entryAp
+     */
+    public void createEvalIdFileAp(EntryAp entryAp) {
+        EntryFieldAp apMat = new EntryFieldAp();
+        apMat.setId("qeug_evalid");
+        apMat.setKey("qeug_evalid");
+        apMat.setFireUpdEvt(true);//即时触发值更新事件
+        apMat.setVisible("audit");
+        apMat.setName(new LocaleString("单据id"));
+
+        TextField textField = new TextField();
+        textField.setId("qeug_evalid");
+        textField.setKey("qeug_evalid");
+        apMat.setField(textField);
+        entryAp.getItems().add(apMat);
+
+    }
+
+    /**
+     * todo 2:
+     * 向界面主实体模型,动态注册新的属性对象,存储动态添加的字段值,从而达到控件能赋值的目的,能根据标识来进行赋值了,而不会报空指针的错误
+     *
+     * @param e
+     */
+    @Override
+    public void getEntityType(GetEntityTypeEventArgs e) {
+        super.getEntityType(e);
+        MainEntityType oldMainType = e.getOriginalEntityType();//取原始的主实体
+        //复制主实体
+        MainEntityType newMainType = null;
+        try {
+            newMainType = (MainEntityType) oldMainType.clone();
+        } catch (CloneNotSupportedException exp) {
+            throw new KDException(exp, new ErrorCode("LoadCustomControlMetasSample", exp.getMessage()));
+        }
+        //获取单据传参
+        FormShowParameter formShowParameter = this.getView().getFormShowParameter();
+        if (null != formShowParameter) {
+            Map<String, Object> customParams = formShowParameter.getCustomParams();
+            if (null != customParams) {
+                evalschemepk = customParams.get("evalschemepk");//获取考察方案F7主键或者评估方案f7
+                billName = (String) customParams.get("pagetype");
+                actiontype = (String) customParams.get("actiontype");//模式
+                if ("resm_myeval_new".equals(billName)) {
+                    planName = "resm_evalschemef7";
+                } else {
+                    planName = "resm_examschemef7";
+                }
+                indexNames = new ArrayList<>();
+                indexColumnNames = new ArrayList<>();
+                indexColumnMaxNumber = new ArrayList<>();
+                primaryKeyValues = (JSONArray) customParams.get("primaryKeyValues");
+                DynamicObject resm_examschemef7 = BusinessDataServiceHelper.loadSingle(evalschemepk, planName);//查询考察方案f7完整数据
+                scoremethod = resm_examschemef7.getString("scoremethod");//评分制
+                DynamicObjectCollection evalschemeentry = resm_examschemef7.getDynamicObjectCollection("evalschemeentry");//获取考评指标分录
+                for (DynamicObject dy : evalschemeentry) {
+                    DynamicObject evalindex = dy.getDynamicObject("evalindex");//获取评估指标
+                    if ("resm_evalschemef7".equals(planName)) {
+                        String name = evalindex.getString("name");
+                        indexNames.add(name);
+                        switch (scoremethod){
+                            case "standard":
+                                BigDecimal standardscore = dy.getBigDecimal("standardscore");
+                                standardscore = standardscore.setScale(2);
+                                name = name + "(标准分制:"+ standardscore+")";
+                                indexColumnMaxNumber.add(dy.getInt("standardscore"));
+                                break;
+                            case "weight":
+                                name = name + "(权重制:"+ dy.getBigDecimal("percent")+")";
+                                break;
+                            case "share":
+                                name = name + "(份额制:"+ dy.getInt("portion") +")";
+                                break;
+                        }
+                        indexColumnNames.add(name);
+                    } else {
+                        DynamicObject group = evalindex.getDynamicObject("group");
+                        indexNames.add(group.getString("name"));
+                    }
+
+                }
+            }
+        }
+        //为自定义的单据体字段,向主实体注册相应数据
+        this.registerDynamicProps(newMainType, actiontype);
+        //回传给主实体
+        e.setNewEntityType(newMainType);
+
+    }
+
+    /**
+     * 向主实体注册动态添加的属性
+     *
+     * @param newMainType
+     */
+    public void registerDynamicProps(MainEntityType newMainType, String actiontype) {
+        //获取当前单据体实体
+        EntryType entryType = (EntryType) newMainType.getAllEntities().get("qeug_entryentity");//单据体标识
+        this.registerSupplierProp(entryType);
+        if ("scoring".equals(actiontype)) {
+            this.registerNumberForScoringProps(entryType, indexColumnNames);
+        } else {
+            this.registerWorkNumberProps(entryType, indexColumnNames);
+            this.registerParkNumberProps(entryType, indexColumnNames);
+            this.registerSupplyChainNumberProps(entryType, indexColumnNames);
+        }
+        this.registerEvalIdProps(entryType);
+
+    }
+
+    public void registerSupplierProp(EntryType entryType) {
+        BasedataProp basedataProp = new BasedataProp();
+        basedataProp.setDbIgnore(true);
+        basedataProp.setBaseEntityId("resm_official_supplier");
+        basedataProp.setName("qeug_supplier");//标识
+        basedataProp.setDisplayName(new LocaleString("供应商"));//标题
+        basedataProp.setComplexType(EntityMetadataCache.getDataEntityType("resm_official_supplier"));
+        //基础资料字段须配置RefIDProp
+        DynamicSimpleProperty refIDProp = basedataProp.createRefIDProp();
+        refIDProp.setPrimaryKey(false);
+        refIDProp.setName("qeug_supplier_id");
+        refIDProp.setDbIgnore(true);
+        basedataProp.setRefIdProp(refIDProp);
+        basedataProp.setRefIdPropName("qeug_supplier_id");
+
+        entryType.registerComplexProperty(basedataProp);
+        entryType.addProperty(refIDProp);
+    }
+
+    public void registerNumberForScoringProps(EntryType entryType, ArrayList<String> indexNames) {
+        for (int i = 0; i < indexNames.size(); i++) {
+            IntegerProp integerProp = new IntegerProp();
+            integerProp.setName("qeug_number" + i);
+            integerProp.setDisplayName(new LocaleString(indexNames.get(i)));//标题
+            integerProp.setScale(2);
+            integerProp.setZeroShow(true);
+            entryType.registerSimpleProperty(integerProp);
+        }
+    }
+
+    public void registerWorkNumberProps(EntryType entryType, ArrayList<String> indexNames) {
+
+        for (int i = 0; i < indexNames.size(); i++) {
+            IntegerProp integerProp = new IntegerProp();
+            integerProp.setName("qeug_numberwork_" + i);
+            integerProp.setDisplayName(new LocaleString(indexNames.get(i)));//标题
+            integerProp.setScale(2);
+//            integerProp.setDataScope("[0,100]");
+//            integerProp.setMax(new BigDecimal(100));
+//            integerProp.setMin(BigDecimal.ZERO);
+            integerProp.setZeroShow(true);
+            entryType.registerSimpleProperty(integerProp);
+        }
+    }
+
+    public void registerParkNumberProps(EntryType entryType, ArrayList<String> indexNames) {
+        for (int i = 0; i < indexNames.size(); i++) {
+
+            DecimalProp decimalProp = new IntegerProp();
+            decimalProp.setName("qeug_numberpark_" + i);
+            decimalProp.setDisplayName(new LocaleString(indexNames.get(i)));//标题
+            decimalProp.setScale(2);
+            decimalProp.setZeroShow(true);
+            entryType.registerSimpleProperty(decimalProp);
+        }
+    }
+
+
+    public void registerSupplyChainNumberProps(EntryType entryType, ArrayList<String> indexNames) {
+        for (int i = 0; i < indexNames.size(); i++) {
+            DecimalProp decimalProp = new DecimalProp();
+            decimalProp.setName("qeug_numbersupplychain_" + i);
+            decimalProp.setDisplayName(new LocaleString(indexNames.get(i)));//标题
+            decimalProp.setScale(2);
+            decimalProp.setZeroShow(true);
+            entryType.registerSimpleProperty(decimalProp);
+        }
+    }
+
+    public void registerEvalIdProps(EntryType entryType) {
+        TextProp textProp = new TextProp();
+        textProp.setName("qeug_evalid");//字段标识
+        textProp.setDisplayName(new LocaleString("单据id"));
+        textProp.setDbIgnore(true);
+        entryType.registerSimpleProperty(textProp);
+    }
+
+    /**
+     * todo 3:向后台视图模型,输出动态控件的编程模型实例,并侦听控件的事件
+     *
+     * @param e
+     */
+    @Override
+    public void onGetControl(OnGetControlArgs e) {
+        super.onGetControl(e);
+        String key = e.getKey();
+        if (key.startsWith("qeug_supplier")) {
+            BasedataEdit basedataEdit = new BasedataEdit();
+            basedataEdit.setKey(key);//设置字段标识
+            basedataEdit.setEntryKey("qeug_entryentity");//设置分录标识
+            basedataEdit.setView(this.getView());//设置视图
+            e.setControl(basedataEdit);
+        } else if (key.startsWith("qeug_number")) {
+            IntegerEdit decimalEdit = new IntegerEdit();
+            decimalEdit.setKey(key);
+            decimalEdit.setEntryKey("qeug_entryentity");
+            decimalEdit.setView(this.getView());//设置视图
+            e.setControl(decimalEdit);
+        }
+    }
+
+    /**
+     * todo 4:是向后台视图模型,添加动态字段的控件编辑模型,后台赋值后需要展示到前端表单上,目的是控件值能显示
+     *
+     * @param e
+     */
+    @Override
+    public void beforeBindData(EventObject e) {
+        super.beforeBindData(e);
+        EntryAp dynamicEntryAp = this.createDynamicEntryAp(indexNames, actiontype);
+        EntryGrid qeug_entryentity = this.getView().getControl("qeug_entryentity");
+        List<Control> items = dynamicEntryAp.buildRuntimeControl().getItems();
+        for (Control item : items) {
+            item.setView(this.getView());
+            qeug_entryentity.getItems().add(item);
+        }
+    }
+
+    /**
+     * 渲染实体数据
+     *
+     * @param e
+     */
+    @Override
+    public void afterBindData(EventObject e) {
+        super.afterBindData(e);//获取单据传参
+        DynamicObjectCollection qeug_entryentity = this.getModel().getEntryEntity("qeug_entryentity");//获取评标分录
+        for (Object primaryKeyValue : primaryKeyValues) {
+            DynamicObject resm_myexam = BusinessDataServiceHelper.loadSingle(primaryKeyValue, billName);
+            String supplierName = "";
+            if ("resm_myeval_new".equals(billName)) {
+                supplierName = "evalsupplier";
+                String evalperiod = resm_myexam.getString("evalperiod");
+                this.getModel().setValue("qeug_appraisalcycle", evalperiod);//考评周期
+                DynamicObject org = resm_myexam.getDynamicObject("org");//组织
+                this.getModel().setValue("qeug_projectname", org);
+                Date year = resm_myexam.getDate("year");
+                this.getModel().setValue("qeug_date", year);//年份赋值
+            } else {
+                supplierName = "evaloffsupplier";
+            }
+            DynamicObject evaloffsupplier = resm_myexam.getDynamicObject(supplierName);
+            if (evaloffsupplier != null) {
+                DynamicObject addNew = qeug_entryentity.addNew();
+                addNew.set("qeug_supplier", evaloffsupplier);
+                addNew.set("qeug_evalid", primaryKeyValue);
+                //todo:设置单据体字段冻结
+                EntryGrid entry = getView().getControl("qeug_entryentity");
+                Optional.ofNullable(entry).ifPresent(f -> {
+                    f.setColumnProperty("qeug_supplier", ClientProperties.IsFixed, true);
+                });
+            }
+
+        }
+        this.getView().setEnable(false, "qeug_date,qeug_projectname,qeug_appraisalcycle");
+        this.getView().updateView("qeug_entryentity");
+        this.getView().updateView("qeug_appraisalcycle");
+        this.getView().updateView("qeug_projectname");
+        this.getView().updateView("qeug_date");
+    }
+
+
+
+}
\ No newline at end of file
diff --git a/main/java/shkd/repc/resm/listplugin/MyEvalListPlugin.java b/main/java/shkd/repc/resm/listplugin/MyEvalListPlugin.java
new file mode 100644
index 0000000..8358281
--- /dev/null
+++ b/main/java/shkd/repc/resm/listplugin/MyEvalListPlugin.java
@@ -0,0 +1,186 @@
+package shkd.repc.resm.listplugin;
+
+import kd.bos.dataentity.entity.DynamicObject;
+import kd.bos.dataentity.entity.DynamicObjectCollection;
+import kd.bos.entity.datamodel.ListSelectedRow;
+import kd.bos.entity.datamodel.ListSelectedRowCollection;
+import kd.bos.form.FormShowParameter;
+import kd.bos.form.ShowType;
+import kd.bos.form.StyleCss;
+import kd.bos.form.events.AfterDoOperationEventArgs;
+import kd.bos.list.plugin.AbstractListPlugin;
+import kd.bos.orm.query.QCP;
+import kd.bos.orm.query.QFilter;
+import kd.bos.servicehelper.BusinessDataServiceHelper;
+import kd.sdk.plugin.Plugin;
+
+import java.text.SimpleDateFormat;
+import java.util.Date;
+import java.util.HashSet;
+
+/**
+ * 我的评估单据列表插件
+ */
+public class MyEvalListPlugin extends AbstractListPlugin implements Plugin {
+
+
+
+    Object evalSchemeId;
+
+    @Override
+    public void afterDoOperation(AfterDoOperationEventArgs afterDoOperationEventArgs) {
+        super.afterDoOperation(afterDoOperationEventArgs);
+
+        String operateKey = afterDoOperationEventArgs.getOperateKey();
+        switch (operateKey){
+            case "batchgrading":
+                //todo:批量评分,选择多个已下达任务的考察进行批量打分
+                ListSelectedRowCollection rows = this.getSelectedRows();
+                if (this.checkMyEval(rows)){
+                    //todo: 构建传参
+                    Object[] primaryKeyValues = rows.getPrimaryKeyValues();
+                    FormShowParameter formShowParameter = new FormShowParameter();
+                    formShowParameter.setFormId("qeug_batchevaluatetpage");
+                    formShowParameter.setCaption("开始打分");
+                    formShowParameter.setCustomParam("primaryKeyValues",primaryKeyValues);
+                    formShowParameter.setCustomParam("evalschemepk",evalSchemeId);
+                    formShowParameter.setCustomParam("actiontype","scoring");//设置页面动作模式为打分
+                    formShowParameter.setCustomParam("pagetype","resm_myeval_new");
+                    formShowParameter.getOpenStyle().setShowType(ShowType.Modal);
+                    StyleCss inlineStyleCss = new StyleCss();
+                    inlineStyleCss.setHeight("600");
+                    inlineStyleCss.setWidth("1000");
+                    formShowParameter.getOpenStyle().setInlineStyleCss(inlineStyleCss);
+                    getView().showForm(formShowParameter);
+                }
+                break;
+            default:
+                break;
+        }
+    }
+
+
+    /**
+     * 校验选取的我的评估单据数据是否符合规范
+     * @param rows
+     * @return
+     */
+    public boolean checkMyEval(ListSelectedRowCollection rows){
+        if (this.checkMyEvalStatus(rows)){//判断选择的考察评分状态是否正确
+            if (this.checkMyEvalData(rows)){//判断选择的我的评估数据是否一致
+                return true;
+            }else {
+                return false;
+            }
+        }else {
+            return false;
+        }
+    }
+
+    /**
+     * 校验我的评估的数据是否符合
+     * @param rows
+     * @return
+     */
+    public boolean checkMyEvalData(ListSelectedRowCollection rows){
+        HashSet<Object> orges = new HashSet<>();//组织容器
+        HashSet<Object> evalPeriods = new HashSet<>();//评估周期容器
+        HashSet<Object> years = new HashSet<>();//年份容器
+        HashSet<Object> evalSchemes = new HashSet<>();//评估方案容器
+
+        for (ListSelectedRow row : rows) {
+            Object primaryKeyValue = row.getPrimaryKeyValue();
+            if (primaryKeyValue != null){
+                DynamicObject resm_myeval_new = BusinessDataServiceHelper.loadSingle(primaryKeyValue, "resm_myeval_new");//获取我的评估完整数据
+                DynamicObject org = resm_myeval_new.getDynamicObject("org");//组织
+                if (org != null){
+                    orges.add(org.getPkValue());//添加进组织容器
+                }
+                String evalperiod = resm_myeval_new.getString("evalperiod");//评估周期
+                evalPeriods.add(evalperiod);//添加进周期容器
+                Date year = resm_myeval_new.getDate("year");//年份
+                SimpleDateFormat simpleDateFormat = new SimpleDateFormat("yyyy");
+                String format = simpleDateFormat.format(year);
+                years.add(format);//添加进年份容器
+
+                DynamicObject evalsupplier = resm_myeval_new.getDynamicObject("evalsupplier");//获取供应商
+                if (evalsupplier != null){
+                    Object  evalSupplierPkValue = evalsupplier.getPkValue();
+                    DynamicObject evaltask = resm_myeval_new.getDynamicObject("evaltask");//获取评估任务
+                    if (evaltask != null){
+                        DynamicObject resm_evaltask_new = BusinessDataServiceHelper.loadSingle(evaltask.getPkValue(), "resm_evaltask_new");
+                        DynamicObjectCollection evaldetail = resm_evaltask_new.getDynamicObjectCollection("evaldetail");
+                        if (evaldetail != null  && evaldetail.size() > 0){
+                            for (DynamicObject dynamicObject : evaldetail) {
+                                DynamicObject supplier = dynamicObject.getDynamicObject("supplier");//供应商
+                                if (supplier != null){
+                                    if (evalSupplierPkValue.equals(supplier.getPkValue())){
+                                        DynamicObject evalscheme = dynamicObject.getDynamicObject("evalscheme");
+                                        if (evalscheme != null){
+                                            Object evalSchemePkValue = evalscheme.getPkValue();
+                                            evalSchemeId = evalSchemePkValue;//覆盖方案id
+                                            evalSchemes.add(evalSchemePkValue);
+                                        }else {
+                                            this.getView().showTipNotification("选择的我的评估单据对应的评估任务,评估详情分录中评估方案数据异常");
+                                            return false;
+                                        }
+                                    }
+                                }else {
+                                    this.getView().showTipNotification("选择的我的评估单据对应的评估任务,评估详情分录中供应商数据异常");
+                                    return false;
+                                }
+                            }
+                        }else {
+                            this.getView().showTipNotification("选择的我的评估单据对应的评估任务存在评估详情数据异常");
+                            return false;
+                        }
+                    }
+
+                }else {
+                    this.getView().showTipNotification("选择的我的评估单据存在供应商名称数据异常");
+                    return false;
+                }
+            }
+        }
+        if (orges.size() == 1 && evalPeriods.size() == 1 && years.size() == 1 && evalSchemes.size() == 1 ){//当考察方案主键唯一时,符合条件
+            return true;
+        }else {
+            if (orges.size() != 1){
+                this.getView().showTipNotification("存在多个组织,请重新选择数据");
+            }
+            if (evalPeriods.size() != 1){
+                this.getView().showTipNotification("存在多种评估周期,请重新选择数据");
+            }
+            if (years.size() != 1){
+                this.getView().showTipNotification("存在多种评估年度,请重新选择数据");
+            }
+            if (evalSchemes.size() != 1){
+                this.getView().showTipNotification("存在多种评估方案,请重新选择数据");
+            }
+            return false;
+        }
+    }
+
+    /**
+     * 校验我的评估状态是否符合
+     * @param rows
+     * @return
+     */
+    public boolean checkMyEvalStatus(ListSelectedRowCollection rows){
+        Object[] primaryKeyValues = rows.getPrimaryKeyValues();
+        if (primaryKeyValues.length > 0){
+            QFilter qf = new QFilter("billstatus", QCP.equals,"A");//未完成
+            qf.and("id",QCP.in,primaryKeyValues);
+            DynamicObject[] load = BusinessDataServiceHelper.load("resm_myeval_new", "id", qf.toArray());
+            if (load.length != primaryKeyValues.length){
+                this.getView().showTipNotification("存在评估状态不符合规范的我的评估,请重新选择数据!");
+                return false;
+            }else {
+                return true;
+            }
+        }else {
+            this.getView().showTipNotification("评估任务数据异常,单据不存在,请重新选择数据!");
+            return false;
+        }
+    }
+}
\ No newline at end of file