Browse Source

Merge branch 'master' of http://47.92.104.23:3000/SHR88/guangzhouyiselie

yuanzhi_kuang 1 year ago
parent
commit
b2971426e4

+ 124 - 0
GDYSL/js/shr/addon/customer/web/js/ERPManualLogList.js

@@ -0,0 +1,124 @@
+shr.defineClass("shr.compensation.ERPManualLogList", shr.framework.List, {
+
+    initalizeDOM: function () {
+        shr.compensation.ERPManualLogList.superClass.initalizeDOM.call(this);
+        var that = this;
+    },
+    /**
+     * 审批操作
+     */
+    dataToERPAction : function(){
+        var _self = this;
+       
+            var day = new Date();
+            var today = day.format("yyyy-MM");
+            //添加选择月份弹框
+            $("#taxPeriodDialog").remove();
+            var $body = $(document.body);
+            var dialog = _self.getTaxPeriodDialog();
+            var buttons = _self.getTaxPeriodButtons();
+            $body.append(dialog);
+            showDialog("#taxPeriodDialog",
+                "薪酬数据同步",//'薪酬数据同步',
+                dialog, buttons, 750, 300);
+            var taxPeriodDate_json = {};
+            taxPeriodDate_json.validate = "{required:true}";
+            taxPeriodDate_json.id = "taxPeriodDate";
+            taxPeriodDate_json.format = 'yyyy-mm';
+            taxPeriodDate_json.maxDate = today;
+
+            taxPeriodDate_json.isRemoveDay = true;
+            taxPeriodDate_json.ctrlType = 'Date';
+            $('#taxPeriodDate').shrDateTimePicker(taxPeriodDate_json);
+            $('#taxPeriodDate').shrDateTimePicker("setValue",today);
+        
+    },
+    getTaxPeriodDialog: function() {
+        var line = '选择报送月份'//'选择报送月份';
+        var msg1 = '说明:';//'说明:';
+        var msg2 = '1、	选择需要触发薪酬数据同步的月份;';//'1、	当月新增人员,或任职受雇从业信息有变更的人员需要进行人员报送;';
+        var msg3 = '';//'2、	已报送成功的人员在发起下一次人员报送任务之前,始终有效,无需每月都报送。';
+        var html = ['<div id="taxPeriodDialog" style="padding:5px;">',
+            '<div class="photoState" style="margin-left:0px;">',
+            '<table width="100%">',
+            '<tr>',
+            '<td width="20%"><h6>' + line + '</h6></td>' ,
+            '<td width="40%">',
+            '<input type="text" id="taxPeriodDate" name="taxPeriodDate" class="input-height" style=""/>',
+            '</td>',
+            '<td width="40%"></td>',
+            '</tr>',
+            '</table>',
+            '<div style="color:#428bca;width:auto;height:auto;">' +
+            '<p>'+msg1+'</p>' +
+            '<p>'+msg2+'</p>' +
+            '<p>'+msg3+'</p>',
+            '</div>',
+            '</div>',
+            '</div>'].join('');
+        return html;
+    },
+    getTaxPeriodButtons: function() {
+        var self = this;
+        var buttons = [{
+            text: '确定',//'确定',
+            click: function() {
+                var taxPeriodDate = $("#taxPeriodDate").shrDateTimePicker("getValue");
+                if (taxPeriodDate == null) {
+                    shr.showError({
+                        message: "选择报送月份不能为空"//'选择报送月份不能为空'
+                    });
+                    return;
+                }
+                taxPeriodDate=taxPeriodDate.slice(0,taxPeriodDate.length-3);
+                $("#taxPeriodDialog").dialog("close");
+                self.doReport({taxPeriodDate:taxPeriodDate});
+            }
+        }];
+        return buttons;
+    },
+    doReport: function(taxPeriodDate){
+        var _self = this;
+//		var serviceId =_self.getFieldValue("serviceID");
+        var selectedRowsData = $('#grid').jqGrid('getSelectedRowsData');
+        var temp = [];
+        for(i=0; i<selectedRowsData.length; i++){
+
+            var selectedData=selectedRowsData[i];
+            temp.push(selectedData.id);
+        }
+        var selectedIds =temp.join(",");
+
+        var param = _self.assembleFullQueryParam();
+        param.selectedIds = selectedIds;
+        param.taxPeriodDate=taxPeriodDate.taxPeriodDate;
+        //调用后台人员申报接口
+        _self.remoteCall({
+            method : "dataToERP",
+            param :param,
+            success : function(response) {
+
+                shr.showInfo({
+//					message : "已提交系统进行人员报送,需要等待几分钟,可在执行任务监控中查看运行进度;报送完成后将会推送消息告知",
+                    message : "已提交系统进行报送,需要等待几分钟,可在执行任务监控中查看运行进度;",
+                    hideAfter : 10
+                });
+                return;
+            }
+        });
+    },
+    assembleFullQueryParam : function(){
+		var _self = this;
+		var postData=$('#grid').jqGrid("getGridParam","postData");
+		$('#grid')._pingPostData(postData);		
+		totalRecords = $('#grid').jqGrid('getGridParam', 'records');		
+		var param = $.extend({}, postData);	
+		var selectedIdsP = _self.getSelectedFields().toString();
+		param.totalRecords =totalRecords;
+		param.selectedData = selectedIdsP;
+		param.page = 1;
+		param.isAll = true;
+		param.columnModel = "id";
+		return param;
+	},
+});

+ 687 - 0
GDYSL/js/shr/addon/customer/web/js/atsOverTimeBillBatchEditEx.js

@@ -0,0 +1,687 @@
+shr.defineClass("shr.customer.gtiit.AtsOverTimeBillBatchEditEx", shr.ats.AtsOverTimeBillBatchEdit, {
+
+    initalizeDOM:function(){
+        shr.customer.gtiit.AtsOverTimeBillBatchEditEx.superClass.initalizeDOM.call(this);
+        var that = this;
+        var entries_cont = waf("#entries");
+        // var colModel = entries_cont.getGridParam().colModel;
+        // for(var i=0;i<colModel.length;i++){
+        //    var model = colModel[i];
+        //     if("startTime"==model.name||"endTime"==model.name||"restStartTime"==model.name||"restEndTime"==model.name){
+        //         model.width=130;
+        //         model.widthOrg=130;
+        //     }
+        // }
+        entries_cont.jqGrid("option", {
+             
+            onChange: function (rowid, cellname, value, iRow, iCol) {
+                console.log(rowid, cellname, value, iRow, iCol, 123123);
+            },
+            beforeSaveCell: function (
+                rowid,
+                cellname,
+                value,
+                iRow,
+                iCol
+            ) {},
+            afterSaveCell: function (rowid, cellname, value, iRow, iCol) {
+                if (value["adminOrgUnit.id"]) {
+                    $("#entries").jqGrid(
+                        "setCell",
+                        rowid,
+                        "adminOrgUnit.id",
+                        value["adminOrgUnit.id"]
+                    );
+                }
+
+                that.removePreShowError(rowid);
+                if (cellname == "otDate") {
+                    var val = value;
+                    if (val.length <= 10) {
+                        val = val + " 00:00:00";
+                    }
+                    val &&
+                        $("#entries").jqGrid(
+                            "setCell",
+                            rowid,
+                            "startTime",
+                            val
+                        );
+                    val &&
+                        $("#entries").jqGrid(
+                            "setCell",
+                            rowid,
+                            "endTime",
+                            val
+                        );
+                    that.changeOverTimeType(rowid);
+                    that.calRestTimeLen(rowid);
+                    that.getOTContrlParams(rowid);
+                }
+
+                if (cellname == "otType") {
+                    that.changeOTCompens(rowid);
+                    that.countOvertimeHourAction();
+                }
+                // 添加 开始时间  结束时间   休息时长(分钟) 响应时间
+                if (
+                    cellname == "startTime" ||
+                    cellname == "endTime" ||
+                    cellname == "restTime"
+                ) {
+                    if (cellname != "restTime") {
+                        that.calRestTimeLen(rowid);
+                    }
+                    that.calculateOTtimes(rowid);
+                }
+                if (cellname == "person") {
+                    that.calRestTimeLen(rowid);
+                    that.getOTContrlParams(rowid);
+                }
+                if (cellname == "applyOTTime") {
+                    // 加班小时数  发生改变就给予提示
+                    that.changOtTimeTipInfo(rowid);
+                    that.countOvertimeHourAction();
+                }
+                if (cellname == "otCompens") {
+                    that.countOvertimeHourAction();
+                }
+                if (
+                    cellname == "restStartTime" ||
+                    cellname == "restStartTime2" ||
+                    cellname == "restEndTime" ||
+                    cellname == "restEndTime2"
+                ) {
+                    //计算休息时间,加班时间
+                    var startTime = $("#entries").jqGrid(
+                        "getCell",
+                        rowid,
+                        "startTime"
+                    );
+                    var endTime = $("#entries").jqGrid(
+                        "getCell",
+                        rowid,
+                        "endTime"
+                    );
+                    var restStartTime = $("#entries").jqGrid(
+                        "getCell",
+                        rowid,
+                        "restStartTime"
+                    );
+                    var restEndTime = $("#entries").jqGrid(
+                        "getCell",
+                        rowid,
+                        "restEndTime"
+                    );
+                    var restStartTime2 = $("#entries").jqGrid(
+                        "getCell",
+                        rowid,
+                        "restStartTime2"
+                    );
+                    var restEndTime2 = $("#entries").jqGrid(
+                        "getCell",
+                        rowid,
+                        "restEndTime2"
+                    );
+                    if (startTime == "" || endTime == "") {
+                        return;
+                    }
+                    
+                    var totalRestTime = 0;
+                    var totalRestTimeLong = 0;
+                    var restStartTimeOfDate;
+                    var restEndTimeOfDate;
+                    if(shr.getBowserInfo().browser === 'IE' || shr.getBowserInfo().browser === 'Safari'){
+                        restStartTime = restStartTime.replace(/-/g,'/');
+                        restEndTime = restEndTime.replace(/-/g,'/');
+                        restStartTime2 = restStartTime2.replace(/-/g,'/');
+                        restEndTime2 = restEndTime2.replace(/-/g,'/');
+                    }
+                    if (restStartTime != "" && restEndTime != "") {
+                        restStartTimeOfDate = new Date(restStartTime);
+                        restEndTimeOfDate = new Date(restEndTime);
+                        var times =
+                            restEndTimeOfDate.getTime() -
+                            restStartTimeOfDate.getTime();
+                        if (times < 0) {
+                            times = 0;
+                        }
+                        totalRestTimeLong += times;
+                        times = times / 1000 / 60;
+                        totalRestTime += times;
+                    }
+                    if (restStartTime2 != "" && restEndTime2 != "") {
+                        var restStartTime2OfDate = new Date(restStartTime2);
+                        var restEndTime2OfDate = new Date(restEndTime2);
+                        if (
+                            (restStartTime != "" &&
+                                restEndTime2OfDate.getTime() >
+                                    restStartTimeOfDate.getTime() &&
+                                restStartTimeOfDate.getTime() >=
+                                    restStartTime2OfDate.getTime()) ||
+                            (restEndTime != "" &&
+                                restEndTimeOfDate.getTime() <=
+                                    restEndTime2OfDate.getTime() &&
+                                restStartTime2OfDate.getTime() <
+                                    restEndTimeOfDate.getTime()) ||
+                            (restStartTime != "" &&
+                                restEndTime != "" &&
+                                restEndTimeOfDate.getTime() >=
+                                    restEndTime2OfDate.getTime() &&
+                                restStartTime2OfDate.getTime() >=
+                                    restStartTimeOfDate.getTime())
+                        ) {
+                            //时间有交叉
+                            $("#entries").jqGrid(
+                                "setCell",
+                                rowid,
+                                "restEndTime2",
+                                restStartTime2
+                            );
+                        } else {
+                            var times =
+                                restEndTime2OfDate.getTime() -
+                                restStartTime2OfDate.getTime();
+                            if (times < 0) {
+                                times = 0;
+                            }
+                            totalRestTimeLong += times;
+                            times = times / 1000 / 60;
+                            totalRestTime += times;
+                        }
+                    }
+                    var t1 = totalRestTime.toFixed(
+                        atsMlUtile.getSysDecimalPlace()
+                    );
+                    $("#entries").jqGrid("setCell", rowid, "restTime", t1);
+                    var startTime = NewDate(startTime + ":00");
+                    var endTime = NewDate(endTime + ":00");
+                    var se =
+                        endTime.getTime() -
+                        startTime.getTime() -
+                        totalRestTimeLong; // 毫秒
+                    var tfl = se / (3600 * 1000);
+                    $("#entries").jqGrid(
+                        "setCell",
+                        rowid,
+                        "applyOTTime",
+                        tfl
+                    );
+                    that.getOTContrlParams(rowid);
+                    that.countOvertimeHourAction();
+                }
+            },
+            afterEditCell: function (rowid, cellname, value, iRow, iCol) {
+                if (
+                    cellname == "otType" &&
+                    that.OTContrlParams[rowid] &&
+                    that.OTContrlParams[rowid].isOtrolByDateType
+                ) {
+                    $("#" + iRow + "_otType").shrPromptBox("disable");
+                }
+                if (cellname == "otCompens") {
+                    if (that.filter[rowid] == undefined) {
+                        // R20221006-0542 修复选择加班费后 再点击“补偿方式”F7就变成了调休的问题
+                        // that.changeOTCompens(rowid);
+                    }
+                    if (that.filter[rowid]) {
+                        //                      $("#"+rowid+"_otCompens").shrPromptBox("setFilter",that.filter[rowid]);
+                        $(
+                            "#" +
+                                $("#entries").jqGrid(
+                                    "getCell",
+                                    rowid,
+                                    "rn"
+                                ) +
+                                "_otCompens"
+                        ).shrPromptBox("setFilter", that.filter[rowid]);
+                    }
+                }
+                if (cellname == "person") {
+                    var hrOrgUnitId = $("#hrOrgUnit_el").val();
+                    $("#" + rowid + "_person")
+                        .shrPromptBox()
+                        .attr("data-params", hrOrgUnitId);
+                    $("#" + iRow + "_person").shrPromptBox("option", {
+                        onchange: function (e, value) {
+                            $("#entries").jqGrid(
+                                "setCell",
+                                rowid,
+                                "person.number",
+                                value.current
+                                    ? value.current["person.number"]
+                                    : ""
+                            );
+                        }
+                    });
+
+                }
+                if(cellname == "attAdminOrgUnit"){
+                    var personId = $("#entries").jqGrid("getCell", rowid, "person").id;
+                    var attendanceDate = $("#entries").jqGrid("getCell", rowid, "otDate");
+
+                    if(!(personId && attendanceDate)){
+                        shr.showInfo({message: jsBizMultLan.atsManager_atsOverTimeBillEdit_YM_999});
+                        return false;
+                    }else{
+                        //$("#"+rowid+"_attPosition").shrPromptBox().attr("data-params", adminOrg);
+                        $("#"+iRow+"_attAdminOrgUnit").shrPromptBox("setOtherParams", {
+                            personId: personId,
+                            attendanceDate: attendanceDate
+                        });
+                    }
+
+
+                }
+
+
+            }
+        });
+         $("#entries").setGridParam({colModel:colModel});
+    },
+    calculateOTtimes: function (rowid) {
+        var startTime = $("#entries").jqGrid("getCell", rowid, "startTime");
+        var endTime = $("#entries").jqGrid("getCell", rowid, "endTime");
+        var restTime = $("#entries").jqGrid("getCell", rowid, "restTime");
+
+        if (startTime == "[object Object]") {
+            $("#" + rowid)
+                .find("td")
+                .eq("5")
+                .text("");
+            $("#" + rowid)
+                .find("td")
+                .eq("5")
+                .attr("title", "");
+        }
+        if (endTime == "[object Object]") {
+            $("#" + rowid)
+                .find("td")
+                .eq("6")
+                .text("");
+            $("#" + rowid)
+                .find("td")
+                .eq("6")
+                .attr("title", "");
+        }
+
+        if (startTime != "" && endTime != "") {
+            var restVal = 0;
+            if (restTime != "" && /^[0-9]*$/.test(restTime)) {
+                restVal = restTime; // 分钟数
+            }
+            var startTime = NewDate(startTime + ":00");
+            var endTime = NewDate(endTime + ":00");
+            var se =
+                endTime.getTime() -
+                startTime.getTime() -
+                restVal * 1000 * 60; // 毫秒
+            var tfl = se / (3600 * 1000);
+            $("#entries").jqGrid(
+                "setCell",
+                rowid,
+                "applyOTTime",
+                tfl.toFixed(fixedNum)
+            );
+            this.countOvertimeHourAction();
+        }
+    },
+    getOverTimeType: function (rowid, otDate, personId) {
+        var _self = this;
+        var tDate = otDate;
+        var url =
+            shr.getContextPath() +
+            "/dynamic.do?method=getOverTimeTypeAndOtCompens";
+        url +=
+            "&otDate=" +
+            encodeURIComponent(otDate) +
+            "&personId=" +
+            encodeURIComponent(personId)+"&uipk="+shr.getUrlRequestParam('uipk');
+        $.ajax({
+            url: url,
+            async: false,
+            success: function (response) {
+                if (
+                    response.otTypeValue != null &&
+                    response.otTypeValue != undefined &&
+                    response.otTypeValue != ""
+                ) {
+                    var responseObejct = {
+                        id: response.otTypeValue,
+                        name: response.otTypeText
+                    };
+                    if (_self.isOtTypeEffective(response.otTypeValue)) {
+                        // $('#entries').restoreCell(rowid,4); // 先恢复单元格状态再重新赋值,可以避免
+                        $("#entries").jqGrid(
+                            "setCell",
+                            rowid,
+                            "otType",
+                            responseObejct
+                        );
+                        //设置该加班类型的补偿方式过滤
+                        var otCompensIds = _self.getOTCompensByOTType(
+                            personId,
+                            response.otTypeValue,
+                            tDate
+                        );
+                        if (otCompensIds) {
+                            var otCompensIdsStr = _self
+                                .getOTCompensByOTType(
+                                    personId,
+                                    response.otTypeValue,
+                                    tDate
+                                )
+                                .replace(/(,)/g, "','");
+                            _self.filter[rowid] =
+                                "BaseInfo.id in ('" +
+                                otCompensIdsStr +
+                                "')";
+                        }
+
+                        var compens = response.compensInfo;
+                        if (compens != null) {
+                            var defaultJson = {
+                                id: compens.id,
+                                name: compens.name
+                            };
+                            $("#entries").jqGrid(
+                                "setCell",
+                                rowid,
+                                "otCompens",
+                                defaultJson
+                            );
+                        }
+                    } else {
+                        $("#entries").jqGrid(
+                            "setCell",
+                            rowid,
+                            "otType",
+                            null
+                        );
+                    }
+                }else{
+                    $("#entries").jqGrid('setCell',rowid,"otType",null);
+                }
+            },
+            error: function (response) {}
+        });
+        _self.changeWorkType(rowid);
+        _self.countOvertimeHourAction();
+    },
+    changeOTCompens: function (rowid) {
+        var that = this;
+        var otCompensId;
+        if (!$("#entries").jqGrid("getCell", rowid, "otType")) {
+            return;
+        } else {
+            otTypeId = $("#entries").jqGrid("getCell", rowid, "otType").id;
+        }
+
+        if (!$("#entries").jqGrid("getCell", rowid, "person")) {
+            return;
+        } else {
+            var personId = $("#entries").jqGrid("getCell", rowid, "person").id;
+        }
+
+        if (!$("#entries").jqGrid("getCell", rowid, "otDate")) {
+            return;
+        } else {
+            var otDate = $("#entries").jqGrid("getCell", rowid, "otDate");
+        }
+        var otCompensIds = that.getOTCompensByOTTypes(personId, otTypeId);
+        var url =
+            shr.getContextPath() +
+            "/dynamic.do";
+        that.remoteCall({
+            type: "post",
+            method: "getDefaultOTCompens",
+            url: url,
+            param: {
+                personId: personId,
+                otTypeId: otTypeId,
+                otDate: otDate
+            },
+            async: false,
+            success: function (res) {
+                var info = res;
+                if (info.defaultId == "" || info.defaultId == undefined) {
+                    shr.showWarning({
+                        message:
+                            jsBizMultLan.atsManager_atsOverTimeBillBatchEdit_i18n_28
+                    });
+                } else {
+                    var defaultOTCompens = {
+                        id: info.defaultId,
+                        name: info.defaultName
+                    };
+                    $("#entries").jqGrid(
+                        "setCell",
+                        rowid,
+                        "otCompens",
+                        defaultOTCompens
+                    );
+                    if (otCompensIds) {
+                        var otCompensIdsStr = otCompensIds.replace(
+                            /(,)/g,
+                            "','"
+                        );
+                        that.filter[rowid] =
+                            "BaseInfo.id in ('" + otCompensIdsStr + "')";
+                    }
+                }
+            }
+        });
+        that.countOvertimeHourAction();
+    },
+    verify: function () {
+        var _self = this;
+        var obj = $("#entries").jqGrid("getRowData");
+        var errorString = "";
+        var errorFlag = 0;
+        var billerrorString = "";
+        if (obj.length == 0) {
+            shr.showWarning({
+                message:
+                    jsBizMultLan.atsManager_atsOverTimeBillBatchEdit_i18n_7
+            });
+            return false;
+        }
+        if (!_self.checkRowIsOver()) {
+            //          closeLoader();
+            return false;
+        }
+
+        _rowMap = {};
+
+        openLoader(
+            1,
+            jsBizMultLan.atsManager_atsOverTimeBillBatchEdit_i18n_29
+        );
+
+        jQuery(obj).each(function (n) {
+            errorString = _self.checkEveryRow(n + 1, this);
+
+            if (errorString) {
+                _self.preShowError(
+                    n + 1,
+                    this.person.name + " " + errorString
+                );
+                billerrorString =
+                    billerrorString +
+                    shr.formatMsg(
+                        jsBizMultLan.atsManager_atsOverTimeBillBatchEdit_i18n_44,
+                        [n + 1]
+                    ) +
+                    errorString;
+
+                errorFlag = 1;
+            }
+        });
+        if (errorString && errorString != "") {
+            var showMes = "";
+            showMes += billerrorString.replace(/。/g, "。</br>");
+            shr.showWarning({ message: showMes });
+            closeLoader();
+            return false;
+        }
+
+        errorString = _self.validateOTEntry();
+        if (errorString && errorString != "") {
+            shr.showWarning({ message: errorString });
+            closeLoader();
+            return false;
+        }
+
+        var hasOtType = _self.checkOtType();
+        if (!hasOtType) {
+            return false;
+        }
+
+        if (errorFlag == 0) {
+            //工作流审批界面,加班补提控制。
+            var boo = true;
+            boo = _self.validateIsFillOtVerify();
+            closeLoader();
+            // if(!_self.checkOtDate()){
+            //     return false;
+            // }
+            return boo;
+        } else {
+            closeLoader();
+            return false;
+        }
+    },
+    changeWorkType: function (rowid) {
+        var that = this;
+        var otDate;
+        if (!$("#entries").jqGrid("getCell", rowid, "otDate")) {
+            return;
+        } else {
+            otDate = $("#entries").jqGrid("getCell", rowid, "otDate");
+        }
+
+        _self.remoteCall({
+            type:"post",
+            async: false,
+            method:"workMultiple",
+            param:{otDate:otDate},
+            success:function(res){
+                if(res.otTypeValue){
+                    var responseObejct = {id: res.otTypeValue,name: res.otTypeText};
+                    $("#entries").jqGrid("setCell",rowid,"otType",responseObejct);
+                }
+            }
+        });
+
+        var otType = $("#entries").jqGrid("getCell",rowid,"otType");
+        if(!otType){
+            _self.remoteCall({
+                type:"post",
+                async: false,
+                method:"jobType",
+                param:{otDate:otDate},
+                success:function(res){
+                    if(res.otTypeValue){
+                        var responseObejct = {id: res.otTypeValue,name: res.otTypeText};
+                        $("#entries").jqGrid("setCell",rowid,"otType",responseObejct);
+                    }
+                }
+            });
+        }
+    },
+
+    /**
+     * 删除行
+     */
+    deleteRowAction: function(event) {
+        var $editGrid = this.getEditGrid(event.currentTarget);
+        var ids = $editGrid.jqGrid('getSelectedRows');
+        if (ids.length > 0) {
+            for (var i = ids.length - 1; i >= 0; i--) {
+                $editGrid.jqGrid('delRow', ids[i]);
+            }
+            this.countOvertimeHourAction();
+        }else{
+            shr.showInfo({
+                message: $.shrI18n.common.tips.chooseTableDataFirst,
+                hideAfter: 3
+            });
+        }
+    },
+
+    countOvertimeHourAction:function(){
+        var allRowData = $("#entries").jqGrid("getAllRowData");
+        var length = allRowData.length;
+        var weekdayHour = 0;//工作日加班小时数
+        var restdayHour = 0;//休息日加班小时数
+        var holidayHour = 0;//法定节假日加班小时数
+        var totalDuration = 0;//加班总时长
+        var compensatoryTotal = 0;//调休加班总时长
+        var totalOvertimePay = 0;//加班费加班总时长
+        for(var i=0; i<length; i++){
+            var otType = allRowData[i].otType.id;
+            var applyOTTime = allRowData[i].applyOTTime;
+            var otCompens = allRowData[i].otCompens.id;
+            if(applyOTTime == ""){
+                continue;
+            }
+            if(otType == "rBy0u1YgQ9C1OxcM85mxyY6C/nU="){
+                weekdayHour = Number(weekdayHour)+Number(applyOTTime);
+            }else if(otType == "zr+ur5D4RA+2bdVZ2VPqp46C/nU="){
+                restdayHour = Number(restdayHour)+Number(applyOTTime);
+            }else if(otType == "sRWUOt7sRpOY0TCo6NMqGY6C/nU="){
+                holidayHour = Number(holidayHour)+Number(applyOTTime);
+            }
+            if(otCompens == "AERg0TIcSnaM40EKvJCdRKlrTmA="){
+                compensatoryTotal = Number(compensatoryTotal)+Number(applyOTTime);
+            }else if(otCompens == "zkbt5bMLQ3ehUivmKbtBOqlrTmA="){
+                totalOvertimePay = Number(totalOvertimePay)+Number(applyOTTime);
+            }
+        }
+        totalDuration = Number(weekdayHour)+Number(restdayHour)+Number(holidayHour);
+        // $("#weekdayHour").val(weekdayHour);
+        // $("#restdayHour").val(restdayHour);
+        // $("#holidayHour").val(holidayHour);
+        // $("#totalDuration").val(totalDuration);
+        // $("#compensatoryTotal").val(compensatoryTotal);
+        // $("#totalOvertimePay").val(totalOvertimePay);
+
+        this.getField("weekdayHour").shrNumberField("setValue",weekdayHour);
+        this.getField("restdayHour").shrNumberField("setValue",restdayHour);
+        this.getField("holidayHour").shrNumberField("setValue",holidayHour);
+        this.getField("totalDuration").shrNumberField("setValue",totalDuration);
+        this.getField("compensatoryTotal").shrNumberField("setValue",compensatoryTotal);
+        this.getField("totalOvertimePay").shrNumberField("setValue",totalOvertimePay);
+    },
+    checkOtDate:function(){
+        var allRowData = $("#entries").jqGrid("getAllRowData");
+        for(var i=0; i<allRowData.length; i++){
+            var otDate = allRowData[i].otDate;
+            otDate  = new Date(otDate);
+            const currentDate = new Date();
+            const lastMonthDate = new Date(currentDate.getFullYear(), currentDate.getMonth() - 1, currentDate.getDate());
+            var lastYear = lastMonthDate.getFullYear();
+            var lastMonth = lastMonthDate.getMonth();
+
+            if(otDate.getMonth() != lastMonth || otDate.getFullYear() != lastYear){
+                shr.showWarning({message: "Only overtime records with the previous month's overtime date can be submitted for the current month"});
+                return false;
+            }
+        }
+        return true;
+    }
+
+
+});
+waf.defineCustomeClass("cellformatter.shrTextArea", cellformatter.defaultFormatter, {
+    unformat: function (cell, rowId) {
+        return $.trim($(cell).text());
+    },
+    format: function (cellval, rwd) {
+        if (!$.type.isEmpty(cellval)) {
+            return "<pre class='required' style='color:rgb(153, 153, 153)'>" + cellval + "</pre>";
+        } else {
+            return cellformatter.defaultFormatter.prototype.format.call(this, cellval, rwd);
+        }
+    }, 
+});

+ 459 - 0
GDYSL/js/shr/addon/customer/web/js/atsOverTimeBillBatchEditForPerEx.js

@@ -0,0 +1,459 @@
+shr.defineClass("shr.customer.gtiit.AtsOverTimeBillBatchEditForPerEx", shr.ats.atsOverTimeBillBatchEditForPer, {
+
+    initalizeDOM:function(){
+        shr.customer.gtiit.AtsOverTimeBillBatchEditForPerEx.superClass.initalizeDOM.call(this);
+        var that = this;
+        if(jsBinder.operateState == 'VIEW'){
+            $('[aria-describedby="entries_todescription"]').css({'white-space':'break-spaces'});
+        }
+        var entries_cont=waf("#entries");
+        entries_cont.jqGrid("option", { 
+              beforeSaveCell:function (rowid, cellname, value, iRow, iCol) {
+              }
+              ,afterSaveCell:function (rowid, cellname, value, iRow, iCol) {
+
+                  if(value["adminOrgUnit.id"]){
+                        $("#entries").jqGrid('setCell',rowid,"adminOrgUnit.id",value["adminOrgUnit.id"]);
+                     }
+                _self.afterSaveCellTrigger(rowid, cellname, value, iRow, iCol);              
+                    
+              }
+              ,afterEditCell:function (rowid, cellname, value, iRow, iCol) 
+              {
+                that.getOTContrlParams(rowid);
+                if(cellname=="otType" && that.OTContrlParams[rowid].isOtrolByDateType){
+                    $("#"+iRow+"_otType").shrPromptBox("disable");
+                }
+                //因为需求只是提了第一个时间时改变业务组织
+                $("#1_otDate").change(function(){
+                 that.changeOverHrOrgUnit();
+                });
+                if(cellname=="otCompens"){
+                    
+                    if(that.filter[rowid]==undefined){
+                        // // R20221006-0542 修复选择加班费后 再点击“补偿方式”F7就变成了调休的问题
+                        // that.changeOTCompens(rowid);
+                    }
+                    if(that.filter[rowid]){
+//                      $("#"+rowid+"_otCompens").shrPromptBox("setFilter",that.filter[rowid]);
+                        $("#"+$("#entries").jqGrid('getCell',rowid,"rn")+"_otCompens").shrPromptBox("setFilter",that.filter[rowid]);
+                    }
+                }
+                  if(cellname == "attAdminOrgUnit"){
+                      var personId = $("#entries").jqGrid("getCell", rowid, "person").id;
+                      var attendanceDate = $("#entries").jqGrid("getCell", rowid, "otDate");
+
+                      if(!(personId && attendanceDate)){
+                          shr.showInfo({message: jsBizMultLan.atsManager_atsOverTimeBillEdit_YM_999});
+                          return false;
+                      }else{
+                          //$("#"+rowid+"_attPosition").shrPromptBox().attr("data-params", adminOrg);
+                          $("#"+iRow+"_attAdminOrgUnit").shrPromptBox("setOtherParams", {
+                              personId: personId,
+                              attendanceDate: attendanceDate
+                          });
+                      }
+
+
+                  }
+
+                _self.saveEditCellValue(rowid,cellname, value,iRow,iCol) ;
+              }
+        });
+    },
+    afterSaveCellTrigger: function(rowid, cellname, value, iRow, iCol)
+    {   
+        var that = this ;
+        var entries_cont=waf("#entries");
+        that.removePreShowError(rowid);
+        if(cellname=="otDate"){
+
+            var val = value;
+            if (val.length <= 10) {
+                val = val + " 00:00:00";
+            }
+
+            val && $("#entries").jqGrid('setCell',rowid,"startTime",val);
+            val && $("#entries").jqGrid('setCell',rowid,"endTime",val);
+            that.changeOverTimeType(rowid);
+            that.calRestTimeLen(rowid);
+        }
+        
+        if(cellname=="otType"){
+            that.changeOTCompens(rowid);
+            that.countOvertimeHourAction();
+        }
+        // 添加 开始时间  结束时间   休息时长(分钟) 响应时间 
+        if(cellname=="startTime" || cellname=="endTime" || cellname=="restTime"){
+            if(cellname!="restTime"){
+                that.calRestTimeLen(rowid);
+            }
+            that.calculateOTtimes(rowid);
+        }
+        if(cellname=="person"){
+            
+            that.calRestTimeLen(rowid);
+        }
+        if(cellname=="applyOTTime"){ // 加班小时数  发生改变就给予提示
+            that.changOtTimeTipInfo(rowid);
+            that.countOvertimeHourAction();
+        }
+        if (cellname == "otCompens") {
+            that.countOvertimeHourAction();
+        }
+        if (cellname=="restStartTime" || cellname=="restStartTime2" || cellname=="restEndTime" ||cellname=="restEndTime2"){
+            //计算休息时间,加班时间
+            var startTime = $("#entries").jqGrid('getCell',rowid,"startTime") ;
+            var endTime = $("#entries").jqGrid('getCell',rowid,"endTime") ;
+            var restStartTime = $("#entries").jqGrid('getCell',rowid,"restStartTime") ;
+            var restEndTime = $("#entries").jqGrid('getCell',rowid,"restEndTime") ;
+            var restStartTime2 = $("#entries").jqGrid('getCell',rowid,"restStartTime2") ;
+            var restEndTime2 = $("#entries").jqGrid('getCell',rowid,"restEndTime2") ;
+            if (startTime=="" || endTime==""){
+                return
+            }
+            var totalRestTime=0;
+            var restStartTimeOfDate;
+            var restEndTimeOfDate;
+            if (restStartTime!="" && restEndTime!=""){
+                restStartTimeOfDate = new Date(restStartTime);
+                restEndTimeOfDate = new Date(restEndTime);
+                var times =restEndTimeOfDate.getTime()-restStartTimeOfDate.getTime();
+                if (times<0){
+                    times=0;
+                }
+                times=times/1000/60;
+                totalRestTime+=times;
+            }
+            if (restStartTime2!="" && restEndTime2!=""){
+                var restStartTime2OfDate = new Date(restStartTime2);
+                var restEndTime2OfDate = new Date(restEndTime2);
+                if ((restStartTime!="" && restEndTime2OfDate.getTime()>restStartTimeOfDate.getTime() && restStartTimeOfDate.getTime()>=restStartTime2OfDate.getTime())
+                    ||(restEndTime!="" && restEndTimeOfDate.getTime()<=restEndTime2OfDate.getTime() && restStartTime2OfDate.getTime()<restEndTimeOfDate.getTime())
+                    ||(restStartTime!="" && restEndTime!="" && restEndTimeOfDate.getTime()>=restEndTime2OfDate.getTime() && restStartTime2OfDate.getTime()>=restStartTimeOfDate.getTime())
+                ){
+                    //时间有交叉
+                    $("#entries").jqGrid('setCell',rowid,"restEndTime2",restStartTime2) ;
+                } else {
+                    var times =restEndTime2OfDate.getTime()-restStartTime2OfDate.getTime();
+                    if (times<0){
+                        times=0;
+                    }
+                    times=times/1000/60;
+                    totalRestTime+=times;
+                }
+            }
+            var  t1 = totalRestTime.toFixed(atsMlUtile.getSysDecimalPlace());
+            $("#entries").jqGrid('setCell',rowid,"restTime",t1) ;
+            var startTime =new Date(startTime+":00");
+            var endTime =new Date(endTime+":00");
+            var se = endTime.getTime()-startTime.getTime() -totalRestTime; // 毫秒
+            var tfl = se/(3600*1000) ;
+            $("#entries").jqGrid('setCell',rowid,"applyOTTime",tfl) ;
+            that.calculateOTtimes(rowid);
+            that.getOTContrlParams(rowid);
+            that.countOvertimeHourAction();
+        }
+    },
+    calculateOTtimes : function(rowid){
+        var that = this ;
+        var startTime = $("#entries").jqGrid('getCell',rowid,"startTime") ;
+        var endTime = $("#entries").jqGrid('getCell',rowid,"endTime") ;
+        var restTime = $("#entries").jqGrid('getCell',rowid,"restTime") ;
+         
+        if(startTime =="[object Object]"){
+            $("#"+rowid).find('td').eq('5').text("");
+            $("#"+rowid).find('td').eq('5').attr("title","");
+        }
+        if(endTime =="[object Object]"){
+            $("#"+rowid).find('td').eq('6').text("");
+            $("#"+rowid).find('td').eq('6').attr("title","");
+        }
+
+        startTime = that.addTimeToDate(startTime);
+        endTime = that.addTimeToDate(endTime);
+        
+        if(startTime!="" && endTime!=""){
+            var restVal = 0;
+            if(restTime!="" && (/^[0-9]*$/.test(restTime))){
+                restVal = restTime; // 分钟数 
+            }
+            var startTime = NewDate(startTime+":00");
+            var endTime = NewDate(endTime+":00");
+            var se = endTime.getTime()-startTime.getTime() - (restVal * 1000 * 60); // 毫秒
+            var tfl = (se/(3600*1000)).toFixed(fixedNum) ;
+            $("#entries").jqGrid('setCell',rowid,"applyOTTime",tfl);
+            this.countOvertimeHourAction();
+        }
+    },
+    getOverTimeType:function(rowid,otDate,personId){
+        var _self = this;
+        var url = shr.getContextPath() + "/dynamic.do?method=getOverTimeTypeAndOtCompens";
+        url += '&otDate=' + encodeURIComponent(otDate) + '&personId=' + encodeURIComponent(personId)+"&uipk="+shr.getUrlRequestParam('uipk');
+        $.ajax({
+            url: url, 
+            async:false, 
+            success: function(response){
+                if(response.otTypeValue!=null && response.otTypeValue !=undefined && response.otTypeValue!=''){
+                    var responseObejct = {id:response.otTypeValue,name:response.otTypeText }
+                    if (_self.isOtTypeEffective(response.otTypeValue)){
+                        // $('#entries').restoreCell(rowid,4); // 先恢复单元格状态再重新赋值,可以避免
+                        $("#entries").jqGrid('setCell',rowid,"otType",responseObejct);
+                        
+                        //设置该加班类型的补偿方式过滤
+                        var otCompensIds =  _self.getOTCompensByOTType(personId,response.otTypeValue);
+                        if(otCompensIds){
+                            var otCompensIdsStr = _self.getOTCompensByOTType(personId,response.otTypeValue).replace(/(,)/g, "','");
+                            _self.filter[rowid]="BaseInfo.id in ('"+otCompensIdsStr+"')";
+                        }
+                        
+                        var compens = response.compensInfo ;
+                        var defaultJson = {id:compens.id , name:compens.name} ;
+                        $("#entries").jqGrid('setCell',rowid,"otCompens",defaultJson);
+                    }
+                    else {
+                        $("#entries").jqGrid('setCell',rowid,"otType",null);
+                    }
+                }else{
+                    $("#entries").jqGrid('setCell',rowid,"otType",null);
+                }
+            }  
+            ,error: function(response) {
+            }
+        });
+        _self.changeWorkType(rowid);
+        _self.countOvertimeHourAction();
+    },
+    changeOTCompens:function(rowid){
+        var that=this;
+        var otCompensId ;
+        if(!$("#entries").jqGrid('getCell',rowid,"otType")){
+            return;
+        }else{
+            otTypeId = $("#entries").jqGrid('getCell',rowid,"otType").id;
+        }
+        
+        if(!$("#entries").jqGrid('getCell',rowid,"person")){
+            return;
+        }else{
+            var personId = $("#entries").jqGrid('getCell',rowid,"person").id;
+        }
+        var otCompensIds = that.getOTCompensByOTType(personId,otTypeId);
+
+        var url = shr.getContextPath()+'/dynamic.do';
+        that.remoteCall({
+            type:"post",
+            method:"getDefaultOTCompens",
+            url:url,
+            param:{personId:personId,otTypeId:otTypeId},
+            async: false,
+            success:function(res){
+                var info =  res;
+                if (info.defaultId == "" || info.defaultId ==undefined ){
+                    shr.showWarning({message:jsBizMultLan.atsManager_atsOverTimeBillBatchEditForPer_i18n_24});
+                }else {
+                    var defaultOTCompens = {id:info.defaultId,name:info.defaultName};   
+                    $("#entries").jqGrid('setCell',rowid,"otCompens",defaultOTCompens);
+                    if(otCompensIds){
+                        var otCompensIdsStr = otCompensIds.replace(/(,)/g, "','")
+                        that.filter[rowid]="BaseInfo.id in ('"+otCompensIdsStr+"')";
+                    }
+                    
+                }           
+            }
+        });
+        that.countOvertimeHourAction();
+    },
+    verify:function(){
+        var _self = this ;
+        var obj = $("#entries").jqGrid("getRowData");
+        var errorString = "";
+        var errorFlag = 0 ;
+        if(obj.length == 0){
+            shr.showWarning({message: jsBizMultLan.atsManager_atsOverTimeBillBatchEditForPer_i18n_7});
+            return false;
+        }
+        
+        if(!_self.checkRowIsOver()){
+            return false;
+        }
+        
+        _rowMap = {} ;
+        jQuery(obj).each(function(n){
+                errorString = _self.checkEveryRow(n + 1 , this);
+                if(errorString){
+                    _self.preShowError( n + 1 ,this.person.name + " " + errorString);
+                    errorFlag = 1 ;
+                }
+            
+         });    
+         if(!_self.verifyCheck()){
+            return false;
+         }
+
+        errorString = _self.validateOTEntry();
+        if(errorString && errorString != ""){
+            shr.showWarning({message: errorString});
+            closeLoader();
+            return false;
+        }
+         if(errorFlag == 0){
+             //工作流审批界面,加班补提控制。
+            var boo = true;
+            boo = _self.validateIsFillOtVerify();
+            
+            return boo;
+         }else{
+            return false;
+         }
+    },
+    changeWorkType: function (rowid) {
+        var that = this;
+        var otDate;
+        if (!$("#entries").jqGrid("getCell", rowid, "otDate")) {
+            return;
+        } else {
+            otDate = $("#entries").jqGrid("getCell", rowid, "otDate");
+        }
+
+        _self.remoteCall({
+            type:"post",
+            async: false,
+            method:"workMultiple",
+            param:{otDate:otDate},
+            success:function(res){
+                if(res.otTypeValue){
+                    var responseObejct = {id: res.otTypeValue,name: res.otTypeText};
+                    $("#entries").jqGrid("setCell",rowid,"otType",responseObejct);
+                }
+            }
+        });
+
+        var otType = $("#entries").jqGrid("getCell",rowid,"otType");
+        if(!otType){
+            _self.remoteCall({
+                type:"post",
+                async: false,
+                method:"jobType",
+                param:{otDate:otDate},
+                success:function(res){
+                    if(res.otTypeValue){
+                        var responseObejct = {id: res.otTypeValue,name: res.otTypeText};
+                        $("#entries").jqGrid("setCell",rowid,"otType",responseObejct);
+                    }
+                }
+            });
+        }
+    },
+
+    /**
+     * 删除行
+     */
+    deleteRowAction: function(event) {
+        var $editGrid = this.getEditGrid(event.currentTarget);
+        var ids = $editGrid.jqGrid('getSelectedRows');
+        if (ids.length > 0) {
+            for (var i = ids.length - 1; i >= 0; i--) {
+                $editGrid.jqGrid('delRow', ids[i]);
+            }
+            this.countOvertimeHourAction();
+        }else{
+            shr.showInfo({
+                message: $.shrI18n.common.tips.chooseTableDataFirst,
+                hideAfter: 3
+            });
+        }  
+    },
+
+    countOvertimeHourAction:function(){
+        var allRowData = $("#entries").jqGrid("getAllRowData");
+        var length = allRowData.length;
+        var weekdayHour = 0;//工作日加班小时数
+        var restdayHour = 0;//休息日加班小时数
+        var holidayHour = 0;//法定节假日加班小时数
+        var totalDuration = 0;//加班总时长
+        var compensatoryTotal = 0;//调休加班总时长
+        var totalOvertimePay = 0;//加班费加班总时长
+        for(var i=0; i<length; i++){
+            var otType = allRowData[i].otType.id;
+            var applyOTTime = allRowData[i].applyOTTime;
+            var otCompens = allRowData[i].otCompens.id;
+            if(applyOTTime == ""){
+                continue;
+            }
+            if(otType == "rBy0u1YgQ9C1OxcM85mxyY6C/nU="){
+                weekdayHour = Number(weekdayHour)+Number(applyOTTime);
+            }else if(otType == "zr+ur5D4RA+2bdVZ2VPqp46C/nU="){
+                restdayHour = Number(restdayHour)+Number(applyOTTime);
+            }else if(otType == "sRWUOt7sRpOY0TCo6NMqGY6C/nU="){
+                holidayHour = Number(holidayHour)+Number(applyOTTime);
+            }
+            if(otCompens == "AERg0TIcSnaM40EKvJCdRKlrTmA="){
+                compensatoryTotal = Number(compensatoryTotal)+Number(applyOTTime);
+            }else if(otCompens == "zkbt5bMLQ3ehUivmKbtBOqlrTmA="){
+                totalOvertimePay = Number(totalOvertimePay)+Number(applyOTTime);
+            }
+        }
+        totalDuration = Number(weekdayHour)+Number(restdayHour)+Number(holidayHour);
+        // $("#weekdayHour").val(weekdayHour);
+        // $("#restdayHour").val(restdayHour);
+        // $("#holidayHour").val(holidayHour);
+        // $("#totalDuration").val(totalDuration);
+        // $("#compensatoryTotal").val(compensatoryTotal);
+        // $("#totalOvertimePay").val(totalOvertimePay);
+
+        this.getField("weekdayHour").shrNumberField("setValue",weekdayHour);
+        this.getField("restdayHour").shrNumberField("setValue",restdayHour);
+        this.getField("holidayHour").shrNumberField("setValue",holidayHour);
+        this.getField("totalDuration").shrNumberField("setValue",totalDuration);
+        this.getField("compensatoryTotal").shrNumberField("setValue",compensatoryTotal);
+        this.getField("totalOvertimePay").shrNumberField("setValue",totalOvertimePay);
+    },
+    submitAction: function(event) {
+        var _self = this,
+            workArea = _self.getWorkarea(),
+            $form = $('form', workArea);
+        if(!_self.validate()){
+            return ;
+        }
+        if(!_self.checkOtDate()){
+            return false;
+        }
+            
+        if ($form.valid() && _self.verify()) {
+            shr.showConfirm(jsBizMultLan.atsManager_atsOverTimeBillBatchEditForPer_i18n_14, function() {
+                _self.doSubmit(event, 'submit');
+            });
+        }       
+    },
+    checkOtDate:function(){
+        var allRowData = $("#entries").jqGrid("getAllRowData");
+        for(var i=0; i<allRowData.length; i++){
+            var otDate = allRowData[i].otDate;
+            otDate  = new Date(otDate);
+            const currentDate = new Date();
+            const lastMonthDate = new Date(currentDate.getFullYear(), currentDate.getMonth() - 1, currentDate.getDate());
+            var lastYear = lastMonthDate.getFullYear();
+            var lastMonth = lastMonthDate.getMonth();
+
+            if(otDate.getMonth() != lastMonth || otDate.getFullYear() != lastYear){
+                shr.showWarning({message: "Only overtime records with the previous month's overtime date can be submitted for the current month"});
+                return false;
+            }
+        }
+        return true;
+    }
+});
+
+waf.defineCustomeClass("cellformatter.shrTextArea", cellformatter.defaultFormatter, {
+    unformat: function (cell, rowId) {
+        return $.trim($(cell).text());
+    },
+    format: function (cellval, rwd) {
+        if (!$.type.isEmpty(cellval)) {
+            return "<pre class='required' style='color:rgb(153, 153, 153)'>" + cellval + "</pre>";
+        } else {
+            return cellformatter.defaultFormatter.prototype.format.call(this, cellval, rwd);
+        }
+    }, 
+}); 

+ 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 });
+        }
+
+
+    }
+});

+ 34 - 0
GDYSL/js/shr/addon/customer/web/js/cmpGiveDynamicListEx.js

@@ -0,0 +1,34 @@
+shr.defineClass("shr.compensation.CmpGiveDynamicListEx", shr.compensation.CmpGiveDynamicList, {
+
+    initalizeDOM: function () {
+        shr.compensation.CmpGiveDynamicListEx.superClass.initalizeDOM.call(this);
+        var that = this;  
+    },
+    /**
+	 * 审批操作
+	 */
+	dataToERPAction : function(){
+		var _self = this;
+		var param = _self.getSelectParams();
+		$.extend(param,{			
+			cmpschemeid : _self.cmpschemeid
+		});
+	
+		_self.confirm(true,"您确定要将工资单数据同步到ERP吗?Are you sure you want to sync payroll data to ERP?",
+					  function(){
+			_self.remoteCall({
+				type : "post",
+				showBlock : true,
+				method : "dataToERP",
+				param : param,
+				success : function(res){
+					shr.showInfo({
+						message : '启动同步成功',
+						hideAfter : 30
+					});
+					//_self.queryGrid();
+				}
+			});
+		});
+	},	
+});

+ 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;
+			}
+		}
+	}
+});

+ 37 - 0
GDYSL/src/com/kingdee/eas/custom/erp/util/SynSalaryFromErpUtilsEx.java

@@ -0,0 +1,37 @@
+package com.kingdee.eas.custom.erp.util;
+
+import com.kingdee.bos.BOSException;
+import com.kingdee.bos.Context;
+import com.kingdee.eas.util.app.DbUtil;
+import com.kingdee.jdbc.rowset.IRowSet;
+
+import java.sql.SQLException;
+
+/**
+ * description: SynSalaryFromErpUtilsEx <br>
+ * date: 2025/3/19 15:24 <br>
+ * author: lhbj <br>
+ * version: 1.0 <br>
+ */
+public class SynSalaryFromErpUtilsEx {
+    public static void getYearMonth(Context ctx, String cmpschemeid) {
+        String sel = "select fid,fperiodyear,fperiodmonth from T_HR_SCalScheme where fid =?";
+        try {
+            IRowSet rs = DbUtil.executeQuery(ctx,sel,new String[]{cmpschemeid});
+            if (rs.next()){
+                String year = rs.getString("fperiodyear");
+                String month = rs.getString("fperiodmonth");
+                String yearMonth = year;
+                if("10".compareTo(month)<0){
+                    month="0"+month;
+                }
+                yearMonth=yearMonth+"-"+month;
+                SynSalaryFromErpUtils.synSalaryToErp(ctx,yearMonth);
+            }
+        } catch (BOSException | SQLException e) {
+            e.printStackTrace();
+        } catch (Exception e) {
+            e.printStackTrace();
+        }
+    }
+}

+ 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();
+            }
+        }
+    }
+
+}

+ 85 - 0
GDYSL/websrc/com/kingdee/shr/customer/gtiit/handler/AtsOverTimeBillBatchEditHandlerExEx.java

@@ -0,0 +1,85 @@
+package com.kingdee.shr.customer.gtiit.handler;
+
+import com.kingdee.bos.BOSException;
+import com.kingdee.bos.Context;
+import com.kingdee.eas.basedata.person.PersonInfo;
+import com.kingdee.eas.framework.CoreBaseInfo;
+import com.kingdee.eas.hr.ats.AtsOverTimeBillEntryCollection;
+import com.kingdee.eas.hr.ats.AtsOverTimeBillEntryInfo;
+import com.kingdee.eas.hr.ats.AtsOverTimeBillInfo;
+import com.kingdee.eas.hr.ats.AttendFileStateEnum;
+import com.kingdee.eas.util.app.DbUtil;
+import com.kingdee.jdbc.rowset.IRowSet;
+import com.kingdee.shr.ats.web.handler.AtsOverTimeBillBatchEditHandler;
+import com.kingdee.shr.base.syssetting.context.SHRContext;
+import com.kingdee.shr.base.syssetting.exception.SHRWebException;
+import com.kingdee.shr.base.syssetting.exception.ShrWebBizException;
+import com.kingdee.shr.base.syssetting.web.json.JSONUtils;
+import com.kingdee.shr.customer.gtiit.util.BaseUtil;
+import com.kingdee.shr.customer.gtiit.util.DateTimeUtils;
+import org.apache.commons.lang3.StringUtils;
+import org.apache.log4j.Logger;
+import org.springframework.ui.ModelMap;
+import org.springframework.util.LinkedMultiValueMap;
+
+import javax.servlet.http.HttpServletRequest;
+import javax.servlet.http.HttpServletResponse;
+import java.sql.SQLException;
+import java.text.SimpleDateFormat;
+import java.time.Instant;
+import java.time.LocalTime;
+import java.time.ZoneId;
+import java.util.*;
+
+/**
+ * 多人加班单表单Handler
+ * @author xiaoxin
+ *
+ */
+public class AtsOverTimeBillBatchEditHandlerExEx extends AtsOverTimeBillBatchEditHandlerEx{
+	private static Logger logger =
+	        Logger.getLogger("com.kingdee.shr.customer.gtiit.handler.AtsOverTimeBillBatchEditHandlerExEx");
+	@Override
+	protected void verifyModel(HttpServletRequest request, HttpServletResponse response, CoreBaseInfo model)
+			throws SHRWebException {
+		super.verifyModel(request, response, model);
+		//增加一位员工每个自然月只能提一张加班单校验
+		checkOnlyTakeOneBill(request, response, model);
+	}
+
+	/**
+	 * 一位员工每个自然月只能提一张加班单校验
+	 * @param request
+	 * @param response
+	 * @param model
+	 */
+	protected void checkOnlyTakeOneBill(HttpServletRequest request, HttpServletResponse response, CoreBaseInfo model) throws ShrWebBizException {
+		Context ctx = SHRContext.getInstance().getContext();
+		try {
+			AtsOverTimeBillInfo billInfo = (AtsOverTimeBillInfo) model;
+			AtsOverTimeBillEntryCollection entries = billInfo.getEntries();
+			StringBuilder sql = new StringBuilder(" select e.fid from T_HR_ATS_OVERTIMEBILL b ");
+			sql.append(" left join T_HR_ATS_OVERTIMEBILLentry e on b.fid= e.fbillid ");
+			sql.append(" where e.fpersonid=? and b.fbillstate='3' and e.fotdate>={ts ?} and e.fotdate<={ts ?} ");
+			SimpleDateFormat sf = new SimpleDateFormat("yyyy-MM-dd");
+			for (int i = 0; i < entries.size(); i++) {
+				AtsOverTimeBillEntryInfo ats = entries.get(i);
+				Date otdate = ats.getOtDate();
+				PersonInfo personInfo = ats.getPerson();
+				Calendar calendar = Calendar.getInstance();
+				calendar.setTime(otdate);
+				calendar.set(Calendar.DAY_OF_MONTH, 1);
+				String fotdate1 = sf.format(calendar.getTime());
+				calendar.add(Calendar.MONTH, 1);
+				calendar.add(Calendar.DAY_OF_MONTH, -1);
+				String fotdate2 = sf.format(calendar.getTime());
+				IRowSet rs = DbUtil.executeQuery(ctx, sql.toString(), new String[]{personInfo.getId().toString(), fotdate1, fotdate2});
+				if(rs.size()>0){
+					throw new ShrWebBizException("Each employee can apply for overtime only once per natural month.Employee ("+personInfo.getName()+") has already applied.");
+				}
+			}
+		}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);
+    }
+
+
 }

+ 50 - 0
GDYSL/websrc/com/kingdee/shr/customer/gtiit/handler/CmpGiveDynamicListHandlerEx.java

@@ -0,0 +1,50 @@
+package com.kingdee.shr.customer.gtiit.handler;
+
+import com.kingdee.bos.Context;
+import com.kingdee.eas.custom.erp.util.SynSalaryFromErpUtilsEx;
+import com.kingdee.shr.base.syssetting.context.SHRContext;
+import com.kingdee.shr.base.syssetting.exception.SHRWebException;
+import com.kingdee.shr.compensation.exception.ExceptionHandle;
+import com.kingdee.shr.compensation.request.ParseRequestHelper;
+import com.kingdee.shr.compensation.web.handler.CmpGiveDynamicListHandler;
+import org.springframework.ui.ModelMap;
+
+import javax.servlet.http.HttpServletRequest;
+import javax.servlet.http.HttpServletResponse;
+
+/**
+ * 薪酬发放
+ * description: CmpGiveDynamicListHandler <br>
+ * date: 2025/3/19 14:03 <br>
+ * author: lhbj <br>
+ * version: 1.0 <br>
+ */
+public class CmpGiveDynamicListHandlerEx extends CmpGiveDynamicListHandler {
+
+    public void dataToERPAction(HttpServletRequest request, HttpServletResponse response, ModelMap modelMap) throws Exception {
+        Context ctx = SHRContext.getInstance().getContext();
+        String cmpschemeid = (String)ParseRequestHelper.getParameterByRequest(request, "cmpschemeid");
+        SynSalaryFromErpUtilsEx.getYearMonth(ctx, cmpschemeid);
+    }
+
+    /**
+     * 同步薪酬数据
+     * @param request
+     * @param response
+     * @param modelMap
+     * @return
+     * @throws SHRWebException
+     */
+    public String calGiveAction(HttpServletRequest request, HttpServletResponse response, ModelMap modelMap) throws SHRWebException {
+        String cmpschemeid = (String)ParseRequestHelper.getParameterByRequest(request, "cmpschemeid");
+        try {
+            super.calGiveAction(request,response,modelMap);
+        } catch (Exception var17) {
+            ExceptionHandle.handleException(var17);
+        }finally {
+            Context ctx = SHRContext.getInstance().getContext();
+            SynSalaryFromErpUtilsEx.getYearMonth(ctx, cmpschemeid);
+        }
+        return null;
+    }
+}

+ 53 - 0
GDYSL/websrc/com/kingdee/shr/customer/gtiit/handler/ERPManualLogListHandler.java

@@ -0,0 +1,53 @@
+package com.kingdee.shr.customer.gtiit.handler;
+
+import com.kingdee.bos.BOSException;
+import com.kingdee.bos.Context;
+import com.kingdee.eas.custom.erp.util.SynSalaryFromErpUtils;
+import com.kingdee.eas.util.app.DbUtil;
+import com.kingdee.shr.base.syssetting.app.filter.HRFilterUtils;
+import com.kingdee.shr.base.syssetting.context.SHRContext;
+import com.kingdee.shr.base.syssetting.web.handler.ListHandler;
+import com.kingdee.shr.compensation.request.ParseRequestHelper;
+import org.springframework.ui.ModelMap;
+
+import javax.servlet.http.HttpServletRequest;
+import javax.servlet.http.HttpServletResponse;
+
+/**
+ * description: ERPManualLogListHandler <br>
+ * date: 2025/3/24 11:50 <br>
+ * author: lhbj <br>
+ * version: 1.0 <br>
+ */
+public class ERPManualLogListHandler extends ListHandler {
+
+    public void dataToERPAction(HttpServletRequest request, HttpServletResponse response, ModelMap modelMap) throws Exception {
+        Context ctx = SHRContext.getInstance().getContext();
+        String taxPeriodDate = (String) ParseRequestHelper.getParameterByRequest(request, "taxPeriodDate");
+        insertERPManualLog(ctx,taxPeriodDate);
+        SynSalaryFromErpUtils.synSalaryToErp(ctx,taxPeriodDate);
+    }
+
+    protected void insertERPManualLog(Context ctx,String taxPeriodDate) throws BOSException {
+        String userId =HRFilterUtils.getCurrentUserId(ctx);
+        String personId =HRFilterUtils.getCurrentPersonId(ctx);
+        StringBuilder builder = new StringBuilder();
+        builder.append(" insert into CT_CUS_ERPManualLog ");
+        builder.append(" ( ");
+        builder.append(" fid,FCreatorID,FCreateTime, ");
+        builder.append(" FLastUpdateUserID,FLastUpdateTime,FControlUnitID, ");
+        builder.append(" FShrBasicItemID,FUsePolicy,FIsSysPreset, ");
+        builder.append(" FState,FIndex,FHrOrgUnitId, ");
+        builder.append(" CFMonth,CFTriggerPersonID ");
+        builder.append(" ) values( ");
+        builder.append(" newbosid('F82D1DA6'),?,sysdate, ");
+        builder.append(" ?,sysdate,'00000000-0000-0000-0000-000000000000CCE7AED4', ");
+        builder.append(" '','100','0', ");
+        builder.append(" '1','1','00000000-0000-0000-0000-000000000000CCE7AED4', ");
+        builder.append(" ?,? ");
+        builder.append(" ) ");
+        DbUtil.execute(ctx,builder.toString(),new String[]{userId,userId,taxPeriodDate,personId});
+    }
+
+
+}

+ 81 - 0
GDYSL/websrc/com/kingdee/shr/customer/gtiit/handler/PerAtsOverTimeBillBatchEditHandlerExEx.java

@@ -0,0 +1,81 @@
+package com.kingdee.shr.customer.gtiit.handler;
+
+import com.kingdee.bos.BOSException;
+import com.kingdee.bos.Context;
+import com.kingdee.eas.basedata.person.PersonInfo;
+import com.kingdee.eas.framework.CoreBaseInfo;
+import com.kingdee.eas.hr.ats.AtsOverTimeBillEntryCollection;
+import com.kingdee.eas.hr.ats.AtsOverTimeBillEntryInfo;
+import com.kingdee.eas.hr.ats.AtsOverTimeBillInfo;
+import com.kingdee.eas.hr.ats.AttendFileStateEnum;
+import com.kingdee.eas.util.app.DbUtil;
+import com.kingdee.jdbc.rowset.IRowSet;
+import com.kingdee.shr.ats.web.handler.PerAtsOverTimeBillBatchEditHandler;
+import com.kingdee.shr.base.syssetting.context.SHRContext;
+import com.kingdee.shr.base.syssetting.exception.SHRWebException;
+import com.kingdee.shr.base.syssetting.exception.ShrWebBizException;
+import com.kingdee.shr.base.syssetting.web.json.JSONUtils;
+import com.kingdee.shr.customer.gtiit.util.BaseUtil;
+import com.kingdee.shr.customer.gtiit.util.DateTimeUtils;
+import org.apache.commons.lang3.StringUtils;
+import org.apache.log4j.Logger;
+import org.springframework.ui.ModelMap;
+import org.springframework.util.LinkedMultiValueMap;
+
+import javax.servlet.http.HttpServletRequest;
+import javax.servlet.http.HttpServletResponse;
+import java.sql.SQLException;
+import java.text.SimpleDateFormat;
+import java.time.Instant;
+import java.time.LocalTime;
+import java.time.ZoneId;
+import java.util.*;
+
+public class PerAtsOverTimeBillBatchEditHandlerExEx extends PerAtsOverTimeBillBatchEditHandlerEx {
+	private static Logger logger = Logger
+			.getLogger("com.kingdee.shr.customer.gtiit.handler.PerAtsOverTimeBillBatchEditHandlerExEx");
+	@Override
+	protected void verifyModel(HttpServletRequest request, HttpServletResponse response, CoreBaseInfo model)
+			throws SHRWebException {
+		super.verifyModel(request, response, model);
+		//增加一位员工每个自然月只能提一张加班单校验
+		checkOnlyTakeOneBill(request, response, model);
+	}
+	/**
+	 * 一位员工每个自然月只能提一张加班单校验
+	 * @param request
+	 * @param response
+	 * @param model
+	 */
+	protected void checkOnlyTakeOneBill(HttpServletRequest request, HttpServletResponse response, CoreBaseInfo model) throws ShrWebBizException {
+		Context ctx = SHRContext.getInstance().getContext();
+		try {
+			AtsOverTimeBillInfo billInfo = (AtsOverTimeBillInfo) model;
+			AtsOverTimeBillEntryCollection entries = billInfo.getEntries();
+			StringBuilder sql = new StringBuilder(" select e.fid from T_HR_ATS_OVERTIMEBILL b ");
+			sql.append(" left join T_HR_ATS_OVERTIMEBILLentry e on b.fid= e.fbillid ");
+			sql.append(" where e.fpersonid=? and b.fbillstate='3' and e.fotdate>={ts ?} and e.fotdate<={ts ?} ");
+			SimpleDateFormat sf = new SimpleDateFormat("yyyy-MM-dd");
+			for (int i = 0; i < entries.size(); i++) {
+				AtsOverTimeBillEntryInfo ats = entries.get(i);
+				Date otdate = ats.getOtDate();
+				PersonInfo personInfo = ats.getPerson();
+				Calendar calendar = Calendar.getInstance();
+				calendar.setTime(otdate);
+				calendar.set(Calendar.DAY_OF_MONTH, 1);
+				String fotdate1 = sf.format(calendar.getTime());
+				calendar.add(Calendar.MONTH, 1);
+				calendar.add(Calendar.DAY_OF_MONTH, -1);
+				String fotdate2 = sf.format(calendar.getTime());
+				IRowSet rs = DbUtil.executeQuery(ctx, sql.toString(), new String[]{personInfo.getId().toString(), fotdate1, fotdate2});
+				if(rs.size()>0){
+					throw new ShrWebBizException("Each employee can apply for overtime only once per natural month.Employee ("+personInfo.getName()+") has already applied.");
+				}
+			}
+		}catch (BOSException e){
+			e.printStackTrace();
+		}
+	}
+
+
+}

+ 781 - 0
GDYSL/websrc/com/kingdee/shr/customer/gtiit/rpt/PersonRosterAListHandler.java

@@ -0,0 +1,781 @@
+package com.kingdee.shr.customer.gtiit.rpt;
+
+
+import com.cloudera.impala.jdbc4.internal.apache.log4j.Logger;
+import com.google.common.collect.Lists;
+import com.google.common.collect.Maps;
+import com.kingdee.bos.BOSException;
+import com.kingdee.bos.Context;
+
+import com.kingdee.bos.metadata.entity.EntityViewInfo;
+import com.kingdee.bos.metadata.entity.FilterInfo;
+import com.kingdee.bos.metadata.entity.FilterItemCollection;
+import com.kingdee.bos.metadata.entity.FilterItemInfo;
+
+import com.kingdee.bos.sql.ParserException;
+
+import com.kingdee.eas.framework.util.FilterUtility;
+import com.kingdee.eas.util.app.DbUtil;
+import com.kingdee.jdbc.rowset.IRowSet;
+import com.kingdee.shr.base.syssetting.context.SHRContext;
+import com.kingdee.shr.base.syssetting.exception.SHRWebException;
+import com.kingdee.shr.base.syssetting.exception.ShrWebBizException;
+import com.kingdee.shr.base.syssetting.json.GridDataEntity;
+import com.kingdee.shr.base.syssetting.ml.SHRWebResource;
+import com.kingdee.shr.base.syssetting.sensitive.DataSensitiveEngineService;
+import com.kingdee.shr.base.syssetting.sensitive.IDataSensitiveEngineService;
+import com.kingdee.shr.base.syssetting.util.MetaDataUtil;
+import com.kingdee.shr.base.syssetting.util.SysSettingSHRBaseItemUtil;
+
+import com.kingdee.shr.base.syssetting.web.dynamic.util.ExportHelper;
+import com.kingdee.shr.base.syssetting.web.handler.ListHandler;
+import com.kingdee.shr.base.syssetting.web.json.JSONUtils;
+import com.kingdee.shr.base.syssetting.web.util.FastFilterUtil;
+import com.kingdee.util.StringUtils;
+import org.springframework.ui.ModelMap;
+
+import javax.servlet.http.HttpServletRequest;
+import javax.servlet.http.HttpServletResponse;
+import java.sql.SQLException;
+import java.text.MessageFormat;
+import java.util.*;
+
+/**人员花名册
+ * description: PersonRosterAListHandler <br>
+ * date: 2025/3/12 16:46 <br>
+ * author: lhbj <br>
+ * version: 1.0 <br>
+ */
+public class PersonRosterAListHandler extends ListHandler {
+    private static Logger logger = Logger.getLogger("com.kingdee.shr.customer.gtiit.rpt.PersonRosterAListHandler");
+
+    protected Object getParameter(HttpServletRequest request, String key) {
+        Object value = request.getAttribute(key);
+        if (null == value) {
+            value = request.getParameter(key);
+        }
+        return value;
+    }
+
+    /**
+     * {
+     *     "person": {
+     *         "values": "",
+     *         "isSaveToScheme": true,
+     *         "dataType": "F7",
+     *         "uipk": "com.kingdee.eas.basedata.person.app.Person.CMP",
+     *         "dataItem": []
+     *     },
+     *     "personType": {
+     *         "values": "",
+     *         "isSaveToScheme": true,
+     *         "dataType": "F7",
+     *         "uipk": "com.kingdee.eas.hr.emp.emp_page.app.WorkerCategory.maintain.list",
+     *         "dataItem": []
+     *     },
+     *     "status": {
+     *         "values": "1",
+     *         "isSaveToScheme": true,
+     *         "dataType": "Enum",
+     *         "enumSource": "status",
+     *         "isCustomDefine": true,
+     *         "enumOptionsType": "int"
+     *     },
+     *     "periodEmployment": {
+     *         "values": {
+     *             "startDate": "2025-03-01",
+     *             "endDate": "2025-03-31",
+     *             "selectDate": "custom"
+     *         },
+     *         "isSaveToScheme": true,
+     *         "dataType": "Date",
+     *         "dataItem": "custom",
+     *         "queryDateType": ""
+     *     },
+     *     "periodResignation": {
+     *         "values": {
+     *             "startDate": "2025-03-01",
+     *             "endDate": "2025-03-31",
+     *             "selectDate": "custom"
+     *         },
+     *         "isSaveToScheme": true,
+     *         "dataType": "Date",
+     *         "dataItem": "custom",
+     *         "queryDateType": ""
+     *     },
+     *     "deadline": {
+     *         "values": "",
+     *         "isSaveToScheme": true,
+     *         "dataType": "Date",
+     *         "queryDateType": ""
+     *     }
+     * }
+     * @param request
+     * @return
+     * @throws SHRWebException
+     */
+    protected FilterInfo getFastFilter(HttpServletRequest request) throws SHRWebException {
+        String fastFilterItems = request.getParameter("fastFilterItems");
+        if (StringUtils.isEmpty(fastFilterItems)) {
+            return SysSettingSHRBaseItemUtil.isSHRBaseItem(MetaDataUtil.getEntityObjectByEntityName(this.getUIViewInfo(request).getEntityName()).getBaseEntity()) ? this.getBaseItemFastFilter(request) : null;
+        } else {
+            Map map = JSONUtils.convertJsonToObject(SHRContext.getInstance().getContext(), fastFilterItems);
+            Map<String,Object> deadline =  (Map<String, Object>) map.get("deadline");
+            if (null != deadline.get("values")
+                    && (!String.class.equals(deadline.get("values").getClass())
+                    || !org.apache.commons.lang3.StringUtils.isEmpty(String.valueOf(deadline.get("values"))))){
+                Map<String,Object> subMap = (Map<String, Object>) deadline.get("values");
+                String date = String.valueOf(subMap.get("date"));
+                //endDate<=date
+                Map<String,Object> deadline1 = Maps.newHashMap();
+                Map<String,Object> values1 = Maps.newHashMap();
+                deadline1.put("isSaveToScheme",true);
+                deadline1.put("dataType","Date");
+                deadline1.put("queryDateType","");
+                values1.put("endDate",date);
+                deadline1.put("values",values1);
+                //startDate>=date
+                Map<String,Object> deadline2 = Maps.newHashMap();
+                Map<String,Object> values2 = Maps.newHashMap();
+                deadline2.put("isSaveToScheme",true);
+                deadline2.put("dataType","Date");
+                deadline2.put("queryDateType","");
+                values2.put("startDate",date);
+                deadline2.put("values",values2);
+
+                map.put("deadline1",deadline1);
+                map.put("deadline2",deadline2);
+            }
+            map.remove("deadline");
+
+            if (null != map && map.size() > 0) {
+                FilterInfo filter = null;
+                Iterator var5 = map.keySet().iterator();
+
+                while(var5.hasNext()) {
+                    Object key = var5.next();
+                    if (map.get(key) instanceof Map) {
+                        Map subMap = (Map)map.get(key);
+                        request.setAttribute((String)key, subMap.get("values"));
+                    }
+                }
+                if (SysSettingSHRBaseItemUtil.isSHRBaseItem(MetaDataUtil.getEntityObjectByEntityName(this.getUIViewInfo(request).getEntityName()).getBaseEntity())) {
+                    filter = this.getBaseItemFastFilter(request);
+                } else {
+                    filter = FastFilterUtil.generateBizFastFilterInfo(JSONUtils.convertObjectToJson(SHRContext.getInstance().getContext(),map));
+                }
+                return filter;
+            } else {
+                return SysSettingSHRBaseItemUtil.isSHRBaseItem(MetaDataUtil.getEntityObjectByEntityName(this.getUIViewInfo(request).getEntityName()).getBaseEntity()) ? this.getBaseItemFastFilter(request) : null;
+            }
+        }
+    }
+    /**
+     * 数据查询
+     *
+     * @param request
+     * @param response
+     * @param modelMap
+     * @return
+     * @throws SHRWebException
+     */
+    protected GridDataEntity getGridRequestData(HttpServletRequest request, HttpServletResponse response, ModelMap modelMap) throws SHRWebException {
+        GridDataEntity gridDataEntity = new GridDataEntity();
+        try {
+            SHRContext shrContext = SHRContext.getInstance();
+            Context ctx = shrContext.getContext();
+            EntityViewInfo entityViewInfo = (EntityViewInfo) modelMap.get("DataGridEntityView");
+            String columnModel = request.getParameter("columnModel");
+            List<String> columnModels = Lists.newArrayList();
+            columnModels.addAll(Arrays.asList(columnModel.split(",")));
+            int rows = Integer.parseInt(this.getParameter(request, "rows").toString());
+            int page = Integer.parseInt(this.getParameter(request, "page").toString());
+            Map<String, Object> custom_params = (Map<String, Object>) request.getAttribute("custom_params");
+            String clear = (String) custom_params.get("clear");
+            String sorterItems = request.getParameter("sorterItems");
+            if (!org.apache.commons.lang3.StringUtils.isEmpty(request.getParameter("sidx"))) {
+                if (sorterItems != null && !"".equals(sorterItems)) {
+                    String sordsidx = request.getParameter("sidx");
+                    String tempSort = ("," + sorterItems).toLowerCase();
+                    if (tempSort.contains("," + sordsidx.toLowerCase())) {
+                        int startIndex = tempSort.indexOf("," + sordsidx.toLowerCase());
+                        int endIndex = tempSort.indexOf(",", startIndex + 1);
+                        if (endIndex < startIndex) {
+                            endIndex = tempSort.length();
+                        }
+                        String repStr = tempSort.substring(startIndex, endIndex);
+                        tempSort = tempSort.replace(repStr, "");
+                        if (tempSort.replace(" ", "").length() > 0) {
+                            sorterItems = tempSort.replaceFirst(",", request.getParameter("sidx") + " " + request.getParameter("sord") + ",");
+                        } else {
+                            sorterItems = request.getParameter("sidx") + " " + request.getParameter("sord");
+                        }
+                    } else {
+                        sorterItems = request.getParameter("sidx") + " " + request.getParameter("sord") + "," + sorterItems;
+                    }
+                } else {
+                    sorterItems = request.getParameter("sidx") + " " + request.getParameter("sord");
+                }
+            } else if (org.apache.commons.lang3.StringUtils.isEmpty(sorterItems)) {
+                sorterItems = "pNumber desc";
+            }
+
+            String filterItems = (String) modelMap.get("filterItems");
+            if (org.apache.commons.lang3.StringUtils.isEmpty(filterItems)) {
+                filterItems = request.getParameter("filterItems");
+            }
+
+            String filter = (String) modelMap.get("filter");
+            if (org.apache.commons.lang3.StringUtils.isEmpty(filter)) {
+                filter = request.getParameter("filter");
+            }
+
+            FilterInfo filterInfo;
+            if (filter != null && filter.length() > 0) {
+
+                filterInfo = new FilterInfo(filter);
+                if (FilterUtility.hasFilterItem(entityViewInfo.getFilter())) {
+                    entityViewInfo.getFilter().mergeFilter(filterInfo, "AND");
+                } else {
+                    entityViewInfo.setFilter(new FilterInfo(filter));
+                }
+
+            }
+
+            if (filterItems != null && filterItems.length() > 0) {
+
+                filterInfo = new FilterInfo(filterItems);
+                if (FilterUtility.hasFilterItem(entityViewInfo.getFilter())) {
+                    entityViewInfo.getFilter().mergeFilter(filterInfo, "AND");
+                } else {
+                    entityViewInfo.setFilter(new FilterInfo(filterItems));
+                }
+            }
+            System.out.println("entityViewInfo:" + entityViewInfo.getFilter().toSql());
+            Long start = System.currentTimeMillis();
+            StringBuilder sel = new StringBuilder();
+            sel.append(" SELECT rownum as rownumber,temp.* from ( ");
+            sel.append(" SELECT * from ( ");
+            sel.append("  SELECT DISTINCT 'person' billType, ");
+            sel.append(" person.fnumber as PersonNumber, ");
+            sel.append(" person.CFSurname as LastName, ");
+            sel.append(" person.CFMiddleNames as MiddleName, ");
+            sel.append(" person.CFGivenName as FirstName, ");
+            sel.append(" person.CFLocalName as LocalName, ");
+            sel.append(" person.fname_l1 as DisplayName, ");
+            sel.append(" c.fname_l1 as Department, ");
+            sel.append(" c.fsimplename as Dept, ");
+            sel.append(" e.fname_l1 as Job, ");
+            sel.append(" f.jobLevel as JobLevel, ");
+            sel.append(" d.CFLongname_l1 as Position, ");
+            sel.append(" d.fnumber as PositionCode, ");
+            sel.append(" personType.fname_l1 as WorkCategory, ");
+            sel.append(" case ");
+            sel.append("  when blx.fname_l1 is not null then blx.fname_l1 ");
+            sel.append("  else lsx.fname_l1 ");
+            sel.append(" end as PersonType, ");
+            sel.append(" case ");
+            sel.append("  when qzjz.fname_l1 is not null then qzjz.fname_l1 ");
+            sel.append("  else lsqzjz.fname_l1 ");
+            sel.append(" end as FullTimeorPartTime, ");
+            sel.append(" j.fnumber as LineManager, ");
+            sel.append(" j.fname_l2 as LineManagerName, ");
+            sel.append(" to_char(b.eorEffdt, 'yyyy-MM-dd') as StartTime, ");
+            sel.append(" to_char(b.eorLeffdt, 'yyyy-MM-dd') as EndTime, ");
+            sel.append(" to_char(b.FEnterDate, 'yyyy-MM-dd') as HireDate, ");
+            sel.append(" b.FTryoutMonth as ProbationPeriod, ");
+            sel.append(" 'months' as ProbationPeriodUnit, ");
+            sel.append(" to_char(b.FPlanFormalDate, 'yyyy-MM-dd') as ProbationEndDate, ");
+            sel.append(" l.FOfficePhone as WorkPhone, ");
+            sel.append(" l.FMobile as CellPhone, ");
+            sel.append(" l.FEmail as PrimaryEmail, ");
+            sel.append(" l.CFPrivateemail as Email, ");
+            sel.append(" m.fname_l1 as Nationality, ");
+            sel.append(" to_char(v.FIssueDate, 'yyyy-MM-dd') as WorkPermitIssueDate, ");
+            sel.append(" to_char(v.CFExpirationDate, 'yyyy-MM-dd') as WorkPermitExpirationDate, ");
+            sel.append(" to_char(w.FIssueDate, 'yyyy-MM-dd') as ResidencePermitIssueDate, ");
+            sel.append(" to_char(w.CFExpirationDate, 'yyyy-MM-dd') as ResidencePermitExpirationDate, ");
+            sel.append(" case ");
+            sel.append("  when person.FIDCardNO is not null then person.FIDCardNO ");
+            sel.append("  when person.FPassportNO is not null then person.FPassportNO ");
+            sel.append(" end as IDcardnoorPassportno, ");
+            sel.append(" to_char(person.FIdCardBeginDate, 'yyyy-MM-dd') as IDcardcommencingdate, ");
+            sel.append(" to_char(person.FIdCardEndDate, 'yyyy-MM-dd') as IDcardexpireddate, ");
+            sel.append(" person.FIDCardAddress IDCardAddress, ");
+            sel.append(" l.FWORKPLACE as CurrentAddress, ");
+            sel.append(" to_char( ");
+            sel.append("  case ");
+            sel.append("   when person.FGender = 1 then 'male' ");
+            sel.append("   when person.FGender = 2 then 'female' ");
+            sel.append("   else '' ");
+            sel.append("  end ");
+            sel.append(" ) as Sex, ");
+            sel.append(" to_char(person.FBirthday, 'yyyy-MM-dd') as BirthDate, ");
+            sel.append(" mz.FName_L1 as Ethnicity, ");
+            sel.append(" hj.FName_L1 as HukouType, ");
+            sel.append(" to_char(person.cfhrd, 'yyyy-MM-dd') as HouseholdRegisteredDate, ");
+            sel.append(" person.FNativePlace_L2 as Nativeplace, ");
+            sel.append(" zm.FName_L1 as PoliticaStatus, ");
+            sel.append(" hy.FName_L1 as MaritalStatus, ");
+            sel.append(" l.FPostalcode as Zipcode, ");
+            sel.append(" qrz.CFSchool as GraduatedSchoolofHighestAcademicDegree, ");
+            sel.append(" qxl.FName_L1 as HighestAcademicDegree, ");
+            sel.append(" qxw.FName_L1 as HighestQualificationOfFulltimeEducation, ");
+            sel.append(" qrz.CFMajor as Majoroffulltimeeducation, ");
+            sel.append(" qrz.CFGraduation as GraduatedDate, ");
+            sel.append(" fqrz.CFSchool as GraduateSchoolofHighestDegreeofParttimeEducation, ");
+            sel.append(" fqxl.FName_L1 as HighestDegreeofParttimeEducation, ");
+            sel.append(" fqxw.FName_L1 as HighestQualificationofParttimeeducation, ");
+            sel.append(" fqrz.CFMajor as MajorofParttimeeducation, ");
+            sel.append(" l.FLinkName as emergencyContact, ");
+            sel.append(" l.FLinkTelNum as telephoneofemergency, ");
+            sel.append(" l.CFRelationship as relationship, ");
+            sel.append(" to_char(rEntry.FbizDate, 'yyyy-MM-dd') as TerminationDate, ");
+            sel.append(" isnull(rEntry.fdescription, vr.fname_l1) as TerminationReason, ");
+            sel.append(" bt.fname_l1 as EmployeeType, ");
+            sel.append(" case ");
+            sel.append("  bt.finservice ");
+            sel.append("  when 1 then 'active' ");
+            sel.append("  when 4 then 'active' ");
+            sel.append("  else 'inactive' ");
+            sel.append(" end as InService, ");
+            sel.append(" person.fid personId, ");
+            sel.append(" personType.fId as personTypeId, ");
+            sel.append(" b.FEnterDate as enterDate, ");
+            sel.append(" isnull( ");
+            sel.append("  rEntry.fbizdate, ");
+            sel.append("  isnull(pePos.fleftdate, { ts '2199-12-31' }) ");
+            sel.append(" ) as leftDate, ");
+            sel.append(" b.fleffdt as deadline2, ");
+            sel.append(" b.feffdt as deadline1, ");
+            sel.append(" case ");
+            sel.append("  bt.finservice ");
+            sel.append("  when 1 then 1 ");
+            sel.append("  when 4 then 1 ");
+            sel.append("  else 2 ");
+            sel.append(" end as \"status\", ");
+            sel.append(" b.fid as id, ");
+            sel.append(" b.flaborrelationstateid as laborrelationstateId ");
+            sel.append("   FROM ( ");
+            sel.append("  SELECT ehis.fid,ehis.feffdt, ");
+            sel.append("   ehis.fleffdt, ");
+            sel.append("   eor.feffdt as eorEffdt, ");
+            sel.append("   eor.fleffdt as eorLeffdt, ");
+            sel.append("   ehis.FPERSONID, ");
+            sel.append("   eor.FAdminOrgID, ");
+            sel.append("   eor.CFWorkercategoryID, ");
+            sel.append("   eor.fpositionid, ");
+            sel.append("   eor.CFLineManagerNameI, ");
+            sel.append("   eor.CFFtorptID, ");
+            sel.append("   eor.CFPersontypeID, ");
+            sel.append("   ehis.FEnterDate, ");
+            sel.append("   ehis.FTryoutMonth, ");
+            sel.append("   ehis.FPlanFormalDate, ");
+            sel.append("   ehis.flaborrelationstateid ");
+            sel.append("  from t_hr_emplaborrelationhis ehis ");
+            sel.append("   left join T_HR_EMPORGRELATION eor on eor.fpersonid = ehis.fpersonid ");
+            sel.append("   and eor.feffdt >= ehis.feffdt ");
+            sel.append("   and eor.fleffdt <= ehis.fleffdt ");
+            sel.append(" ) b ");
+            sel.append(" left join t_bd_person person on person.fid = b.FPERSONID ");
+            sel.append(" left join T_HR_BDEmployeeType bt on bt.fid = b.flaborrelationstateid ");
+            sel.append(" left join T_HR_RESIGNBIZBILLENTRY rEntry on rEntry.fid = b.FPERSONID ");
+            sel.append(" and rEntry.fbizdate = b.fleffdt ");
+            sel.append(" left join T_HR_VariationReason vr on person.fid = rEntry.fvariationreasonid ");
+            sel.append(" left join T_HR_personPosition pePos on pePos.fpersonid = person.FID ");
+            sel.append(" left join t_org_admin c on b.FAdminOrgID = c.FID ");
+            sel.append(" left join t_org_position d on b.fpositionid = d.FID ");
+            sel.append(" left join t_org_job e on d.FJOBID = e.fid ");
+            sel.append(" left join CT_MP_WorkerCategory personType on b.CFWorkercategoryID = personType.fid ");
+            sel.append(" left join CT_MP_Fullorpart h on person.CFFtorptID = h.fid ");
+            sel.append(" left join T_HR_EmployeeClassify i on person.CFPersontypeID = i.FID ");
+            sel.append(" left join t_bd_person j on b.CFLineManagerNameI = j.fid ");
+            sel.append(" left join T_BD_HRFolk mz on mz.fid = person.FFOLKID ");
+            sel.append(" left join T_BD_HRPolitical zm on zm.fid = person.FPoliticalFaceID ");
+            sel.append(" left join T_BD_HRWed hy on hy.fid = person.FWedID ");
+            sel.append(" left join T_BD_Regpermresidence hj on hj.fid = person.FREGRESIDENCEID ");
+            sel.append(" left join ( ");
+            sel.append("  SELECT epr.FPERSONID, ");
+            sel.append("   jg.FNAME_l1 as jobLevel, ");
+            sel.append("   epr.frankenddate ");
+            sel.append("  FROM T_HR_EmpPostRank epr ");
+            sel.append("   left join t_hr_jobgrade jg on epr.FJOBGRADEID = jg.FID ");
+            sel.append(" ) f on person.fid = f.FPERSONID ");
+            sel.append(" and f.frankenddate >= b.feffdt ");
+            sel.append(" and f.frankenddate <= b.fleffdt ");
+            sel.append(" left join T_HR_PersonContactMethod l on person.fid = l.FPERSONID ");
+            sel.append(" left join T_BD_Nationality m on person.FNationalityID = m.fid ");
+            sel.append(" left join CT_MP_Fullperson qrz on qrz.FPersonID = person.fid ");
+            sel.append(" left join T_BD_HRDiploma qxl on qrz.CFBackgroundID = qxl.fid ");
+            sel.append(" left join T_BD_HRDegree qxw on qxw.fid = qrz.CFDegreeID ");
+            sel.append(" left join CT_MP_Partperson fqrz on fqrz.FPersonID = person.fid ");
+            sel.append(" left join T_BD_HRDiploma fqxl on fqrz.CFBackgroundID = fqxl.fid ");
+            sel.append(" left join T_BD_HRDegree fqxw on fqxw.fid = fqrz.CFDegreeID ");
+            sel.append(" left join ( ");
+            sel.append("  select pct.FCredentialsTypeNO, ");
+            sel.append("   pct.fid, ");
+            sel.append("   pct.fpersonid ");
+            sel.append("  from T_HR_PersonCredentialsType pct ");
+            sel.append("   left join T_HR_CredentialsType ct on pct.FCredentialsTypeID = ct.fid ");
+            sel.append("  where ct.FNUMBER = 'CN01' ");
+            sel.append(" ) r on person.fid = r.fpersonid ");
+            sel.append(" left join( ");
+            sel.append("  SELECT pct.CFExpirationDate, ");
+            sel.append("   pct.FCredentialsTypeNO, ");
+            sel.append("   pct.fpersonid, ");
+            sel.append("   pct.FIssueDate ");
+            sel.append("  FROM T_HR_PersonCredentialsType pct ");
+            sel.append("   INNER join( ");
+            sel.append(" select max(pcta.CFExpirationDate) CFExpirationDate, ");
+            sel.append("  pcta.fpersonid ");
+            sel.append(" from T_HR_PersonCredentialsType pcta ");
+            sel.append("  left join T_HR_CredentialsType ctb on pcta.FCredentialsTypeID = ctb.fid ");
+            sel.append(" where ctb.FNUMBER = 'CWP' ");
+            sel.append(" group by pcta.fpersonid ");
+            sel.append("   ) pctMax on pct.fpersonid = pctMax.fpersonid ");
+            sel.append("   and pct.CFExpirationDate = pctMax.CFExpirationDate ");
+            sel.append("   inner join T_HR_CredentialsType ct on pct.FCredentialsTypeID = ct.fid ");
+            sel.append("  where ct.FNUMBER = 'CWP' ");
+            sel.append(" ) v on person.fid = v.FPersonID ");
+            sel.append(" left join( ");
+            sel.append("  SELECT pct.CFExpirationDate, ");
+            sel.append("   pct.FCredentialsTypeNO, ");
+            sel.append("   pct.fpersonid, ");
+            sel.append("   pct.FIssueDate ");
+            sel.append("  FROM T_HR_PersonCredentialsType pct ");
+            sel.append("   INNER join( ");
+            sel.append(" select max(pcta.CFExpirationDate) CFExpirationDate, ");
+            sel.append("  pcta.fpersonid ");
+            sel.append(" from T_HR_PersonCredentialsType pcta ");
+            sel.append("  left join T_HR_CredentialsType b on pcta.FCredentialsTypeID = b.fid ");
+            sel.append(" where b.FNUMBER = 'CFRP' ");
+            sel.append(" group by pcta.fpersonid ");
+            sel.append("   ) pctMax on pct.fpersonid = pctMax.fpersonid ");
+            sel.append("   and pct.CFExpirationDate = pctMax.CFExpirationDate ");
+            sel.append("   inner join T_HR_CredentialsType ct on pct.FCredentialsTypeID = ct.fid ");
+            sel.append("  where ct.FNUMBER = 'CFRP' ");
+            sel.append(" ) w on person.fid = w.FPersonID ");
+            sel.append(" left join T_HR_EmployeeClassify blx on b.CFPersontypeID = blx.fid ");
+            sel.append(" left join T_HR_EmployeeClassify lsx on lsx.fid = person.CFPersontypeID ");
+            sel.append(" left join CT_MP_Fullorpart qzjz on b.CFFtorptID = qzjz.fid ");
+            sel.append(" left join CT_MP_Fullorpart lsqzjz on lsqzjz.fid = person.CFFtorptID ");
+            sel.append("  ) person ");
+            if (null != entityViewInfo && entityViewInfo.getFilter() != null) {
+                String andSql=entityViewInfo.getFilter().toSql();
+                if (org.apache.commons.lang3.StringUtils.isNotBlank(andSql)) {
+                    andSql = andSql.replaceAll("personType.id", "personTypeId");
+                    andSql = andSql.replaceAll("person.id", "personId");
+                    andSql = andSql.replaceAll("periodEmployment", "enterDate");
+                    andSql = andSql.replaceAll("periodResignation", "leftDate");
+                    sel.append(" where " + andSql + " ");
+                }
+            }
+            sel.append(" UNION all ");
+            sel.append(" SELECT * ");
+            sel.append(" from ( ");
+            sel.append("   select 'preEntry' as billType, ");
+            sel.append(" pEntry.cfempnumber as PersonNumber, ");
+            sel.append(" pEntry.cfsurname_l1 as LastName, ");
+            sel.append(" pEntry.cfmiddlenames_l1 as MiddleName, ");
+            sel.append(" pEntry.cfgivenname_l1 as FirstName, ");
+            sel.append(" pEntry.cflocalname_l1 as LocalName, ");
+            sel.append(" pEntry.fname_l1 as DisplayName, ");
+            sel.append(" c.fname_l1 as Department, ");
+            sel.append(" c.fsimplename as Dept, ");
+            sel.append(" e.fname_l1 as Job, ");
+            sel.append(" jg.fname_l1 as JobLevel, ");
+            sel.append(" d.CFLongname_l1 as Position, ");
+            sel.append(" d.fnumber as PositionCode, ");
+            sel.append(" personType.fname_l1 as WorkCategory, ");
+            sel.append(" blx.fname_l1 as PersonType, ");
+            sel.append(" lsqzjz.fname_l1 as FullTimeorPartTime, ");
+            sel.append(" j.fnumber as LineManager, ");
+            sel.append(" j.fname_l2 as LineManagerName, ");
+            sel.append(" to_char(pEntry.fbizdate, 'yyyy-MM-dd') as StartTime, ");
+            sel.append(" '2199-12-31' as EndTime, ");
+            sel.append(" to_char(pEntry.fpreenterdate, 'yyyy-MM-dd') as HireDate, ");
+            sel.append(" pEntry.cftrymonth as ProbationPeriod, ");
+            sel.append(" 'months' as ProbationPeriodUnit, ");
+            sel.append(" to_char(pEntry.cftransferdate, 'yyyy-MM-dd') as ProbationEndDate, ");
+            sel.append(" l.FOfficePhone as WorkPhone, ");
+            sel.append(" l.FMobile as CellPhone, ");
+            sel.append(" l.FEmail as PrimaryEmail, ");
+            sel.append(" l.CFPrivateemail as Email, ");
+            sel.append(" m.fname_l1 as Nationality, ");
+            sel.append(" to_char(v.FIssueDate, 'yyyy-MM-dd') as WorkPermitIssueDate, ");
+            sel.append(" to_char(v.CFExpirationDate, 'yyyy-MM-dd') as WorkPermitExpirationDate, ");
+            sel.append(" to_char(w.FIssueDate, 'yyyy-MM-dd') as ResidencePermitIssueDate, ");
+            sel.append(" to_char(w.CFExpirationDate, 'yyyy-MM-dd') as ResidencePermitExpirationDate, ");
+            sel.append(" case ");
+            sel.append("  when person.FIDCardNO is not null then person.FIDCardNO ");
+            sel.append("  when person.FPassportNO is not null then person.FPassportNO ");
+            sel.append(" end as IDcardnoorPassportno, ");
+            sel.append(" to_char(person.FIdCardBeginDate, 'yyyy-MM-dd') as IDcardcommencingdate, ");
+            sel.append(" to_char(person.FIdCardEndDate, 'yyyy-MM-dd') as IDcardexpireddate, ");
+            sel.append(" person.FIDCardAddress IDCardAddress, ");
+            sel.append(" l.FWORKPLACE as CurrentAddress, ");
+            sel.append(" to_char( ");
+            sel.append("  case ");
+            sel.append("   when person.FGender = 1 then 'male' ");
+            sel.append("   when person.FGender = 2 then 'female' ");
+            sel.append("   else '' ");
+            sel.append("  end ");
+            sel.append(" ) as Sex, ");
+            sel.append(" to_char(person.FBirthday, 'yyyy-MM-dd') as BirthDate, ");
+            sel.append(" mz.FName_L1 as Ethnicity, ");
+            sel.append(" hj.FName_L1 as HukouType, ");
+            sel.append(" to_char(person.cfhrd, 'yyyy-MM-dd') as HouseholdRegisteredDate, ");
+            sel.append(" person.FNativePlace_L2 as Nativeplace, ");
+            sel.append(" zm.FName_L1 as PoliticaStatus, ");
+            sel.append(" hy.FName_L1 as MaritalStatus, ");
+            sel.append(" l.FPostalcode as Zipcode, ");
+            sel.append(" qrz.CFSchool as GraduatedSchoolofHighestAcademicDegree, ");
+            sel.append(" qxl.FName_L1 as HighestAcademicDegree, ");
+            sel.append(" qxw.FName_L1 as HighestQualificationOfFulltimeEducation, ");
+            sel.append(" qrz.CFMajor as Majoroffulltimeeducation, ");
+            sel.append(" qrz.CFGraduation as GraduatedDate, ");
+            sel.append(" fqrz.CFSchool as GraduateSchoolofHighestDegreeofParttimeEducation, ");
+            sel.append(" fqxl.FName_L1 as HighestDegreeofParttimeEducation, ");
+            sel.append(" fqxw.FName_L1 as HighestQualificationofParttimeeducation, ");
+            sel.append(" fqrz.CFMajor as MajorofParttimeeducation, ");
+            sel.append(" l.FLinkName as emergencyContact, ");
+            sel.append(" l.FLinkTelNum as telephoneofemergency, ");
+            sel.append(" l.CFRelationship as relationship, ");
+            sel.append(" '' as TerminationDate, ");
+            sel.append(" '' as TerminationReason, ");
+            sel.append(" bt.fname_l1 as EmployeeType, ");
+            sel.append(" case ");
+            sel.append("  bt.finservice ");
+            sel.append("  when 1 then 'active' ");
+            sel.append("  when 4 then 'active' ");
+            sel.append("  else 'inactive' ");
+            sel.append(" end as InService, ");
+            sel.append(" person.fpersonid as personId, ");
+            sel.append(" personType.fId as personTypeId, ");
+            sel.append(" pEntry.fpreenterdate as enterDate, ");
+            sel.append(" { ts '2199-12-31' } as leftDate, ");
+            sel.append(" pEntry.fpreenterdate as deadline2, ");
+            sel.append(" pEntry.fpreenterdate as deadline1, ");
+            sel.append(" case ");
+            sel.append("  bt.finservice ");
+            sel.append("  when 1 then 1 ");
+            sel.append("  when 4 then 1 ");
+            sel.append("  else 2 ");
+            sel.append(" end as \"status\", ");
+            sel.append(" pEntry.fid as id, ");
+            sel.append(" pEntry.cfemptypeid as laborrelationstateId ");
+            sel.append("   from T_HR_PreEntry pEntry ");
+            sel.append(" left join T_HR_PreEntryPerson person on person.fid = pEntry.ftalentid ");
+            sel.append(" left join T_HR_BDEmployeeType bt on bt.fid = pEntry.cfemptypeid ");
+            sel.append(" left join t_org_admin c on pEntry.fadminorgunitid = c.FID ");
+            sel.append(" left join t_org_position d on pEntry.fpositionid = d.FID ");
+            sel.append(" left join t_org_job e on d.FJOBID = e.fid ");
+            sel.append(" left join CT_MP_WorkerCategory personType on pEntry.cfwcategoryid = personType.fid ");
+            sel.append(" left join t_hr_jobgrade jg on pEntry.CFJOBGRADEID = jg.FID ");
+            sel.append(" left join T_HR_EmployeeClassify blx on pEntry.CFPersontypeID = blx.fid ");
+            sel.append(" left join CT_MP_Fullorpart lsqzjz on lsqzjz.fid = pEntry.cfftorptid ");
+            sel.append(" left join t_bd_person j on pEntry.CFlmanagerID = j.fid ");
+            sel.append(" left join T_HR_PEPersonContact l on l.ftalentid = pEntry.ftalentid ");
+            sel.append(" left join T_BD_Nationality m on person.FNationalityID = m.fid ");
+            sel.append(" left join( ");
+            sel.append("  SELECT pct.CFExpirationDate, ");
+            sel.append("   pct.FCredentialsTypeNO, ");
+            sel.append("   pct.ftalentid, ");
+            sel.append("   pct.FIssueDate ");
+            sel.append("  FROM T_HR_PEPersonCredentialsType pct ");
+            sel.append("   INNER join( ");
+            sel.append(" select max(pcta.CFExpirationDate) CFExpirationDate, ");
+            sel.append("  pcta.ftalentid ");
+            sel.append(" from T_HR_PEPersonCredentialsType pcta ");
+            sel.append("  left join T_HR_CredentialsType ctb on pcta.FCredentialsTypeID = ctb.fid ");
+            sel.append(" where ctb.FNUMBER = 'CWP' ");
+            sel.append(" group by pcta.ftalentid ");
+            sel.append("   ) pctMax on pct.ftalentid = pctMax.ftalentid ");
+            sel.append("   and pct.CFExpirationDate = pctMax.CFExpirationDate ");
+            sel.append("   inner join T_HR_CredentialsType ct on pct.FCredentialsTypeID = ct.fid ");
+            sel.append("  where ct.FNUMBER = 'CWP' ");
+            sel.append(" ) v on person.fid = v.ftalentid ");
+            sel.append(" left join( ");
+            sel.append("  SELECT pct.CFExpirationDate, ");
+            sel.append("   pct.FCredentialsTypeNO, ");
+            sel.append("   pct.ftalentid, ");
+            sel.append("   pct.FIssueDate ");
+            sel.append("  FROM T_HR_PEPersonCredentialsType pct ");
+            sel.append("   INNER join( ");
+            sel.append(" select max(pcta.CFExpirationDate) CFExpirationDate, ");
+            sel.append("  pcta.ftalentid ");
+            sel.append(" from T_HR_PEPersonCredentialsType pcta ");
+            sel.append("  left join T_HR_CredentialsType b on pcta.FCredentialsTypeID = b.fid ");
+            sel.append(" where b.FNUMBER = 'CFRP' ");
+            sel.append(" group by pcta.ftalentid ");
+            sel.append("   ) pctMax on pct.ftalentid = pctMax.ftalentid ");
+            sel.append("   and pct.CFExpirationDate = pctMax.CFExpirationDate ");
+            sel.append("   inner join T_HR_CredentialsType ct on pct.FCredentialsTypeID = ct.fid ");
+            sel.append("  where ct.FNUMBER = 'CFRP' ");
+            sel.append(" ) w on person.fid = w.ftalentid ");
+            sel.append(" left join T_BD_HRFolk mz on mz.fid = person.FFOLKID ");
+            sel.append(" left join T_BD_HRPolitical zm on zm.fid = person.FPoliticalFaceID ");
+            sel.append(" left join T_BD_HRWed hy on hy.fid = person.FWedID ");
+            sel.append(" left join T_BD_Regpermresidence hj on hj.fid = person.FREGRESIDENCEID ");
+            sel.append(" left join CT_MP_Fulleducation qrz on qrz.ftalentid = person.fid ");
+            sel.append(" left join T_BD_HRDiploma qxl on qrz.CFBackgroundID = qxl.fid ");
+            sel.append(" left join T_BD_HRDegree qxw on qxw.fid = qrz.CFDegreeID ");
+            sel.append(" left join CT_MP_Parteducation fqrz on fqrz.ftalentid = person.fid ");
+            sel.append(" left join T_BD_HRDiploma fqxl on fqrz.CFBackgroundID = fqxl.fid ");
+            sel.append(" left join T_BD_HRDegree fqxw on fqxw.fid = fqrz.CFDegreeID ");
+            sel.append("   where pEntry.fcheckinstate = 4 ");
+            sel.append(" and pEntry.fbillstate = 3 ");
+            sel.append("  ) preEntry ");
+            if ((null != entityViewInfo) && (entityViewInfo.getFilter() != null)) {
+                FilterItemCollection fc = entityViewInfo.getFilter().getFilterItems();
+                FilterInfo filterInfo1 = new FilterInfo();
+                for (int i = 0; i < fc.size(); i++) {
+                    FilterItemInfo itemInfo = fc.get(i);
+                    if (!"deadline2".equals(itemInfo.getPropertyName())) {
+                        filterInfo1.getFilterItems().add(itemInfo);
+                    }
+                }
+                String andSql = filterInfo1.toSql();
+                if (org.apache.commons.lang3.StringUtils.isNotBlank(andSql)) {
+                    andSql = andSql.replaceAll("personType.id", "personTypeId");
+                    andSql = andSql.replaceAll("person.id", "personId");
+                    andSql = andSql.replaceAll("periodEmployment", "enterDate");
+                    andSql = andSql.replaceAll("periodResignation", "leftDate");
+                    sel.append(new StringBuilder().append(" where ").append(andSql).append(" ").toString());
+                }
+            }
+//            if (null != entityViewInfo && entityViewInfo.getFilter() != null) {
+//                String andSql=entityViewInfo.getFilter().toSql();
+//                if (org.apache.commons.lang3.StringUtils.isNotBlank(andSql)) {
+//                    andSql = andSql.replaceAll("personType.id", "personTypeId");
+//                    andSql = andSql.replaceAll("person.id", "personId");
+//                    andSql = andSql.replaceAll("periodEmployment", "enterDate");
+//                    andSql = andSql.replaceAll("periodResignation", "leftDate");
+//                    sel.append(" where " + andSql + " ");
+//                }
+//            }
+            sel.append(" ) temp  ");
+            sel.append(" order by " + sorterItems);
+            //分页处理
+            //获取总行数
+            Long records = 0L;
+            boolean isAll = Boolean.valueOf(request.getParameter("isAll"));
+            if (!isAll) {
+                StringBuffer countsb = new StringBuffer(sel);
+                countsb.insert(0, "select count(1) records from ( ");
+                countsb.append(") temp_row  ");
+                int pageStart = ((Integer.valueOf(page) - 1) * Integer.valueOf(rows));
+                int pageEnd = (pageStart + Integer.valueOf(rows));
+                sel.insert(0, " select * from ( ");
+                sel.append(" ) temp_row ");
+                sel.append(" where rownumber > ").append(pageStart);
+                sel.append(" and rownumber <= " + pageEnd);
+                IRowSet countRs = DbUtil.executeQuery(ctx, countsb.toString());
+                if (countRs.next()) {
+                    records = countRs.getLong("records");
+                }
+                System.out.println("countsb:" + countsb.toString());
+            }
+
+            System.out.println("sqls:" + sel.toString());
+            IRowSet rs = DbUtil.executeQuery(ctx, sel.toString());
+            List<Map<String, Object>> rowList = Lists.newArrayList();
+            while (rs.next()) {
+                String pid = rs.getString("id");
+                String billType = rs.getString("billType");
+                Map<String, Object> row = Maps.newHashMap();
+                //处理页面配置字段值
+                for (int i = 0; i < columnModels.size(); i++) {
+                    String key = columnModels.get(i);
+                    row.put(key, rs.getString(key));
+                }
+                if (!StringUtils.isEmpty(billType)) {
+                    row.put("billType", billType);
+                }
+                if (!StringUtils.isEmpty(pid)) {
+                    row.put("id", pid);
+                }
+                rowList.add(row);
+            }
+            gridDataEntity.setRows(rowList);
+            if (!isAll) {
+                int total = 0;
+                if (records % rows == 0) {
+                    total = (int) (records / rows);
+                } else {
+                    total = (int) (records / rows + 1);
+                }
+                gridDataEntity.setTotal(total);
+                gridDataEntity.setPage(page);
+                gridDataEntity.setRecords(records);
+            } else {
+                gridDataEntity.setTotal(1);
+                gridDataEntity.setPage(page);
+                gridDataEntity.setRecords(rowList.size());
+            }
+            Map userData = Maps.newHashMap();
+            userData.put("isExportAllToExcelCount", Boolean.valueOf(true));
+            userData.put("rows", Integer.valueOf(rows));
+            userData.put("page", Integer.valueOf(page));
+            gridDataEntity.setUserdata(userData);
+            Long end = System.currentTimeMillis();
+            System.out.println(this.getClass().toString() + ":start-->" + start);
+            System.out.println(this.getClass().toString() + ":end-->" + end);
+            System.out.println(this.getClass().toString() + ":end-start-->" + (end - start));
+        } catch (IllegalStateException var7) {
+            if (!StringUtils.isEmpty(var7.getMessage()) && var7.getMessage().indexOf("Please process pk") > -1) {
+                String message = var7.getMessage().replace("Please process pk", "").replace("at LocalBOSObjectFactory", "").replace("\\", ".");
+                throw new ShrWebBizException(MessageFormat.format(SHRWebResource.getString("com.kingdee.shr.base.syssetting.SHRSyssettingResource", "metadata_not_exist"), message), var7);
+            } else {
+                throw var7;
+            }
+        } catch (BOSException var8) {
+            logger.error(var8);
+            throw new ShrWebBizException(var8);
+        } catch (ParserException var9) {
+            logger.error(var9);
+            throw new ShrWebBizException(var9);
+        } catch (SQLException throwables) {
+            logger.error(throwables);
+            throw new ShrWebBizException(throwables);
+        }
+        return gridDataEntity;
+    }
+
+    /**
+     * 导出处理
+     *
+     * @param request
+     * @param response
+     * @param modelMap
+     * @param helper
+     * @param excelConfig
+     * @throws SHRWebException
+     */
+    protected void exportAllToExcel(HttpServletRequest request, HttpServletResponse response, ModelMap modelMap, ExportHelper helper, Map<String, Object> excelConfig) throws SHRWebException {
+        long start = 0L;
+        long end = 0L;
+        List listData = null;
+        if (logger.isDebugEnabled()) {
+            start = System.currentTimeMillis();
+        }
+        Context ctx = SHRContext.getInstance().getContext();
+        GridDataEntity gridDataEntity = this.getGridRequestData(request, response, modelMap);
+        request.setAttribute("_userData_", gridDataEntity.getUserdata());
+        this.doFieldPermFilter(gridDataEntity);
+        if (logger.isDebugEnabled()) {
+            end = System.currentTimeMillis();
+            logger.debug(MessageFormat.format("handler: {0}, get list data, cost: {1}", this.getClass().getName(), end - start));
+        }
+        listData = gridDataEntity.getRows();
+        this.afterGetExportData(request, response, listData);
+        String isSensitive = request.getParameter("isSensitive");
+        if ("true".equals(isSensitive)) {
+            IDataSensitiveEngineService iDataSensitiveEngineService = new DataSensitiveEngineService(ctx);
+            iDataSensitiveEngineService.convertSensitiveData(listData, this.getUipk(request));
+        }
+        helper.fillData0(excelConfig, listData);
+        listData = null;
+        gridDataEntity = null;
+    }
+}

+ 14 - 5
GDYSL/websrc/com/kingdee/shr/customer/gtiit/rpt/PersonRosterListHandler.java

@@ -13,6 +13,7 @@ import java.util.stream.Collectors;
 import javax.servlet.http.HttpServletRequest;
 import javax.servlet.http.HttpServletResponse;
 
+import org.json.JSONException;
 import org.springframework.ui.ModelMap;
 import com.kingdee.shr.base.syssetting.web.json.JSONUtils;
 import com.alibaba.fastjson.JSON;
@@ -76,7 +77,7 @@ public class PersonRosterListHandler extends ListHandler {
 	}
 
 	public void getGridDataAction(HttpServletRequest request, HttpServletResponse response, ModelMap modelMap)
-			throws BOSException, SQLException, SHRWebException {
+			throws BOSException, SQLException, SHRWebException, JSONException {
 		int rows = Integer.parseInt(request.getParameter("rows"));
 		int page = Integer.parseInt(request.getParameter("page"));
 		// 获取过滤条件
@@ -491,7 +492,11 @@ public class PersonRosterListHandler extends ListHandler {
 				"left join t_org_admin c on b.FAdminOrgID = c.FID \r\n" + 
 				"left join t_org_position d on b.fpositionid = d.FID \r\n" + 
 				"left join t_org_job e on d.FJOBID = e.fid");
-		sql.append(" left join ( SELECT a.FPERSONID ,b.FNAME_l1 as Level FROM T_HR_EmpPostRank a left join t_hr_jobgrade b on a.FJOBGRADEID  = b.FID  where a.feffdt<="+"'"+deadline+"'"+" and a.fleffdt >="+"'"+deadline+"' ) f on a.fid = f.FPERSONID");
+		sql.append(" left join ( SELECT a.FPERSONID ,b.FNAME_l1 as Level FROM T_HR_EmpPostRank a left join t_hr_jobgrade b on a.FJOBGRADEID  = b.FID  " );
+				if(StringUtils.isNotBlank(deadline)) {
+					sql.append(" where a.feffdt<=" + "'" + deadline + "'" + " and a.fleffdt >=" + "'" + deadline + "'  ");
+				}
+		sql.append(" ) f on a.fid = f.FPERSONID ");
 		sql.append(" left join CT_MP_WorkerCategory g on b.CFWorkercategoryID = g.fid \r\n" + 
 				"left join CT_MP_Fullorpart h on a.CFFtorptID = h.fid\r\n" + 
 				"left join T_HR_EmployeeClassify i on a.CFPersontypeID = i.FID \r\n" + 
@@ -532,8 +537,12 @@ public class PersonRosterListHandler extends ListHandler {
 				"SELECT DATEADD(DAY, -1,  max(feffdt)) as feffdt,fpersonid FROM  t_hr_emplaborrelationhis  where flaborrelationstateid=(\r\n" + 
 				"SELECT fid FROM T_HR_BDEmployeeType where FNUMBER ='S09')  group by fpersonid )ygls on a.fid=ygls.fpersonid");
 		sql.append(" left join T_HR_EmployeeClassify blx on b.CFPersontypeID=blx.fid\r\n" + 
-				"left join (SELECT * FROM T_BD_PersonHis where FEFFDT<="+"'"+deadline+"'"+" and FLEFFDT >="+"'"+deadline+"')ryls on ryls.FHistoryRelateID=a.fid\r\n" + 
-				"left join  T_HR_EmployeeClassify lsx on lsx.fid=ryls.CFPersontypeID "
+				"left join (SELECT * FROM T_BD_PersonHis ");
+		if(StringUtils.isNotBlank(deadline)) {
+			sql.append(" where FEFFDT<="+"'"+deadline+"'"+" and FLEFFDT >="+"'"+deadline+"'");
+		}
+		sql.append(" ) ryls on ryls.FHistoryRelateID=a.fid\r\n  ");
+		sql.append(" left join  T_HR_EmployeeClassify lsx on lsx.fid=ryls.CFPersontypeID "
 				+ "left join CT_MP_Fullorpart qzjz on b.CFFtorptID=qzjz.fid\r\n" + 
 				" left join CT_MP_Fullorpart lsqzjz on lsqzjz.fid= ryls.CFFtorptID");
 		// 传了多个人员需要拆开拼接sql
@@ -768,7 +777,7 @@ public class PersonRosterListHandler extends ListHandler {
 
 	// 导出数据
 	public String toExcelAction(HttpServletRequest request, HttpServletResponse response, ModelMap modelMap)
-			throws BOSException, SQLException, SHRWebException {
+			throws BOSException, SQLException, SHRWebException, JSONException {
 
 		// 获取过滤条件
 		String fastFilterItems = request.getParameter("fastFilterItems");