Design and Implementation of an Online Course Purchase System(14)

Complete the function of adding, deleting and changing courses

Posted by Chen Xingxu on June 3, 2020

易课寄在线购课系统开发笔记(十四)–完成课程的增删改功能

课程添加功能

功能分析

请求的 url:/item/save

参数:表单的数据。可以使用 pojo 接收表单的数据,要求 pojo 的属性和 input 的 name 属性要一致。使用 EcoursesItem 对象接收表单的数据。(EcoursesItem item, String desc)

返回值:JSON 数据。应该包含一个 status 的属性。可以使用 ECoursesResult,放到 ecourses-common 中。

业务逻辑

1、生成课程 id

实现方案:

a) uuid,字符串,不推荐使用。

b) 数值类型,不重复。日期+时间+随机数 20200601151333123123

c) 可以直接去毫秒值+随机数。可以使用。

d) 使用 Redis 的 Incr。推荐使用。

使用 IDUtils 生成课程 id

2、补全 EcoursesItem 对象的属性

3、向 ecourses_item 表插入数据

4、创建一个 EcoursesItemDesc 对象

5、补全 EcoursesItemDesc 的属性

6、向 ecourses_item_desc 表插入数据

7、return ECoursesResult.ok();

Dao 层

向 ecourses_item , ecourses_item_desc 表中插入数据,可以使用逆向工程。

Service 层

参数:EcoursesItem item, String desc

业务逻辑:略,参考上面

返回值:ECoursesResult

@Override
public ECoursesResult addItem(EcoursesItem item, String desc) {
    //生成课程id
    final long itemId = IDUtils.genItemId();
    //补全item的属性
    item.setId(itemId);
    //1-正常,2-下架,3-删除
    item.setStatus((byte) 1);
    item.setCreated(new Date());
    item.setUpdated(new Date());
    //向课程表插入数据
    itemMapper.insert(item);
    //创建一个课程描述表对应的pojo对象。
    EcoursesItemDesc itemDesc = new EcoursesItemDesc();
    //补全属性
    itemDesc.setItemId(itemId);
    itemDesc.setItemDesc(desc);
    itemDesc.setCreated(new Date());
    itemDesc.setUpdated(new Date());
    //向课程描述表插入数据
    itemDescMapper.insert(itemDesc);
    //发送课程添加消息
    jmsTemplate.send(topicDestination, new MessageCreator() {

        @Override
        public Message createMessage(Session session) throws JMSException {
            TextMessage textMessage = session.createTextMessage(itemId + "");
            return textMessage;
        }
    });

    //返回成功
    return ECoursesResult.ok();
}

发布服务

<dubbo:service interface="cn.ecourses.service.ItemService" ref="itemServiceImpl" timeout="600000"/>

表现层

引用服务

<dubbo:reference interface="cn.ecourses.service.ItemService" id="itemService" />

Controller

请求的 url:/item/save

参数:EcoursesItem item, String desc

返回值:ECoursesResult

@RequestMapping(value="/item/save", method=RequestMethod.POST)
@ResponseBody
public ECoursesResult addItem(EcoursesItem item, String desc) {
    ECoursesResult result = itemService.addItem(item, desc);
    return result;
}

课程修改功能

功能分析

请求的 url:/item/update

参数:EcoursesItem item, String desc

返回值:ECoursesResult

Dao 层

修改 ecourses_item , ecourses_item_desc 表中的数据,可以使用逆向工程。

Service 层

参数:EcoursesItem item, String desc

返回值:ECoursesResult

@Override
public ECoursesResult updateItem(EcoursesItem item, String desc) {
    item.setUpdated(new Date());
    //向课程表插入数据
    itemMapper.updateByPrimaryKeySelective(item);
    //创建一个课程描述表对应的pojo对象。
    EcoursesItemDesc itemDesc = new EcoursesItemDesc();
    //补全属性
    itemDesc.setItemDesc(desc);
    itemDesc.setUpdated(new Date());
    //向课程描述表插入数据
    itemDescMapper.updateByPrimaryKeySelective(itemDesc);

    //返回成功
    return ECoursesResult.ok();
}

表现层

Controller

请求的 url:/item/update

参数:EcoursesItem item, String desc

返回值:ECoursesResult

@RequestMapping(value="/item/update", method=RequestMethod.POST)
@ResponseBody
public ECoursesResult updateItem(EcoursesItem item, String desc) {
    ECoursesResult result = itemService.updateItem(item, desc);
    return result;
}

课程删除功能

功能分析

请求的 url:/item/delete

参数:String ids

返回值:ECoursesResult

Dao 层

删除 ecourses_item , ecourses_item_desc 表中的数据,可以使用逆向工程。

Service 层

参数:String ids

返回值:ECoursesResult

@Override
public ECoursesResult deleteItemByIds(String ids) {
    String[] idArray = ids.split(","); 
    for (String id : idArray) {  
        itemMapper.deleteByPrimaryKey(Long.valueOf(id));  
    }  
    return ECoursesResult.ok();
}

表现层

Controller

请求的 url:/item/delete

参数:String ids

返回值:ECoursesResult

@RequestMapping("/item/delete")
@ResponseBody
public ECoursesResult deleteParam(@RequestParam("ids") String ids) {
    ECoursesResult result = itemService.deleteItemByIds(ids);
    return result;
}

课程上架功能

功能分析

请求的 url:/item/reshelf

参数:String ids

返回值:ECoursesResult

Dao 层

修改 ecourses_item 表中的数据,可以使用逆向工程。

Service 层

参数:String ids

返回值:ECoursesResult

@Override
public ECoursesResult reshelfItemByIds(String ids) {
    String[] idArray = ids.split(","); 
    EcoursesItem item = new EcoursesItem();
    for (String id : idArray) {  
        item.setId(Long.valueOf(id));
        item.setStatus((byte) 1);
        itemMapper.updateByPrimaryKeySelective(item);  
    }  
    return ECoursesResult.ok();
}

表现层

Controller

请求的 url:/item/reshelf

参数:String ids

返回值:ECoursesResult

@RequestMapping("/item/reshelf")
@ResponseBody
public ECoursesResult reshelfParamParam(@RequestParam("ids") String ids) {
    ECoursesResult result = itemService.reshelfItemByIds(ids);
    return result;
}

课程下架功能

功能分析

请求的 url:/item/instock

参数:String ids

返回值:ECoursesResult

Dao 层

修改 ecourses_item 表中的数据,可以使用逆向工程。

Service 层

参数:String ids

返回值:ECoursesResult

@Override
public ECoursesResult instockItemByIds(String ids) {
    String[] idArray = ids.split(","); 
    EcoursesItem item = new EcoursesItem();
    for (String id : idArray) {  
        item.setId(Long.valueOf(id));
        item.setStatus((byte) 2);
        itemMapper.updateByPrimaryKeySelective(item);  
    }  
    return ECoursesResult.ok();
}

表现层

Controller

请求的 url:/item/instock

参数:String ids

返回值:ECoursesResult

@RequestMapping("/item/instock")
@ResponseBody
public ECoursesResult instockParam(@RequestParam("ids") String ids) {
    ECoursesResult result = itemService.instockItemByIds(ids);
    return result;
}