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

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

功能概览

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

数据库设计

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

后端功能实现

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

值得注意的是,删除功能,我们是通过状态位来做的逻辑删除。之前有新手朋友似乎不明白什么是逻辑删除的含义,这里猿人君就稍微提这么一句了。所谓物理删除通常指的是通过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来实现的。这里提几个关键的点,最后也会把源代码给到你的。

列表展示:

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

新增/编辑弹框

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

表单中的下拉选项,通过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" />

取消                                确定                  

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

  1. java包裹邮费计算_GitHub - honghailiang/FreightSystem: 基于Java Swing编写的简易运费计算工具...

    FreightSystem 基于java Swing编写的运费计算系统 初始化数据 从excel中读取数据,转化为对象(只保存基础数据:序列号.始发站.目的站.省份.100kg以下(元/kg).100 ...

  2. Java MapReduce 基本计算操作实现实战

    Java MapReduce 基本计算操作实现实战 特别注意:  1.在运行代码的过程中注意自己本地Hadoop版本必须与服务器版本一致,否则会出现许多意向不到的问题;  2.数据之间不能有空行间隔; ...

  3. Java web小项目_个人主页(1)—— 云环境搭建与项目部署

    摘自:Java web小项目_个人主页(1)-- 云环境搭建与项目部署 作者:丶PURSUING 发布时间: 2021-03-26 23:59:39 网址:https://blog.csdn.net/ ...

  4. java运费模板设计_猿实战17——实现你未必知晓的运费模板

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

  5. element 下拉选择_猿实战18——商品发布之类目选择

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

  6. java统计excel数据_数据分析实战——EXCEL实现复购率计算

    这是数据分析实战的第三篇(复购率计算篇),本文提供真实数据(脱敏),并梳理复购率计算思路和技巧,通过15分钟的阅读和实践,读者即可根据自己的订单数据灵活计算业务涉及到的复购率了.(实战数据在文末) 相 ...

  7. java unsafe获取指针_【实战Java高并发程序设计 1】Java中的指针:Unsafe类

    是<实战Java高并发程序设计>第4章的几点. 如果你对技术有着不折不挠的追求,应该还会特别在意incrementAndGet() 方法中compareAndSet()的实现.现在,就让我 ...

  8. 西工大java高级网络编程_西工大16春《JAVA高级网络编程》平时作业

    西工大16春<JAVA高级网络编程>平时作业 7 o& [9 w  ^# D  Z一.单选题:[25道,总分:100分]5 z# ?* Z! M% M1 h4 R# n. D+ a ...

  9. java 报文长度计算_从TcpClient.GetStream()读取而不知道长度 - java

    我正在研究基于TCP的通信协议.我所知 有很多方法可以确定何时结束阅读. 在消息末尾关闭连接 将消息的长度放在数据本身之前 使用分隔符:一些在正常数据中永远不会出现的值(或者总会以某种方式转义) 通常 ...

最新文章

  1. 第二讲:Android系统构架分析和应用程序目录结构分析
  2. Android开发之详解五大布局
  3. sql 获取本周周一和周日
  4. 55. Jump Game
  5. 算法 深度优先,广度优先
  6. java标签组件命名_Java——标签组件:JLabel
  7. 画函数图形的C#程序(改进版) (转)
  8. php thikn_与ThinkPHP等框架结合
  9. 速读-高级技能二:并行输入训练
  10. 输入两棵二叉树A,B,判断B是不是A的子结构。(我们约定空树不是任意一个树的子结构)
  11. orCAD导入AD库 连不上线 更改元件库 出现Unable To Save Part
  12. 论文查重怎么看查重率
  13. 燃油经济性加速时间曲线matlab,汽车理论课后习题Matlab程序详解
  14. openwrt 使用自定义 DNS
  15. 多少卡路里,我应该吃是错误的
  16. UVA 1600 Patrol Robot 巡逻机器人(BFS)
  17. 指数用计算机怎么打,数学上的乘方指数在电脑上怎么打?问题是什么?
  18. 非精确一维线搜索(Armijo-Goldstein Rule 和 Wolfe-Powell Rule)
  19. 水平居中和垂直居中css_如何使用CSS将图像垂直和水平居中
  20. 《java入门第一季》之面向对象

热门文章

  1. 容斥原理和概率与数学期望
  2. 网易2019实习生招聘编程题集合 矩形重叠
  3. Quoted-printable编码的介绍和quopri库的使用
  4. 硬件入门之: 滞回比较器分析计算
  5. 图片太大,怎么压缩图片大小?
  6. 阿里P6员工炫耀:年薪60万,哪家外企接的住阿里的员工?
  7. 计算机的主板显卡内存条怎么查,电脑显卡在哪看?查看自己电脑显卡的显存等信息的方法...
  8. python递归 及 面向对象初识及编程思想
  9. 【十三】python面向对象之类和对象
  10. (附源码)springboot电商系统前端界面设计与浏览器兼容性研究 毕业设计 231058