从10月8号到今天23号,来到工作已经半个月了,这是我人生中真正意义上的一次步入社会,用自己20年的坚持和努力取得的人生第一步,说实话,感觉自己真的是个lucky dog,好像是在眷顾我,所有的事情都是那么顺利,让我没有理由不珍惜现在的所有,谢谢老师,一次次的满足我的请求,这半月我收货到的不管是从为人处世,团队管理,还是技术方面都很多,所以每天晚上睡觉都会一躺就着,因为一睁开眼就会忙碌一天,不过真的真的很充实,下面先说说我从技术上的收获。
最近这段时间一直接触的是后台,咋说呢?最大的感受就是在学校的实践对我的影响是毋庸置疑的,加上后来参加java3.1和4.0,s让我能够比较快的接受现在的框架,说一下我最近做的一个模块:邀请管理。
需求:我们公司是一个理财公司,大家都知道邀请码,如果一个人邀请了另一个人会让被邀请人在注册时输入邀请码,如下图:
那在后来呢,在没有升级之前是没有对邀请人和被邀请人进行关联的,只有一个实体,那就有人给客服打电话说我明明已经输入邀请码了呀,为什么没有显示,那为什么邀请人会这么想要别人输入邀请码呢,因为如果被邀请人投资了,那么邀请人会有提成,所以需求就这么产生了,我们需要添加邀请人和被邀请人的关系,并且可以禁用,但是不可以修改,因为如果可以修改,操作后台的人就发财了,他可以随便把邀请人换成自己,所以这个是不可以的,而且还需要可以导出,其实还是挺简单的。下面我们先来说说查询功能:
MyBatis:
在这里我们需要写入查询语句,这个语句真的很庞大,需要从客户表中查出邀请人和被邀请人的信息,然后去投资表中查出被邀请人投资金额,在邀请人和被邀请人的关系表中查出该邀请人和被邀请人的关系:
T_CUST_USER:客户表;T_LOAN_BID:投资表;T_CUST_USER_INVITE:邀请表
下面看下我的sql语句:
<span style="font-family: Arial, Helvetica, sans-serif;"><sqlMap namespace="<strong>CustomerUserInvite</strong>"></span>
<select id="<strong>queryInviterList</strong>" parameterClass="map" resultClass="java.util.HashMap"> <![CDATA[ SELECT t8.*,T9."NAME" FROM( SELECT t7.* FROM (SELECT t5.USER_ID, t5.USER_NAME, t5.INVITE_USER_ID, t6.USER_NAME AS INVITE_USER_NAME, t5.BID_AMOUNT, T5.operator_, T5.STATUS, t5.BID_STATUS, TO_CHAR(T6.CREATE_TIME, 'yyyy-mm-dd hh24:mi:ss') CREATE_TIME, T5."ID" FROM ( SELECT t3.USER_ID, T4.USER_NAME, t3.INVITE_USER_ID, t3.BID_AMOUNT, T3.operator_, t3.BID_STATUS, T3.STATUS,T3."ID" FROM ( SELECT t1.USER_ID, t1.INVITE_USER_ID, t1.OPERATOR_, t2.BID_AMOUNT, t2.BID_STATUS, t1."ID", T1.STATUS FROM T_CUST_USER_INVITE t1 LEFT JOIN T_LOAN_BID t2 ON t1.INVITE_USER_ID = t2.USER_ID ) t3 LEFT JOIN T_CUST_USER t4 ON t3.USER_ID = t4.ID ) t5 LEFT JOIN T_CUST_USER t6 ON t5.INVITE_USER_ID = t6. ID) t7 WHERE 1=1)t8 LEFT JOIN T_USER_USER t9 ON t8.operator_=T9.id ]]> <isNotEmpty prepend="" property="searchContent"> WHERE (T8.USER_NAME LIKE '%$searchContent$%' OR T8.INVITE_USER_NAME LIKE '%$searchContent$%' ) </isNotEmpty> <![CDATA[ ORDER BY t8.STATUS DESC,t8.CREATE_TIME DESC ]]> </select> </sqlMap>
D层:
public class InviterDAO extends AbstractBaseDAO<CustomerUserInviteBean> { public InviterDAO(SqlMapClient sqlMap) { super(sqlMap); } // 对应xml中的命名空间 @Override public String getNameSpace() { return "CustomerUserInvite"; } // 对应数据表 @Override public String getTableName() { return "T_CUST_USER_INVITE"; } /** * 查询全部-王丹 * * @param paramMap * @return * @throws Exception */ public DataWrap pageQuery(Map paramMap) throws Exception { return (DataWrap) DataAccessor.query(getNameSpace() + ".<strong>queryInviterList</strong>", paramMap, RS_TYPE.PAGED); } }
Service:
/** * 分页查询全部-王丹-2015年10月14日16:43:38 * * @param paramMap * @return * @throws Exception */ public DataWrap pagingQuery(Map inputMap) throws Exception { return new InviterDAO(null).pageQuery(inputMap); }
controller这儿需要注意一下:
我们不是直接去找controller,而是放到配置文件中,通过name去查,用的是struts:
<!-- 邀请人管理 --> <service name="InviterService" class="com.voiinnov.puhuilicai.customer.controller.InviterController"></service>
下面看下controller:
public class InviterController extends AService { private static Logger logger = Logger.getLogger(InviterController.class); private InviterService inviterService = new InviterService(); @SuppressWarnings({ "unchecked", "rawtypes" }) public void listInviter(Context context) { List errorList = context.errList; // 用于存放返回结果,并用json返回到界面 Map outputMap = inviterService.outputMap; try { DataWrap dataWarp = this.inviterService .pagingQuery(context.contextMap); // 结果集 outputMap.put("dw", dataWarp); outputMap.put("searchContent", context.contextMap.get("searchContent")); } catch (Exception e) { e.printStackTrace(); errorList.add("系统错误,请联系系统管理员!"); logger.error(this.getClass().getName() + ":", e); e.printStackTrace(); } if (context.errList.isEmpty()) { Output.jspOutput(outputMap, context, "/puhuilicai/customer/InviterList.jsp"); } else { outputMap.put("errList", context.errList); Output.jspOutput(outputMap, context, "/error.jsp"); } }
jsp中:
<body onload="setAction();"> <form name="form1" id="form1"<strong> action="../servlet/defaultDispatcher"</strong> method="post"> <input name="__action" value="<strong>InviterService.listInviter</strong>" type="hidden" /> <input name="statusShow" value="${statusShow }" type="hidden" /> <!--头部开始--> <div id="fixedLayer"> <div class="main"> <div class="main_c main_bg"> <div class="main_nav"> <div class="nav_pic"> <a href="javascript:void(0)" title="新增" onclick="initInviter()"><img src="${ctx }/commons/images/system/table_create1.gif" /></a> <a href="javascript:void(0);" title="导出" onclick="exportInviter()"> <img src="../commons/images/system/ta_download1.jpg"></a> <ul style="float: right; margin-right: 5px; text-align: left;"> <li><a href="javascript:void(0)" title="启用" onclick="updateStatus(0)"> 启 用</a></li> <li><a href="javascript:void(0)" title="停用" onclick="updateStatus(-2)"> 禁 用</a></li> </ul> </div> </div> </div> </div> </div> <!--头部结束--> <!-模糊查询开始--> <div class="margintop40"></div> <div class="main"> <div class="main_c main_bg"> <!--自适应宽度 -start--> <div class="table_scroll"> <table width="100%" border="0" cellspacing="0" cellpadding="0"> <tr> <td align="center" valign="top"> <table width="100%" border="0" align="center" cellpadding="0" cellspacing="0" class=""> <tr align="center" valign="middle"> <td height="35" align="left" valign="middle" class="table_title_td_bg"> <div style="float: left; line-height: 30px;"> <span class=" margin_left10 font_white"><strong></strong></span> </div> <%@ include file="/commons/pageControl.jsp"%> <!-- 搜索和排序 -start--> <div style="float: right; line-height: 30px; width: 450px;"> <div class="tsearch-panel-fields" style="margin-top: 6px;"> <label for="searchContent">邀请人,被邀请人</label> <input name="searchContent" id="searchContent" type="text" class="span3" value="${searchContent }" /> </div> <input type="image" onclick="doSearch();" src="${ctx }/commons/images/system/btn_search.png" style="width: 50px; height: 23px; margin-top: 6px; margin-left: 5px;" /> </div> <!-- 搜索和排序 -end--> </tr> </table> </td> </tr> </table> </div> <!-- 查询表格 --> <table width="100%" border="1" align="center" cellpadding="0" cellspacing="0" class="table_style table2"> <tr> <th style="text-align: center;" class="table_th_bg">序号 </td> <th style="text-align: center;" class="table_th_bg">邀请人</th> <th style="text-align: center;" class="table_th_bg">被邀请人</th> <th style="text-align: center;" class="table_th_bg">注册时间</th> <th style="text-align: center;" class="table_th_bg">操作员</th> <th style="text-align: center;" class="table_th_bg">投资金额</th> <th style="text-align: center;" class="table_th_bg">投资状态</th> <th style="text-align: center;" class="table_th_bg">状态</th> </tr> <!-- 遍历查询结果 --> <c:forEach items="${dw.rs }" var="lists" varStatus="status"> <tr id="${lists.ID}" USER_ID="${lists.USER_ID}" onclick="changeTrColor(this);" style="cursor: pointer;" <c:if test="${status.count % 2 == 0 }">bgcolor="#F5F5F5"</c:if>> <td style="text-align: center;">${status.count + dw.pageSize * (dw.currentPage - 1)}</td> <td height="24">${lists.USER_NAME}</td> <td height="24">${lists.INVITE_USER_NAME}</td> <td height="26px" >${lists.CREATE_TIME}</td> <td height="24">${lists.NAME}</td> <td height="24"> <c:choose> <c:when test="${empty lists.BID_AMOUNT }"> 0 </c:when> <c:otherwise> ${lists.BID_AMOUNT} </c:otherwise> </c:choose> </td> <td height="24"> <c:choose> <c:when test="${lists.BID_STATUS eq -1}"> 待付款 </c:when> <c:when test="${lists.BID_STATUS eq 1}"> 投资中 </c:when> <c:when test="${lists.BID_STATUS eq 2}"> 还款中 </c:when> <c:when test="${lists.BID_STATUS eq 5}"> 债权转让 </c:when> <c:when test="${empty lists.BID_STATUS }"> 未投资 </c:when> <c:otherwise> 未知 </c:otherwise> </c:choose> </td> <td> <c:choose> <c:when test="${lists.STATUS eq 0}"> 启用 </c:when> <c:otherwise> 禁用 </c:otherwise> </c:choose> </td> </tr> </c:forEach> </table> <%@ include file="/commons/pageControlBottom.jsp"%> </div> </div> <!--内容结束--> <div class="space"></div> </form> </body>
下面是出来的效果:
版权声明:本文为博主原创文章,未经博主允许不得转载。