【机房报修管理系统】后端篇(十二) Service层开发——工单管理服务

一、前情提要


    上一次我们做到了配置Shiro,这一次我们来完成工单管理服务的开发。


二、接口设计


1.获取全部维修工单服务:searchAllOrder

  • 参数:无
  • 返回值:List<Orders>

2.通过维修工单ID获取维修工单信息:searchOrderById

  • 参数:id(维修工单ID,类型为:Integer
  • 返回值:Orders(工单实体类)

3.获得维修工单总数:getOrderCount

  • 参数:无
  • 返回值:Integer

4.保存工单信息:saveOrder

  • 参数:Orders(工单实体类)
  • 返回值:无

5.更新工单信息:updateOrder

  • 参数:Orders(工单实体类)
  • 返回值:无

6.删除工单信息:deleteOrder

  • 参数:Orders(工单实体类)
  • 返回值:无


三、实践操作


注意:我不会对所有接口进行详解,只会对一些需要注意的地方进行讲解。

1.按照上方设计的接口编写接口类OrdersService

com.repairsystem.service创建接口OrdersService

package com.repairsystem.service;

import com.repairsystem.entity.Orders;

import java.util.List;

/**
 * @author CheungChingYin
 * @date 2019/1/15
 * @time 14:28
 */
public interface OrdersService {

    /**
     * 获取全部维修单
     * @return
     */
    List<Orders> searchAllOrder();

    /**
     * 按照维修单号搜索维修单
     * @param id
     * @return
     */
    Orders searchOrderById(Integer id);

    /**
     * 获得工单总数量
     * @return
     */
    Integer getOrderCount();

    /**
     * 添加维修单
     * @param order
     *
     */
    void saveOrder(Orders order);

    /**
     * 更新维修单
     * @param order
     */
    void updateOrder(Orders order);

    /**
     * 删除维修单
     * @param id
     */
    void deleteOrder(Integer id);

}

2.创建接口实现类OrdersServiceImpl

com.repairsystem.service.Impl下创建接口实现类OrdersServiceImpl,实现OrdersService接口。

/**
 * @author CheungChingYin
 * @date 2019/1/15
 * @time 14:33
 */
@Service
public class OrdersServiceImpl implements OrdersService {

    @Autowired
    OrdersMapper ordersMapper;
}

3.保存工单信息:saveOrder的实现

  • 参数:Orders(工单实体类)
  • 返回值:无
    在这里插入图片描述
        在保存工单的时候,我们并不会将所有的字段进行保存,如images_path(上传图片路径)、admin_id(接手的管理员ID),因为在用户上传工单的时候,不一定会上传图片,还有工单一开始保存的时候并不会有管理员接手,管理员需要手动点击接受工单按钮才能填上管理员的ID。这样可能会缺少一两个数据库字段,在通用Mapper中该如何实现?难道需要自己手动写SQL语句?
        不!在通用Mapper中已经有预料到这一种情况,写了一个名为insertSelective()的方法,这个方法对于insert()的不同之处在于:
  • insert()需要将存入数据库的全部的字段的数据都不能为空
  • insertSelective()可以将只存入一些数据库字段的数据,不要求全部存入。

OrdersServiceImpl重写saveOrder方法即可。

@Transactional(propagation = Propagation.REQUIRED)
    @Override
    public void saveOrder(Orders order) {

        ordersMapper.insertSelective(order);
    }

4.获取全部维修工单服务:searchAllOrder的实现

  • 参数:无
  • 返回值:List<Orders>

    由于在Orders这个数据表有外键的出现,而通用Mapper并不会多表查询,所以只能是由我们自己来写SQL语句。

orders表有两个外键class_idbuilding_id
在这里插入图片描述

我们需要回显class_namebuilding_name的信息,所以我们需要这样做:
由于我们在实体类Orders中并没有classNamebuildingName两个成员变量,所以我们需要先创建这两个成员变量。
在实体类Orders中添加成员变量

private String className;
private String buildingName;

/*Getter和Setter方法省略*/

在mapper配置文件OrdersMapper.xml中的<resultMap>节点中添加这两个成员变量(注意:property属性值必须和实体类中的成员变量名一致

<result column="className" property="className" jdbcType="VARCHAR"/>
<result column="buildingName" property="buildingName" jdbcType="VARCHAR"/>

然后在OrdersMapper.xml中编写相关的SQL语句,这里的SQL语句我选择使用Left Join
注意:下面SQL语句中AS className 必须要和上面的column属性值一致

<select id="getAllOrder" resultMap="BaseResultMap">
        SELECT
            o.*, c.class_name AS className,
            b.building_name AS buildingName,
            a.admin_name AS adminName
        FROM
            orders AS o
        LEFT JOIN class AS c ON c.class_id = o.class_id
        LEFT JOIN building AS b ON b.building_id = o.building_id
        LEFT JOIN administrator AS a ON a.admin_id = o.admin_id
        ORDER BY
            o.submit_time DESC
    </select>

之后在Mapper接口文件com.repairsystem.dao.OrdersMapper创建相应的接口方法(注意:接口方法名字必须和mapper配置文件中的id属性值一致

public interface OrdersMapper extends MyMapper<Orders> {
	List<Orders> getAllOrder();
}

最后在service中通过mapper对象调用方法即可,在com.repairsystem.service.Impl.OrdersServiceImpl编写以下代码:

	@Transactional(propagation = Propagation.SUPPORTS)
    @Override
    public List<Orders> searchAllOrder() {

        return ordersMapper.getAllOrder();
    }

    到这里,Service层开发——工单管理服务开发已经完成了。如果您对次篇文章有疑问,可以在文章下方留言,谢谢您的阅读。如对【机房报修管理系统】系列文章有兴趣,可以关注或收藏我的文章,您的支持是我最大的动力,我会尽快推出下一期内容,敬请期待。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值