9060 hace 2 meses
padre
commit
64334d8578

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

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

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

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

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