java包裹邮费计算_猿实战16——承运商之搭建你的运费基石

猿实战是一个原创系列文章,通过实战的方式,采用前后端分离的技术结合SpringMVC Spring Mybatis,手把手教你撸一个完整的电商系统,变身猿人找到工作不是问题。还等什么呢?关注公号,取基础代码,一起实战吧。

上几个章节,猿人君教会了你如何去实现前台类目的后台管理功能,今天我们一起来学习,如何实现承运商管理。

功能概览

20ef909370f87d6a506c1e1e36f9c83c.png

7614484d27f7fb3f37d31222bfcd2e03.png

承运商管理的功能虽然相对简单,主要用于维护供应商的一些基础信息,为之后要实现的运费模板提供数据支撑,是运费计算的基础信息。承运商管理功能,主要提供承运商信息列表以及新增/修改/启用/停用承运商功能。

数据库设计

e8347d6e689a48c7ddd060bdad5bbaf0.png

基于之前的设计文章,我们可以快速的整理承运商的基本信息,并落地为数据库表,如上图所示。

后端功能实现

承运商管理的功能相对传统,提供新增/修改/删除/停用/启用/分页列表的功能。

值得注意的是,删除功能,我们是通过状态位来做的逻辑删除。之前有新手朋友似乎不明白什么是逻辑删除的含义,这里猿人君就稍微提这么一句了。所谓物理删除通常指的是通过delete语句删除表里的数据(其实并没有真正的物理掉,先不深究了),而逻辑删除又叫业务删除,通过给与数据一个“删除”状态,在之后的访问中,不访问删除状态的数据就可以了。

/** * Copyright(c) 2004-2020 pangzi * com.pz.basic.mall.controller.freight.MallLogisticsController.java */package com.pz.basic.mall.controller.freight; import com.pz.basic.mall.domain.base.Result;import com.pz.basic.mall.domain.base.enums.DataStatusEnum;import com.pz.basic.mall.domain.freight.MallLogistics;import com.pz.basic.mall.domain.freight.query.QueryMallLogistics;import com.pz.basic.mall.service.freight.MallLogisticsService;import org.springframework.web.bind.annotation.RequestBody;import org.springframework.web.bind.annotation.RequestMapping;import org.springframework.web.bind.annotation.RestController; import java.util.List;  /** * * @author pangzi * @date 2020-06-22 20:47:27 * * */@RestController@RequestMapping("/logistics")public class MallLogisticsController {      private MallLogisticsService mallLogisticsService;      public void setMallLogisticsService(MallLogisticsService mallLogisticsService) {        this.mallLogisticsService = mallLogisticsService;    }      /**     * 新增物流供应商     * @param mallLogistics     * @return     */    @RequestMapping("/addMallLogistics")    public Result  addMallLogistics(@RequestBody MallLogistics mallLogistics){        try{             return   mallLogisticsService.addMallLogistics(mallLogistics);        }catch(Exception e){            e.printStackTrace();            return new Result(false);        }    }     /**     * 修改物流供应商     * @param mallLogistics     * @return     */    @RequestMapping("/updateMallLogistics")    public Result updateMallLogistics(@RequestBody MallLogistics mallLogistics){        try{            return  mallLogisticsService.updateMallLogisticsById(mallLogistics);        }catch(Exception e){            e.printStackTrace();            return new Result(false);        }    }     /**     * 启用物流供应商     * @param mallLogistics     * @return     */    @RequestMapping("/enableMallLogistics")    public Result enableMallLogistics(@RequestBody MallLogistics mallLogistics){        try{            MallLogistics modifiedData =new MallLogistics ();            modifiedData.setId(mallLogistics.getId());            modifiedData.setStatus(DataStatusEnum.STATUS_ENABLE.getStatusValue());            return  mallLogisticsService.updateMallLogisticsById(modifiedData);        }catch(Exception e){            e.printStackTrace();            return new Result(false);        }    }      /**     * 停用物流供应商     * @param mallLogistics     * @return     */    @RequestMapping("/disableMallLogistics")    public Result disableMallLogistics(@RequestBody MallLogistics mallLogistics){        try{            MallLogistics modifiedData =new MallLogistics ();            modifiedData.setId(mallLogistics.getId());            modifiedData.setStatus(DataStatusEnum.STATUS_DISABLE.getStatusValue());            return  mallLogisticsService.updateMallLogisticsById(modifiedData);        }catch(Exception e){            e.printStackTrace();            return new Result(false);        }    }     /**     * 删除物流供应商     * @param mallLogistics     * @return     */    @RequestMapping("/deleteMallLogistics")    public Result deleteMallLogistics(@RequestBody MallLogistics mallLogistics){        try{            MallLogistics modifiedData =new MallLogistics ();            modifiedData.setId(mallLogistics.getId());            modifiedData.setStatus(DataStatusEnum.STATUS_DELETED.getStatusValue());            return  mallLogisticsService.updateMallLogisticsById(modifiedData);        }catch(Exception e){            e.printStackTrace();            return new Result(false);        }    }      /**     * 分页返回物流供应商列表     * @param queryMallLogistics     * @return     */    @RequestMapping("/findByPage")    public  Result> findByPage(@RequestBody  QueryMallLogistics queryMallLogistics){        return mallLogisticsService.getMallLogisticssByPage(queryMallLogistics);    }    }

考虑到很多朋友编写mapper文件比较困难,这个章节的mapper就先给到你吧,不过做人不要太懒了,domain 和dao 以及service的实现,还是自己动手搞一下吧。

<?xml version="1.0" encoding="UTF-8" ?>id,logistics_code,logistics_name,logistics_icon,logistics_url,logistics_remark,freight_limit,custom_fee_limit,custom_time_limit,show_limit,status,create_user,modify_user,created,modifiedstatus>-1and  id =  #{id}and  logistics_code =  #{logisticsCode}and  logistics_name =  #{logisticsName}and  logistics_icon =  #{logisticsIcon}and  logistics_url =  #{logisticsUrl}and  logistics_remark =  #{logisticsRemark}and  freight_limit =  #{freightLimit}and  custom_fee_limit =  #{customFeeLimit}and  custom_time_limit =  #{customTimeLimit}and  show_limit =  #{showLimit}and  status =  #{status}and  create_user =  #{createUser}and  modify_user =  #{modifyUser}and  created =  #{created}and  modified =  #{modified}and logistics_name like concat(#{logisticsNameLike},'%')and logistics_code like concat(#{logisticsCodeLike},'%')selectfrom mall_logisticsselectfrom mall_logisticsLIMIT #{startRow},#{pageSize}selectfrom mall_logisticswhere id = #{id}delete from mall_logisticswhere id = #{id}delete from mall_logisticsINSERT INTOmall_logistics(id,logistics_code,logistics_name,logistics_icon,logistics_url,logistics_remark,freight_limit,custom_fee_limit,custom_time_limit,show_limit,status,create_user,modify_user,created,modified)VALUES(#{id},#{logisticsCode},#{logisticsName},#{logisticsIcon},#{logisticsUrl},#{logisticsRemark},#{freightLimit},#{customFeeLimit},#{customTimeLimit},#{showLimit},#{status},#{createUser},#{modifyUser},#{created},#{modified})SELECT @@IDENTITY AS IDinsert into mall_logisticsid,logistics_code,logistics_name,logistics_icon,logistics_url,logistics_remark,freight_limit,custom_fee_limit,custom_time_limit,show_limit,status,create_user,modify_user,created,modified,#{id},#{logisticsCode},#{logisticsName},#{logisticsIcon},#{logisticsUrl},#{logisticsRemark},#{freightLimit},#{customFeeLimit},#{customTimeLimit},#{showLimit},#{status},#{createUser},#{modifyUser},now(),now(),SELECT @@IDENTITY AS IDselect count(*) from mall_logisticsupdate mall_logisticslogistics_code =  #{logisticsCode},logistics_name =  #{logisticsName},logistics_icon =  #{logisticsIcon},logistics_url =  #{logisticsUrl},logistics_remark =  #{logisticsRemark},freight_limit =  #{freightLimit},custom_fee_limit =  #{customFeeLimit},custom_time_limit =  #{customTimeLimit},show_limit =  #{showLimit},status =  #{status},create_user =  #{createUser},modify_user =  #{modifyUser},created =  #{created},modified=now(),where id = #{id}

前端功能实现

功能的实现,主要还是基于element-ui来实现的。这里提几个关键的点,最后也会把源代码给到你的。

列表展示:

89ac708f0d12d9e5f49997864086a080.png

主要是通过el-table组件实现的,属性data用于绑定需要展现的数据。需要你定义和操作。

3f71892293ee80b6650537257cb4a4ca.png

910af878f83817d7bbb16849a754631e.png

新增/编辑弹框

弹框展示的标题和展示,通过页面定义的数据来控制。

表单中的下拉选项,通过el-select组件来实现。

注意使用的v-for指令,以及你需要在页面上定义你的选项数据。

关键点已经都告诉你了,最后,将页面的源码送你吧,不过还是希望你仅仅作为参考,自己动手去实现一次。

  

                                                          查询        重置        新增              
                                    {{ scope.row.logisticsName }}                                                {{ scope.row.logisticsCode }}                                                              {{ scope.row.logisticsUrl }}                                      {{ scope.row.freightLimit===1?'是':'否' }}                                                {{ scope.row.customFeeLimit===1?'是':'否' }}                                                {{ scope.row.customTimeLimit===1?'是':'否' }}                                                {{ scope.row.showLimit===1?'是':'否' }}                                                {{ scope.row.status===0 ?'停用':'启用' }}                                                编辑                        停用                        启用                        删除                                          0" :total="total" :page.sync="listQuery.page" :limit.sync="listQuery.pageSize" @pagination="getList" />                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        
                      取消                                确定                  
          
  
  
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值