yycg项目第七天 采购单模块

1. 采购单模块需求

医院在采购药品时,先创建一个采购单,采购单内容包括本次采购的药品信息(采购量、采购金额),采购单创建成功后,需要提交到监管单位,由监管单位进行审核。审核通过后由供货商按照采购单的内容进行发货,医院收到药品后执行入库操作。

操作流程:

第一步:填写采购单基本信息
在这里插入图片描述

采购单基本信息包括:采购年份、采购单名称、建单时间、提交时间、联系人、联系电话、备注、采购单状态。。

第二步:填写采购单详细信息,本次采购的药品信息
在这里插入图片描述

采购单明细信息:药品信息id、采购量、采购金额。

 添加采购药品:

从本地区供货商药品目录中找采购的药品信息。
在这里插入图片描述

由于价格统一,为了避免供货商竞争,设置一个区域只有一个供货商进行供货

确定 采购量:
在这里插入图片描述

采购量确定后,采购金额自动计算出来:
在这里插入图片描述

第三步:提交采购单

在确定采购单完成创建,执行采购单提交。
在这里插入图片描述

第四步:提交采购单后由监管单位进行审核

本系统实际操作由卫生院对本区域医院下的采购单进行审核。
卫生院首先查询采购单内容,确定没有问题进行审核。
在这里插入图片描述

第五步:供货商进行采购单受理

供货商对向自己下采购单的医院,受理采购单。

在这里插入图片描述

第六步:医院执行入库操作

在这里插入图片描述

2. 采购单数据模型

采购单基本信息表:
记录了采购单主要信息。

采购单号:相当于订单号,方便管理需要
采购单名称:对采购单简短说明,名称
医院id:创建采购单单位的id(记录单位id而不是用户的id) (外键)
联系人:联系人和建单人可能不是一个人
联系电话:联系人的电话
建单人:创建采购单用户id
建单时间:创建采购单时间,(建议不要在数据库中设置默认值,对业务字段的维护统一在service)
提交时间:采购单创建完毕,提交采购单时记录时间
备注:采购单备注信息
采购单状态:(业务代码存储数据字典:1:未提交、2:已提交未审核、3:审核通过、4:审核不通过)
审核意见:监管单位对采购单审核时意见
审核时间:监管单位对采购单审核时间
对于审核,注意:如果审核业务功能复杂、需求变更可能性大,建议单独 创建一个张审核表记录审核信息。

采购单明细信息表:
记录了采购单所采购的药品信息。
采购单id:明细所属的采购单,(外键)
药品信息id:采购单所包含药品,(外键)
供货企业id:采购药品的供货商,创建采购单时就确定了,(外键)
中标价:药品目录中的中标价,一种冗余存储的方法,避免药品目录表中价格变化,日后查询当时购买时定价
交易价:本系统默认中标价和交易价是相同的,通常订单表中包括两个价格:定价、交易价
采购量:对药品购买的数量。
采购金额:等于交易价 * 采购量
采购状态:该药品当前采购状态 1、未确认送货 2、已发货、3、已入库、4无法供货
在这里插入图片描述

3. 分表存储方案(存储所有医疗单位的采购单数据)

为什么要分表存储?
对于较大的城市,最小的医疗单位数量较大,每年的采购记录数达到上千万,考虑系统可持续性,时间越长采购单表中记录数就越多,对于较复杂的业务(比如统计分析),执行速度就会很慢。从数据库级别出发在表上进行优化不能根据解决性能问题,需要从根本上解决数据存储问题,可以按照一定规则对表进行分割存储。

案例:
全国中小学生成绩管理系统。
记录了全国中小学生成绩信息(主要记录平时成绩),以省为单位设计数据库,成绩记录数非常巨大,系统设计时考虑到数量大会导致查询及统计速度很慢。
按照用户的需求定分表规则,用户是按照学期进行成绩 查询和统计,分表规则定为按学期进行表的创建,每学期创建一张成绩表。
分表规则:
成绩表+4位年份+学期代码

本系统分表规则:
用户按照年份进行采购信息统计、查询,本系统定为按年来创建采购单表。

动态表命名规则:
采购单基本信息表:Yycgd+4位年份
采购单明细表:yycgdmx+4位年份

动态创建表方法:
写一个创建表的存储过程,由存储过程自动创建表,及表相关的对象(触发器、相关的序列、索引、外键),
存储过程的调用由定时任务(操作系统定时任务)来调用。
在这里插入图片描述

4. 如何实现动态表mapper

4.1 逆向工程如何操作?

逆向工程生成动态表的mapper文件。

不能在逆向工程的配置文件中指定动态表名,比如:yycgd2014,如果这样操作,用户得每年作这个工作。
采用方案:
在数据库中建立 一张模版表,模版表结构和动态表结构一样。在逆向工程中生成模版表的mapper文件,生成之后修改生成的mapper文件中表名的组织方式,修改为表名+4位年份,4位年份通过变量传入。
4位年份变量名:businessyear
在这里插入图片描述

考虑businessyear变量传入问题?

在parameterType中添加businessyear属性,操作方法:将所有parameterType指定 的类型都继承BusinessBasePo
在这里插入图片描述

在这里插入图片描述

逆向工程生成的mapper接口调用时一定传入businessyear,注意生成mapper接口中参数是简单类型的无法使用!!!!

4.2 自定义mapper如何操作?

需要程序 员自已写sql语句。
Sql语句中如果有动态表,需要在动态表名后边加${businessyear},注意自定义的mapper的parameterType指定的类型中要businessyear属性。

比如:

Select * from yycgd${businessyear} yycgd,yycgdmx${businessyear} yycgdmx
 where yycgd.id = yycgdmx.yycgdid

5. 创建采购单基本信息

5.1 需求:

医院创建采购单时,需要先填写采购单基本信息,基本信息填写完成后,再填写采购单明细信息。
内容如下:
在这里插入图片描述
采购单基本信息包括:采购年份、采购单名称、建单时间、提交时间、联系人、联系电话、备注、采购单状态。

5.2 实现:

5.2.1 dao
使用逆向工程向采购单基本信息表插入一条记录。

5.2.1.1 采购单编号生成
采购单编号命名规则:4 位年+6位流水号

6位流水号:使用oracle序列完成。

采购单编号序列按年划分,
序列名:yycgdbm+4位年份
在这里插入图片描述


Sql:
create sequence YYCGDBM2014
minvalue 1
maxvalue 999999
start with 101060
increment by 1
cache 20;

序列由动态表的存储过程自动创建。

使用序列生成采购单号:
创建一个自定义mapper。

<!-- 采购单号生成  -->
  	<select id="getYycgdBm" parameterType="string">
  	   select '${value}' || yycgdbm${value}.nextval bm from dual 
  	</select>

5.2.2 service

接口功能:创建采购单
接口参数:医院id、4位年份、采购单信息
接口实现:
向采购单基本信息表插入一条记录
采购单状态默认为“未提交”
在这里插入图片描述

5.2.3 action

两个方法:
创建采购单页面方法:
生成采购单名称:医院名称+当前时间+“采购单”
采购年份:当前年份

创建采购单基本信息保存方法:
创建采购单基本信息成功后,重定向到采购单修改页面(在修改页面可以填写采购单明细信息)。

为了调试创建采购单基本信息保存方法,写一个采购单修改页面方法

5.2.4 action跳转到采购单修改

如果采购基本信息保存成功,在页面执行window.location=’${baseurl}cgd/editcgd.action?id=’+yycgdid;

Yycgdid(采购单id),通过采购单基本信息保存结果resultInfo传到页面。

在ResultInfo中定义sysdata的map结构,用于action向页面传递业务参数。

在这里插入图片描述
Sysdata中需要传入yycgdid。

修改采购单基本信息保存service方法,将采购单id返回。
在这里插入图片描述

修改采购单基本信息保存方法:
在这里插入图片描述

修改采购单基本信息保存页面,在添加回调方法中转向采购单修改页面:
在这里插入图片描述

6. 采购单修改

6.1 需求

采购单基本信息创建成功,进行采购明细信息创建,明细信息创建页面就是采购单修改页面。
在采购单修改页面,点击“保存”修改采购单信息。

6.2 采购单修改

6.2.1 Dao:
根据采购单id查询采购单信息。
将采购单信息保存到采购单基本信息表。

6.2.2 Service

接口功能:根据采购单id获取采购单信息
接口参数:采购单id

问题:
根据采购单id无法得到年份,需要向service传入年份(不合理)。
采用方案:
让采购单id中包括年份,让采购单id主键值等于采购单编号。

在这里插入图片描述

接口功能:修改采购单基本信息
接口参数:采购单id、采购单修改

在这里插入图片描述

6.2.3 Action

采购单修改页面方法:

在这里插入图片描述

6.2.4 页面

采购单保存js方法:

在这里插入图片描述

6.2.5 修改页面布局

确定页面布局:
包括两部分:
1、 采购单基本信息部分
表单
提交 按钮(js事件 yycgdsubmit)
保存按钮(js事件 yycgdsave )

在这里插入图片描述
2、 采购单明细部分
采购单明细查询条件
采购单明细查询列表
在这里插入图片描述
Datagrid加载 的js方法:
在这里插入图片描述

在这里插入图片描述
在这里插入图片描述

查询按钮(js事件, yycgdmxquery )

在这里插入图片描述

7. 采购单明细列表

7.1 需求

采购单基本信息保存成功后,进入采购单修改页面,显示该采购单下采购药品明细。
包括以下字段内容:
在这里插入图片描述

7.2 实现

7.2.1 dao
自定义mapper,实现采购单明细查询。
注意:编写的dao具备公用性

Sql:
主查询表:yycgdmx +4位年份
关联表:医院信息表(通过采购单基本信息表关联)、药品信息表、供货商信息表

select yycgdmx.id yycgdmxid,
       useryy.id useryyid,
       useryy.mc useryymc,
       ypxx.id,
       ypxx.bm,
       ypxx.mc,
       ypxx.jx,
       ypxx.gg,
       ypxx.zhxs,
       ypxx.scqymc,
       ypxx.spmc,
       
       ypxx.jyzt,
       
       (select info
          from dictinfo
         where ypxx.jyzt = dictcode
           and typecode = '003') jyztmc,
       yycgdmx.zbjg,
       yycgdmx.jyjg,
       yycgdmx.cgl,
       yycgdmx.cgje,
       yycgdmx.cgzt,
       (select info
          from dictinfo
         where typecode = '011'
           and dictcode = yycgdmx.cgzt) cgztmc,
       usergys.mc usergysmc,
       usergys.id usergysid

  from yycgdmx2014 yycgdmx, yycgd2014 yycgd, useryy, ypxx, usergys
 where yycgdmx.yycgdid = yycgd.id
   and yycgd.useryyid = useryy.id
   and yycgdmx.ypxxid = ypxx.id
   and yycgdmx.usergysid = usergys.id
   
   --数据范围设定
   --只查询某个采购单下药品明细
   and yycgdmx.yycgdid = '2014101040'

定义mapper
在这里插入图片描述

7.2.2 commonSql定义

将分页 头和分页尾定义在公用sql中。
在这里插入图片描述
定义:CommonSql.xml

在SqlMapConfig.xml中配置CommonSql.xml

在这里插入图片描述
7.2.3 service

接口功能 :查询采购单下明细信息
接口参数:采购单id、查询条件

在这里插入图片描述

7.2.4 action

采购单药品明细查询结果集(json)

在这里插入图片描述

7.2.5 页面

在采购单修改页面中加载 采购单明细列表。

在这里插入图片描述

8. 采购单明细添加查询

8.1 需求

医院从本区域供货商的药品目录中挑选药品,医院根据查询条件查询本区域供货商的药品目录的信息。

从本地区供货商药品目录中找采购的药品信息。
在这里插入图片描述

8.2 实现

8.2.1 dao

自定义一个mapper,查询内容和供货商药品目录查询相似。

在供货商药品目录查询的基础上添加两个约束条件:
约束条件:
1、只查询医院本区域供货商的药品目录
向sql中传入医院的区域id
2、 将采购单中已经存在的药品过虑掉
向 sql中传入采购单id

select
    gysypml.id gysypmlid,
    gysypml.ypxxid,
    gysypml.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 gysypml, usergys, gysypml_control, ypxx
    where gysypml.usergysid = usergys.id
    and gysypml.ypxxid = gysypml_control.ypxxid
    and gysypml.usergysid = gysypml_control.usergysid
    and gysypml.ypxxid = ypxx.id
    
    --限制只查询医院本区域供货商的药品目录
    --1.1.16.是医院所在区域
    
    and gysypml.usergysid in (
       select usergysarea.usergysid from usergysarea where '1.1.16.' like usergysarea.areaid || '%'
    )
    --将采购单中药品过虑掉
    --2014101040就是采购单id
    and gysypml.ypxxid not in(
        select yycgdmx.ypxxid from yycgdmx2014 yycgdmx where yycgdmx.yycgdid = '2014101040'
    )

为了系统维护方便,单独 定义mapper,而不是在原来供货商药品目录查询的mapper上增加功能。
在这里插入图片描述

8.2.2 service
接口功能:添加采购药品查询
接口参数:医院id、采购单id、查询条件
接口实现:
根据医院id查询医院信息,得到医院区域id
在这里插入图片描述

8.2.3 action

参考供货商药品目录查询action。
在这里插入图片描述

8.2.4 页面
在采购单修改页面,点击“采购药品添加”,将采购单id传入采购药品添加查询页面。

在这里插入图片描述
8.2.5 测试

采购药品添加查询功能测试:
使用不同区域的医院进行测试,医院所属的供货商不同。

第一组:
cmzcmc:医院
ghsjzt:供货商
第二组:
sszdhnc 医院
ghsxy 供货商

9. 采购单明细添加提交

9.1 需求 :

医院从本区域供货商药品目录中挑选要采购的药品,相同的药品在每个采购单中只允许挑选一次。

在数据库级别有一个唯一约束:
在采购单明细表中:采购单id+药品id是唯一的
在这里插入图片描述

9.2 实现

9.2.1 dao
向采购单明细表中插入记录。
使用自动生成 的mapper.

9.2.2 service
接口功能:采购药品添加
接口参数:采购单id、药品id、供货商id

在这里插入图片描述

9.2.3 action

批量添加采购药品的参数:

采购单id:单个参数(在form定义hidden)
药品id:多个参数(需要在datagrid的列中定义)
供货商id:多个参数(需要在datagrid的列中定义)

对于多个参数使用List yycgdmxCustoms接收。

在包装对象中添加list属性接收页面的批量参数:

9.2.4 页面

药品id:多个参数(需要在datagrid的列中定义)
供货商id:多个参数(需要在datagrid的列中定义)

在这里插入图片描述

采购单id:单个参数(在form定义hidden)

在这里插入图片描述

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值