java mina的好处_浅谈MINA的使用

//这个方法用于接收监听接收到的报文数据,以进行相关的业务处理

@Override

public void messageReceived(IoSession session, Object message) throws Exception{

String m = message.toString();

String bcd = m.substring(m.length()-16);

//System.out.println(bcd);

byte[] bt = message.toString().getBytes();

byte[] keypwdbt = new byte[8];

System.arraycopy(bt, bt.length-8, keypwdbt, 0, 8);

String result = MySecurityUtil.bcd2Str(keypwdbt);

String msg = StringUtils.hexStr2Str(message.toString());

//PosCheckService posService = new PosCheckServiceImpl();

PosCheckService posCheckService = new PosCheckServiceImpl();

DataFlowService dataFlowService = new DataFlowServiceImpl();

MySecurityUtil ms = new MySecurityUtil();

//PosCheckService posService = new PosCheckServiceImpl();

if(msg != null){

String msgArr = msg.replace("|", ",");

String[] posArr = msgArr.split(",");

if(msg.toString().startsWith("0001")){

String checkmsg = "";//用于接收签到结果

String posno = posArr[1];

String key = posArr[2];

String keypwd = posArr[3];//异或加密后的验证码

StringBuffer sb = new StringBuffer();

sb.append(posArr[0]);

sb.append("|");

//以下将报文进行异或加密处理(不取最后一个元素)

for(int i=1;i

sb.append(posArr[i]+",");

}

System.out.println(sb);

//异或运算

byte[] b = XorUtil.xorChar(sb.toString().toCharArray());

//加密

byte[] key1 = MySecurityUtil.hexStr2Str(key.substring(0, key.length()/2)).getBytes();

byte[] key2 = MySecurityUtil.hexStr2Str(key.substring(key.length()/2)).getBytes();

byte[] p = ms.TripleDesEncrypt(b, key1, key2);

//转成字符串

String s = MySecurityUtil.bcd2Str(p);

BasCardPos basCardPos = posCheckService.checkPos(posno);

if(basCardPos != null && basCardPos.getIkey().equals(posArr[2])){

checkmsg = "00";//签到成功

}else if(basCardPos != null && basCardPos.getIkey() != posArr[2]){

checkmsg = "99";//密钥验证失败

}else{

checkmsg = "01";//签到失败

}

//插入日志

DataPosFlow dataPosFlow = new DataPosFlow();

dataPosFlow.setPosno(posno);

dataPosFlow.setVreturn(checkmsg);

dataFlowService.PosCheckDataFlow(dataPosFlow);

session.write(checkmsg+"#"+s);

log.info(checkmsg);

}else if(msg.toString().startsWith("0002")){

AccountInfoService accService = new AccountInfoServiceImpl();

String selectmsg = "";//用于接收查询账户返回的状态码

//取磁道内容

String cardnoecp = posArr[1];

//取终端号

String posno = posArr[2];

//获取密钥

String key = posArr[3];

//获取密码

String pwd = posArr[4];

//第一步检查终端的合法性

BasCardPos bcp = posCheckService.checkPos(posno);

StringBuffer sb = new StringBuffer();

if(bcp != null && bcp.getIkey().equals(key)){

List accList = accService.checkAccount(cardnoecp);

DataPosFlow dataPosFlow = null;

if(accList != null && accList.size() != 0){

selectmsg = "00";//查询成功

sb.append(selectmsg+"#");

for(AccountInfo account : accList){

//String hexAccountName = new String(account.getAccname().getBytes("UTF-8"), "GB18030");

sb.append(account.getCardid()+","+account.getCardno()+","

+account.getAccid()+","+account.getAccname()+","+account.getBalance()+"|");

dataPosFlow = new DataPosFlow();

dataPosFlow.setCardid(account.getCardid());

dataPosFlow.setAccid(account.getAccid());

dataPosFlow.setPosno(posno);

dataPosFlow.setVreturn(selectmsg);

dataFlowService.AccountInfoDataFlow(dataPosFlow, account);

}

session.write(sb);

}else{

selectmsg = "98";

session.write(selectmsg+"#");

}

}else if(bcp != null && !key.equals(bcp.getIkey())){

selectmsg = "99";

session.write(selectmsg+"#");

}

log.info(selectmsg);

}else if(msg.toString().startsWith("0003")){

ConsumeService consumeService = new ConsumeServiceImpl();

String consumemsg = "";

//获取cardid

String cardid = posArr[1];

//获取accid

String accid = posArr[2];

String trantype = posArr[3];

String amt = posArr[4];

//获取终端号

String posno = posArr[5];

//获取密钥

String key = posArr[6];

String pwd = posArr[7];

String possno = posArr[8];

//String field1 = posArr[8];

ConsumeParam param = new ConsumeParam();

param.setCardid(Float.parseFloat(cardid));

param.setAccid(3f);

param.setAmt(Float.parseFloat(amt)/100);

param.setPosno(posno);

param.setPossno(possno);

param.setTrainType(Float.parseFloat(trantype));

BasCardPos bcp = posCheckService.checkPos(posno);

//终端验证成功,验证卡是否可以在终端上使用

if(bcp != null && key.equals(bcp.getIkey())){

int count = consumeService.poscount(Integer.parseInt(cardid), Integer.parseInt(accid));

//count不为0说明卡片可以在终端上使用

if(count != 0){

consumemsg = consumeService.consume(param);

}else if(key != bcp.getIkey()){

consumemsg = "99";//密钥验证失败

}else if(count == 0){

consumemsg = "98";//不存在卡

}else{

consumemsg = "97";//密码错误

}

}

session.write(consumemsg+"#");

log.info(consumemsg);

}else if(msg.toString().startsWith("0004")){

String rejectmsg = "";

String cardid = posArr[1];

String rejectTranType = posArr[2];

String rejectPosno = posArr[3];

String rejectkey = posArr[4];

String rejectpwd = posArr[5];

String rejectTranId = posArr[6];

RejectGoodsParam param = new RejectGoodsParam();

param.setCardid(Integer.parseInt(cardid));

param.setKey(rejectkey);

param.setPosno(rejectPosno);

param.setPwd(rejectpwd);

param.setTranid(rejectTranId);

param.setTranType(Integer.parseInt(rejectTranType));//退货

BasCardPos bcp = posCheckService.checkPos(rejectPosno);

RejectGoodsService rgService = new RejectGoodsServiceImpl();

DataAccReturnService dataAccReturnService = new DataAccReturnServiceImpl();

if(bcp != null && rejectkey.equals(bcp.getIkey())){

//根据传入的信息查询用户的卡信息和原单号,以便验证交易信息是否属实

//验证成功,查询账户信息,返回账户信息

rejectmsg = rgService.rejectGoods(param);

//交易信息存在返回00向退货申请表中写入退货申请

if (rejectmsg.equals("00")) {

//查询交易记录

PayTranPay pay = rgService.getPayTranPay(param);

//验证成功将退货请求写入退货请求表

DataAccReturn dataAccReturn = new DataAccReturn();

dataAccReturn.setCashierno(rejectPosno);

dataAccReturn.setTranid(rejectTranId);

dataAccReturn.setPosno(rejectPosno);

dataAccReturn.setCardid(Integer.parseInt(cardid));

dataAccReturn.setAccid(Integer.parseInt(pay.getPaysubtype()));

dataAccReturn.setAmt(pay.getAmt());

dataAccReturn.setPosno(rejectPosno);

dataAccReturnService.addDataAccReturn(dataAccReturn);

}

}else if(bcp != null && !rejectkey.equals(bcp.getIkey())){

rejectmsg = "99";

}else{

rejectmsg = "97";

}

CardMeraccService cardMeraccService = new CardMeraccServiceImpl();

CardMeracc cardm = cardMeraccService.getCardMeraccByCardId(Integer.parseInt(cardid));

DataPosFlow dataPosFlow = new DataPosFlow();

dataPosFlow.setCardid(Integer.parseInt(cardid));

dataPosFlow.setPosno(rejectPosno);

dataPosFlow.setVreturn(rejectmsg);

//写入日志

dataFlowService.RejectGoodsDataPosFlow(dataPosFlow, cardm);

session.write(rejectmsg+"#");

}else if(msg.toString().startsWith("0005")){

String reveremsg = "";

//pos终端号

String posno = posArr[1];

//密钥

String key = posArr[2];

//批次号(POS终端生成)

String posSno = posArr[3];

//预留字段

//String field1 = posArr[4];

ReverseService reverserService = new ReverseServiceImpl();

reveremsg = reverserService.reverse(posSno, posno);

session.write(reveremsg+"#");

}

}

log.info("服务端收到的数据为:"+message);

}

@Override

public void messageSent(IoSession session, Object message) throws Exception{

log.info("服务端发送消息成功!");

}

@Override

public void sessionIdle(IoSession session, IdleStatus status) throws Exception{

log.info("服务端进入空闲状态...");

}

@Override

public void exceptionCaught(IoSession session, Throwable cause) throws Exception{

log.error("服务端发送异常...", cause);

}

}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值