2 Commits f5d101886c ... 4fc000821d

Author SHA1 Message Date
  sqw 4fc000821d 优化代码 9 months ago
  sqw 3eab80886c 考核关系业务实现 10 months ago
13 changed files with 1299 additions and 98 deletions
  1. 1 1
      code/opmcepaq/uzi9-uzi9q-opmcepaq-epaq/src/main/java/uzi9/uzi9q/opmcepaq/epaq/plugin/form/activities/DynamicActivitiesListPulgin.java
  2. 73 6
      code/opmcepaq/uzi9-uzi9q-opmcepaq-epaq/src/main/java/uzi9/uzi9q/opmcepaq/epaq/plugin/form/zd/AssessmentActivityListPlugin.java
  3. 115 0
      code/opmcepaq/uzi9-uzi9q-opmcepaq-epaq/src/main/java/uzi9/uzi9q/opmcepaq/epaq/plugin/form/zd/AssessmentGxListPlugin.java
  4. 57 4
      code/opmcepaq/uzi9-uzi9q-opmcepaq-epaq/src/main/java/uzi9/uzi9q/opmcepaq/epaq/plugin/form/zd/EvaluationObjectF7ilterFormPlugin.java
  5. 429 83
      code/opmcepaq/uzi9-uzi9q-opmcepaq-epaq/src/main/java/uzi9/uzi9q/opmcepaq/epaq/plugin/form/zd/EvaluationObjectListPlugin.java
  6. 317 0
      code/opmcepaq/uzi9-uzi9q-opmcepaq-epaq/src/main/java/uzi9/uzi9q/opmcepaq/epaq/plugin/form/zd/PerformanceObjectivesListPlugin.java
  7. 1 1
      code/opmcepaq/uzi9-uzi9q-opmcepaq-epaq/src/main/java/uzi9/uzi9q/opmcepaq/epaq/plugin/form/zd/basic/EvaluationCycleBasePlugIn.java
  8. 1 1
      code/opmcepaq/uzi9-uzi9q-opmcepaq-epaq/src/main/java/uzi9/uzi9q/opmcepaq/epaq/plugin/form/zd/basic/IndicatorCategoryListPlugin.java
  9. 1 1
      code/opmcepaq/uzi9-uzi9q-opmcepaq-epaq/src/main/java/uzi9/uzi9q/opmcepaq/epaq/plugin/form/zd/basic/IndicatorClassListPlugin.java
  10. 1 1
      code/opmcepaq/uzi9-uzi9q-opmcepaq-epaq/src/main/java/uzi9/uzi9q/opmcepaq/epaq/plugin/form/zd/basic/PerformanceRratingBasePlugIn.java
  11. 39 0
      code/opmcepaq/uzi9-uzi9q-opmcepaq-epaq/src/main/java/uzi9/uzi9q/opmcepaq/epaq/plugin/form/zd/operation/AssessmentGxImportPlugin.java
  12. 225 0
      code/opmcepaq/uzi9-uzi9q-opmcepaq-epaq/src/main/java/uzi9/uzi9q/opmcepaq/epaq/plugin/form/zd/operation/PerftargetServicePlugIn.java
  13. 39 0
      code/opmcepaq/uzi9-uzi9q-opmcepaq-epaq/src/main/java/uzi9/uzi9q/opmcepaq/epaq/plugin/form/zd/scheduler/PerftargetPhasetimeAbstractTask.java

+ 1 - 1
code/opmcepaq/uzi9-uzi9q-opmcepaq-epaq/src/main/java/uzi9/uzi9q/opmcepaq/epaq/plugin/form/activities/DynamicActivitiesListPulgin.java

@@ -89,7 +89,7 @@ public class DynamicActivitiesListPulgin extends AbstractListPlugin implements P
              BillFormId = (String) this.getModel().getValue("uzi9_set_mgmt");
         }
         if("uzi9_review_rel".equals(tabKey)){
-             BillFormId = (String) this.getModel().getValue("uzi9_set_mgmt");
+             BillFormId = (String) this.getModel().getValue("uzi9_set_rel");
         }
         if("uzi9_perf_goals".equals(tabKey)){
              BillFormId = (String) this.getModel().getValue("uzi9_set_mgmt");

+ 73 - 6
code/opmcepaq/uzi9-uzi9q-opmcepaq-epaq/src/main/java/uzi9/uzi9q/opmcepaq/epaq/plugin/form/zd/AssessmentActivityListPlugin.java

@@ -1,11 +1,16 @@
 package uzi9.uzi9q.opmcepaq.epaq.plugin.form.zd;
 
+import kd.bos.dataentity.OperateOption;
 import kd.bos.dataentity.entity.DynamicObject;
+import kd.bos.dataentity.entity.OrmLocaleValue;
 import kd.bos.entity.datamodel.ListSelectedRow;
 import kd.bos.entity.datamodel.ListSelectedRowCollection;
 import kd.bos.entity.operate.Delete;
+import kd.bos.entity.operate.result.OperationResult;
 import kd.bos.form.FormShowParameter;
 import kd.bos.form.ShowType;
+import kd.bos.form.control.Control;
+import kd.bos.form.control.events.ItemClickEvent;
 import kd.bos.form.events.BeforeDoOperationEventArgs;
 import kd.bos.form.events.BillListHyperLinkClickEvent;
 import kd.bos.form.events.HyperLinkClickArgs;
@@ -13,26 +18,61 @@ import kd.bos.list.BillList;
 import kd.bos.list.plugin.AbstractListPlugin;
 import kd.bos.orm.query.QFilter;
 import kd.bos.servicehelper.BusinessDataServiceHelper;
+import kd.bos.servicehelper.operation.OperationServiceHelper;
+import kd.bos.servicehelper.operation.SaveServiceHelper;
 import kd.sdk.plugin.Plugin;
 
+import java.util.HashMap;
+import java.util.Map;
+
 /**
  * 考核活动标准单据列表插件
  */
 public class AssessmentActivityListPlugin extends AbstractListPlugin implements Plugin {
+
+    private static final String ASSESSMENT_ACT = "uzi9_assessment_activity";
+
+    @Override
+    public void itemClick(ItemClickEvent evt) {
+        super.itemClick(evt);
+        String itemKey = evt.getItemKey();
+        //启动考核活动按键
+        if (itemKey.equals("uzi9_start")) {
+            BillList billList = this.getControl(AbstractListPlugin.BILLLISTID);
+            ListSelectedRowCollection selectedRows = billList.getSelectedRows();
+            Object[] primaryKeyValues = selectedRows.getPrimaryKeyValues();
+            for (Object primaryKeyValue : primaryKeyValues) {
+                DynamicObject dynamicObject = BusinessDataServiceHelper.loadSingle(ASSESSMENT_ACT, "id,uzi9_activity_status", new QFilter[]{new QFilter("id", QFilter.equals, primaryKeyValue)});
+                if (dynamicObject.get("uzi9_activity_status").equals("1")) {
+                    dynamicObject.set("uzi9_activity_status", 2);
+                    OperationResult result = SaveServiceHelper.saveOperate(ASSESSMENT_ACT, new DynamicObject[]{dynamicObject});
+                    if (result.isSuccess()) {
+                        this.getView().showSuccessNotification("启动考核活动成功");
+                    } else {
+                        this.getView().showErrorNotification("启动考核活动成失败");
+                    }
+                } else {
+                    this.getView().showTipNotification("当前考核活动状态不为未开始,拒绝启动");
+                }
+
+            }
+        }
+    }
+
     @Override
     public void beforeDoOperation(BeforeDoOperationEventArgs args) {
         super.beforeDoOperation(args);
-        if (args.getSource() instanceof Delete){
+        if (args.getSource() instanceof Delete) {
             //获取选择uzi9_activity_status考核活动表单主键集合
             BillList billList = this.getControl(AbstractListPlugin.BILLLISTID);
             ListSelectedRowCollection selectedRows = billList.getSelectedRows();
             Object[] primaryKeyValues = selectedRows.getPrimaryKeyValues();
             //对删除的考核活动表单进行查询,判断其中的活动状态,如果为未开始可以删除,其余的都不能删除
             for (Object primaryKeyValue : primaryKeyValues) {
-                QFilter qFilter = new QFilter("id",QFilter.equals,primaryKeyValue);
-                DynamicObject dynamicObject = BusinessDataServiceHelper.loadSingle("uzi9_assessment_activity", "uzi9_activity_status", new QFilter[]{qFilter});
+                QFilter qFilter = new QFilter("id", QFilter.equals, primaryKeyValue);
+                DynamicObject dynamicObject = BusinessDataServiceHelper.loadSingle(ASSESSMENT_ACT, "uzi9_activity_status,enable", new QFilter[]{qFilter});
                 Object status = dynamicObject.get("uzi9_activity_status");
-                if (!status.equals("1")){
+                if (!status.equals("1") || dynamicObject.get("enable").equals(1)) {
                     this.getView().showErrorNotification("当前删除的活动当中有活动状态不是未开始的");
                     args.setCancel(true);
                 }
@@ -45,7 +85,7 @@ public class AssessmentActivityListPlugin extends AbstractListPlugin implements
         super.billListHyperLinkClick(args);
         //获取当前点击超链接的映射字段
         String fieldName = args.getFieldName();
-        if (fieldName.equals("number")){
+        if (fieldName.equals("number")) {
             //去除原来的实现逻辑
             args.setCancel(true);
             //获取其点击的原始的事件对象转换成BillListHyperLinkClickEvent类型
@@ -54,13 +94,40 @@ public class AssessmentActivityListPlugin extends AbstractListPlugin implements
             ListSelectedRow currentRow = event.getCurrentRow();
             //获取当前点击行的表单id
             Object primaryKeyValue = currentRow.getPrimaryKeyValue();
+            //通过id获取考核活动数据
+            DynamicObject dynamicObject = BusinessDataServiceHelper.loadSingle(ASSESSMENT_ACT, "id,name,uzi9_activity_status", new QFilter[]{new QFilter("id", QFilter.equals, primaryKeyValue)});
+            //只有考核活动在进行中-2才允许跳转
+            if (dynamicObject.get("uzi9_activity_status").equals("1")) {
+                this.getView().showTipNotification("当前考核状态:未开始,拒绝跳转");
+                return;
+            }
+            if (dynamicObject.get("uzi9_activity_status").equals("3")) {
+                this.getView().showTipNotification("当前考核状态:已结束,拒绝跳转");
+                return;
+            }
+
             //进行跳转准备
             FormShowParameter ShowParameter = new FormShowParameter();
             ShowParameter.setFormId("uzi9_activities_list");
-            ShowParameter.setCustomParam("ActivityId", primaryKeyValue);
+            Map<String, Object> map = new HashMap<String, Object>();
+            Object name = dynamicObject.get("name");
+            Object defaultValue = getDefaultValue(name);
+            map.put("ActivityName", defaultValue);
+            map.put("ActivityId", primaryKeyValue);
+            ShowParameter.setCustomParams(map);
             ShowParameter.getOpenStyle().setShowType(ShowType.NewWindow);
             //开始跳转
             this.getView().showForm(ShowParameter);
         }
     }
+
+    //语言设置
+    private Object getDefaultValue(Object localeValue) {
+        if (localeValue instanceof OrmLocaleValue) {
+            OrmLocaleValue ormLocaleValue = (OrmLocaleValue) localeValue;
+            // 假设默认语言是 "zh_CN",你可以根据实际情况调整
+            return ormLocaleValue.get("zh_CN");
+        }
+        return localeValue;
+    }
 }

+ 115 - 0
code/opmcepaq/uzi9-uzi9q-opmcepaq-epaq/src/main/java/uzi9/uzi9q/opmcepaq/epaq/plugin/form/zd/AssessmentGxListPlugin.java

@@ -0,0 +1,115 @@
+package uzi9.uzi9q.opmcepaq.epaq.plugin.form.zd;
+
+import kd.bos.dataentity.entity.DynamicObject;
+import kd.bos.dataentity.entity.LocaleString;
+import kd.bos.dataentity.metadata.IDataEntityProperty;
+import kd.bos.dataentity.metadata.IDataEntityType;
+import kd.bos.dataentity.metadata.clr.DataEntityProperty;
+import kd.bos.dataentity.metadata.clr.DataEntityPropertyCollection;
+import kd.bos.entity.datamodel.ListSelectedRowCollection;
+import kd.bos.form.IPageCache;
+import kd.bos.form.control.Control;
+import kd.bos.form.events.AfterDoOperationEventArgs;
+import kd.bos.form.events.BeforeCreateListColumnsArgs;
+import kd.bos.form.events.SetFilterEvent;
+import kd.bos.list.BillList;
+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.bos.servicehelper.operation.SaveServiceHelper;
+import kd.sdk.plugin.Plugin;
+
+import java.util.EventObject;
+
+/**
+ * 考核关系标准单据列表插件
+ */
+public class AssessmentGxListPlugin extends AbstractListPlugin implements Plugin {
+
+    //评估对象表单标识
+    private static final String EVALUATION_OBJECT = "uzi9_evaluation_object";
+    //考核关系表单标识
+    private static final String ASSESSMENT_GX = "uzi9_assessment_gx";
+    //人员表单标识
+    private static final String BOS_USER = "bos_user";
+    //绩效目标标识
+    private static final String PERF_TARGET = "uzi9_perftarget";
+
+    @Override
+    public void setFilter(SetFilterEvent e) {
+        super.setFilter(e);
+        //添加过滤条件,只能看见当前考核下的评估对象(后期放开注解)
+        Object ActivityId = this.getView().getFormShowParameter().getCustomParam("ActivityId");
+        QFilter qFilter = new QFilter("uzi9_assessment_activity.id", QCP.equals, ActivityId);
+        e.getQFilters().add(qFilter);
+    }
+
+    @Override
+    public void beforeCreateListColumns(BeforeCreateListColumnsArgs args) {
+        super.beforeCreateListColumns(args);
+        IPageCache pageCache = this.getView().getPageCache();
+        Object importdata = this.getView().getFormShowParameter().getCustomParam("importdata");
+        String start = pageCache.get("start");
+        if (importdata != null) {
+            //退出
+            if (start != null) {
+                updatePet();
+                pageCache.remove("start");
+                this.getView().invokeOperation("close");
+                return;
+            }
+            //触发导入
+            this.getView().invokeOperation("importdata");
+        }
+
+        //通过缓存控制绩效目标的同步更新
+        String string = pageCache.get("cacheKey");
+        if (string != null && importdata == null) {
+            updatePet();
+            pageCache.remove("cacheKey");
+        }
+
+    }
+
+    @Override
+    public void afterBindData(EventObject e) {
+        super.afterBindData(e);
+    }
+
+    @Override
+    public void afterDoOperation(AfterDoOperationEventArgs args) {
+        super.afterDoOperation(args);
+
+        //为更新绩效目标提供页面缓存
+        if (args.getOperateKey().equals("modify") || args.getOperateKey().equals("importdata")) {
+            IPageCache pageCache = this.getView().getPageCache();
+            pageCache.put("cacheKey", "cacheKey");
+            pageCache.put("start", "1");
+        }
+    }
+
+    //更新绩效目标
+    private void updatePet() {
+        BillList billList = this.getControl(AbstractListPlugin.BILLLISTID);
+        ListSelectedRowCollection listCollRow = billList.getCurrentListAllRowCollection();
+        Object[] primaryKeyValues = listCollRow.getPrimaryKeyValues();
+        //遍历id
+        for (Object primaryKeyValue : primaryKeyValues) {
+            //获取考核关系
+            DynamicObject assGx = BusinessDataServiceHelper.loadSingle(ASSESSMENT_GX, "id,uzi9_direct,uzi9_nothingness,uzi9_indirect,uzi9_confirm", new QFilter[]{new QFilter("id", QFilter.equals, primaryKeyValue)});
+            //获取评估对象
+            DynamicObject evaObj = BusinessDataServiceHelper.loadSingle(EVALUATION_OBJECT, "id", new QFilter[]{new QFilter("uzi9_assessment_gx", QFilter.equals, primaryKeyValue)});
+            //获取绩效目标
+            DynamicObject petTar = BusinessDataServiceHelper.loadSingle(PERF_TARGET, "id,uzi9_appperson,uzi9_appstatus", new QFilter[]{new QFilter("uzi9_evaobj", QFilter.equals, evaObj.get("id"))});
+
+            if (petTar == null || assGx == null) {
+                this.getView().showErrorNotification("评估对象 - 考核关系 - 绩效目标 三者出现断裂,通知开发人员");
+                return;
+            }
+            //更新绩效目标(填报审批人)
+            petTar.set("uzi9_appperson", assGx.get("uzi9_confirm"));
+            SaveServiceHelper.saveOperate(PERF_TARGET, new DynamicObject[]{petTar});
+        }
+    }
+}

+ 57 - 4
code/opmcepaq/uzi9-uzi9q-opmcepaq-epaq/src/main/java/uzi9/uzi9q/opmcepaq/epaq/plugin/form/zd/EvaluationObjectF7ilterFormPlugin.java

@@ -2,6 +2,8 @@ package uzi9.uzi9q.opmcepaq.epaq.plugin.form.zd;
 
 
 import kd.bos.dataentity.entity.DynamicObject;
+import kd.bos.dataentity.resource.ResManager;
+import kd.bos.entity.datamodel.ListSelectedRowCollection;
 import kd.bos.entity.filter.FilterCondition;
 import kd.bos.form.control.Button;
 import kd.bos.form.control.Control;
@@ -12,14 +14,13 @@ import kd.bos.form.field.events.BeforeF7SelectEvent;
 import kd.bos.form.field.events.BeforeF7SelectListener;
 import kd.bos.form.plugin.AbstractFormPlugin;
 import kd.bos.list.BillList;
+import kd.bos.list.plugin.AbstractListPlugin;
 import kd.bos.orm.datamanager.DataEntityCacheManager;
 import kd.bos.orm.query.QFilter;
 import kd.bos.servicehelper.BusinessDataServiceHelper;
 import kd.sdk.plugin.Plugin;
 
-import java.util.ArrayList;
-import java.util.EventObject;
-import java.util.List;
+import java.util.*;
 
 /**
  * bou_user动态表单插件(评估对象,从其他考核活动引入)
@@ -49,7 +50,19 @@ public class EvaluationObjectF7ilterFormPlugin extends AbstractFormPlugin implem
         if (control != null) {
             control.addAfterF7SelectListener(this);
         }
+        // 注册确定按钮
+        Button confirmButton = this.getView().getControl("btncancel");
+        if (confirmButton != null) {
+            confirmButton.addClickListener(this);
+        }
+
+        // 注册取消按钮
+        Button cancelButton = this.getView().getControl("btnok");
+        if (cancelButton != null) {
+            cancelButton.addClickListener(this);
+        }
         isListenerRegistered = true;
+
     }
 
     @Override
@@ -70,7 +83,9 @@ public class EvaluationObjectF7ilterFormPlugin extends AbstractFormPlugin implem
                 return;
             }
             //获取考核活动id
-            Object id = value.get("id");
+            Long id = (Long)value.get("id");
+            //保存选择活动id
+            this.getView().setReturnData(id);
             //条件设置
             QFilter qFilter = new QFilter("uzi9_assessment_activity.id", QFilter.equals, id);
             //对评估对象进行查询
@@ -94,6 +109,11 @@ public class EvaluationObjectF7ilterFormPlugin extends AbstractFormPlugin implem
                 }
             }
         }
+        if ("btnok".equals(key)) {
+            handleConfirm();
+        } else if ("btncancel".equals(key)) {
+            handleCancel();
+        }
     }
 
 
@@ -104,4 +124,37 @@ public class EvaluationObjectF7ilterFormPlugin extends AbstractFormPlugin implem
 
         }
     }
+    private void handleConfirm() {
+        try {
+            // 获取选中的考核活动
+            DynamicObject selectedActivity = (DynamicObject) this.getModel().getValue("uzi9_assessment_activity");
+            if (selectedActivity == null) {
+                this.getView().showTipNotification("请先选择考核活动");
+                return;
+            }
+            BillList billList = this.getControl(AbstractListPlugin.BILLLISTID);
+            ListSelectedRowCollection collection = billList.getSelectedRows();
+            if (collection.isEmpty()) {
+                this.getView().showTipNotification("请至少选择一条数据");
+                return;
+            }
+            Map<String,Object> map = new HashMap<>();
+
+            // 封装活动id和选择行
+            map.put("id", selectedActivity.get("id"));
+            map.put("row",collection);
+            // 返回Long类型数据
+            this.getView().returnDataToParent(map);
+            this.getView().close();
+
+        } catch (Exception e) {
+            this.getView().showErrorNotification("处理失败: " + e.getMessage());
+        }
+    }
+
+    private void handleCancel() {
+        // 返回null表示取消
+        this.getView().setReturnData(null);
+        this.getView().close();
+    }
 }

+ 429 - 83
code/opmcepaq/uzi9-uzi9q-opmcepaq-epaq/src/main/java/uzi9/uzi9q/opmcepaq/epaq/plugin/form/zd/EvaluationObjectListPlugin.java

@@ -1,18 +1,23 @@
 package uzi9.uzi9q.opmcepaq.epaq.plugin.form.zd;
 
+import com.grapecity.documents.excel.H;
+import kd.bos.bill.BillShowParameter;
 import kd.bos.dataentity.OperateOption;
 import kd.bos.dataentity.entity.DynamicObject;
 import kd.bos.dataentity.entity.DynamicObjectCollection;
+import kd.bos.dataentity.entity.LocaleString;
 import kd.bos.dataentity.entity.OrmLocaleValue;
 import kd.bos.entity.datamodel.ListSelectedRow;
 import kd.bos.entity.datamodel.ListSelectedRowCollection;
 import kd.bos.entity.operate.result.OperationResult;
+import kd.bos.entity.property.BillTypeProp;
 import kd.bos.form.*;
+import kd.bos.form.container.Tab;
 import kd.bos.form.control.Control;
 import kd.bos.form.control.events.ItemClickEvent;
-import kd.bos.form.events.ClosedCallBackEvent;
-import kd.bos.form.events.SetFilterEvent;
+import kd.bos.form.events.*;
 import kd.bos.list.BillList;
+import kd.bos.list.IListColumn;
 import kd.bos.list.ListShowParameter;
 import kd.bos.list.plugin.AbstractListPlugin;
 import kd.bos.orm.query.QCP;
@@ -22,55 +27,68 @@ import kd.bos.servicehelper.BusinessDataServiceHelper;
 import kd.bos.servicehelper.operation.DeleteServiceHelper;
 import kd.bos.servicehelper.operation.SaveServiceHelper;
 import kd.sdk.plugin.Plugin;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+import org.springframework.transaction.annotation.Transactional;
 
 import java.util.ArrayList;
 import java.util.EventObject;
+import java.util.HashMap;
+import java.util.Map;
 
 /**
  * 评估对象标准单据列表插件
  */
 public class EvaluationObjectListPlugin extends AbstractListPlugin implements Plugin {
 
+    //评估对象表单标识
+    private static final String EVALUATION_OBJECT = "uzi9_evaluation_object";
+    //考核关系表单标识
+    private static final String ASSESSMENT_GX = "uzi9_assessment_gx";
+    //人员表单标识
+    private static final String BOS_USER = "bos_user";
+    //绩效目标标识
+    private static final String PERF_TARGET = "uzi9_perftarget";
+
+    private static final Logger log = LoggerFactory.getLogger(EvaluationObjectListPlugin.class);
+
+
     @Override
     public void setFilter(SetFilterEvent e) {
         super.setFilter(e);
-        //添加过滤条件,只能看见当前考核下的评估对象
+        //添加过滤条件,只能看见当前考核下的评估对象(后期放开注解)
         Object ActivityId = this.getView().getFormShowParameter().getCustomParam("ActivityId");
-        /*QFilter qFilter = new QFilter("uzi9_assessment_activity.id", QCP.equals, ActivityId);
+/*        QFilter qFilter = new QFilter("uzi9_assessment_activity.id", QCP.equals, ActivityId);
         e.getQFilters().add(qFilter);*/
         e.setOrderBy("billno asc");
     }
 
+    @Override
+    public void afterBindData(EventObject e) {
+        super.afterBindData(e);
+        //设置标题为活动名称
+        Object activityName = this.getView().getFormShowParameter().getCustomParam("ActivityName");
+        if (activityName != null) {
+            LocaleString localeTitle = new LocaleString(activityName.toString());
+            this.getView().setFormTitle(localeTitle);
+        }
+
+    }
+
     @Override
     public void itemClick(ItemClickEvent evt) {
         super.itemClick(evt);
         String itemKey = evt.getItemKey();
         if (itemKey.equals("uzi9_new")) {
-            ListShowParameter parameter = new ListShowParameter();
-            //设置实体id
-            parameter.setBillFormId("bos_user");
-            //设置选择状态
-            parameter.setLookUp(true);
-            //设置展开
-            parameter.getOpenStyle().setShowType(ShowType.Modal);
-            //设置模版id
-            parameter.setFormId("bos_usertreelistf7");
-            //设置回调
-            parameter.setCloseCallBack(new CloseCallBack(this, "add"));
-            // 设置展开宽度,高度
-            StyleCss styleCss = new StyleCss();
-            styleCss.setWidth("800");
-            styleCss.setHeight("500");
-            parameter.getOpenStyle().setInlineStyleCss(styleCss);
-            //跳转
-            getView().showForm(parameter);
+            //跳转bos_user人员
+            bosUserJump("add");
         }
 
         //从其他考核活动进行新增
         if (itemKey.equals("uzi9_pull")) {
             ListShowParameter parameter = new ListShowParameter();
             //设置实体id
-            parameter.setBillFormId("bos_user");
+            parameter.setBillFormId(BOS_USER);
             //设置选择状态
             parameter.setLookUp(true);
             //设置展开
@@ -87,83 +105,199 @@ public class EvaluationObjectListPlugin extends AbstractListPlugin implements Pl
             //跳转
             getView().showForm(parameter);
         }
+
         //删除效验
         if (itemKey.equals("uzi9_delete")) {
+            ConfirmCallBackListener callback = new ConfirmCallBackListener("delete", this);
+            this.getView().showConfirm("删除选中的评估对象后绩效目标及评估信息将无法恢复,是否确认删除?", MessageBoxOptions.YesNo, callback);
+        }
 
+        //修改目标确认人
+        if (itemKey.equals("uzi9_confirm")) {
+            //获取选择行的id主键
+            BillList billList = this.getControl(AbstractListPlugin.BILLLISTID);
+            Object[] primaryKeyValues = billList.getSelectedRows().getPrimaryKeyValues();
+            if (primaryKeyValues.length == 0) {
+                this.getView().showTipNotification("请至少选择一行数据");
+                return;
+            }
+            if (primaryKeyValues.length != 1) {
+                this.getView().showTipNotification("请只选择一位人员进行目标确认人的修改");
+                return;
+            }
+            //跳转bos_user人员
+            bosUserJump("confirmModify");
+        }
+
+        //更新评估对象人员信息
+        if (itemKey.equals("uzi9_bos_update")) {
+            BillList billList = this.getControl(AbstractListPlugin.BILLLISTID);
+            Object[] primaryKeyValues = billList.getSelectedRows().getPrimaryKeyValues();
+            if (primaryKeyValues.length == 0) {
+                this.getView().showTipNotification("请选择需要更新的数据");
+                return;
+            }
+            //更新
+            bosUpdate(primaryKeyValues);
+        }
+
+        //导入目标确认人
+        if (itemKey.equals("uzi9_target")) {
+            ListShowParameter parameter = new ListShowParameter();
+            parameter.setFormId("bos_list");
+            parameter.setBillFormId("uzi9_assessment_gx");
+            parameter.getOpenStyle().setShowType(ShowType.Modal);
+            parameter.setCustomParam("importdata", "importdata");
+            this.getView().showForm(parameter);
         }
     }
 
+    //提示框回调
+    @Override
+    public void confirmCallBack(MessageBoxClosedEvent messageBoxClosedEvent) {
+        super.confirmCallBack(messageBoxClosedEvent);
+        //评估对象实际删除业务逻辑,顺带把考核关系也一起删除
+        if ("delete".equals(messageBoxClosedEvent.getCallBackId()) && messageBoxClosedEvent.getResult() == MessageBoxResult.Yes) {
+            //获取列表参数
+            BillList billList = this.getControl(AbstractListPlugin.BILLLISTID);
+            ListSelectedRowCollection selectedRows = billList.getSelectedRows();
+            Object[] primaryKeyValues = selectedRows.getPrimaryKeyValues();
+            if (primaryKeyValues.length <= 0) {
+                return;
+            }
+            int success = 0;
+            int failure = 0;
+            QFilter qFilter = new QFilter("id", QFilter.in, primaryKeyValues);
+            DynamicObject[] load = BusinessDataServiceHelper.load(EVALUATION_OBJECT, "id,uzi9_progress,uzi9_employeeid", new QFilter[]{qFilter});
+            for (DynamicObject dynamicObject : load) {
+                String progress = dynamicObject.get("uzi9_progress").toString();
+                if (progress.equals("1")) {
+                    success++;
+                    //删除评估对象
+                    QFilter qFilterS = new QFilter("id", QFilter.equals, dynamicObject.get("id"));
+                    DeleteServiceHelper.delete(EVALUATION_OBJECT, new QFilter[]{qFilterS});
+                    //删除考核关系(通过关联的评估对象进行删除)
+                    QFilter qFilter2 = new QFilter("uzi9_evaluation_object", QFilter.equals, dynamicObject.get("id"));
+                    DeleteServiceHelper.delete(ASSESSMENT_GX, new QFilter[]{qFilter2});
+                    //删除绩效目标(通过关联的评估对象进行删除)
+                    DeleteServiceHelper.delete(PERF_TARGET, new QFilter[]{new QFilter("uzi9_evaobj", QFilter.equals, dynamicObject.get("id"))});
+                } else {
+                    failure++;
+                }
+            }
+            this.getView().showMessage("成功删除个数:" + success + " --- 失败删除的个数:" + failure);
+            this.getView().showTipNotification("考核进度为“未开始”的评估对象才能删除。已完成考核评估对象不可以删除");
+            this.getView().updateView();
+        }
+    }
 
+    //动态表单回调
     @Override
     public void closedCallBack(ClosedCallBackEvent closedCallBackEvent) {
         super.closedCallBack(closedCallBackEvent);
         // 接收回调
         //获取回调标识
         String actionId = closedCallBackEvent.getActionId();
+
+        //新增评估对象
         if (actionId.equals("add")) {
-            if (closedCallBackEvent.getReturnData() instanceof ListSelectedRowCollection) {
-                ListSelectedRowCollection selectCollections = (ListSelectedRowCollection) closedCallBackEvent.getReturnData();
-                ArrayList list = new ArrayList();
-                for (ListSelectedRow row : selectCollections) {
-                    // list存储id
-                    list.add(row.getPrimaryKeyValue());
-                }
-                // 构造QFilte
-                QFilter qFilter = new QFilter("id", QFilter.equals, list.get(0));
-                for (int i = 1; i < list.size(); i++) {
-                    qFilter = qFilter.or(new QFilter("id", QFilter.equals, list.get(i)));
-                }
-                // 将选中的id对应的数据从数据库加载出来
-                DynamicObject[] load = BusinessDataServiceHelper.load("bos_user", "id,name,number,entryentity,startdate,entryentity.post,entryentity.dpt,entryentity.ispartjob", qFilter.toArray());
-                for (DynamicObject dynamicObject : load) {
-                    //新增
-                    userAddOne(dynamicObject);
-                }
+            DynamicObject[] dynamicObjects = userCallback(closedCallBackEvent);
+            if (dynamicObjects == null) {
+                return;
+            }
+            for (DynamicObject dynamicObject : dynamicObjects) {
+                //新增
+                userAddOne(dynamicObject);
             }
         }
+
+        //从其他评估对象引入进行新增
         if (actionId.equals("pull")) {
-            if (closedCallBackEvent.getReturnData() instanceof ListSelectedRowCollection) {
-                ListSelectedRowCollection selectCollections = (ListSelectedRowCollection) closedCallBackEvent.getReturnData();
-                ArrayList list = new ArrayList();
-                for (ListSelectedRow row : selectCollections) {
-                    // list存储id
-                    list.add(row.getPrimaryKeyValue());
-                }
-                // 构造QFilte
-                QFilter qFilter = new QFilter("id", QFilter.equals, list.get(0));
-                for (int i = 1; i < list.size(); i++) {
-                    qFilter = qFilter.or(new QFilter("id", QFilter.equals, list.get(i)));
-                }
-                // 将选中的id对应的数据从数据库加载出来
-                DynamicObject[] load = BusinessDataServiceHelper.load("bos_user", "id,name,number", qFilter.toArray());
-                //新增
-                userAddTwo(load);
+            Map<String, Object> userMap = userCallbackTwo(closedCallBackEvent);
+            if (userMap == null) {
+                return;
             }
+            //引入新增
+            userAddTwo(userMap);
         }
 
+        //修改目标确认人
+        if (actionId.equals("confirmModify")) {
+            DynamicObject[] dynamicObjects = userCallback(closedCallBackEvent);
+            if (dynamicObjects == null){
+                return;
+            }
+            if (dynamicObjects.length != 1) {
+                this.getView().showTipNotification("目标确认人,只能选择一个");
+                return;
+            }
+            //修改确认人
+            DynamicObject dynamicObject = dynamicObjects[0];
+            confirmModify(dynamicObject);
+        }
+
+    }
+
+    //回调获取人员数据
+    private DynamicObject[] userCallback(ClosedCallBackEvent closedCallBackEvent) {
+        if (closedCallBackEvent.getReturnData() instanceof ListSelectedRowCollection) {
+            ListSelectedRowCollection selectCollections = (ListSelectedRowCollection) closedCallBackEvent.getReturnData();
+            Object[] primaryKeyValues = selectCollections.getPrimaryKeyValues();
+            QFilter qFilter = new QFilter("id", QFilter.in, primaryKeyValues);
+            // 将选中的id对应的数据从数据库加载出来
+            DynamicObject[] load = BusinessDataServiceHelper.load(BOS_USER, "id,name,number,entryentity,startdate,entryentity.post,entryentity.dpt,entryentity.ispartjob", new QFilter[]{qFilter});
+            return load;
+        }
+
+        return null;
+    }
 
+    //专门为引入所做的获取人员数据(包含考核活动)
+    private Map<String, Object> userCallbackTwo(ClosedCallBackEvent event) {
+        if (event.getReturnData() instanceof Map) {
+            Map<String, Object> map = (Map<String, Object>) event.getReturnData();
+            //获取活动id
+            Object id = map.get("id");
+            ListSelectedRowCollection row = (ListSelectedRowCollection) map.get("row");
+            //获取选择行参数
+            Object[] primaryKeyValues = row.getPrimaryKeyValues();
+            QFilter qFilter = new QFilter("id", QFilter.in, primaryKeyValues);
+            // 将选中的id对应的数据从数据库加载出来
+            DynamicObject[] load = BusinessDataServiceHelper.load(BOS_USER, "id,name,number,entryentity,startdate,entryentity.post,entryentity.dpt,entryentity.ispartjob", new QFilter[]{qFilter});
+            Map<String, Object> userMap = new HashMap<>();
+            userMap.put("activityId", id);
+            userMap.put("load", load);
+            return userMap;
+        }
+        return null;
     }
 
-    //添加方法一(无论用什么方法一切的前提是拿到员工工号,无论是一个还是一群)
+
+    //添加方法一(评估对象-考核关系-绩效目标)
     public void userAddOne(DynamicObject useradd) {
         //获取用户工号
         Object employeeId = useradd.get("number");
+        //获取通过跳转传过来的活动id并查询对应的活动
+        Object activityId = this.getView().getFormShowParameter().getCustomParam("ActivityId");
         //判断条件是否有工号相同的参数
         QFilter qFilter = new QFilter("uzi9_employeeid", QFilter.equals, employeeId);
+        QFilter qFilter1 = new QFilter("uzi9_assessment_activity", QFilter.equals, activityId);
         //对评估对象表进行筛选
-        DynamicObject employeeIdCheck = BusinessDataServiceHelper.loadSingle("uzi9_evaluation_object", "uzi9_employeeid", new QFilter[]{qFilter});
+        DynamicObject employeeIdCheck = BusinessDataServiceHelper.loadSingle(EVALUATION_OBJECT, "uzi9_employeeid", new QFilter[]{qFilter.and(qFilter1)});
 
-        //获取通过跳转传过来的活动id并查询对应的活动
-        Object activityId = this.getView().getFormShowParameter().getCustomParam("ActivityId");
+        if (activityId == null) {
+            this.getView().showTipNotification("错误进入,当前没有考核活动id,请从考核活动进入");
+            return;
+        }
         DynamicObject assessment = BusinessDataServiceHelper.loadSingle("uzi9_assessment_activity", "id", new QFilter[]{new QFilter("id", QFilter.equals, activityId)});
 
         //判断是否为空
         if (employeeIdCheck != null) {
-            this.getView().showErrorNotification("员工:" + useradd.get("name") + "已经加入了本考核活动或其他考核活动");
+            this.getView().showErrorNotification("员工:" + useradd.get("name") + "已经加入了本考核活动");
             return;
         }
 
-        DynamicObject dynamicObject = BusinessDataServiceHelper.newDynamicObject("uzi9_evaluation_object");
+        DynamicObject dynamicObject = BusinessDataServiceHelper.newDynamicObject(EVALUATION_OBJECT);
         //语言设置默认为zh_CN
         Object name = getDefaultValue(useradd.get("name"));
         //姓名
@@ -196,10 +330,6 @@ public class EvaluationObjectListPlugin extends AbstractListPlugin implements Pl
                 }
             }
         }
-        /*//组织
-        dynamicObject.set("uzi9_orgfield", useradd.get("组织标识"));
-        //岗位
-        dynamicObject.set("uzi9_position", useradd.get("岗位标识"));*/
         //入职日期
         dynamicObject.set("uzi9_date_joining", useradd.get("startdate"));
         //考核进度(默认为:未开始 - 1)
@@ -212,42 +342,237 @@ public class EvaluationObjectListPlugin extends AbstractListPlugin implements Pl
         dynamicObject.set("enable", 1);
         //数据状态
         dynamicObject.set("status", "A");
-        OperationResult result = SaveServiceHelper.saveOperate("uzi9_evaluation_object", new DynamicObject[]{dynamicObject}, OperateOption.create());
+
+        //新增评估对象
+        OperationResult result = SaveServiceHelper.saveOperate(EVALUATION_OBJECT, new DynamicObject[]{dynamicObject}, OperateOption.create());
+        //新增考核关系(需要与评估对象链接,更新评估对象)
+        HashMap<String, DynamicObject> relationship = relationship(dynamicObject);
+        relationship.put(BOS_USER, useradd);
+        //通过relationship的(考核关系,评估对象,用户)新增绩效目标
+        addTarget(relationship);
+
         this.getView().updateView();
         if (result.isSuccess()) {
-            this.getView().showSuccessNotification("新增数据成功");
+            this.getView().showSuccessNotification("新增评估对象数据成功");
             this.getView().invokeOperation("refresh");
         } else {
-            this.getView().showErrorNotification("新增数据失败");
+            this.getView().showErrorNotification("新增评估对象数据失败");
             this.getView().invokeOperation("refresh");
         }
     }
 
-    //添加方法二(沟通bos_user中获取工号,修改评估对象的考核活动进行新增)
-    public void userAddTwo(DynamicObject[] useradds) {
+    //添加方法二引入(评估对象-考核关系-绩效目标)
+    public void userAddTwo(Map<String, Object> userMap) {
+        DynamicObject[] useradds = (DynamicObject[]) userMap.get("load");
         //获取活动id活动活动对象
         for (DynamicObject useradd : useradds) {
             Object number = useradd.get("number");
-            //通过工号获取评估对象
-            DynamicObject dynamicObject = BusinessDataServiceHelper.loadSingle("uzi9_evaluation_object", "id,uzi9_assessment_activity,name", new QFilter[]{new QFilter("uzi9_employeeid", QFilter.equals, number)});
-            if (dynamicObject == null) {
+
+            //通过工号和活id获取评估对象(不是当前考核活动)
+            DynamicObject evaluation = BusinessDataServiceHelper.loadSingle(EVALUATION_OBJECT, "id,uzi9_assessment_activity,name,uzi9_assessment_gx", new QFilter[]{new QFilter("uzi9_employeeid", QFilter.equals, number).and(new QFilter("uzi9_assessment_activity", QCP.equals, userMap.get("activityId")))});
+            //获取评估对象下的考核关系
+            DynamicObject assessment = BusinessDataServiceHelper.loadSingle(ASSESSMENT_GX, "id,uzi9_assessment_activity", new QFilter[]{new QFilter("uzi9_evaluation_object", QCP.equals, evaluation.get("id"))});
+            //获取绩效目标
+            DynamicObject perTar = BusinessDataServiceHelper.loadSingle(PERF_TARGET, "id,uzi9_activity", new QFilter[]{new QFilter("uzi9_evaobj", QCP.equals, evaluation.get("id"))});
+
+            if (evaluation == null || assessment == null) {
                 this.getView().showTipNotification("当前员工没有加入任何考核活动,请通过新增进行添加");
                 return;
             }
+
             //获取当下的考核活动id
             Object activityId = this.getView().getFormShowParameter().getCustomParam("ActivityId");
+            if (activityId == null) {
+                this.getView().showTipNotification("当前进入错误没有考核活动id");
+                return;
+            }
+
+            if (activityId.equals(userMap.get("activityId"))) {
+                this.getView().showTipNotification("当前考核活动与引入考核活动一致,请重新添加");
+                return;
+            }
+
+            //通过工号和活动id获取评估对象(是当前考核活动)
+            DynamicObject evaluationPd = BusinessDataServiceHelper.loadSingle(EVALUATION_OBJECT, "id,uzi9_assessment_activity,name,uzi9_assessment_gx", new QFilter[]{new QFilter("uzi9_employeeid", QFilter.equals, number).and(new QFilter("uzi9_assessment_activity", QCP.equals, activityId))});
+            if (evaluationPd != null) {
+                this.getView().showTipNotification("当前人员已经进入该考核活动");
+                return;
+            }
+
             //查询考核活动
-            DynamicObject assessment = BusinessDataServiceHelper.loadSingle("uzi9_assessment_activity", "id", new QFilter[]{new QFilter("id", QFilter.equals, activityId)});
-            //修改评价对象的考核活动
-            dynamicObject.set("uzi9_assessment_activity", assessment);
-            //更新数据
-            OperationResult result = SaveServiceHelper.saveOperate("uzi9_evaluation_object", new DynamicObject[]{dynamicObject}, OperateOption.create());
+            DynamicObject assessmentHd = BusinessDataServiceHelper.loadSingle("uzi9_assessment_activity", "id", new QFilter[]{new QFilter("id", QFilter.equals, activityId)});
+
+            //修改评估对象的考核活动
+            evaluation.set("uzi9_assessment_activity", assessmentHd);
+            //修改考核关系的考核活动
+            assessment.set("uzi9_assessment_activity", assessmentHd);
+            //修改绩效目标的考核活动
+            perTar.set("uzi9_activity", assessmentHd);
+
+
+            //更新考核对象
+            OperationResult result = SaveServiceHelper.saveOperate(EVALUATION_OBJECT, new DynamicObject[]{evaluation}, OperateOption.create());
+            //更新考核关系(后续有了上级对象需要进行修改)
+            SaveServiceHelper.saveOperate(ASSESSMENT_GX, new DynamicObject[]{assessment});
+            //更新绩效目标
+            SaveServiceHelper.saveOperate(PERF_TARGET, new DynamicObject[]{perTar});
+
+
             if (result.isSuccess()) {
-                this.getView().showSuccessNotification(dynamicObject.get("name") + "转移成功");
+                this.getView().showSuccessNotification(evaluation.get("name") + " 考核活动转移成功");
             } else {
-                this.getView().invokeOperation(dynamicObject.get("name") + "转移失败");
+                this.getView().invokeOperation(evaluation.get("name") + "转移失败");
+            }
+        }
+    }
+
+    //考核关系新增(object 为评估对象的封装配置(没有准确的id))更新评估对象
+    public HashMap<String, DynamicObject> relationship(DynamicObject object) {
+        //获取当前考核活动id
+        Object activityId = this.getView().getFormShowParameter().getCustomParam("ActivityId");
+        //获取评估对象
+        DynamicObject evObj = BusinessDataServiceHelper.loadSingle(EVALUATION_OBJECT, "id,uzi9_assessment_gx,uzi9_orgfield,uzi9_assessment_activity,uzi9_employeeid", new QFilter[]{new QFilter("uzi9_employeeid", QFilter.equals, object.get("uzi9_employeeid")).and(new QFilter("uzi9_assessment_activity", QCP.equals, activityId))});
+        DynamicObject dynamicObject = BusinessDataServiceHelper.newDynamicObject(ASSESSMENT_GX);
+        //考核对象封装
+        //姓名
+        dynamicObject.set("name", object.get("name"));
+        //工号
+        dynamicObject.set("uzi9_employeeid", object.get("uzi9_employeeid"));
+        //评估对象
+        dynamicObject.set("uzi9_evaluation_object", evObj);
+      /*  //直接上级 后续准备
+        dynamicObject.set("uzi9_direct",);
+        //虚线上级(可有可无)
+        dynamicObject.set("uzi9_nothingness",);
+        //间接上级
+        dynamicObject.set("uzi9_indirect",);*/
+        //目标确认人(为了方便先写死)
+        DynamicObject user = BusinessDataServiceHelper.loadSingle(BOS_USER, "id", new QFilter[]{new QFilter("id", QFilter.equals, 2284119514889060352L)});
+        dynamicObject.set("uzi9_confirm", user);
+        //考核活动
+        dynamicObject.set("uzi9_assessment_activity", object.get("uzi9_assessment_activity"));
+        //使用状态
+        dynamicObject.set("enable", 1);
+        //数据状态
+        dynamicObject.set("status", "A");
+        OperationResult result = SaveServiceHelper.saveOperate(ASSESSMENT_GX, new DynamicObject[]{dynamicObject}, OperateOption.create());
+        //获取新增的考核关系
+        DynamicObject assGx = BusinessDataServiceHelper.loadSingle(ASSESSMENT_GX, "id,uzi9_confirm", new QFilter[]{new QFilter("uzi9_evaluation_object,uzi9_confirm", QFilter.equals, evObj.get("id"))});
+        evObj.set("uzi9_assessment_gx", assGx);
+
+        //更新评估对象
+        SaveServiceHelper.update(new DynamicObject[]{evObj});
+        //获取数据库中的评估对象和考核关系(有id的)回传
+        HashMap<String, DynamicObject> map = new HashMap<>();
+        map.put(EVALUATION_OBJECT, evObj);
+        map.put(ASSESSMENT_GX, assGx);
+        if (result.isSuccess()) {
+            log.info("新增考核关系数据成功");
+        } else {
+            log.info("新增考核关系数据失败");
+        }
+        return map;
+    }
+
+    //新增绩效目标(传入评估对象和评估对象的人员信息)
+    public void addTarget(HashMap<String, DynamicObject> map) {
+        DynamicObject evaluation = map.get(EVALUATION_OBJECT);
+        DynamicObject assGx = map.get(ASSESSMENT_GX);
+        DynamicObject user = map.get(BOS_USER);
+
+        DynamicObject perTar = BusinessDataServiceHelper.newDynamicObject(PERF_TARGET);
+        //绩效活动
+        perTar.set("uzi9_activity", evaluation.get("uzi9_assessment_activity"));
+        //员工
+        perTar.set("uzi9_person", user);
+        //评估对象
+        perTar.set("uzi9_evaobj", evaluation);
+        //填报审批人
+        perTar.set("uzi9_appperson", assGx.get("uzi9_confirm"));
+        //填报审批状态(未启动)
+        perTar.set("uzi9_appstatus", "notstarted");
+        //数据状态
+        perTar.set("billstatus", "A");
+        //组织
+        perTar.set("org", evaluation.get("uzi9_orgfield"));
+
+        OperationResult result = SaveServiceHelper.saveOperate(PERF_TARGET, new DynamicObject[]{perTar}, OperateOption.create());
+        if (result.isSuccess()) {
+            log.info("新增绩效目标成功");
+        } else {
+            log.info("新增绩效目标失败");
+        }
+    }
+
+
+    //目标确认人修改(考核关系 - 绩效目标)
+    private void confirmModify(DynamicObject user) {
+        //获取选择行的id
+        BillList billList = this.getControl(AbstractListPlugin.BILLLISTID);
+        Object[] primaryKeyValues = billList.getSelectedRows().getPrimaryKeyValues();
+        Object primaryKeyValue = primaryKeyValues[0];
+
+        //获取评估对象下的考核关系
+        DynamicObject evaluation = BusinessDataServiceHelper.loadSingle(EVALUATION_OBJECT, "id,uzi9_employeeid,uzi9_assessment_gx", new QFilter[]{new QFilter("id", QFilter.equals, primaryKeyValue)});
+        DynamicObject assessmentGx = (DynamicObject) evaluation.get(ASSESSMENT_GX);
+        //通过评估对象获取绩效目标
+        DynamicObject petTar = BusinessDataServiceHelper.loadSingle(PERF_TARGET, "id,uzi9_appperson,uzi9_appstatus", new QFilter[]{new QFilter("uzi9_evaobj", QFilter.equals, primaryKeyValue)});
+
+
+        if (assessmentGx == null) {
+            this.getView().showErrorNotification("选择的评估对象,没有对应的考核关系,请联系开发人员");
+            return;
+        }
+        //通过封装进行更新(考核关系)
+        DynamicObject assessmentGx2 = BusinessDataServiceHelper.newDynamicObject(ASSESSMENT_GX);
+        assessmentGx2.set("uzi9_confirm", user);
+        assessmentGx2.set("id", assessmentGx.get("id"));
+
+        //通过查询进行更新(绩效目标)
+        petTar.set("uzi9_appperson",user);
+
+        try {
+            SaveServiceHelper.update(new DynamicObject[]{assessmentGx2}, OperateOption.create());
+            SaveServiceHelper.saveOperate(PERF_TARGET,new DynamicObject[]{petTar});
+            this.getView().showSuccessNotification(user.get("name") + "目标确认人修改成功");
+        } catch (Exception e) {
+            this.getView().showSuccessNotification(user.get("name") + "目标确认人修改失败");
+            throw new RuntimeException(e);
+        }
+
+    }
+
+    //更新评估对象信息(目前更新的情况为,bos_user中的数据就是最新的,不存在历史数据)
+    private void bosUpdate(Object[] primaryKeyValues) {
+        //通过id获取评估对象
+        DynamicObject[] load = BusinessDataServiceHelper.load(EVALUATION_OBJECT, "id,uzi9_employeeid,uzi9_position,uzi9_orgfield", new QFilter[]{new QFilter("id", QFilter.in, primaryKeyValues)});
+        //遍历每一个评估对象,进行更新
+        for (DynamicObject dynamicObject : load) {
+            Object employeeid = dynamicObject.get("uzi9_employeeid");
+            //获取人员数据
+            DynamicObject bosUser = BusinessDataServiceHelper.loadSingle(BOS_USER, "number,entryentity,entryentity.post,entryentity.dpt,entryentity.ispartjob", new QFilter[]{new QFilter("number", QFilter.equals, employeeid)});
+            //获取人员中部门分录单据体
+            DynamicObjectCollection entryentity = bosUser.getDynamicObjectCollection("entryentity");
+            for (DynamicObject entry : entryentity) {
+                //只要主岗位
+                boolean bl = (boolean) entry.get("ispartjob");
+                if (!bl) {
+                    //岗位更新
+                    Object post = entry.get("post");
+                    if (post != null) {
+                        dynamicObject.set("uzi9_position", post);
+                    }
+                    //组织更新
+                    Object dpt = entry.get("dpt");
+                    if (dpt != null) {
+                        dynamicObject.set("uzi9_orgfield", dpt);
+                    }
+                }
             }
+            SaveServiceHelper.saveOperate(EVALUATION_OBJECT, new DynamicObject[]{dynamicObject});
         }
+        this.getView().updateView();
+        this.getView().showSuccessNotification("更新完毕");
     }
 
     //语言设置
@@ -260,5 +585,26 @@ public class EvaluationObjectListPlugin extends AbstractListPlugin implements Pl
         return localeValue;
     }
 
-
+    //人员bos_user跳转
+    private void bosUserJump(String callback) {
+        //跳转调人员bos_user去选择
+        ListShowParameter parameter = new ListShowParameter();
+        //设置实体id
+        parameter.setBillFormId(BOS_USER);
+        //设置选择状态
+        parameter.setLookUp(true);
+        //设置展开
+        parameter.getOpenStyle().setShowType(ShowType.Modal);
+        //设置模版id
+        parameter.setFormId("bos_usertreelistf7");
+        //设置回调
+        parameter.setCloseCallBack(new CloseCallBack(this, callback));
+        // 设置展开宽度,高度
+        StyleCss styleCss = new StyleCss();
+        styleCss.setWidth("800");
+        styleCss.setHeight("500");
+        parameter.getOpenStyle().setInlineStyleCss(styleCss);
+        //跳转
+        getView().showForm(parameter);
+    }
 }

+ 317 - 0
code/opmcepaq/uzi9-uzi9q-opmcepaq-epaq/src/main/java/uzi9/uzi9q/opmcepaq/epaq/plugin/form/zd/PerformanceObjectivesListPlugin.java

@@ -0,0 +1,317 @@
+package uzi9.uzi9q.opmcepaq.epaq.plugin.form.zd;
+
+import kd.bos.context.RequestContext;
+import kd.bos.dataentity.OperateOption;
+import kd.bos.dataentity.entity.DynamicObject;
+import kd.bos.dataentity.entity.ILocaleString;
+import kd.bos.dataentity.entity.LocaleString;
+import kd.bos.entity.datamodel.ListSelectedRowCollection;
+import kd.bos.entity.operate.result.OperationResult;
+import kd.bos.form.ConfirmCallBackListener;
+import kd.bos.form.MessageBoxOptions;
+import kd.bos.form.MessageBoxResult;
+import kd.bos.form.control.Control;
+import kd.bos.form.control.events.ItemClickEvent;
+import kd.bos.form.events.MessageBoxClosedEvent;
+import kd.bos.form.events.SetFilterEvent;
+import kd.bos.list.BillList;
+import kd.bos.list.plugin.AbstractListPlugin;
+import kd.bos.message.api.MessageChannels;
+import kd.bos.orm.query.QCP;
+import kd.bos.orm.query.QFilter;
+import kd.bos.plugin.sample.dynamicform.pcform.form.template.AfterBindData;
+import kd.bos.servicehelper.BusinessDataServiceHelper;
+import kd.bos.servicehelper.operation.DeleteServiceHelper;
+import kd.bos.servicehelper.operation.SaveServiceHelper;
+import kd.bos.servicehelper.workflow.MessageCenterServiceHelper;
+import kd.bos.url.UrlService;
+import kd.bos.workflow.engine.msg.info.MessageInfo;
+import kd.sdk.plugin.Plugin;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+import java.util.ArrayList;
+import java.util.Collections;
+import java.util.Date;
+import java.util.EventObject;
+
+/**
+ * 绩效目标标准单据列表插件
+ */
+public class PerformanceObjectivesListPlugin extends AbstractListPlugin implements Plugin {
+
+    //评估对象表单标识
+    private static final String EVALUATION_OBJECT = "uzi9_evaluation_object";
+    //考核关系表单标识
+    private static final String ASSESSMENT_GX = "uzi9_assessment_gx";
+    //人员表单标识
+    private static final String BOS_USER = "bos_user";
+    //待办任务标识
+    private static final String MY_TASK_TB = "uzi9_mytasktb";
+    //绩效目标标识
+    private static final String PERF_TARGET = "uzi9_perftarget";
+    private static final org.apache.log4j.Logger log = org.apache.log4j.Logger.getLogger(PerformanceObjectivesListPlugin.class);
+
+
+    @Override
+    public void setFilter(SetFilterEvent e) {
+        super.setFilter(e);
+        //添加过滤条件,只能看见当前考核下的评估对象(后期放开注解)
+        Object ActivityId = this.getView().getFormShowParameter().getCustomParam("ActivityId");
+        if (ActivityId != null) {
+/*            QFilter qFilter = new QFilter("uzi9_activity.id", QCP.equals, ActivityId);
+            e.getQFilters().add(qFilter);*/
+            e.setOrderBy("billno asc");
+        }
+    }
+
+    @Override
+    public void itemClick(ItemClickEvent evt) {
+        super.itemClick(evt);
+        String itemKey = evt.getItemKey();
+        //启动目标设定
+        if (itemKey.equals("uzi9_start")) {
+            ConfirmCallBackListener callback = new ConfirmCallBackListener("uzi9_start", this);
+            this.getView().showConfirm("是否启动目标设定", MessageBoxOptions.YesNo, callback);
+        }
+    }
+
+    //弹窗回调
+    @Override
+    public void confirmCallBack(MessageBoxClosedEvent mage) {
+        super.confirmCallBack(mage);
+        String callBackId = mage.getCallBackId();
+        //进行目标设定的业务处理
+        if (callBackId.equals("uzi9_start") && mage.getResult() == MessageBoxResult.Yes) {
+
+            BillList billList = this.getControl(AbstractListPlugin.BILLLISTID);
+            Object[] primaryKeyValues = billList.getSelectedRows().getPrimaryKeyValues();
+            StringBuffer sb = new StringBuffer();
+            for (Object primaryKeyValue : primaryKeyValues) {
+                //获取绩效目标
+                DynamicObject perTar = BusinessDataServiceHelper.loadSingle(PERF_TARGET, "id,uzi9_evaobj,uzi9_status,uzi9_verson,uzi9_exeperson,uzi9_appstatus,uzi9_phasetime", new QFilter[]{new QFilter("id", QFilter.equals, primaryKeyValue)});
+                //获取评估对象(id,考核进度,绩效业务活动,绩效业务活动状态)
+                DynamicObject evaObj = (DynamicObject) perTar.get("uzi9_evaobj");
+                DynamicObject evaluation = BusinessDataServiceHelper.loadSingle(EVALUATION_OBJECT, "id,uzi9_progress,uzi9_business_activities,uzi9_activity_status,uzi9_employeeid,modifytime,uzi9_orgfield,uzi9_position,uzi9_assessment_activity,uzi9_assessment_gx", new QFilter[]{new QFilter("id", QFilter.equals, evaObj.get("id"))});
+                //获取考核关系
+                DynamicObject aGx = (DynamicObject) evaluation.get(ASSESSMENT_GX);
+                DynamicObject assessmentGx = BusinessDataServiceHelper.loadSingle(ASSESSMENT_GX, "id,uzi9_confirm", new QFilter[]{new QFilter("id", QFilter.equals, aGx.get("id"))});
+                //获取人员信息
+                DynamicObject user = BusinessDataServiceHelper.loadSingle(BOS_USER, "id,name", new QFilter[]{new QFilter("number", QFilter.equals, evaluation.get("uzi9_employeeid"))});
+
+                //进行判断,1:填报审批状态为:未启动。2:考核关系目标确认人:已存在
+                if (perTar.get("uzi9_appstatus").toString().equals("notstarted") && assessmentGx.get("uzi9_confirm") != null) {
+                    //添加填报当前处理人为当前评估对象
+                    perTar.set("uzi9_exeperson", user);
+                    //版本号默认初始为v1
+                    perTar.set("uzi9_verson", "v1");
+                    //填报审批状态为unsubmit - 未提交
+                    perTar.set("uzi9_appstatus", "unsubmit");
+                    //启动阶段时间
+                    perTar.set("uzi9_phasetime", new Date());
+                    //更新
+                    SaveServiceHelper.saveOperate(PERF_TARGET, new DynamicObject[]{perTar});
+                    //给每位员工发邮件业务
+                    //设置需要处理的消息链接(目前是测试,后期会进行修改)
+                    RequestContext ctx = RequestContext.get();
+                    String clientPath = UrlService.getDomainContextUrlByTenantCode(ctx.getTenantCode());
+                    StringBuilder contentUrl = new StringBuilder(clientPath);
+                    String formId = "uzi9_perftarget";
+                    contentUrl = contentUrl.append("?formId=").append(formId).append("&pkId=").append(perTar.getString("id"));
+
+                    //获取接收用户的id
+                    long userId = (Long) user.get("id");
+                    //消息发送
+                    // sendMessage(contentUrl.toString());
+                    sendMessage2(contentUrl.toString(), formId, perTar.getString("id"), userId);
+
+                    //评估对象,考核进度修改为:进行中 2 - 绩效业务活动:目标设定 1 - 绩效业务活动状态:制定中 1
+                    evaluation.set("uzi9_progress", 2);
+                    evaluation.set("uzi9_business_activities", 1);
+                    evaluation.set("uzi9_activity_status", 1);
+                    SaveServiceHelper.saveOperate(EVALUATION_OBJECT, new DynamicObject[]{evaluation});
+                    //新增待办任务表
+                    pendingTask(evaluation, user);
+
+                } else {
+                    sb.append(evaluation.get("name").toString()).append(",");
+                }
+
+            }
+
+            if (sb.length() > 0 && sb.charAt(sb.length() - 1) == ',') {
+                sb.setLength(sb.length() - 1);
+                sb.insert(0, "当前目标设定启动失败的人员有:");
+                this.getView().showMessage(sb.toString());
+            }
+            this.getView().updateView();
+            this.getView().showSuccessNotification("启动完毕");
+        }
+    }
+    //精工发送消息
+    public void sendMessage(String contentUrl) {
+        // 构建消息体发送
+        MessageInfo message = new MessageInfo();
+        // 信息title
+        ILocaleString title = new LocaleString();
+        ILocaleString localeTaskName = new LocaleString("绩效考核事务");
+        title.setLocaleValue_en("urge to do " + localeTaskName.getLocaleValue_zh_CN());
+        title.setLocaleValue_zh_CN("您有《" + localeTaskName.getLocaleValue_zh_CN() + "》待处理!");
+        title.setLocaleValue_zh_TW("");
+        message.setMessageTitle(title);
+        // 信息主体
+        ILocaleString content = new LocaleString();
+        content.setLocaleValue_en("you need to report this job!");
+        content.setLocaleValue_zh_CN("当前进行绩效考核目标设置填写,请尽快处理");
+        content.setLocaleValue_zh_TW("");
+        message.setMessageContent(content);
+        // 信息接收人
+        ArrayList<Long> receivers = new ArrayList<Long>();
+        receivers.add(RequestContext.get().getCurrUserId());
+        message.setUserIds(receivers);
+        // 信息标签
+        ILocaleString tag = new LocaleString();
+        tag.setLocaleValue_zh_CN("待办任务催办");
+        message.setTag("待办任务催办");
+        message.setMessageTag(tag);
+        // 信息发送人
+        message.setSenderId(RequestContext.get().getCurrUserId());
+        message.setType(MessageInfo.TYPE_MESSAGE);
+        StringBuilder notifyType = new StringBuilder();
+        notifyType.append(MessageChannels.YUNZHIJIA).append(",");
+        notifyType.append(MessageChannels.SMS);
+        message.setNotifyType(notifyType.toString());
+        // 快速链接
+        message.setContentUrl(contentUrl);
+
+        MessageCenterServiceHelper.sendMessage(message);
+    }
+
+    //简略版
+    public void sendMessage2(String contentUrl, String formId, String id, Long userId) {
+        //消息
+        MessageInfo message = new MessageInfo();
+        message.setTitle("请处理【绩效目标制定】");
+        message.setContent("当前进行绩效考核目标设置填写,请尽快处理");
+        message.setType(MessageInfo.TYPE_MESSAGE);
+        message.setUserIds(Collections.singletonList(userId));
+        message.setSenderId(RequestContext.get().getCurrUserId());
+//        message.setContentUrl(contentUrl);
+        // 发送消息
+        MessageCenterServiceHelper.sendMessage(message);
+
+        /*//任务
+        TaskEntityInfo task = new TaskEntityInfo();
+        // 1. 任务标题
+        task.setSubject(new LocaleString("请处理【绩效目标制定】"));
+        task.setName(new LocaleString("绩效目标制定任务"));
+        // 2. 任务描述
+        task.setDescription(new LocaleString("当前进行绩效考核目标设置填写,请尽快处理"));
+        // 3. 跳转链接(PC端)
+        task.setUrl(contentUrl);
+        // 5. 创建人(用户ID)
+        Long starterId = RequestContext.get().getCurrUserId();
+        task.setStarterId(starterId);
+        // 6. 处理人
+        ArrayList<ParticipantInfo> list = new ArrayList<>();
+        ParticipantInfo participant = new ParticipantInfo();
+        participant.setUserId(RequestContext.get().getCurrUserId());
+        list.add(participant);
+        task.setParticipantInfos(list);
+        // 分类
+        task.setCategory("performance");
+        // 实体编号(如流程ID、主键)
+        task.setEntityNumber(formId);
+        // 防重复
+        task.setBusinessKey("PERF_" + System.currentTimeMillis());
+        task.setBillNo("R-001");
+
+
+        Map<String, Object> task1 = MessageCenterServiceHelper.createTask(task);
+        Set<String> set = task1.keySet();
+        for (String key : set) {
+            Object o = task1.get(key);
+        }*/
+    }
+
+    //新增代办任务(传入评估对象和评估对象的人员信息)
+    public void pendingTask(DynamicObject evaluation, DynamicObject user) {
+        DynamicObject myTaskTb = BusinessDataServiceHelper.newDynamicObject(MY_TASK_TB);
+        DynamicObject userCurrent = BusinessDataServiceHelper.loadSingle(BOS_USER, "id", new QFilter[]{new QFilter("id", QFilter.equals, RequestContext.get().getCurrUserId())});
+
+        //考核活动
+        myTaskTb.set("uzi9_act", evaluation.get("uzi9_assessment_activity"));
+        //处理人
+        myTaskTb.set("uzi9_processor", user);
+        //任务状态
+        myTaskTb.set("uzi9_status", 0);
+        //任务节点
+        myTaskTb.set("uzi9_tasknode", "fillin");
+        //任务类型
+        myTaskTb.set("uzi9_combofield1", "fill");
+        //关联任务id
+        //myTaskTb.set("uzi9_relateid","");
+        //评估对象
+        myTaskTb.set("uzi9_evaluation_object", evaluation);
+        //PC页面链接(需要修改)
+        myTaskTb.set("uzi9_pcurl", "测试");
+
+        //移动端链接
+
+        //备注
+
+        //发送人
+        myTaskTb.set("uzi9_sender", userCurrent);
+        //创建人
+        myTaskTb.set("creator", userCurrent);
+        //业务对象
+        myTaskTb.set("uzi9_bizobj", user);
+        //发送时间
+        myTaskTb.set("uzi9_sendtime", new Date());
+        //使用状态
+        myTaskTb.set("enable", 1);
+        //数据状态
+        myTaskTb.set("status", "A");
+        //设置当前组织
+        Long currentOrgId = RequestContext.get().getOrgId();
+        if (currentOrgId != null) {
+            DynamicObject currentOrg = BusinessDataServiceHelper.loadSingle("bos_org", "id",
+                    new QFilter[]{new QFilter("id", QFilter.equals, currentOrgId)});
+            myTaskTb.set("createorg", currentOrg);
+        }
+
+        OperationResult result = SaveServiceHelper.saveOperate(MY_TASK_TB, new DynamicObject[]{myTaskTb}, OperateOption.create());
+        if (result.isSuccess()) {
+            log.info("新增待办任务表成功");
+        } else {
+            log.info("新增待办任务表失败");
+        }
+    }
+
+
+    @Override
+    public void afterBindData(EventObject e) {
+        super.afterBindData(e);
+        //获取所有行数据
+        BillList billList = this.getControl(AbstractListPlugin.BILLLISTID);
+        ListSelectedRowCollection collection = billList.getCurrentListAllRowCollection();
+        Object[] primaryKeyValues = collection.getPrimaryKeyValues();
+        //遍历id
+        for (Object primaryKeyValue : primaryKeyValues) {
+            DynamicObject load = BusinessDataServiceHelper.loadSingle(PERF_TARGET, "id,uzi9_staytime,uzi9_phasetime", new QFilter[]{new QFilter("id", QFilter.equals, primaryKeyValue)});
+            if (load.get("uzi9_phasetime") != null) {
+                //获取阶段初始时间
+                Date phaseTime = (Date) load.get("uzi9_phasetime");
+                //获取当下时间
+                Date date = new Date();
+                //计算时间差
+                long timeDiffMillis = date.getTime() - phaseTime.getTime();
+                //计算天数差
+                long daysDiff = timeDiffMillis / (24 * 60 * 60 * 1000L);
+                //设置停留天数
+                load.set("uzi9_staytime", daysDiff);
+                SaveServiceHelper.saveOperate(PERF_TARGET, new DynamicObject[]{load});
+            }
+        }
+    }
+}

+ 1 - 1
code/opmcepaq/uzi9-uzi9q-opmcepaq-epaq/src/main/java/uzi9/uzi9q/opmcepaq/epaq/plugin/form/zd/EvaluationCycleBasePlugIn.java → code/opmcepaq/uzi9-uzi9q-opmcepaq-epaq/src/main/java/uzi9/uzi9q/opmcepaq/epaq/plugin/form/zd/basic/EvaluationCycleBasePlugIn.java

@@ -1,4 +1,4 @@
-package uzi9.uzi9q.opmcepaq.epaq.plugin.form.zd;
+package uzi9.uzi9q.opmcepaq.epaq.plugin.form.zd.basic;
 
 import kd.bos.base.AbstractBasePlugIn;
 import kd.bos.dataentity.entity.DynamicObject;

+ 1 - 1
code/opmcepaq/uzi9-uzi9q-opmcepaq-epaq/src/main/java/uzi9/uzi9q/opmcepaq/epaq/plugin/form/zd/IndicatorCategoryListPlugin.java → code/opmcepaq/uzi9-uzi9q-opmcepaq-epaq/src/main/java/uzi9/uzi9q/opmcepaq/epaq/plugin/form/zd/basic/IndicatorCategoryListPlugin.java

@@ -1,4 +1,4 @@
-package uzi9.uzi9q.opmcepaq.epaq.plugin.form.zd;
+package uzi9.uzi9q.opmcepaq.epaq.plugin.form.zd.basic;
 
 import kd.bos.dataentity.entity.DynamicObject;
 import kd.bos.entity.datamodel.ListSelectedRowCollection;

+ 1 - 1
code/opmcepaq/uzi9-uzi9q-opmcepaq-epaq/src/main/java/uzi9/uzi9q/opmcepaq/epaq/plugin/form/zd/IndicatorClassListPlugin.java → code/opmcepaq/uzi9-uzi9q-opmcepaq-epaq/src/main/java/uzi9/uzi9q/opmcepaq/epaq/plugin/form/zd/basic/IndicatorClassListPlugin.java

@@ -1,4 +1,4 @@
-package uzi9.uzi9q.opmcepaq.epaq.plugin.form.zd;
+package uzi9.uzi9q.opmcepaq.epaq.plugin.form.zd.basic;
 
 import kd.bos.dataentity.entity.DynamicObject;
 import kd.bos.entity.datamodel.ListSelectedRowCollection;

+ 1 - 1
code/opmcepaq/uzi9-uzi9q-opmcepaq-epaq/src/main/java/uzi9/uzi9q/opmcepaq/epaq/plugin/form/zd/PerformanceRratingBasePlugIn.java → code/opmcepaq/uzi9-uzi9q-opmcepaq-epaq/src/main/java/uzi9/uzi9q/opmcepaq/epaq/plugin/form/zd/basic/PerformanceRratingBasePlugIn.java

@@ -1,4 +1,4 @@
-package uzi9.uzi9q.opmcepaq.epaq.plugin.form.zd;
+package uzi9.uzi9q.opmcepaq.epaq.plugin.form.zd.basic;
 
 import kd.bos.base.AbstractBasePlugIn;
 import kd.bos.dataentity.entity.DynamicObject;

+ 39 - 0
code/opmcepaq/uzi9-uzi9q-opmcepaq-epaq/src/main/java/uzi9/uzi9q/opmcepaq/epaq/plugin/form/zd/operation/AssessmentGxImportPlugin.java

@@ -0,0 +1,39 @@
+package uzi9.uzi9q.opmcepaq.epaq.plugin.form.zd.operation;
+
+import kd.bos.form.plugin.impt.BatchImportPlugin;
+import kd.bos.form.plugin.impt.ImportContext;
+import kd.sdk.plugin.Plugin;
+
+import java.util.ArrayList;
+import java.util.List;
+
+/**
+ * 导入插件
+ */
+public class AssessmentGxImportPlugin extends BatchImportPlugin implements Plugin {
+
+    private static final String CUSTOM_MESSAGE_KEY = "AssessmentImportCustomMessage";
+
+    @Override
+    public String getDefaultImportType() {
+        return "override";
+    }
+
+    //修改条件
+    @Override
+    public String getDefaultKeyFields() {
+        return "uzi9_assessment_activity,uzi9_evaluation_object";
+    }
+
+    //锁定新增和新增并修改
+    @Override
+    public List<String> getDefaultLockUIs() {
+        ArrayList<String> list = new ArrayList<>();
+        list.add("radiofield");
+        list.add("radiofield2");
+        list.add("keyfields");
+        return list;
+
+    }
+
+}

+ 225 - 0
code/opmcepaq/uzi9-uzi9q-opmcepaq-epaq/src/main/java/uzi9/uzi9q/opmcepaq/epaq/plugin/form/zd/operation/PerftargetServicePlugIn.java

@@ -0,0 +1,225 @@
+package uzi9.uzi9q.opmcepaq.epaq.plugin.form.zd.operation;
+
+import kd.bos.context.RequestContext;
+import kd.bos.dataentity.entity.DynamicObject;
+import kd.bos.entity.operate.result.OperationResult;
+import kd.bos.entity.plugin.AbstractOperationServicePlugIn;
+import kd.bos.entity.plugin.args.AfterOperationArgs;
+import kd.bos.entity.plugin.args.BeforeOperationArgs;
+import kd.bos.orm.query.QFilter;
+import kd.bos.servicehelper.BusinessDataServiceHelper;
+import kd.bos.servicehelper.operation.SaveServiceHelper;
+import kd.bos.servicehelper.workflow.MessageCenterServiceHelper;
+import kd.bos.workflow.engine.msg.info.MessageInfo;
+import kd.sdk.plugin.Plugin;
+import org.apache.log4j.Logger;
+
+import java.util.Collections;
+import java.util.Date;
+
+/**
+ * 绩效目标提交单据操作插件
+ */
+public class PerftargetServicePlugIn extends AbstractOperationServicePlugIn implements Plugin {
+
+    //评估对象表单标识
+    private static final String EVALUATION_OBJECT = "uzi9_evaluation_object";
+    //考核关系表单标识
+    private static final String ASSESSMENT_GX = "uzi9_assessment_gx";
+    //人员表单标识
+    private static final String BOS_USER = "bos_user";
+    //绩效目标标识
+    private static final String PERF_TARGET = "uzi9_perftarget";
+    //待办任务表单标识
+    private static final String MY_TASK_TB = "uzi9_mytasktb";
+
+    private static final Logger log = Logger.getLogger(PerftargetServicePlugIn.class);
+
+    @Override
+    public void beforeExecuteOperationTransaction(BeforeOperationArgs e) {
+        super.beforeExecuteOperationTransaction(e);
+        String operationKey = e.getOperationKey();
+        //触发全部提交(submitall)
+        if ("submitall".equals(operationKey)) {
+
+            //效验通过(后续添加效验方法)
+
+            DynamicObject[] entities = e.getDataEntities();
+            DynamicObject perTar = entities[0];
+            //获取评估对象id
+            DynamicObject evaObj = (DynamicObject) perTar.get("uzi9_evaobj");
+            Object evaId = evaObj.get("id");
+
+            if (!perTar.get("uzi9_appstatus").equals("unsubmit")) {
+                e.setCancel(true);
+                e.setCancelMessage("当前绩效目标已提交,禁止重复提交");
+                return;
+            }
+
+            if (perTar.get("uzi9_exeperson") == null) {
+                e.setCancel(true);
+                e.setCancelMessage("当前评估对象为启动进行目标,拒绝提交");
+                return;
+            }
+
+            //更新绩效目标
+            updatePerSub(perTar);
+            //评估对象状态更新
+            updateEvaSub(evaId);
+            //更新旧代表任务
+            updateMyTaskSub(evaId);
+            //创建新的代表任务
+            addMyTaskSub(perTar);
+            //发送消息
+            sendMessageSub(perTar);
+
+        }
+
+        //触发撤销调整(revoke)
+        if ("revoke".equals(operationKey)){
+            DynamicObject[] entities = e.getDataEntities();
+            DynamicObject perTar = entities[0];
+
+            //效验目标确认人是否查看
+            if (perTar.get("uzi9_view").equals("1")) {
+                e.setCancel(true);
+                e.setCancelMessage("当前目标确认人已查看,请勿撤销调整");
+            }
+            //填报审批状态 不是已提交时,拒绝撤销
+            if (!perTar.get("uzi9_appstatus").equals("submit") || perTar.get("uzi9_appstatus") == null){
+                e.setCancel(true);
+                e.setCancelMessage("当前状态不为已提交,拒绝撤销调整");
+            }
+
+        }
+    }
+
+    @Override
+    public void afterExecuteOperationTransaction(AfterOperationArgs e) {
+        super.afterExecuteOperationTransaction(e);
+        String operationKey = e.getOperationKey();
+        if ("submitall".equals(operationKey)) {
+            this.getOperationResult().setSuccess(true);
+            this.getOperationResult().setMessage("提交成功");
+            this.getOperationResult().setShowMessage(true);
+        }
+    }
+
+    //更新绩效目标(submitall)
+    private void updatePerSub(DynamicObject perTar) {
+        //更新修改时间
+        perTar.set("modifytime", new Date());
+        //更新当前处理人
+        perTar.set("uzi9_exeperson", perTar.get("uzi9_appperson"));
+        //更新填报提交时间
+        perTar.set("uzi9_submitme", new Date());
+        //更新填报审批状态
+        perTar.set("uzi9_appstatus", "submit");
+        //更新绩效目标审批人查看 - 未查看 - 0
+        perTar.set("uzi9_view",0);
+        //更新
+        SaveServiceHelper.saveOperate(PERF_TARGET, new DynamicObject[]{perTar});
+    }
+
+    //评估对象状态更新(回传评估对象id)(submitall)
+    private Object updateEvaSub(Object evaId) {
+        //获取评估对象参数;
+        DynamicObject evaObj = BusinessDataServiceHelper.loadSingle(EVALUATION_OBJECT, "id,uzi9_activity_status", new QFilter[]{new QFilter("id", QFilter.equals, evaId)});
+        //绩效业务活动状态 - 修改为评估中 - 2
+        evaObj.set("uzi9_activity_status", 2);
+        //更新
+        OperationResult result = SaveServiceHelper.saveOperate(EVALUATION_OBJECT, new DynamicObject[]{evaObj});
+        if (!result.isSuccess()) {
+            //更新失败
+            log.info("更新评估对象状态失败");
+        }
+        return evaObj.get("id");
+    }
+
+    //更新待办任务(submitall)
+    private void updateMyTaskSub(Object evaId) {
+        //设置获取待办任务条件
+        //条件(评估对象为主)
+        //任务状态 为待办 0
+        //任务节点 为员工填写 fillin
+        //任务类型 为目标设定 fill
+        QFilter qFilter = new QFilter("uzi9_evaluation_object", QFilter.equals, evaId)
+                .and(new QFilter("uzi9_status", QFilter.equals, "0"))
+                .and(new QFilter("uzi9_tasknode", QFilter.equals, "fillin"))
+                .and(new QFilter("uzi9_combofield1", QFilter.equals, "fill"));
+        //获取待办任务
+        DynamicObject myTask = BusinessDataServiceHelper.loadSingle(MY_TASK_TB, "id,uzi9_exetime,uzi9_status", new QFilter[]{qFilter});
+        //更新处理时间
+        myTask.set("uzi9_exetime", new Date());
+        //更新任务状态
+        myTask.set("uzi9_status", 1);
+        //更新
+        SaveServiceHelper.update(new DynamicObject[]{myTask});
+    }
+
+    //创建新的待办任务(submitall)
+    private void addMyTaskSub(DynamicObject perTar) {
+        DynamicObject myTaskTb = BusinessDataServiceHelper.newDynamicObject(MY_TASK_TB);
+        //获取当前发送人和其组织
+        DynamicObject userCurrent = BusinessDataServiceHelper.loadSingle(BOS_USER, "id", new QFilter[]{new QFilter("id", QFilter.equals, RequestContext.get().getCurrUserId())});
+        DynamicObject currentOrg = BusinessDataServiceHelper.loadSingle("bos_org", "id", new QFilter[]{new QFilter("id", QFilter.equals, RequestContext.get().getOrgId())});
+
+        //考核活动
+        myTaskTb.set("uzi9_act", perTar.get("uzi9_activity"));
+        //处理人(为目标确认人)
+        myTaskTb.set("uzi9_processor", perTar.get("uzi9_appperson"));
+        //发送时间
+        myTaskTb.set("uzi9_sendtime", new Date());
+        //任务状态
+        myTaskTb.set("uzi9_status", 0);
+        //任务节点
+        myTaskTb.set("uzi9_tasknode", "targetConf");
+        //任务类型
+        myTaskTb.set("uzi9_combofield1", "fill");
+        //关联任务ID
+        myTaskTb.set("uzi9_relateid", "");
+        //评估对象
+        myTaskTb.set("uzi9_evaluation_object", perTar.get("uzi9_evaobj"));
+        //PC页面链接(需要修改)
+        myTaskTb.set("uzi9_pcurl", "测试");
+
+        //移动端链接
+
+        //备注
+
+        //发送人
+        myTaskTb.set("uzi9_sender", userCurrent);
+        //业务对象
+        myTaskTb.set("uzi9_bizobj", userCurrent);
+        //创建人
+        myTaskTb.set("creator", userCurrent);
+        //创建组织
+        myTaskTb.set("createorg", currentOrg);
+        //使用状态
+        myTaskTb.set("enable", 1);
+        //数据状态
+        myTaskTb.set("status", "A");
+        //新增代表任务
+        OperationResult result = SaveServiceHelper.saveOperate(MY_TASK_TB, new DynamicObject[]{myTaskTb});
+        if (!result.isSuccess()) {
+            log.info("新增待办任务表失败");
+        }
+    }
+
+    //发送通知信息(submitall)
+    public void sendMessageSub(DynamicObject perTar) {
+        //获取填报审批人
+        DynamicObject userId = (DynamicObject) perTar.get("uzi9_appperson");
+        //消息
+        MessageInfo message = new MessageInfo();
+        message.setTitle("请审核【员工的绩效目标】");
+        message.setContent("当前需要对员工的绩效目标进行审核处理");
+        message.setType(MessageInfo.TYPE_MESSAGE);
+        message.setUserIds(Collections.singletonList(userId.getLong("id")));
+        message.setSenderId(RequestContext.get().getCurrUserId());
+        //发送
+        MessageCenterServiceHelper.sendMessage(message);
+    }
+
+
+}

+ 39 - 0
code/opmcepaq/uzi9-uzi9q-opmcepaq-epaq/src/main/java/uzi9/uzi9q/opmcepaq/epaq/plugin/form/zd/scheduler/PerftargetPhasetimeAbstractTask.java

@@ -0,0 +1,39 @@
+package uzi9.uzi9q.opmcepaq.epaq.plugin.form.zd.scheduler;
+
+import kd.bos.context.RequestContext;
+import kd.bos.dataentity.entity.DynamicObject;
+import kd.bos.exception.KDException;
+import kd.bos.orm.query.QFilter;
+import kd.bos.schedule.api.MessageHandler;
+import kd.bos.schedule.executor.AbstractTask;
+import kd.bos.servicehelper.BusinessDataServiceHelper;
+import kd.bos.servicehelper.operation.SaveServiceHelper;
+import kd.sdk.plugin.Plugin;
+
+import java.util.Date;
+import java.util.Map;
+
+/**
+ * 后台任务插件
+ */
+public class PerftargetPhasetimeAbstractTask extends AbstractTask implements Plugin {
+    //绩效目标标识
+    private static final String PERF_TARGET = "uzi9_perftarget";
+    @Override
+    public void execute(RequestContext requestContext, Map<String, Object> map) throws KDException {
+        DynamicObject load = BusinessDataServiceHelper.loadSingle(PERF_TARGET, "id,uzi9_staytime,uzi9_phasetime", new QFilter[]{});
+        if (load.get("uzi9_phasetime") != null) {
+            //获取阶段初始时间
+            Date phaseTime = (Date) load.get("uzi9_phasetime");
+            //获取当下时间
+            Date date = new Date();
+            //计算时间差
+            long timeDiffMillis = date.getTime() - phaseTime.getTime();
+            //计算天数差
+            long daysDiff = timeDiffMillis / (24 * 60 * 60 * 1000L);
+            //设置停留天数
+            load.set("uzi9_staytime", daysDiff);
+            SaveServiceHelper.saveOperate(PERF_TARGET, new DynamicObject[]{load});
+        }
+    }
+}