最近同事交接的系统,有需求改动。
但是我完全看不懂他写的代码,好在需求不是很复杂,只是改下查询条件,如果是动流程,增单据,那我可能就不行了。
需求1:入库查询条件中增加仓库筛选
需求图如下:
首先找页面:
先找到这个页面,看看它的查询逻辑是什么?
后台对应的controller是 SpareTradehdController
,因为是在查询条件新建仓库字段,而这些查询条件传到后台,是被封装成一个requestBody,也就是一个实体类。
那么,就要在这个实体类里增加属性,首先要判断这个实体类,有没有被其他类引用,如果它耦合度低,只在SpareTradehdController
里引用,那么改造起来就会相对简单一些,反之则比较复杂。
前端改造
查询条件中增加仓库条件
<el-form-item label="仓库" prop="warehouseCode">
<el-select v-model="queryParams.warehouseCode" placeholder="请选择仓库" clearable size="small">
<el-option
v-for="item in warehouseOptions"
:key="item.warehouseCode"
:label="item.warehouseDesc"
:value="item.warehouseCode"
/>
</el-select>
</el-form-item>
warehouseOptions是预定义的仓库集合,里面的数据需要初始化。
这个东西在做设备管理的时候,取设备分类的时候,已经写过好多次了。
data中声明属性:
方法在仓库管理功能里已经定义好,因此不用再去写js,写后台类去获取仓库列表,直接引用就行。
接下来,就是在created初始化的方法里,把warehouseOptions里面的值进行初始化。
至此,前端改造完成,已经可以取到数据了,但是当点击查询的时候,虽然在queryParams中带上了warehouseCode,但是后台并没有相应的逻辑去处理。
因此还需要再后台,进行逻辑的改造。
后端改造
上图是后端对应的查询方法,可以看到它把这个前端传递的参数queryParams封装成了一个实体类,这样只需要在这个实体类中增加相应的属性,就行了。
虽然,这个实体类被其他的代码所引用,这个是历史遗留问题,当初离职的开发人员,在做这个系统的时候,自动生成的代码里,有大量的冗余代码没有清理,导致维护的时候,异常困难。
但是,这个入库记录的功能,在前端是只有查询和导出的功能,编辑,新增,删除等功能都没有。
更何况,这个实体类虽然被其他的类所应用,但是在其中增加一个warehouseCode
字段,如果其他类引用了,这个属性的值就是null,并没有什么大碍。
换句话说,可以直接新增。
实体类增加字段,和对应的get和set方法。
SQL是需要重点改造的,因为它查询的入库记录中,没有仓库这个字段,这个字段是存在于具体明细表中,因此还需要新增join查询,因为是一对多的关系,还需要distinct进行过滤。
改造如下:
<sql id="selectSpareTradehdVo">
select DISTINCT hd.id,
hd.bwart,
hd.document_num,
hd.document_date,
hd.posting_date,
case
when ss.NAME1 is not null then ss.NAME1
else hd.company
end company,
hd.dept,
case
when st.BUTXT is not null then st.BUTXT
else hd.supplier
end supplier,
hd.trade_type,
hd.create_by,
hd.create_time,
hd.update_by,
hd.update_time,
hd.remark,
ss.NAME1,
st.BUTXT
from spare_tradehd hd
left join spare_supplier ss on ss.LIFNR = hd.supplier
left join (select distinct BUKRS, BUTXT from spare_t001) st on st.BUKRS = hd.company
left JOIN spare_tradeln ln on hd.id = ln.tradehd_id
</sql>
<select id="selectSpareTradehdList" parameterType="SpareTradehd" resultMap="SpareTradehdResult">
<include refid="selectSpareTradehdVo"/>
<where>
<if test="bwart != null and bwart != ''"> and hd.bwart = #{bwart}</if>
<if test="documentNum != null and documentNum != ''"> and hd.document_num = #{documentNum}</if>
<if test="documentDate != null and documentDate != ''"> and hd.document_date = #{documentDate}</if>
<if test="postingDate != null and postingDate != ''"> and hd.posting_date = #{postingDate}</if>
<if test="company != null and company != ''"> and hd.company = #{company}</if>
<if test="dept != null and dept != ''"> and hd.dept = #{dept}</if>
<if test="supplier != null and supplier != ''"> and hd.suppliersupplier = #{supplier}</if>
<if test="tradeType != null and tradeType != ''"> and hd.trade_type = #{tradeType}</if>
<if test="tradeType != null and tradeType != ''"> and ln.warehouse_code = #{warehouseCode}</if>
</where>
order by create_time desc
</select>
<select id="selectSpareTradehdById" parameterType="Long" resultMap="SpareTradehdResult">
<include refid="selectSpareTradehdVo"/>
where hd.id = #{id}
</select>