3 Commits b38d9ac44a ... f0f0b8ca89

Tác giả SHA1 Thông báo Ngày
  yuanzhi_kuang f0f0b8ca89 AD域登录改造 2 tuần trước cách đây
  yuanzhi_kuang c2b7ce8b00 工资包更新 2 tuần trước cách đây
  yuanzhi_kuang af22774203 后台任务 2 tuần trước cách đây

+ 61 - 0
GDYSL/src/com/kingdee/bos/sso/client/filter/ConfigAddressUtil.java

@@ -0,0 +1,61 @@
+package com.kingdee.bos.sso.client.filter;
+
+import java.io.File;
+import java.io.FileInputStream;
+import java.io.FileNotFoundException;
+import java.io.IOException;
+import java.util.Properties;
+import org.apache.commons.configuration.ConfigurationException;
+import org.apache.commons.configuration.PropertiesConfiguration;
+import org.apache.log4j.Logger;
+
+public class ConfigAddressUtil {
+    private static Logger logger = Logger.getLogger(ConfigAddressUtil.class);
+    static Properties prop = null;
+
+
+
+    public static void getProperties() {
+        String configFilePath = System.getProperty("eas.properties.dir") + "/adSsoConfig.properties";
+        logger.info("配置文件路径:" + configFilePath);
+        System.out.println("配置文件路径:" + configFilePath);
+        File configFile = new File(configFilePath);
+        prop = new Properties();
+        FileInputStream fin = null;
+
+        try {
+            fin = new FileInputStream(configFile);
+            PropertiesConfiguration config = new PropertiesConfiguration();
+            config.load(fin, "UTF-8");
+            prop.setProperty("authUrl", config.getString("authUrl"));
+            prop.setProperty("tokenUrl", config.getString("tokenUrl"));
+            prop.setProperty("refreshTokenUrl", config.getString("refreshTokenUrl"));
+            prop.setProperty("client_id", config.getString("client_id"));
+            prop.setProperty("client_secret", config.getString("client_secret"));
+            prop.setProperty("url", config.getString("shrUrl"));
+            prop.setProperty("userUrl", config.getString("userUrl"));
+            prop.setProperty("dataCenter", config.getString("dataCenter"));
+            prop.setProperty("locale", config.getString("locale"));
+            prop.setProperty("mobileEid", config.getString("mobileEid"));
+        } catch (FileNotFoundException var16) {
+            logger.error("ConfigAddressUtil.....FileNotFoundException ", var16);
+        } catch (IOException var17) {
+            logger.error("ConfigAddressUtil.....IOException ", var17);
+        } catch (ConfigurationException var18) {
+            logger.error("ConfigAddressUtil.....ConfigurationException ", var18);
+        } finally {
+            try {
+                fin.close();
+            } catch (IOException var15) {
+                logger.error("ConfigAddressUtil.....IOException ", var15);
+            }
+
+        }
+
+    }
+
+    public static String getProperty(String fileName) {
+        getProperties();
+        return prop.getProperty(fileName);
+    }
+}

+ 472 - 0
GDYSL/src/com/kingdee/bos/sso/client/filter/authentication/KDPortalAuthenticationFilter.java

@@ -0,0 +1,472 @@
+package com.kingdee.bos.sso.client.filter.authentication;
+
+import com.kingdee.bos.BOSException;
+import com.kingdee.bos.Context;
+import com.kingdee.bos.dao.IObjectValue;
+import com.kingdee.bos.metadata.entity.EntityViewInfo;
+import com.kingdee.bos.metadata.entity.FilterInfo;
+import com.kingdee.bos.metadata.entity.FilterItemInfo;
+import com.kingdee.bos.metadata.query.util.CompareType;
+import com.kingdee.bos.sso.client.util.CommonUtils;
+import com.kingdee.bos.sso.client.util.ConfigAddressUtil;
+import com.kingdee.bos.sso.client.util.FilterUtil;
+import com.kingdee.bos.sso.client.util.StringUtil;
+import com.kingdee.eas.base.myeas.PrivacyStatementCustomCollection;
+import com.kingdee.eas.base.myeas.PrivacyStatementCustomFactory;
+import com.kingdee.eas.base.myeas.PrivacyStatementCustomInfo;
+import com.kingdee.eas.base.myeas.PrivacyStatementFactory;
+import com.kingdee.eas.base.usermonitor.IUserMonitor;
+import com.kingdee.eas.base.usermonitor.UserMonitorFactory;
+import com.kingdee.eas.base.usermonitor.UserMonitorSessionInfo;
+import com.kingdee.eas.cp.common.web.util.WebContextUtil;
+import com.kingdee.eas.cp.eip.sso.qrcode.helper.QrCodeTokenHelper;
+import com.kingdee.util.StringUtils;
+import java.io.IOException;
+import java.lang.reflect.Field;
+import java.net.MalformedURLException;
+import java.net.URL;
+import java.net.URLDecoder;
+import java.util.HashMap;
+import java.util.Map;
+import javax.servlet.FilterChain;
+import javax.servlet.ServletException;
+import javax.servlet.ServletRequest;
+import javax.servlet.ServletResponse;
+import javax.servlet.http.HttpServletRequest;
+import javax.servlet.http.HttpServletResponse;
+import javax.servlet.http.HttpSession;
+import org.jasig.cas.client.Protocol;
+import org.jasig.cas.client.authentication.AuthenticationRedirectStrategy;
+import org.jasig.cas.client.authentication.ContainsPatternUrlPatternMatcherStrategy;
+import org.jasig.cas.client.authentication.DefaultAuthenticationRedirectStrategy;
+import org.jasig.cas.client.authentication.DefaultGatewayResolverImpl;
+import org.jasig.cas.client.authentication.EntireRegionRegexUrlPatternMatcherStrategy;
+import org.jasig.cas.client.authentication.ExactUrlPatternMatcherStrategy;
+import org.jasig.cas.client.authentication.GatewayResolver;
+import org.jasig.cas.client.authentication.RegexUrlPatternMatcherStrategy;
+import org.jasig.cas.client.authentication.UrlPatternMatcherStrategy;
+import org.jasig.cas.client.configuration.ConfigurationKeys;
+import org.jasig.cas.client.util.AbstractCasFilter;
+import org.jasig.cas.client.validation.Assertion;
+
+public class KDPortalAuthenticationFilter extends AbstractCasFilter {
+    private boolean getServerNameFromRequest;
+    private boolean getServerLoginUrlFromRequest;
+    private String serverLoginUrl;
+    private String casServerLoginUrl;
+    private boolean renew;
+    private boolean gateway;
+    private String method;
+    private GatewayResolver gatewayStorage;
+    private AuthenticationRedirectStrategy authenticationRedirectStrategy;
+    private static final Map<String, Class<? extends UrlPatternMatcherStrategy>> PATTERN_MATCHER_TYPES = new HashMap();
+
+    static {
+        PATTERN_MATCHER_TYPES.put("CONTAINS", ContainsPatternUrlPatternMatcherStrategy.class);
+        PATTERN_MATCHER_TYPES.put("REGEX", RegexUrlPatternMatcherStrategy.class);
+        PATTERN_MATCHER_TYPES.put("FULL_REGEX", EntireRegionRegexUrlPatternMatcherStrategy.class);
+        PATTERN_MATCHER_TYPES.put("EXACT", ExactUrlPatternMatcherStrategy.class);
+    }
+
+    public KDPortalAuthenticationFilter() {
+        this(Protocol.CAS2);
+    }
+
+    protected KDPortalAuthenticationFilter(Protocol protocol) {
+        super(protocol);
+        this.renew = false;
+        this.gateway = false;
+        this.gatewayStorage = new DefaultGatewayResolverImpl();
+        this.authenticationRedirectStrategy = new DefaultAuthenticationRedirectStrategy();
+    }
+
+    public void init() {
+        super.init();
+        String message = String.format("one of %s and %s must not be null.", ConfigurationKeys.CAS_SERVER_LOGIN_URL.getName(), ConfigurationKeys.CAS_SERVER_URL_PREFIX.getName());
+        CommonUtils.assertNotNull(this.casServerLoginUrl, message);
+    }
+
+    public final void doFilter(ServletRequest servletRequest, ServletResponse servletResponse, FilterChain filterChain) throws IOException, ServletException {
+        HttpServletRequest request = (HttpServletRequest)servletRequest;
+        HttpServletResponse response = (HttpServletResponse)servletResponse;
+        if (this.isRequestUrlExcluded(request)) {
+            this.logger.debug("Request is ignored.");
+            filterChain.doFilter(request, response);
+        } else {
+            boolean sessionRenew = false;
+            String userNum = "";
+            HttpSession session = request.getSession(false);
+            String servletPath = request.getServletPath();
+            String assignmentId = request.getParameter("AssignmentId");
+            this.logger.info("doFilter..........判断是否移动端:servletPath{} ", servletPath);
+            this.logger.info("doFilter..........assignmentId{} ", assignmentId);
+            String isAdauth = String.valueOf(request.getSession(false).getAttribute("isAdauth"));
+            String password = request.getParameter("password");
+            String kdacctoken = request.getParameter("kdacctoken");
+            this.logger.info("doFilter..........isAdauth{} ", isAdauth);
+            this.logger.info("doFilter..........password{} ", password);
+            this.logger.info("doFilter..........kdacctoken{} ", kdacctoken);
+            boolean flag = false;
+            if ("/web_frame/easrpc/loginCheck.action".equals(servletPath) && (!StringUtils.isEmpty(password) || StringUtils.isEmpty(kdacctoken))) {
+                flag = true;
+            }
+
+            if ("/shr/msf/service.do".equals(servletPath) || "/web_frame/easrpc/login.do".equals(servletPath)) {
+                flag = true;
+            }
+
+            if ("/mulLan.do".equals(request.getServletPath())) {
+                flag = true;
+            }
+
+            if (!"true".equals(isAdauth) && "/home.do".equals(servletPath)) {
+                flag = true;
+            }
+
+            if ("/adsso".equals(servletPath)) {
+                flag = false;
+            }
+
+            String username = request.getParameter("kdacccode");
+            this.logger.info("doFilter..........进入移动端2:username1{} ", username);
+            if (StringUtils.isEmpty(username)) {
+                username = request.getParameter("username");
+            }
+
+            if (StringUtils.isEmpty(username)) {
+                username = request.getParameter("usern");
+            }
+
+            this.logger.info("doFilter..........进入移动端2:username2{} ", username);
+            Assertion assertion;
+            String serviceUrl;
+            if (username != null) {
+                HttpSession httpSession = request.getSession(false);
+                assertion = httpSession != null ? (Assertion)httpSession.getAttribute("_const_cas_assertion_") : null;
+                if (assertion != null) {
+                    username = URLDecoder.decode(username, "UTF-8");
+                    this.logger.info("doFilter..........进入移动端2:username3{} ", username);
+                    serviceUrl = assertion.getPrincipal().getName();
+                    userNum = serviceUrl;
+                    this.logger.info("doFilter..........进入移动端2:ctxUsername{} ", serviceUrl);
+                    this.logger.info("doFilter..........进入移动端2:userNum{} ", serviceUrl);
+                    if (serviceUrl != null && !serviceUrl.equalsIgnoreCase(username)) {
+                        httpSession.setAttribute("_const_cas_assertion_", (Object)null);
+                        httpSession.setAttribute("KD_PORTAL_IS_INIT_CONTEXT", (Object)null);
+                        httpSession.invalidate();
+                        sessionRenew = true;
+                    }
+
+                    if (httpSession.getAttribute("userMonitorSessionInfo") != null) {
+                        UserMonitorSessionInfo userMonitorSessionInfo = (UserMonitorSessionInfo)httpSession.getAttribute("userMonitorSessionInfo");
+
+                        try {
+                            IUserMonitor iUserMonitor = UserMonitorFactory.getRemoteInstance();
+                            IObjectValue info = iUserMonitor.getValue(userMonitorSessionInfo.getId());
+                            if (info == null) {
+                                httpSession.setAttribute("_const_cas_assertion_", (Object)null);
+                                httpSession.setAttribute("KD_PORTAL_IS_INIT_CONTEXT", (Object)null);
+                                httpSession.invalidate();
+                                sessionRenew = true;
+                            }
+                        } catch (Exception var26) {
+                            this.logger.error("checkUserBeTicked err!", var26);
+                        }
+                    }
+                }
+            }
+
+            String queryString;
+            String requestURL;
+            String constructServerName;
+            String userNumber;
+            String urlToRedirectTo;
+            if ("/webviews/workflow/transferApprove.jsp".equals(servletPath)) {
+                constructServerName = request.getHeader("user-agent");
+                this.logger.info("doFilter..........进入移动端2:requestHeader{} ", constructServerName);
+                int type = this.getDeviceType(constructServerName);
+                serviceUrl = null;
+                userNumber = "";
+                if (session != null) {
+                    Object userNumberObject = session.getAttribute("userNumber");
+                    if (userNumberObject != null) {
+                        userNumber = (String)userNumberObject;
+                    }
+                }
+
+                this.logger.info("doFilter..........进入移动端2:userNumber{} ", userNumber);
+                if (type == 1 || type == 2) {
+                    this.logger.info("doFilter..........进入移动端2.getDeviceType:type{} ", type);
+                    this.logger.info("doFilter..........进入移动端2.getDeviceType:userNum{} ", userNum);
+                    Map<String, String> param2 = new HashMap();
+                    param2.put("assignmentId", assignmentId);
+                    session.setAttribute("assignment", param2);
+                    if (!StringUtils.isEmpty(userNumber)) {
+                        urlToRedirectTo = ConfigAddressUtil.getProperty("url");
+                        queryString = ConfigAddressUtil.getProperty("mobileEid");
+                        requestURL = urlToRedirectTo + "/index2.do?eid=" + queryString + "&appid=10036&param=" + userNumber;
+                        this.logger.info("doFilter.......进入移动端2...redirect{} ", requestURL);
+                        response.sendRedirect(requestURL);
+                    }
+                }
+            }
+
+            this.logger.info("doFilter..........不跳移动端2:{} ", servletPath);
+            this.setEncodeServiceUrl(true);
+            this.constructLoginUrl(servletRequest, sessionRenew);
+            constructServerName = this.constructServerName(servletRequest);
+            assertion = session != null ? (Assertion)session.getAttribute("_const_cas_assertion_") : null;
+            if (assertion != null) {
+                serviceUrl = request.getHeader("x-requested-with");
+                if (!"XMLHttpRequest".equals(serviceUrl) && this.checkIsNeedPirvacyStatement(request)) {
+                    this.logger.info("xrequestedwith......{}", serviceUrl);
+                    this.logger.info("request......{}", request);
+                    userNumber = this.constructServiceUrl(request, response);
+                    this.logger.info("constructServiceUrl......{}", userNumber);
+                    String url = "/portal";
+                    if (userNumber.contains("shr")) {
+                        url = "/shr";
+                    }
+
+                    response.sendRedirect("/eassso/privacyStatement/privacyStatementView.jsp?redirect=" + url);
+                } else {
+                    filterChain.doFilter(request, response);
+                }
+            } else {
+                serviceUrl = CommonUtils.constructServiceUrl(request, response, (String)null, this.getServerName(constructServerName), this.getProtocol().getServiceParameterName(), this.getProtocol().getArtifactParameterName(), true);
+                userNumber = this.retrieveTicketFromRequest(request);
+                boolean wasGatewayed = this.gateway && this.gatewayStorage.hasGatewayedAlready(request, serviceUrl);
+                if (!CommonUtils.isNotBlank(userNumber) && !wasGatewayed) {
+                    this.logger.debug("no ticket and no assertion found");
+                    String modifiedServiceUrl;
+                    if (this.gateway) {
+                        this.logger.debug("setting gateway attribute in session");
+                        modifiedServiceUrl = this.gatewayStorage.storeGatewayInformation(request, serviceUrl);
+                    } else {
+                        modifiedServiceUrl = serviceUrl;
+                    }
+
+                    this.logger.debug("Constructed service url: {}", modifiedServiceUrl);
+                    urlToRedirectTo = CommonUtils.constructRedirectUrl(this.casServerLoginUrl, this.getProtocol().getServiceParameterName(), modifiedServiceUrl, this.renew, this.gateway, this.method);
+                    this.logger.debug("redirecting to \"{}\"", urlToRedirectTo);
+                    if (!flag) {
+                        urlToRedirectTo = ConfigAddressUtil.getProperty("authUrl") + "?client_id=" + ConfigAddressUtil.getProperty("client_id") + "&response_type=code&redirect_uri=" + ConfigAddressUtil.getProperty("url") + "&response_mode=query&scope=openid%20https%3A%2F%2Fgraph.microsoft.com%2Fuser.read&state=12345";
+                        this.logger.info("Request is RequestURL..........{}", request.getRequestURL());
+                        this.logger.info("Request is QueryString..........{}", request.getQueryString());
+                        session.setAttribute("isAdauth", "true");
+                        queryString = request.getQueryString();
+                        requestURL = String.valueOf(request.getRequestURL());
+                        if (!StringUtils.isEmpty(queryString) && !StringUtils.isEmpty(requestURL)) {
+                            Map<String, String> param = new HashMap();
+                            param.put("urlTo", requestURL + "?" + queryString);
+                            this.logger.info("Request is urlTo..........{}", requestURL + "?" + queryString);
+                            session.setAttribute("urlToMap", param);
+                        }
+                    }
+
+                    this.logger.info("doFilter.........urlToRedirectTo{}:", urlToRedirectTo);
+                    this.authenticationRedirectStrategy.redirect(request, response, urlToRedirectTo);
+                } else {
+                    filterChain.doFilter(request, response);
+                }
+            }
+        }
+    }
+
+    protected String retrieveTicketFromRequest(HttpServletRequest request) {
+        String code = request.getParameter("code");
+        return !StringUtil.isEmpty(code) ? code : super.retrieveTicketFromRequest(request);
+    }
+
+    private boolean checkIsNeedPirvacyStatement(HttpServletRequest request) {
+        Context easContext = WebContextUtil.getEasContext(request);
+        if (easContext == null) {
+            return false;
+        } else if (easContext.get("privacyStatementKey") != null) {
+            return false;
+        } else {
+            String userId = easContext.getCaller().toString();
+            if (!"00000000-0000-0000-0000-00000000000013B7DE7F".equalsIgnoreCase(userId) && !"00000000-0000-0000-0000-00000000000213B7DE7F".equalsIgnoreCase(userId) && !"Wp3rRSFxRCaPFjuE2apQjRO33n8=".equalsIgnoreCase(userId) && !"00000000-0000-0000-0000-00000000000113B7DE7F".equalsIgnoreCase(userId) && !"256c221a-0106-1000-e000-10d7c0a813f413B7DE7F".equalsIgnoreCase(userId)) {
+                int privacyStatement = QrCodeTokenHelper.getPrivacyStatement();
+                if (privacyStatement == 0) {
+                    easContext.put("privacyStatementKey", 4);
+                    return false;
+                } else {
+                    int count = 0;
+                    String htmlContent = "";
+
+                    try {
+                        if (privacyStatement == 1) {
+                            String versionTime = "YS20220901";
+                            EntityViewInfo entityViewInfo = new EntityViewInfo();
+                            FilterInfo filterInfo = new FilterInfo();
+                            filterInfo.getFilterItems().add(new FilterItemInfo("userid", userId, CompareType.EQUALS));
+                            filterInfo.getFilterItems().add(new FilterItemInfo("versionTime", versionTime, CompareType.EQUALS));
+                            entityViewInfo.setFilter(filterInfo);
+                            count = PrivacyStatementFactory.getLocalInstance(easContext).getPrivacyStatementCollection(entityViewInfo).size();
+                        } else {
+                            EntityViewInfo entityViewInfo = new EntityViewInfo();
+                            FilterInfo filterInfo = new FilterInfo();
+                            filterInfo.getFilterItems().add(new FilterItemInfo("status", "ENABLE", CompareType.EQUALS));
+                            entityViewInfo.setFilter(filterInfo);
+                            PrivacyStatementCustomCollection customInfos = PrivacyStatementCustomFactory.getLocalInstance(easContext).getPrivacyStatementCustomCollection(entityViewInfo);
+                            if (customInfos.size() != 0) {
+                                PrivacyStatementCustomInfo privacyStatementCustomInfo = customInfos.get(0);
+                                filterInfo = new FilterInfo();
+                                filterInfo.getFilterItems().add(new FilterItemInfo("privacyCusId", privacyStatementCustomInfo.getId().toString(), CompareType.EQUALS));
+                                entityViewInfo = new EntityViewInfo();
+                                entityViewInfo.setFilter(filterInfo);
+                                count = PrivacyStatementFactory.getLocalInstance(easContext).getPrivacyStatementCollection(entityViewInfo).size();
+                                System.out.println("--- privacy state doExecute --count:" + count);
+                                htmlContent = privacyStatementCustomInfo.getHtmlContent();
+                            }
+                        }
+
+                        if (count > 0) {
+                            easContext.put("privacyStatementKey", 1);
+                            return false;
+                        }
+                    } catch (BOSException var11) {
+                        var11.printStackTrace();
+                        easContext.put("privacyStatementKey", 2);
+                        return false;
+                    }
+
+                    request.setAttribute("htmlContent", htmlContent);
+                    return true;
+                }
+            } else {
+                easContext.put("privacyStatementKey", 3);
+                return false;
+            }
+        }
+    }
+
+    private String getServerName(String constructServerName) {
+        if (constructServerName != null) {
+            return constructServerName;
+        } else {
+            try {
+                Class<?> clazz = this.getClass().getSuperclass();
+                Field field = clazz.getDeclaredField("serverName");
+                field.setAccessible(true);
+                return (String)field.get(this);
+            } catch (Exception var4) {
+                return null;
+            }
+        }
+    }
+
+    private String constructServerName(ServletRequest request) {
+        if (this.getServerNameFromRequest) {
+            StringBuilder serverName = new StringBuilder();
+            serverName.append(request.getServerName());
+            serverName.append(":");
+            serverName.append(request.getServerPort());
+            this.setServerName(serverName.toString());
+            return serverName.toString();
+        } else {
+            return null;
+        }
+    }
+
+    private void constructLoginUrl(ServletRequest request, boolean sessionRenew) {
+        HttpServletRequest httpRequest = (HttpServletRequest)request;
+        HttpSession session = httpRequest.getSession(false);
+        Assertion assertion = session != null ? (Assertion)session.getAttribute("_const_cas_assertion_") : null;
+
+        try {
+            URL contextURL = new URL(this.serverLoginUrl);
+            URL destURL = contextURL;
+            if (this.getServerLoginUrlFromRequest) {
+                destURL = new URL(request.getScheme(), request.getServerName(), request.getServerPort(), contextURL.getFile());
+            }
+
+            if (assertion != null) {
+                this.setCasServerLoginUrl(destURL.toString());
+            } else {
+                String dataCenter = request.getParameter("dataCenter");
+                String dbType = request.getParameter("dbType");
+                String locale = request.getParameter("locale");
+                String renew = request.getParameter("renew");
+                if (sessionRenew) {
+                    renew = "true";
+                }
+
+                String optionParam = "";
+                if (dataCenter != null && !"".equals(dataCenter.trim())) {
+                    optionParam = optionParam + (optionParam.startsWith("?") ? "&dataCenter=" : "?dataCenter=") + dataCenter;
+                }
+
+                if (dbType != null && !"".equals(dbType.trim())) {
+                    optionParam = optionParam + (optionParam.startsWith("?") ? "&dbType=" : "?dbType=") + dbType;
+                }
+
+                if (locale != null && !"".equals(locale.trim())) {
+                    optionParam = optionParam + (optionParam.startsWith("?") ? "&locale=" : "?locale=") + locale;
+                }
+
+                if (renew != null && !"".equals(renew.trim())) {
+                    optionParam = optionParam + (optionParam.startsWith("?") ? "&renew=" : "?renew=") + renew;
+                }
+
+                this.setCasServerLoginUrl(destURL.toString() + optionParam);
+            }
+        } catch (MalformedURLException var13) {
+            var13.printStackTrace();
+        }
+
+    }
+
+    public final void setRenew(boolean renew) {
+        this.renew = renew;
+    }
+
+    public final void setGateway(boolean gateway) {
+        this.gateway = gateway;
+    }
+
+    public void setMethod(String method) {
+        this.method = method;
+    }
+
+    public final void setCasServerUrlPrefix(String casServerUrlPrefix) {
+        this.setCasServerLoginUrl(CommonUtils.addTrailingSlash(casServerUrlPrefix) + "login");
+    }
+
+    public final void setCasServerLoginUrl(String casServerLoginUrl) {
+        this.casServerLoginUrl = casServerLoginUrl;
+    }
+
+    public final void setGatewayStorage(GatewayResolver gatewayStorage) {
+        this.gatewayStorage = gatewayStorage;
+    }
+
+    private boolean isRequestUrlExcluded(HttpServletRequest request) throws MalformedURLException {
+        return FilterUtil.isUnFilter(request);
+    }
+
+    public final void setIgnoreUrlPatternMatcherStrategyClass(UrlPatternMatcherStrategy ignoreUrlPatternMatcherStrategyClass) {
+    }
+
+    public final void setServerLoginUrl(String serverLoginUrl) {
+        this.serverLoginUrl = serverLoginUrl;
+        this.setCasServerLoginUrl(this.serverLoginUrl);
+    }
+
+    public final void setGetServerNameFromRequest(boolean getServerNameFromRequest) {
+        this.getServerNameFromRequest = getServerNameFromRequest;
+    }
+
+    public final void setGetServerLoginUrlFromRequest(boolean getServerLoginUrlFromRequest) {
+        this.getServerLoginUrlFromRequest = getServerLoginUrlFromRequest;
+    }
+
+    private int getDeviceType(String requestHeader) {
+        if (requestHeader.indexOf("Android") != -1) {
+            return 1;
+        } else {
+            return requestHeader.indexOf("iPhone") == -1 && requestHeader.indexOf("iPad") == -1 ? 3 : 2;
+        }
+    }
+}

+ 262 - 0
GDYSL/src/com/kingdee/bos/sso/client/filter/validation/KDPortalTicketValidationFilter.java

@@ -0,0 +1,262 @@
+package com.kingdee.bos.sso.client.filter.validation;
+
+import com.kingdee.bos.Context;
+import com.kingdee.bos.sso.client.util.ConfigAddressUtil;
+import com.kingdee.bos.sso.client.util.FilterUtil;
+import com.kingdee.bos.sso.client.util.StringUtil;
+import com.kingdee.eas.cp.eip.sso.util.CloudParamUtil;
+import com.kingdee.eas.util.app.DbUtil;
+import com.kingdee.jdbc.rowset.IRowSet;
+import com.kingdee.util.StringUtils;
+import java.net.HttpURLConnection;
+import java.net.MalformedURLException;
+import java.net.URL;
+import java.net.URLConnection;
+import java.util.HashMap;
+import java.util.Map;
+import javax.servlet.ServletRequest;
+import javax.servlet.http.HttpServletRequest;
+import javax.servlet.http.HttpServletResponse;
+import javax.servlet.http.HttpSession;
+import org.jasig.cas.client.authentication.AttributePrincipal;
+import org.jasig.cas.client.proxy.Cas20ProxyRetriever;
+import org.jasig.cas.client.proxy.ProxyGrantingTicketStorage;
+import org.jasig.cas.client.proxy.ProxyGrantingTicketStorageImpl;
+import org.jasig.cas.client.ssl.HttpURLConnectionFactory;
+import org.jasig.cas.client.util.CommonUtils;
+import org.jasig.cas.client.validation.Assertion;
+import org.jasig.cas.client.validation.Cas20ProxyReceivingTicketValidationFilter;
+import org.jasig.cas.client.validation.Cas20ProxyTicketValidator;
+import org.jasig.cas.client.validation.Cas20ServiceTicketValidator;
+import org.jasig.cas.client.validation.TicketValidator;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+public class KDPortalTicketValidationFilter extends Cas20ProxyReceivingTicketValidationFilter {
+    protected final Logger logger = LoggerFactory.getLogger(this.getClass());
+    private boolean getServerNameFromRequest;
+    private boolean getServerLoginUrlFromRequest;
+    private String casServerUrlPrefix;
+    private String acceptAnyProxy;
+    private String allowedProxyChains;
+    private String proxyCallbackUrl;
+    private boolean renew;
+    private String encoding;
+    private Map<String, String> additionalParameters = new HashMap();
+    private ProxyGrantingTicketStorage proxyGrantingTicketStorage = new ProxyGrantingTicketStorageImpl();
+
+    public KDPortalTicketValidationFilter() {
+    }
+
+    protected String retrieveTicketFromRequest(HttpServletRequest request) {
+        String servletPath = request.getServletPath();
+
+        try {
+            if (FilterUtil.isUnFilter(request)) {
+                return null;
+            }
+
+            this.constructLoginUrl(request);
+            this.constructServerName(request);
+            if (!"/webviews/workflow/viewProcessDiagram.jsp".equals(servletPath) && !"/dynamicPage.do".equals(servletPath) && !"/common/tree.do".equals(servletPath)) {
+                this.setTicketValidator(this.getTicketValidatorToSso(request));
+            } else {
+                this.setTicketValidator(this.getTicketValidator());
+            }
+        } catch (MalformedURLException var4) {
+            var4.printStackTrace();
+        }
+
+        String code = request.getParameter("code");
+        return !StringUtil.isEmpty(code) && !"/webviews/workflow/viewProcessDiagram.jsp".equals(servletPath) && !"/dynamicPage.do".equals(servletPath) && !"/common/tree.do".equals(servletPath) ? code : super.retrieveTicketFromRequest(request);
+    }
+
+    protected TicketValidator getTicketValidator() {
+        Cas20ServiceTicketValidator validator = null;
+        if (!CommonUtils.isNotBlank(this.acceptAnyProxy) && !CommonUtils.isNotBlank(this.allowedProxyChains)) {
+            validator = new Cas20ServiceTicketValidator(this.casServerUrlPrefix);
+        } else {
+            Cas20ProxyTicketValidator v = new Cas20ProxyTicketValidator(this.casServerUrlPrefix);
+            v.setAcceptAnyProxy("true".equalsIgnoreCase(this.acceptAnyProxy));
+            v.setAllowedProxyChains(CommonUtils.createProxyList(this.allowedProxyChains));
+        }
+
+        validator.setProxyCallbackUrl(this.proxyCallbackUrl);
+        validator.setProxyGrantingTicketStorage(this.proxyGrantingTicketStorage);
+        validator.setProxyRetriever(new Cas20ProxyRetriever(this.casServerUrlPrefix, this.encoding));
+        validator.setRenew(this.renew);
+        validator.setEncoding(this.encoding);
+        validator.setURLConnectionFactory(new KDPortalTicketConnectionFactory());
+        validator.setCustomParameters(this.additionalParameters);
+        return validator;
+    }
+
+    protected TicketValidator getTicketValidatorToSso(HttpServletRequest request) {
+        String code = request.getParameter("code");
+        String servletPath = request.getServletPath();
+        this.logger.info("KDPortalTicketValidationFilter......getTicketValidator...servletPath{} ", servletPath);
+        if (!StringUtil.isEmpty(code) && !"/webviews/workflow/viewProcessDiagram.jsp".equals(servletPath)) {
+            return new OAuth20CodeValidata();
+        } else {
+            Cas20ServiceTicketValidator validator = null;
+            if (!CommonUtils.isNotBlank(this.acceptAnyProxy) && !CommonUtils.isNotBlank(this.allowedProxyChains)) {
+                validator = new Cas20ServiceTicketValidator(this.casServerUrlPrefix);
+            } else {
+                Cas20ProxyTicketValidator v = new Cas20ProxyTicketValidator(this.casServerUrlPrefix);
+                v.setAcceptAnyProxy("true".equalsIgnoreCase(this.acceptAnyProxy));
+                v.setAllowedProxyChains(CommonUtils.createProxyList(this.allowedProxyChains));
+            }
+
+            validator.setProxyCallbackUrl(this.proxyCallbackUrl);
+            validator.setProxyGrantingTicketStorage(this.proxyGrantingTicketStorage);
+            validator.setProxyRetriever(new Cas20ProxyRetriever(this.casServerUrlPrefix, this.encoding));
+            validator.setRenew(this.renew);
+            validator.setEncoding(this.encoding);
+            validator.setURLConnectionFactory(new KDPortalTicketConnectionFactory());
+            validator.setCustomParameters(this.additionalParameters);
+            return validator;
+        }
+    }
+
+    protected void onSuccessfulValidation(HttpServletRequest request, HttpServletResponse response, Assertion assertion) {
+        try {
+            this.logger.info("onSuccessfulValidation......assertion{}", assertion);
+            AttributePrincipal principal = assertion.getPrincipal();
+            this.logger.info("onSuccessfulValidation......principal{}", principal);
+            if (principal == null) {
+                return;
+            }
+
+            String isIndependentDeployment = System.getProperty("cas.server.IsIndependentDeployment") == null ? "" : System.getProperty("cas.server.IsIndependentDeployment");
+            String dataCenter = "";
+            String locale = "";
+            this.logger.info("onSuccessfulValidation......isIndependentDeployment:{}", isIndependentDeployment);
+            dataCenter = ConfigAddressUtil.getProperty("dataCenter");
+            locale = ConfigAddressUtil.getProperty("locale");
+            this.logger.info("onSuccessfulValidation......dataCenter:{}", dataCenter);
+            this.logger.info("onSuccessfulValidation......locale:{}", locale);
+            String username = principal.getName();
+            this.logger.info("onSuccessfulValidation......username{}", username);
+            if (StringUtils.isEmpty(dataCenter) || StringUtils.isEmpty(locale) || StringUtils.isEmpty(username)) {
+                return;
+            }
+
+            Context ctx = CloudParamUtil.getContext(dataCenter, locale, "administrator");
+            String sql = "SELECT count(1) FROM T_PM_USER WHERE LOWER(FNUMBER)=?";
+            IRowSet rs = DbUtil.executeQuery(ctx, sql, new Object[]{username.toLowerCase()});
+            if (rs.next()) {
+                int count = Integer.valueOf(rs.getString(1));
+                if (count < 1) {
+                    this.logger.info("onSuccessfulValidation......notfounduser", username);
+                    response.sendRedirect("/eassso/unreg/unvalibaleUser.jsp?username=" + username);
+                }
+            }
+
+            HttpSession session = request.getSession();
+            if (session != null) {
+                String requestHeader = request.getHeader("user-agent");
+                this.logger.info("onSuccessfulValidation......跳转doFilter..........requestHeader{} ", requestHeader);
+                this.logger.info("request.getRequestURL():" + request.getRequestURL());
+                int type = this.getDeviceType(requestHeader);
+                String urlTo;
+                if (type == 1 || type == 2) {
+                    this.logger.info("跳转移动端.getDeviceType.type:" + type);
+                    String requestUrl = request.getRequestURL().toString();
+                    urlTo = ConfigAddressUtil.getProperty("mobileEid");
+                    this.logger.info("onSuccessfulValidation.eid:" + urlTo);
+                    this.logger.info("判断是否为移动端_onSuccessfulValidation.username:" + username);
+                    session.setAttribute("userNumber", username);
+                    String url = requestUrl + "index2.do?eid=" + urlTo + "&appid=10036&param=" + username;
+                    this.logger.info("onSuccessfulValidation......跳转移动端的URL:{}", url);
+                    response.sendRedirect(url);
+                    return;
+                }
+
+                Map<String, String> urlToMap = (Map)session.getAttribute("urlToMap");
+                if (urlToMap != null && urlToMap.size() > 0) {
+                    urlTo = (String)urlToMap.get("urlTo");
+                    this.logger.info("onSuccessfulValidation......urlTo{}...", urlTo);
+                    if (!StringUtils.isEmpty(urlTo)) {
+                        response.sendRedirect(urlTo);
+                        session.removeAttribute("urlToMap");
+                    }
+                }
+            }
+        } catch (Exception var18) {
+            var18.printStackTrace();
+        }
+
+    }
+
+    private int getDeviceType(String requestHeader) {
+        if (requestHeader.indexOf("Android") != -1) {
+            return 1;
+        } else {
+            return requestHeader.indexOf("iPhone") == -1 && requestHeader.indexOf("iPad") == -1 ? 3 : 2;
+        }
+    }
+
+    private void constructLoginUrl(ServletRequest request) {
+        if (this.getServerLoginUrlFromRequest) {
+            try {
+                URL contextURL = new URL(this.casServerUrlPrefix);
+                URL destURL = new URL(contextURL.getProtocol(), request.getServerName(), request.getServerPort(), contextURL.getFile());
+                this.casServerUrlPrefix = destURL.toString();
+            } catch (MalformedURLException var4) {
+                var4.printStackTrace();
+            }
+        }
+
+    }
+
+    private void constructServerName(ServletRequest request) {
+        if (this.getServerNameFromRequest) {
+            StringBuilder serverName = new StringBuilder();
+            serverName.append(request.getServerName());
+            serverName.append(":");
+            serverName.append(request.getServerPort());
+            this.setServerName(serverName.toString());
+        }
+
+    }
+
+    public final void setGetServerNameFromRequest(boolean getServerNameFromRequest) {
+        this.getServerNameFromRequest = getServerNameFromRequest;
+    }
+
+    public final void setGetServerLoginUrlFromRequest(boolean getServerLoginUrlFromRequest) {
+        this.getServerLoginUrlFromRequest = getServerLoginUrlFromRequest;
+    }
+
+    public final void setCasServerUrlPrefix(String casServerUrlPrefix) {
+        this.casServerUrlPrefix = casServerUrlPrefix;
+    }
+
+    public final void setAcceptAnyProxy(String acceptAnyProxy) {
+        this.acceptAnyProxy = acceptAnyProxy;
+    }
+
+    public final void setAllowedProxyChains(String allowedProxyChains) {
+        this.allowedProxyChains = allowedProxyChains;
+    }
+
+    public final void setProxyCallbackUrl(String proxyCallbackUrl) {
+        this.proxyCallbackUrl = proxyCallbackUrl;
+    }
+
+    public final void setRenew(boolean renew) {
+        this.renew = renew;
+    }
+
+    public final void setEncoding(String encoding) {
+        this.encoding = encoding;
+    }
+
+    class KDPortalTicketConnectionFactory implements HttpURLConnectionFactory {
+
+
+        public HttpURLConnection buildHttpURLConnection(URLConnection connection) {
+            return (HttpURLConnection)connection;
+        }
+    }
+}

+ 162 - 0
GDYSL/src/com/kingdee/bos/sso/client/filter/validation/OAuth20CodeValidata.java

@@ -0,0 +1,162 @@
+package com.kingdee.bos.sso.client.filter.validation;
+
+import com.alibaba.fastjson.JSON;
+import com.kingdee.bos.metadata.entity.EntityViewInfo;
+import com.kingdee.bos.metadata.entity.FilterInfo;
+import com.kingdee.bos.metadata.entity.FilterItemInfo;
+import com.kingdee.bos.metadata.entity.SelectorItemCollection;
+import com.kingdee.bos.metadata.entity.SelectorItemInfo;
+import com.kingdee.bos.sso.client.util.ConfigAddressUtil;
+import com.kingdee.bos.sso.client.util.HttpClientUtil;
+import com.kingdee.eas.base.permission.UserCollection;
+import com.kingdee.eas.base.permission.UserFactory;
+import java.net.URLEncoder;
+import java.util.HashMap;
+import java.util.Iterator;
+import java.util.Map;
+import oadd.org.apache.commons.lang.StringUtils;
+import org.jasig.cas.client.authentication.AttributePrincipalImpl;
+import org.jasig.cas.client.validation.Assertion;
+import org.jasig.cas.client.validation.AssertionImpl;
+import org.jasig.cas.client.validation.TicketValidationException;
+import org.jasig.cas.client.validation.TicketValidator;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+public class OAuth20CodeValidata implements TicketValidator {
+    protected final Logger logger = LoggerFactory.getLogger(this.getClass());
+
+
+
+    public Assertion validate(String code, String url) throws TicketValidationException {
+        String redirect_uri = ConfigAddressUtil.getProperty("url");
+        this.logger.info("validate....code:{}", code);
+        this.logger.info("validate....url:{}", url);
+        this.logger.info("validate....redirect_uri:{}", url);
+        String token = this.getToken(code, ConfigAddressUtil.getProperty("tokenUrl"), redirect_uri);
+        this.logger.info("validate....token:" + token);
+        String userEntity = this.getUser(token, ConfigAddressUtil.getProperty("userUrl"));
+        String user = "";
+        if (StringUtils.isNotBlank(userEntity)) {
+            String[] split = userEntity.split("@");
+            user = split[0];
+            this.logger.info("validate....user..split[0]:{}", user);
+        }
+
+        Map<String, Object> map = new HashMap();
+        map.put("solutionName", "eas");
+        map.put("dataCenter", ConfigAddressUtil.getProperty("dataCenter"));
+        map.put("locale", ConfigAddressUtil.getProperty("locale"));
+        map.put("dbType", "0");
+        map.put("userAuthPattern", "aseAD");
+        map.put("isPureWeb", "true");
+        map.put("loginFlow", "true");
+        map.put("sso.user.mapping", "true");
+        Assertion assertion = new AssertionImpl(new AttributePrincipalImpl(user, map));
+        return assertion;
+    }
+
+    private String getToken(String code, String url, String redirect_uri) {
+        String result = "";
+
+        try {
+            Map<String, Object> map = new HashMap();
+            map.put("grant_type", "authorization_code");
+            map.put("client_id", ConfigAddressUtil.getProperty("client_id"));
+            map.put("client_secret", ConfigAddressUtil.getProperty("client_secret"));
+            map.put("code", code);
+            map.put("redirect_uri", URLEncoder.encode(redirect_uri, "utf-8"));
+            this.logger.info("get_token....RequestParam{}", JSON.toJSONString(map));
+            result = HttpClientUtil.sendPostRequest(url, map);
+            this.logger.info("get_token.... respone{}", result);
+        } catch (Exception var7) {
+            this.logger.info("get_token....throw", var7);
+        }
+
+        Map<String, String> resultMap = (Map)JSON.parseObject(result, Map.class);
+        String token = "";
+        if (resultMap != null) {
+            token = (String)resultMap.get("access_token");
+        }
+
+        return token;
+    }
+
+    private String getUser(String token, String url) {
+        String result = "";
+
+        try {
+            result = HttpClientUtil.HttpGet(url, token);
+        } catch (Exception var6) {
+            this.logger.info("getUser....throw{}", var6.getMessage());
+        }
+
+        this.logger.info("getUser...." + result);
+        Map<String, String> resultMap = (Map)JSON.parseObject(result, Map.class);
+        String user = "";
+        if (resultMap != null) {
+            user = (String)resultMap.get("userPrincipalName");
+        }
+
+        return user;
+    }
+
+    private Boolean queryShrUser(String userNum) {
+        UserCollection userCollection = null;
+        Map<String, Object> map = new HashMap();
+        map.put("number", userNum);
+        EntityViewInfo entityViewInfo = this.getEntityViewInfo(map);
+
+        try {
+            userCollection = UserFactory.getRemoteInstance().getUserCollection(entityViewInfo);
+        } catch (Exception var6) {
+            this.logger.info("queryShrUser....{}", var6);
+        }
+
+        return userCollection != null && userCollection.size() > 0;
+    }
+
+    private EntityViewInfo getEntityViewInfo(Map<String, Object> map) {
+        EntityViewInfo entityViewInfo = new EntityViewInfo();
+        SelectorItemCollection sic = new SelectorItemCollection();
+        sic.add(new SelectorItemInfo("*"));
+        FilterInfo filters = new FilterInfo();
+        if (map != null) {
+            Iterator<Map.Entry<String, Object>> entrys = map.entrySet().iterator();
+
+            while(entrys.hasNext()) {
+                Map.Entry<String, Object> entry = (Map.Entry)entrys.next();
+                filters.getFilterItems().add(new FilterItemInfo((String)entry.getKey(), entry.getValue()));
+            }
+
+            entityViewInfo.setFilter(filters);
+            entityViewInfo.setSelector(sic);
+        }
+
+        return entityViewInfo;
+    }
+
+    private String refreshToken(String url, String token, String redirect_uri) {
+        String result = "";
+
+        try {
+            Map<String, Object> map = new HashMap();
+            map.put("grant_type", "refresh_token");
+            map.put("client_id", "f39393eb-3669-4257-829a-8dae118d6691");
+            map.put("client_secret", "zvM8Q~9mj2KTbp5gLyl4ZuuPWH7-HhsIqb68ectN");
+            map.put("refresh_token", token);
+            map.put("redirect_uri", URLEncoder.encode(redirect_uri, "utf-8"));
+            result = HttpClientUtil.sendPostRequest(url, map);
+        } catch (Exception var7) {
+            this.logger.info("refreshToken....throw{}", var7);
+        }
+
+        Map<String, String> resultMap = (Map)JSON.parseObject(result, Map.class);
+        String refreToken = "";
+        if (resultMap != null) {
+            refreToken = (String)resultMap.get("access_token");
+        }
+
+        return refreToken;
+    }
+}

+ 4 - 4
GDYSL/src/com/kingdee/eas/custom/erp/AbstractSynPersonToErpFacadeControllerBean.java

@@ -35,13 +35,13 @@ public abstract class AbstractSynPersonToErpFacadeControllerBean extends Abstrac
         return new BOSObjectType("301BAEE8");
     }
 
-    public void synPersonToErp(Context ctx, String startDate, String endDate) throws BOSException
+    public void synPersonToErp(Context ctx, String startDate, String endDate, String pNumber) throws BOSException
     {
         try {
-            ServiceContext svcCtx = createServiceContext(new MetaDataPK("85f47e4e-0392-42f8-b92f-d39ccbf969d0"), new Object[]{ctx, startDate, endDate});
+            ServiceContext svcCtx = createServiceContext(new MetaDataPK("85f47e4e-0392-42f8-b92f-d39ccbf969d0"), new Object[]{ctx, startDate, endDate, pNumber});
             invokeServiceBefore(svcCtx);
               if(!svcCtx.invokeBreak()) {
-            _synPersonToErp(ctx, startDate, endDate);
+            _synPersonToErp(ctx, startDate, endDate, pNumber);
             }
             invokeServiceAfter(svcCtx);
         } catch (BOSException ex) {
@@ -50,7 +50,7 @@ public abstract class AbstractSynPersonToErpFacadeControllerBean extends Abstrac
             super.cleanUpServiceState();
         }
     }
-    protected void _synPersonToErp(Context ctx, String startDate, String endDate) throws BOSException
+    protected void _synPersonToErp(Context ctx, String startDate, String endDate, String pNumber) throws BOSException
     {    	
         return;
     }

+ 3 - 3
GDYSL/src/com/kingdee/eas/custom/erp/ISynPersonToErpFacade.java

@@ -6,13 +6,13 @@ import com.kingdee.bos.framework.*;
 import com.kingdee.bos.util.*;
 import com.kingdee.bos.Context;
 
-import com.kingdee.bos.Context;
 import com.kingdee.bos.BOSException;
+import com.kingdee.bos.util.*;
 import java.lang.String;
+import com.kingdee.bos.Context;
 import com.kingdee.bos.framework.*;
-import com.kingdee.bos.util.*;
 
 public interface ISynPersonToErpFacade extends IBizCtrl
 {
-    public void synPersonToErp(String startDate, String endDate) throws BOSException;
+    public void synPersonToErp(String startDate, String endDate, String pNumber) throws BOSException;
 }

+ 6 - 5
GDYSL/src/com/kingdee/eas/custom/erp/SynPersonToErpFacade.java

@@ -6,12 +6,12 @@ import java.rmi.RemoteException;
 import com.kingdee.bos.framework.AbstractBizCtrl;
 import com.kingdee.bos.orm.template.ORMObject;
 
-import com.kingdee.bos.Context;
 import com.kingdee.bos.BOSException;
-import com.kingdee.eas.custom.erp.*;
+import com.kingdee.bos.util.*;
 import java.lang.String;
+import com.kingdee.bos.Context;
 import com.kingdee.bos.framework.*;
-import com.kingdee.bos.util.*;
+import com.kingdee.eas.custom.erp.*;
 
 public class SynPersonToErpFacade extends AbstractBizCtrl implements ISynPersonToErpFacade
 {
@@ -37,11 +37,12 @@ public class SynPersonToErpFacade extends AbstractBizCtrl implements ISynPersonT
      *同步人员信息到星瀚-User defined method
      *@param startDate 开始时间 (格式: yyyy-mm-dd hh:mm:ss)
      *@param endDate 结束时间 (格式: yyyy-mm-dd hh:mm:ss)
+     *@param pNumber 员工编码
      */
-    public void synPersonToErp(String startDate, String endDate) throws BOSException
+    public void synPersonToErp(String startDate, String endDate, String pNumber) throws BOSException
     {
         try {
-            getController().synPersonToErp(getContext(), startDate, endDate);
+            getController().synPersonToErp(getContext(), startDate, endDate, pNumber);
         }
         catch(RemoteException err) {
             throw new EJBRemoteException(err);

+ 3 - 3
GDYSL/src/com/kingdee/eas/custom/erp/SynPersonToErpFacadeController.java

@@ -6,16 +6,16 @@ import com.kingdee.bos.framework.*;
 import com.kingdee.bos.util.*;
 import com.kingdee.bos.Context;
 
-import com.kingdee.bos.Context;
 import com.kingdee.bos.BOSException;
+import com.kingdee.bos.util.*;
 import java.lang.String;
+import com.kingdee.bos.Context;
 import com.kingdee.bos.framework.*;
-import com.kingdee.bos.util.*;
 
 import java.rmi.RemoteException;
 import com.kingdee.bos.framework.ejb.BizController;
 
 public interface SynPersonToErpFacadeController extends BizController
 {
-    public void synPersonToErp(Context ctx, String startDate, String endDate) throws BOSException, RemoteException;
+    public void synPersonToErp(Context ctx, String startDate, String endDate, String pNumber) throws BOSException, RemoteException;
 }

+ 2 - 2
GDYSL/src/com/kingdee/eas/custom/erp/SynPersonToErpFacadeControllerBean.java

@@ -29,12 +29,12 @@ public class SynPersonToErpFacadeControllerBean extends AbstractSynPersonToErpFa
     
     
     @Override
-    protected void _synPersonToErp(Context ctx, String startDate, String endDate) throws BOSException
+    public void synPersonToErp(Context ctx, String startDate, String endDate, String pNumber) throws BOSException
     {    	
     	
     	try{
     		logger.info("into synPersonToErp method...");
-    		SynPersonToErpUtils.synPersonToErp(ctx, startDate, endDate);
+    		SynPersonToErpUtils.synPersonToErp(ctx, startDate, endDate,pNumber);
     	}catch(Exception e){
     		logger.error("Å×Òì³££º"+e);
     	}

+ 325 - 315
GDYSL/src/com/kingdee/eas/custom/erp/util/SynAdminOrgToERPUtils.java

@@ -15,322 +15,332 @@ import com.kingdee.bos.Context;
 import com.kingdee.bos.qing.util.StringUtils;
 import com.kingdee.eas.util.app.DbUtil;
 import com.kingdee.jdbc.rowset.IRowSet;
+import com.kingdee.shr.sso.client.util.SSOUtil;
 
 public class SynAdminOrgToERPUtils {
 
-
-    private static Logger log = LoggerFactory.getLogger(SynSalaryFromErpUtils.class);
-
-
-    //https://sites.gtiit.edu.cn/kderpdev/ierp/kapi/v2/gt15/base/bos_adminorg/gt15_adminorg_add
-    private static String ierp = "https://sites.gtiit.edu.cn/kderpdev/ierp";
-
-
-    /**
-     * 新增:获取gt15_adminorg_add的请求地址
-     *
-     * @param request
-     * @param code
-     * @return
-     */
-    public static String getGt15AdminOrgAddUrl() {
-        Properties config = SynPublicUtils.getConfig();
-        ierp = (String) config.get("ierp");
-        return new StringBuffer().append(ierp).append("/kapi/v2/gt15/base/bos_adminorg/gt15_adminorg_add").toString();
-
-    }
-
-
-    /**
-     * 封存:获取gt15_adminorg_beta的请求地址: https://sites.gtiit.edu.cn/kderpdev/ierp/kapi/v2/gt15/base/bos_adminorg/gt15_adminorg_beta
-     *
-     * @param request
-     * @param code
-     * @return
-     */
-    public static String getGt15AdminOrgBetaUrl() {
-        Properties config = SynPublicUtils.getConfig();
-        ierp = (String) config.get("ierp");
-        return new StringBuffer().append(ierp).append("/kapi/v2/gt15/base/bos_adminorg/gt15_adminorg_beta").toString();
-
-    }
-
-
-    /**
-     * 新增:请求参数
-     * 获取所有行政组织的
-     *
-     * @param ctx
-     * @return
-     * @throws BOSException
-     * @throws SQLException
-     */
-    private static String getAdminOrgDetailEntry(Context ctx, String startDateStr, String endDateStr) throws BOSException, SQLException {
-
-
-        //获取前一天的0点时间字符串
-        String lastDateZeroTimeStr = "";
-
-        //获取当前时间的字符串
-        String noeTimeStr = "";
-
-        if (StringUtils.isEmpty(startDateStr) || StringUtils.isEmpty(endDateStr)) {
-            //获取上次同步结束的时间
-            lastDateZeroTimeStr = SynPublicUtils.getLastUpdateSynTableTimeStrByEvenName(ctx, "synAdminOrgToErp");
-
-            if (StringUtils.isEmpty(lastDateZeroTimeStr)) {
-                //为空
-                //获取前一天的0点时间字符串
-                lastDateZeroTimeStr = SynPublicUtils.getLastDateZeroTime();
-            }
-
-            //更新最新 的时间为event_timeStamp,只有在自动触发的才会修改时间
-            SynPublicUtils.updateSynTimeTable(ctx, "synAdminOrgToErp");
-
-            //获取当前时间的字符串
-            noeTimeStr = SynPublicUtils.getNowTimeStr();
-        } else {
-            lastDateZeroTimeStr = startDateStr;
-            noeTimeStr = endDateStr;
-        }
-
-        String sql = "select admin.fnumber as number,admin.fname_l1 as name_l1,admin.fname_l2 as name_l2,admin.fname_l3 as name_l3,admin.fsimplename as gt15_shortname,admin.fname_l2 as gt15_chinesename ,layerType.fnumber as orgpattern_number,layerType.fname_l1 as orgpattern_name ,admin.fdescription_l1 as fcomment,admin2.fnumber as viewparent_number from t_org_admin admin "
-                + " left join T_Org_LayerType   layerType on layerType.fid = admin.flayertypeid "
-                + " left join t_org_admin admin2 on admin2.fid = admin.fparentid where admin.fisousealup = 0 "
-                + "  and ( (admin.flastupdatetime >  {ts '" + lastDateZeroTimeStr + "'} and  admin.flastupdatetime <=  {ts '" + noeTimeStr + "'} ) "
-                + "  or (layerType.flastupdatetime >  {ts '" + lastDateZeroTimeStr + "'} and  layerType.flastupdatetime <=  {ts '" + noeTimeStr + "'} ) "
-                + "  or (admin2.flastupdatetime >  {ts '" + lastDateZeroTimeStr + "'} and  admin2.flastupdatetime <=  {ts '" + noeTimeStr + "'} )) ";
-        //+ " left join t_org_admin admin2 on admin2.fid = admin.fparentid where admin.fisousealup = 0 and  admin.fnumber  not in ('D0003','D0002','D0039','D0040') ";
-        log.info("getAdminOrgDetailEntry.sql:" + sql);
-
-        IRowSet executeQuery = DbUtil.executeQuery(ctx, sql);
-
-        JSONArray datas = new JSONArray();
-        String paramJOStr = "";
-        if (executeQuery.size() > 0) {
-            while (executeQuery.next()) {
-                String number = executeQuery.getString("number");
-                String name_l1 = executeQuery.getString("name_l1");
-                String name_l2 = executeQuery.getString("name_l2");
-                String name_l3 = executeQuery.getString("name_l3");
-                String gt15_shortname = executeQuery.getString("gt15_shortname");
-                String gt15_chinesename = executeQuery.getString("gt15_chinesename");
-                String orgpattern_number = executeQuery.getString("orgpattern_number");
-                String orgpattern_name = executeQuery.getString("orgpattern_name");
-                String fcomment = executeQuery.getString("fcomment");
-                String viewparent_number = executeQuery.getString("viewparent_number");
-
-
-                JSONArray structures = new JSONArray();
-
-                JSONObject structure = new JSONObject();
-                structure.put("view_number", "01");
-
-                if (StringUtils.isEmpty(viewparent_number)) {
-                    //根部组织不传
-                    continue;
-                }
-                structure.put("viewparent_number", viewparent_number);
-                structures.add(structure);
-
-
-                JSONObject data = new JSONObject();
-                data.put("number", number);
-
-                JSONObject name = new JSONObject();
-                name.put("en_US", name_l1);
-                name.put("zh_CN", name_l2);
-                name.put("zh_TW", name_l3);
-
-                data.put("name", name);
-                data.put("gt15_shortname", gt15_shortname);
-                data.put("gt15_chinesename", gt15_chinesename);
-
-                data.put("orgpattern_name", orgpattern_name);
-
-                if ("集团".equals(orgpattern_number)) {
-                    orgpattern_number = "Group";
-                } else if ("公司".equals(orgpattern_number)) {
-                    orgpattern_number = "Company";
-                } else if ("部门".equals(orgpattern_number)) {
-                    orgpattern_number = "Dept";
-                }
-                data.put("orgpattern_number", orgpattern_number);
-
-                data.put("fcomment", fcomment);
-
-                data.put("structure", structures);
-
-                datas.add(data);
-            }
-            JSONObject paramJO = new JSONObject();
-            paramJO.put("data", datas);
-            paramJOStr = paramJO.toString();
-        }
-        return paramJOStr;
-    }
-
-
-    /**
-     * 新增:新增行政组织接口,推送到星瀚
-     *
-     * @param ctx
-     * @param accessToken
-     * @throws Exception
-     */
-    public static String gt15_adminorg_add(Context ctx, String accessToken, String startDate, String endDate) throws Exception {
-        //获取请求地址
-        String gt15AdminOrgAddUrl = getGt15AdminOrgAddUrl();
-
-        log.info("SynAdminOrgToERPUtils.gt15_adminorg_add.gt15AdminOrgAddUrl:" + gt15AdminOrgAddUrl);
-        //构建行政组织参数
-        String paramJOStr = getAdminOrgDetailEntry(ctx, startDate, endDate);
-        log.info("SynAdminOrgToERPUtils.gt15_adminorg_add.paramJOStr:" + paramJOStr);
-        //数据保存接口
-        String responseMsg = HttpsReqUtil.postByHttps(gt15AdminOrgAddUrl, paramJOStr, accessToken);
-
-
-        return responseMsg;
-    }
-
-
-    /**
-     * 新增:推送数据到ERP功能:主体
-     *
-     * @return
-     * @throws Exception
-     */
-    public static String synAdminorgToErp(Context ctx, String startDate, String endDate) throws Exception {
-
-        //获取appToken
-        String appToken = SynSalaryFromErpUtils.getAppToken(ctx);
-        log.info("获取synAdminorgToErp.appToken:" + appToken);
-        //获取accessToken
-        String accessToken = SynSalaryFromErpUtils.getAccessToken(appToken);
-        log.info("获取synAdminorgToErp.accessToken状态为:" + accessToken);
-        //薪酬明细保存接口
-        String responseMsg = gt15_adminorg_add(ctx, accessToken, startDate, endDate);
-        log.info("synAdminorgToErp.responseMsg:" + accessToken);
-        return null;
-    }
-
-
-    /**
-     * 封存:获取封存行政组织的请求参数
-     *
-     * @param ctx
-     * @param startDateStr
-     * @param endDateStr
-     * @return
-     * @throws BOSException
-     * @throws SQLException
-     */
-    public static List<String> getAdminOrgBetaDetailEntry(Context ctx, String startDateStr, String endDateStr) throws BOSException, SQLException {
-        //String sql = " select fnumber as number from  t_org_admin where fisousealup = 1 and fnumber not in ('D0003','D0002','D0039','D0040')";
-
-        //获取前一天的0点时间字符串
-        String lastDateZeroTimeStr = "";
-
-        //获取当前时间的字符串
-        String noeTimeStr = "";
-
-        if (StringUtils.isEmpty(startDateStr) || StringUtils.isEmpty(endDateStr)) {
-            //获取上次同步结束的时间
-            lastDateZeroTimeStr = SynPublicUtils.getLastUpdateSynTableTimeStrByEvenName(ctx, "synAdminOrgBetaToErp");
-
-            if (StringUtils.isEmpty(lastDateZeroTimeStr)) {
-                //为空
-                //获取前一天的0点时间字符串
-                lastDateZeroTimeStr = SynPublicUtils.getLastDateZeroTime();
-            }
-
-            //更新最新 的时间为event_timeStamp,只有在自动触发的才会修改时间
-            SynPublicUtils.updateSynTimeTable(ctx, "synAdminOrgBetaToErp");
-
-            //获取当前时间的字符串
-            noeTimeStr = SynPublicUtils.getNowTimeStr();
-        } else {
-            lastDateZeroTimeStr = startDateStr;
-            noeTimeStr = endDateStr;
-        }
-
-
-        String sql = " select fnumber as number from  t_org_admin where fisousealup = 1 " +
-                " and (flastupdatetime > {ts '" + lastDateZeroTimeStr + "'} and  flastupdatetime <=  {ts '" + noeTimeStr + "'})";
-        log.info("getAdminOrgBetaDetailEntry.sql" + sql);
-        IRowSet executeQuery = DbUtil.executeQuery(ctx, sql);
-        List<String> numbers = new ArrayList<String>();
-        if (executeQuery.size() > 0) {
-            while (executeQuery.next()) {
-                String number = executeQuery.getString("number");
-                numbers.add(number);
-            }
-        }
-        return numbers;
-    }
-
-    /**
-     * 封存:通过编码获取
-     *
-     * @param number
-     * @return
-     */
-    public static String getParamJOStrByNumber(String number) {
-        JSONObject data = new JSONObject();
-        data.put("number", number);
-        JSONObject paramJO = new JSONObject();
-        paramJO.put("data", data);
-        String paramJOStr = paramJO.toString();
-        return paramJOStr;
-    }
-
-
-    /**
-     * 封存:根据编码封存行政组织
-     *
-     * @param ctx
-     * @param accessToken
-     * @return
-     * @throws Exception
-     */
-    public static void synGt15_adminorg_beta(Context ctx, String accessToken, String startDate, String endDate) throws Exception {
-        //获取请求地址
-        String gt15AdminOrgBetaUrl = getGt15AdminOrgBetaUrl();
-
-        log.info("SynAdminOrgToERPUtils.synGt15_adminorg_beta.gt15AdminOrgBetaUrl:" + gt15AdminOrgBetaUrl);
-        //构建行政组织参数
-        List<String> numbers = getAdminOrgBetaDetailEntry(ctx, startDate, endDate);
-        log.info("SynAdminOrgToERPUtils.gt15_adminorg_add.numbers:" + numbers.size());
-
-        for (String number : numbers) {
-            String paramJOStr = getParamJOStrByNumber(number);
-            //数据保存接口
-            String responseMsg = HttpsReqUtil.postByHttps(gt15AdminOrgBetaUrl, paramJOStr, accessToken);
-        }
-
-    }
-
-
-    /**
-     * 封存:封存根据编码封存行政组织:主体
-     *
-     * @param ctx
-     * @return
-     * @throws Exception
-     */
-    public static String syndminorgBetaToErp(Context ctx, String startDate, String endDate) throws Exception {
-        //获取appToken
-        String appToken = SynSalaryFromErpUtils.getAppToken(ctx);
-        log.info("获取syndminorgBetaToErp.appToken:" + appToken);
-        //获取accessToken
-        String accessToken = SynSalaryFromErpUtils.getAccessToken(appToken);
-        log.info("获取syndminorgBetaToErp.accessToken为:" + accessToken);
-        //薪酬明细保存接口
-        synGt15_adminorg_beta(ctx, accessToken, startDate, endDate);
-        log.info("syndminorgBetaToErp.responseMsg:" + accessToken);
-
-        return "";
-    }
-
-
+	
+	private static Logger log = LoggerFactory.getLogger(SynSalaryFromErpUtils.class);
+	
+	
+	//https://sites.gtiit.edu.cn/kderpdev/ierp/kapi/v2/gt15/base/bos_adminorg/gt15_adminorg_add
+	private static String ierp = "https://sites.gtiit.edu.cn/kderpdev/ierp";  
+	
+	
+	
+	/**
+	 * 新增:获取gt15_adminorg_add的请求地址
+	 * @param request
+	 * @param code
+	 * @return
+	 */
+	 public static String getGt15AdminOrgAddUrl() {
+		 Properties config = SynPublicUtils.getConfig();
+		  ierp = (String)config.get("ierp");
+	     return new StringBuffer().append(ierp).append("/kapi/v2/gt15/base/bos_adminorg/gt15_adminorg_add").toString();
+	       
+	 }
+	
+	
+	 /**
+		 * 封存:获取gt15_adminorg_beta的请求地址: https://sites.gtiit.edu.cn/kderpdev/ierp/kapi/v2/gt15/base/bos_adminorg/gt15_adminorg_beta
+		 * @param request
+		 * @param code
+		 * @return
+		 */
+		 public static String getGt15AdminOrgBetaUrl() {
+			 Properties config = SynPublicUtils.getConfig();
+			  ierp = (String)config.get("ierp");
+		     return new StringBuffer().append(ierp).append("/kapi/v2/gt15/base/bos_adminorg/gt15_adminorg_beta").toString();
+		       
+		 }
+	
+	
+	
+	/**
+	 * 新增:请求参数
+	 * 获取所有行政组织的
+	 * @param ctx
+	 * @return
+	 * @throws BOSException 
+	 * @throws SQLException 
+	 */
+	private static String getAdminOrgDetailEntry(Context ctx,String startDateStr, String endDateStr) throws BOSException, SQLException{
+		
+
+		//获取前一天的0点时间字符串
+		String lastDateZeroTimeStr = "";
+		
+		//获取当前时间的字符串
+		String noeTimeStr = "";
+		
+		if(StringUtils.isEmpty(startDateStr)|| StringUtils.isEmpty(endDateStr) ){	
+			 //获取上次同步结束的时间
+			 lastDateZeroTimeStr =  SynPublicUtils.getLastUpdateSynTableTimeStrByEvenName(ctx,"synAdminOrgToErp");
+			 
+			 if(StringUtils.isEmpty(lastDateZeroTimeStr)){
+				 //为空
+				//获取前一天的0点时间字符串
+				 lastDateZeroTimeStr = SynPublicUtils.getLastDateZeroTime();
+			 }
+			  
+			//更新最新 的时间为event_timeStamp,只有在自动触发的才会修改时间
+			 SynPublicUtils.updateSynTimeTable(ctx,"synAdminOrgToErp");
+			 
+			//获取当前时间的字符串
+			 noeTimeStr = SynPublicUtils.getNowTimeStr();
+		}else{
+			 lastDateZeroTimeStr = startDateStr;
+			 noeTimeStr = endDateStr;
+		}
+		
+		String sql = "select admin.fnumber as number,admin.fname_l1 as name_l1,admin.fname_l2 as name_l2,admin.fname_l3 as name_l3,admin.fsimplename as gt15_shortname,admin.fname_l2 as gt15_chinesename ,layerType.fnumber as orgpattern_number,layerType.fname_l1 as orgpattern_name ,admin.fdescription_l1 as fcomment,admin2.fnumber as viewparent_number from t_org_admin admin "
+          + " left join T_Org_LayerType   layerType on layerType.fid = admin.flayertypeid "
+          + " left join t_org_admin admin2 on admin2.fid = admin.fparentid where admin.fisousealup = 0 " 
+          +	"  and ( (admin.flastupdatetime >  {ts '"+lastDateZeroTimeStr+"'} and  admin.flastupdatetime <=  {ts '"+noeTimeStr+"'} ) "
+          +	"  or (layerType.flastupdatetime >  {ts '"+lastDateZeroTimeStr+"'} and  layerType.flastupdatetime <=  {ts '"+noeTimeStr+"'} ) "
+          +	"  or (admin2.flastupdatetime >  {ts '"+lastDateZeroTimeStr+"'} and  admin2.flastupdatetime <=  {ts '"+noeTimeStr+"'} )) ";
+          //+ " left join t_org_admin admin2 on admin2.fid = admin.fparentid where admin.fisousealup = 0 and  admin.fnumber  not in ('D0003','D0002','D0039','D0040') ";
+		log.info("getAdminOrgDetailEntry.sql:"+sql);
+		
+		IRowSet executeQuery = DbUtil.executeQuery(ctx, sql);
+		
+		JSONArray datas = new JSONArray();
+		 String  paramJOStr = "";
+		if(executeQuery.size()>0){
+			while(executeQuery.next()){
+				String number = executeQuery.getString("number");
+				String name_l1 = executeQuery.getString("name_l1");
+				String name_l2 = executeQuery.getString("name_l2");
+				String name_l3 = executeQuery.getString("name_l3");
+				String gt15_shortname = executeQuery.getString("gt15_shortname");
+				String gt15_chinesename = executeQuery.getString("gt15_chinesename");
+				String orgpattern_number = executeQuery.getString("orgpattern_number");
+				String orgpattern_name = executeQuery.getString("orgpattern_name");
+				String fcomment = executeQuery.getString("fcomment");
+				String viewparent_number =  executeQuery.getString("viewparent_number");
+				
+				
+				JSONArray structures = new JSONArray();
+				
+				JSONObject structure = new JSONObject();	
+				structure.put("view_number", "01");
+				
+				if(StringUtils.isEmpty(viewparent_number)){
+					//根部组织不传
+					continue;
+				}
+				structure.put("viewparent_number", viewparent_number);
+				structures.add(structure);
+				
+				
+				JSONObject data = new JSONObject();			
+				data.put("number",number);
+				
+				JSONObject name = new JSONObject();	
+				 name.put("en_US", name_l1);
+				 name.put("zh_CN", name_l2);
+				 name.put("zh_TW", name_l3);
+				
+				data.put("name",name);
+				data.put("gt15_shortname",gt15_shortname);
+				data.put("gt15_chinesename",gt15_chinesename);
+				
+				data.put("orgpattern_name",orgpattern_name);
+				
+				if("集团".equals(orgpattern_number)){
+					orgpattern_number = "Group";
+				}else if("公司".equals(orgpattern_number)){
+					orgpattern_number = "Company";
+				}else if("部门".equals(orgpattern_number)){
+					orgpattern_number = "Dept";
+				}
+				data.put("orgpattern_number",orgpattern_number);
+				
+				data.put("fcomment",fcomment);
+				
+				data.put("structure",structures);
+				
+		        datas.add(data);   
+			}
+			 JSONObject paramJO = new JSONObject();
+	         paramJO.put("data",datas);
+	         paramJOStr = paramJO.toString();
+		}
+		return paramJOStr;
+	}
+	
+	
+	
+	 
+	/**
+	 * 新增:新增行政组织接口,推送到星瀚
+	 * @param ctx
+	 * @param accessToken
+	 * @throws Exception 
+	 */
+	public static String gt15_adminorg_add(Context ctx,String accessToken,String startDate, String endDate) throws Exception{
+		//获取请求地址
+		String gt15AdminOrgAddUrl = getGt15AdminOrgAddUrl();
+		
+		log.info("SynAdminOrgToERPUtils.gt15_adminorg_add.gt15AdminOrgAddUrl:"+gt15AdminOrgAddUrl);
+		//构建行政组织参数
+		String paramJOStr = getAdminOrgDetailEntry(ctx, startDate, endDate);
+		log.info("SynAdminOrgToERPUtils.gt15_adminorg_add.paramJOStr:"+paramJOStr);
+		//数据保存接口
+        String  responseMsg = HttpsReqUtil.postByHttps(gt15AdminOrgAddUrl, paramJOStr, accessToken);
+		
+		
+		return responseMsg;
+	}
+	
+	
+	/**
+	 * 新增:推送数据到ERP功能:主体
+	 * @return
+	 * @throws Exception 
+	 */
+	 public static String synAdminorgToErp(Context ctx,String startDate, String endDate ) throws Exception{
+		 
+		 //获取appToken
+		 String appToken = SynSalaryFromErpUtils.getAppToken(ctx);
+		 log.info("获取synAdminorgToErp.appToken:"+appToken);
+		 //获取accessToken
+		 String accessToken = SynSalaryFromErpUtils.getAccessToken(appToken);
+		 log.info("获取synAdminorgToErp.accessToken状态为:"+accessToken);
+		 //薪酬明细保存接口
+		 String responseMsg =  gt15_adminorg_add(ctx,accessToken, startDate,  endDate);
+		 log.info("synAdminorgToErp.responseMsg:"+accessToken);
+		 return null;
+	 }
+	
+	
+	 
+	 
+	 /**
+	  * 封存:获取封存行政组织的请求参数
+	  * @param ctx
+	  * @param startDate
+	  * @param endDate
+	  * @return
+	  * @throws BOSException
+	  * @throws SQLException
+	  */
+	 public static List<String> getAdminOrgBetaDetailEntry(Context ctx,String startDateStr, String endDateStr) throws BOSException, SQLException{
+		 //String sql = " select fnumber as number from  t_org_admin where fisousealup = 1 and fnumber not in ('D0003','D0002','D0039','D0040')";
+		
+		//获取前一天的0点时间字符串
+			String lastDateZeroTimeStr = "";
+			
+			//获取当前时间的字符串
+			String noeTimeStr = "";
+			
+			if(StringUtils.isEmpty(startDateStr)|| StringUtils.isEmpty(endDateStr) ){	
+				 //获取上次同步结束的时间
+				 lastDateZeroTimeStr =  SynPublicUtils.getLastUpdateSynTableTimeStrByEvenName(ctx,"synAdminOrgBetaToErp");
+				 
+				 if(StringUtils.isEmpty(lastDateZeroTimeStr)){
+					 //为空
+					//获取前一天的0点时间字符串
+					 lastDateZeroTimeStr = SynPublicUtils.getLastDateZeroTime();
+				 }
+				  
+				//更新最新 的时间为event_timeStamp,只有在自动触发的才会修改时间
+				 SynPublicUtils.updateSynTimeTable(ctx,"synAdminOrgBetaToErp");
+				 
+				//获取当前时间的字符串
+				 noeTimeStr = SynPublicUtils.getNowTimeStr();
+			}else{
+				 lastDateZeroTimeStr = startDateStr;
+				 noeTimeStr = endDateStr;
+			}
+		 
+		 
+		 String sql = " select fnumber as number from  t_org_admin where fisousealup = 1 " +
+		 		" and (flastupdatetime > {ts '"+lastDateZeroTimeStr+"'} and  flastupdatetime <=  {ts '"+noeTimeStr+"'})";
+		 log.info("getAdminOrgBetaDetailEntry.sql"+sql);
+		 IRowSet executeQuery = DbUtil.executeQuery(ctx, sql);
+		 List<String> numbers = new ArrayList<String>();
+		 if(executeQuery.size()>0){
+				while(executeQuery.next()){
+					String number = executeQuery.getString("number");					
+					numbers.add(number);
+				}				
+			} 
+		 return numbers;
+	 }
+	 
+	 /**
+	  * 封存:通过编码获取
+	  * @param numbers
+	  * @return
+	  */
+	 public static String getParamJOStrByNumber(String number){
+		 JSONObject data = new JSONObject();
+		 data.put("number", number);
+		 JSONObject paramJO = new JSONObject();
+         paramJO.put("data",data);
+         String paramJOStr  = paramJO.toString();
+		 return paramJOStr;
+	 }
+	 
+	 
+	 
+	 /**
+	  * 封存:根据编码封存行政组织
+	  * @param ctx
+	  * @param accessToken
+	  * @return
+	 * @throws Exception 
+	  */
+	 public static void synGt15_adminorg_beta(Context ctx,String accessToken,String startDate, String endDate) throws Exception{
+		 //获取请求地址
+		String gt15AdminOrgBetaUrl = getGt15AdminOrgBetaUrl();
+			
+		log.info("SynAdminOrgToERPUtils.synGt15_adminorg_beta.gt15AdminOrgBetaUrl:"+gt15AdminOrgBetaUrl);
+		//构建行政组织参数
+		List<String> numbers =getAdminOrgBetaDetailEntry(ctx, startDate, endDate);
+		log.info("SynAdminOrgToERPUtils.gt15_adminorg_add.numbers:"+numbers.size());
+		
+		for(String number : numbers){
+			String paramJOStr = getParamJOStrByNumber(number);
+			//数据保存接口
+			   String  responseMsg = HttpsReqUtil.postByHttps(gt15AdminOrgBetaUrl, paramJOStr, accessToken);
+		}		
+	   
+	 }
+	 
+	 
+	 
+	 
+	 
+	 
+	 
+	 /**
+	  * 封存:封存根据编码封存行政组织:主体
+	  * @param ctx
+	  * @return
+	  * @throws Exception
+	  */
+	 public static String syndminorgBetaToErp(Context ctx,String startDate, String endDate) throws Exception{
+		 //获取appToken
+		 String appToken = SynSalaryFromErpUtils.getAppToken(ctx);
+		 log.info("获取syndminorgBetaToErp.appToken:"+appToken);
+		 //获取accessToken
+		 String accessToken = SynSalaryFromErpUtils.getAccessToken(appToken);
+		 log.info("获取syndminorgBetaToErp.accessToken为:"+accessToken);
+		 //薪酬明细保存接口
+		 synGt15_adminorg_beta(ctx,accessToken,startDate,endDate);
+		 log.info("syndminorgBetaToErp.responseMsg:"+accessToken);
+		 
+		 return "";
+	 }
+	 
+	 
+	 
+	 
+	 
+	 
+	 
+	 
 }

+ 36 - 28
GDYSL/src/com/kingdee/eas/custom/erp/util/SynPersonToErpUtils.java

@@ -2,12 +2,9 @@ package com.kingdee.eas.custom.erp.util;
 
 import java.sql.SQLException;
 import java.text.SimpleDateFormat;
-import java.util.ArrayList;
-import java.util.Calendar;
-import java.util.Date;
-import java.util.List;
-import java.util.Properties;
+import java.util.*;
 
+import com.kingdee.eas.util.ToolUtils;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
@@ -88,7 +85,7 @@ public class SynPersonToErpUtils {
 	 * 新增:新增员工接口 主体
 	 * @throws Exception 
 	 */
-	public static void gt15_user_add(Context ctx,String  accessToken,String startDate, String endDate) throws Exception{
+	public static void gt15_user_add(Context ctx,String  accessToken,String startDate, String endDate,String pNumber) throws Exception{
 		//获取请求地址
 		String gt15UserAddUrl = getGt15AdminOrgBetaUrl();
 		log.info("SynPersonToErpUtils.gt15_user_add.gt15UserAddUrl:"+gt15UserAddUrl);
@@ -97,7 +94,7 @@ public class SynPersonToErpUtils {
 		log.info("SynPersonToErpUtils.gt15_user_add.startDate:"+startDate);
 		log.info("SynPersonToErpUtils.gt15_user_add.endDate:"+endDate);
 		//查询数据库,并构建新增人员参数,推送到星瀚
-		getUserAddEntryAndPush(ctx,gt15UserAddUrl,accessToken,startDate,endDate);
+		getUserAddEntryAndPush(ctx,gt15UserAddUrl,accessToken,startDate,endDate,pNumber);
 		
 	}
 		
@@ -131,7 +128,7 @@ public class SynPersonToErpUtils {
 	 * @return
 	 * @throws Exception 
 	 */
-	public static void getUserAddEntryAndPush(Context ctx,String gt15UserAddUrl,String accessToken,String startDateStr, String endDateStr) throws Exception{
+	public static void getUserAddEntryAndPush(Context ctx,String gt15UserAddUrl,String accessToken,String startDateStr, String endDateStr,String pNumber) throws Exception{
 		
 		//获取前一天的0点时间字符串
 		String lastDateZeroTimeStr = "";
@@ -159,6 +156,8 @@ public class SynPersonToErpUtils {
 			 noeTimeStr = endDateStr;
 		}
 		
+
+		
 		
 		log.info("SynPersonToErpUtils.lastDateZeroTimeStr:"+lastDateZeroTimeStr);
 		log.info("SynPersonToErpUtils.noeTimeStr:"+noeTimeStr);
@@ -193,26 +192,35 @@ public class SynPersonToErpUtils {
 				"  left join  CT_MP_WorkerCategory workerCategory on workerCategory.fid = temp.workercategoryId \n" +
 				"  left join CT_MP_Fullorpart fullOrPart2 on fullOrPart2.fid = empOrgRelation.CFFtorptID \n" +
 				"  left join T_HR_EmpLaborRelation empLaborRelation2 on empLaborRelation2.fpersonid = person.fid and  \n" +
-				"  empLaborRelation2.flaborrelationstateid in ('00000000-0000-0000-0000-000000000007A29E85B3','00000000-0000-0000-0000-000000000006A29E85B3','FTCmJT3SSRi1twufIaRb56KehbM=')\n" +
+				"  empLaborRelation2.flaborrelationstateid in ('00000000-0000-0000-0000-000000000007A29E85B3','00000000-0000-0000-0000-000000000006A29E85B3','FTCmJT3SSRi1twufIaRb56KehbM=')\n" ;
 				//"  where admin2.fnumber not in ('D0003','D0002','D0039','D0040','D0036') \n" +
 				
-				"  where (  (person.flastupdatetime >  {ts '"+lastDateZeroTimeStr+"'} and  person.flastupdatetime <=  {ts '"+noeTimeStr+"'} )\n" +
-				//"  or (fullOrPart.flastupdatetime >  {ts '"+lastDateZeroTimeStr+"'} and  fullOrPart.flastupdatetime <=  {ts '"+noeTimeStr+"'} )\n" +
-				//"  or (employeeClassify.flastupdatetime >  {ts '"+lastDateZeroTimeStr+"'} and  employeeClassify.flastupdatetime <=  {ts '"+noeTimeStr+"'} )\n" +
-				"  or (credentialsType.cflastupdatetime >  {ts '"+lastDateZeroTimeStr+"'} and  credentialsType.cflastupdatetime <=  {ts '"+noeTimeStr+"'})\n" +
-				//"  or (nationality.flastupdatetime > {ts '"+lastDateZeroTimeStr+"'} and  nationality.flastupdatetime <=  {ts '"+noeTimeStr+"'} )\n" +
-				"  or (temp.aflastupdatetime > {ts '"+lastDateZeroTimeStr+"'} and  temp.aflastupdatetime <=  {ts '"+noeTimeStr+"'} )\n" +
-				//"   or (temp.bflastupdatetime > {ts '"+lastDateZeroTimeStr+"'} and  temp.bflastupdatetime <=  {ts '"+noeTimeStr+"'})\n" +
-				//"  or (temp.cflastupdatetime > {ts '"+lastDateZeroTimeStr+"'} and  temp.cflastupdatetime <=  {ts '"+noeTimeStr+"'})\n" +
-				//"   or (temp.dflastupdatetime > {ts '"+lastDateZeroTimeStr+"'} and  temp.dflastupdatetime <=  {ts '"+noeTimeStr+"'})\n" +
-				//"   or (temp.fflastupdatetime > {ts '"+lastDateZeroTimeStr+"'} and  temp.fflastupdatetime <=  {ts '"+noeTimeStr+"'})\n" +
-				"   or (empLaborRelation.flastupdatetime > {ts '"+lastDateZeroTimeStr+"'} and  empLaborRelation.flastupdatetime <=  {ts '"+noeTimeStr+"'})\n" +
-				"   or (empOrgRelation.flastupdatetime> {ts '"+lastDateZeroTimeStr+"'} and  empOrgRelation.flastupdatetime <=  {ts '"+noeTimeStr+"'})\n" +
-				//"    or (admin2.flastupdatetime> {ts '"+lastDateZeroTimeStr+"'} and  admin2.flastupdatetime <=  {ts '"+noeTimeStr+"'})\n" +
-				"   or (workerCategory.flastupdatetime> {ts '"+lastDateZeroTimeStr+"'} and  workerCategory.flastupdatetime <=  {ts '"+noeTimeStr+"'})\n" +
-				//"   or (fullOrPart2.flastupdatetime> {ts '"+lastDateZeroTimeStr+"'} and  fullOrPart2.flastupdatetime <=  {ts '"+noeTimeStr+"'})\n" +
-				"   or (empLaborRelation2.flastupdatetime> {ts '"+lastDateZeroTimeStr+"'} and  empLaborRelation2.flastupdatetime <=  {ts '"+noeTimeStr+"'}))";
-		
+
+		if(!StringUtils.isEmpty(pNumber)) {
+			String[] split = pNumber.split(",");
+			List<String> pNumberList = Arrays.asList(split);
+			sql += " where person.fnumber in ( "+ ToolUtils.aryToStr(pNumberList,true) +" ) ";
+		}else{
+			sql += "  where (  (person.flastupdatetime >  {ts '"+lastDateZeroTimeStr+"'} and  person.flastupdatetime <=  {ts '"+noeTimeStr+"'} )\n" +
+					//"  or (fullOrPart.flastupdatetime >  {ts '"+lastDateZeroTimeStr+"'} and  fullOrPart.flastupdatetime <=  {ts '"+noeTimeStr+"'} )\n" +
+					//"  or (employeeClassify.flastupdatetime >  {ts '"+lastDateZeroTimeStr+"'} and  employeeClassify.flastupdatetime <=  {ts '"+noeTimeStr+"'} )\n" +
+					"  or (credentialsType.cflastupdatetime >  {ts '"+lastDateZeroTimeStr+"'} and  credentialsType.cflastupdatetime <=  {ts '"+noeTimeStr+"'})\n" +
+					//"  or (nationality.flastupdatetime > {ts '"+lastDateZeroTimeStr+"'} and  nationality.flastupdatetime <=  {ts '"+noeTimeStr+"'} )\n" +
+					"  or (temp.aflastupdatetime > {ts '"+lastDateZeroTimeStr+"'} and  temp.aflastupdatetime <=  {ts '"+noeTimeStr+"'} )\n" +
+					//"   or (temp.bflastupdatetime > {ts '"+lastDateZeroTimeStr+"'} and  temp.bflastupdatetime <=  {ts '"+noeTimeStr+"'})\n" +
+					//"  or (temp.cflastupdatetime > {ts '"+lastDateZeroTimeStr+"'} and  temp.cflastupdatetime <=  {ts '"+noeTimeStr+"'})\n" +
+					//"   or (temp.dflastupdatetime > {ts '"+lastDateZeroTimeStr+"'} and  temp.dflastupdatetime <=  {ts '"+noeTimeStr+"'})\n" +
+					//"   or (temp.fflastupdatetime > {ts '"+lastDateZeroTimeStr+"'} and  temp.fflastupdatetime <=  {ts '"+noeTimeStr+"'})\n" +
+					"   or (empLaborRelation.flastupdatetime > {ts '"+lastDateZeroTimeStr+"'} and  empLaborRelation.flastupdatetime <=  {ts '"+noeTimeStr+"'})\n" +
+					"   or (empOrgRelation.flastupdatetime> {ts '"+lastDateZeroTimeStr+"'} and  empOrgRelation.flastupdatetime <=  {ts '"+noeTimeStr+"'})\n" +
+					//"    or (admin2.flastupdatetime> {ts '"+lastDateZeroTimeStr+"'} and  admin2.flastupdatetime <=  {ts '"+noeTimeStr+"'})\n" +
+					"   or (workerCategory.flastupdatetime> {ts '"+lastDateZeroTimeStr+"'} and  workerCategory.flastupdatetime <=  {ts '"+noeTimeStr+"'})\n" +
+					//"   or (fullOrPart2.flastupdatetime> {ts '"+lastDateZeroTimeStr+"'} and  fullOrPart2.flastupdatetime <=  {ts '"+noeTimeStr+"'})\n" +
+					"   or (empLaborRelation2.flastupdatetime> {ts '"+lastDateZeroTimeStr+"'} and  empLaborRelation2.flastupdatetime <=  {ts '"+noeTimeStr+"'}) ) " ;
+
+		}
+	 
+
 		log.info("SynPersonToErpUtils.getUserAddEntry.sql:"+sql);
 		String number = "";
 		String name_l1 = "";
@@ -440,7 +448,7 @@ public class SynPersonToErpUtils {
 	 * @return
 	 * @throws Exception 
 	 */
-	 public static void synPersonToErp(Context ctx ,String startDate, String endDate) throws Exception{
+	 public static void synPersonToErp(Context ctx ,String startDate, String endDate,String pNumber) throws Exception{
 		 
 		 //获取appToken
 		 String appToken = SynSalaryFromErpUtils.getAppToken(ctx);
@@ -449,7 +457,7 @@ public class SynPersonToErpUtils {
 		 String accessToken = SynSalaryFromErpUtils.getAccessToken(appToken);
 		 log.info("获取synPersonToErp.accessToken状态为:"+accessToken);
 		 //薪酬明细保存接口
-		  gt15_user_add(ctx,accessToken,startDate,endDate);
+		  gt15_user_add(ctx,accessToken,startDate,endDate,pNumber);
 		
 	 } 
 	

+ 34 - 6
GDYSL/src/com/kingdee/eas/custom/facade/employee/EmpPreEntryFacadeControllerBean.java

@@ -10,6 +10,9 @@ import com.kingdee.bos.dao.ormapping.ObjectUuidPK;
 import com.kingdee.bos.util.BOSUuid;
 import com.kingdee.eas.base.permission.UserFactory;
 import com.kingdee.eas.base.permission.UserInfo;
+import com.kingdee.eas.basedata.hraux.FolkCollection;
+import com.kingdee.eas.basedata.hraux.FolkFactory;
+import com.kingdee.eas.basedata.hraux.FolkInfo;
 import com.kingdee.eas.basedata.org.AdminOrgUnitInfo;
 import com.kingdee.eas.basedata.org.PositionFactory;
 import com.kingdee.eas.basedata.org.PositionInfo;
@@ -82,15 +85,19 @@ public class EmpPreEntryFacadeControllerBean extends AbstractEmpPreEntryFacadeCo
         preEntrySql.append(" FPreEnterDate,CFTryMonth,CFTrialStartDate,CFTransferDate,CFEmpTypeID,CFPersontypeID,CFWcategoryID,");
         preEntrySql.append(" CFFtorptID,CFLmanagerID,CFAdmintitle,CFAcademictitleID,CFJobsID,CFWaitcontract,CFLegalemployer,");
         preEntrySql.append(" CFExpatriate,CFResident,CFPaycurrency,CFHwage,CFFsmentitlement,CFFsentitlement,CFFaentitlement,a.CFJobGradeID,a.CFRmethodID,a.CFCountryRegionID, ");
-        preEntrySql.append(" a.cfjobendtime");
+        preEntrySql.append(" a.cfjobendtime ,   b.cfadjustinghours  adjustinghours ,  b.fconstellationid  constellation, b.fzodiacid  zodiac ,");
+        preEntrySql.append(" b.fidcardaddress idcardaddress , b.fidCardBeginDate idCardBeginDate ,b.fidCardEndDate  idCardEndDate ,b.cfgtiitemail gtiitemail , ");
+        preEntrySql.append(" b. ffolkid  folkid , b.fnativeplace_l2  nativeplace ");
         preEntrySql.append(" from T_HR_PreEntry as a ");
         preEntrySql.append(" left join T_HR_PreEntryPerson as b on a.FTALENTID  = b.fid	");
-        preEntrySql.append(" where fbillState = 3 and CFAutoConversion = 'Yes' and FIsGenerateEntryBill = 0 and FPREENTERDATE <= '" + baseDate + "'");
+        preEntrySql.append(" where fbillState = 3 and CFAutoConversion = 'Yes' and FIsGenerateEntryBill = 0  ");
         if (StringUtils.isNotBlank(empNumber)) {
-            preEntrySql.append(" a.CFEmpNumber = '" + empNumber + "' ");
+            preEntrySql.append(" and a.CFEmpNumber = '" + empNumber + "' ");
+        }else {
+        	preEntrySql.append(" and FPREENTERDATE <= '" + baseDate + "' ");
         }
-        if (StringUtils.isNotBlank(empNumber)) {
-            preEntrySql.append(" a.orgNumber = (select fid from t_org_admin where fnumber = '" + empNumber + "') ");
+        if (StringUtils.isNotBlank(orgNumber)) {
+            preEntrySql.append(" and a.orgNumber = (select fid from t_org_admin where fnumber = '" + orgNumber + "') ");
         }
         logger.error("预入职sql:" + preEntrySql);
         IRowSet rs = DbUtil.executeQuery(ctx, preEntrySql.toString());
@@ -281,7 +288,28 @@ public class EmpPreEntryFacadeControllerBean extends AbstractEmpPreEntryFacadeCo
                 }
                 //兼职类人员任职结束时间
                 empbizEntryInfo.put("jobEndTime", rs.getString("cfjobendtime"));
-
+                //20251014 身份证地址 	
+                empbizEntryInfo.put("idcardaddress", rs.getString("idcardaddress"));
+                //fidcardenddate   身份证终止有效期
+                empbizEntryInfo.put("idcardenddate", rs.getString("idCardEndDate"));
+                //fidcardstartdate   身份证起始有效期
+                empbizEntryInfo.put("idcardstartdate", rs.getString("idCardBeginDate"));
+                //fconstellationid	星座    fzodiacid 属相      cfadjustinghours  	
+                empbizEntryInfo.put("constellation", rs.getString("constellation"));
+                empbizEntryInfo.put("zodiac", rs.getString("zodiac"));
+                empbizEntryInfo.put("adjustinghours", rs.getString("adjustinghours"));
+                empbizEntryInfo.put("gtiitemail", rs.getString("gtiitemail"));
+                //b. ffolkid  folkid , b.fnativeplace_l2  nativeplace
+                empbizEntryInfo.put("nativePlace", rs.getString("nativeplace"));
+              
+                // 名族
+                if (StringUtils.isNotBlank(rs.getString("folkid"))) {
+                	FolkCollection folkCollection = FolkFactory.getLocalInstance(ctx).getFolkCollection("where id = '" + rs.getString("folkid") + "'");
+                    if (folkCollection != null && folkCollection.size() > 0) {
+                    	FolkInfo folkInfo = folkCollection.get(0);
+                    	empbizEntryInfo.setMyFolk(folkInfo)  ;
+                    }
+                }
 
                 empbizInfo.getEntrys().add(empbizEntryInfo);
                 logger.error("单据信息:" + empbizInfo.toString());

+ 2 - 1
GDYSL/src/com/kingdee/eas/hr/affair/app/ResignBizBillControllerBeanEx.java

@@ -43,6 +43,7 @@ import org.apache.log4j.Logger;
  **/
 public class ResignBizBillControllerBeanEx extends ResignBizBillControllerBean{
 
+	
 	private static Logger logger =
 	        Logger.getLogger("com.kingdee.eas.hr.affair.app.ResignBizBillControllerBeanEx");
 	
@@ -87,7 +88,7 @@ public class ResignBizBillControllerBeanEx extends ResignBizBillControllerBean{
         	HRAffairBizBillEntryInfo affairEntry = (HRAffairBizBillEntryInfo)entryCollection.get(i);
            	//兼职终止单; 202503
         	ResignBizBillEntryInfo resignBizBillEntryInfo = entryCollection.get(i);
-        	createPDelFromEntry(ctx, resignBizBillEntryInfo);
+			createPDelFromEntry(ctx, resignBizBillEntryInfo);
         	//更新人员档案上的兼职失效日期
         	updateJobEndTime(ctx, resignBizBillEntryInfo.getId().toString());
         	

+ 27 - 15
GDYSL/src/com/kingdee/shr/compensation/service/CustomerFunctionSalaryService.java

@@ -40,22 +40,31 @@ public class CustomerFunctionSalaryService {
 	 * @throws BOSException 
 	 * @throws SQLException 
 	 */
-	public double getSalayBag(Map<String, Object> paramMap, HashMap<String, Object> tempMap, CalSchemeInfo calSchemeInfo ,String cmpItemId,String months, String mainTableRowFilter) throws BOSException, SQLException {
+	public double getSalayBag(Map<String, Object> paramMap, HashMap<String, Object> tempMap, CalSchemeInfo calSchemeInfo, String cmpItemId, String months, String mainTableRowFilter) throws BOSException, SQLException {
 		Context ctx = Tools.getInstance().getCtx();
 		String personId = (String)paramMap.get("T_HR_SCMPCALTABLE_FPERSONID");
-		String sql = "SELECT top 1 b.* FROM CT_SAL_SalaryBag a " + 
-				" left join CT_SAL_SalaryBagEntry b on a.fid = b.fbillId " + 
-				" where a.FBillState = 3 and CFPersonID = '" + personId + "' " + 
+		String sql = "SELECT top 1 b.* FROM CT_SAL_SalaryBag a  left join CT_SAL_SalaryBagEntry b on a.fid = b.fbillId  where a.FBillState = 3 and CFPersonID = '" +
+				personId + "' " +
 				" and a.CFCmpItemID = (select fid from T_HR_SCmpItem where FNumber = '" + cmpItemId + "') and b.CFMonths = '" + months + "'";
-		System.out.println("工资包查询sql:" + sql);
+		System.out.println("查询工资包"+ sql);
+				String countSql = "SELECT count(1) count FROM CT_SAL_SalaryBag a  left join CT_SAL_SalaryBagEntry b on a.fid = b.fbillId  where a.FBillState = 1 and CFPersonID = '" +
+						personId + "' " +
+						" and a.CFCmpItemID = (select fid from T_HR_SCmpItem where FNumber = '" + cmpItemId + "') and b.CFMonths = '" + months + "'";
+//		System.out.println("查询工资包"+ countSql);
+				IRowSet countRowSet = DbUtil.executeQuery(ctx, countSql);
+		int dataCount = 0;
+		while (countRowSet.next()){
+			dataCount = countRowSet.getInt("count");
+		}
+
 		IRowSet rowSet = DbUtil.executeQuery(ctx, sql);
-		if(rowSet.next()) {
-			if(rowSet.getObject("CFAmountPayable")==null || rowSet.getDouble("CFAmountPayable")==0) {
-				return rowSet.getDouble("CFMoneys");
-			}else {
+		if (rowSet.next()) {
+			if (dataCount > 0){
 				return rowSet.getDouble("CFAmountPayable");
 			}
-		} 
+
+			return rowSet.getDouble("CFMoneys");
+		}
 		return 0.0D;
 	}
 	
@@ -113,8 +122,11 @@ public class CustomerFunctionSalaryService {
 	 * @param months
 	 * @return
 	 * @throws BOSException 
-	 * @throws SQLException 
-	 */
+	 * @throws SQLException
+	 * 取工资提报,对于AssignType来说, 0表示兼职,1表示主要任职,3表示 无
+	 * 参数takeType 0表示主职,1表示兼职
+	 * 2025改使用变动记录
+ 	 */
 	public double getPutForward(Map<String, Object> paramMap, HashMap<String, Object> tempMap, CalSchemeInfo calSchemeInfo ,String projectNumber,String date, String takeType, String isHour, String mainTableRowFilter) throws BOSException, SQLException {
 		Context ctx = Tools.getInstance().getCtx();
 		SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd");
@@ -142,7 +154,7 @@ public class CustomerFunctionSalaryService {
 			String hourSql = "SELECT sum(b.CFTOTALWORKHOURS) sumHour FROM T_HR_SBatchSubmitShemeBill a "
 					+ "left join T_HR_SchemeBillEntry b on a.fid=b.fbillid "
 					+ "left join T_HR_SCmpEmpORelation c on b.FCMPEMPORELATIONID=c.fid "
-					+ "left join T_HR_EmpPostExperienceHis d on d.fid=c.femppostexphisid "  
+					+ "left join T_HR_EmpOrgRelation d on d.fid=c.femporgrelationid "
 					+ "where year(b.FEFFECTDATE)="+year+" and month(b.FEFFECTDATE)="+month+" "
 					+ "and d.FASSIGNTYPE='"+assignType+"' and a.FBILLSTATE = '3' and b.fpersonid='"+personId+"'";
 			logger.error("查询员工全职总工时SQL:"+hourSql);
@@ -158,7 +170,7 @@ public class CustomerFunctionSalaryService {
 				String amountSql = "SELECT sum(b.CFTOTALAMOUNT) sumAmount FROM T_HR_SBatchSubmitShemeBill a "
 						+ "left join T_HR_SchemeBillEntry b on a.fid=b.fbillid "
 						+ "left join T_HR_SCmpEmpORelation c on b.FCMPEMPORELATIONID=c.fid "
-						+ "left join T_HR_EmpPostExperienceHis d on d.fid=c.femppostexphisid "  
+						+ "left join T_HR_EmpOrgRelation d on d.fid=c.femporgrelationid "
 						+ "where year(b.FEFFECTDATE)="+year+" and month(b.FEFFECTDATE)="+month+" "
 						+ "and d.FASSIGNTYPE='1' and a.FBILLSTATE = '3' and b.fpersonid='"+personId+"'";
 				logger.error("查询员工全职总金额SQL:"+amountSql);
@@ -210,7 +222,7 @@ public class CustomerFunctionSalaryService {
 			String amountSql = "SELECT sum(b.CFTOTALAMOUNT) sumAmount FROM T_HR_SBatchSubmitShemeBill a "
 					+ "left join T_HR_SchemeBillEntry b on a.fid=b.fbillid "
 					+ "left join T_HR_SCmpEmpORelation c on b.FCMPEMPORELATIONID=c.fid "
-					+ "left join T_HR_EmpPostExperienceHis d on d.fid=c.femppostexphisid "  
+					+ "left join T_HR_EmpOrgRelation d on d.fid=c.femporgrelationid "
 					+ "where year(b.FEFFECTDATE)="+year+" and month(b.FEFFECTDATE)="+month+" "
 					+ "and d.FASSIGNTYPE='0' and a.FBILLSTATE = '3' and b.fpersonid='"+personId+"'";
 			logger.error("查询员工兼职总金额SQL:"+amountSql);