1、业务
服务器出租业务,对于每个人的费用是在月底结算的。因此如果当前有人要改资费,不能立刻生效,而是在下个月月初生效,即,在月底使用PL/SQL先计算本月的费用,然后再将套餐进行变更。
2、思路
保存时将资费类型存入临时表,在月底自动结算完以后,使用此临时表的数据来更新service。这里有可能一个月客户变更了数次资费,导致临时表中对于一个业务账号有多个资费类型,那么更新时可以采用最后一次变更的资费类型,即ID最大的。更新完service表后,需要将临时数据删除。
注意重定向到Action时,可以使用param来给目标Action的属性传值。其中name属性指定了目标Action中要接收参数的属性名,param中间的内容指定了其来源.
Action:
struts.xml
Jsp:
服务器出租业务,对于每个人的费用是在月底结算的。因此如果当前有人要改资费,不能立刻生效,而是在下个月月初生效,即,在月底使用PL/SQL先计算本月的费用,然后再将套餐进行变更。
2、思路
保存时将资费类型存入临时表,在月底自动结算完以后,使用此临时表的数据来更新service。这里有可能一个月客户变更了数次资费,导致临时表中对于一个业务账号有多个资费类型,那么更新时可以采用最后一次变更的资费类型,即ID最大的。更新完service表后,需要将临时数据删除。
注意重定向到Action时,可以使用param来给目标Action的属性传值。其中name属性指定了目标Action中要接收参数的属性名,param中间的内容指定了其来源.
DAO:
public void update(Service service) throws DAOException {
if(service == null){
return;
}
String sql = "insert into service_update_bak "+
" values(service_bak_seq.nextval,?,?)";
Connection con = DBUtil.getConnection();
try {
PreparedStatement ps = con.prepareStatement(sql);
ps.setObject(1, service.getId());
ps.setObject(2, service.getCostId());
ps.executeUpdate();
} catch (SQLException e) {
e.printStackTrace();
throw new DAOException("更新业务账号失败", e);
} finally{
DBUtil.close();
}
}
public Service findById(Integer id) throws DAOException {
if(id == null){
return null;
}
String sql = "select * from service where id=?";
Connection con = DBUtil.getConnection();
try {
PreparedStatement ps = con.prepareStatement(sql);
ps.setObject(1, id);
ResultSet rs = ps.executeQuery();
if(rs.next()){
Service s = createService(rs);
return s;
}
} catch (SQLException e) {
e.printStackTrace();
throw new DAOException("查询业务账号失败", e);
} finally{
DBUtil.close();
}
return null;
}
Action:
public class ToUpdateServiceAction {
public String execute(){
IServiceDAO serdao = DAOFactory.getServiceDAO();
ICostDAO costdao = DAOFactory.getCostDAO();
try {
service = serdao.findById(id);
costs = costdao.findAll();
} catch (DAOException e) {
e.printStackTrace();
return "error";
}
return "success";
}
//input
private Integer id;
//output
private Service service;
private List<Cost> costs;
public Integer getId() {
return id;
}
public void setId(Integer id) {
this.id = id;
}
public Service getService() {
return service;
}
public void setService(Service service) {
this.service = service;
}
public List<Cost> getCosts() {
return costs;
}
public void setCosts(List<Cost> costs) {
this.costs = costs;
}
}
public class UpdateServiceAction {
public String execute(){
IServiceDAO dao = DAOFactory.getServiceDAO();
try {
dao.update(service);
} catch (DAOException e) {
e.printStackTrace();
return "error";
}
return "success";
}
//input
private Service service;
public Service getService() {
return service;
}
public void setService(Service service) {
this.service = service;
}
}
struts.xml
<!-- 打开修改页面Action -->
<action name="toUpdateService" class="netctoss.action.service.ToUpdateServiceAction">
<result name="success">
/WEB-INF/service/updateService.jsp
</result>
</action>
<!-- 修改保存Action -->
<action name="updateService" class="netctoss.action.service.UpdateServiceAction">
<result name="success" type="redirectAction">
<param name="actionName">toUpdateService</param>
<param name="id">${service.id}</param>
</result>
</action>
Jsp:
<form action="updateService" method="post" class="main_form">
<div class="text_info clearfix"><span>业务账号ID:</span></div>
<div class="input_info">
<s:textfield name="service.id" cssClass="readonly" readonly="true"/>
</div>
<div class="text_info clearfix"><span>OS 账号:</span></div>
<div class="input_info">
<s:textfield name="service.osUserName" cssClass="readonly"readonly="true"/>
</div>
<div class="text_info clearfix"><span>服务器 IP:</span></div>
<div class="input_info">
<s:textfield name="service.unixHost" cssClass="readonly" readonly="true"/>
</div>
<div class="text_info clearfix"><span>资费类型:</span></div>
<div class="input_info">
<s:select name="service.costId" list="costs" listKey="id" listValue="name" cssClass="width150"/>
<div class="validate_msg_long">请修改资费类型,或者取消修改操作。</div>
</div>
<!--操作按钮-->
<div class="button_info clearfix">
<input type="submit" value="保存" class="btn_save" />
<input type="button" value="取消" class="btn_save" />
</div>
<p>业务说明:<br />
1、修改资费后,点击保存,并未真正修改数据库中的数据;<br />
2、提交操作到消息队列;<br />
3、每月月底由程序自动完成业务所关联的资费;</p>
</form>