您好,欢迎访问三七文档
当前位置:首页 > 商业/管理/HR > 质量控制/管理 > 移动短信交易项目-GitHub
L/O/G/O移动短信交易项目FDZZ第7小组冯胜清段思谋张戈张明珺目录软件架构详细设计详细业务功能流程页面设计4123不足与改进5目录软件架构详细设计详细业务功能流程页面设计4123不足与改进51.1层次架构分层结构,开发人员只需要专注于自己的事情,不必管其他无关的事情低耦合,高内聚1.2数据流处理架构(协议)ProtocolAnalysis类publicclassProtocolAnalysis{privatestaticProtocolAnalysisprotocolAnalysis=null;publicstaticStringCMD_LOGIN=CMD001;//登陆PDU代码publicstaticStringCMD_LOGOUT=CMD002;//登出PDU代码publicstaticStringCMD_MESSAGE=CMD003;//信息PDU代码publicstaticStringSTATUS_SUCCESS=0000;//成功状态码//………更多常量privateLoglogger=LogFactory.getLog(ProtocolAnalysis.class);privateProtocolAnalysis(){}publicstaticProtocolAnalysisgetInstance(){}publicStringmakeRequestMessage(MapString,Stringcontent){}//客户端生成请求报文publicMapString,StringanalysisResponseMessage(Stringmessage){}//客户端解析响应报文publicMapString,StringanalysisRequestMessage(Stringmessage){}//服务端解析请求报文publicStringmakeResponseMessage(MapString,Stringcontent){}//服务端生成响应报文publicStringcomleteMessageLen(Stringstring){}//状态和短信长度位不够时,需要补充0空格publicStringcompletePhoneLen(Stringstring){}//地址不够长时补充空格}1.3模块架构目录软件架构详细设计详细业务功能流程页面设计4123不足与改进52.1JDBC模板与实体映射JdbcTemplateEntityMapping功能工厂模式实现把数据库的一行查询记录转换成一个对象传入ResultSet,返回JavaBean预先生产好映射类,提高效率只需要往工厂传入一个mapping的名字,即可获得一个mappping对象封装了发送SQL语句的代码减少了重复代码的编写实现了层次的分离集中了异常处理2.2DAO数据访问层功能与组成预先生产好各个DAO,需要的时候,传入名字即可获得DAO的引用这里设计SQL语句,然后交给JdbcTemplate去执行,无需管数据库的相关处理这里封装了各种对数据库的基本操作,增删改查,返回javaBean对象,链表或者其他类型工厂模式编写SQL语句封装好基本操作2.3业务逻辑层•不需要理上层如何调用业务•实现统一接口•根据需求编写业务代码•连事务都不需要管理•往DAO层注入Connection•根据需要调用DAO访问数据库业务逻辑层专注与业务逻辑功能,开发人员不必要管太多其他的事情,如事务管理,业务转发,访问数据库等。若需要为项目开发多一个功能,这需要在这里添加一个业务逻辑模块即可。统一的入口makeBusiness()主要的业务逻辑功能调用DAO访问数据库2.4业务跳转设计//获取一个业务模块getService();//进行业务转发doBusiness();//打开一个数据库连接openConnection();//初始化业务模块initialService();//ServiceProxy//业务代理,主要是为//了加上一层事务管理try{beginTransaction();//真正执行业务method.invoke();commit();catch(Exceptione){rollback();}finally{close();}传入SP业务号码即可获得一个代理获取PDU代码ifCMD001{//登陆处理}ifCMD002{//登出处理}ifCMD003{//短信处理//记录此条短信到数据库messageService.send();request.get(destinate);ifSP业务号码{getService(destinate);checkSP(request);makeBusiness(req);}if手机号码{checkExist();checkOnline();while(hasMessages()){receiveMessage();}}}传入Map:request2.5日志记录使用的框架:log4j添加的包:commons-logging.jarlog4j-1.2.16.jar配置文件:log4j.properties日志文件:mcp,mcp.html使用代码:importorg.apache.commons.logging.Log;importorg.apache.commons.logging.LogFactory;privateLoglogger=LogFactory.getLog(ServiceManager.class);if(logger.isInfoEnabled()){logger.info(启动业务成功....);}log4j.rootCategory=DEBUG,stdout,fileout,fileout2log4j.appender.stdout=org.apache.log4j.ConsoleAppenderlog4j.appender.stdout.layout=org.apache.log4j.PatternLayoutlog4j.appender.stdout.layout.ConversionPattern=[%d{yyyy-MM-ddHH:mm:SSS}][%C:%M]%m%nlog4j.appender.fileout=org.apache.log4j.DailyRollingFileAppenderlog4j.appender.fileout.File=logs/mcplog4j.appender.fileout.DatePattern=yyyy-MM-dd'.html'log4j.appender.fileout.layout=org.apache.log4j.HTMLLayoutlog4j.appender.fileout2=org.apache.log4j.RollingFileAppenderlog4j.appender.fileout2.Threshold=DEBUGlog4j.appender.fileout2.File=logs/mcp.loglog4j.appender.fileout2.Append=truelog4j.appender.fileout2.MaxFileSize=1024KBlog4j.appender.fileout2.MaxBackupIndex=10000log4j.appender.fileout2.layout=org.apache.log4j.PatternLayoutlog4j.appender.fileout2.layout.ConversionPattern=[%d{yyyy-MM-ddHH:mm:SSS}][%C:%M]%m%nlog4j.logger.org.fdzz=DEBUG目录软件架构详细设计详细业务功能流程页面设计4123不足与改进53.1登陆、登出功能流程if(checkOnline()){socket.lose();}else{loginService();}checkUsername();checkPassword();checkStatus();returnresponse;receiveMessage();doBusiness();//断开连接,catch到异//常,执行logoutService//关闭连接//结束线程ServerLoginService启动BusinessClient线程if登陆请求{return重复登陆;}If登出请求{logoutService();//关闭连接//结束线程}updateLoginDate();updateModifyDate();LogoutServiceServiceManager3.2发送、接收短信流程Serverwhile(hasMessage()){nextMessage();send();}while(beConnect){readUTF();doBusiness();}启动BusinessClient线程checkLeftMoney();addMessageTable();addTradeTable();cutMessageMoney();If(isSPMessage){updateStatus();}ifCMD003{//记录此条短信到数据库sendTextMessage();if普通短信{checkExist();checkOnline();while(hasMessage()){receiveMessage();send();}moveToHistoryTable();}MapString,IteratorMapString,StringreceiveMessages;receiveMessages.get(destinate).hasNext();receiveMessages.get(destinate).next();receiveMessages=mtpmsgDAO.get(destinate);3.3查询天气流程booleancheckSP=this.checkOpenSP(source,destinate);if(oU.equals(oS)){returntrue;}else{returnfalse;}usr表、sp表booleancheckFee=this.checkLeftMoney();检查余额usr表if(balancespCost){returnfalse;}returntrue;Stringdate=this.getDate(message);获取日期if(){tqMessage=无当日天气预报;}else{this.updateBuyTimes(date,mtpspqsinfo.getBuyTimes()+1);}根据id更新购买次数returnmtpspqsinfoDAO.updateBuyTimesById(id,times);sp表插入用户交易表中this.addMessageTrade(messageId,source);mtptransDAO=(MtptransDAO)daoFactory.getDAO(DAOFactory.MtptransDAO,connection);Trans表this.cutMoney();usr表doubleleftMoney=mtpuser.getUserBalance()-spCost;MapString,Stringresponse=newHashMapString,String();response.put(ProtocolAnalysis.MAP_STATUS,status);response.put(ProtocolAnalysis.MAP_DESTINATE,source);//响应包的目标地址response.put(ProtocolAnalysis.MAP_SOURCE,ProtocolAnalysis.MAP
本文标题:移动短信交易项目-GitHub
链接地址:https://www.777doc.com/doc-6155135 .html