yycg项目第六天
1. 供货商药品目录维护开发
1.1 供货商药品目录添加查询功能调试
测试目标:
1、 根据查询条件查询药品信息
2、 供货商药品目录的药品在添加查询页面应该查询不到
……
1.2 供货商药品目录添加提交
1.2.1 需求
用户在供货商药品目录添加查询页面,选择多个药品,确认添加。
前置条件(约束条件):
只允许添加供货商药品目录中没有的药品
药品的交易状态为暂停不允许添加
后置条件(数据库操作):
向供货商药品目录表gysypml插入一条记录
同时向供货商药品目录控制表gysypml_control插入一条记录
页面操作:
用户需要选择多个药品,进行批量添加。
1.2.1 批量添加技术测试
Service接口:完成添加操作
接收多条记录还是单条记录??
如果接收多条记录,处理多条记录,如果不在service接口进行异常处理,导致一条记录添加失败其它记录回滚。
批量添加失败,需要给用户提示失败原因(多个失败原因),给用户提示应该在action 实现。
采用方案:
Service接口只处理一条记录,在 action方法内通过循环调用service批量处理,action就可以灵活组织给用户提示信息,在service接口开发,遇到异常只管抛出。
问题在于:
Action接收多条数据?
需要采用springmvc让页面向action传递批量数据,action方法采用list接收。
在包装对象中添加list属性。
页面定义:
业务数据的定义:
List属性名[序号从0开始].属性(list中pojo的属性名)
本系统采用action方法使用list接收页面提交批量数据,list中是自定义的pojo
页面提交业务数据如下:
解决了:页面提交批量数据的问题,将所有Hidden传到action。
将页面上选中的行的序号传入action。
页面选中行的序号定义
在页面form中定义选中行的序号存储的input
Indexs中存储逗号分隔的串,提交到action中自动解析成数组。(由<mvc:annotation-driven />支持)
页面上选中行的序号如何获得?
详细代码:
//定义一个数组,准备存放选中行的序号
var indexs=[];
//获取数据列表中所有选中的行(数组),要求datagrid属性idField设置正确
var rows = dataGrid_obj.datagrid('getSelections');
//便利所有选中的行
for(var i=0;i<rows.length;i++){
//alert(dataGrid_obj.datagrid('getRowIndex',rows[i]));
//将返回的选中行的序号加到indexs数组中
var index = dataGrid_obj.datagrid('getRowIndex',rows[i]);//选中行的下标
//将选中行的序号设置到数组indexs中
indexs.push(index);
//alert(dataGrid_obj.datagrid('getRowIndex',rows[i]));
}
//判断如果存在选中的行,indexs数组里边有选中行的序号
if(rows.length>0){//如果存在选中的行则将indexs数组中的序号格式化为逗号分隔的并赋给indexs控件
$("#indexs").val(indexs.join(","));//将indexs数组的元素在中间加逗号拼接成一个字符串
//提交form,提交数据包括药品信息id(每条记录都 有),indexs(hidden)
jquerySubByFId('gysypmladdqueryForm',gysypmladd_callback, null);
}else{
//如果没有选中行则提示
alert_warn("请选择要添加的药品");
}
1.2.2 实现
1.2.2.1 Dao:
使用****生成的代码完成记录插入。
1.2.2.2 service:
处理单条记录。
接口功能:向供货商药品目录添加一个药品
接口参数:供货商id、药品id
1.2.2.3 action
批量提交参数:
Usergysid:供货商id、(单个,从session中取)
Ypxxid:药品id(多个参数),提交到list中。
1.2.2.4 页面
用户点击“确认添加”,
1 调用datagrid的getSelections获得所有选中的行,将选中行的序号解析出来,以逗号拼接存入indexs的input中。
2 在datagrid的列定义中定义hidden,存储药品信息id值。
通过ajax的form提交
将indexs值(页面选中行的序号)提交到action。
将ypxxCustoms(提交的批量业务数据)提交到action
参考:
1.2.3 供货商药品目录添加调试
1.2.3.1 失败原因展示问题:
将提交回调方法中message_alert(data);改为:_alert(data)方法
需要将action返回的submitResultinfo中添加details属性(存储失败原因)。
效果如下:
注意:在service抛出异常信息时,尽量详细!!!
1.2.3.2 只允许提交当前页的数据
如果在上一页选中记录,再翻页,再选中,提交出现-1:
解决方法:
在翻页时,清除所有选中的行。
1.3 供货商药品目录删除
1.3.1 需求:
供货商登陆系统,进入供货商药品目录维护页面,选择要删除的药品,点击“确认删除”。
约束条件:
供货商药品目录存在此药品方可删除。
数据库操作:
从供货商药品目录表中删除记录。
1.3.2 实现:
参考供货商药品目录添加方法去实现。
1.3.2.1 Dao:
使用****,将供货商药品目录表记录删除。
1.3.2.2 Service:
接口功能:供货商药品目录删除
接口参数:供货商id和药品id
接口实现:
先校验约束条件:供货商药品目录存在此药品方可删除
执行删除:根据主键删除(先根据供货商id和药品id查询出主键)
1.3.2.3 Action:
传参数问题:
供货商id:单个参数
药品id:页面传多个参数(页面定义hidden,list[].XXX)
方法参考:供货商药品目录添加提交方法addgysypmlsubmit实现。
1.3.2.4 页面
将药品id在datagrid列中定义hidden。
将页面选中序号、业务数据提交到action。
参考:供货商药品目录添加页面。
1.4 供货商药品目录控制
1.4.1 需求
监管单位查询所有要控制的供货商药品目录信息,选择控制状态,提交控制状态。
以监管单位(卫生局)登陆:
第一步:查询所有要控制的供货商药品目录
第二步:选择控制状态,提交控制状态
提交控制状态:
根据供货商id和药品id更新供货商药品供货状态(1:正常,2:暂停)。
1.4.2 实现
1.4.2.1 Dao:
1、监管单位查询所有供货商药品目录信息
Sql:
主查询表:供货商药品目录控制表
关联查询表:供货商信息、药品信息。
Sql:
。。。。。
。。
2、提交控制状态
根据供货商id和药品id更新供货商药品目录控制表状态(1:正常,2:暂停)
1.4.2.2 Service
1、监管单位查询所有供货商药品目录信息
接口功能:监管单位查询所有供货商药品目录信息
接口参数:查询条件(GysypmlQueryVo)
接口实现:调用mapper查询数据
3、 提交控制状态(只处理单个记录)
接口功能:根据供货商id和药品id更新控制状态(1:正常,2:暂停)
接口参数:供货商id和药品id、控制状态(1:正常,2:暂停)
接口实现:
校验:
供货商id和药品id在供货商药品目录控制表存在,不存在是无法更新的。
控制状态值合法性,不是1就是2(1:正常,2:暂停)
执行更新:
根据供货商id和药品id更新控制状态
1.4.2.3 Action
1、 监管单位控制供货商药品目录查询列表
按照通用代码模版写。
2、 提交供货商药品目录控制状态
参考供货商药品目录添加提交的方法。
方法参数:
int[] indexs页面选中行的序号
GysypmlQueryVo (页面提交的业务数据)
1.4.2.4 页面
参考:供货商药品目录添加提交的页面
2. 学生开发内容
将老师的工程导入到新创建的工作区中。
1、 供货商药品目录维护查询条件实现
2、 供货商药品目录添加查询页面查询条件实现
3、 供货商药品目录删除操作开发
4、 供货商药品目录控制功能开发。
2.1 开发问题总结
0、不同的功能一定对应的用户身份登陆
1、 供货商药品目录维护查询条件实现
例如:查询条件价格范围。
页面传入起始价格、结束价格、action—》servicedao
需要在包装类中接收起始价格、结束价格,在ypxxCustom添加起始价格、结束价格。(建议使用Float包装类型)
页面中采用对象 点 属性的方式命名。
修改GysypmlMapperCustom.xml
添加查询条件。
需要修改:
下边红色为新添加:
<!-- 药品目录 查询条件 -->
<sql id="query_ypxx_where">
<if test="ypxxCustom!=null">
<if test="ypxxCustom.bm!=null and ypxxCustom.bm!=''">
and ypxx.bm = #{ypxxCustom.bm}
</if>
<if test="ypxxCustom.mc!=null and ypxxCustom.mc!=''">
and ypxx.mc = #{ypxxCustom.mc}
</if>
<if test="ypxxCustom.jyzt!=null and ypxxCustom.jyzt!=''">
and ypxx.jyzt = #{ypxxCustom.jyzt}
</if>
<!-- 药品类别 -->
<if test="ypxxCustom.lb!=null and ypxxCustom.lb!=''">
and ypxx.lb = #{ypxxCustom.lb}
</if>
<!-- 价格范围 -->
<if test="ypxxCustom.price_start!=null">
and ypxx.price>=#{ypxxCustom.price_start}
</if>
<if test="ypxxCustom.price_end!=null">
<![CDATA[
and ypxx.price<=#{ypxxCustom.price_end}
]]>
</if>
<!-- ...... -->
</if>
</sql>
2、供货商药品目录控制功能开发
监管单位查询所有供货商药品目录控制列表:
Sql:
主查询表:gysypml_control(注意不要有gysypml,如果和gysypml内链接,如果 gysypml中没有数据,监管单位将无法控制,这是不允许的!!!!)
select
gysypml_control.id gysypmlid,
gysypml_control.ypxxid,
gysypml_control.usergysid,
usergys.mc usergysmc,
gysypml_control.control,
(select info
from dictinfo
where typecode = '008'
and dictcode = gysypml_control.control) controlmc,
ypxx.id,
ypxx.bm,
ypxx.mc,
ypxx.jx,
ypxx.gg,
ypxx.zhxs,
ypxx.scqymc,
ypxx.spmc,
ypxx.zbjg,
ypxx.jyzt,
(select info
from dictinfo
where ypxx.jyzt = dictcode
and typecode = '003') jyztmc
from usergys, gysypml_control, ypxx
where gysypml_control.usergysid = usergys.id
and gysypml_control.ypxxid = ypxx.id
3、整个业务的流程
第一步:供货商查询自己的药品目录内容
第二步:从药品目录总表中选择药品添加到自己的目录(正常使用时,全部将药品目录总表的内容添加到自己的目录)
第三步:如果供货商不再供货商就从供货商药品目录中删除(平常使用不多)
第四步:监管单位登陆对供货商药品目录进行控制
控制状态不受供货商药品目录操作影响。
3. 采购单模块
3.1 需求
医院在采购药品时,先创建一个采购单,采购单内容包括本次采购的药品信息(采购量、采购金额),采购单创建成功后,需要提交到监管单位,由监管单位进行审核。审核通过后由供货商按照采购单的内容进行发货,医院收到药品后执行入库操作。
操作流程:
第一步:填写采购单基本信息
第二步:填写采购单详细信息,本次采购的药品信息
添加采购药品:
从本地区供货商药品目录中找采购的药品信息。
由于价格统一,为了避免供货商竞争,设置一个区域只有一个供货商进行供货
确定 采购量:
采购量确定后,采购金额自动计算出来:
第三步:提交采购单
在确定采购单完成创建,执行采购单提交。
第四步:提交采购单后由监管单位进行审核
本系统实际操作由卫生院对本区域医院下的采购单进行审核。
卫生院首先查询采购单内容,确定没有问题进行审核。
第五步:供货商进行采购单受理
供货商对向自己下采购单的医院,受理采购单。
第六步:医院执行入库操作
上一篇: VC6.0 MFC 视图的切分
下一篇: VC6.0中printf()的压栈问题