Browse Source

休假需求相关代码:
1.休假申请保存/提交插件,判断结束日期-开始日期是否大于30天,更新表头是否长假字段
2.定时任务:是否长假为是的休假单,会在请假开始日期那天更新员工状态为长假
3.销假:休假变更审批通过后,会更新员工状态为员工主任职的职位,并终止该职位下所有兼职
岗位禁用:
1.岗位信息维护新增终止兼职按钮,根据选择岗位终止岗位下的兼职;

Tyx 2 days ago
parent
commit
b4bbf53513

+ 82 - 0
code/jyyy/nckd-jimin-jyyy-hr/src/main/java/nckd/jimin/jyyy/hr/hrmp/hbpm/opplugin/web/position/PosEndPartTimeConfirmPlugin.java

@@ -0,0 +1,82 @@
+package nckd.jimin.jyyy.hr.hrmp.hbpm.opplugin.web.position;
+
+import kd.bos.dataentity.entity.DynamicObject;
+import kd.bos.dataentity.resource.ResManager;
+import kd.bos.form.FormShowParameter;
+import kd.bos.form.control.Button;
+import kd.bos.form.control.Control;
+import kd.bos.form.plugin.AbstractFormPlugin;
+import kd.bos.logging.Log;
+import kd.bos.logging.LogFactory;
+import kd.bos.orm.query.QCP;
+import kd.bos.orm.query.QFilter;
+import kd.hr.hbp.business.servicehelper.HRBaseServiceHelper;
+import kd.hr.hdm.business.domain.parttime.ParttimeServiceHelper;
+import kd.hr.hdm.business.domain.transfer.service.external.PersonExternalService;
+import kd.sdk.plugin.Plugin;
+
+import java.util.*;
+import java.util.stream.Collectors;
+
+/**
+ * Tyx 2025-04-29
+ * 岗位终止兼职表单插件
+ * 元数据标识:nckd_posendparttime
+ */
+public class PosEndPartTimeConfirmPlugin extends AbstractFormPlugin implements Plugin {
+
+    private static String ermanFile_entity = "hspm_ermanfile";
+    private static final Log log = LogFactory.getLog(PosEndPartTimeConfirmPlugin.class);
+    public void registerListener(EventObject eventObject) {
+        super.registerListener(eventObject);
+        Button button = (Button)this.getControl("btnok");
+        button.addClickListener(this);
+    }
+
+    @Override
+    public void click(EventObject evt) {
+        super.click(evt);
+        Control control = (Control)evt.getSource();
+        String key = control.getKey();
+        if ("btnok".equals(key)) {
+            FormShowParameter formShowParameter = this.getView().getFormShowParameter();
+            //父页面传过来的岗位ID,根据这些ID查找岗位下的兼职
+            List<Long> selectIds = (List)formShowParameter.getCustomParam("selectIds");
+            QFilter filter = getQFilter(selectIds);
+            HRBaseServiceHelper helper = HRBaseServiceHelper.create(ermanFile_entity);
+            DynamicObject[] ermanFiles = helper.query(new QFilter[]{filter});
+            if(ermanFiles.length == 0) {
+                this.getView().showMessage("岗位下不存在兼职!");
+            }
+            else {
+                //转成List<Long>
+                List<Long> ermanFileIds = Arrays.stream(ermanFiles).map(dyx -> dyx.getLong("id")).collect(Collectors.toList());
+                //调用标准方法获取ermanFile
+                List<Map<String, Object>> erManFiles = PersonExternalService.getInstance().invokeGetCardFields(ermanFileIds);
+                DynamicObject action = (DynamicObject)this.getModel().getValue("affaction");
+                Date partEndDate = (Date)this.getModel().getValue("partenddate");
+                //调用标准终止兼职方法
+                ParttimeServiceHelper.batchEndParttime(action.getLong("id"), partEndDate, erManFiles);
+                this.getView().getParentView().showSuccessNotification(ResManager.loadKDString("兼职终止成功,共终止" + ermanFileIds.size() + "条记录", "EndParttimePlugin_2", "hr-hdm-formplugin", new Object[0]));
+                this.getView().sendFormAction(this.getView().getParentView());
+                this.getView().close();
+            }
+        }
+    }
+
+    /**
+     * 组装查询兼职档案的过滤条件
+     * @param positionIds
+     * @return
+     */
+    public QFilter getQFilter(List<Long> positionIds) {
+        QFilter filter = new QFilter("depemp.iscurrentversion", QCP.equals, "1");
+        filter.and("depemp.businessstatus", QCP.equals, "1");
+        filter.and("depemp.postype.number",QCP.equals, "1020_S");
+        filter.and("depemp.position", QCP.in, positionIds);
+        filter.and("iscurrentversion", QCP.equals, "1");
+        filter.and("businessstatus", QCP.equals, "1");
+        return filter;
+    }
+
+}

+ 68 - 0
code/jyyy/nckd-jimin-jyyy-hr/src/main/java/nckd/jimin/jyyy/hr/hrmp/hbpm/opplugin/web/position/PositionEndPartTimePlugin.java

@@ -0,0 +1,68 @@
+package nckd.jimin.jyyy.hr.hrmp.hbpm.opplugin.web.position;
+
+import com.google.common.collect.Lists;
+import com.google.common.collect.Maps;
+import kd.bos.dataentity.entity.DynamicObject;
+import kd.bos.dataentity.resource.ResManager;
+import kd.bos.entity.datamodel.ListSelectedRow;
+import kd.bos.entity.datamodel.ListSelectedRowCollection;
+import kd.bos.form.CloseCallBack;
+import kd.bos.form.FormShowParameter;
+import kd.bos.form.ShowType;
+import kd.bos.form.events.BeforeDoOperationEventArgs;
+import kd.bos.form.operate.FormOperate;
+import kd.bos.list.plugin.AbstractListPlugin;
+import kd.bos.mvc.list.ListView;
+import kd.hr.hbp.common.util.HRJSONUtils;
+import kd.hr.hbp.common.util.HRStringUtils;
+import kd.hr.hdm.business.domain.parttime.external.IParttimePersonService;
+import kd.sdk.plugin.Plugin;
+
+import java.util.Iterator;
+import java.util.List;
+import java.util.Map;
+import java.util.Set;
+
+/**
+ * Tyx 2025-04-28
+ * 根据岗位终止兼职操作插件
+ * 根据选择的岗位Id,找到这个岗位所有兼职的人事档案ID,再调标准方法终止
+ */
+public class PositionEndPartTimePlugin extends AbstractListPlugin implements Plugin {
+
+    @Override
+    public void beforeDoOperation(BeforeDoOperationEventArgs args) {
+        super.beforeDoOperation(args);
+        FormOperate op = (FormOperate)args.getSource();
+        String operateKey = op.getOperateKey();
+        if (HRStringUtils.equals(operateKey, "endparttime")) {
+            ListView listView = (ListView)this.getView();
+            List<Long> selectPkIds = this.getListSelectedPkIds(listView);
+            this.showPosEndPartTimeConfirm(selectPkIds);
+            args.setCancel(true);
+        }
+    }
+
+    private List<Long> getListSelectedPkIds(ListView listView) {
+        ListSelectedRowCollection selectedRows = listView.getSelectedRows();
+        List<Long> selectPkIds = Lists.newArrayListWithExpectedSize(selectedRows.size());
+        Iterator it = selectedRows.iterator();
+
+        while(it.hasNext()) {
+            ListSelectedRow selectedRow = (ListSelectedRow)it.next();
+            Long primaryKeyValue = HRJSONUtils.getLongValOfCustomParam(selectedRow.getPrimaryKeyValue());
+            selectPkIds.add(primaryKeyValue);
+        }
+
+        return selectPkIds;
+    }
+
+    private void showPosEndPartTimeConfirm(List<Long> selectIds) {
+        FormShowParameter formShowParameter = new FormShowParameter();
+        formShowParameter.getOpenStyle().setShowType(ShowType.Modal);
+        formShowParameter.setFormId("nckd_posendparttime");
+        formShowParameter.setCustomParam("selectIds", selectIds);
+        formShowParameter.setCloseCallBack(new CloseCallBack(this, "posendparttime"));
+        this.getView().showForm(formShowParameter);
+    }
+}

+ 27 - 0
code/jyyy/nckd-jimin-jyyy-hr/src/main/java/nckd/jimin/jyyy/hr/wtc/wtabm/opplugin/web/vaapply/VaApplyAlertTask.java

@@ -0,0 +1,27 @@
+package nckd.jimin.jyyy.hr.wtc.wtabm.opplugin.web.vaapply;
+
+import kd.bos.context.RequestContext;
+import kd.bos.exception.KDException;
+import kd.bos.logging.Log;
+import kd.bos.logging.LogFactory;
+import kd.bos.schedule.executor.AbstractTask;
+import kd.sdk.plugin.Plugin;
+
+import java.util.Map;
+
+/**
+ * Tyx 2025-04-30
+ * 预警插件
+ * 查找未做销假的长假单,并通知对应人员
+ */
+public class VaApplyAlertTask extends AbstractTask implements Plugin {
+
+    private static final Log log = LogFactory.getLog(VaApplyAlertTask.class);
+
+    @Override
+    public void execute(RequestContext requestContext, Map<String, Object> map) throws KDException {
+
+
+
+    }
+}

+ 38 - 0
code/jyyy/nckd-jimin-jyyy-hr/src/main/java/nckd/jimin/jyyy/hr/wtc/wtabm/opplugin/web/vaapply/VaApplyBillOpEx.java

@@ -0,0 +1,38 @@
+package nckd.jimin.jyyy.hr.wtc.wtabm.opplugin.web.vaapply;
+
+import kd.bos.dataentity.entity.DynamicObject;
+import kd.bos.entity.plugin.AbstractOperationServicePlugIn;
+import kd.bos.entity.plugin.args.BeginOperationTransactionArgs;
+import kd.bos.logging.Log;
+import kd.bos.logging.LogFactory;
+import kd.sdk.plugin.Plugin;
+
+import java.util.Date;
+
+/**
+ * Tyx 2025-04-28
+ * 请假单通用操作插件
+ * 判断请假结束日期-开始日期是否超过30天,是的话表头是否长假字段[nckd_islongleave]为true
+ */
+public class VaApplyBillOpEx extends AbstractOperationServicePlugIn implements Plugin {
+
+    private static final Log log = LogFactory.getLog(VaApplyBillOpEx.class);
+
+    @Override
+    public void beginOperationTransaction(BeginOperationTransactionArgs e) {
+        DynamicObject[] bills = e.getDataEntities();
+        for (DynamicObject bill : bills) {
+            Date startDate = bill.getDate("startdate");
+            Date endDate = bill.getDate("enddate");
+            //判断两个日期是不是相差30天
+            long dateDiff = Math.abs(endDate.getTime() - startDate.getTime());
+            long day = dateDiff / ( 1000 * 60 * 60 * 24);
+            log.info(" -------- 相差天数:" + day + " -------- ");
+            if(day > 30) {
+                bill.set("nckd_islongleave", true);
+            }
+        }
+        
+        super.beginOperationTransaction(e);
+    }
+}

+ 70 - 0
code/jyyy/nckd-jimin-jyyy-hr/src/main/java/nckd/jimin/jyyy/hr/wtc/wtabm/opplugin/web/vaapply/VaApplyBillTask.java

@@ -0,0 +1,70 @@
+package nckd.jimin.jyyy.hr.wtc.wtabm.opplugin.web.vaapply;
+
+import kd.bos.context.RequestContext;
+import kd.bos.dataentity.entity.DynamicObject;
+import kd.bos.dataentity.entity.DynamicObjectCollection;
+import kd.bos.exception.KDException;
+import kd.bos.logging.Log;
+import kd.bos.logging.LogFactory;
+import kd.bos.orm.query.QCP;
+import kd.bos.orm.query.QFilter;
+import kd.bos.schedule.executor.AbstractTask;
+import kd.bos.servicehelper.BusinessDataServiceHelper;
+import kd.bos.servicehelper.operation.SaveServiceHelper;
+import kd.hr.hbp.business.servicehelper.HRBaseServiceHelper;
+import kd.sdk.plugin.Plugin;
+
+import java.util.Date;
+import java.util.Map;
+
+/**
+ * Tyx 2025-04-27
+ * 休假更新员工状态定时任务插件
+ * 查询休假单数据,更新这些请假人员的基本信息-员工状态字段为长期休假
+ * 具体数据过滤条件:
+ * nckd_isupdateperson = false and nckd_islongleave = true
+ * ischange = false and ishavechange = false
+ * auditstatus = 'C' and startdate < now();
+ */
+public class VaApplyBillTask extends AbstractTask implements Plugin {
+
+    private static String apply_entity = "wtabm_vaapply";
+    private static final Log log = LogFactory.getLog(VaApplyBillTask.class);
+    @Override
+    public void execute(RequestContext requestContext, Map<String, Object> map) throws KDException {
+
+        log.info("-------- 开始执行请假单定时更新长假员工状态 --------");
+        String selectFields = "personid,startdate,enddate,nckd_isupdateperson,nckd_islongleave,entryentity.entryvacationtype";
+        HRBaseServiceHelper helper = HRBaseServiceHelper.create(apply_entity);
+        QFilter filter = new QFilter("nckd_islongleave", QCP.equals, true);
+        filter.and("ischange", QCP.equals, false);
+        filter.and("ishavechange", QCP.equals, false);
+        filter.and("auditstatus", QCP.equals, "C");
+        filter.and("startdate", QCP.less_equals, new Date());
+        filter.and("nckd_isupdateperson", QCP.equals, false);
+        DynamicObject[] bills = BusinessDataServiceHelper.load(apply_entity, selectFields, new QFilter[]{filter});
+        log.info("-------- 查询出符合条件的休假单条数:" + bills.length + " --------");
+        for(DynamicObject bill : bills) {
+            //获取到人员
+            Long personId = bill.getLong("personid_id");
+            //获取到假期类型 根据假期类型判断员工状态编码
+            String typeNumber = "";
+
+            DynamicObjectCollection entryCols = bill.getDynamicObjectCollection("entryentity");
+            if(entryCols.size() > 0) {
+                DynamicObject entry = entryCols.get(0);
+                String vacationNumber = entry.getString("entryvacationtype.number");
+                if (vacationNumber.equals("1060_S")) {
+                    typeNumber = "9020_S";  //产假
+                } else {
+                    typeNumber = "9010_S";  //长假
+                }
+                //更新员工档案
+                VaApplyBillUtil.updatePersonType(typeNumber, personId);
+                //更新单据上nckd_isupdateperson字段
+                bill.set("nckd_isupdateperson", true);
+            }
+        }
+        SaveServiceHelper.save(bills);
+    }
+}

+ 120 - 0
code/jyyy/nckd-jimin-jyyy-hr/src/main/java/nckd/jimin/jyyy/hr/wtc/wtabm/opplugin/web/vaapply/VaApplyBillUtil.java

@@ -0,0 +1,120 @@
+package nckd.jimin.jyyy.hr.wtc.wtabm.opplugin.web.vaapply;
+
+import kd.bos.dataentity.entity.DynamicObject;
+import kd.bos.dataentity.entity.DynamicObjectCollection;
+import kd.bos.logging.Log;
+import kd.bos.logging.LogFactory;
+import kd.bos.orm.query.QCP;
+import kd.bos.orm.query.QFilter;
+import kd.bos.servicehelper.BusinessDataServiceHelper;
+import kd.bos.servicehelper.QueryServiceHelper;
+import kd.hr.hbp.business.application.impl.newhismodel.HisModelController;
+import kd.hr.hbp.business.domain.model.newhismodel.HisResponse;
+import kd.hr.hbp.business.domain.model.newhismodel.HisVersionParamBo;
+import kd.hr.hbp.business.domain.model.newhismodel.VersionChangeRespData;
+import kd.hr.hbp.business.servicehelper.HRBaseServiceHelper;
+import kd.hr.hbp.common.constants.newhismodel.EnumHisOperateType;
+import kd.hr.hbp.common.util.HRDynamicObjectUtils;
+import kd.hrmp.hrpi.business.infrastructure.utils.QFilterUtil;
+import kd.imc.rim.common.utils.StringUtils;
+
+import java.util.List;
+
+public class VaApplyBillUtil {
+
+    private static String laborStatus_entity = "hbss_laborrelstatus";
+    private static String perNonTsProp_entity = "hrpi_pernontsprop";
+    private static String empEntRel_entity = "hdm_empentrel";
+    private static String depEmp_entity = "hrpi_depemp";
+    private static String ermanFile_entity = "hspm_ermanfile";
+    private static final Log log = LogFactory.getLog(VaApplyBillUtil.class);
+    /**
+     * 更新员工基本信息上员工状态字段,保存历史版本
+     * @param typeNumber 用工关系状态编码
+     * @param personId  人员
+     */
+    public static void updatePersonType (String typeNumber, Long personId) {
+        HRBaseServiceHelper helper = HRBaseServiceHelper.create(perNonTsProp_entity);
+        QFilter filter = new QFilter("person", QCP.equals, personId);
+        filter.and("datastatus", QCP.equals, "1");
+        filter.and("iscurrentversion",QCP.equals, "1");
+        String selectFields = "iscurrentversion,person,datastatus,nckd_isgbqs,boid";
+        DynamicObject curVersionDyn = helper.queryOne(selectFields, new QFilter[]{filter});
+        curVersionDyn = helper.loadSingle(curVersionDyn.getPkValue());
+        DynamicObject newVersionDyn = helper.generateEmptyDynamicObject();
+        HRDynamicObjectUtils.copy(curVersionDyn, newVersionDyn,true);
+        DynamicObject ygzt = getLaborRelStatusDyn(typeNumber);
+        newVersionDyn.set("nckd_ygzt", ygzt);
+        HisVersionParamBo hisVersionParamBo = new HisVersionParamBo();
+        hisVersionParamBo.setOperateType(EnumHisOperateType.NO_TIME_SAVE_VERSION.getType());
+        hisVersionParamBo.setEntityNumber(perNonTsProp_entity);
+        hisVersionParamBo.setHisDyns(new DynamicObject[]{newVersionDyn});
+        HisModelController hisModelController = HisModelController.getInstance();
+        HisResponse<VersionChangeRespData> hisResponse = hisModelController.noLineTimeHisVersionChange(hisVersionParamBo);
+        if(StringUtils.isNoneBlank(hisResponse.getErrorMessage())) {
+            log.error("保存历史模型失败:" + hisResponse.getErrorMessage());
+        }
+    }
+
+    /**
+     * 获取用工关系状态Dyn
+     * @param typeNumber 编码
+     * @return
+     */
+    public static DynamicObject getLaborRelStatusDyn (String typeNumber) {
+        QFilter filter = new QFilter("number", QCP.equals, typeNumber);
+        return BusinessDataServiceHelper.loadSingle(laborStatus_entity, new QFilter[]{filter});
+    }
+
+    /**
+     * 获取员工当前用工关系状态编码
+     * @param personId
+     * @return
+     */
+    public static String getLaborStatusNumber (Long personId) {
+        QFilter filter = QFilterUtil.getCurrentQf();
+        filter.and("businessstatus", QCP.equals, "1");
+        filter.and("person.id", QCP.equals, personId);
+        DynamicObjectCollection cols = QueryServiceHelper.query(empEntRel_entity, "laborrelstatus.number", new QFilter[]{filter});
+        if(cols.size() > 0) {
+            return cols.get(0).getString("laborrelstatus.number");
+        }
+        else {
+            return null;
+        }
+    }
+
+    /**
+     * 获取人员主职职位Dyn
+     * @param personId
+     */
+    public static DynamicObject getPersonPrimaryPosition (Long personId) {
+        QFilter filter = QFilterUtil.getCurrentQf();
+        filter.and("businessstatus", QCP.equals, "1");
+        filter.and("person.id", QCP.equals, personId);
+        filter.and("isprimary", QCP.equals, "1");
+        HRBaseServiceHelper helper = HRBaseServiceHelper.create(depEmp_entity);
+        DynamicObject position = helper.queryOne("position.id", new QFilter[]{filter});
+        return position;
+    }
+
+    /**
+     * 获取职位上的兼职档案
+     *
+     * @param positionIds
+     * @return
+     */
+    public static DynamicObject[] getErmanFilesByPosition (List<Long> positionIds) {
+        QFilter filter = new QFilter("depemp.iscurrentversion", QCP.equals, "1");
+        filter.and("depemp.businessstatus", QCP.equals, "1");
+        filter.and("depemp.postype.number",QCP.equals, "1020_S");
+        filter.and("depemp.position", QCP.in, positionIds);
+        filter.and("iscurrentversion", QCP.equals, "1");
+        filter.and("businessstatus", QCP.equals, "1");
+        HRBaseServiceHelper helper = HRBaseServiceHelper.create(ermanFile_entity);
+        DynamicObject[] ermanFiles = helper.query(new QFilter[]{filter});
+        return ermanFiles;
+    }
+
+
+}

+ 88 - 0
code/jyyy/nckd-jimin-jyyy-hr/src/main/java/nckd/jimin/jyyy/hr/wtc/wtabm/opplugin/web/vaapply/VaChangeBillAuditOp.java

@@ -0,0 +1,88 @@
+package nckd.jimin.jyyy.hr.wtc.wtabm.opplugin.web.vaapply;
+
+import kd.bos.dataentity.entity.DynamicObject;
+import kd.bos.entity.plugin.AbstractOperationServicePlugIn;
+import kd.bos.entity.plugin.PreparePropertysEventArgs;
+import kd.bos.entity.plugin.args.AfterOperationArgs;
+import kd.bos.entity.plugin.args.BeginOperationTransactionArgs;
+import kd.bos.logging.Log;
+import kd.bos.logging.LogFactory;
+import kd.bos.orm.query.QFilter;
+import kd.bos.servicehelper.BusinessDataServiceHelper;
+import kd.bos.servicehelper.operation.SaveServiceHelper;
+import kd.bos.util.StringUtils;
+import kd.hr.hdm.business.domain.parttime.ParttimeServiceHelper;
+import kd.hr.hdm.business.domain.transfer.service.external.PersonExternalService;
+import kd.sdk.plugin.Plugin;
+
+import java.util.*;
+import java.util.stream.Collectors;
+
+/**
+ * Tyx 2025-04-29
+ * 休假变更审批插件
+ * 如果是长假单据,审批后反写员工状态为员工当前用工关系状态,同时要撤销该请假员工主职上的所有兼职;
+ */
+public class VaChangeBillAuditOp extends AbstractOperationServicePlugIn implements Plugin {
+
+    private static String vaUpdate_entity = "wtabm_vaupdate";
+
+    private static final Log log = LogFactory.getLog(VaChangeBillAuditOp.class);
+
+    @Override
+    public void onPreparePropertys(PreparePropertysEventArgs e) {
+        super.onPreparePropertys(e);
+        e.getFieldKeys().add("nckd_islongleave");
+        e.getFieldKeys().add("nckd_iscancelleave");
+    }
+
+    @Override
+    public void afterExecuteOperationTransaction(AfterOperationArgs e) {
+//        DynamicObject[] bills = e.getDataEntities();
+//        for(DynamicObject bill : bills) {
+//            if(!bill.getBoolean("nckd_islongleave"))
+//                continue;
+//            Long personId = bill.getLong("personid.id");
+//            //查询请假人当前任职用工关系状态
+//            String typeNumber = VaApplyBillUtil.getDepEmpInfo(personId);
+//            if(!StringUtils.isBlank(typeNumber)) {
+//                VaApplyBillUtil.updatePersonType(typeNumber, personId);
+//                bill.set("nckd_iscancelleave",true);
+//            }
+//        }
+//        SaveServiceHelper.save(bills);
+        super.afterExecuteOperationTransaction(e);
+    }
+
+    @Override
+    public void beginOperationTransaction(BeginOperationTransactionArgs e) {
+        DynamicObject[] bills = e.getDataEntities();
+        for(DynamicObject bill : bills) {
+            if(!bill.getBoolean("nckd_islongleave"))
+                continue;
+            Long personId = bill.getLong("personid.id");
+            //查询请假人当前任职用工关系状态
+            String typeNumber = VaApplyBillUtil.getLaborStatusNumber(personId);
+            if(!StringUtils.isBlank(typeNumber)) {
+                VaApplyBillUtil.updatePersonType(typeNumber, personId);
+                bill.set("nckd_iscancelleave",true);
+            }
+
+            DynamicObject position = VaApplyBillUtil.getPersonPrimaryPosition(personId);
+            List<Long> positionIds = new ArrayList<Long>();
+            positionIds.add(position.getLong("id"));
+            DynamicObject[] ermanFiles = VaApplyBillUtil.getErmanFilesByPosition(positionIds);
+            //转成List<Long>
+            List<Long> ermanFileIds = Arrays.stream(ermanFiles).map(dyx -> dyx.getLong("id")).collect(Collectors.toList());
+            //调用标准方法获取ermanFile
+            List<Map<String, Object>> erManFiles = PersonExternalService.getInstance().invokeGetCardFields(ermanFileIds);
+            //actionId 默认201100_S
+            QFilter filter = new QFilter("number", "=", "201100_S");
+            DynamicObject action = BusinessDataServiceHelper.loadSingle("hpfs_chgaction",new QFilter[]{filter});
+            Date partEndDate = new Date();
+            //调用标准终止兼职方法
+            ParttimeServiceHelper.batchEndParttime(action.getLong("id"), partEndDate, erManFiles);
+        }
+        super.beginOperationTransaction(e);
+    }
+}

+ 52 - 0
code/jyyy/nckd-jimin-jyyy-hr/src/main/java/nckd/jimin/jyyy/hr/wtc/wtabm/opplugin/web/vaapply/VaUpdateBillEditEx.java

@@ -0,0 +1,52 @@
+package nckd.jimin.jyyy.hr.wtc.wtabm.opplugin.web.vaapply;
+
+import kd.bos.bill.AbstractBillPlugIn;
+import kd.bos.bill.BillOperationStatus;
+import kd.bos.bill.BillShowParameter;
+import kd.bos.dataentity.entity.DynamicObject;
+import kd.bos.dataentity.entity.DynamicObjectCollection;
+import kd.bos.form.field.FieldEdit;
+import kd.bos.logging.Log;
+import kd.bos.logging.LogFactory;
+import kd.bos.orm.query.QFilter;
+import kd.hr.hbp.business.servicehelper.HRBaseServiceHelper;
+import kd.sdk.plugin.Plugin;
+import kd.wtc.wtabm.formplugin.web.vaupdate.VaUpdateBillEdit;
+
+import java.util.EventObject;
+
+/**
+ * 单据界面插件
+ */
+public class VaUpdateBillEditEx extends AbstractBillPlugIn implements Plugin {
+
+    private static final Log LOG = LogFactory.getLog(VaUpdateBillEditEx.class);
+
+
+    @Override
+    public void afterBindData(EventObject e) {
+        super.afterBindData(e);
+        this.getModel().beginInit();
+        BillShowParameter formShowParameter = (BillShowParameter)this.getView().getFormShowParameter();
+        BillOperationStatus status = formShowParameter.getBillStatus();
+        Long id;
+        if (status.equals(BillOperationStatus.ADDNEW)) {
+            id = (Long)formShowParameter.getCustomParam("parentid");
+            this.copyModel(id);
+            this.getModel().endInit();
+        }
+    }
+
+    /**
+     * 携带二开字段到变更单上
+     * @param parentId
+     */
+    private void copyModel(Long parentId) {
+        HRBaseServiceHelper serviceHelper = new HRBaseServiceHelper("wtabm_vaapply");
+        DynamicObject parentDynObj = serviceHelper.loadDynamicObject(new QFilter("id", "=", parentId));
+        this.getModel().setValue("nckd_isupdateperson", parentDynObj.get("nckd_isupdateperson"));
+        this.getModel().setValue("nckd_islongleave", parentDynObj.get("nckd_islongleave"));
+        this.getModel().setValue("nckd_iscancelleave", parentDynObj.get("nckd_iscancelleave"));
+        this.getView().updateView("fieldsetpanelap21");
+    }
+}