会员卡管理系统技术解析(十五)会员卡状态变动
来源:互联网 发布:利用java防御sql注入 编辑:程序博客网 时间:2024/06/09 13:42
会员卡管理系统技术解析(十五)会员卡状态变动
6.2会员卡状态变动
会员卡状态变动界面效果图如下:
6.2(图1)
本模块所用到的控件有:
文本框(easyui-textbox)
第一要设置每个控件的id;第二设置大小不设置也有默认;第三(data-options)是数据操作:可以设置控件的一些属性和事件
单选框
按钮(easyui-linkbutton)
表格(easyui-datagrid)
第一步: 数据库
查询符合条件的卡,数据库表与表之间的关系如下图:
6.2(图2)
表1:发放明细表(Pw_MembershipCardIssuedDetails)
列名
数据类型
主键/外键
说明
MembershipCardIssuedDetailsID
int
主键
发放明细ID
MembershipCardIssuedID
int
外键
发放记录ID
MembershipCardRecipientsDetailsID
int
外键
领卡明细ID
MemberProfileID
int
外键
会员档案ID
CardType
int
外键
会员卡类型ID
WindowStateID
int
外键
启动状态ID
StateOfTheMembershipCardID
int
外键
会员卡状态ID
ChangeTheMembershipCardID
int
外键
会员卡变更状态ID
FormerRecipientsDetailsID
int
外键
原领卡明细ID
Money
money
金额
Integral
nchar(20)
积分
SingleKakaFee
money
单卡卡费
ActualStartComputingTime
date
实际开始时间
ActualEndTime
date
实际结束时间
Summary
nchar(50)
摘要
Invalid
bit
作废否
AllowedToReportTheLossOf
bit
挂失否
InternalIssue
bit
内部发放否
表2:领卡明细表(Pw_MembershipCardRecipientsDetails)
列名
数据类型
主键/外键
说明
MembershipCardRecipientsDetailsID
int
主键
领卡明细ID
MembershipCardRecipientsID
int
外键
领卡记录ID
MembershipCardDetailsID
int
外键
建卡明细ID
ChangeTheMembershipCardID
int
外键
变更会员卡状态ID
RecipientsWhoID
int
外键
领用人ID
表3: 建卡明细表(Pw_MembershipCardDetails)
列名
数据类型
主键/外键
说明
MembershipCardDetailsID
int
主键
建卡明细ID
MembershipCardID
int
外键
建卡记录ID
MembershipCardTypeID
int
外键
会员卡种类ID
MembershipCardStorageLocationID
int
外键
保管地点ID
StateOfTheMembershipCardID
int
外键
会员卡状态ID
ChangeTheMembershipCardID
int
外键
变更会员卡状态ID
UpdateRankID
int
外键
会员卡级别ID
KeeperID
int
外键
保管人ID
Remarks
nchar(200)
备注
MembershipCardCardNumber
nchar(50)
会员卡卡号
SpecifyTheValidityTime
date
有效期指定时间
ValidityTime
date
有效期时间
WriteCardStatus
nchar(10)
写卡状态
WriteTime
date
写卡时间
NominalAmount
money
面值金额
表4:会员档案(MemberProfile)
列名
数据类型
主键/外键
说明
MemberProfileID
int
主键
会员档案ID
MemberAgeID
int
外键
会员年龄段ID
AreaID
int
外键
区域ID
IDTypeID
int
外键
证件类型ID
BookerID
int
外键
登记人ID
MemberOfTheProfessionalID
int
外键
会员职业ID
ClientNatureID
int
外键
客户性质ID
UpdateManID
int
外键
更新人ID
nchar(30)
邮箱
MailingAddress
nchar(50)
通讯地址
OfficePhone
nchar(20)
办公电话
PrivateCallNumber
nchar(20)
私人电话
MobileNumber
nchar(20)
手机号码
TimeToMarket
date
至商场时间
MembershipDegree
nchar(20)
会员学历
MemberOfTheFamilyIncome
nchar(20)
会员家庭收入
Vehicle
nchar(20)
交通工具
FamilyMembers
nchar(10)
家庭成员数量
HobbiesAndInterests
nchar(30)
兴趣爱好
Linkman
nchar(20)
联系人
UpdateTime
date
更新时间
BookTime
date
登记时间
Invalid
bit
作废否
MenberName
nchar(20)
会员姓名
USEX
nchar(10)
会员性别
IDNumber
nchar(20)
证件号码
Birthday
date
出生日期
控件的使用方法:
1、文本框(easyui-textbox)
作用:用于数据的存放
普通文本框截图:
6.2(图3)
普通文本框界面代码:
<td><input id="txtLingYongRen" style="color:Blue"/></td>
获取界面控件值的代码:
$('#txtLingYongRen').val();
2、单选框
作用:便于选择
单选框截图:
6.2(图4)
单选框界面代码:
<td><input type="radio" name="RadioGroup1"id="rdFaShouKa" checked/>发售卡</td> <td><input type="radio" name="RadioGroup1"id="rdYiXiaoFeiKa" />已消费卡</td>
获取界面控件值的代码:
document.getElementById("rdFaShouKa").checked;
第二步:服务层接口(IService)
public List QuerySelectKa(int ZhuangTaiId);//添加会员卡变动时,查询符合条件的卡public List<PwMembershipCardIssuedDetails> QuerySelectFaFangMingXi(intFaFangMingXiId);//查询发放明细publicbooleanQueryFaFangMingXiEdit(PwMembershipCardIssuedDetails entity);//修改发放明细public List<SysBasicAttributeCollectionDetails> QuerySelectZhuangTai();//查询会员卡状态
第三步:服务层(Service)
6.2(图6)
/*会员卡状态变动,查询符合条件的卡 * ZhuangTaiId 状态id * */ @Override public ListQuerySelectKa(intZhuangTaiId){ try {//尝试运行代码 StringBufferqueryString = new StringBuffer();/*实例化StringBuffer*/ queryString.append("SELECTFaFangMingXi.membershipCardIssuedDetailsId,HuiYuanXinXi.menberName,JianKaMingXi.membershipCardCardNumber," + "ZhuangTai.basicAttributeCollectionSubsidiaryName");/*拼接需要查询的字段*/ queryString.append("FROMPwMembershipCardIssuedDetails AS FaFangMingXi,SysMemberProfile ASHuiYuanXinXi," + "PwMembershipCardRecipientsDetailsAS LingYongMingXi,PwMembershipCardDetails AS JianKaMingXi," + "SysBasicAttributeCollectionDetailsAS ZhuangTai ");/*实例化表*/ queryString.append("WHEREFaFangMingXi.memberProfileId = HuiYuanXinXi.memberProfileId " + "ANDFaFangMingXi.membershipCardRecipientsDetailsId =LingYongMingXi.membershipCardRecipientsDetailsId " + "ANDLingYongMingXi.membershipCardDetailsId = JianKaMingXi.membershipCardDetailsId" + "ANDFaFangMingXi.changeTheMembershipCardId = ZhuangTai.basicAttributeCollectionDetailsId" + "ANDFaFangMingXi.changeTheMembershipCardId = ?");/*满足条件*/ return dao.findByHql(queryString.toString(),new Object[]{ZhuangTaiId}); }catch (Exception e) {/*尝试运行代码出现错误,执行异常处理*/ return null; } } //查询状态 @Override publicList<SysBasicAttributeCollectionDetails>QuerySelectZhuangTai(){ try {//尝试运行代码 StringBufferqueryString = new StringBuffer();/*实例化StringBuffer*/ queryString.append("FROMSysBasicAttributeCollectionDetails AS zhuangTai ");/*实例化表*/ queryString.append("WHEREzhuangTai.basicAttributeCollectionDetailsId BETWEEN 18 AND 19 " + "ORzhuangTai.basicAttributeCollectionDetailsId = 61 " + "ORzhuangTai.basicAttributeCollectionDetailsId = 67");/*满足条件*/ return dao.findByHql(queryString.toString()); }catch (Exception e) {/*尝试运行代码出现错误,执行异常处理*/ return null; } } /*会员卡换卡时,查询发放明细 * FaFangMingXiId 发放明细id * */ @Override publicList<PwMembershipCardIssuedDetails> QuerySelectFaFangMingXi(int FaFangMingXiId){ try {//尝试运行代码 StringBufferqueryString = new StringBuffer();/*实例化StringBuffer*/ queryString.append("FROMPwMembershipCardIssuedDetails AS FaFangMingXi ");/*实例化表*/ queryString.append("WHEREFaFangMingXi.membershipCardIssuedDetailsId = ?");/*满足条件*/ return dao.findByHql(queryString.toString(),new Object[]{FaFangMingXiId}); }catch (Exception e) {/*尝试运行代码出现错误,执行异常处理*/ return null; } } //会员卡换卡时,修改发放明细 @Override public boolean QueryFaFangMingXiEdit(PwMembershipCardIssuedDetailsentity){ try {//尝试运行代码 return dao.edit(entity); }catch (Exception e) {/*尝试运行代码出现错误,执行异常处理*/ return false; } }
第四步:方法层(Action)
6.2(图7)
//添加会员卡变动时,查询符合条件的卡 public StringgetZhuangTaiBianDongSelectKa() { JSONArrayjsArr = new JSONArray();/*实例化一个Array数组*/ JSONObjectjsObj = new JSONObject();/*实例化一个Object数组*/ intZhuangTai = Integer.parseInt(this.getRequest().getParameter("ZhuangTai"));/*从视图层传来的参数*/ ListlsSelectKa = this.huanKaYuZhuangTaiBianDongService.QuerySelectKa(ZhuangTai);/*调用服务层方法*/ for (int i =0; i < lsSelectKa.size(); i++) {/*循环遍历服务层返回的结果集*/ Object[]obj = (Object[])lsSelectKa.get(i); jsObj.clear();/*清空jsObj数组*/ jsObj.put("FaFangMingXiID",obj[0]); jsObj.put("XingMing",obj[1]); jsObj.put("KaHao",obj[2]); jsObj.put("YuanZhuangTai",obj[3]); jsArr.add(jsObj); } HashMap<String, Object>jsMap = new HashMap<String, Object>();/*实例化一个哈希表*/ jsMap.put("rows",jsArr);/*将jsArr数组写入到jsMap中*/ JSObj = JSONObject.fromObject(jsMap);/*转换数组类型,并返回数组*/ return SUCCESS; } //查询会员卡状态 public StringgetZhuangTai(){ JSONArrayjsArr = new JSONArray();/*实例化一个Array数组*/ JSONObjectjsObj = new JSONObject();/*实例化一个Object数组*/ List<SysBasicAttributeCollectionDetails>lsZhuangTai = this.huanKaYuZhuangTaiBianDongService.QuerySelectZhuangTai();/*调用服务层方法*/ for (int i =0; i < lsZhuangTai.size(); i++) {/*循环遍历服务层返回的结果集*/ SysBasicAttributeCollectionDetails obj= lsZhuangTai.get(i); jsObj.clear();/*清空jsObj数组*/ jsObj.put("ZhuangTaiId",obj.getBasicAttributeCollectionDetailsId()); jsObj.put("ZhuangTaiMingCheng",obj.getBasicAttributeCollectionSubsidiaryName()); jsArr.add(jsObj); } JSArr =jsArr; return SUCCESS; } //新增会员卡状态变动信息 public StringgetGengXinZhuangTaiInsert() { Stringparam = encodingFunction.getMethodEncoding(this.getRequest().getParameter("param"));/*从视图层传来的参数*/ String[]params = param.split("<>"); for (int i =0; i < params.length;i++) { String[]paramsObj = params[i].split("<<"); List<PwMembershipCardIssuedDetails>lsFaFangMingXi = this.huanKaYuZhuangTaiBianDongService.QuerySelectFaFangMingXi(Integer.parseInt(paramsObj[0]));/*调用服务层方法*/ PwMembershipCardIssuedDetails obj= lsFaFangMingXi.get(0); PwMembershipCardIssuedDetailsFaFangMingXi = new PwMembershipCardIssuedDetails();//实例化发放明细表 FaFangMingXi.setMembershipCardIssuedDetailsId(Integer.parseInt(paramsObj[0])); FaFangMingXi.setActualEndTime(obj.getActualEndTime()); FaFangMingXi.setActualStartComputingTime(obj.getActualStartComputingTime()); FaFangMingXi.setAllowedToReportTheLossOf(obj.getAllowedToReportTheLossOf()); FaFangMingXi.setCardType(obj.getCardType()); FaFangMingXi.setStateOfTheMembershipCardId(Integer.parseInt(paramsObj[3].trim())); FaFangMingXi.setChangeTheMembershipCardId(Integer.parseInt(paramsObj[1].trim())); FaFangMingXi.setFormerRecipientsDetailsId(obj.getFormerRecipientsDetailsId()); FaFangMingXi.setIntegral(obj.getIntegral()); FaFangMingXi.setInternalIssue(obj.getInternalIssue()); FaFangMingXi.setInvalid(obj.getInvalid()); FaFangMingXi.setMemberProfileId(obj.getMemberProfileId()); FaFangMingXi.setMembershipCardIssuedId(obj.getMembershipCardIssuedId()); FaFangMingXi.setMembershipCardRecipientsDetailsId(obj.getMembershipCardRecipientsDetailsId()); FaFangMingXi.setMoney(obj.getMoney()); FaFangMingXi.setSingleKakaFee(obj.getSingleKakaFee()); FaFangMingXi.setSummary(paramsObj[2].trim()); FaFangMingXi.setWindowStateId(obj.getWindowStateId()); this.huanKaYuZhuangTaiBianDongService.QueryFaFangMingXiEdit(FaFangMingXi);/*调用服务层方法*/ } MSG = "OK"; return SUCCESS; }
第五步:配置struts
6.2(图8)
<action name="getZhuangTaiBianDongSelectKa" class="HuanKaYuZhuangTaiBianDongAction" method="getZhuangTaiBianDongSelectKa"> <result type="json"> <param name="root">JSObj</param> </result> </action> <action name="getZhuangTai" class="HuanKaYuZhuangTaiBianDongAction" method="getZhuangTai"> <result type="json"> <param name="root">JSArr</param> </result> </action> <action name="getGengXinZhuangTaiInsert" class="HuanKaYuZhuangTaiBianDongAction" method="getGengXinZhuangTaiInsert"> <result type="json"> <param name="root">MSG</param> </result> </action>
第六步:视图层JSP
6.2(图9)
Javascript代码:
var ZhuangTai = 0;//定义全局变量 function TianJiaKaPian(){ //获取单选框的值 var FaShouKa = document.getElementById("rdFaShouKa").checked; if(FaShouKa == true){ZhuangTai = 61;} var YiXiaoFeiKa =document.getElementById("rdYiXiaoFeiKa").checked; if(YiXiaoFeiKa == true){ZhuangTai = 18;} var YiChangKa = document.getElementById("rdYiChangKa").checked; if(YiChangKa == true){ZhuangTai = 19;} var TingYongKa = document.getElementById("rdTingYongKa").checked; if(TingYongKa == true){ZhuangTai = 67;} if(ZhuangTai != 0){ $('#FromSelectKa').show();//弹窗 $.getJSON("getZhuangTaiBianDongSelectKa?ZhuangTai="+ZhuangTai,function(data){ if(data){ $('#dgZhuangTaiBianDongChaXun').datagrid('loadData',data);//绑定数据到datagrid中 $('#txtKuCunShuLiang').val($('#dgZhuangTaiBianDongChaXun').datagrid('getRows').length);//绑定库存数量 } }); } }
弹窗效果图如下:
6.2(图10)
HTML代码:
<div id="FromSelectKa" class="FromFuHeKaclass"> <div class="easyui-layout FromFuHeKalayout"> <div data-options="region:'west'" style="width:450px;"> <div class="erJiBiaoTi">***查询结果***</div> <hr style="border:solid 1px #CCCCCC;"/> <table id="dgZhuangTaiBianDongChaXun" class="easyui-datagrid" style="height:472px" data-options="rownumbers:true,loadMsg:'加载中,请稍后...',idField:'FaFangMingXiID'"> <thead> <tr> <th data-options="field:'FaFangMingXiID',width:20,hidden:true,align:'center'">会员卡发放明细ID</th> <th data-options="field:'ckXuanZe',checkbox:true"></th> <th data-options="field:'KaHao',width:165,align:'center'">会员卡号</th> <th data-options="field:'XingMing',width:70,align:'center'">姓名</th> <th data-options="field:'YuanZhuangTai',width:115,align:'center'">证件号码</th> </tr> </thead> </table> </div> <div data-options="region:'center'"> <div class="erJiBiaoTi">***筛选设置***</div> <hr style="border:solid 1px #CCCCCC;"/> <center> <table class="FromFuHeKalayoutRight"> <tr> <td align="right">开始卡号:</td> <td><input id="txtKaiShiKaHao" /></td> </tr> <tr> <td align="right">卡数量:</td> <td><input id="txtKaShuLiang" /></td> </tr> <tr> <td align="right">结束卡号:</td> <td><input id="txtJieShuKaHao" /></td> </tr> <tr> <td align="right">库存数量:</td> <td><input id="txtKuCunShuLiang" style="color:#FF0000" value="0" readonly/></td> <td>张</td> </tr> </table> <table> <tr class="xuanZeKuang"> <td> <a onClick="ShuJuZhuanYi()" class="easyui-linkbutton" data-options="iconCls:'icon-ok'">确认</a> <a onClick="$('#FromSelectKa').hide()"class="easyui-linkbutton" data-options="iconCls:'icon-cancel'">取消</a> </td> </tr> </table> </center> </div> </div> </div>
Javascript代码:
//两个datagrid之间的数据转移 function ShuJuZhuanYi(){ var row = $('#dgZhuangTaiBianDongChaXun').datagrid('getChecked');//获取选中的数据 $('#dgBianDongXinXi').datagrid('loadData',row);//把选中的数据绑定到另一个datagrid中 var row = $('#dgBianDongXinXi').datagrid('getRows'); for(var i = 0; i < row.length; i++){ $('#dgBianDongXinXi').datagrid('beginEdit', i);//开启编辑 } $('#txtKuCunShuLiang').val(row.length);//绑定库存数量 $('#FromSelectKa').hide();//关闭窗口 } //添加会员卡状态变动信息 function TianJia(){ //获取数据 var YuanZhuangTaiId= ZhuangTai; var ZhaiYao = $('#txtZhaiYao').val(); var row = $('#dgBianDongXinXi').datagrid('getRows'); var param = ""; var ZhengChangHangShu = 0; for(var i = 0; i < row.length; i++){ var edCangKu = $('#dgBianDongXinXi').datagrid('getEditor', {index:i,field:'ZhuangTaiId'}); var cangKuMingCheng =$(edCangKu.target).combobox('getText'); if(cangKuMingCheng != ""){ $('#dgBianDongXinXi').datagrid('getRows')[i]['ZhuangTaiMingCheng'] = cangKuMingCheng; } else { $('#dgBianDongXinXi').datagrid('getRows')[i]['ZhuangTaiMingCheng'] = ""; } $('#dgBianDongXinXi').datagrid('endEdit', i);//结束编辑 if(row[i].ZhuangTaiId.trim() != ""){//判断变更状态是否已经填写 param = param +row[i].FaFangMingXiID+"<<"+row[i].ZhuangTaiId+"<<"+ZhaiYao+"<<"+YuanZhuangTaiId+"<>"; ZhengChangHangShu += 1; } else { var j = i + 1; alert("第"+j+"行,变更状态为空,请您做相对应的修改");//提示你有哪一行尚未填写变更状态 $('#dgBianDongXinXi').datagrid('beginEdit', i);//重新开启编辑 } } if(ZhengChangHangShu == row.length){ $.getJSON("getGengXinZhuangTaiInsert?param="+param,function(data){ alert("新增会员卡状态变更成功"); window.location.href = "HuanKaYuZhuangTaiKongZhi/HuiYuanKaZhuangTaiBianDong.jsp"; }); } else { alert("由于您操作的问题,不能添加会员卡状态变动信息"); } }
该资料仅供学习使用,禁止用于商业用途
- 会员卡管理系统技术解析(十五)会员卡状态变动
- 会员卡管理系统技术解析(六) 会员卡退卡
- 会员卡管理系统技术解析(八)添加会员卡挂失
- 会员卡管理系统技术解析(十六)会员卡有效期更改
- 会员卡管理系统技术解析(十五) 库存卡作废恢复记录查询
- 会员卡管理系统技术解析(二)会员卡调拨查询和修改
- 会员卡管理系统技术解析(三)添加会员卡调拨信息
- 会员卡管理系统技术解析(四)会员卡发放记录查询
- 会员卡管理系统技术解析(八)会员卡建卡记录添加
- 会员卡管理系统技术解析(九)会员卡领卡记录查询
- 会员卡管理系统技术解析(十) 会员卡领卡记录添加
- 会员卡管理系统技术解析(五)添加会员卡发放信息
- 会员卡管理系统技术解析(十一)会员卡退领记录查询
- 会员卡管理系统技术解析(十二)会员卡退领记录添加
- 会员卡管理系统技术解析(七)会员卡挂失记录查询
- 会员卡管理系统技术解析(九)会员卡挂失恢复查询
- 会员卡管理系统技术解析(十一)会员卡作废记录查询
- 会员卡管理系统技术解析(十二)添加会员卡作废记录
- 二分法计算有序数组中数字出现的次数
- 黑马程序员_Java基础泛型
- 在linux上使用screen启后台程序
- 测试管理中可能存在的问题及分析
- MySQL union all排序问题
- 会员卡管理系统技术解析(十五)会员卡状态变动
- 3.抽象工厂模式
- 测试 QA 的角色和分工
- Django. No changes detected when "makemigrations"
- oracle锁问题
- Intellij IDEA开发环境设置
- 针对于Button的OnClickListener
- H5 应用返回按钮的js代码设计,设计思想模仿stack
- try&catch&finally浅析