💖💖作者:计算机编程小咖
💙💙个人简介:曾长期从事计算机专业培训教学,本人也热爱上课教学,语言擅长Java、微信小程序、Python、Golang、安卓Android等,开发项目包括大数据、深度学习、网站、小程序、安卓、算法。平常会做一些项目定制化开发、代码讲解、答辩教学、文档编写、也懂一些降重方面的技巧。平常喜欢分享一些自己开发中遇到的问题的解决办法,也喜欢交流技术,大家有技术代码这一块的问题可以问我!
💛💛想说的话:感谢大家的关注与支持!
💜💜
网站实战项目
安卓/小程序实战项目
大数据实战项目
深度学习实战项目
目录
- 食品供应链系统介绍
- 食品供应链系统演示视频
- 食品供应链系统演示图片
- 食品供应链系统代码展示
- 食品供应链系统文档展示
食品供应链系统介绍
《基于spring boot的食品供应链系统》主要围绕食品从采购、入库、生产、质检到销售发货的日常流转来设计,给采购员、销售员、工作人员、供应商和客户等角色提供分角色的信息管理入口。系统首页用来汇总常用操作和关键提醒,个人中心与修改密码负责账号维护,系统日志记录关键操作轨迹。基础数据部分包含物品分类和物品信息,采购环节包含采购订单和采购合同,销售环节包含销售信息和发货信息,库存环节包含库存信息、入库信息和出库信息,生产环节包含生产信息,质量环节包含质量信息。技术上提供Java和Python两个版本,Java版后端采用Spring Boot、SpringMVC和MyBatis,Python版后端采用Django,前端使用Vue、ElementUI和HTML,数据库使用MySQL,整体是B/S架构,可在IDEA或PyCharm中开发。系统重点不是堆很多花哨功能,而是把食品供应链中分散的订单、合同、库存、生产和质量信息串起来,方便大四学生理解一个完整毕设项目的业务闭环、角色划分和数据处理方式,也方便后续在原有功能上继续补充统计查询和扩展模块。
食品供应链系统演示视频
点击观看项目演示视频
食品供应链系统演示图片
食品供应链系统代码展示
SparkSessionspark=SparkSession.builder().appName("foodSupplyChainSystem").master("local[*]").getOrCreate();publicMap<String,Object>createPurchaseOrder(PurchaseOrderDTOdto,Stringoperator){Map<String,Object>result=newHashMap<>();if(dto.getSupplierId()==null||dto.getItemId()==null){result.put("code",400);result.put("msg","供应商或物品不能为空");returnresult;}if(dto.getQuantity()==null||dto.getQuantity()<=0){result.put("code",400);result.put("msg","采购数量必须大于0");returnresult;}if(dto.getPrice()==null||dto.getPrice().compareTo(BigDecimal.ZERO)<=0){result.put("code",400);result.put("msg","采购单价必须大于0");returnresult;}StringorderNo="PO"+System.currentTimeMillis();PurchaseOrderorder=newPurchaseOrder();order.setOrderNo(orderNo);order.setSupplierId(dto.getSupplierId());order.setItemId(dto.getItemId());order.setQuantity(dto.getQuantity());order.setPrice(dto.getPrice());order.setStatus("待审核");order.setCreateBy(operator);order.setCreateTime(newDate());purchaseOrderMapper.insert(order);PurchaseContractcontract=newPurchaseContract();contract.setOrderNo(orderNo);contract.setSupplierId(dto.getSupplierId());contract.setContractContent(dto.getContractContent());contract.setStatus("已生成");contract.setCreateTime(newDate());purchaseContractMapper.insert(contract);SystemLoglog=newSystemLog();log.setOperator(operator);log.setAction("新增采购订单");log.setDetail("订单号:"+orderNo);log.setCreateTime(newDate());systemLogMapper.insert(log);result.put("code",200);result.put("orderNo",orderNo);result.put("msg","采购订单和合同已保存");returnresult;}publicMap<String,Object>stockInAndOut(StockDTOdto,Stringoperator){Map<String,Object>result=newHashMap<>();if(dto.getItemId()==null||dto.getQuantity()==null||dto.getQuantity()<=0){result.put("code",400);result.put("msg","物品和数量必须正确");returnresult;}Inventoryinventory=inventoryMapper.selectByItemId(dto.getItemId());if("IN".equals(dto.getType())){if(inventory==null){inventory=newInventory();inventory.setItemId(dto.getItemId());inventory.setQuantity(dto.getQuantity());inventory.setUpdateTime(newDate());inventoryMapper.insert(inventory);}else{inventory.setQuantity(inventory.getQuantity()+dto.getQuantity());inventory.setUpdateTime(newDate());inventoryMapper.updateById(inventory);}InboundInfoinbound=newInboundInfo();inbound.setItemId(dto.getItemId());inbound.setQuantity(dto.getQuantity());inbound.setOperator(operator);inbound.setCreateTime(newDate());inboundInfoMapper.insert(inbound);}elseif("OUT".equals(dto.getType())){if(inventory==null||inventory.getQuantity()<dto.getQuantity()){result.put("code",400);result.put("msg","库存不足,不能出库");returnresult;}inventory.setQuantity(inventory.getQuantity()-dto.getQuantity());inventory.setUpdateTime(newDate());inventoryMapper.updateById(inventory);OutboundInfooutbound=newOutboundInfo();outbound.setItemId(dto.getItemId());outbound.setQuantity(dto.getQuantity());outbound.setOperator(operator);outbound.setCreateTime(newDate());outboundInfoMapper.insert(outbound);}else{result.put("code",400);result.put("msg","出入库类型不支持");returnresult;}SystemLoglog=newSystemLog();log.setOperator(operator);log.setAction("库存出入库");log.setDetail("物品:"+dto.getItemId()+",数量:"+dto.getQuantity());log.setCreateTime(newDate());systemLogMapper.insert(log);result.put("code",200);result.put("msg","库存和出入库记录已更新");returnresult;}publicMap<String,Object>saveQualityAndTrace(QualityDTOdto,Stringoperator){Map<String,Object>result=newHashMap<>();if(dto.getProductionId()==null||dto.getCheckResult()==null){result.put("code",400);result.put("msg","生产批次和质检结果不能为空");returnresult;}ProductionInfoproduction=productionInfoMapper.selectById(dto.getProductionId());if(production==null){result.put("code",400);result.put("msg","生产信息不存在");returnresult;}QualityInfoquality=newQualityInfo();quality.setProductionId(dto.getProductionId());quality.setItemId(production.getItemId());quality.setCheckResult(dto.getCheckResult());quality.setChecker(operator);quality.setCheckTime(newDate());quality.setRemark(dto.getRemark());qualityInfoMapper.insert(quality);if("合格".equals(dto.getCheckResult())){production.setStatus("已质检");}else{production.setStatus("待返工");}productionInfoMapper.updateById(production);SystemLoglog=newSystemLog();log.setOperator(operator);log.setAction("质量信息录入");log.setDetail("生产批次:"+dto.getProductionId()+",结果:"+dto.getCheckResult());log.setCreateTime(newDate());systemLogMapper.insert(log);Dataset<Row>qualityDf=spark.read().format("jdbc").option("url","jdbc:mysql://localhost:3306/food_supply").option("dbtable","quality_info").option("user","root").option("password","123456").load();qualityDf.createOrReplaceTempView("quality_info");longpassCount=spark.sql("select count(*) from quality_info where check_result='合格'").head().getLong(0);result.put("code",200);result.put("passCount",passCount);result.put("msg","质量信息已保存并完成合格数统计");returnresult;}食品供应链系统文档展示
💖💖作者:计算机编程小咖
💙💙个人简介:曾长期从事计算机专业培训教学,本人也热爱上课教学,语言擅长Java、微信小程序、Python、Golang、安卓Android等,开发项目包括大数据、深度学习、网站、小程序、安卓、算法。平常会做一些项目定制化开发、代码讲解、答辩教学、文档编写、也懂一些降重方面的技巧。平常喜欢分享一些自己开发中遇到的问题的解决办法,也喜欢交流技术,大家有技术代码这一块的问题可以问我!
💛💛想说的话:感谢大家的关注与支持!
💜💜
网站实战项目
安卓/小程序实战项目
大数据实战项目
深度学习实战项目