Browse Source

代码提交

qingwu 4 tháng trước cách đây
mục cha
commit
249b50d6d5

+ 908 - 0
GDYSL/js/shr/addon/customer/web/js/batchSubmitShemeBillMySubmissionEditEx.js

@@ -0,0 +1,908 @@
+shr.defineClass("shr.customer.gtiit.BatchSubmitShemeBillMySubmissionEditEx", shr.compensation.BatchSubmitShemeBillMySubmissionEdit, {
+
+    initalizeDOM: function () {
+        shr.customer.gtiit.BatchSubmitShemeBillMySubmissionEditEx.superClass.initalizeDOM.call(this);
+
+    },
+    /**
+     * 初始化表格头数据
+     * @return {[type]} [description]
+     */
+    getEditGridColModel: function () {
+        var _self = this;
+        var submitSchemeId = '';
+        var ctrlrole = $('#submitScheme').attr('ctrlrole');
+
+        if (ctrlrole == 'promptBox') {
+            submitSchemeId = $('#submitScheme').shrPromptBox('getValue').id;
+        } else {
+            submitSchemeId = $('#submitScheme').val();
+        }
+        var datasource = _self.getFieldValue('datasource');
+        if (datasource == "") {
+            datasource = 2;
+        }
+        //表格处理
+        _self.remoteCall({
+            method: "getEditGridColModel",
+            param: {
+                submitSchemeId: submitSchemeId,
+                datasource: datasource
+            },
+            success: function (data) {
+                var colModel = data.colModel;
+
+                for (var i = 0; i < data.colNames.length; i++) {
+                    var colName = data.colNames[i];
+                    if (colName == "Contract Start Time(合同开始时间)") {
+                        data.colNames[i] = "Start Time开始时间)"
+
+                    } else if (colName == "Contract End Time(合同结束时间)") {
+                        data.colNames[i] = "End Time(结束时间)"
+                    }
+                }
+
+                _self.colNames = data.colNames;
+                _self.colModel = data.colModel;
+                if (colModel) {
+                    var col;
+                    // 初始化数值类型的列,并且获取到精度,用来做保存数据的格式化
+                    var reg = new RegExp('^[sS]\\d+');
+                    var decimalPrecision = 0;
+                    for (var i = 0, size = colModel.length; i < size; i++) {
+                        col = colModel[i];
+                        if (col.label == "Contract Start Time(合同开始时间)") {
+                            col.label = "Start Time开始时间)"
+
+                        }
+                        if (col.label == "Contract End Time(合同结束时间)") {
+                            col.label = "End Time(结束时间)"
+                        }
+                        if (col && col.name && col.name && reg.test(col.name) && "numberfield" == col.formatter) {
+                            decimalPrecision = col.editoptions.inputJson.decimalPrecision;
+                            _self.numTypeFieldMap[col.name] = decimalPrecision;
+                        }
+                    }
+                }
+                _self.setSubmitSchemeDescription(data.description);
+                _self.renderGridHeader();
+            }
+        });
+    },
+    setGridNameEvent: function () {
+        var _self = this;
+        $entry = $('#entry');
+        $entry.jqGrid("option", {
+            afterSaveCell: function (rowid, cellname, value, iRow, iCol, rowData) {
+                if (cellname == "startTime" || cellname == "endTime" || cellname == "restStartTime" || cellname == "restEndTime") {
+                    //发生日期
+                    var effectTime = $("#entry").jqGrid("getCell", rowid, "effectDate");
+                    var cellTime = $("#entry").jqGrid("getCell", rowid, cellname);
+                    if (effectTime && cellTime) {
+                        var effectDate = _self.convertTimeZone(effectTime);
+                        let year = effectDate.getFullYear();   // 获取年份(4位数)
+                        let month = effectDate.getMonth() + 1; // 获取月份(0-11,需要加1)
+                        let day = effectDate.getDate();        // 获取日期(1-31)
+                        // 格式化为年月日字符串
+                        let formattedDate = `${year}-${month.toString().padStart(2, '0')}-${day.toString().padStart(2, '0')}`;
+
+                        var cellTimeOfDate = new Date(cellTime);
+                        let hours = cellTimeOfDate.getHours();     // 获取小时(0-23)
+                        let minutes = cellTimeOfDate.getMinutes(); // 获取分钟(0-59)
+                        let formattedTime = `${hours.toString().padStart(2, '0')}:${minutes.toString().padStart(2, '0')}`;
+                        $("#entry").jqGrid("setCell", rowid, cellname, formattedDate + " " + formattedTime);
+                    }
+                    _self.countHourAndMultiple(rowid);
+                }
+                if (cellname == "effectDate") {
+                    //发生日期
+                    var effectTime = $("#entry").jqGrid("getCell", rowid, "effectDate");
+                    var effectDate = new Date();
+                    if (effectTime) {
+                        effectDate = new Date(effectTime);
+                    }
+                    effectDate = _self.convertTimeZone(effectTime);
+                    let year = effectDate.getFullYear();   // 获取年份(4位数)
+                    let month = effectDate.getMonth() + 1; // 获取月份(0-11,需要加1)
+                    let day = effectDate.getDate();        // 获取日期(1-31)
+                    // 格式化为年月日字符串
+                    let formattedDate = `${year}-${month.toString().padStart(2, '0')}-${day.toString().padStart(2, '0')}`;
+
+                    //开始时间
+                    var startTime = $("#entry").jqGrid("getCell", rowid, "startTime");
+                    //结束时间
+                    var endTime = $("#entry").jqGrid("getCell", rowid, "endTime");
+                    //休息开始时间
+                    var restStartTime = $("#entry").jqGrid("getCell", rowid, "restStartTime");
+                    //休息结束时间
+                    var restEndTime = $("#entry").jqGrid("getCell", rowid, "restEndTime");
+                    if (startTime) {
+                        var startTimeOfDate = new Date(startTime);
+                        let hours = startTimeOfDate.getHours();     // 获取小时(0-23)
+                        let minutes = startTimeOfDate.getMinutes(); // 获取分钟(0-59)
+                        let formattedTime = `${hours.toString().padStart(2, '0')}:${minutes.toString().padStart(2, '0')}`;
+                        $("#entry").jqGrid("setCell", rowid, "startTime", formattedDate + " " + formattedTime);
+                    }
+                    if (endTime) {
+                        var endTimeOfDate = new Date(endTime);
+                        let hours = endTimeOfDate.getHours();     // 获取小时(0-23)
+                        let minutes = endTimeOfDate.getMinutes(); // 获取分钟(0-59)
+                        let formattedTime = `${hours.toString().padStart(2, '0')}:${minutes.toString().padStart(2, '0')}`;
+                        $("#entry").jqGrid("setCell", rowid, "endTime", formattedDate + " " + formattedTime);
+                    }
+                    if (restStartTime) {
+                        var restStartTimeOfDate = new Date(restStartTime);
+                        let hours = restStartTimeOfDate.getHours();     // 获取小时(0-23)
+                        let minutes = restStartTimeOfDate.getMinutes(); // 获取分钟(0-59)
+                        let formattedTime = `${hours.toString().padStart(2, '0')}:${minutes.toString().padStart(2, '0')}`;
+                        $("#entry").jqGrid("setCell", rowid, "restStartTime", formattedDate + " " + formattedTime);
+                    }
+                    if (restEndTime) {
+                        var restEndTimeOfDate = new Date(restEndTime);
+                        let hours = restEndTimeOfDate.getHours();     // 获取小时(0-23)
+                        let minutes = restEndTimeOfDate.getMinutes(); // 获取分钟(0-59)
+                        let formattedTime = `${hours.toString().padStart(2, '0')}:${minutes.toString().padStart(2, '0')}`;
+                        $("#entry").jqGrid("setCell", rowid, "restEndTime", formattedDate + " " + formattedTime);
+                    }
+                    _self.countHourAndMultiple(rowid);
+                }
+            },
+            "afterEditCell": function (rowid, colName, value, iRow, iCol, rowData) {
+                if (colName === "person") {
+                    var id = "#" + iRow + "_person";
+                    var option = $(id).shrPromptBox("option");
+                    var subWidgetOptions = option.subWidgetOptions
+                    subWidgetOptions.multiselect = true;
+                    subWidgetOptions.filter = " hrOrgUnit.id = '" + $("#hrOrgUnit").shrPromptBox("getValue").id + "'";
+                    subWidgetOptions.otherParams = { adminOrgId: $("#adminOrg").shrPromptBox("getValue").id, hrOrgUnitId: $("#hrOrgUnit").shrPromptBox("getValue").id };
+                    $(id).shrPromptBox("option", {
+                        "subWidgetOptions": subWidgetOptions,
+                        "onchange": function (e, val) {
+                            var personData = val.current;
+                            var prevPersonData = val.previous;
+                            var length = personData.length;
+                            var newRowData = [];
+                            for (var i = 0; i < length; i++) {
+                                var item = personData[i];
+                                var updateItem = {};
+                                var oldData = $entry.wafGrid("getRowData", rowid);
+                                var startDate;
+                                var endDate;
+                                var isqw;
+                                if (item["empOrgRelation.assignType"].alias == "主要任职") {
+                                    isqw = true;
+                                    _self.remoteCall({
+                                        method: "getDateTime",
+                                        param: { personId: item["person.id"], type: "Full" },
+                                        async: false,
+                                        success: function (data) {
+                                            startDate = data.startDate
+                                            endDate = data.endDate
+                                        },
+                                        error: function (error) {
+                                            console.log(error);
+                                        }
+                                    });
+                                } else if (item["empOrgRelation.assignType"].alias == "兼职任职") {
+                                    isqw = false;
+                                    _self.remoteCall({
+                                        method: "getDateTime",
+                                        param: {
+                                            personId: item["person.id"],
+                                            adminOrgId: item["adminOrg.id"],
+                                            positionId: item["position.id"],
+                                            hourlywage: item["empOrgRelation.hourlywage"],
+                                            type: "Part"
+                                        },
+                                        async: false,
+                                        success: function (data) {
+                                            startDate = data.startDate
+                                            endDate = data.endDate
+                                        },
+                                        error: function (error) {
+                                            console.log(error);
+                                        }
+                                    });
+                                }
+
+
+                                if (i == 0) {
+                                    // if(!prevPersonData || prevPersonData.id !== item["person.id"]){
+                                    if (item.id !== oldData.cmpEmpORelation.id) {
+                                        var beginContractDate, endContractDate;
+                                        _self.remoteCall({
+                                            method: "getContractDate",
+                                            param: { positionId: item["position.id"] },
+                                            async: false,
+                                            success: function (data) {
+                                                beginContractDate = data.beginContractDate;
+                                                endContractDate = data.endContractDate;
+                                            },
+                                            error: function () { }
+                                        });
+
+                                        updateItem = {
+                                            "number": item["person.number"],
+                                            "adminOrgUnit": { id: item["adminOrg.id"], name: item["adminOrg.name"] },
+                                            "position": { id: item["position.id"], name: item["position.name"] },
+                                            "cmpEmpORelation": { id: item.id, name: item.id },
+                                            "person": { id: item["person.id"], name: item["person.name"] },
+                                            "submitElement": oldData.submitElement,
+                                            "id": oldData.id,
+                                            "tempId": oldData.tempId,
+                                            "effectDate": oldData.effectDate,
+                                            "currency": oldData.currency,
+                                            "dealStatus": oldData.dealStatus,
+                                            "superiorId": item["parentPerson.id"],
+                                            "hourlyWage": item["empOrgRelation.hourlywage"],
+                                            "beginContractDate": beginContractDate,
+                                            "endContractDate": endContractDate,
+                                            "superiorName": item["parentPerson.name"]
+                                        }
+
+                                        updateItem.beginContractDate = startDate
+                                        updateItem.endContractDate = endDate
+
+                                        var newData = _self.updateRow(updateItem, oldData);
+                                        $entry.wafGrid("setRowData", rowid, newData);
+                                    } else {
+
+                                        oldData.beginContractDate = startDate
+                                        oldData.endContractDate = endDate
+
+                                        $entry.wafGrid("setRowData", rowid, oldData);
+                                    }
+                                } else {
+                                    var beginContractDate, endContractDate;
+                                    _self.remoteCall({
+                                        method: "getContractDate",
+                                        param: { positionId: item["position.id"] },
+                                        async: false,
+                                        success: function (data) {
+                                            beginContractDate = data.beginContractDate;
+                                            endContractDate = data.endContractDate;
+                                        },
+                                        error: function () { }
+                                    });
+
+                                    var newData = _self.createNewEntryModel();
+                                    newData.number = item["person.number"];
+                                    newData.person = { id: item["person.id"], name: item["person.name"] };
+                                    newData.adminOrgUnit = { id: item["adminOrg.id"], name: item["adminOrg.name"] };
+                                    newData.position = { id: item["position.id"], name: item["position.name"] };
+                                    newData.cmpEmpORelation = { id: item.id, name: item.id };
+
+                                    newData.superiorId = item["parentPerson.id"];
+                                    newData.hourlyWage = item["empOrgRelation.hourlywage"];
+                                    newData.beginContractDate = beginContractDate;
+                                    newData.endContractDate = endContractDate;
+                                    newData.superiorName = item["parentPerson.name"];
+
+                                    newData.beginContractDate = startDate
+                                    newData.endContractDate = endDate
+                                    newRowData.push(newData);
+                                }
+                            }
+                            if (newRowData.length) {
+                                $entry.jqGrid('addBlockData', 'id', newRowData);
+                                $("#entry").jqGrid('setGridHeight', 300);
+                            }
+                            setTimeout(function () {
+                                var frozenScrollTop = $(".frozen-bdiv").scrollTop();
+                                $("#entry").parents(".ui-jqgrid-bdiv").scrollTop(frozenScrollTop);
+                            })
+                            _self.countHourAmount();
+                        }
+                    })
+                }
+            }
+        });
+        $entry.delegate('input', 'focus', function () {
+            _self.setCellLength();
+        });
+    },
+    //计算分录的工时和总金额
+    countHourAndMultiple: function (rowid) {
+        //发生日期
+        var effectTime = $("#entry").jqGrid("getCell", rowid, "effectDate");
+        //开始时间
+        var startTime = $("#entry").jqGrid("getCell", rowid, "startTime");
+        //结束时间
+        var endTime = $("#entry").jqGrid("getCell", rowid, "endTime");
+        //休息开始时间
+        var restStartTime = $("#entry").jqGrid("getCell", rowid, "restStartTime");
+        //休息结束时间
+        var restEndTime = $("#entry").jqGrid("getCell", rowid, "restEndTime");
+        if (startTime != "" && endTime != "") {
+            var startTimeOfDate = new Date(startTime);
+            var endTimeOfDate = new Date(endTime);
+            var times = 0;
+            if (restStartTime != "" && restEndTime != "") {
+                var restStartTimeOfDate = new Date(restStartTime);
+                var restEndTimeOfDate = new Date(restEndTime);
+                var times = restEndTimeOfDate.getTime() - restStartTimeOfDate.getTime();
+                if (times < 0) {
+                    times = 0;
+                }
+            }
+            var se = endTimeOfDate.getTime() - startTimeOfDate.getTime() - times;
+            //工时
+            var workHours = se / (3600 * 1000);
+            workHours = workHours.toFixed(2);
+            //时薪
+            var hourlyWage = $("#entry").jqGrid("getCell", rowid, "hourlyWage");
+            if (!hourlyWage) {
+                hourlyWage = 0;
+            }
+            //倍数
+            var multiple = 1;
+            var note = null;
+            //判断是否法定节假日和休息日
+            if (effectTime) {
+                let date = this.convertTimeZone(effectTime);
+                let year = date.getFullYear();   // 获取年份(4位数)
+                let month = date.getMonth() + 1; // 获取月份(0-11,需要加1)
+                let day = date.getDate();        // 获取日期(1-31)
+                // 格式化为年月日字符串
+                let formattedDate = `${year}-${month.toString().padStart(2, '0')}-${day.toString().padStart(2, '0')}`;
+                _self.remoteCall({
+                    type: "post",
+                    async: false,
+                    method: "workMultiple",
+                    param: { "otDate": formattedDate },
+                    success: function (res) {
+                        if (res.returnType) {
+                            if (res.returnType == "0") {
+                                //法定节假日
+                                multiple = 4;
+                                note = "Statuary Holiday,400%of basic salary";
+                            } else if (res.returnType == "1") {
+                                //休息日
+                                note = "Weekend";
+                            }
+                        }
+                    }
+                });
+            }
+
+            var amount = workHours * hourlyWage * multiple;
+            //工时
+            $("#entry").jqGrid("setCell", rowid, "totalWorkHours", workHours);
+            //总金额
+            $("#entry").jqGrid("setCell", rowid, "totalAmount", amount.toFixed(2));
+            //说明
+            $("#entry").jqGrid("setCell", rowid, "explain", note);
+            this.countHourAmount();
+        }
+    },
+    convertTimeZone: function (date) {
+        const inputDate = new Date(date);
+        const beijingTime = new Date(inputDate.toLocaleString("en-US", { timeZone: "Asia/Shanghai" }));
+        return beijingTime;
+    },
+    //计算单头的总工时和总金额
+    countHourAmount: function () {
+        var allRowData = $("#entry").jqGrid("getAllRowData");
+        var totalWorkHours = 0;
+        var totalAmount = 0;
+        for (var i = 0; i < allRowData.length; i++) {
+            var workHours = allRowData[i].totalWorkHours;
+            var amount = allRowData[i].totalAmount;
+            totalWorkHours = Number(totalWorkHours) + Number(workHours);
+            totalAmount = Number(totalAmount) + Number(amount);
+        }
+        this.getField("totalWorkHours").shrNumberField("setValue", totalWorkHours);
+        this.getField("totalAmount").shrNumberField("setValue", totalAmount);
+    },
+    verify: function () {
+        //_self.setEntryAttr();
+        var tds = $("#entry td[class*='dirty-cell']");
+        for (var i = 0; i < tds.length; i++) {
+            var cur = $(tds[i]);
+            var value;
+            if (cur.children().length > 0) {
+                value = cur.children().attr('value');
+            }
+            var type = "NUMBER";
+            if (!_self.checkNumValid(value, type)) {
+                shr.showWarning({
+                    message: $.cmpIntegrateI18n.submitBill.label11 /* 请输入正确格式 */,
+                    hideAfter: 9
+                });
+                $(tds[i]).focus();
+                $(tds[i]).css({
+                    "border": "solid 2px red"
+                });
+                return false;
+            } else {
+                $(tds[i]).css({
+                    "border": ""
+                });
+            }
+        }
+
+        //校验开始时间和结束时间不能有重叠
+        var allRowData = $("#entry").jqGrid("getAllRowData");
+        for (var i = 0; i < allRowData.length; i++) {
+            var startTime = new Date(allRowData[i]["startTime"]);
+            var endTime = new Date(allRowData[i]["endTime"]);
+            for (var j = i + 1; j < allRowData.length; j++) {
+                var nextStartTime = new Date(allRowData[j]["startTime"]);
+                var nextEndTime = new Date(allRowData[j]["endTime"]);
+                if (startTime < nextEndTime && nextStartTime < endTime) {
+                    shr.showWarning({ message: "Intersection between start and end times" });
+                    return false;
+                }
+            }
+        }
+
+        //校验分录只能有一种职位
+        var positionSet = new Set();
+        //校验分录只能是同一个直接上级
+        var superiorSet = new Set();
+        for (var i = 0; i < allRowData.length; i++) {
+            if (allRowData[i].position) {
+                positionSet.add(allRowData[i].position.id);
+            } else {
+                positionSet.add("");
+            }
+            if (allRowData[i].superiorId) {
+                superiorSet.add(allRowData[i].superiorId);
+            } else {
+                superiorSet.add("");
+            }
+        }
+        if (positionSet.size > 1) {
+            shr.showWarning({ message: "Entries cannot have data from different positions" });
+            return false;
+        }
+        if (superiorSet.size > 1) {
+            shr.showWarning({ message: "The direct supervisor corresponding to the employee position in the entry must be consistent" });
+            return false;
+        }
+
+        var calSchemeField = "submitScheme_el";
+        if (_self.getOperateState() == 'VIEW') {
+            calSchemeField = "submitScheme";
+        }
+        var calSchemeId = $("#" + calSchemeField).val();
+        //是否勾选校验方案
+        var isPlanCheck = true;
+        _self.remoteCall({
+            type: "post",
+            async: false,
+            method: "isTakeCheck",
+            param: { calSchemeId: calSchemeId },
+            success: function (res) {
+                isPlanCheck = res.isPlanCheck;
+            }
+        });
+        if (isPlanCheck) {
+            for (var i = 0; i < allRowData.length; i++) {
+                var beginContractDate = new Date(allRowData[i]["beginContractDate"]);
+                var endContractDate = new Date(allRowData[i]["endContractDate"]);
+                var effectDate = new Date(allRowData[i]["effectDate"]);
+                if (beginContractDate && endContractDate) {
+                    //发生日期要在合同开始和结束日期之间
+                    if (effectDate < beginContractDate || effectDate > endContractDate) {
+                        shr.showWarning({ message: "The occurrence date should be between the start and end dates of the contract" });
+                        return false;
+                    }
+                }
+            }
+
+            var flag = true;
+            _self.remoteCall({
+                type: "post",
+                async: false,
+                method: "getInductionDate",
+                param: {},
+                success: function (res) {
+                    if (res.enterDate) {
+                        var enterDate = new Date(res.enterDate);
+                        for (var i = 0; i < allRowData.length; i++) {
+                            var effectDate = new Date(allRowData[i]["effectDate"]);
+                            //发生日期不能小于入职日期
+                            if (effectDate < enterDate) {
+                                shr.showWarning({ message: "The occurrence date filled in by the employee cannot be earlier than the start date" });
+                                flag = false;
+                            }
+                        }
+                    }
+                }
+            });
+            if (!flag) {
+                return flag;
+            }
+        }
+
+        return true;
+    },
+    /**
+     * 删除行
+     */
+    deleteRowAction: function (event) {
+        var $editGrid = this.getEditGrid(event.currentTarget);
+        var submitSchemeId = '';
+        var ctrlrole = $('#submitScheme').attr('ctrlrole');
+        if (ctrlrole == 'promptBox') {
+            submitSchemeId = $('#submitScheme').shrPromptBox('getValue').id;
+        } else {
+            submitSchemeId = $('#submitScheme').val();
+        }
+        var ids = $editGrid.jqGrid('getSelectedRows');
+
+        if (!ids || ids.length === 0) {
+            shr.showWarning({ message: $.cmpIntegrateI18n.common.selectRowMust /* 请先选择表格中的数据! */ });
+            return;
+        }
+
+        var deleteRowIds = "";
+        if (ids) {
+            for (var i = ids.length - 1; i >= 0; i--) {
+                deleteRowIds += ids[i] + ",";
+                $editGrid.jqGrid('delRow', ids[i]);
+            }
+            //新增页面,清除缓存数据
+            $("#entry")[0].p.data = [];
+            this.clearDelEntryIdsFromDB(submitSchemeId, deleteRowIds);
+        }
+        var billId = $("#id").val();
+        //删除分录时如果这条数据已在数据库中,则会直接删除数据库记录,所以要重新计算单头的总工时和总金额
+        _self.remoteCall({
+            type: "post",
+            async: false,
+            method: "countHourAmount",
+            param: { "billId": billId },
+            success: function (res) {
+
+            }
+        });
+        this.countHourAmount();
+    },
+    submitAction: function (event) {
+        var _self = this;
+        if (_self.validate() && _self.verify()) {
+
+            var allRowData = $("#entry").jqGrid("getAllRowData");
+            // 获取当前日期
+            let currentDate = new Date();
+            // 获取本月的第一天
+            let firstDayOfCurrentMonth = new Date(currentDate.getFullYear(), currentDate.getMonth(), 1);
+            // 获取上个月的第一天
+            let firstDayOfLastMonth = new Date(currentDate.getFullYear(), currentDate.getMonth() - 1, 1);
+            if (currentDate.getMonth() === 0) {
+                // 如果当前月份为1月,需要调整为上一年的12月
+                firstDayOfLastMonth.setFullYear(currentDate.getFullYear() - 1);
+            }
+
+            var calSchemeField = "submitScheme_el";
+            if (_self.getOperateState() == 'VIEW') {
+                calSchemeField = "submitScheme";
+            }
+            var calSchemeId = $("#" + calSchemeField).val();
+
+            var isPlanCheck = true;
+            var isCurrentDepart = true;
+            //获取是否勾选了 校验方案和离职方案
+            _self.remoteCall({
+                type: "post",
+                async: false,
+                method: "isTakeCheck",
+                param: { calSchemeId: calSchemeId },
+                success: function (res) {
+                    isPlanCheck = res.isPlanCheck;
+                    isCurrentDepart = res.isCurrentDepart;
+                }
+            });
+
+            //勾选离职方案
+            if (isCurrentDepart) {
+                var isDepartMonth = true;
+                var cmpOrgRelationId = "";
+                for (var i = 0; i < allRowData.length; i++) {
+                    cmpOrgRelationId = allRowData[i].cmpEmpORelation.id;
+                }
+                //判断当月是否有离职生效日期或兼职失效日期在本月的数据
+                _self.remoteCall({
+                    type: "post",
+                    async: false,
+                    method: "checkDepartDate",
+                    param: { cmpOrgRelationId: cmpOrgRelationId },
+                    success: function (res) {
+                        isDepartMonth = res.flag;
+                    }
+                });
+                //勾选离职方案后只能提交当月的数据
+                if (isDepartMonth) {
+                    for (var i = 0; i < allRowData.length; i++) {
+                        var effectDate = new Date(allRowData[i]["effectDate"]);
+                        if (!(effectDate.getFullYear() == currentDate.getFullYear() && effectDate.getMonth() == currentDate.getMonth())) {
+                            shr.showWarning({ message: "Only allow submission of the occurrence date of the current month" });
+                            return false;
+                        }
+                    }
+                } else {
+                    //当月没有离职或兼职失效数据时不允许提交
+                    shr.showWarning({ message: "The selected position does not have a resignation form that takes effect this month, or the expiration date of the part-time job is not within this month, so it cannot be submitted" });
+                    return false;
+                }
+            } else if (isPlanCheck) {
+                //校验XX号之后不允许提交
+                var submitDateMessage = '';
+                _self.remoteCall({
+                    type: "post",
+                    async: false,
+                    method: "checkSumbitDate",
+                    param: {},
+                    success: function (res) {
+                        submitDateMessage = res.resultMessage;
+                    }
+                });
+                if (submitDateMessage) {
+                    shr.showWarning({ message: submitDateMessage });
+                    return false;
+                }
+
+                //勾选校验方案只能提交上月的数据
+                for (var i = 0; i < allRowData.length; i++) {
+                    var effectDate = new Date(allRowData[i]["effectDate"]);
+                    if (!(effectDate >= firstDayOfLastMonth && effectDate < firstDayOfCurrentMonth)) {
+                        shr.showWarning({ message: "Only allow submission of work hours from the previous month" });
+                        return false;
+                    }
+                }
+            }
+
+            _self.preVerify(function () {
+                $.extend($.verifyRuleTool, _self.getVerifyOptions(submitNodeId))
+                $.verifyRuleTool.afterVeriyCallBack = function () {
+                    shr.showConfirm($.shrI18n.common.tips.submitConfirm, function () {
+                        _self.doSubmit(event, 'submit');
+                    });
+                };
+                $.verifyRuleTool.verifyInto();
+                $.verifyRuleTool.ip = "submitShemeBill"
+            }, 'submit')
+        }
+
+    },
+    initForm: function () {
+        var _self = this;
+        _self.assembleNewModelIdForAddNewOperate();
+        _self.setInitData();
+        _self.addCopyBtn();
+        _self.ChangeSubmitScheme_event();
+        _self.setSubmitSchemeState();
+        _self.auditPageAdjust();
+        shr.loadScript("/shr/addon/compensation/web/js/integrate/base/submitverify/cmpVerifyRuleTool.js")
+
+        //编辑和查看状态下初始化表格
+        if (_self.operateState == 'VIEW' || _self.operateState == 'EDIT') {
+            _self.getEditGridColModel();
+            _self.initF7TypeFieldArr();
+        }
+
+        if (_self.operateState == 'ADDNEW' || _self.operateState == 'EDIT') {
+            _self.setSubmitSchemeF7Filter();
+            _self.setDescriptionLength();
+        }
+        if (_self.operateState == 'ADDNEW' || _self.operateState == 'VIEW') {
+            $("#availableBudget").hide();
+        }
+
+        if (_self.operateState == 'VIEW') {
+            // 暂时先取消导出功能
+            _self.addViewBtn();
+            //排除员工自助提报的情景
+            if ('1' != $("#datasource").val()) {
+                _self.initJumpToPageButton();
+            }
+        }
+        // 字段授权
+        _self.checkNoPermFields();
+        // 根据提报方案是否关联了预算额度模板,来决定费用承担组织、预算年度,费用类型是否展示
+        _self.monitorBudget();
+    },
+    renderGridHeader: function (islocaldata) {
+        var _self = this;
+        var colModel = _self.colModel;
+        var colNames = _self.colNames;
+        var $entry = $('#entry');
+        //如果表头没数据,默认展示序号
+        if (!(colNames && colNames[0]) || !(colModel && colModel[0])) {
+            colNames = ['id'];
+            colModel = [{
+                "name": "id",
+                "label": "id",
+                "frozen": false,
+                "width": 150,
+                "align": "left",
+                "hidden": true,
+                "key": true,
+                "editable": false,
+                "sorttype": "",
+                "sortable": false,
+                "classes": "disabled"
+            }];
+        }
+
+        var ctrlrole = $entry.attr("ctrlrole");
+        //表格已初始化,销毁
+        if (ctrlrole) {
+            $entry.jqGrid('gridUnload');
+        }
+
+        var columnModel = '';
+        var hasFrozenColumn = false;
+        //拼接columnModel字符串
+        if (colModel && colModel[0]) {
+            colModel.forEach(function (element, index) {
+                if (element['frozen']) {
+                    hasFrozenColumn = true;
+                }
+                columnModel += element.name;
+                if (index != colModel.length - 1) {
+                    columnModel += ',';
+                }
+            });
+        }
+
+        // var grid_readonly = _self.operateState == 'VIEW';
+        var grid_readonly = _self.operateState === 'VIEW' || _self.operateState === 'EDIT' || _self.operateState === 'ADDNEW';
+        var grid_celledit = _self.operateState === 'EDIT' || _self.operateState === 'ADDNEW';
+
+        var url = _self.getGridDataRequestURL();
+        var dataGrid_option = {
+            url: url,
+            datatype: islocaldata == '1' ? "local" : "json",
+            colNames: colNames,
+            jsonReader: {
+                repeatitems: false
+            },
+            sorterItems: "",
+            colModel: colModel,
+            postData: $entry[0].p.postData,
+            customPager: '#gridPager',
+            hasPager: grid_readonly,
+            cellEdit: grid_celledit,
+            height: 'auto',
+            rowList: [50, 100, 200, 500],
+            autowidth: true,
+            viewrecords: true,
+            cellsubmit: "clientArray",
+            multiselect: true,
+            _type_: "EditGrid",
+            shrinkToFit: false,
+            mtype: "get",
+            recordtext: '({0}-{1})/{2}',
+            gridview: true,
+            pginput: true,
+            rownumbers: true,
+            footerrow: true,
+            userDataOnFooter: true,
+            clientFooter: false,
+            serverFooter: false,
+            sumColModel: [],
+            pagerpos: 'center',
+            recordpos: 'left',
+            pginputpos: 'right',
+            keyOptions: {
+                addNewRowForLastCell: false,
+                loop: true
+            }
+        };
+        //查看模式分页查询,编辑默认查全部
+        if (grid_readonly) {
+            dataGrid_option.rowNum = 50;
+        } else {
+            dataGrid_option.rowNum = 100000;
+        }
+        dataGrid_option.loadComplete = function (ret) {
+            $("#entry")[0].__isDirty = false;
+            if (grid_readonly) {
+                //初始化分页
+                if (!$("#gridPager")[0]) {
+                    var pagerDiv = '<div id="gridPager"></div>';
+                    if ($('.editGrid-toolbar')[0]) {
+                        $('.editGrid-toolbar').after(pagerDiv);
+                    } else {
+                        $('#entry_cont').prepend(pagerDiv);
+                    }
+                    $("#entry").setCustomPager("#gridPager");
+                }
+                var datas = $("#entry").jqGrid("getRowData");
+                if (datas && datas.length > 8) {   //表格数据超过一定数量,限制高度
+                    $("#entry").jqGrid('setGridHeight', 300);
+                }
+                shr.setIframeHeight();
+            }
+
+        };
+
+        dataGrid_option.onPaging = function () {
+        }
+
+        dataGrid_option.beforeReloadGrid = function () {
+            if (!grid_readonly) {
+                waf("#entry").find('tr.selected-row').click();
+                var data = waf("#entry").jqGrid('getGridParam', 'data');
+                data.length = 0;
+                waf("#entry").jqGrid('setGridParam', { data: $("#entry").jqGrid('getAllPageData'), datatype: 'local' });
+            }
+            shr.setIframeHeight();
+
+        }
+        //选择表格前设置姓名过滤条件
+        dataGrid_option.beforeSelectRow = function () {
+            _self.setNameF7Filter();
+        }
+        //审批时有滚动条时,把右侧DIV右移了一些挡住了列表的滚动条,现在先给列表的父标签一个右内边距,这样就不会被挡道。
+        $('#entry_cont').css('padding-right', '20px')
+        waf("#entry").jqGrid(dataGrid_option).jqGrid("setFrozenColumns");
+
+        waf("#entry").jqGrid("resizeGrid", {
+            base: waf("#entry"),
+            offset: 0
+        });
+        waf(window).resize(function () {
+            waf.ieHack.hackResize(function (e) {
+                waf("#entry").jqGrid("resizeGrid", {
+                    base: waf("#entry"),
+                    offset: 0
+                });
+            }, waf("#entry"));
+        });
+
+        $entry.jqGrid(dataGrid_option).trigger('reloadGrid');
+
+        //查看状态初始化分页
+        if (grid_readonly) {
+            _self.initPage();
+        }
+
+        if (_self.operateState == 'ADDNEW' || _self.operateState == 'EDIT') {
+            _self.setGridNameEvent();
+        }
+        if (!$("#entry_searchBar").length) {
+            _self.initCmpEntrySearchBar();
+        }
+    },
+    /**
+     * 分录增加复制按钮
+     */
+    addCopyBtn: function () {
+        var _self = this;
+        var str = [];
+        str.push('<button id="copyRow" type="button" onclick="jsBinder.copyRowAction" name="copyRow" class="shrbtn">');
+        str.push('Copy');
+        str.push('</button>');
+        str.push('<script>');
+        str.push('$(function() {');
+        str.push('  $("#copyRow").shrButton({');
+        str.push('  actionBinding: "copyRowAction",');
+        str.push('  subAction: "",');
+        str.push('  customData: "",');
+        str.push('  permItemId:""');
+        str.push('  });');
+        str.push('});');
+        str.push('</script>');
+        $("#deleteRow_entry").after(str.join(""));
+    },
+    copyRowAction: function (event) {
+        var $editGrid = this.getEditGrid(event.currentTarget);
+        var ids = $editGrid.jqGrid('getSelectedRows');
+        if (!ids || ids.length === 0) {
+            shr.showWarning({ message: $.cmpIntegrateI18n.common.selectRowMust /* 请先选择表格中的数据! */ });
+            return;
+        }
+
+        for (var i = 0; i < ids.length; i++) {
+            var getRowRealData = $("#entry").jqGrid("getRowRealData", ids[i]);
+            getRowRealData.id = '';
+            $("#entry").jqGrid("addRow", { data: getRowRealData });
+        }
+
+
+    }
+});

+ 399 - 0
GDYSL/js/shr/addon/customer/web/js/shr/affair/hrman/empEnrollBizBillHrManEditExt.js

@@ -0,0 +1,399 @@
+var empTypeInfo = {};
+shr.defineClass("shr.affair.hrman.EmpEnrollBizBillHrManEditExt", shr.affair.hrman.EmpEnrollBizBillHrManEdit, {
+
+    initalizeDOM: function () {
+        var _self = this;
+        shr.affair.hrman.EmpEnrollBizBillHrManEditExt.superClass.initalizeDOM.call(this);
+        if (this.operateState.toUpperCase() != 'VIEW') {
+            _self.nameChange();
+        }
+        if (this.operateState.toUpperCase() == 'ADDNEW') {
+            var selectId = shr.getUrlRequestParam("selectId");
+            if (!selectId) {
+                shr.remoteCall({
+                    method: 'getEmpNumber',
+                    async: false,
+                    success: function (res) {
+                        //人员类型
+                        _self.getField("entrys_empNumber").shrTextField('setValue', res.empNumber);
+                    }
+                });
+            }
+        }
+        _self.entrysFtorptF7Action();
+
+    },
+    /**
+     * 2、入职单需控“全职或兼职”字段为“兼职”时才允许填写;
+     */
+    entrysFtorptF7Action() {
+        if( $("#entrys_ftorpt").val()=="兼职"){
+            $('#entrys_jobEndTime').shrDateTimePicker('enable');//或者设为disable
+        }
+        $("#entrys_ftorpt").shrPromptBox("option", {
+            onchange: function (e, value) {
+                var current = value.current["BaseInfo.number"];
+                
+
+                if (current == "PART"||value.current.name=='Part Time') {
+                    $('#entrys_jobEndTime').shrDateTimePicker('enable');//或者设为disable
+                }else{
+                    $('#entrys_jobEndTime').shrDateTimePicker('disable');//或者设为enable
+                    $("#entrys_jobEndTime").shrDateTimePicker('setValue', "");
+
+                }
+            }
+        })
+
+    },
+    nameChange: function () {
+        var that = this;
+        //监听文本域,数值控件的值变化
+        that.getField("entrys_surname").on("change", function () {
+            var surname = $("#entrys_surname").val();
+            surname = surname.toUpperCase();
+            that.getField("entrys_surname").shrTextField('setValue', surname);
+            //用户名赋值
+            that.updateUserName();
+            //姓名赋值
+            that.updateName();
+        });
+        that.getField("entrys_givenName").on("change", function () {
+            //用户名赋值
+            that.updateUserName();
+            //姓名赋值
+            that.updateName();
+
+        });
+        //中间名
+        that.getField("entrys_middleNames").on("change", function () {
+            //姓名赋值
+            that.updateName();
+
+        });
+        //本地名称
+        that.getField("entrys_localname").on("change", function () {
+            //姓名赋值
+            that.updateName();
+        });
+        //试用期开始时间
+        that.getField("entrys_bizDate").on("change", function () {
+            //预入职日期
+            var preEnterDate = $("#entrys_bizDate").val();
+            that.getField("entrys_trialStartDate").shrDateTimePicker('setValue', preEnterDate);
+            that.updateTransferDate();
+        });
+        //预计转正日期
+        that.getField("entrys_probation").on("change", function () {
+            that.updateTransferDate();
+
+        });
+
+
+    },
+
+    //用户名赋值
+    updateUserName: function () {
+        var that = this;
+        //用户名赋值
+        var surname = $("#entrys_surname").val();
+        var givenName = $("#entrys_givenName").val();
+        var userName = givenName + "." + surname;
+        if (userName.length > 20) {
+            if (surname != '') {
+                userName = givenName + "." + surname.slice(0, 1).toUpperCase();
+                if (userName.length > 20) {
+                    var startLength = userName.length - 20;
+                    userName = userName.substring(startLength, userName.length);
+                }
+            }
+        }
+        userName = userName.toLowerCase();
+        that.getField("entrys_userName").shrTextField('setValue', userName);
+        that.getField("entrys_email").shrTextField('setValue', userName + "@gtiit.edu.cn");
+    },
+
+
+    updateName: function () {
+        var that = this;
+        //姓
+        var surname = $("#entrys_surname").val();
+        //名
+        var givenName = $("#entrys_givenName").val();
+        //本地名称
+        var localName = $("#entrys_localname").val();
+
+        var name = "";
+        if (givenName != '') {
+            name = givenName + " ";
+        }
+        if (surname != '') {
+            name = name + surname + " ";
+        }
+        if (localName != '') {
+            name = name + localName + " ";
+        }
+        //姓名
+        that.getField("entrys_empName").shrTextField('setValue', name);
+    },
+
+
+    //预计转正日期
+    updateTransferDate: function () {
+        var that = this;
+        //预入职日期
+        var preEnterDate = $("#entrys_bizDate").val();
+        //试用期(月)
+        var tryMonth = $("#entrys_probation").val();
+        let date = new Date(preEnterDate);  // 创建一个 Date 对象	
+        if (tryMonth != '' && tryMonth > 0 && preEnterDate != null) {
+            tryMonth = parseInt(tryMonth);
+            date.setMonth(date.getMonth() + tryMonth);
+            employeeType = { id: "00000000-0000-0000-0000-000000000002A29E85B3", name_l1: "On Probation", name: "试用员工", name_l2: "试用员工" };
+        } else {
+            date = null;
+            employeeType = { id: "00000000-0000-0000-0000-000000000001A29E85B3", name_l1: "Permanent Employee", name: "正式员工", name_l2: "正式员工" };
+        }
+        if (empTypeInfo != null) {
+            employeeType = empTypeInfo
+        }
+        that.getField("entrys_planFormalDate").shrDateTimePicker('setValue', date);
+        $("#entrys_empType").shrPromptBox("setValue", employeeType);
+    },
+
+
+    /**
+     * 预入职下推初始化数据
+     */
+    preEntryInit: function () {
+        var _self = this;
+        var selectId = shr.getUrlRequestParam("selectId");
+
+        shr.remoteCall({
+            url: shr.getContextPath() + "/dynamic.do?method=getPreEntryInitData&uipk=" + jsBinder.uipk,
+            type: "POST",
+            param: {
+                "billId": selectId,
+                "tempId": _self.getTemporaryPersonId()//传入tempId以复制一个预入职头像都入职单
+            },
+            success: function (res) {
+                if (res.preEntryInfo != undefined) {
+                    empTypeInfo = res.preEntryInfo.empType;
+                    var preEntryId = res.preEntryInfo.id;
+                    var talentId = res.preEntryInfo.talent.id;
+                    if (res.preEntryInfo.sourceBillType.value == 2) {//offer来的预入职单
+                        shr.callService({
+                            serviceName: 'getPreEntryInfoOSF',
+                            param: { preEntryId: preEntryId },
+                            async: false,
+                            success: function (data) {
+                                _self.initParameterByRecurit("entrys_probation", data.probationPeriod == undefined ? null : data.probationPeriod, false, 'numberField');//试用期
+                                _self.initParameterByRecurit("entrys_empType", data.employeeType == undefined ? null : data.employeeType, true);//用工关系状态
+                                _self.initParameterByRecurit("entrys_jobStartDate", data.jobStartDate == undefined ? null : data.jobStartDate.substring(0, 10), false);//参加工作日期
+                            }
+                        });
+                    }
+                    if (res.preEntryInfo.hrOrgUnit != undefined) {
+                        //基础资料在HR组织设置前先设置,可以接受HR组织可使用权限校验
+                        _self.initParameterByRecurit("entrys_variationReason", res.preEntryInfo.enrollSource, true);//招聘来源反写变动原因,,handler中用招聘来源按编码匹配查出变动原因放到enrollSource中
+                        var hrOrgUnitObj = { id: res.preEntryInfo.hrOrgUnit.id, name: res.preEntryInfo.hrOrgUnit.name }
+                        _self.initParameterByRecurit("hrOrgUnit", hrOrgUnitObj, true);//人事业务组织
+                    }
+
+                    if (res.preEntryInfo.talent != undefined) {
+                        _self.initParameterByRecurit('entrys_IDCardNo', res.preEntryInfo.talent.idCardNO, false);//身份证号码
+                        _self.initParameterByRecurit("entrys_passportNo", res.preEntryInfo.talent.passportNO, false);//护照号码
+                    }
+                    _self.getField("entrys.preEntryID").val(selectId);//隐藏预入职ID字段发送至后端
+                    if (res.errorMsg) {
+                        shr.showError({
+                            message: data.errorMsg,
+                            hideAfter: null
+                        });
+                    } else if (res.personExist && res.personExist == "true") {
+                        $("#entrys_enrollAgain").val(1);
+                        if (res.personOldInfo) {
+                            //编码,如果使用原编码,才设置原编码
+                            //osf取回来的 data.personOldInfo.useOldNumber 值为枚举值{0:使用原编码, 1:使用新编码}
+                            if (!res.personOldInfo.useOldNumber && res.personOldInfo.empNumber) {
+                                $("#entrys_empNumber").val(res.personOldInfo.empNumber);
+                                $("#entrys_useOldNumber").val(1);
+                                _self.getField('entrys_empNumber').shrTextField('disable');
+                            }
+                            else if (res.personOldInfo.useOldNumber) {
+                                $("#entrys_useOldNumber").val(0);
+                            }
+                            //参加工作日期
+                            if (res.personOldInfo.jobStartDate) {
+                                $("#entrys_jobStartDate").shrDateTimePicker('setValue', res.personOldInfo.jobStartDate);
+                            }
+                        }
+                        _self.swapHrbizDefineInfo(_self._hrBizdefine_enrollAgain);
+                        _self.getField("entrys.hrBizDefine").shrPromptBox("setFilter", _self._default_hrBizDefine_filter + " and bizDefineType = 16");//只能选择再入职变动操作
+                        _self.showEnrollAgainMsg(res);
+                    }
+                    //职位放在加载再入职信息之后,避免再入职使用原编码时又按职位刷编码
+                    _self.initParameterByRecurit("entrys_position", res.preEntryInfo.position, true);//入职职位
+                    //根据入职日期填写入职时间
+                    var effdt = _self.getField('entrys.bizDate').shrDateTimePicker("getValue");
+                    _self.getField('entrys.bizTime').shrDateTimePicker('setValue', effdt);
+                    //本地名称
+                    _self.getField("entrys_localname").shrTextField('setValue', res.preEntryInfo.localname_l2);
+                    //姓
+                    _self.getField("entrys_surname").shrTextField('setValue', res.preEntryInfo.surname_l2);
+                    //中间名
+                    _self.getField("entrys_middleNames").shrTextField('setValue', res.preEntryInfo.middlenames_l2);
+                    //名
+                    _self.getField("entrys_givenName").shrTextField('setValue', res.preEntryInfo.givenname_l2);
+                    //员工编码
+                    _self.getField("entrys_empNumber").shrTextField('setValue', res.preEntryInfo.empNumber);
+                    //用户名
+                    _self.getField("entrys_userName").shrTextField('setValue', res.preEntryInfo.username_l2);
+                    //工作邮箱
+                    _self.getField("entrys_email").shrTextField('setValue', res.preEntryInfo.workemail);
+                    //私人邮箱
+                    _self.getField("entrys_pemail").shrTextField('setValue', res.preEntryInfo.email);
+                    //试用期
+                    _self.getField("entrys_probation").shrTextField('setValue', res.preEntryInfo.tryMonth);
+                    //教师年假额度
+                    _self.getField("entrys_faentitlement").shrTextField('setValue', res.preEntryInfo.faentitlement);
+                    //教师病假额度
+                    _self.getField("entrys_fsentitlement").shrTextField('setValue', res.preEntryInfo.fsentitlement);
+                    //教师病假最高额度
+                    _self.getField("entrys_fsmentitlement").shrTextField('setValue', res.preEntryInfo.fsmentitlement);
+                    //Admin Title
+                    _self.getField("entrys_admintitle").shrTextField('setValue', res.preEntryInfo.admintitle);
+                    //时薪
+                    _self.getField("entrys_hwage").shrTextField('setValue', res.preEntryInfo.hwage);
+                    //试用期开始日期
+                    _self.getField("entrys_trialStartDate").shrDateTimePicker('setValue', res.preEntryInfo.trialStartDate);
+                    //居民
+                    $('#entrys_resident').shrSelect('setValue', res.preEntryInfo.resident);
+                    //支付币种
+                    $('#entrys_paycurrency').shrSelect('setValue', res.preEntryInfo.paycurrency);
+                    //兼职类人员任职结束时间
+                    _self.getField("entrys_jobEndTime").shrDateTimePicker('setValue', res.preEntryInfo.jobEndTime);
+                    shr.remoteCall({
+                        method: 'getEmpPreEntryData',
+                        async: false,
+                        param: {
+                            "billId": selectId
+                        },
+                        success: function (response) {
+                            //人员类型
+                            $("#entrys_persontype").shrPromptBox("setValue", { id: response.personTypeId, name: response.personTypeName });
+                            //员工类别
+                            $("#entrys_wcategory").shrPromptBox("setValue", { id: response.wcategoryId, name: response.wcategoryName });
+                            //全职或兼职
+                            $("#entrys_ftorpt").shrPromptBox("setValue", { id: response.ftorptId, name: response.ftorptName });
+                            if(response.ftorptName=='Part Time'){
+                                $('#entrys_jobEndTime').shrDateTimePicker('enable');//或者设为disable
+
+                            }
+                            //直接上级
+                            $("#entrys_lmanager").shrPromptBox("setValue", { id: response.lmanagerId, name: response.lmanagerName });
+                            //Academic Title
+                            $("#entrys_academictitle").shrPromptBox("setValue", { id: response.academictitleId, name: response.academictitleName });
+                            //job2
+                            $("#entrys_jobs").shrPromptBox("setValue", { id: response.jobsId, name: response.jobsName });
+                            //纳税方式
+                            $("#entrys_rmethod").shrPromptBox("setValue", { id: response.rmethodId, name: response.rmethodName });
+                            //职等
+                            $("#entrys_jobGrade").shrPromptBox("setValue", { id: response.jobId, name: response.jobName });
+                            //签发国家
+                            $("#entrys_countryRegion").shrPromptBox("setValue", { id: response.countryId, name: response.countryName });
+                            //签证类型
+                            $("#entrys_credentialsType").shrPromptBox("setValue", { id: response.credentTypeId, name: response.credentTypeName });
+                        }
+                    });
+
+                }
+            }
+        });
+        // 预入职转入职后端赋值,需要在前端主动触发一些change事件
+        _self.autoChange();
+    },
+
+    setEnrollAgainInfo: function (data) {
+        var that = this;
+        //根据身份证号和护照号将查出来的再入职人员信息填充到页面
+        if (data && data.errorMsg) {
+            shr.showError({
+                message: data.errorMsg,
+                hideAfter: null
+            });
+        } else if (data && data.personExist == "true") {
+            that.fillEnrollPersonDataByNo(data);
+            that.swapHrbizDefineInfo(that._hrBizdefine_enrollAgain);
+            that.getField("entrys.hrBizDefine").shrPromptBox("setFilter", that._default_hrBizDefine_filter + " and bizDefineType = 16");//只能选择再入职变动操作
+            that.showEnrollAgainMsg(data);
+
+            var idEntity = "";
+            if (data.personOldInfo.idCardNo) {
+                idEntity = data.personOldInfo.idCardNo;
+            } else {
+                idEntity = data.personOldInfo.passportNo;
+            }
+            shr.remoteCall({
+                method: 'getPersonName',
+                async: false,
+                param: {
+                    "idEntity": idEntity
+                },
+                success: function (response) {
+                    if (response.userName) {
+                        //姓
+                        $("#entrys_surname").shrTextField("setValue", response.surName);
+                        //本地名称
+                        $("#entrys_localname").shrTextField("setValue", response.localName);
+                        //中间名
+                        $("#entrys_middleNames").shrTextField("setValue", response.middleName);
+                        //名
+                        $("#entrys_givenName").shrTextField("setValue", response.givenName);
+                        //用户名
+                        $("#entrys_userName").shrTextField("setValue", response.userName);
+                    }
+                }
+            });
+        } else {
+            // 如果之前输入身份证带出过再入职人员才处理,避免正常情况下多次修改身份证也处理了以下逻辑
+            if ($("#entrys_enrollAgain").val() == "1" || $("#entrys_enrollAgain").val() == "true") {
+                $("#entrys_enrollAgain").val(0);
+                // 父类中存储了第一次加载的变动操作,将变动操作还原
+                that.swapHrbizDefineInfo(that._currentHRBizdefine.id);
+                that.getField("entrys.hrBizDefine").shrPromptBox("setFilter", that._default_hrBizDefine_filter);//还原默认变动操作可选范围
+            }
+            // 如果之前输入身份证带出过再入职人员并且是原编码,才处理,避免正常情况下多次修改身份证也处理了以下逻辑
+            if ($("#entrys_useOldNumber").val() == "1" || $("#entrys_useOldNumber").val() == "true") {
+                $("#entrys_useOldNumber").val(0);
+                // 没有编码规则,清空编码
+                if (that._isAutoNumber == false) {
+                    that.getField('entrys_empNumber').shrTextField('enable');
+                    that.getField('entrys_empNumber').val('');
+                }
+                // 有编码规则,需要看职位有没有选择
+                if (that._isAutoNumber == true) {
+                    // 如果职位没有选择,则清空编码
+                    if ($.isEmptyObject($("#entrys_position_el").val())) {
+                        that.getField('entrys_empNumber').val('');
+                    }
+                    // 如果职位不为空,重新按照编码规则刷新编码
+                    if (!$.isEmptyObject($("#entrys_position_el").val())) {
+                        that.refreshNumber($("#entrys_position_el").val());
+                    }
+                }
+            }
+
+            //      	//姓
+            // $("#entrys_surname").shrTextField("setValue", "");
+            // //本地名称
+            // $("#entrys_localname").shrTextField("setValue", "");
+            // //中间名
+            // $("#entrys_middleNames").shrTextField("setValue", "");
+            // //名
+            // $("#entrys_givenName").shrTextField("setValue", "");
+        }
+    }
+
+
+});

+ 380 - 0
GDYSL/js/shr/addon/customer/web/js/shr/emp/empPreEntryEditExt.js

@@ -0,0 +1,380 @@
+shr.defineClass('shr.emp.EmpPreEntryEditExt',shr.emp.EmpPreEntryEdit , {
+	
+	
+	
+	initalizeDOM: function () {
+		var _self = this;
+		shr.emp.EmpPreEntryEditExt.superClass.initalizeDOM.call(this);
+		if(this.operateState.toUpperCase() != 'VIEW'){
+			_self.nameChange();
+			_self.visaChange(); 
+		}
+		_self.ftorptF7Action();
+
+	},
+	 /**
+     * 2、入职单需控“全职或兼职”字段为“兼职”时才允许填写;
+     */
+	 ftorptF7Action() {
+		if($("#ftorpt").val()=="兼职"){
+			$('#jobEndTime').shrDateTimePicker('enable');//或者设为disable
+
+		}
+        $("#ftorpt").shrPromptBox("option", {
+            onchange: function (e, value) {
+                var current = value.current["BaseInfo.number"];
+                if (current == "PART"||value.current.name=='Part Time') {
+                    $('#jobEndTime').shrDateTimePicker('enable');//或者设为disable
+                }else{
+                    $('#jobEndTime').shrDateTimePicker('disable');//或者设为enable
+                    $("#jobEndTime").shrDateTimePicker('setValue', "");
+
+                }
+            }
+        })
+
+    },
+	visaChange:function(){
+		var that = this;
+		//监听文本域,数值控件的值变化
+		$("#talent_birthday").on("change", function(){
+			if(that.checkAge()){
+				shr.showError({message:"Onboarding is not allowed for persons under 18 years old"});
+				return;
+			}
+			that.checkVisa();
+		});
+	},
+	//身份证变更事件处理
+	processIDCardNoChangeEvent: function () {
+		var self = this;
+
+		$("#" + self.getRealId('talent.idCardNO')).blur(function () {
+			var idCardNoValue = self.getFieldValue('talent.idCardNO');
+
+			//根据身份证取出生日期和性别,并且OSF校验,调用人事OSF,如要修改请联系人事开发
+			if (idCardNoValue) {
+				self._idCardNo_IsChanged = true;
+				self._idCardNo_IsPassed = false;
+			} else {
+				self._idCardNo_IsChanged = false;
+				self._idCardNo_IsPassed = true;
+				return;
+			}
+			var localLang = shr.getFieldLangByContext();
+			var personName = self.getFieldValue("name")[localLang];
+			shr.callService({
+				serviceName: 'getPersonIdCardNOInfoService',
+				param: {
+					idCardNO: idCardNoValue,
+					personId: "",
+					hrOrgUnitId: self.getFieldValue("hrOrgUnit"),
+					preEntryId: self.billId,
+					personName: personName
+				},
+				async: false,
+				success: function (data) {
+					self._isIdCardNoTrue = true;
+					self._idCardNo_IsPassed = true;
+					if (data.birthday) {
+						self.getField('talent.birthday').shrDateTimePicker('setValue', data.birthday);
+						self.calculateAge(data.birthday);
+						self.checkConstellationAndZodiac(data.birthday.split(" ")[0]);
+						if(self.checkAge()){
+							shr.showError({message:"Onboarding is not allowed for persons under 18 years old"});
+							return;
+						}else{
+							self.checkVisa();
+						}
+					}
+					if (data.gender_value) {
+						var value = data.gender_value;
+						self.getField('talent.gender').shrSelect('setValue', value);
+					}
+					_self.remoteCall({
+		                method: "checkIdEntity",
+		                param: {idCardNo:idCardNoValue}, 
+		                async: false,
+		                success: function(response) {
+		                    if(response.resultMessage){
+		                    	shr.showWarning({message:response.resultMessage});
+		                    }
+		                },
+		                error : function(){}
+		            });
+				}
+			});
+		});
+		$("#" + this.getRealId('talent.idCardNO')).keyup(function () {
+			self._idCardNo_IsChanged = true;
+			self._idCardNo_IsPassed = true;
+		});
+	},
+	nameChange:function(){
+		var that = this;
+		//监听文本域,数值控件的值变化
+		that.getField("surname").on("change", function(){
+			var surname =  $("#surname").val();
+			//全英校验
+			//var regex = /^[A-Za-z]+$/;
+			var regex = /^[A-Za-z\s]+$/;
+			if( !regex.test(surname)){
+				shr.showError({ message: "The first name must be in English" });
+			}
+			surname = surname.toUpperCase();
+			that.getField("surname").shrTextField('setValue',surname);
+			//用户名赋值
+			that.updateUserName();
+			//姓名赋值
+			that.updateName();
+			that.checkVisa();
+		});
+		that.getField("givenName").on("change", function(){
+			//用户名赋值
+			that.updateUserName();
+			//姓名赋值
+			that.updateName();
+			that.checkVisa();
+		});
+		
+		//本地名称
+		that.getField("LocalName").on("change", function(){
+			//姓名赋值
+			that.updateName();
+			that.checkVisa();
+		});
+		//试用期开始时间
+		that.getField("preEnterDate").on("change", function(){
+			//预入职日期
+			var preEnterDate =  $("#preEnterDate").val();
+			that.getField("trialStartDate").shrDateTimePicker('setValue',preEnterDate);
+			that.updateTransferDate();
+		});
+		//预计转正日期
+		that.getField("tryMonth").on("change", function(){
+			that.updateTransferDate();
+			
+		});
+		//职等过滤
+		that.getField("position").on("change", function(){
+			var positionId = $("#position_el").val();
+			shr.callService({
+				serviceName : 'getJobInfosByPositionService',
+				param : {
+					"positionId" : positionId
+				},
+				async:true,//职层职等可以异步更新
+				success: function(data) {
+					that.updateJobGrade(positionId,data);
+				}
+			});
+			$("#jobGrade").shrPromptBox("setValue", null);			
+		});
+		
+	},
+	
+	//职等过滤
+	updateJobGrade:function(currentId,data){
+		var self = this;
+		if(data){
+			var lowGradeObject = data.lowJobGrade;
+			var highGradeObject = data.highJobGrade;
+			var jobGradeModule = data.jobGradeModule;
+			if(lowGradeObject && highGradeObject ){
+				// 如果职位的最低职等=最高职等,F7只能选择一个
+				if(lowGradeObject.id ==highGradeObject.id){
+					 self.getField("jobGrade").shrPromptBox("setFilter","id ='"+lowGradeObject.id+"'");
+				}else if((lowGradeObject.index || lowGradeObject.index == 0) && (highGradeObject.index || highGradeObject.index == 0)){
+				   self.getField("jobGrade").shrPromptBox("setFilter", 
+							" index <="+highGradeObject.index+" and index >="+lowGradeObject.index+" and jobGradeModule.id='"+jobGradeModule.id+"'");
+				}
+			} else{
+				self.getField("jobGrade").shrPromptBox("setValueNoTrigger",null);
+				self.getField("jobGrade").shrPromptBox("setFilter", "index<-9999");//-9999 没有最低和最高则不要选到
+				
+			}
+		}
+	},
+	
+	//用户名赋值
+	updateUserName:function(){
+		var that = this;
+		//用户名赋值
+		var surname =  $("#surname").val();
+		var givenName = $("#givenName").val();
+		var userName = givenName + "." + surname;
+		if(userName.length > 20){
+			if(surname != '' ){
+				userName = givenName + "." + surname.slice(0,1).toUpperCase() ;
+				if(userName.length > 20){
+					var startLength = userName.length - 20;
+					userName = userName.substring(startLength,userName.length);
+				}	
+			}
+		}
+		userName = userName.toLowerCase();
+		that.getField("userName").shrTextField('setValue',userName);
+		that.getField("workemail").shrTextField('setValue',userName+"@gtiit.edu.cn");
+	},
+	
+	
+	updateName: function(){
+		var that = this;
+		//姓
+		var surname =  $("#surname").val();
+		//名
+		var givenName =  $("#givenName").val();
+		//本地名称
+		var localName =  $("#LocalName").val();
+		
+		var name = "";
+		if(givenName != ''){
+			name = givenName + " ";
+		}
+		
+		if(surname != ''){
+			name = name + surname + " ";
+		}
+		if(localName != ''){
+			name = name + localName + " ";
+		}
+		//姓名
+		that.getField("name").shrTextField('setValue',name);
+	},
+	
+	
+	//预计转正日期
+	updateTransferDate:function(){
+		var that = this;
+		//预入职日期
+		var preEnterDate =  $("#preEnterDate").val();
+		//试用期(月)
+		var tryMonth =  $("#tryMonth").val();
+		let date = new Date(preEnterDate);  // 创建一个 Date 对象	
+		if(tryMonth != '' && tryMonth > 0 && preEnterDate != null ){
+			tryMonth = parseInt(tryMonth);
+			date.setMonth(date.getMonth() + tryMonth);
+			employeeType = {id:"00000000-0000-0000-0000-000000000002A29E85B3", name_l1:"On Probation",name:"试用员工",name_l2:"试用员工"};
+		}else{
+			date = null;
+			employeeType = {id:"00000000-0000-0000-0000-000000000001A29E85B3", name_l1:"Permanent Employee",name:"正式员工",name_l2:"正式员工"};
+		}
+		that.getField("transferDate").shrDateTimePicker('setValue',date);
+		$("#empType").shrPromptBox("setValue", employeeType);
+	},
+	
+	
+	createBillAction:function(){
+		var self = this;
+		self.remoteCall({
+			method : 'createEmpBill',
+			async : false,
+			success:function(data){
+				shr.showInfo({message: "Test"+data});
+			}
+		});
+	},
+	verify: function () {
+		var self = this;
+		var beginDate = self.getFieldValue("talent.idCardBeginDate");
+		var endDate = self.getFieldValue("talent.idCardEndDate");
+		var idCardBeginDate = new Date(beginDate);
+		var idCardEndDate = new Date(endDate);
+		var localLang = shr.getFieldLangByContext();
+		var personName = self.getFieldValue("name")[localLang];
+		if (idCardBeginDate.getTime() > idCardEndDate.getTime()) {
+			shr.showError({
+				message: jsBizMultLan.emp_empPreEntryEdit_i18n_0
+			});
+			return false;
+		}
+
+		var idCardNO = self.getFieldValue("talent.idCardNO");
+		var passportNO = self.getFieldValue("talent.passportNO");
+		if(idCardNO == "" && passportNO == ""){
+			shr.showError({
+				message: jsBizMultLan.emp_empPreEntryEdit_i18n_8
+			});
+			return false;
+		}
+		if (idCardNO) {
+			var verifyFlag = false;
+			shr.callService({
+				serviceName: 'getPersonIdCardNOInfoService',
+				param: {
+					idCardNO: idCardNO,
+					personId: "",
+					hrOrgUnitId: self.getFieldValue("hrOrgUnit"),
+					preEntryId: self.billId,
+					personName: personName
+				},
+				async: false,
+				success: function (data) {
+					verifyFlag = true;
+				}
+			});
+			if(verifyFlag == false)
+				return false;
+		}
+		
+		if (passportNO){
+			var verifyFlag = false;
+			shr.callService({
+				serviceName: 'getPersonPassPortNOInfoService',
+				param: {
+					passportNO: passportNO,
+					personId: "",
+					preEntryId: self.billId,
+					personName: personName
+				},
+				async: false,
+				success: function (data) {
+					verifyFlag = true;
+				}
+			});
+			if(verifyFlag == false)
+				return false;
+		}
+		if(self.checkAge()){
+			shr.showError({message:"Onboarding is not allowed for persons under 18 years old"});
+			return false;
+		}
+
+		return true;
+	},
+	checkVisa:function(){
+		var name =  $("#name").val().trim();
+		var birthday =  $("#talent_birthday").val();
+		if(name && birthday){
+			_self.remoteCall({
+                method: "checkIdEntity",
+                param: {name:name,birthday:birthday}, 
+                async: false,
+                success: function(response) {
+                    if(response.resultMessage){
+                    	shr.showWarning({message:response.resultMessage});
+                    }
+                },
+                error : function(){}
+            });
+		}
+	},
+	checkAge:function(){
+		var birthday =  $("#talent_birthday").val();
+		if(birthday){
+			var bomDate = new Date(birthday);
+			var today = new Date();
+		    // 计算年份差异
+		    var yearDiff = today.getFullYear() - bomDate.getFullYear();
+		    // 如果出生日期在今年之后,则减去年份差异
+		    if (today < new Date(today.getFullYear(), bomDate.getMonth(), bomDate.getDate())) {
+		        yearDiff--;
+		    }
+		    if (yearDiff >= 18) {
+			    return false;
+			} else {
+			    return true;
+			}
+		}
+	}
+});

+ 275 - 271
GDYSL/src/com/kingdee/eas/custom/facade/employee/EmpPreEntryFacadeControllerBean.java

@@ -59,279 +59,283 @@ import java.util.stream.Collectors;
 
 /**
  * 预入职生成入职单后台事务
- * @author xiaoxin
  *
+ * @author xiaoxin
  */
-public class EmpPreEntryFacadeControllerBean extends AbstractEmpPreEntryFacadeControllerBean
-{
+public class EmpPreEntryFacadeControllerBean extends AbstractEmpPreEntryFacadeControllerBean {
     /**
-	 * 
-	 */
-	private static final long serialVersionUID = -4572246200432035893L;
-	private static Logger logger =
-        Logger.getLogger("com.kingdee.eas.custom.facade.employee.EmpPreEntryFacadeControllerBean");
-    
-   @Override
-	protected void _createEmpEnrollBizBill(Context ctx, String baseDate,
-			String empNumber, String orgNumber) throws BOSException {
-	   baseDate = this.getYesterday(baseDate);
-	   logger.error("基准日期" + baseDate);
-	   //查询预入职单据状态为已审核,是否自动生成入职单为是,预入职日期在当天之前的数据
-	   StringBuffer preEntrySql = new StringBuffer();
-	   preEntrySql.append(" select a.FCreatorID,a.Fid,a.FPositionID,CFLocalName_l2,CFSurname_l2,CFMiddleNames_l2,CFGivenName_l2,CFUserName_l2,a.FName_l2,a.FName_l1,a.FName_l3,CFEmpNumber,");
-	   preEntrySql.append(" FGender,FBirthday,FGlobalRoaming,FNCell,FEmail,CFWorkemail,FIDCardNO,CFDocumenttypeID,FPassportNO,");
-	   preEntrySql.append(" FPreEnterDate,CFTryMonth,CFTrialStartDate,CFTransferDate,CFEmpTypeID,CFPersontypeID,CFWcategoryID,");
-	   preEntrySql.append(" CFFtorptID,CFLmanagerID,CFAdmintitle,CFAcademictitleID,CFJobsID,CFWaitcontract,CFLegalemployer,");
-	   preEntrySql.append(" CFExpatriate,CFResident,CFPaycurrency,CFHwage,CFFsmentitlement,CFFsentitlement,CFFaentitlement,a.CFJobGradeID,a.CFRmethodID,a.CFCountryRegionID ");
-	   preEntrySql.append(" from T_HR_PreEntry as a "); 
-	   preEntrySql.append(" left join T_HR_PreEntryPerson as b on a.FTALENTID  = b.fid	");
-	   preEntrySql.append(" where fbillState = 3 and CFAutoConversion = 'Yes' and FIsGenerateEntryBill = 0 and FPREENTERDATE <= '"+baseDate+"'" );
-	   if(StringUtils.isNotBlank(empNumber)){
-		   preEntrySql.append(" a.CFEmpNumber = '" + empNumber + "' ");
-	   }
-	   if(StringUtils.isNotBlank(empNumber)){
-		   preEntrySql.append(" a.orgNumber = (select fid from t_org_admin where fnumber = '" + empNumber + "') ");
-	   }
-	   logger.error("预入职sql:" + preEntrySql);
-	   IRowSet rs = DbUtil.executeQuery(ctx, preEntrySql.toString());
-	   try {
-		   if(rs.size() > 0){
-			   createEmpEnrollBizBillInfo(ctx,rs);
-		   }
-	   } catch (SQLException e) {
-			e.printStackTrace();
-	   } 
-	}
-    
+     *
+     */
+    private static final long serialVersionUID = -4572246200432035893L;
+    private static Logger logger =
+            Logger.getLogger("com.kingdee.eas.custom.facade.employee.EmpPreEntryFacadeControllerBean");
+
+    @Override
+    protected void _createEmpEnrollBizBill(Context ctx, String baseDate,
+                                           String empNumber, String orgNumber) throws BOSException {
+        baseDate = this.getYesterday(baseDate);
+        logger.error("基准日期" + baseDate);
+        //查询预入职单据状态为已审核,是否自动生成入职单为是,预入职日期在当天之前的数据
+        StringBuffer preEntrySql = new StringBuffer();
+        preEntrySql.append(" select a.FCreatorID,a.Fid,a.FPositionID,CFLocalName_l2,CFSurname_l2,CFMiddleNames_l2,CFGivenName_l2,CFUserName_l2,a.FName_l2,a.FName_l1,a.FName_l3,CFEmpNumber,");
+        preEntrySql.append(" FGender,FBirthday,FGlobalRoaming,FNCell,FEmail,CFWorkemail,FIDCardNO,CFDocumenttypeID,FPassportNO,");
+        preEntrySql.append(" FPreEnterDate,CFTryMonth,CFTrialStartDate,CFTransferDate,CFEmpTypeID,CFPersontypeID,CFWcategoryID,");
+        preEntrySql.append(" CFFtorptID,CFLmanagerID,CFAdmintitle,CFAcademictitleID,CFJobsID,CFWaitcontract,CFLegalemployer,");
+        preEntrySql.append(" CFExpatriate,CFResident,CFPaycurrency,CFHwage,CFFsmentitlement,CFFsentitlement,CFFaentitlement,a.CFJobGradeID,a.CFRmethodID,a.CFCountryRegionID, ");
+        preEntrySql.append(" a.cfjobendtime");
+        preEntrySql.append(" from T_HR_PreEntry as a ");
+        preEntrySql.append(" left join T_HR_PreEntryPerson as b on a.FTALENTID  = b.fid	");
+        preEntrySql.append(" where fbillState = 3 and CFAutoConversion = 'Yes' and FIsGenerateEntryBill = 0 and FPREENTERDATE <= '" + baseDate + "'");
+        if (StringUtils.isNotBlank(empNumber)) {
+            preEntrySql.append(" a.CFEmpNumber = '" + empNumber + "' ");
+        }
+        if (StringUtils.isNotBlank(empNumber)) {
+            preEntrySql.append(" a.orgNumber = (select fid from t_org_admin where fnumber = '" + empNumber + "') ");
+        }
+        logger.error("预入职sql:" + preEntrySql);
+        IRowSet rs = DbUtil.executeQuery(ctx, preEntrySql.toString());
+        try {
+            if (rs.size() > 0) {
+                createEmpEnrollBizBillInfo(ctx, rs);
+            }
+        } catch (SQLException e) {
+            e.printStackTrace();
+        }
+    }
+
     /**
-	 * 获取基准日期
-	 * @return
-	 */
-	private String getYesterday(String baseDate){
-		if(StringUtils.isEmpty(baseDate) ){
-	    	Calendar calendar = Calendar.getInstance();
-	    	calendar.add(Calendar.DAY_OF_MONTH, -1);
-	    	SimpleDateFormat simpleDateFormat = new SimpleDateFormat("yyyy-MM-dd");
-	    	baseDate = simpleDateFormat.format(calendar.getTime());
-		}
-    	return baseDate;
+     * 获取基准日期
+     *
+     * @return
+     */
+    private String getYesterday(String baseDate) {
+        if (StringUtils.isEmpty(baseDate)) {
+            Calendar calendar = Calendar.getInstance();
+            calendar.add(Calendar.DAY_OF_MONTH, -1);
+            SimpleDateFormat simpleDateFormat = new SimpleDateFormat("yyyy-MM-dd");
+            baseDate = simpleDateFormat.format(calendar.getTime());
+        }
+        return baseDate;
     }
-	
-	
-	private void createEmpEnrollBizBillInfo(Context ctx,IRowSet rs) throws SQLException {
-		StringBuffer strBuffer = new StringBuffer();
-		while(rs.next()){
-			try{
-				logger.error("生成入职单:"+rs.getString("CFEmpNumber"));
-				//单据主题
-				EmpEnrollBizBillInfo empbizInfo = new EmpEnrollBizBillInfo();
-				//分录
-				EmpEnrollBizBillEntryInfo empbizEntryInfo = new EmpEnrollBizBillEntryInfo();
-				UserInfo user = UserFactory.getLocalInstance(ctx).getUserInfo(new ObjectUuidPK(rs.getString("FCreatorID")));
-				logger.error("创建用户:"+user.toString());
-				//申请人
-				empbizInfo.setApplier(user.getPerson());
-				//申请日期
-				empbizInfo.setApplyDate(new Date());
-				//岗位
-				PositionInfo positionInfo = PositionFactory.getLocalInstance(ctx).getPositionInfo(new ObjectUuidPK(rs.getString("FPositionID")));
-				AdminOrgUnitInfo adminInfo=positionInfo.getAdminOrgUnit();
-				//住址֯ 
-				empbizInfo.setAdminOrg(adminInfo);
-				empbizInfo.setHrOrgUnit(ContextUtil.getCurrentHRUnit(ctx));
-				//审核状态
-				empbizInfo.setBillState(HRBillStateEnum.AUDITED);
-				empbizInfo.setApproveType(ApproveTypeEnum.DIRECT);
-				empbizInfo.setBizDate(new Date());
-				//创建者
-				empbizInfo.setAuditor(user);
-				empbizInfo.setIsMultiEntry(false);
-				empbizInfo.setInnerState(0);
-				empbizInfo.setIsMulti(false);
-				empbizInfo.setUseDefault(true);	
-				//本地名称
-				empbizEntryInfo.put("localname",rs.getString("CFLocalName_l2"));
-				//姓
-				empbizEntryInfo.put("surname",rs.getString("CFSurname_l2"));
-				//中间名
-				empbizEntryInfo.put("middleNames",rs.getString("CFMiddleNames_l2"));
-				//名
-				empbizEntryInfo.put("givenName",rs.getString("CFGivenName_l2"));
-				//用户名
-				empbizEntryInfo.put("userName",rs.getString("CFUserName_l2"));
-				//展示名称
-				empbizEntryInfo.setEmpName(rs.getString("FName_l2"));
-				empbizEntryInfo.setEmpName(rs.getString("FName_l1"),LocaleUtils.locale_l1);
-				empbizEntryInfo.setEmpName(rs.getString("FName_l2"),LocaleUtils.locale_l2);
-				empbizEntryInfo.setEmpName(rs.getString("FName_l3"),LocaleUtils.locale_l3);
-				logger.error("英文名:"+empbizEntryInfo.getEmpName(Locale.ENGLISH)+",中文名:"+empbizEntryInfo.getEmpName(Locale.SIMPLIFIED_CHINESE)+",名称:"+empbizEntryInfo.getEmpName());
-				//员工编码
-				empbizEntryInfo.setEmpNumber(rs.getString("CFEmpNumber"));
-				//性别
-				empbizEntryInfo.setGender(Genders.getEnum(rs.getInt("FGender")));
-				//出生日期
-				empbizEntryInfo.setBirthday(rs.getDate("FBirthday"));
-				//区号
-				empbizEntryInfo.setGlobalRoaming(rs.getString("FGlobalRoaming"));
-				//新手机号
-				empbizEntryInfo.setNCell(rs.getString("FNCell"));
-				//工作邮箱
-				empbizEntryInfo.setEmail(rs.getString("CFWorkemail"));
-				//私人邮箱
-				empbizEntryInfo.put("pemail", rs.getString("FEmail"));
-				System.out.println("工作邮箱==="+empbizEntryInfo.getEmail());
-				//֤身份证号
-				empbizEntryInfo.put("IDCardNo",rs.getString("FIDCardNO"));
-				//֤证件类型
-				if(StringUtils.isNotBlank(rs.getString("CFDocumenttypeID"))){
-					empbizEntryInfo.setCredentialsType(CredentialsTypeFactory.getLocalInstance(ctx).
-							getCredentialsTypeInfo(new ObjectUuidPK(rs.getString("CFDocumenttypeID"))));
-				}
-				empbizEntryInfo.put("passPortNo",rs.getString("FPassportNO"));
-				empbizEntryInfo.setPosition(positionInfo);
-				//职务
-				if(positionInfo.getJob() != null && positionInfo.getJob().getId() != null) {
-					logger.error("岗位职务:"+positionInfo.getJob().getName());
-					empbizEntryInfo.setJob(positionInfo.getJob());
-				}
-				//行政组织
-				empbizEntryInfo.setAdminOrg(positionInfo.getAdminOrgUnit());
-				//预入职日期
-				empbizEntryInfo.setBizDate(rs.getDate("FPreEnterDate"));
-				//试用期(月)
-				empbizEntryInfo.setProbation(rs.getInt("CFTryMonth"));
-				//试用期开始日期
-				empbizEntryInfo.put("trialStartDate",rs.getDate("CFTrialStartDate"));
-				//预计转正日期
-				empbizEntryInfo.setPlanFormalDate(rs.getDate("CFTransferDate"));
-				//用工关系状态
-				if(StringUtils.isNotBlank(rs.getString("CFEmpTypeID"))){
-					empbizEntryInfo.setEmpType(EmployeeTypeFactory.getLocalInstance(ctx).
-							getEmployeeTypeInfo(new ObjectUuidPK(rs.getString("CFEmpTypeID"))));
-				}else{
-					String paramStr = null;
-					if(empbizEntryInfo.getProbation() > 0){
-						paramStr = "where number = '002'";
-					}else{
-						paramStr = "where number = '001'";
-					}
-					EmployeeTypeCollection employeeType = EmployeeTypeFactory.getLocalInstance(ctx).getEmployeeTypeCollection(paramStr);	
-					empbizEntryInfo.setEmpType(employeeType.get(0));
-				}
-				
-				//人员类型
-				empbizEntryInfo.put("persontype",rs.getString("CFPersontypeID"));
-				//员工类别
-				empbizEntryInfo.put("wcategory",rs.getString("CFWcategoryID"));
-				//全职或兼职
-				empbizEntryInfo.put("ftorpt",rs.getString("CFFtorptID"));
-				//直属上级
-				empbizEntryInfo.put("lmanager",rs.getString("CFLmanagerID"));
-				//admin title
-				empbizEntryInfo.put("admintitle",rs.getString("CFAdmintitle"));
-				//Academic Title
-				empbizEntryInfo.put("academictitle",rs.getString("CFAcademictitleID"));
-				//Job2
-				empbizEntryInfo.put("jobs",rs.getString("CFJobsID"));
-				//是否等待合同
-				empbizEntryInfo.put("waitcontract",rs.getString("CFWaitcontract"));
-				//法人
-				empbizEntryInfo.put("legalemployer",rs.getString("CFLegalemployer"));
-				//境外人士
-				empbizEntryInfo.put("Expatriate",rs.getString("CFExpatriate"));
-				//居民
-				empbizEntryInfo.put("resident",rs.getString("CFResident"));
-				//֧支付币种
-				empbizEntryInfo.put("paycurrency",rs.getString("CFPaycurrency"));
-				//时薪
-				empbizEntryInfo.put("hwage",rs.getString("CFHwage"));
-				//教师病假最高额度
-				empbizEntryInfo.put("fsmentitlement",rs.getString("CFFsmentitlement"));
-				//教师病假额度
-				empbizEntryInfo.put("fsentitlement",rs.getString("CFFsentitlement"));
-				//教师年假额度
-				empbizEntryInfo.put("faentitlement",rs.getString("CFFaentitlement"));
-				//职等
-				if(StringUtils.isNotBlank(rs.getString("CFJobGradeID"))) {
-					JobGradeInfo jobGradeInfo = JobGradeFactory.getLocalInstance(ctx).getJobGradeInfo(new ObjectUuidPK(rs.getString("CFJobGradeID")));
-					empbizEntryInfo.put("jobGrade",jobGradeInfo);
-				}
-				//纳税方式
-				empbizEntryInfo.put("rmethod", rs.getString("CFRmethodID"));
-				empbizEntryInfo.setEnrollAgain(false);
-				//变动操作
-				HRBizDefineCollection hbdc = HRBizDefineFactory.getLocalInstance(ctx).getHRBizDefineCollection(" where number = 'SHR01'");
-				empbizEntryInfo.setHrBizDefine(hbdc.get(0));
-				//变动类型
-				AffairActionReasonCollection affairActionReasonCollection = AffairActionReasonFactory.getLocalInstance(ctx).getAffairActionReasonCollection(" where number = '0101'");
-				empbizEntryInfo.setAffairActionReason(affairActionReasonCollection.get(0));
-				
-				VariationReasonCollection vrcs = VariationReasonFactory.getLocalInstance(ctx).getVariationReasonCollection(" where number = 'RZ05'");
-				empbizEntryInfo.setVariationReason(vrcs.get(0));
-				empbizEntryInfo.put("PreEntryId", rs.getString("Fid"));
-				empbizEntryInfo.setSourceBillType(SourceBillTypeEnum.PREENTRY);
-				
-				//国家地区
-				if(StringUtils.isNotBlank(rs.getString("CFCountryRegionID"))) {
-					CountryRegionCollection countryRegionCollection = CountryRegionFactory.getLocalInstance(ctx).getCountryRegionCollection("where id = '"+rs.getString("CFCountryRegionID")+"'");
-					if(countryRegionCollection!=null && countryRegionCollection.size()>0) {
-						empbizEntryInfo.setCountryRegion(countryRegionCollection.get(0));
-					}
-				}
-				
-				empbizInfo.getEntrys().add(empbizEntryInfo);			
-				logger.error("单据信息:"+empbizInfo.toString());
-				CoreBaseInfo model = empbizInfo;
-				IObjectPK bosid = EmpEnrollBizBillFactory.getLocalInstance(ctx).submitEffect(model);
-				
-				EmpEnrollBizBillInfo empEnrollBizBillInfo = EmpEnrollBizBillFactory.getLocalInstance(ctx).getEmpEnrollBizBillInfo(bosid);
-				EmpEnrollBizBillEntryCollection entrys = empEnrollBizBillInfo.getEntrys();
-				String personBillId = ""; 
-				if(entrys.size()>0) {
-					personBillId = entrys.get(0).getId().toString();
-				}
-				logger.error("生成入职单成功:"+bosid);
-				if(!StringUtils.isEmpty(bosid+"")){
-					StringBuffer upsql = new StringBuffer();
-					upsql.append(" update T_HR_PreEntry set FCheckInState = '3',FIsGenerateEntryBill = '1',FPersonBillId = '"+personBillId+"' where FID = '" + rs.getString("Fid") + "'") ;
-					logger.error("更新预入职单状态:"+upsql);
-					DbUtil.execute(ctx, upsql.toString());	
-				}
-				
-			}catch (Exception e) {
-				e.printStackTrace();
-				logger.error(rs.getString("CFEmpNumber")+"生成入职单失败:"+e.getMessage());
-				strBuffer.append("Automatic onboarding of employee "+rs.getString("FName_l2")+"("+rs.getString("CFEmpNumber")+") failed. "+e.getMessage()+"\r\n");
-				continue ;
-			}
-		}
-		
-		if(strBuffer.length()>0) {
-			try {
-				strBuffer.append("Please check the data, or contact the system administrator with itsupport@gtiit.edu.cn.");
-				Set<String> userIdSet = new HashSet<String>();
-				String roleSql = "select c.fid from T_WFR_WFROLE a left join T_WFR_PERSONROLE b on a.fid=b.froleid left join T_PM_USER c on b.FPSERSONID = c.FPERSONID where a.FNUMBER in ('105') and c.fid is not null";
-				logger.error("获取工作流角色对应用户SQL:"+roleSql);
-				IRowSet roleRow = DbUtil.executeQuery(ctx, roleSql);
-				try {
-					while(roleRow.next()) {
-						userIdSet.add(roleRow.getString("fid"));
-					}
-				} catch (SQLException e) {
-					e.printStackTrace();
-				}
-				logger.error("用户ID集合:"+userIdSet.toString());
-				if(userIdSet.size() == 0) {
-		    		return;
-		    	}
-		    	List<String> list = userIdSet.stream().collect(Collectors.toList());
-				SendUtils.msgGroupSend(ctx, "Notification of automatic onboarding failure", PriorityEnum.HIGHT_VALUE, false, strBuffer.toString(), list, BOSMsgTypeEnum.V_TYPE_EMAIL, null);
-			} catch (EASBizException e) {
-				e.printStackTrace();
-			} catch (BOSException e) {
-				e.printStackTrace();
-			}
-		}
-	}
-    
-}
+
+
+    private void createEmpEnrollBizBillInfo(Context ctx, IRowSet rs) throws SQLException {
+        StringBuffer strBuffer = new StringBuffer();
+        while (rs.next()) {
+            try {
+                logger.error("生成入职单:" + rs.getString("CFEmpNumber"));
+                //单据主题
+                EmpEnrollBizBillInfo empbizInfo = new EmpEnrollBizBillInfo();
+                //分录
+                EmpEnrollBizBillEntryInfo empbizEntryInfo = new EmpEnrollBizBillEntryInfo();
+                UserInfo user = UserFactory.getLocalInstance(ctx).getUserInfo(new ObjectUuidPK(rs.getString("FCreatorID")));
+                logger.error("创建用户:" + user.toString());
+                //申请人
+                empbizInfo.setApplier(user.getPerson());
+                //申请日期
+                empbizInfo.setApplyDate(new Date());
+                //岗位
+                PositionInfo positionInfo = PositionFactory.getLocalInstance(ctx).getPositionInfo(new ObjectUuidPK(rs.getString("FPositionID")));
+                AdminOrgUnitInfo adminInfo = positionInfo.getAdminOrgUnit();
+                //住址֯
+                empbizInfo.setAdminOrg(adminInfo);
+                empbizInfo.setHrOrgUnit(ContextUtil.getCurrentHRUnit(ctx));
+                //审核状态
+                empbizInfo.setBillState(HRBillStateEnum.AUDITED);
+                empbizInfo.setApproveType(ApproveTypeEnum.DIRECT);
+                empbizInfo.setBizDate(new Date());
+                //创建者
+                empbizInfo.setAuditor(user);
+                empbizInfo.setIsMultiEntry(false);
+                empbizInfo.setInnerState(0);
+                empbizInfo.setIsMulti(false);
+                empbizInfo.setUseDefault(true);
+                //本地名称
+                empbizEntryInfo.put("localname", rs.getString("CFLocalName_l2"));
+                //姓
+                empbizEntryInfo.put("surname", rs.getString("CFSurname_l2"));
+                //中间名
+                empbizEntryInfo.put("middleNames", rs.getString("CFMiddleNames_l2"));
+                //名
+                empbizEntryInfo.put("givenName", rs.getString("CFGivenName_l2"));
+                //用户名
+                empbizEntryInfo.put("userName", rs.getString("CFUserName_l2"));
+                //展示名称
+                empbizEntryInfo.setEmpName(rs.getString("FName_l2"));
+                empbizEntryInfo.setEmpName(rs.getString("FName_l1"), LocaleUtils.locale_l1);
+                empbizEntryInfo.setEmpName(rs.getString("FName_l2"), LocaleUtils.locale_l2);
+                empbizEntryInfo.setEmpName(rs.getString("FName_l3"), LocaleUtils.locale_l3);
+                logger.error("英文名:" + empbizEntryInfo.getEmpName(Locale.ENGLISH) + ",中文名:" + empbizEntryInfo.getEmpName(Locale.SIMPLIFIED_CHINESE) + ",名称:" + empbizEntryInfo.getEmpName());
+                //员工编码
+                empbizEntryInfo.setEmpNumber(rs.getString("CFEmpNumber"));
+                //性别
+                empbizEntryInfo.setGender(Genders.getEnum(rs.getInt("FGender")));
+                //出生日期
+                empbizEntryInfo.setBirthday(rs.getDate("FBirthday"));
+                //区号
+                empbizEntryInfo.setGlobalRoaming(rs.getString("FGlobalRoaming"));
+                //新手机号
+                empbizEntryInfo.setNCell(rs.getString("FNCell"));
+                //工作邮箱
+                empbizEntryInfo.setEmail(rs.getString("CFWorkemail"));
+                //私人邮箱
+                empbizEntryInfo.put("pemail", rs.getString("FEmail"));
+                System.out.println("工作邮箱===" + empbizEntryInfo.getEmail());
+                //֤身份证号
+                empbizEntryInfo.put("IDCardNo", rs.getString("FIDCardNO"));
+                //֤证件类型
+                if (StringUtils.isNotBlank(rs.getString("CFDocumenttypeID"))) {
+                    empbizEntryInfo.setCredentialsType(CredentialsTypeFactory.getLocalInstance(ctx).
+                            getCredentialsTypeInfo(new ObjectUuidPK(rs.getString("CFDocumenttypeID"))));
+                }
+                empbizEntryInfo.put("passPortNo", rs.getString("FPassportNO"));
+                empbizEntryInfo.setPosition(positionInfo);
+                //职务
+                if (positionInfo.getJob() != null && positionInfo.getJob().getId() != null) {
+                    logger.error("岗位职务:" + positionInfo.getJob().getName());
+                    empbizEntryInfo.setJob(positionInfo.getJob());
+                }
+                //行政组织
+                empbizEntryInfo.setAdminOrg(positionInfo.getAdminOrgUnit());
+                //预入职日期
+                empbizEntryInfo.setBizDate(rs.getDate("FPreEnterDate"));
+                //试用期(月)
+                empbizEntryInfo.setProbation(rs.getInt("CFTryMonth"));
+                //试用期开始日期
+                empbizEntryInfo.put("trialStartDate", rs.getDate("CFTrialStartDate"));
+                //预计转正日期
+                empbizEntryInfo.setPlanFormalDate(rs.getDate("CFTransferDate"));
+                //用工关系状态
+                if (StringUtils.isNotBlank(rs.getString("CFEmpTypeID"))) {
+                    empbizEntryInfo.setEmpType(EmployeeTypeFactory.getLocalInstance(ctx).
+                            getEmployeeTypeInfo(new ObjectUuidPK(rs.getString("CFEmpTypeID"))));
+                } else {
+                    String paramStr = null;
+                    if (empbizEntryInfo.getProbation() > 0) {
+                        paramStr = "where number = '002'";
+                    } else {
+                        paramStr = "where number = '001'";
+                    }
+                    EmployeeTypeCollection employeeType = EmployeeTypeFactory.getLocalInstance(ctx).getEmployeeTypeCollection(paramStr);
+                    empbizEntryInfo.setEmpType(employeeType.get(0));
+                }
+
+                //人员类型
+                empbizEntryInfo.put("persontype", rs.getString("CFPersontypeID"));
+                //员工类别
+                empbizEntryInfo.put("wcategory", rs.getString("CFWcategoryID"));
+                //全职或兼职
+                empbizEntryInfo.put("ftorpt", rs.getString("CFFtorptID"));
+                //直属上级
+                empbizEntryInfo.put("lmanager", rs.getString("CFLmanagerID"));
+                //admin title
+                empbizEntryInfo.put("admintitle", rs.getString("CFAdmintitle"));
+                //Academic Title
+                empbizEntryInfo.put("academictitle", rs.getString("CFAcademictitleID"));
+                //Job2
+                empbizEntryInfo.put("jobs", rs.getString("CFJobsID"));
+                //是否等待合同
+                empbizEntryInfo.put("waitcontract", rs.getString("CFWaitcontract"));
+                //法人
+                empbizEntryInfo.put("legalemployer", rs.getString("CFLegalemployer"));
+                //境外人士
+                empbizEntryInfo.put("Expatriate", rs.getString("CFExpatriate"));
+                //居民
+                empbizEntryInfo.put("resident", rs.getString("CFResident"));
+                //֧支付币种
+                empbizEntryInfo.put("paycurrency", rs.getString("CFPaycurrency"));
+                //时薪
+                empbizEntryInfo.put("hwage", rs.getString("CFHwage"));
+                //教师病假最高额度
+                empbizEntryInfo.put("fsmentitlement", rs.getString("CFFsmentitlement"));
+                //教师病假额度
+                empbizEntryInfo.put("fsentitlement", rs.getString("CFFsentitlement"));
+                //教师年假额度
+                empbizEntryInfo.put("faentitlement", rs.getString("CFFaentitlement"));
+                //职等
+                if (StringUtils.isNotBlank(rs.getString("CFJobGradeID"))) {
+                    JobGradeInfo jobGradeInfo = JobGradeFactory.getLocalInstance(ctx).getJobGradeInfo(new ObjectUuidPK(rs.getString("CFJobGradeID")));
+                    empbizEntryInfo.put("jobGrade", jobGradeInfo);
+                }
+                //纳税方式
+                empbizEntryInfo.put("rmethod", rs.getString("CFRmethodID"));
+                empbizEntryInfo.setEnrollAgain(false);
+                //变动操作
+                HRBizDefineCollection hbdc = HRBizDefineFactory.getLocalInstance(ctx).getHRBizDefineCollection(" where number = 'SHR01'");
+                empbizEntryInfo.setHrBizDefine(hbdc.get(0));
+                //变动类型
+                AffairActionReasonCollection affairActionReasonCollection = AffairActionReasonFactory.getLocalInstance(ctx).getAffairActionReasonCollection(" where number = '0101'");
+                empbizEntryInfo.setAffairActionReason(affairActionReasonCollection.get(0));
+
+                VariationReasonCollection vrcs = VariationReasonFactory.getLocalInstance(ctx).getVariationReasonCollection(" where number = 'RZ05'");
+                empbizEntryInfo.setVariationReason(vrcs.get(0));
+                empbizEntryInfo.put("PreEntryId", rs.getString("Fid"));
+                empbizEntryInfo.setSourceBillType(SourceBillTypeEnum.PREENTRY);
+
+                //国家地区
+                if (StringUtils.isNotBlank(rs.getString("CFCountryRegionID"))) {
+                    CountryRegionCollection countryRegionCollection = CountryRegionFactory.getLocalInstance(ctx).getCountryRegionCollection("where id = '" + rs.getString("CFCountryRegionID") + "'");
+                    if (countryRegionCollection != null && countryRegionCollection.size() > 0) {
+                        empbizEntryInfo.setCountryRegion(countryRegionCollection.get(0));
+                    }
+                }
+                //兼职类人员任职结束时间
+                empbizEntryInfo.put("jobEndTime", rs.getString("cfjobendtime"));
+
+
+                empbizInfo.getEntrys().add(empbizEntryInfo);
+                logger.error("单据信息:" + empbizInfo.toString());
+                CoreBaseInfo model = empbizInfo;
+                IObjectPK bosid = EmpEnrollBizBillFactory.getLocalInstance(ctx).submitEffect(model);
+
+                EmpEnrollBizBillInfo empEnrollBizBillInfo = EmpEnrollBizBillFactory.getLocalInstance(ctx).getEmpEnrollBizBillInfo(bosid);
+                EmpEnrollBizBillEntryCollection entrys = empEnrollBizBillInfo.getEntrys();
+                String personBillId = "";
+                if (entrys.size() > 0) {
+                    personBillId = entrys.get(0).getId().toString();
+                }
+                logger.error("生成入职单成功:" + bosid);
+                if (!StringUtils.isEmpty(bosid + "")) {
+                    StringBuffer upsql = new StringBuffer();
+                    upsql.append(" update T_HR_PreEntry set FCheckInState = '3',FIsGenerateEntryBill = '1',FPersonBillId = '" + personBillId + "' where FID = '" + rs.getString("Fid") + "'");
+                    logger.error("更新预入职单状态:" + upsql);
+                    DbUtil.execute(ctx, upsql.toString());
+                }
+
+            } catch (Exception e) {
+                e.printStackTrace();
+                logger.error(rs.getString("CFEmpNumber") + "生成入职单失败:" + e.getMessage());
+                strBuffer.append("Automatic onboarding of employee " + rs.getString("FName_l2") + "(" + rs.getString("CFEmpNumber") + ") failed. " + e.getMessage() + "\r\n");
+                continue;
+            }
+        }
+
+        if (strBuffer.length() > 0) {
+            try {
+                strBuffer.append("Please check the data, or contact the system administrator with itsupport@gtiit.edu.cn.");
+                Set<String> userIdSet = new HashSet<String>();
+                String roleSql = "select c.fid from T_WFR_WFROLE a left join T_WFR_PERSONROLE b on a.fid=b.froleid left join T_PM_USER c on b.FPSERSONID = c.FPERSONID where a.FNUMBER in ('105') and c.fid is not null";
+                logger.error("获取工作流角色对应用户SQL:" + roleSql);
+                IRowSet roleRow = DbUtil.executeQuery(ctx, roleSql);
+                try {
+                    while (roleRow.next()) {
+                        userIdSet.add(roleRow.getString("fid"));
+                    }
+                } catch (SQLException e) {
+                    e.printStackTrace();
+                }
+                logger.error("用户ID集合:" + userIdSet.toString());
+                if (userIdSet.size() == 0) {
+                    return;
+                }
+                List<String> list = userIdSet.stream().collect(Collectors.toList());
+                SendUtils.msgGroupSend(ctx, "Notification of automatic onboarding failure", PriorityEnum.HIGHT_VALUE, false, strBuffer.toString(), list, BOSMsgTypeEnum.V_TYPE_EMAIL, null);
+            } catch (EASBizException e) {
+                e.printStackTrace();
+            } catch (BOSException e) {
+                e.printStackTrace();
+            }
+        }
+    }
+
+}

+ 896 - 762
GDYSL/websrc/com/kingdee/shr/customer/gtiit/handler/BatchSubmitShemeBillMySubmissionEditHandlerEx.java

@@ -14,6 +14,26 @@ import java.util.Map;
 import javax.servlet.http.HttpServletRequest;
 import javax.servlet.http.HttpServletResponse;
 
+import com.kingdee.bos.dao.IObjectCollection;
+import com.kingdee.bos.dao.IObjectValue;
+import com.kingdee.bos.framework.DynamicObjectFactory;
+import com.kingdee.bos.framework.IDynamicObject;
+import com.kingdee.bos.metadata.data.SortType;
+import com.kingdee.bos.metadata.entity.*;
+import com.kingdee.bos.util.BOSObjectType;
+import com.kingdee.eas.basedata.person.IPerson;
+import com.kingdee.eas.basedata.person.PersonFactory;
+import com.kingdee.eas.basedata.person.PersonInfo;
+import com.kingdee.eas.framework.DataBaseInfo;
+import com.kingdee.eas.hr.affair.IPluralityAddBizBill;
+import com.kingdee.eas.hr.affair.IPluralityAddBizBillEntry;
+import com.kingdee.eas.hr.affair.PluralityAddBizBillEntryFactory;
+import com.kingdee.eas.hr.affair.PluralityAddBizBillFactory;
+import com.kingdee.shr.compensation.CmpEmpORelationCollection;
+import com.kingdee.shr.compensation.CmpEmpORelationFactory;
+import com.kingdee.shr.compensation.CmpEmpORelationInfo;
+import com.kingdee.shr.compensation.ICmpEmpORelation;
+import com.kingdee.shr.preentry.PreEntryInfo;
 import org.apache.commons.lang3.StringUtils;
 import org.apache.log4j.Logger;
 import org.springframework.ui.ModelMap;
@@ -44,17 +64,117 @@ import com.kingdee.shr.customer.gtiit.util.DateTimeUtils;
 
 /**
  * 扩展员工自助-我要提报表单handler
- * @author xiaoxin
  *
+ * @author xiaoxin
  */
-public class BatchSubmitShemeBillMySubmissionEditHandlerEx extends BatchSubmitShemeBillMySubmissionEditHandler{
-	 private static Logger logger =
-		        Logger.getLogger("com.kingdee.shr.customer.gtiit.handler.BatchSubmitShemeBillMySubmissionEditHandlerEx");
-
-	@Override
-	public String getEditGridColModelAction(HttpServletRequest request, HttpServletResponse response, ModelMap modelMap)
-			throws SHRWebException {
-		String submitSchemeId = request.getParameter("submitSchemeId");
+public class BatchSubmitShemeBillMySubmissionEditHandlerEx extends BatchSubmitShemeBillMySubmissionEditHandler {
+    private static Logger logger =
+            Logger.getLogger("com.kingdee.shr.customer.gtiit.handler.BatchSubmitShemeBillMySubmissionEditHandlerEx");
+
+    private SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
+
+    /**
+     * 获取开始结束时间
+     *
+     * @param request
+     * @param response
+     * @param modelMap
+     * @throws BOSException
+     * @throws SHRWebException
+     */
+    public void getDateTimeAction(HttpServletRequest request, HttpServletResponse response, ModelMap modelMap) throws BOSException, SHRWebException {
+        String personId = request.getParameter("personId");
+        String type = request.getParameter("type");
+        String adminOrgId = request.getParameter("adminOrgId");
+        String positionId = request.getParameter("positionId");
+        String hourlywage = request.getParameter("hourlywage");
+        Context ctx = SHRContext.getInstance().getContext();
+        if (StringUtils.isEmpty(personId) || StringUtils.isEmpty(type)) {
+            throw new ShrWebBizException("员工编码或任职类型不能为空!!");
+        }
+        //返回信息
+        Map map = new HashMap();
+        //员工信息
+        IPerson iPerson = PersonFactory.getLocalInstance(ctx);
+        IDynamicObject iDynamicObject = DynamicObjectFactory.getLocalInstance(ctx);
+        try {
+            PersonInfo personInfo = iPerson.getPersonInfo(new ObjectUuidPK(personId));
+            //主要任职
+            if (type.equals("Full")) {
+                //EE23D375=全职或兼职
+                DataBaseInfo ftorptInfo = (DataBaseInfo) personInfo.get("ftorpt");
+                if (ftorptInfo == null) {
+                    throw new ShrWebBizException("请在员工信息维护全职或兼职字段!!");
+                }
+                IObjectValue ftorpt = iDynamicObject.getValue(BOSObjectType.create("EE23D375"), new ObjectUuidPK(ftorptInfo.getId()));
+                //入职日期
+                Date hireDate = personInfo.getHireDate();
+                map.put("startDate", sdf.format(hireDate));
+                if (ftorpt.get("number").equals("FULL")) {
+                    //全职  获取入职日期以及合同信息最新的结束日期   D8595360=合同信息
+                    //查询条件
+                    FilterInfo filterInfo = new FilterInfo();
+                    FilterItemCollection filterItems = filterInfo.getFilterItems();
+                    filterItems.add(new FilterItemInfo("person", personId));
+                    //排序
+                    SorterItemCollection sc = new SorterItemCollection();
+                    SorterItemInfo sorterItem = new SorterItemInfo("ExpiredDate");
+                    sorterItem.setSortType(SortType.DESCEND);
+                    sc.add(sorterItem);
+                    //排序获取第一条最新的数据
+                    EntityViewInfo entityViewInfo = EntityViewInfo.getInstance(filterInfo, null, sc);
+                    IObjectCollection collection = iDynamicObject.getCollection(BOSObjectType.create("D8595360"), entityViewInfo);
+                    //结束时间
+                    Date expiredDate = null;
+                    if (collection.size() > 0) {
+                        IObjectValue pcontractinfo = collection.getObject(0);
+                        expiredDate = (Date) pcontractinfo.get("ExpiredDate");
+
+                    }
+                    map.put("endDate", expiredDate == null ? "" : sdf.format(expiredDate));
+                } else if (ftorpt.get("number").equals("PART")) {
+                    //兼职  获取入职日期以及员工信息兼职类人员任职结束时间
+                    Date jobEndTime = (Date) personInfo.get("jobEndTime");
+                    map.put("endDate", jobEndTime == null ? "" : sdf.format(jobEndTime));
+                }
+            } else if (type.equals("Part")) {//兼职任职
+                if (StringUtils.isEmpty(adminOrgId) || StringUtils.isEmpty(positionId)) {
+                    throw new ShrWebBizException("组织ID或职位ID不能为空!!");
+                }
+                //发薪档案任职分录
+                ICmpEmpORelation iCmpEmpORelation = CmpEmpORelationFactory.getLocalInstance(ctx);
+                FilterInfo filterInfo = new FilterInfo();
+                FilterItemCollection filterItems = filterInfo.getFilterItems();
+                filterItems.add(new FilterItemInfo("empOrgRelation.person", personInfo.getId().toString()));
+                filterItems.add(new FilterItemInfo("empOrgRelation.adminOrg", adminOrgId));
+                filterItems.add(new FilterItemInfo("empOrgRelation.position", positionId));
+                filterItems.add(new FilterItemInfo("empOrgRelation.hourlywage", hourlywage));
+                EntityViewInfo entityViewInfo = EntityViewInfo.getInstance(filterInfo, null, null);
+                CmpEmpORelationCollection cmpEmpORelationCollection = iCmpEmpORelation.getCmpEmpORelationCollection(entityViewInfo);
+                if (cmpEmpORelationCollection.size() > 1) {
+                    throw new ShrWebBizException("员工任职信息数据异常,请排查是否存在多条[人员、组织、职位、时薪]数据!!");
+                }
+                CmpEmpORelationInfo cmpEmpORelationInfo = cmpEmpORelationCollection.get(0);
+                //生效日期
+                Date effectDate = cmpEmpORelationInfo.getEffectDate();
+                //失效日期
+                Date leffectDate = cmpEmpORelationInfo.getLeffectDate();
+                map.put("startDate", sdf.format(effectDate));
+                map.put("endDate", sdf.format(leffectDate));
+            }
+
+        } catch (Exception e) {
+            e.printStackTrace();
+            throw new ShrWebBizException(e);
+        }
+        JSONUtils.writeJson(response, map);
+    }
+
+
+    @Override
+    public String getEditGridColModelAction(HttpServletRequest request, HttpServletResponse response, ModelMap modelMap)
+            throws SHRWebException {
+        String submitSchemeId = request.getParameter("submitSchemeId");
         if (StringUtils.isEmpty(submitSchemeId)) {
             JSONUtils.writeJson(response, modelMap);
             return null;
@@ -69,7 +189,7 @@ public class BatchSubmitShemeBillMySubmissionEditHandlerEx extends BatchSubmitSh
             CmpColumnModels cmpColumnModels = new BaseSubmitBillEntryGenerator().getEntryColumnModels(ctx, submitSchemeId, params);
             modelMap.put("colNames", cmpColumnModels.getColNames());
             modelMap.put("colModel", cmpColumnModels.getColModel());
-            modelMap.put("defaultSortname", (Object)null);
+            modelMap.put("defaultSortname", (Object) null);
 
             CalSubmitSchemeInfo schemeInfo;
             try {
@@ -84,770 +204,784 @@ public class BatchSubmitShemeBillMySubmissionEditHandlerEx extends BatchSubmitSh
             JSONUtils.writeJson(response, modelMap);
             return null;
         }
-	}
-	
-	@Override
-	protected void beforeSubmit(HttpServletRequest request, HttpServletResponse response, CoreBaseInfo model)
-			throws SHRWebException {
-		super.beforeSubmit(request, response, model);
-		Context ctx = SHRContext.getInstance().getContext();
-		BatchSubmitShemeBillInfo info = (BatchSubmitShemeBillInfo) model;
-		if(StringUtils.isNotBlank(info.getString("id"))) {
-			try {
-				info = BatchSubmitShemeBillFactory.getLocalInstance(ctx).getBatchSubmitShemeBillInfo(new ObjectUuidPK(info.getString("id")));
-			} catch (EASBizException e) {
-				e.printStackTrace();
-			} catch (BOSException e) {
-				e.printStackTrace();
-			}
-		}
-		String sql = "select cfistakecheck,CFIsCurrentDepart from T_HR_SCalSubmitScheme where fid = '"+info.getSubmitScheme().getId().toString()+"'";
-		//是否参与校验
-		boolean isPlanCheck = false;
-		try {
-			IRowSet iRowSet = DbUtil.executeQuery(ctx, sql);
-			while(iRowSet.next()) {
-				if(StringUtils.equals("1", iRowSet.getString("cfistakecheck"))) {
-					isPlanCheck = true;
-				}
-			}
-		} catch (BOSException e) {
-			e.printStackTrace();
-		} catch (SQLException e) {
-			e.printStackTrace();
-		}
-		checkPosition(info);
-		checkDateOverlap(info);
-		if(isPlanCheck) {
-			checkPositionCount(info);
-			checkHours(info);
-		}
-	}
-	
-	/**
-	 * 校验职位不允许提交法定节假日那天
-	 * @param info
-	 * @throws ShrWebBizException
-	 */
-	public void checkPosition(BatchSubmitShemeBillInfo info) throws ShrWebBizException {
-		Context ctx = SHRContext.getInstance().getContext();
-		String billId = info.getId().toString();
-		String sql = "select b.FNAME_L1 from T_HR_SchemeBillEntry a left join T_ORG_Position b on a.FPOSITIONID = b.FID "
-				+ "where a.FBILLID = '"+billId+"' "
-				+ "and b.FNAME_L1 = (SELECT fname_l2 FROM T_HR_SHRRSVITEM0 where fstate = '1' and FNUMBER = '1007') "
-				+ "and EXISTS (SELECT d.CFWORKMULTIPLE FROM T_HR_ATS_LegalHoliday c "
-				+ "left join T_HR_ATS_LegalHolidayItem d on c.fid = d.FGROUPID where c.FSTATE = '1' "
-				+ "and d.CFWORKMULTIPLE = '3' and d.FSTARTDATE <= a.feffectdate and d.FENDDATE >= a.feffectdate)";
-		logger.error("查询职位对应日期是否在法定节假日SQL:"+sql);
-		try {
-			boolean flag = false;
-			String positionName = "";
-			IRowSet rowSet = DbUtil.executeQuery(ctx, sql);
-			while(rowSet.next()) {
-				flag = true;
-				positionName = rowSet.getString("FNAME_L1");
-			}
-			if(flag) {
-				throw new ShrWebBizException("This position ("+positionName+") does not allow submission of documents that occur on statutory holidays");
-			}
-		} catch (SQLException e) {
-			e.printStackTrace();
-		} catch (BOSException e) {
-			e.printStackTrace();
-		}
-	}
-	
-	/**
-	 * 校验该员工本月的开始时间和结束时间有没有重叠
-	 * @param info
-	 * @throws ShrWebBizException
-	 */
-	public void checkDateOverlap(BatchSubmitShemeBillInfo info) throws ShrWebBizException {
-		Context ctx = SHRContext.getInstance().getContext();
-		String personId = ContextUtil.getCurrentUserInfo(ctx).getPerson().getId().toString();
-		BatchSubmitShemeBillEntryCollection entryColl = info.getEntry();
-		String billId = info.getId().toString();
-		logger.error("单据ID:"+billId);
-		Date effectDate = entryColl.get(0).getEffectDate();
-		Calendar calendar = Calendar.getInstance();
-		calendar.setTime(effectDate);
-		calendar.set(Calendar.DAY_OF_MONTH, 1);
-		Date startDate = calendar.getTime();
-		calendar.add(Calendar.MONTH, 1);
-		Date endDate = calendar.getTime();
-		String startDateStr = DateTimeUtils.dateFormat(startDate, "yyyy-MM-dd");
-		String endDateStr = DateTimeUtils.dateFormat(endDate, "yyyy-MM-dd");
-		
-		boolean flag = false;
-		String sql = "SELECT a.*,b.billNumber FROM T_HR_SchemeBillEntry a , "
-				+ "(SELECT a.fnumber billNumber,b.* FROM T_HR_SBatchSubmitShemeBill a "
-				+ "left join T_HR_SchemeBillEntry b on a.fid = b.fbillid "
-				+ "where a.FBILLSTATE in ('1','2','3') and b.FPERSONID = '"+personId+"' "
-				+ "and b.FEFFECTDATE >= '"+startDateStr+"' and b.FEFFECTDATE < '"+endDateStr+"' and a.FDATASOURCE = '1') b "
-				+ "where a.FBILLID = '"+billId+"' and a.cfstarttime < b.CFENDTIME "
-				+ "and a.cfendtime > b.CFSTARTTIME";
-		logger.error("查询是否有时间段重叠数据SQL:"+sql);
-		try {
-			IRowSet rowSet = DbUtil.executeQuery(ctx, sql);
-			String billNumber = "";
-			while(rowSet.next()) {
-				billNumber = rowSet.getString("billNumber");
-				flag = true;
-			}
-			if(flag) {
-				throw new ShrWebBizException("The start and end times overlap with another document ("+billNumber+")");
-			}
-		} catch (BOSException e1) {
-			e1.printStackTrace();
-		} catch (SQLException e) {
-			e.printStackTrace();
-		}
-		
-	}
-	
-	/**
-	 * 校验员工每月提交工时不能超过最大工时数
-	 * @param info
-	 * @throws ShrWebBizException
-	 */
-	public void checkHours(BatchSubmitShemeBillInfo info) throws ShrWebBizException {
-		Context ctx = SHRContext.getInstance().getContext();
-		SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
-		String personId = ContextUtil.getCurrentUserInfo(ctx).getPerson().getId().toString();
-		BatchSubmitShemeBillEntryCollection entryColl = info.getEntry();
-		//上月工时数
-		BigDecimal lastHours = BigDecimal.ZERO;
-		//当月工时数
-		BigDecimal currentHour = BigDecimal.ZERO;
-		Calendar calendar = Calendar.getInstance();
-		int currentYear = calendar.get(Calendar.YEAR);
-		int currentMonth = calendar.get(Calendar.MONTH);
-		for(int i=0;i<entryColl.size();i++) {
-			BatchSubmitShemeBillEntryInfo entryInfo = entryColl.get(i);
-			Date effectDate = entryInfo.getEffectDate();
-			calendar.setTime(effectDate);
-			if(currentYear == calendar.get(Calendar.YEAR) && currentMonth == calendar.get(Calendar.MONTH)) {
-				currentHour = currentHour.add(entryInfo.getBigDecimal("totalWorkHours"));
-			}else {
-				lastHours = lastHours.add(entryInfo.getBigDecimal("totalWorkHours"));
-			}
-		}
-		
-		try {
-			BigDecimal maxHour = BigDecimal.ZERO;
-			String paramSql = "SELECT FNUMBER,fname_l2 name FROM T_HR_SHRRSVITEM0 where fstate = '1' and FNUMBER = '1003'";
-			IRowSet paramRow = DbUtil.executeQuery(ctx, paramSql);
-			while(paramRow.next()) {
-				//最大工时数
-				if(paramRow.getString("FNUMBER").equals("1003")) {
-					maxHour = paramRow.getObject("name")==null?BigDecimal.ZERO:paramRow.getBigDecimal("name");
-				}
-			}
-			
-			if(lastHours.compareTo(BigDecimal.ZERO) != 0) {
-				calendar = Calendar.getInstance();
-				calendar.set(Calendar.DAY_OF_MONTH, 1);
-				Date endDate = calendar.getTime();
-				calendar.add(Calendar.MONTH, -1);
-				Date startDate = calendar.getTime();
-				BigDecimal totalHour = BigDecimal.ZERO;
-				String hourSql = "SELECT sum(b.cftotalworkhours) as totalHour FROM T_HR_SBatchSubmitShemeBill a left join T_HR_SchemeBillEntry b on a.fid=b.fbillid where  b.fpersonid='"+personId+"' and b.feffectdate>='"+sdf.format(startDate)+"' and b.feffectdate<'"+sdf.format(endDate)+"' and a.FBILLSTATE in ('1','2','3')";
-				IRowSet iRowSet = DbUtil.executeQuery(ctx, hourSql);
-				while(iRowSet.next()) {
-					totalHour = iRowSet.getObject("totalHour")==null?BigDecimal.ZERO:iRowSet.getBigDecimal("totalHour");
-				}
-				totalHour = totalHour.add(lastHours);
-				
-				BigDecimal adjustHour = BigDecimal.ZERO;
-				//获取调整工时数
-				String adjustSql = "/*dialect*/SELECT cfadjustinghours FROM CT_MP_Ptworkinghours where fpersonid='"+personId+"' and DATE_TRUNC('month', cfeffectivedate)<='"+sdf.format(startDate)+"' and cfenddate>='"+sdf.format(startDate)+"' order by FLastUpdateTime desc limit 1";
-				logger.error("获取调整工时SQL:"+adjustSql);
-				IRowSet adjustRow = DbUtil.executeQuery(ctx, adjustSql);
-				while(adjustRow.next()) {
-					adjustHour = adjustRow.getObject("cfadjustinghours")==null?BigDecimal.ZERO:adjustRow.getBigDecimal("cfadjustinghours");
-				}
-				if(totalHour.compareTo(maxHour.add(adjustHour))>0) {
-					throw new ShrWebBizException("The total reported working hours for the previous month cannot exceed the maximum number of working hours");
-				}
-			}
-			
-			if(currentHour.compareTo(BigDecimal.ZERO) != 0) {
-				calendar = Calendar.getInstance();
-				calendar.set(Calendar.DAY_OF_MONTH, 1);
-				Date startDate = calendar.getTime();
-				calendar.add(Calendar.MONTH, 1);
-				Date endDate = calendar.getTime();
-				BigDecimal totalHour = BigDecimal.ZERO;
-				String hourSql = "SELECT sum(b.cftotalworkhours) as totalHour FROM T_HR_SBatchSubmitShemeBill a left join T_HR_SchemeBillEntry b on a.fid=b.fbillid where  b.fpersonid='"+personId+"' and b.feffectdate>='"+sdf.format(startDate)+"' and b.feffectdate<'"+sdf.format(endDate)+"' and a.FBILLSTATE in ('1','2','3')";
-				IRowSet iRowSet = DbUtil.executeQuery(ctx, hourSql);
-				while(iRowSet.next()) {
-					totalHour = iRowSet.getObject("totalHour")==null?BigDecimal.ZERO:iRowSet.getBigDecimal("totalHour");
-				}
-				totalHour = totalHour.add(lastHours);
-				
-				BigDecimal adjustHour = BigDecimal.ZERO;
-				//获取调整工时数
-				String adjustSql = "/*dialect*/SELECT cfadjustinghours FROM CT_MP_Ptworkinghours where fpersonid='"+personId+"' and DATE_TRUNC('month', cfeffectivedate)<='"+sdf.format(startDate)+"' and cfenddate>='"+sdf.format(startDate)+"' order by FLastUpdateTime desc limit 1";
-				logger.error("获取调整工时SQL:"+adjustSql);
-				IRowSet adjustRow = DbUtil.executeQuery(ctx, adjustSql);
-				while(adjustRow.next()) {
-					adjustHour = adjustRow.getObject("cfadjustinghours")==null?BigDecimal.ZERO:adjustRow.getBigDecimal("cfadjustinghours");
-				}
-				if(totalHour.compareTo(maxHour.add(adjustHour))>0) {
-					throw new ShrWebBizException("The total reported working hours for the current month cannot exceed the maximum number of working hours");
-				}
-			}
-		} catch (BOSException e) {
-			e.printStackTrace();
-		} catch (SQLException e) {
-			e.printStackTrace();
-		}
-	}
-	
-	/**
-	 * 校验员工该职位每个月只能提交一次
-	 * @param info
-	 * @throws ShrWebBizException
-	 */
-	public void checkPositionCount(BatchSubmitShemeBillInfo info) throws ShrWebBizException {
-		Context ctx = SHRContext.getInstance().getContext();
-		String personId = ContextUtil.getCurrentUserInfo(ctx).getPerson().getId().toString();
-		BatchSubmitShemeBillEntryCollection entryColl = info.getEntry();
-		//是否有上月发生日期
-		boolean isLastMonth = false;
-		//是否有当月发生日期
-		boolean isCurrentMonth = false;
-		String positionId = "";
-		String superiorId = "";
-		Calendar calendar = Calendar.getInstance();
-		int currentYear = calendar.get(Calendar.YEAR);
-		int currentMonth = calendar.get(Calendar.MONTH);
-		for(int i=0;i<entryColl.size();i++) {
-			BatchSubmitShemeBillEntryInfo entryInfo = entryColl.get(i);
-			Date effectDate = entryInfo.getEffectDate();
-			calendar.setTime(effectDate);
-			if(currentYear == calendar.get(Calendar.YEAR) && currentMonth == calendar.get(Calendar.MONTH)) {
-				isCurrentMonth = true;
-			}else {
-				isLastMonth = true;
-			}
-			positionId = entryInfo.getPosition().getId().toString();
-			superiorId = entryInfo.getString("superiorId");
-		}
-		logger.error("职位ID:"+positionId+", 直接上级ID:"+superiorId);
-		
-		try {
-			if(isLastMonth) {
-				calendar = Calendar.getInstance();
-				calendar.set(Calendar.DAY_OF_MONTH, 1);
-				String endDate = DateTimeUtils.dateFormat(calendar.getTime(), "yyyy-MM-dd");
-				calendar.add(Calendar.MONTH, -1);
-				String startDate = DateTimeUtils.dateFormat(calendar.getTime(), "yyyy-MM-dd");
-				
-				int count = 0;
-				String sql = "select count(1) count from T_HR_SBatchSubmitShemeBill a left join T_HR_SchemeBillEntry b on a.fid=b.fbillid where b.FPERSONID  = '"+personId+"' and b.FPOSITIONID = '"+positionId+"' and b.CFSuperiorID = '"+superiorId+"' and a.fbillstate in ('1','2','3') and a.fdatasource = '1' and b.FEFFECTDATE >= '"+startDate+"' and b.FEFFECTDATE < '"+endDate+"'";
-				logger.error("查询员工该职位当月提交次数SQL:"+sql);
-				IRowSet iRowSet = DbUtil.executeQuery(ctx, sql);
-				while(iRowSet.next()) {
-					count = iRowSet.getInt("count");
-				}
-				logger.error("员工该职位当月提交次数:"+count);
-				if(count > 0) {
-					throw new ShrWebBizException("The employee submits the position once within a month");
-				}
-			}
-			
-			if(isCurrentMonth) {
-				calendar = Calendar.getInstance();
-				calendar.set(Calendar.DAY_OF_MONTH, 1);
-				String startDate = DateTimeUtils.dateFormat(calendar.getTime(), "yyyy-MM-dd");
-				calendar.add(Calendar.MONTH, 1);
-				String endDate = DateTimeUtils.dateFormat(calendar.getTime(), "yyyy-MM-dd");
-				
-				int count = 0;
-				String sql = "select count(1) count from T_HR_SBatchSubmitShemeBill a left join T_HR_SchemeBillEntry b on a.fid=b.fbillid where b.FPERSONID  = '"+personId+"' and b.FPOSITIONID = '"+positionId+"' and b.CFSuperiorID = '"+superiorId+"' and a.fbillstate in ('1','2','3') and a.fdatasource = '1' and b.FEFFECTDATE >= '"+startDate+"' and b.FEFFECTDATE < '"+endDate+"'";
-				logger.error("查询员工该职位当月提交次数SQL:"+sql);
-				IRowSet iRowSet = DbUtil.executeQuery(ctx, sql);
-				while(iRowSet.next()) {
-					count = iRowSet.getInt("count");
-				}
-				logger.error("员工该职位当月提交次数:"+count);
-				if(count > 0) {
-					throw new ShrWebBizException("The employee submits the position once within a month");
-				}
-			}
-		} catch (BOSException e) {
-			e.printStackTrace();
-		} catch (SQLException e) {
-			e.printStackTrace();
-		}
-	}
-	
-	/**
-	 * 校验XX号之后不允许提交
-	 * @param request
-	 * @param response
-	 * @param modelMap
-	 * @throws SHRWebException
-	 */
-	public void checkSumbitDateAction(HttpServletRequest request, HttpServletResponse response, ModelMap modelMap)
-			throws SHRWebException {
-		Context ctx = SHRContext.getInstance().getContext();
-		int day = 0;
-		Calendar calendar = Calendar.getInstance();
-		int thisDay = calendar.get(Calendar.DAY_OF_MONTH);
-		String resultMessage = "";
-		try {
-			String paramSql = "SELECT FNUMBER,fname_l2 name FROM T_HR_SHRRSVITEM0 where fstate = '1' and FNUMBER = '1004'";
-			IRowSet paramRow = DbUtil.executeQuery(ctx, paramSql);
-			while(paramRow.next()) {
-				if(paramRow.getString("FNUMBER").equals("1004")) {
-					day = paramRow.getObject("name")==null?0:paramRow.getInt("name");
-				}
-			}
-			if(day != 0 && thisDay > day) {
-				resultMessage = "It is not allowed to submit the previous month's work hours after the "+day+"th of each month";
-			}
-		} catch (BOSException e) {
-			e.printStackTrace();
-		} catch (SQLException e) {
-			e.printStackTrace();
-		}
-		modelMap.put("resultMessage", resultMessage);
+    }
+
+    @Override
+    protected void beforeSubmit(HttpServletRequest request, HttpServletResponse response, CoreBaseInfo model)
+            throws SHRWebException {
+        super.beforeSubmit(request, response, model);
+        Context ctx = SHRContext.getInstance().getContext();
+        BatchSubmitShemeBillInfo info = (BatchSubmitShemeBillInfo) model;
+        if (StringUtils.isNotBlank(info.getString("id"))) {
+            try {
+                info = BatchSubmitShemeBillFactory.getLocalInstance(ctx).getBatchSubmitShemeBillInfo(new ObjectUuidPK(info.getString("id")));
+            } catch (EASBizException e) {
+                e.printStackTrace();
+            } catch (BOSException e) {
+                e.printStackTrace();
+            }
+        }
+        String sql = "select cfistakecheck,CFIsCurrentDepart from T_HR_SCalSubmitScheme where fid = '" + info.getSubmitScheme().getId().toString() + "'";
+        //是否参与校验
+        boolean isPlanCheck = false;
+        try {
+            IRowSet iRowSet = DbUtil.executeQuery(ctx, sql);
+            while (iRowSet.next()) {
+                if (StringUtils.equals("1", iRowSet.getString("cfistakecheck"))) {
+                    isPlanCheck = true;
+                }
+            }
+        } catch (BOSException e) {
+            e.printStackTrace();
+        } catch (SQLException e) {
+            e.printStackTrace();
+        }
+        checkPosition(info);
+        checkDateOverlap(info);
+        if (isPlanCheck) {
+            checkPositionCount(info);
+            checkHours(info);
+        }
+    }
+
+    /**
+     * 校验职位不允许提交法定节假日那天
+     *
+     * @param info
+     * @throws ShrWebBizException
+     */
+    public void checkPosition(BatchSubmitShemeBillInfo info) throws ShrWebBizException {
+        Context ctx = SHRContext.getInstance().getContext();
+        String billId = info.getId().toString();
+        String sql = "select b.FNAME_L1 from T_HR_SchemeBillEntry a left join T_ORG_Position b on a.FPOSITIONID = b.FID "
+                + "where a.FBILLID = '" + billId + "' "
+                + "and b.FNAME_L1 = (SELECT fname_l2 FROM T_HR_SHRRSVITEM0 where fstate = '1' and FNUMBER = '1007') "
+                + "and EXISTS (SELECT d.CFWORKMULTIPLE FROM T_HR_ATS_LegalHoliday c "
+                + "left join T_HR_ATS_LegalHolidayItem d on c.fid = d.FGROUPID where c.FSTATE = '1' "
+                + "and d.CFWORKMULTIPLE = '3' and d.FSTARTDATE <= a.feffectdate and d.FENDDATE >= a.feffectdate)";
+        logger.error("查询职位对应日期是否在法定节假日SQL:" + sql);
+        try {
+            boolean flag = false;
+            String positionName = "";
+            IRowSet rowSet = DbUtil.executeQuery(ctx, sql);
+            while (rowSet.next()) {
+                flag = true;
+                positionName = rowSet.getString("FNAME_L1");
+            }
+            if (flag) {
+                throw new ShrWebBizException("This position (" + positionName + ") does not allow submission of documents that occur on statutory holidays");
+            }
+        } catch (SQLException e) {
+            e.printStackTrace();
+        } catch (BOSException e) {
+            e.printStackTrace();
+        }
+    }
+
+    /**
+     * 校验该员工本月的开始时间和结束时间有没有重叠
+     *
+     * @param info
+     * @throws ShrWebBizException
+     */
+    public void checkDateOverlap(BatchSubmitShemeBillInfo info) throws ShrWebBizException {
+        Context ctx = SHRContext.getInstance().getContext();
+        String personId = ContextUtil.getCurrentUserInfo(ctx).getPerson().getId().toString();
+        BatchSubmitShemeBillEntryCollection entryColl = info.getEntry();
+        String billId = info.getId().toString();
+        logger.error("单据ID:" + billId);
+        Date effectDate = entryColl.get(0).getEffectDate();
+        Calendar calendar = Calendar.getInstance();
+        calendar.setTime(effectDate);
+        calendar.set(Calendar.DAY_OF_MONTH, 1);
+        Date startDate = calendar.getTime();
+        calendar.add(Calendar.MONTH, 1);
+        Date endDate = calendar.getTime();
+        String startDateStr = DateTimeUtils.dateFormat(startDate, "yyyy-MM-dd");
+        String endDateStr = DateTimeUtils.dateFormat(endDate, "yyyy-MM-dd");
+
+        boolean flag = false;
+        String sql = "SELECT a.*,b.billNumber FROM T_HR_SchemeBillEntry a , "
+                + "(SELECT a.fnumber billNumber,b.* FROM T_HR_SBatchSubmitShemeBill a "
+                + "left join T_HR_SchemeBillEntry b on a.fid = b.fbillid "
+                + "where a.FBILLSTATE in ('1','2','3') and b.FPERSONID = '" + personId + "' "
+                + "and b.FEFFECTDATE >= '" + startDateStr + "' and b.FEFFECTDATE < '" + endDateStr + "' and a.FDATASOURCE = '1') b "
+                + "where a.FBILLID = '" + billId + "' and a.cfstarttime < b.CFENDTIME "
+                + "and a.cfendtime > b.CFSTARTTIME";
+        logger.error("查询是否有时间段重叠数据SQL:" + sql);
+        try {
+            IRowSet rowSet = DbUtil.executeQuery(ctx, sql);
+            String billNumber = "";
+            while (rowSet.next()) {
+                billNumber = rowSet.getString("billNumber");
+                flag = true;
+            }
+            if (flag) {
+                throw new ShrWebBizException("The start and end times overlap with another document (" + billNumber + ")");
+            }
+        } catch (BOSException e1) {
+            e1.printStackTrace();
+        } catch (SQLException e) {
+            e.printStackTrace();
+        }
+
+    }
+
+    /**
+     * 校验员工每月提交工时不能超过最大工时数
+     *
+     * @param info
+     * @throws ShrWebBizException
+     */
+    public void checkHours(BatchSubmitShemeBillInfo info) throws ShrWebBizException {
+        Context ctx = SHRContext.getInstance().getContext();
+        SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
+        String personId = ContextUtil.getCurrentUserInfo(ctx).getPerson().getId().toString();
+        BatchSubmitShemeBillEntryCollection entryColl = info.getEntry();
+        //上月工时数
+        BigDecimal lastHours = BigDecimal.ZERO;
+        //当月工时数
+        BigDecimal currentHour = BigDecimal.ZERO;
+        Calendar calendar = Calendar.getInstance();
+        int currentYear = calendar.get(Calendar.YEAR);
+        int currentMonth = calendar.get(Calendar.MONTH);
+        for (int i = 0; i < entryColl.size(); i++) {
+            BatchSubmitShemeBillEntryInfo entryInfo = entryColl.get(i);
+            Date effectDate = entryInfo.getEffectDate();
+            calendar.setTime(effectDate);
+            if (currentYear == calendar.get(Calendar.YEAR) && currentMonth == calendar.get(Calendar.MONTH)) {
+                currentHour = currentHour.add(entryInfo.getBigDecimal("totalWorkHours"));
+            } else {
+                lastHours = lastHours.add(entryInfo.getBigDecimal("totalWorkHours"));
+            }
+        }
+
+        try {
+            BigDecimal maxHour = BigDecimal.ZERO;
+            String paramSql = "SELECT FNUMBER,fname_l2 name FROM T_HR_SHRRSVITEM0 where fstate = '1' and FNUMBER = '1003'";
+            IRowSet paramRow = DbUtil.executeQuery(ctx, paramSql);
+            while (paramRow.next()) {
+                //最大工时数
+                if (paramRow.getString("FNUMBER").equals("1003")) {
+                    maxHour = paramRow.getObject("name") == null ? BigDecimal.ZERO : paramRow.getBigDecimal("name");
+                }
+            }
+
+            if (lastHours.compareTo(BigDecimal.ZERO) != 0) {
+                calendar = Calendar.getInstance();
+                calendar.set(Calendar.DAY_OF_MONTH, 1);
+                Date endDate = calendar.getTime();
+                calendar.add(Calendar.MONTH, -1);
+                Date startDate = calendar.getTime();
+                BigDecimal totalHour = BigDecimal.ZERO;
+                String hourSql = "SELECT sum(b.cftotalworkhours) as totalHour FROM T_HR_SBatchSubmitShemeBill a left join T_HR_SchemeBillEntry b on a.fid=b.fbillid where  b.fpersonid='" + personId + "' and b.feffectdate>='" + sdf.format(startDate) + "' and b.feffectdate<'" + sdf.format(endDate) + "' and a.FBILLSTATE in ('1','2','3')";
+                IRowSet iRowSet = DbUtil.executeQuery(ctx, hourSql);
+                while (iRowSet.next()) {
+                    totalHour = iRowSet.getObject("totalHour") == null ? BigDecimal.ZERO : iRowSet.getBigDecimal("totalHour");
+                }
+                totalHour = totalHour.add(lastHours);
+
+                BigDecimal adjustHour = BigDecimal.ZERO;
+                //获取调整工时数
+                String adjustSql = "/*dialect*/SELECT cfadjustinghours FROM CT_MP_Ptworkinghours where fpersonid='" + personId + "' and DATE_TRUNC('month', cfeffectivedate)<='" + sdf.format(startDate) + "' and cfenddate>='" + sdf.format(startDate) + "' order by FLastUpdateTime desc limit 1";
+                logger.error("获取调整工时SQL:" + adjustSql);
+                IRowSet adjustRow = DbUtil.executeQuery(ctx, adjustSql);
+                while (adjustRow.next()) {
+                    adjustHour = adjustRow.getObject("cfadjustinghours") == null ? BigDecimal.ZERO : adjustRow.getBigDecimal("cfadjustinghours");
+                }
+                if (totalHour.compareTo(maxHour.add(adjustHour)) > 0) {
+                    throw new ShrWebBizException("The total reported working hours for the previous month cannot exceed the maximum number of working hours");
+                }
+            }
+
+            if (currentHour.compareTo(BigDecimal.ZERO) != 0) {
+                calendar = Calendar.getInstance();
+                calendar.set(Calendar.DAY_OF_MONTH, 1);
+                Date startDate = calendar.getTime();
+                calendar.add(Calendar.MONTH, 1);
+                Date endDate = calendar.getTime();
+                BigDecimal totalHour = BigDecimal.ZERO;
+                String hourSql = "SELECT sum(b.cftotalworkhours) as totalHour FROM T_HR_SBatchSubmitShemeBill a left join T_HR_SchemeBillEntry b on a.fid=b.fbillid where  b.fpersonid='" + personId + "' and b.feffectdate>='" + sdf.format(startDate) + "' and b.feffectdate<'" + sdf.format(endDate) + "' and a.FBILLSTATE in ('1','2','3')";
+                IRowSet iRowSet = DbUtil.executeQuery(ctx, hourSql);
+                while (iRowSet.next()) {
+                    totalHour = iRowSet.getObject("totalHour") == null ? BigDecimal.ZERO : iRowSet.getBigDecimal("totalHour");
+                }
+                totalHour = totalHour.add(lastHours);
+
+                BigDecimal adjustHour = BigDecimal.ZERO;
+                //获取调整工时数
+                String adjustSql = "/*dialect*/SELECT cfadjustinghours FROM CT_MP_Ptworkinghours where fpersonid='" + personId + "' and DATE_TRUNC('month', cfeffectivedate)<='" + sdf.format(startDate) + "' and cfenddate>='" + sdf.format(startDate) + "' order by FLastUpdateTime desc limit 1";
+                logger.error("获取调整工时SQL:" + adjustSql);
+                IRowSet adjustRow = DbUtil.executeQuery(ctx, adjustSql);
+                while (adjustRow.next()) {
+                    adjustHour = adjustRow.getObject("cfadjustinghours") == null ? BigDecimal.ZERO : adjustRow.getBigDecimal("cfadjustinghours");
+                }
+                if (totalHour.compareTo(maxHour.add(adjustHour)) > 0) {
+                    throw new ShrWebBizException("The total reported working hours for the current month cannot exceed the maximum number of working hours");
+                }
+            }
+        } catch (BOSException e) {
+            e.printStackTrace();
+        } catch (SQLException e) {
+            e.printStackTrace();
+        }
+    }
+
+    /**
+     * 校验员工该职位每个月只能提交一次
+     *
+     * @param info
+     * @throws ShrWebBizException
+     */
+    public void checkPositionCount(BatchSubmitShemeBillInfo info) throws ShrWebBizException {
+        Context ctx = SHRContext.getInstance().getContext();
+        String personId = ContextUtil.getCurrentUserInfo(ctx).getPerson().getId().toString();
+        BatchSubmitShemeBillEntryCollection entryColl = info.getEntry();
+        //是否有上月发生日期
+        boolean isLastMonth = false;
+        //是否有当月发生日期
+        boolean isCurrentMonth = false;
+        String positionId = "";
+        String superiorId = "";
+        Calendar calendar = Calendar.getInstance();
+        int currentYear = calendar.get(Calendar.YEAR);
+        int currentMonth = calendar.get(Calendar.MONTH);
+        for (int i = 0; i < entryColl.size(); i++) {
+            BatchSubmitShemeBillEntryInfo entryInfo = entryColl.get(i);
+            Date effectDate = entryInfo.getEffectDate();
+            calendar.setTime(effectDate);
+            if (currentYear == calendar.get(Calendar.YEAR) && currentMonth == calendar.get(Calendar.MONTH)) {
+                isCurrentMonth = true;
+            } else {
+                isLastMonth = true;
+            }
+            positionId = entryInfo.getPosition().getId().toString();
+            superiorId = entryInfo.getString("superiorId");
+        }
+        logger.error("职位ID:" + positionId + ", 直接上级ID:" + superiorId);
+
+        try {
+            if (isLastMonth) {
+                calendar = Calendar.getInstance();
+                calendar.set(Calendar.DAY_OF_MONTH, 1);
+                String endDate = DateTimeUtils.dateFormat(calendar.getTime(), "yyyy-MM-dd");
+                calendar.add(Calendar.MONTH, -1);
+                String startDate = DateTimeUtils.dateFormat(calendar.getTime(), "yyyy-MM-dd");
+
+                int count = 0;
+                String sql = "select count(1) count from T_HR_SBatchSubmitShemeBill a left join T_HR_SchemeBillEntry b on a.fid=b.fbillid where b.FPERSONID  = '" + personId + "' and b.FPOSITIONID = '" + positionId + "' and b.CFSuperiorID = '" + superiorId + "' and a.fbillstate in ('1','2','3') and a.fdatasource = '1' and b.FEFFECTDATE >= '" + startDate + "' and b.FEFFECTDATE < '" + endDate + "'";
+                logger.error("查询员工该职位当月提交次数SQL:" + sql);
+                IRowSet iRowSet = DbUtil.executeQuery(ctx, sql);
+                while (iRowSet.next()) {
+                    count = iRowSet.getInt("count");
+                }
+                logger.error("员工该职位当月提交次数:" + count);
+                if (count > 0) {
+                    throw new ShrWebBizException("The employee submits the position once within a month");
+                }
+            }
+
+            if (isCurrentMonth) {
+                calendar = Calendar.getInstance();
+                calendar.set(Calendar.DAY_OF_MONTH, 1);
+                String startDate = DateTimeUtils.dateFormat(calendar.getTime(), "yyyy-MM-dd");
+                calendar.add(Calendar.MONTH, 1);
+                String endDate = DateTimeUtils.dateFormat(calendar.getTime(), "yyyy-MM-dd");
+
+                int count = 0;
+                String sql = "select count(1) count from T_HR_SBatchSubmitShemeBill a left join T_HR_SchemeBillEntry b on a.fid=b.fbillid where b.FPERSONID  = '" + personId + "' and b.FPOSITIONID = '" + positionId + "' and b.CFSuperiorID = '" + superiorId + "' and a.fbillstate in ('1','2','3') and a.fdatasource = '1' and b.FEFFECTDATE >= '" + startDate + "' and b.FEFFECTDATE < '" + endDate + "'";
+                logger.error("查询员工该职位当月提交次数SQL:" + sql);
+                IRowSet iRowSet = DbUtil.executeQuery(ctx, sql);
+                while (iRowSet.next()) {
+                    count = iRowSet.getInt("count");
+                }
+                logger.error("员工该职位当月提交次数:" + count);
+                if (count > 0) {
+                    throw new ShrWebBizException("The employee submits the position once within a month");
+                }
+            }
+        } catch (BOSException e) {
+            e.printStackTrace();
+        } catch (SQLException e) {
+            e.printStackTrace();
+        }
+    }
+
+    /**
+     * 校验XX号之后不允许提交
+     *
+     * @param request
+     * @param response
+     * @param modelMap
+     * @throws SHRWebException
+     */
+    public void checkSumbitDateAction(HttpServletRequest request, HttpServletResponse response, ModelMap modelMap)
+            throws SHRWebException {
+        Context ctx = SHRContext.getInstance().getContext();
+        int day = 0;
+        Calendar calendar = Calendar.getInstance();
+        int thisDay = calendar.get(Calendar.DAY_OF_MONTH);
+        String resultMessage = "";
+        try {
+            String paramSql = "SELECT FNUMBER,fname_l2 name FROM T_HR_SHRRSVITEM0 where fstate = '1' and FNUMBER = '1004'";
+            IRowSet paramRow = DbUtil.executeQuery(ctx, paramSql);
+            while (paramRow.next()) {
+                if (paramRow.getString("FNUMBER").equals("1004")) {
+                    day = paramRow.getObject("name") == null ? 0 : paramRow.getInt("name");
+                }
+            }
+            if (day != 0 && thisDay > day) {
+                resultMessage = "It is not allowed to submit the previous month's work hours after the " + day + "th of each month";
+            }
+        } catch (BOSException e) {
+            e.printStackTrace();
+        } catch (SQLException e) {
+            e.printStackTrace();
+        }
+        modelMap.put("resultMessage", resultMessage);
         JSONUtils.writeJson(response, modelMap);
-	}
-	
-	
-	/**
-	 * 根据人员id获取它的直属上级id和时薪
-	 * @param request
-	 * @param response
-	 * @param modelMap
-	 * @return
-	 * @throws SHRWebException
-	 */
-	public String getPersonCareerDataAction(HttpServletRequest request, HttpServletResponse response, ModelMap modelMap)
-			throws SHRWebException {
-		Context ctx = SHRContext.getInstance().getContext();
-		String personId = request.getParameter("personId");
-		String parentId = "";
-		String workHour = "";
-        String sql = "select re.FPERSONID,rl.cflinemanagernameI linemanagername,rl.cfhourlywage from (SELECT FPERSONID,max(FEFFDT) as maxDate FROM T_HR_EmpOrgRelation where fassignType = '1' group by  FPERSONID) as re  left join T_HR_EmpOrgRelation rl on re.fpersonid = rl.fpersonid and re.maxDate = rl.feffdt and rl.fassignType = '1' where re.fpersonid='"+personId+"'";
+    }
+
+
+    /**
+     * 根据人员id获取它的直属上级id和时薪
+     *
+     * @param request
+     * @param response
+     * @param modelMap
+     * @return
+     * @throws SHRWebException
+     */
+    public String getPersonCareerDataAction(HttpServletRequest request, HttpServletResponse response, ModelMap modelMap)
+            throws SHRWebException {
+        Context ctx = SHRContext.getInstance().getContext();
+        String personId = request.getParameter("personId");
+        String parentId = "";
+        String workHour = "";
+        String sql = "select re.FPERSONID,rl.cflinemanagernameI linemanagername,rl.cfhourlywage from (SELECT FPERSONID,max(FEFFDT) as maxDate FROM T_HR_EmpOrgRelation where fassignType = '1' group by  FPERSONID) as re  left join T_HR_EmpOrgRelation rl on re.fpersonid = rl.fpersonid and re.maxDate = rl.feffdt and rl.fassignType = '1' where re.fpersonid='" + personId + "'";
         try {
-			IRowSet iRowSet = DbUtil.executeQuery(ctx, sql);
-			while(iRowSet.next()) {
-				parentId = iRowSet.getString("linemanagername");
-				workHour = iRowSet.getString("cfhourlywage");
-			}
-		} catch (BOSException e) {
-			e.printStackTrace();
-		} catch (SQLException e) {
-			e.printStackTrace();
-		}
+            IRowSet iRowSet = DbUtil.executeQuery(ctx, sql);
+            while (iRowSet.next()) {
+                parentId = iRowSet.getString("linemanagername");
+                workHour = iRowSet.getString("cfhourlywage");
+            }
+        } catch (BOSException e) {
+            e.printStackTrace();
+        } catch (SQLException e) {
+            e.printStackTrace();
+        }
         modelMap.put("parentId", parentId);
         modelMap.put("workHour", workHour);
         JSONUtils.writeJson(response, modelMap);
-    	return null;
+        return null;
     }
-	
-	/**
-	 * 获取当前员工的最新入职日期
-	 * @param request
-	 * @param response
-	 * @param modelMap
-	 * @return
-	 * @throws SHRWebException
-	 */
-	public String getInductionDateAction(HttpServletRequest request, HttpServletResponse response, ModelMap modelMap)
-			throws SHRWebException {
-		Context ctx = SHRContext.getInstance().getContext();
-		String personId = ContextUtil.getCurrentUserInfo(ctx).getPerson().getId().toString();
-		String sql = "select b.fenterdate from (SELECT FPERSONID,max(FEFFDT) as maxDate FROM T_HR_EmpLaborRelationHis group by fpersonid) a left join T_HR_EmpLaborRelationHis b on a.fpersonid=b.fpersonid and a.maxdate=b.FEFFDT where a.fpersonid='"+personId+"'";
-		String enterDate = "";
-		try {
-			IRowSet iRowSet = DbUtil.executeQuery(ctx, sql);
-			while(iRowSet.next()) {
-				enterDate = iRowSet.getString("fenterdate");
-			}
-		} catch (BOSException e) {
-			e.printStackTrace(); 
-		} catch (SQLException e) {
-			e.printStackTrace();
-		} 
-		modelMap.put("enterDate", enterDate);
+
+    /**
+     * 获取当前员工的最新入职日期
+     *
+     * @param request
+     * @param response
+     * @param modelMap
+     * @return
+     * @throws SHRWebException
+     */
+    public String getInductionDateAction(HttpServletRequest request, HttpServletResponse response, ModelMap modelMap)
+            throws SHRWebException {
+        Context ctx = SHRContext.getInstance().getContext();
+        String personId = ContextUtil.getCurrentUserInfo(ctx).getPerson().getId().toString();
+        String sql = "select b.fenterdate from (SELECT FPERSONID,max(FEFFDT) as maxDate FROM T_HR_EmpLaborRelationHis group by fpersonid) a left join T_HR_EmpLaborRelationHis b on a.fpersonid=b.fpersonid and a.maxdate=b.FEFFDT where a.fpersonid='" + personId + "'";
+        String enterDate = "";
+        try {
+            IRowSet iRowSet = DbUtil.executeQuery(ctx, sql);
+            while (iRowSet.next()) {
+                enterDate = iRowSet.getString("fenterdate");
+            }
+        } catch (BOSException e) {
+            e.printStackTrace();
+        } catch (SQLException e) {
+            e.printStackTrace();
+        }
+        modelMap.put("enterDate", enterDate);
         JSONUtils.writeJson(response, modelMap);
-		return null;
-	}
-	
-	/**
-	 * 查询人员对应职位的最新的合同开始和结束日期
-	 * @param request
-	 * @param response
-	 * @param modelMap
-	 * @throws SHRWebException
-	 */
-	public void getContractDateAction(HttpServletRequest request, HttpServletResponse response, ModelMap modelMap)throws SHRWebException {
-		//职位id
-		String positionId = request.getParameter("positionId");
-		Context ctx = SHRContext.getInstance().getContext();
-		String personId = ContextUtil.getCurrentUserInfo(ctx).getPerson().getId().toString();
+        return null;
+    }
+
+    /**
+     * 查询人员对应职位的最新的合同开始和结束日期
+     *
+     * @param request
+     * @param response
+     * @param modelMap
+     * @throws SHRWebException
+     */
+    public void getContractDateAction(HttpServletRequest request, HttpServletResponse response, ModelMap modelMap) throws SHRWebException {
+        //职位id
+        String positionId = request.getParameter("positionId");
+        Context ctx = SHRContext.getInstance().getContext();
+        String personId = ContextUtil.getCurrentUserInfo(ctx).getPerson().getId().toString();
 //		String sql = "SELECT b.cfcommencingdate,b.cfexpireddate FROM (SELECT max(cfcommencingdate) maxdate,fpersonid,cfpositionid FROM CT_MP_Pcontractinfo group by fpersonid,cfpositionid) a left join CT_MP_Pcontractinfo b on a.maxdate=b.cfcommencingdate and a.fpersonid=b.fpersonid and a.cfpositionid=b.cfpositionid where a.fpersonid='"+personId+"' and a.cfpositionid='"+positionId+"' and b.cftype!='1'";
-		String sql = "SELECT cfcommencingdate,cfexpireddate,cftype FROM CT_MP_Pcontractinfo where fpersonid='"+personId+"' and cfpositionid='"+positionId+"' order by cfcommencingdate asc";
-		logger.error("查询合同信息SQL:"+sql);
-		Date beginContractDate = null;
-		Date endContractDate = null;
-		String contractType = "";
-		try {
-			IRowSet iRowSet = DbUtil.executeQuery(ctx, sql);
+        String sql = "SELECT cfcommencingdate,cfexpireddate,cftype FROM CT_MP_Pcontractinfo where fpersonid='" + personId + "' and cfpositionid='" + positionId + "' order by cfcommencingdate asc";
+        logger.error("查询合同信息SQL:" + sql);
+        Date beginContractDate = null;
+        Date endContractDate = null;
+        String contractType = "";
+        try {
+            IRowSet iRowSet = DbUtil.executeQuery(ctx, sql);
 			/*while(iRowSet.next()) {
 				//合同开始日期
 				beginContractDate = iRowSet.getDate("cfcommencingdate");
 				//合同结束日期
 				endContractDate = iRowSet.getDate("cfexpireddate");
 			}*/
-			List<Map<String, Object>> list = new ArrayList<>();
-			while(iRowSet.next()) {
-				//合同开始日期
-				Date beginDate = iRowSet.getDate("cfcommencingdate");
-				//合同结束日期
-				Date endDate = iRowSet.getDate("cfexpireddate");
-				//合同类型
-				String type = iRowSet.getString("cftype");
-				Map<String, Object> map = new HashMap<String, Object>();
-				map.put("beginDate", beginDate);
-				map.put("endDate", endDate);
-				map.put("type", type);
-				list.add(map);
-			}
-			
-			for(int i=0;i<list.size();i++) {
-				Map<String, Object> map = list.get(i);
-				Date beginDate = (Date) map.get("beginDate");
-				Date endDate = (Date) map.get("endDate");
-				String type = (String) map.get("type");
-				
-				//获取连续时间段的开始日期和结束日期,如果中间合同类型发生变动或者日期中断,则重新计算
-				if(StringUtils.equals(contractType, type)) {
-					Calendar beginCalendar = Calendar.getInstance();
-					Calendar endCalendar = Calendar.getInstance();
-					beginCalendar.setTime(beginDate);
-					beginCalendar.add(Calendar.DAY_OF_MONTH, -1);
-					endCalendar.setTime(endContractDate);
-					
-					boolean isYear = beginCalendar.get(Calendar.YEAR) == endCalendar.get(Calendar.YEAR);
-					boolean isMonth = beginCalendar.get(Calendar.MONTH) == endCalendar.get(Calendar.MONTH);
-					boolean isDay = beginCalendar.get(Calendar.DAY_OF_MONTH) == endCalendar.get(Calendar.DAY_OF_MONTH);
-					boolean flag = isYear && isMonth && isDay;
-					
-					if(flag) {
-						endContractDate = endDate;
-					}else {
-						beginContractDate = beginDate;
-						endContractDate = endDate;
-					}
-				}else {
-					beginContractDate = beginDate;
-					endContractDate = endDate;
-					contractType = type;
-				}
-			}
-			
-		} catch (SQLException e) {
-			e.printStackTrace();
-		} catch (BOSException e) {
-			e.printStackTrace();
-		}
-		modelMap.put("beginContractDate", beginContractDate);
-		modelMap.put("endContractDate", endContractDate);
-		JSONUtils.writeJson(response, modelMap);
-	}
-	
-	/**
-	 * 校验月提交总工时不能大于最大工时(废弃)
-	 * @param request
-	 * @param response
-	 * @param modelMap
-	 * @return
-	 * @throws SHRWebException
-	 */
-	public String checkEscalationDateAction(HttpServletRequest request, HttpServletResponse response, ModelMap modelMap)
-			throws SHRWebException {
-		Context ctx = SHRContext.getInstance().getContext();
-		String personId = ContextUtil.getCurrentUserInfo(ctx).getPerson().getId().toString();
-		BigDecimal hours = new BigDecimal(request.getParameter("hours"));
-		SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
-		Calendar calendar = Calendar.getInstance();
-		int thisDay = calendar.get(Calendar.DAY_OF_MONTH);
-		calendar.set(Calendar.DAY_OF_MONTH, 1);
-		Date endDate = calendar.getTime();
-		calendar.add(Calendar.MONTH, -1);
-		Date stratDate = calendar.getTime();
-		
-		try {
-			BigDecimal maxHour = BigDecimal.ZERO;
-			int day = 0;
-			String paramSql = "SELECT FNUMBER,fname_l2 name FROM T_HR_SHRRSVITEM0 where fstate = '1' and (FNUMBER = '1003' or FNUMBER = '1004')";
-			IRowSet paramRow = DbUtil.executeQuery(ctx, paramSql);
-			while(paramRow.next()) {
-				//最大工时数
-				if(paramRow.getString("FNUMBER").equals("1003")) {
-					maxHour = paramRow.getObject("name")==null?BigDecimal.ZERO:paramRow.getBigDecimal("name");
-				}
-				if(paramRow.getString("FNUMBER").equals("1004")) {
-					day = paramRow.getObject("name")==null?0:paramRow.getInt("name");
-				}
-			}
-			//校验XX号之后不允许提交
-			if(thisDay > day) {
-				modelMap.put("resultMessage", "It is not allowed to submit the previous month's work hours after the "+day+"th of each month");
-		        JSONUtils.writeJson(response, modelMap);
-		        return null;
-			}
-			
-			BigDecimal totalHour = BigDecimal.ZERO;
-			String hourSql = "SELECT sum(b.cftotalworkhours) as totalHour FROM T_HR_SBatchSubmitShemeBill a left join T_HR_SchemeBillEntry b on a.fid=b.fbillid where  b.fpersonid='"+personId+"' and b.feffectdate>='"+sdf.format(stratDate)+"' and b.feffectdate<'"+sdf.format(endDate)+"' and a.FBILLSTATE in ('1','2','3')";
-			IRowSet iRowSet = DbUtil.executeQuery(ctx, hourSql);
-			while(iRowSet.next()) {
-				totalHour = iRowSet.getObject("totalHour")==null?BigDecimal.ZERO:iRowSet.getBigDecimal("totalHour");
-			}
-			totalHour = totalHour.add(hours);
-			
-			BigDecimal adjustHour = BigDecimal.ZERO;
-			//获取调整工时数
-			String adjustSql = "SELECT cfadjustinghours FROM CT_MP_Ptworkinghours where fpersonid='"+personId+"' and cfeffectivedate>='"+sdf.format(stratDate)+"' and cfeffectivedate<'"+sdf.format(endDate)+"'";
-			IRowSet adjustRow = DbUtil.executeQuery(ctx, adjustSql);
-			while(adjustRow.next()) {
-				adjustHour = adjustRow.getObject("cfadjustinghours")==null?BigDecimal.ZERO:adjustRow.getBigDecimal("cfadjustinghours");
-			}
-			if(totalHour.compareTo(maxHour.add(adjustHour))>0) {
-				modelMap.put("resultMessage", "The total working hours in a month cannot exceed the maximum number of hours");
-		        JSONUtils.writeJson(response, modelMap);
-			}
-			 
-		} catch (BOSException e) {
-			e.printStackTrace();
-		} catch (SQLException e) {
-			e.printStackTrace();
-		}
-		return null;
-	}
-	
-	/**
-	 * 汇总分录的工时和金额到单头
-	 * @param request
-	 * @param response
-	 * @param modelMap
-	 * @throws SHRWebException
-	 */
-	public void countHourAmountAction(HttpServletRequest request, HttpServletResponse response, ModelMap modelMap) throws SHRWebException {
-		String billId = request.getParameter("billId");
-		if(StringUtils.isEmpty(billId)) {
-			return;
-		}
-		Context ctx = SHRContext.getInstance().getContext();
-		try {
-			BatchSubmitShemeBillInfo batchSubmitShemeBillInfo = BatchSubmitShemeBillFactory.getLocalInstance(ctx).getBatchSubmitShemeBillInfo(new ObjectUuidPK(billId));
-			BatchSubmitShemeBillEntryCollection entryColl = batchSubmitShemeBillInfo.getEntry();
-			BigDecimal sumHours = BigDecimal.ZERO;
-			BigDecimal sumAmount = BigDecimal.ZERO;
-			for(int i=0;i<entryColl.size();i++) {
-				BatchSubmitShemeBillEntryInfo entryInfo = entryColl.get(i);
-				BigDecimal hour = entryInfo.getBigDecimal("totalWorkHours")==null?BigDecimal.ZERO:entryInfo.getBigDecimal("totalWorkHours");
-				BigDecimal amount = entryInfo.getBigDecimal("totalAmount")==null?BigDecimal.ZERO:entryInfo.getBigDecimal("totalAmount");
-				sumHours = sumHours.add(hour);
-				sumAmount = sumAmount.add(amount);
-			}
-			batchSubmitShemeBillInfo.put("totalWorkHours", sumHours);
-			batchSubmitShemeBillInfo.put("totalAmount", sumAmount);
-			BatchSubmitShemeBillFactory.getLocalInstance(ctx).save(batchSubmitShemeBillInfo);
-		} catch (EASBizException e) {
-			e.printStackTrace();
-		} catch (BOSException e) {
-			e.printStackTrace();
-		}
-	}
-	
-	/**
-	 * 根据提报日期判断法定节假日和休息日
-	 * @param request
-	 * @param response
-	 * @param modelMap
-	 * @throws SHRWebException
-	 */
-	public void workMultipleAction(HttpServletRequest request, HttpServletResponse response, ModelMap modelMap) throws SHRWebException {
-		Context ctx = SHRContext.getInstance().getContext();
-		String otDate = request.getParameter("otDate");
-		logger.error("提报日期:"+otDate); 
-		Date parseDate = DateTimeUtils.parseDate(otDate, "yyyy-MM-dd");
-		otDate = DateTimeUtils.dateFormat(parseDate, "yyyy-MM-dd");
-		String sql = "SELECT b.CFWORKMULTIPLE FROM T_HR_ATS_LegalHoliday a left join T_HR_ATS_LegalHolidayItem b on a.fid = b.FGROUPID where a.FSTATE = '1' and b.FSTARTDATE <= '"+otDate+"' and b.FENDDATE >= '"+otDate+"'";
-		logger.error("查询加班类型SQL:"+sql);
-		Map<String, String> returnMap = new HashMap<String, String>();
-		try {
-			IRowSet iRowSet = DbUtil.executeQuery(ctx, sql);
-			boolean flag = false;
-			while (iRowSet.next()){
-				if(StringUtils.equals(iRowSet.getString("CFWORKMULTIPLE"), "3")){
-					//法定节假日加班
-					flag = true;
-				}
-			}
-			if(flag) {
-				returnMap.put("returnType", "0");
-			}else {
-				Calendar calendar = Calendar.getInstance();
-				calendar.setTime(parseDate);
-				int dayOfWeek = calendar.get(Calendar.DAY_OF_WEEK);
-		        if(dayOfWeek == Calendar.SATURDAY || dayOfWeek == Calendar.SUNDAY) {
-					//休息日加班
-		        	returnMap.put("returnType", "1");
-		        }
-			}
-		} catch (BOSException e) {
-			e.printStackTrace();
-		} catch (SQLException throwables) {
-			throwables.printStackTrace();
-		}
-		JSONUtils.writeJson(response, returnMap);
-	}
-	
-	/**
-	 * 根据人员档案获取当月是否离职或兼职失效
-	 * @param request
-	 * @param response
-	 * @param modelMap
-	 * @throws SHRWebException
-	 */
-	public void checkDepartDateAction(HttpServletRequest request, HttpServletResponse response, ModelMap modelMap) throws SHRWebException {
-		Context ctx = SHRContext.getInstance().getContext();
-		String personId = ContextUtil.getCurrentUserInfo(ctx).getPerson().getId().toString();
-		String cmpOrgRelationId = request.getParameter("cmpOrgRelationId");
-		Calendar calendar = Calendar.getInstance();
-		int currentYear = calendar.get(Calendar.YEAR);
-		int currentMonth = calendar.get(Calendar.MONTH)+1;
-		boolean flag = false;
-		String cmpSql = "select b.fassigntype,b.fpositionid from T_HR_SCmpEmpORelation a left join T_HR_EmpOrgRelation b on a.FEMPORGRELATIONID = b.fid where a.fid ='"+cmpOrgRelationId+"'";
-		logger.error("查询员工档案信息SQL:"+cmpSql);
-		try {
-			IRowSet iRowSet = DbUtil.executeQuery(ctx, cmpSql);
-			//任职类型 
-			String assignType = "";
-			//职位id
-			String positionId = "";
-			while(iRowSet.next()) {
-				assignType = iRowSet.getString("fassigntype");
-				positionId = iRowSet.getString("fpositionid");
-			}
-			//主要任职时
-			if(StringUtils.equals(assignType, "1")) {
-				String resignSql = "select top 1 year(b.FBIZDATE) year,month(b.FBIZDATE) month from T_HR_ResignBizBill a left join T_HR_ResignBizBillentry b on a.fid=b.fbillid where b.FPERSONID ='"+personId+"' and a.FBILLSTATE = '3' order by b.FBIZDATE desc";
-				logger.error("查询员工离职单SQL:"+resignSql);
-				IRowSet resignRow = DbUtil.executeQuery(ctx, resignSql);
-				int resignYear = 0;
-				int resignMonth = 0;
-				while(resignRow.next()) {
-					resignYear = resignRow.getInt("year");
-					resignMonth = resignRow.getInt("month");
-				}
-				if(currentYear == resignYear && currentMonth == resignMonth) {
-					flag = true;
-				}
-			}else {
-				String empSql = "select top 1 year(fleffdt) year,month(fleffdt) month from T_HR_EmpOrgRelation where fpositionid = '"+positionId+"' and fpersonid='"+personId+"' order by feffdt desc";
-				logger.error("查询员工兼职SQL:"+empSql);
-				int leffdtYear = 0;
-				int leffdtMonth = 0;
-				IRowSet empRow = DbUtil.executeQuery(ctx, empSql);
-				while(empRow.next()) {
-					leffdtYear = empRow.getInt("year");
-					leffdtMonth = empRow.getInt("month");
-				}
-				if(currentYear == leffdtYear && currentMonth == leffdtMonth) {
-					flag = true;
-				}
-			}
-		} catch (BOSException e) {
-			e.printStackTrace();
-		} catch (SQLException e) {
-			e.printStackTrace();
-		}
-		modelMap.put("flag", flag);
-		JSONUtils.writeJson(response, modelMap);
-	}
-	
-	/**
-	 * 员工同一职位一个月内只能提交一次
-	 * @param request
-	 * @param response
-	 * @param modelMap
-	 * @throws SHRWebException
-	 */
-	public void checkSubmitCountAction(HttpServletRequest request, HttpServletResponse response, ModelMap modelMap) throws SHRWebException {
-		Context ctx = SHRContext.getInstance().getContext();
-		String positionId = request.getParameter("positionId");
-		String personId = ContextUtil.getCurrentUserInfo(ctx).getPerson().getId().toString();
-		
-		Calendar calendar = Calendar.getInstance();
-		calendar.set(Calendar.DAY_OF_MONTH, 1);
-		String startDate = DateTimeUtils.dateFormat(calendar.getTime(), "yyyy-MM-dd");
-		calendar.add(Calendar.MONTH, 1);
-		String endDate = DateTimeUtils.dateFormat(calendar.getTime(), "yyyy-MM-dd");
-		
-		int count = 0;
-		String sql = "SELECT count(1) count FROM T_HR_SBatchSubmitShemeBill where fid in (select distinct a.fid from T_HR_SBatchSubmitShemeBill a left join T_HR_SchemeBillEntry b on a.fid=b.fbillid where a.FPROPOSERID  = '"+personId+"' and b.FPOSITIONID = '"+positionId+"' and a.fbillstate in ('1','2','3') and a.fdatasource = '1' and a.FSUBMITTIME >= '"+startDate+"' and a.FSUBMITTIME < '"+endDate+"')";
-		logger.error("查询员工该职位当月提交次数SQL:"+sql);
-		try {
-			IRowSet iRowSet = DbUtil.executeQuery(ctx, sql);
-			while(iRowSet.next()) {
-				count = iRowSet.getInt("count");
-			}
-			logger.error("员工该职位当月提交次数:"+count);
-		} catch (BOSException e) {
-			e.printStackTrace();
-		} catch (SQLException e) {
-			e.printStackTrace();
-		}
-		modelMap.put("count", count);
-		JSONUtils.writeJson(response, modelMap);
-	}
-	
-	/**
-	 * 判断是否参与校验
-	 * @param request
-	 * @param response
-	 * @param modelMap
-	 * @throws SHRWebException
-	 */
-	public void isTakeCheckAction(HttpServletRequest request, HttpServletResponse response, ModelMap modelMap) throws SHRWebException {
-		Context ctx = SHRContext.getInstance().getContext();
-		//提报方案ID
-		String calSchemeId = request.getParameter("calSchemeId");
-		logger.error("提报方案ID:"+calSchemeId);
-		//是否参与校验
-		boolean isPlanCheck = false;
-		//当月离职处理
-		boolean isCurrentDepart = false;
-		String sql = "select cfistakecheck,CFIsCurrentDepart from T_HR_SCalSubmitScheme where fid = '"+calSchemeId+"'";
-		logger.error("查询提报方案SQL:"+sql);
-		try {
-			IRowSet iRowSet = DbUtil.executeQuery(ctx, sql);
-			while(iRowSet.next()) {
-				if(StringUtils.equals("1", iRowSet.getString("cfistakecheck"))) {
-					isPlanCheck = true;
-				}
-				if(StringUtils.equals("1", iRowSet.getString("CFIsCurrentDepart"))) {
-					isCurrentDepart = true;
-				}
-			}
-		} catch (BOSException e) {
-			e.printStackTrace();
-		} catch (SQLException e) {
-			e.printStackTrace();
-		}
-		modelMap.put("isPlanCheck", isPlanCheck);
-		modelMap.put("isCurrentDepart", isCurrentDepart);
-		JSONUtils.writeJson(response, modelMap);
-	}
-	
-	
+            List<Map<String, Object>> list = new ArrayList<>();
+            while (iRowSet.next()) {
+                //合同开始日期
+                Date beginDate = iRowSet.getDate("cfcommencingdate");
+                //合同结束日期
+                Date endDate = iRowSet.getDate("cfexpireddate");
+                //合同类型
+                String type = iRowSet.getString("cftype");
+                Map<String, Object> map = new HashMap<String, Object>();
+                map.put("beginDate", beginDate);
+                map.put("endDate", endDate);
+                map.put("type", type);
+                list.add(map);
+            }
+
+            for (int i = 0; i < list.size(); i++) {
+                Map<String, Object> map = list.get(i);
+                Date beginDate = (Date) map.get("beginDate");
+                Date endDate = (Date) map.get("endDate");
+                String type = (String) map.get("type");
+
+                //获取连续时间段的开始日期和结束日期,如果中间合同类型发生变动或者日期中断,则重新计算
+                if (StringUtils.equals(contractType, type)) {
+                    Calendar beginCalendar = Calendar.getInstance();
+                    Calendar endCalendar = Calendar.getInstance();
+                    beginCalendar.setTime(beginDate);
+                    beginCalendar.add(Calendar.DAY_OF_MONTH, -1);
+                    endCalendar.setTime(endContractDate);
+
+                    boolean isYear = beginCalendar.get(Calendar.YEAR) == endCalendar.get(Calendar.YEAR);
+                    boolean isMonth = beginCalendar.get(Calendar.MONTH) == endCalendar.get(Calendar.MONTH);
+                    boolean isDay = beginCalendar.get(Calendar.DAY_OF_MONTH) == endCalendar.get(Calendar.DAY_OF_MONTH);
+                    boolean flag = isYear && isMonth && isDay;
+
+                    if (flag) {
+                        endContractDate = endDate;
+                    } else {
+                        beginContractDate = beginDate;
+                        endContractDate = endDate;
+                    }
+                } else {
+                    beginContractDate = beginDate;
+                    endContractDate = endDate;
+                    contractType = type;
+                }
+            }
+
+        } catch (SQLException e) {
+            e.printStackTrace();
+        } catch (BOSException e) {
+            e.printStackTrace();
+        }
+        modelMap.put("beginContractDate", beginContractDate);
+        modelMap.put("endContractDate", endContractDate);
+        JSONUtils.writeJson(response, modelMap);
+    }
+
+    /**
+     * 校验月提交总工时不能大于最大工时(废弃)
+     *
+     * @param request
+     * @param response
+     * @param modelMap
+     * @return
+     * @throws SHRWebException
+     */
+    public String checkEscalationDateAction(HttpServletRequest request, HttpServletResponse response, ModelMap modelMap)
+            throws SHRWebException {
+        Context ctx = SHRContext.getInstance().getContext();
+        String personId = ContextUtil.getCurrentUserInfo(ctx).getPerson().getId().toString();
+        BigDecimal hours = new BigDecimal(request.getParameter("hours"));
+        SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
+        Calendar calendar = Calendar.getInstance();
+        int thisDay = calendar.get(Calendar.DAY_OF_MONTH);
+        calendar.set(Calendar.DAY_OF_MONTH, 1);
+        Date endDate = calendar.getTime();
+        calendar.add(Calendar.MONTH, -1);
+        Date stratDate = calendar.getTime();
+
+        try {
+            BigDecimal maxHour = BigDecimal.ZERO;
+            int day = 0;
+            String paramSql = "SELECT FNUMBER,fname_l2 name FROM T_HR_SHRRSVITEM0 where fstate = '1' and (FNUMBER = '1003' or FNUMBER = '1004')";
+            IRowSet paramRow = DbUtil.executeQuery(ctx, paramSql);
+            while (paramRow.next()) {
+                //最大工时数
+                if (paramRow.getString("FNUMBER").equals("1003")) {
+                    maxHour = paramRow.getObject("name") == null ? BigDecimal.ZERO : paramRow.getBigDecimal("name");
+                }
+                if (paramRow.getString("FNUMBER").equals("1004")) {
+                    day = paramRow.getObject("name") == null ? 0 : paramRow.getInt("name");
+                }
+            }
+            //校验XX号之后不允许提交
+            if (thisDay > day) {
+                modelMap.put("resultMessage", "It is not allowed to submit the previous month's work hours after the " + day + "th of each month");
+                JSONUtils.writeJson(response, modelMap);
+                return null;
+            }
+
+            BigDecimal totalHour = BigDecimal.ZERO;
+            String hourSql = "SELECT sum(b.cftotalworkhours) as totalHour FROM T_HR_SBatchSubmitShemeBill a left join T_HR_SchemeBillEntry b on a.fid=b.fbillid where  b.fpersonid='" + personId + "' and b.feffectdate>='" + sdf.format(stratDate) + "' and b.feffectdate<'" + sdf.format(endDate) + "' and a.FBILLSTATE in ('1','2','3')";
+            IRowSet iRowSet = DbUtil.executeQuery(ctx, hourSql);
+            while (iRowSet.next()) {
+                totalHour = iRowSet.getObject("totalHour") == null ? BigDecimal.ZERO : iRowSet.getBigDecimal("totalHour");
+            }
+            totalHour = totalHour.add(hours);
+
+            BigDecimal adjustHour = BigDecimal.ZERO;
+            //获取调整工时数
+            String adjustSql = "SELECT cfadjustinghours FROM CT_MP_Ptworkinghours where fpersonid='" + personId + "' and cfeffectivedate>='" + sdf.format(stratDate) + "' and cfeffectivedate<'" + sdf.format(endDate) + "'";
+            IRowSet adjustRow = DbUtil.executeQuery(ctx, adjustSql);
+            while (adjustRow.next()) {
+                adjustHour = adjustRow.getObject("cfadjustinghours") == null ? BigDecimal.ZERO : adjustRow.getBigDecimal("cfadjustinghours");
+            }
+            if (totalHour.compareTo(maxHour.add(adjustHour)) > 0) {
+                modelMap.put("resultMessage", "The total working hours in a month cannot exceed the maximum number of hours");
+                JSONUtils.writeJson(response, modelMap);
+            }
+
+        } catch (BOSException e) {
+            e.printStackTrace();
+        } catch (SQLException e) {
+            e.printStackTrace();
+        }
+        return null;
+    }
+
+    /**
+     * 汇总分录的工时和金额到单头
+     *
+     * @param request
+     * @param response
+     * @param modelMap
+     * @throws SHRWebException
+     */
+    public void countHourAmountAction(HttpServletRequest request, HttpServletResponse response, ModelMap modelMap) throws SHRWebException {
+        String billId = request.getParameter("billId");
+        if (StringUtils.isEmpty(billId)) {
+            return;
+        }
+        Context ctx = SHRContext.getInstance().getContext();
+        try {
+            BatchSubmitShemeBillInfo batchSubmitShemeBillInfo = BatchSubmitShemeBillFactory.getLocalInstance(ctx).getBatchSubmitShemeBillInfo(new ObjectUuidPK(billId));
+            BatchSubmitShemeBillEntryCollection entryColl = batchSubmitShemeBillInfo.getEntry();
+            BigDecimal sumHours = BigDecimal.ZERO;
+            BigDecimal sumAmount = BigDecimal.ZERO;
+            for (int i = 0; i < entryColl.size(); i++) {
+                BatchSubmitShemeBillEntryInfo entryInfo = entryColl.get(i);
+                BigDecimal hour = entryInfo.getBigDecimal("totalWorkHours") == null ? BigDecimal.ZERO : entryInfo.getBigDecimal("totalWorkHours");
+                BigDecimal amount = entryInfo.getBigDecimal("totalAmount") == null ? BigDecimal.ZERO : entryInfo.getBigDecimal("totalAmount");
+                sumHours = sumHours.add(hour);
+                sumAmount = sumAmount.add(amount);
+            }
+            batchSubmitShemeBillInfo.put("totalWorkHours", sumHours);
+            batchSubmitShemeBillInfo.put("totalAmount", sumAmount);
+            BatchSubmitShemeBillFactory.getLocalInstance(ctx).save(batchSubmitShemeBillInfo);
+        } catch (EASBizException e) {
+            e.printStackTrace();
+        } catch (BOSException e) {
+            e.printStackTrace();
+        }
+    }
+
+    /**
+     * 根据提报日期判断法定节假日和休息日
+     *
+     * @param request
+     * @param response
+     * @param modelMap
+     * @throws SHRWebException
+     */
+    public void workMultipleAction(HttpServletRequest request, HttpServletResponse response, ModelMap modelMap) throws SHRWebException {
+        Context ctx = SHRContext.getInstance().getContext();
+        String otDate = request.getParameter("otDate");
+        logger.error("提报日期:" + otDate);
+        Date parseDate = DateTimeUtils.parseDate(otDate, "yyyy-MM-dd");
+        otDate = DateTimeUtils.dateFormat(parseDate, "yyyy-MM-dd");
+        String sql = "SELECT b.CFWORKMULTIPLE FROM T_HR_ATS_LegalHoliday a left join T_HR_ATS_LegalHolidayItem b on a.fid = b.FGROUPID where a.FSTATE = '1' and b.FSTARTDATE <= '" + otDate + "' and b.FENDDATE >= '" + otDate + "'";
+        logger.error("查询加班类型SQL:" + sql);
+        Map<String, String> returnMap = new HashMap<String, String>();
+        try {
+            IRowSet iRowSet = DbUtil.executeQuery(ctx, sql);
+            boolean flag = false;
+            while (iRowSet.next()) {
+                if (StringUtils.equals(iRowSet.getString("CFWORKMULTIPLE"), "3")) {
+                    //法定节假日加班
+                    flag = true;
+                }
+            }
+            if (flag) {
+                returnMap.put("returnType", "0");
+            } else {
+                Calendar calendar = Calendar.getInstance();
+                calendar.setTime(parseDate);
+                int dayOfWeek = calendar.get(Calendar.DAY_OF_WEEK);
+                if (dayOfWeek == Calendar.SATURDAY || dayOfWeek == Calendar.SUNDAY) {
+                    //休息日加班
+                    returnMap.put("returnType", "1");
+                }
+            }
+        } catch (BOSException e) {
+            e.printStackTrace();
+        } catch (SQLException throwables) {
+            throwables.printStackTrace();
+        }
+        JSONUtils.writeJson(response, returnMap);
+    }
+
+    /**
+     * 根据人员档案获取当月是否离职或兼职失效
+     *
+     * @param request
+     * @param response
+     * @param modelMap
+     * @throws SHRWebException
+     */
+    public void checkDepartDateAction(HttpServletRequest request, HttpServletResponse response, ModelMap modelMap) throws SHRWebException {
+        Context ctx = SHRContext.getInstance().getContext();
+        String personId = ContextUtil.getCurrentUserInfo(ctx).getPerson().getId().toString();
+        String cmpOrgRelationId = request.getParameter("cmpOrgRelationId");
+        Calendar calendar = Calendar.getInstance();
+        int currentYear = calendar.get(Calendar.YEAR);
+        int currentMonth = calendar.get(Calendar.MONTH) + 1;
+        boolean flag = false;
+        String cmpSql = "select b.fassigntype,b.fpositionid from T_HR_SCmpEmpORelation a left join T_HR_EmpOrgRelation b on a.FEMPORGRELATIONID = b.fid where a.fid ='" + cmpOrgRelationId + "'";
+        logger.error("查询员工档案信息SQL:" + cmpSql);
+        try {
+            IRowSet iRowSet = DbUtil.executeQuery(ctx, cmpSql);
+            //任职类型
+            String assignType = "";
+            //职位id
+            String positionId = "";
+            while (iRowSet.next()) {
+                assignType = iRowSet.getString("fassigntype");
+                positionId = iRowSet.getString("fpositionid");
+            }
+            //主要任职时
+            if (StringUtils.equals(assignType, "1")) {
+                String resignSql = "select year(b.FBIZDATE) year,month(b.FBIZDATE) month from T_HR_ResignBizBill a left join T_HR_ResignBizBillentry b on a.fid=b.fbillid where b.FPERSONID ='" + personId + "' and a.FBILLSTATE = '3' order by b.FBIZDATE desc";
+                logger.error("查询员工离职单SQL:" + resignSql);
+                IRowSet resignRow = DbUtil.executeQuery(ctx, resignSql);
+                int resignYear = 0;
+                int resignMonth = 0;
+                while (resignRow.next()) {
+                    resignYear = resignRow.getInt("year");
+                    resignMonth = resignRow.getInt("month");
+                }
+                if (currentYear == resignYear && currentMonth == resignMonth) {
+                    flag = true;
+                }
+            } else {
+                String empSql = "select top 1 year(fleffdt) year,month(fleffdt) month from T_HR_EmpOrgRelation where fpositionid = '" + positionId + "' and fpersonid='" + personId + "' order by feffdt desc";
+                logger.error("查询员工兼职SQL:" + empSql);
+                int leffdtYear = 0;
+                int leffdtMonth = 0;
+                IRowSet empRow = DbUtil.executeQuery(ctx, empSql);
+                while (empRow.next()) {
+                    leffdtYear = empRow.getInt("year");
+                    leffdtMonth = empRow.getInt("month");
+                }
+                if (currentYear == leffdtYear && currentMonth == leffdtMonth) {
+                    flag = true;
+                }
+            }
+        } catch (BOSException e) {
+            e.printStackTrace();
+        } catch (SQLException e) {
+            e.printStackTrace();
+        }
+        modelMap.put("flag", flag);
+        JSONUtils.writeJson(response, modelMap);
+    }
+
+    /**
+     * 员工同一职位一个月内只能提交一次
+     *
+     * @param request
+     * @param response
+     * @param modelMap
+     * @throws SHRWebException
+     */
+    public void checkSubmitCountAction(HttpServletRequest request, HttpServletResponse response, ModelMap modelMap) throws SHRWebException {
+        Context ctx = SHRContext.getInstance().getContext();
+        String positionId = request.getParameter("positionId");
+        String personId = ContextUtil.getCurrentUserInfo(ctx).getPerson().getId().toString();
+
+        Calendar calendar = Calendar.getInstance();
+        calendar.set(Calendar.DAY_OF_MONTH, 1);
+        String startDate = DateTimeUtils.dateFormat(calendar.getTime(), "yyyy-MM-dd");
+        calendar.add(Calendar.MONTH, 1);
+        String endDate = DateTimeUtils.dateFormat(calendar.getTime(), "yyyy-MM-dd");
+
+        int count = 0;
+        String sql = "SELECT count(1) count FROM T_HR_SBatchSubmitShemeBill where fid in (select distinct a.fid from T_HR_SBatchSubmitShemeBill a left join T_HR_SchemeBillEntry b on a.fid=b.fbillid where a.FPROPOSERID  = '" + personId + "' and b.FPOSITIONID = '" + positionId + "' and a.fbillstate in ('1','2','3') and a.fdatasource = '1' and a.FSUBMITTIME >= '" + startDate + "' and a.FSUBMITTIME < '" + endDate + "')";
+        logger.error("查询员工该职位当月提交次数SQL:" + sql);
+        try {
+            IRowSet iRowSet = DbUtil.executeQuery(ctx, sql);
+            while (iRowSet.next()) {
+                count = iRowSet.getInt("count");
+            }
+            logger.error("员工该职位当月提交次数:" + count);
+        } catch (BOSException e) {
+            e.printStackTrace();
+        } catch (SQLException e) {
+            e.printStackTrace();
+        }
+        modelMap.put("count", count);
+        JSONUtils.writeJson(response, modelMap);
+    }
+
+    /**
+     * 判断是否参与校验
+     *
+     * @param request
+     * @param response
+     * @param modelMap
+     * @throws SHRWebException
+     */
+    public void isTakeCheckAction(HttpServletRequest request, HttpServletResponse response, ModelMap modelMap) throws SHRWebException {
+        Context ctx = SHRContext.getInstance().getContext();
+        //提报方案ID
+        String calSchemeId = request.getParameter("calSchemeId");
+        logger.error("提报方案ID:" + calSchemeId);
+        //是否参与校验
+        boolean isPlanCheck = false;
+        //当月离职处理
+        boolean isCurrentDepart = false;
+        String sql = "select cfistakecheck,CFIsCurrentDepart from T_HR_SCalSubmitScheme where fid = '" + calSchemeId + "'";
+        logger.error("查询提报方案SQL:" + sql);
+        try {
+            IRowSet iRowSet = DbUtil.executeQuery(ctx, sql);
+            while (iRowSet.next()) {
+                if (StringUtils.equals("1", iRowSet.getString("cfistakecheck"))) {
+                    isPlanCheck = true;
+                }
+                if (StringUtils.equals("1", iRowSet.getString("CFIsCurrentDepart"))) {
+                    isCurrentDepart = true;
+                }
+            }
+        } catch (BOSException e) {
+            e.printStackTrace();
+        } catch (SQLException e) {
+            e.printStackTrace();
+        }
+        modelMap.put("isPlanCheck", isPlanCheck);
+        modelMap.put("isCurrentDepart", isCurrentDepart);
+        JSONUtils.writeJson(response, modelMap);
+    }
+
+
 }