【计算机毕设教程】基于springboot+vue的农产品溯源系统 | 仓库管理系统 | 进销存系统 ——后端篇

【计算机毕设教程】基于springboot+vue的农产品溯源系统 | 仓库管理系统 | 进销存系统 ——后端篇

系统演示

02.系统功能&业务演示

戳我查看

系统功能

在这里插入图片描述

  • 采购管理

  • 入库管理

  • 出库单管理

  • 出库管理

  • 溯源

  • 经销商管理

  • 农产品管理

  • 客户管理

  • 库存查询

  • 公告管理

  • 系统管理

业务流程

在这里插入图片描述

技术栈

技术名称所用框架
前端脚手架vue.js
请求框架axios
UI框架elementUi
图表可视化echarts
状态管理vueX
导航守卫vue-router
后端开发基础框架Springboot
文档接口swagger
ORMMybatis-plus
JWTjava-jwt
数据库Mysql

功能开发

首先运行毕设脚手架,脚手架获取方式见文末。

【登录页】

数据库设计
    以采购管理功能为例,每条数据记录需要一个主键,或许是单个主键,或许是复合主键;这里为单个int自增主键,起名id。

    单据编号为每张采购记录的单据编号,在实际业务中,可能会涉及到票据打印,因此以单据编号作为实际业务中的编号,起名bill_code。

    单据日期作为本单据的发生日期,这里使用timestamp时间戳字段,实际上用date更为合适,起名bill_date。

	客户名称采购对象的客户名称,这里使用varchar直接将客户名称冗余到该表,实际业务中会使用客户id进行关联更为合理,起名customer_name。

    产品名称为所采购的产品名称,类型为varchar,这里也是进行冗余,起名thing_name。

    产品单位为所采购产品的数量单位,不同的农产品可能采购方式以及单位不同,例如吨、千克、斤等,类型为varchar,起名unit。

    产品数量为本次所采购产品的数量,使用decimal类型进行小数存储,float以及double类型实际存储中会有数据缺失的风险,例如1.6存储为1.599999,起名quanlity。

    总价为本次采购农产品的总价格,默认为元,价格可能是小数,因此使用decimal类型,小数点两位进行存储,起名amount。

在这里插入图片描述

后端开发

  首先需要对常用接口进行实现,包括单增,单删,单改,单查,分页查,全部查。最后再添加自定义接口——生成单据编号。

controller

  首先新建Controller类,起名PurchaseController,标注基本的注解。

@RestController
@RequestMapping("/purchase")
public class PurchaseController {

    @Autowired
    private PurchaseService purchaseService;
}

  单增和单改直接调用service服务的saveOrUpdate接口,该接口源于mybatisPlus。

@PostMapping("/save")
    public Result save(@RequestBody Purchase purchase) {
        boolean b = purchaseService.saveOrUpdate(purchase);
        if (b) {
            return Result.success();
        } else {
            return Result.error();
        }
    }

  单删调用调用service服务的removeById接口,该接口源于mybatisPlus。

  @DeleteMapping("/deleteById/{id}")
    public Result deleteById(@PathVariable Integer id) {
        boolean b = purchaseService.removeById(id);
        if (b) {
            return Result.success();
        } else {
            return Result.error();
        }
    }

  单查调用调用service服务的ree.e.getById接口,该接口源于mybatisPlus。

  @GetMapping("/findById/{id}")
    public Result findById(@PathVariable("id") Integer id) {
        Purchase purchase = purchaseService.getById(id);
        if (null != purchase) {
            return Result.success(purchase);
        } else {
            return Result.error("500", "找不到文章信息");
        }
    }

  分页查调用调用service服务的page接口,该接口源于mybatisPlus。分页查询的条件需要自己向queryWrapper中添加,包括常用的like模糊查询,eq等于查询,orderByDesc排序等等。

 @GetMapping("/findPage")
    @NoAuth
    public Result findPage(@RequestParam Integer pageNum,
                           @RequestParam Integer pageSize,
                           @RequestParam(name = "billCode", defaultValue = "") String name) {
        Page<Purchase> page = new Page<>(pageNum, pageSize);
        QueryWrapper<Purchase> queryWrapper = new QueryWrapper<>();
        if (StringUtils.isNotBlank(name)) {
            queryWrapper.like("bill_code", name);
        }
        Page<Purchase> purchasePage = purchaseService.page(page, queryWrapper);
        return Result.success(purchasePage);
    }

  全部查调用调用service服务的list接口,该接口源于mybatisPlus。

  @GetMapping("/findAll")
    public Result findAll() {
        return Result.success(purchaseService.list());
    }

  最后,我们需要自定义生成单据编码接口,单据编码格式为CK+日期+三位随机数。一般每日的单据不会超过1000个,所以三位数基本够使用,这里没有做单据编码唯一检测,可以自己再加上。

   @GetMapping("/generateCode")
    public Result generateCode() {
//        生成今日日期,格式为yyyyMMdd
        int c =  (int) (Math.random() * 1000);
        LocalDate today = LocalDate.now();
        // 创建日期格式器
        DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyyMMdd");
        // 格式化日期
        String formattedDate = today.format(formatter);
        String code = "CK-" + formattedDate+"-"+String.format("%03d",c);
        return Result.success(code);
    }

  到此,controller层编写完毕。

service

  首先定义service接口。

public interface PurchaseService extends IService<Purchase> {

}

  接下来实现service接口,注意标注@Service注解。

  controller层所用的接口都是mybatis plus自带接口,因此service层无需再做其他开发。

@Service
public class PurchaseServiceImpl extends ServiceImpl<PurchaseMapper, Purchase> implements PurchaseService {

}

mapper

  mapper层也无需做额外的开发。

public interface PurchaseMapper extends BaseMapper<Purchase> {

}

xml

  xml只需注意namespace对应好即可。无需额外开发。

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.example.authority.mapper.PurchaseMapper">

</mapper>

脚手架获取

    一键三连获取进群密码。通过企鹅群,直接在群文件中获取即可。

在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值