好处"/>
java 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);
}
}
更多推荐
java mina的好处
发布评论