一、前情提要
上一次我们对维修工单服务进行开发,这一次我们对历史工单服务进行开发。
二、接口设计
1.获取所有完成的维修表单:searchAllCompleteOrder
- 参数:无
- 返回值:
List<CompleteOrder>
2.获取完成维修表单数量:getCompleteOrderCount
`
- 参数:无
- 返回值:
Integer
3.通过表单Id获取表单信息:searchCompleteOrderById
- 参数:
id
(表单ID,类型为Integer
) - 返回值:
CompleteOrder
(完成工单的实体类)
4.通过关键字搜索完成维修工单:searchCompleteOrderByKeyWord
- 参数:
keyWord
(问题关键词,类型为String
) - 返回值:
List<CompleteOrder>
(由于搜索可能会有多条结果,需要使用List
)
5.保存已完成表单信息:saveCompleteOrder
- 参数:
CompleteOrder
(完成工单实体类) - 返回值:无
6.更新完成表单信息:updateCompleteOrder
- 参数:
CompleteOrder
(完成工单实体类) - 返回值:无
7.删除完成表单信息:deleteCompleteOrder
- 参数:
id
(表单ID,类型为Integer
) - 返回值:无
三、实践操作
注意:我不会对所有接口进行详解,只会对一些需要注意的地方进行讲解。
1.按照上方设计的接口,编写接口类CompleteOrderService
在com.repairsystem.service
下创建接口类CompleteOrderService
package com.repairsystem.service;
import com.repairsystem.entity.CompleteOrder;
import java.util.List;
/**
* @author CheungChingYin
* @date 2019/1/16
* @time 15:45
*/
public interface CompleteOrderService {
/**
* 获取所有完成表单
* @return
*/
List<CompleteOrder> searchAllCompleteOrder();
/**
* 获取完成维修表单数量
* @return
*/
Integer getCompleteOrderCount();
/**
* 通过表单Id获取表单信息
* @param id
* @return
*/
CompleteOrder searchCompleteOrderById(Integer id);
/**
* 通过关键字搜索完成维修工单
* @param keyWord
* @return
*/
List<CompleteOrder> searchCompleteOrderByKeyWord(String keyWord);
/**
* 保存已完成表单信息
* @param completeOrder
*/
void saveCompleteOrder(CompleteOrder completeOrder);
/**
* 更新完成表单信息
* @param completeOrder
*/
void updateCompleteOrder(CompleteOrder completeOrder);
/**
* 删除完成表单信息
* @param id
*/
void deleteCompleteOrder(Integer id);
}
2.编写接口实现类CompleteOrderServiceImpl
在com.repairsystem.service.Impl
创建接口实现类CompleteOrderServiceImpl
,实现接口CompleteOrderService
@Service
public class CompleteOrderServiceImpl implements CompleteOrderService {
@Autowired
private CompleteOrderMapper completeOrderMapper;
}
3.实现通过关键字搜索完成维修工单:searchCompleteOrderByKeyWord
- 参数:
keyWord
(问题关键词,类型为String
) - 返回值:
List<CompleteOrder>
(由于搜索可能会有多条结果,需要使用List
)
由于在查询的时候需要多表查询,自动生成的实体类会少了两个成员变量,需要我们手动添加。
在com.repairsystem.entity.CompleteOrder
下添加成员变量
private String className;
private String buildingName;
/*Getter和Setter方法省略*/
在历史工单服务中,数据库的查询也像工单管理服务那样需要用到多表查询,说以我们只能手动编写SQL语句。
首先在com.repairsystem.dao.CompleteOrderMapper
中定义好接口searchCompleteOrderByKeyWord
public interface CompleteOrderMapper extends MyMapper<CompleteOrder> {
List<CompleteOrder> getCompleteOrderByKeyWord(String keyWord);
}
由于在实体类添加了两个成员变量,所以需要我们在<resultMap>
节点上添加相对应的节点
<result column="className" property="className" jdbcType="INTEGER"/>
<result column="buildingName" property="buildingName" jdbcType="INTEGER"/>
在相对应的Mapper映射文件中手动编写SQL语句
里面的#{keyWord}
对应上面接口的形参
<select id="getCompleteOrderByKeyWord" resultMap="BaseResultMap" parameterType="java.lang.String">
SELECT
co.*,a.admin_name AS adminName,
c.class_name AS className,
b.building_name AS buildingName
FROM
complete_order AS co
LEFT JOIN class AS c ON c.class_id = co.class_id
LEFT JOIN building AS b ON b.building_id = co.building_id
LEFT JOIN administrator AS a ON a.admin_id = co.admin_id
WHERE
co.problem LIKE "%"#{keyWord}"%"
ORDER BY
co.complete_time DESC
</select>
实现接口方法
在com.repairsystem.service.Impl.CompleteOrderServiceImpl
编写以下代码
@Transactional(propagation = Propagation.SUPPORTS)
@Override
public CompleteOrder searchCompleteOrderById(Integer id) {
if(StringUtils.isBlank(id.toString())){
throw new CompleteOrderIdIsNullException("传入的完成表单ID不能为空");
}
return completeOrderMapper.getCompleteOrderById(id);
}
到这里,Service层开发——历史工单管理服务开发已经完成了。如果您对次篇文章有疑问,可以在文章下方留言,谢谢您的阅读。如对【机房报修管理系统】系列文章有兴趣,可以关注或收藏我的文章,您的支持是我最大的动力,我会尽快推出下一期内容,敬请期待。