⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 .#user.java.1.9

📁 银行项目为后台socket通信写的程序
💻 9
字号:
/****************************************************************************
 * Package		: com.ecSolutions.ecAppServer.appSession
 * File			: User.java
 * Create Date  : 2007-7-20
 * Author		: Steven Chen
 * 
 * Copyright(C) 2006 ecSolutions(shanghai) Co.,Limited.All Rights Reserved.
 *			
 ***************************************************************************/
package com.ecSolutions.ecAppServer.appSession;

import java.io.File;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.RandomAccessFile;
import java.nio.MappedByteBuffer;
import java.nio.channels.FileChannel;
import java.nio.charset.Charset;
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import com.ecSolutions.ecAppServer.util.StringUtil;

import org.apache.log4j.Logger;

import com.ecSolutions.ecAppServer.util.DbUtil;

public class User {
	private String messageSize;

	private String messageType;

	private String machineName;

	private String userId;

	private String password;

	public int port = 0;

	private static final String MENU_FITASMUN = "FITASMUN";

	private static Logger log = Logger.getLogger("User");
    
	private String date="";
	
	public User(String request) {
		this.messageSize = request.substring(0, 4);
		this.messageType = request.substring(4, 8);
		this.machineName = request.substring(8, 24);
		this.userId = request.substring(24, 34);
		this.password = request.substring(34, 44);
	}

	public String getMachineName() {
		return machineName;
	}

	public void setMachineName(String machineName) {
		this.machineName = machineName;
	}

	public String getMessageSize() {
		return messageSize;
	}

	public void setMessageSize(String messageSize) {
		this.messageSize = messageSize;
	}

	public String getMessageType() {
		return messageType;
	}

	public void setMessageType(String messageType) {
		this.messageType = messageType;
	}

	public String getPassword() {
		return password;
	}

	public void setPassword(String password) {
		this.password = password;
	}

	public String getUserId() {
		return userId;
	}

	public void setUserId(String userId) {
		this.userId = userId;
	}

	public String userLogin() throws UserLoginFailException {
		String strMenu = null;
		DbUtil du = new DbUtil("oracle", "direct");
		Connection conn = du.getConn();
		if (conn == null) {
			log.error("Connection is NULL !!!");
			return null;
		}

		String sql = "select PASSWRD,MENU from TAUSRMAS where FLUSRID = ?";
		PreparedStatement pstmt = null;
		ResultSet rs = null;
		String passwd = "", menu = "";
		try {
			pstmt = conn.prepareStatement(sql);
			pstmt.setString(1, userId);
			rs = pstmt.executeQuery();
			if (rs.next()) {
				passwd = rs.getString("PASSWRD");
				menu = rs.getString("MENU");
				if (menu != null && menu.trim().equals("")) {
					menu = MENU_FITASMUN;
				}
			} else {
				// throw User Login Fail Exception with Code "EA01622";
			}
		} catch (SQLException e) {
			log.error("user login query exception:" + e.toString());
		} finally {
			if (rs != null) {
				try {
					rs.close();
				} catch (SQLException e) {
				}
				rs = null;
			}
			if (pstmt != null) {
				try {
					pstmt.close();
				} catch (SQLException e) {
				}
				pstmt = null;
			}
			if (conn != null) {
				try {
					conn.close();
				} catch (SQLException e) {
				}
				conn = null;
			}
		}
		if (passwd.trim().equals(password.trim())) {
			strMenu = menu;
		} else {
			// throw User Login Fail Exception with Code "EA01622";
			log.info("login user: " + userId + "with password: " + password
					+ "  login failure, user password is invalid.");
			throw new UserLoginFailException("EA01622");
		}

		return strMenu;
	}

	public String createUserSession() throws UserLoginFailException {
		int sessionId = 0;
		int pid = 3000;
		boolean hasRecord = false;
		DbUtil du = new DbUtil("oracle", "direct");
		Connection conn = du.getConn();
		if (conn == null) {
			log.error("Connection is NULL !!!");
			return null;
		}
		PreparedStatement pstmt = null;
		ResultSet rs = null;
		String sql = "select PID from T56M0XXX where SESSID = ?";
		String updateSql = "UPDATE T56M0XXX set pid = ?,sessid=?, lochost=?, comport=? where SESSID=?";
		String insertSql = "INSERT INTO T56M0XXX(SESSID,PID,LOCHOST,COMPORT) values(?,?,?,?)";

		try {
			pstmt = conn.prepareStatement(sql);
			pstmt.setInt(1, 9999);
			rs = pstmt.executeQuery();
			if (rs.next()) {
				pid = rs.getInt(1);
				pid++;
				if (pid > 4000) {
					pid = 3000;
				}
				sessionId = pid;
				port = 2000 + sessionId;
				hasRecord = true;
			} else {
				sessionId = pid;
				port = 2000 + sessionId;
				hasRecord = false;
			}
			if (hasRecord) {
				pstmt = conn.prepareStatement(updateSql);
				pstmt.setInt(1, pid);
				pstmt.setInt(2, sessionId);
				pstmt.setString(3, machineName);
				pstmt.setString(4, String.valueOf(port));
				pstmt.setInt(5, 9999);
				pstmt.execute();
			} else {
				pstmt = conn.prepareStatement(insertSql);
				pstmt.setInt(1, sessionId);
				pstmt.setInt(2, pid);
				pstmt.setString(3, machineName);
				pstmt.setString(4, String.valueOf(port));
				pstmt.execute();
			}

		} catch (SQLException ex) {
			ex.printStackTrace();
			log.error(ex.toString());
			// add another ERROR CODE future
			throw new UserLoginFailException("TAM0074");
		} finally {
			if (rs != null) {
				try {
					rs.close();
				} catch (SQLException e) {
				}
				rs = null;
			}
			if (pstmt != null) {
				try {
					pstmt.close();
				} catch (SQLException e) {
				}
				pstmt = null;
			}
			if (conn != null) {
				try {
					conn.close();
				} catch (SQLException e) {
				}
				conn = null;
			}
		}

		return String.valueOf(sessionId);
	}

	public static void insertPid(User ul, Connection connection, int pid,
			int sessionId) throws SQLException {

		PreparedStatement preparedStatement = connection
				.prepareStatement("INSERT INTO TAUSRMAS(SESSID,PID,LOCHOST,COMPORT) values(?,?,?,?);");
		preparedStatement.setInt(1, sessionId);
		preparedStatement.setInt(2, pid);
		preparedStatement.setString(3, ul.getMachineName());
		preparedStatement.setString(4, "5000");
		preparedStatement.execute();
		preparedStatement.close();
	}

	public static void updatePid(int pid, Connection connection)
			throws SQLException {
		PreparedStatement preparedStatement = connection
				.prepareStatement("UPDATE TAUSRMAS set pid = ? where pid = ?");
		preparedStatement.setLong(1, pid);
		preparedStatement.setLong(2, pid);
		preparedStatement.execute();
		preparedStatement.close();

	}

	public void createUserWorkArea(String sessionID) {
		preProcessDirectory(sessionID);
		try {
			createOnlineFile(sessionID);
			createLADMAPFile(sessionID);
		} catch (IOException e) {
			log.error("Create User Working Area ERROR!.......");
			e.printStackTrace();
		}
	}

	private static boolean preProcessDirectory(String sessionId) {

		if (!new File("TTY").isDirectory())

			new File("TTY").mkdirs();
		if (!new File("TTY/" + sessionId).isDirectory())
			new File("TTY/" + sessionId).mkdirs();

		return true;
	}

	private static void createOnlineFile(String sessionId) throws IOException {
		String source = "Y";
		byte buf[] = source.getBytes();
		FileOutputStream f = new FileOutputStream("TTY/" + sessionId
				+ "/ONLINE.DAT");
		f.write(buf);
		f.close();

	}

	private void createLADMAPFile(String sessionId) throws IOException {
		T00M0 tm = readTMFile();
        tm.setT00CURRDAT(date);
		LDAMAP ldp = setLDAMAP(tm);
		FileOutputStream f = new FileOutputStream("TTY/" + sessionId
				+ "/LDAMAP.DAT");
		String ldvalue = getLDAMP(ldp);
		byte buf[] = ldvalue.getBytes();
		f.write(buf);
		f.close();
	}

	private static String getLDAMP(LDAMAP ldp) {
		StringBuffer ldpsb = new StringBuffer();
		ldpsb
				.append(StringUtil.stringFitToLength(ldp.getProcessDateCC(), 2))
				.append(StringUtil.stringFitToLength(ldp.getProcessDateYY(), 2))
				.append(StringUtil.stringFitToLength(ldp.getProcessDateMM(), 2))
				.append(StringUtil.stringFitToLength(ldp.getProcessDateDD(), 2))
				.append(StringUtil.stringFitToLength(ldp.getUserId(), 10))
				.append(StringUtil.stringFitToLength(ldp.getLcyCode(), 3))
				.append(
						StringUtil
								.stringFitToLength(ldp.getWorkstationId(), 10))
				.append(StringUtil.stringFitToLength(ldp.getJobNumber(), 6))
				// not set
				.append(
						StringUtil.stringFitToLength(ldp.getDecimalNotation(),
								1))
				.append(StringUtil.stringFitToLength(ldp.getQdateSep(), 1))
				.append(StringUtil.stringFitToLength(ldp.getQdataFmt(), 3))
				.append(StringUtil.stringFitToLength(ldp.getOutputMonth(), 3))
				.append(StringUtil.stringFitToLength(ldp.getBankName(), 35))
				.append(StringUtil.stringFitToLength(ldp.getCorpCcy(), 3))
				.append(StringUtil.stringFitToLength(ldp.getSwiftAdd(), 11))
				.append(StringUtil.stringFitToLength(ldp.getHoBchCode(), 4))
				.append(StringUtil.stringFitToLength(ldp.getHoIrrCcy(), 15))
				.append(StringUtil.stringFitToLength(ldp.getHoFxAdjGl(), 20))				
				.append(StringUtil.stringFitToLength(ldp.getBankId(), 1))
				// not set
				.append(StringUtil.stringFitToLength(ldp.getBranchId(), 1))
				// not set
				.append(StringUtil.stringFitToLength(ldp.getExAmtTol(), 3))
				.append(StringUtil.stringFitToLength(ldp.getFcyCode(), 3))
				// not set
				.append(StringUtil.stringFitToLength(ldp.getDeptCode(), 3))
				.append(StringUtil.stringFitToLength(ldp.getDayEndFlag(), 1))
				.append(
						StringUtil.stringFitToLength(ldp.getTempFunctionName(),
								8))
				// not set
				.append(StringUtil.stringFitToLength(ldp.getProductId(), 4))
				// not set
				.append(StringUtil.stringFitToLength(ldp.getProductName(), 8))
				// not set
				.append(StringUtil.stringFitToLength(ldp.getFnctionName(), 8))
				// not set
				.append(StringUtil.stringFitToLength(ldp.getTxBch(), 10))
				.append(StringUtil.stringFitToLength(ldp.getOvrUserId(), 10))
				.append(
						StringUtil.stringFitToLength(ldp.getNextProcessDate(),
								8))
				.append(
						StringUtil.stringFitToLength(ldp.getPrexProcessDate(),
								8))
				.append(StringUtil.stringFitToLength(ldp.getDayEndFlagInd(), 1))
				.append(StringUtil.stringFitToLength(ldp.getWeekEndFlag(), 1))
				.append(StringUtil.stringFitToLength(ldp.getBiWeekEndFlag(), 1))
				.append(StringUtil.stringFitToLength(ldp.getMonthEndFlag(), 1))
				.append(
						StringUtil.stringFitToLength(ldp.getQuarYearEndFlag(),
								1))
				.append(
						StringUtil.stringFitToLength(ldp.getHalfYearEndFlag(),
								1))
				.append(StringUtil.stringFitToLength(ldp.getYearEndFlag(), 1))
				.append(StringUtil.stringFitToLength(ldp.getSpecialFlag1(), 1))
				.append(StringUtil.stringFitToLength(ldp.getSpecialFlag2(), 1))
				.append(StringUtil.stringFitToLength(ldp.getSpecialFlag3(), 1))
				.append(StringUtil.stringFitToLength(ldp.getDateFmt(), 1))
				.append(StringUtil.stringFitToLength(ldp.getProcessBch(), 8))
				// not set
				.append(StringUtil.stringFitToLength(ldp.getSfStatus(), 1))
				// not set
				.append(StringUtil.stringFitToLength(ldp.getDummyRunInd(), 1))
				.append(StringUtil.stringFitToLength(ldp.getBatchApprFlag(), 1))// not
																				// set
				.append(StringUtil.stringFitToLength(ldp.getFiller(), 1))// notset
				.append(StringUtil.stringFitToLength(ldp.getAcudBui(), 1));// not
																			// set

		return ldpsb.toString();
	}

	private static T00M0 readTMFile() throws IOException {

		RandomAccessFile inFile = new RandomAccessFile("/TAMIC23/T2311/TAM23RT/BIN/T00M0.DAT", "r"); 
		//RandomAccessFile inFile = new RandomAccessFile("c:/T00M0.DAT", "r");
		FileChannel in = inFile.getChannel();

		MappedByteBuffer mappedBuffer = in.map(FileChannel.MapMode.READ_ONLY,
				0, inFile.length());
		String charBuffer = Charset.forName("ISO-8859-1").decode(mappedBuffer)
				.toString();
		System.out.println("charBuffer: " + charBuffer);
		T00M0 tm = new T00M0(StringUtil.stringFitToLength(charBuffer, 177));
		return tm;
	}

	private LDAMAP setLDAMAP(T00M0 tm) {

		LDAMAP ldp = new LDAMAP();
		String currentDate = tm.getT00CURRDAT();
		ldp.setProcessDateCC(currentDate.substring(0, 2));
		ldp.setProcessDateYY(currentDate.substring(2, 4));
		ldp.setProcessDateMM(currentDate.substring(4, 6));
		ldp.setProcessDateDD(currentDate.substring(6, 8));
		ldp.setUserId(setNotNull(userId));		
		ldp.setWorkstationId(setNotNull(machineName));
		ldp.setBankName(setNotNull(tm.getT00BANKNAME()));
		ldp.setLcyCode(setNotNull(tm.getT00LCYCODE()));
		ldp.setCorpCcy(setNotNull(tm.getT00CORPCCY()));
		ldp.setDecimalNotation(".");
		ldp.setOutputMonth(setNotNull(tm.getT00MONCHAR()));
		ldp.setQdateSep(setNotNull(tm.getT00DATESEP()));
		ldp.setHoBchCode(setNotNull(tm.getT00HEADBRH()));
		if (tm.getT00DATEFMT().equals("M") || tm.getT00DATEFMT().equals("3")
				|| tm.getT00DATEFMT().equals("6")
				|| tm.getT00DATEFMT().equals("9")) {
			ldp.setQdataFmt("MDY");
		} else if (tm.getT00DATEFMT().equals("D")
				|| tm.getT00DATEFMT().equals("2")
				|| tm.getT00DATEFMT().equals("5")
				|| tm.getT00DATEFMT().equals("8")) {
			ldp.setQdataFmt("DMY");
		} else if (tm.getT00DATEFMT().equals("Y")
				|| tm.getT00DATEFMT().equals("1")
				|| tm.getT00DATEFMT().equals("4")
				|| tm.getT00DATEFMT().equals("7")) {
			ldp.setQdataFmt("YMD");
		}
		ldp.setDateFmt(setNotNull(tm.getT00DATEFMT()));
		ldp.setSwiftAdd(setNotNull(tm.getT00SWIFTAD()));
		ldp.setHoIrrCcy(setNotNull(tm.getT00IRRECCY()));
		ldp.setHoFxAdjGl(setNotNull(tm.getT00FXADJGL()));
		ldp.setExAmtTol(setNotNull(tm.getT00AMTTOLE()));

		ldp.setDeptCode(setNotNull(tm.getT00DEPTCOD()));
		ldp.setDayEndFlag(setNotNull(tm.getT00DAYENDF()));
		ldp.setDayEndFlagInd(setNotNull(tm.getT00DAYEFGI()));
		ldp.setWeekEndFlag(setNotNull(tm.getT00WEEKEFG()));
		ldp.setBiWeekEndFlag(setNotNull(tm.getT00BIWKEFG()));
		ldp.setMonthEndFlag(setNotNull(tm.getT00MONTEFG()));
		ldp.setQuarYearEndFlag(setNotNull(tm.getT00QYREFGI()));
		ldp.setHalfYearEndFlag(setNotNull(tm.getT00HYREFGI()));
		ldp.setYearEndFlag(setNotNull(tm.getT00YEAREFG()));
		ldp.setSpecialFlag1(setNotNull(tm.getT00SPECFG1()));
		ldp.setSpecialFlag2(setNotNull(tm.getT00SPECFG2()));
		ldp.setSpecialFlag3(setNotNull(tm.getT00SPECFG3()));
		ldp.setNextProcessDate(tm.getT00NEXTDAT().trim());
		ldp.setPrexProcessDate(tm.getT00LASTDAT().trim());
		ldp.setDummyRunInd(setNotNull(tm.getT00DUMRUNI()));
		ldp.setHoFxAdjGl(setNotNull(tm.getT00FXADJGL()));		
		return ldp;
	}

	public void setcurrentdate(String dt) {		
		date=dt;
	}
	
	private static String setNotNull(String value) {
		return (value == null) ? "" : value;
	}

	public String getPort() {
		return String.valueOf(port);
	}

	
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -