ssm农产品仓库管理系统系统源码和论文

news2025/1/19 11:30:04

ssm农产品仓库管理系统系统源码和论文064

 开发工具:idea 
 数据库mysql5.7+
 数据库链接工具:navcat,小海豚等
  技术:ssm

  1. 选题的背景

中国是一个农产品生产的大国,可利用的农产品资源相对贫乏,传统的单纯依靠大量物质资源消耗和增加投入的发展模式已行不通了,而农产品信息技术在农产品上的普遍应用对农产品的发展将起到越来越重要的作用。我国蕴藏着丰富的科技信息资源,尤其是农产品信息资源,但是由于信息加工层次和水平比较低信息的附加值还没有得到充分的挖掘和利用,造成了农产品科技信息资源的严重浪费。因此如何有效地利用农产品信息资源是摆在我们面前的重要课题。

  1. 选题的意义

农产品仓库管理系统是通过入库业务,出库业务,入库搜索,出库搜索,物品管理等功能综合运用的管理系统。对库存业务的物流和成本管理全过程进行有效控制和跟踪,实现完善的仓库信息管理合理地利用农产品资源,使农产品的存储加工更加合理化、人性化,所以我们开发了该系统。开发此系统的目的对农产品信息进行规范化,连接数据库并在数据库中操纵数据,对数据进行添加、删除、修改等。随着信息技术的迅猛发展,越来越多的农产品管理企业开始摒弃传统的管理模式,采用高效的、可靠的计算机来进行企业内的各种业务管理以使企业内部管理更加清晰、 明了、高效、可靠。

  1. 研究现状

在研究过程中,目前国内及国外对于仓库的管理系统软件不在少数,但是具备智能化的就寥寥无几,有些仓库管理软件功能强大,但不实用;有些实用,但是软件界面不够友好;有些界面华丽,但是性能不够稳定。所以,我觉得我需要制作出一款,实用,界面友好,性能稳定,简单易于操作的农产品仓库管理系统。操作本系统的客户并不是专业的计算机从业人员,他们对于软件的初步认识就是,外观,所以,在jsp 技术上可以选择比较动态,美观大方的extjs 系统架构,该架构对于用户的提示友好,性能强大,动态性好,充分满足前台页面的实际需求。而一款软件有一件漂亮的外衣还是不够的,他还需要强大的内心,这个内心就是Java和数据库,他的骨架就是java,他的血液就是mysql。这样组成的软件才能成为一款优秀的农产品仓库管理系统。

  1. 研究内容

(1)了解当下市场中农产品存储的现状

分别通过网上问卷查找资料的形式或者实地考察访问的方式去了解现在的情况。

(2)网站设计模块的构想

针对所调查的情况,进行页面设计过程各个模块所需技术支持的研究。批量入库、批量出库、入库搜索、出库搜索、物品管理、用户注册、用户登录、用户留言、用户入库、用户出库等等。

(3)网站的实现

运用Java和MySQL等技术搭建完成本次的农产品仓库管理系统。农产品仓库管理系统是一个专门用来管理包括粮食、水果、蔬菜、 肉类、蛋类五种农产品的系统。该软件为“农产品仓库管理系统”此软件的开发是针对某些企业及公司仓库货物管理的繁琐操作。此系统按照不同的角色,系统可以分为两大部分用户和管理员。用户,该操作要求用户名和对应的密码才能进入系统执行相应的操作。管理员,该操作要求管理员名和对应的密码才能进入系统执行相应权限的操作。

package com.controller;


import java.text.SimpleDateFormat;
import com.alibaba.fastjson.JSONObject;
import java.util.*;

import com.entity.*;
import com.service.*;
import org.springframework.beans.BeanUtils;
import javax.servlet.http.HttpServletRequest;
import org.springframework.web.context.ContextLoader;
import javax.servlet.ServletContext;

import com.utils.StringUtil;
import java.lang.reflect.InvocationTargetException;

import org.apache.commons.lang3.StringUtils;
import com.annotation.IgnoreAuth;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.*;
import com.baomidou.mybatisplus.mapper.EntityWrapper;
import com.baomidou.mybatisplus.mapper.Wrapper;

import com.entity.view.EntrustInOutOrderView;
import com.utils.PageUtils;
import com.utils.R;

/**
 * 委托出入库订单
 * 后端接口
 * @author
 * @email
 * @date 2021-03-10
*/
@RestController
@Controller
@RequestMapping("/entrustInOutOrder")
public class EntrustInOutOrderController {
    private static final Logger logger = LoggerFactory.getLogger(EntrustInOutOrderController.class);

    @Autowired
    private EntrustInOutOrderService entrustInOutOrderService;


    @Autowired
    private TokenService tokenService;
    @Autowired
    private DictionaryService dictionaryService;


    //级联表service
    @Autowired
    private YonghuService yonghuService;
    @Autowired
    private EntrustInOutOrderListService entrustInOutOrderListService;
    @Autowired
    private GoodsService goodsService;


    /**
    * 后端列表
    */
    @RequestMapping("/page")
    public R page(@RequestParam Map<String, Object> params, HttpServletRequest request){
        logger.debug("page方法:,,Controller:{},,params:{}",this.getClass().getName(),JSONObject.toJSONString(params));
        String role = String.valueOf(request.getSession().getAttribute("role"));
        if(StringUtil.isNotEmpty(role) && "用户".equals(role)){
            params.put("yonghuId",request.getSession().getAttribute("userId"));
        }
        PageUtils page = entrustInOutOrderService.queryPage(params);

        //字典表数据转换
        List<EntrustInOutOrderView> list =(List<EntrustInOutOrderView>)page.getList();
        for(EntrustInOutOrderView c:list){
            //修改对应字典表字段
            dictionaryService.dictionaryConvert(c);
        }
        return R.ok().put("data", page);
    }
    /**
    * 后端详情
    */
    @RequestMapping("/info/{id}")
    public R info(@PathVariable("id") Long id){
        logger.debug("info方法:,,Controller:{},,id:{}",this.getClass().getName(),id);
        EntrustInOutOrderEntity entrustInOutOrder = entrustInOutOrderService.selectById(id);
        if(entrustInOutOrder !=null){
            //entity转view
            EntrustInOutOrderView view = new EntrustInOutOrderView();
            BeanUtils.copyProperties( entrustInOutOrder , view );//把实体数据重构到view中

            //级联表
            YonghuEntity yonghu = yonghuService.selectById(entrustInOutOrder.getYonghuId());
            if(yonghu != null){
                BeanUtils.copyProperties( yonghu , view ,new String[]{ "id", "createDate"});//把级联的数据添加到view中,并排除id和创建时间字段
                view.setYonghuId(yonghu.getId());
            }
            //修改对应字典表字段
            dictionaryService.dictionaryConvert(view);
            return R.ok().put("data", view);
        }else {
            return R.error(511,"查不到数据");
        }

    }

    /**
    * 后端保存
    */
    @RequestMapping("/save")
    public R save(@RequestBody EntrustInOutOrderEntity entrustInOutOrder, HttpServletRequest request){
        logger.debug("save方法:,,Controller:{},,entrustInOutOrder:{}",this.getClass().getName(),entrustInOutOrder.toString());
        Wrapper<EntrustInOutOrderEntity> queryWrapper = new EntityWrapper<EntrustInOutOrderEntity>()
            .eq("yonghu_id", entrustInOutOrder.getYonghuId())
            .eq("order_name", entrustInOutOrder.getOrderName())
            .eq("order_types", entrustInOutOrder.getOrderTypes())
            .eq("caozuo_name", entrustInOutOrder.getCaozuoName())
            .eq("caozuo_table", entrustInOutOrder.getCaozuoTable())
            .eq("caozuo_types", entrustInOutOrder.getCaozuoTypes())
            ;
        logger.info("sql语句:"+queryWrapper.getSqlSegment());
        EntrustInOutOrderEntity entrustInOutOrderEntity = entrustInOutOrderService.selectOne(queryWrapper);
        if(entrustInOutOrderEntity==null){
            entrustInOutOrder.setInsertTime(new Date());
            entrustInOutOrder.setCreateTime(new Date());
        //  String role = String.valueOf(request.getSession().getAttribute("role"));
        //  if("".equals(role)){
        //      entrustInOutOrder.set
        //  }
            entrustInOutOrderService.insert(entrustInOutOrder);
            return R.ok();
        }else {
            return R.error(511,"表中有相同数据");
        }
    }

    /**
    * 修改
    */
    @RequestMapping("/update")
    public R update(@RequestBody EntrustInOutOrderEntity entrustInOutOrder, HttpServletRequest request){
        logger.debug("update方法:,,Controller:{},,entrustInOutOrder:{}",this.getClass().getName(),entrustInOutOrder.toString());
        //根据字段查询是否有相同数据
        Wrapper<EntrustInOutOrderEntity> queryWrapper = new EntityWrapper<EntrustInOutOrderEntity>()
            .notIn("id",entrustInOutOrder.getId())
            .eq("yonghu_id", entrustInOutOrder.getYonghuId())
            .eq("order_name", entrustInOutOrder.getOrderName())
            .eq("order_types", entrustInOutOrder.getOrderTypes())
            .eq("caozuo_name", entrustInOutOrder.getCaozuoName())
            .eq("caozuo_table", entrustInOutOrder.getCaozuoTable())
            .eq("caozuo_types", entrustInOutOrder.getCaozuoTypes())
            ;
        logger.info("sql语句:"+queryWrapper.getSqlSegment());
        EntrustInOutOrderEntity entrustInOutOrderEntity = entrustInOutOrderService.selectOne(queryWrapper);
                entrustInOutOrder.setUpdateTime(new Date());
        if(entrustInOutOrderEntity==null){
            //  String role = String.valueOf(request.getSession().getAttribute("role"));
            //  if("".equals(role)){
            //      entrustInOutOrder.set
            //  }
            entrustInOutOrderService.updateById(entrustInOutOrder);//根据id更新
            return R.ok();
        }else {
            return R.error(511,"表中有相同数据");
        }
    }


    /**
     * 新增 委托出库入库
     */
    @RequestMapping("/inOutOrder")
    public R inOutOrder(@RequestBody  Map<String, Object> params,HttpServletRequest request){
        logger.debug("inOutOrder方法:,,Controller:{},,params:{}",this.getClass().getName(),JSONObject.toJSONString(params));

        String role = String.valueOf(request.getSession().getAttribute("role"));
        if("用户".equals(role)){
            Map<String, Integer> map = (Map<String, Integer>) params.get("map");
            String orderName = String.valueOf(params.get("orderName"));
    //        InOutOrderEntity one = inOutOrderService.selectOne(new EntityWrapper<InOutOrderEntity>().eq("order_name", orderName));
            EntrustInOutOrderEntity one = entrustInOutOrderService.selectOne(new EntityWrapper<EntrustInOutOrderEntity>().eq("order_name", orderName));
            if(one != null){
                return R.error(orderName+"的委托订单名已经被使用");
            }

            Set<String> ids = map.keySet();
            Date date = new Date();

            //新增订单
            EntrustInOutOrderEntity entrustInOutOrderEntity = new EntrustInOutOrderEntity();
            entrustInOutOrderEntity.setYonghuId(Integer.parseInt(String.valueOf(request.getSession().getAttribute("userId"))));
            entrustInOutOrderEntity.setOrderName(orderName);
            entrustInOutOrderEntity.setOrderTypes(Integer.parseInt(String.valueOf(params.get("orderType"))));
            entrustInOutOrderEntity.setCaozuoTypes(2);//操作类型为未操作
            entrustInOutOrderEntity.setInsertTime(new Date());
            entrustInOutOrderEntity.setCreateTime(date);
            entrustInOutOrderService.insert(entrustInOutOrderEntity);


            if(entrustInOutOrderEntity.getId()!=null){
                //新增订单详情
                List<EntrustInOutOrderListEntity> inOutOrderListEntityList = new ArrayList<>();
                for(String i:ids){
                    EntrustInOutOrderListEntity entrustInOutOrderListEntity = new EntrustInOutOrderListEntity();
                    entrustInOutOrderListEntity.setEntrustInOutOrderId(entrustInOutOrderEntity.getId());
                    entrustInOutOrderListEntity.setGoodsId(Integer.valueOf(i));
                    entrustInOutOrderListEntity.setOrderNumber(Integer.valueOf(map.get(i)));
                    entrustInOutOrderListEntity.setEntrustTypes(1);//默认状态为不同意
                    entrustInOutOrderListEntity.setCreateTime(date);
                    inOutOrderListEntityList.add(entrustInOutOrderListEntity);
                }
                if(inOutOrderListEntityList != null && inOutOrderListEntityList.size()>0){
                    entrustInOutOrderListService.insertBatch(inOutOrderListEntityList);
                    return R.ok();
                }
            }else{
                return R.error("新增订单失败");
            }
            return R.ok();
        }else{
          return R.error("您没有委托权限");
        }
    }




    /**
     * 对委托的出入库订单进行审核
     */
    @RequestMapping("/examineInOutOrder")
    public R examineInOutOrder(@RequestBody  Map<String, Object> params,HttpServletRequest request){
        logger.debug("examineInOutOrder方法:,,Controller:{},,params:{}",this.getClass().getName(),JSONObject.toJSONString(params));

        String role = String.valueOf(request.getSession().getAttribute("role"));
        if("管理员".equals(role)){
            Date date = new Date();
            List<Integer> ids = (List<Integer>) params.get("list");//list为订单详情的id列表
            String id = String.valueOf(params.get("id"));//订单id的
            if(ids == null || ids.size() == 0){
                //如果全部都是不同意,会进入这里,直接修改订单状态为已操作就好了
                EntrustInOutOrderEntity order = new EntrustInOutOrderEntity();
                order.setId(Integer.valueOf(id));
                order.setCaozuoTypes(1);//设置操作状态为已操作
                order.setCaozuoName(String.valueOf(request.getSession().getAttribute("username")));//设置操作人名字
                order.setCaozuoTable(String.valueOf(request.getSession().getAttribute("tableName")));//设置操作人表名
                order.setUpdateTime(date);
                entrustInOutOrderService.updateById(order);
                return R.ok();
            }
            //订单详情
            List<EntrustInOutOrderListEntity> orderList = entrustInOutOrderListService.selectBatchIds(ids);//当天订单列表详情
            EntrustInOutOrderEntity entrustInOutOrderEntity = entrustInOutOrderService.selectById(id);//当前订单信息
            Map<Integer, Integer> map = new HashMap<>();
            for(EntrustInOutOrderListEntity o:orderList){
                o.setEntrustTypes(2);//设置订单为同意
                map.put(o.getGoodsId(), o.getOrderNumber());
            }
            if(entrustInOutOrderEntity != null){

                Set<Integer> goodIds = map.keySet();
                List<GoodsEntity> list = goodsService.selectBatchIds(goodIds);
                Integer orderTypes = entrustInOutOrderEntity.getOrderTypes();
                if(orderTypes == null){
                    return R.error(entrustInOutOrderEntity.getOrderName()+"的订单的委托类型有问题");
                }else if(orderTypes ==1 || orderTypes ==2){
                    for(GoodsEntity g:list){
                        if(orderTypes ==1 ){
                            //出库
                            int i = g.getGoodsNumber() - map.get(g.getId());
                            if(i<0){
                                Integer flag = g.getFlag();
                                String a="";
                                if(flag == 1){
                                    a="在使用状态";
                                }else{
                                    a="已经删除";
                                }
                                return R.error(g.getGoodsName()+"的商品出库后数量为负,请重新处理,商品是"+a);
                            }else{
                                g.setGoodsNumber(i);
                            }
                        }else if(orderTypes ==2){
                            //入库
                            g.setGoodsNumber(g.getGoodsNumber()+map.get(g.getId()));
                        }
                    }
                }else{
                    return R.error(entrustInOutOrderEntity.getOrderName()+"的订单的委托类型是"+orderTypes+"有问题");
                }

                //更新订单详情表
                entrustInOutOrderListService.updateBatchById(orderList);
                //更新订单表
                entrustInOutOrderEntity.setCaozuoTypes(1);//设置操作状态为已操作
                entrustInOutOrderEntity.setCaozuoName(String.valueOf(request.getSession().getAttribute("username")));//设置操作人名字
                entrustInOutOrderEntity.setCaozuoTable(String.valueOf(request.getSession().getAttribute("tableName")));//设置操作人表名
                entrustInOutOrderEntity.setUpdateTime(date);
                entrustInOutOrderService.updateById(entrustInOutOrderEntity);
                //修改物资的数量
                goodsService.updateBatchById(list);

            }else{
                return R.error("订单不存在");
            }
            return R.ok();
        }else{
            return R.error("您没有处理委托的权限");
        }
    }



    /**
    * 删除
    */
    @RequestMapping("/delete")
    public R delete(@RequestBody Integer[] ids){
        logger.debug("delete:,,Controller:{},,ids:{}",this.getClass().getName(),ids.toString());

        List<EntrustInOutOrderEntity> list = entrustInOutOrderService.selectList(new EntityWrapper<EntrustInOutOrderEntity>().in("id", ids));
        entrustInOutOrderService.deleteBatchIds(Arrays.asList(ids));
        List<Integer> entrustInOutOrderIds = new ArrayList<>();
        for(EntrustInOutOrderEntity order:list){
            entrustInOutOrderIds.add(order.getId());
        }
        if(entrustInOutOrderIds != null && entrustInOutOrderIds.size()>0){
            entrustInOutOrderListService.delete(new EntityWrapper<EntrustInOutOrderListEntity>().in("entrust_in_out_order_id", entrustInOutOrderIds));
        }
        return R.ok();
    }
}

 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/925935.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

k3s or RKE2 helm安装报错dial tcp 127.0.0.1:8080: connect: connection refused

1.报错&#xff1a; Error: INSTALLATION FAILED: Kubernetes cluster unreachable: Get "http://127.0.0.1:8080/version": dial tcp 127.0.0.1:8080: connect: connection refused 2.问题原因&#xff1a; 1.因为helm默认使用k8s的配置文件&#xff0c;默…

华为云服务器如何安装多个数据库

由于我的项目对数据库版本有限制&#xff0c;需要在先前安装5.7的基础上再安装一个8.0.28版本的数据库。 安装5.7版本数据库的过程&#xff1a;华为云服务器部署mysql_瓜是西瓜的瓜的博客-CSDN博客 1、安装前准备 服务器版本&#xff1a;CentOS 7 将/etc/selinux/config里的…

最新Rimini主题 1.3.0 资源付费WordPress主题下载

RiMini主题介绍&#xff0c;支持微信&#xff0c;支付宝官方支付接口&#xff0c;个人PAYJS&#xff0c;虎皮椒&#xff0c;码支付&#xff0c;免登录购买&#xff0c;会员中心&#xff0c;支付齐全&#xff0c;体验超速&#xff0c;简单粗暴&#xff0c;支付接口齐全&#xff…

【日常积累】Linux下ftp服务安装

概述 FTP是一种在互联网中进行文件传输的协议&#xff0c;基于客户端/服务器模式&#xff0c;默认使用20、21号端口&#xff0c;其中端口20用于进行数据传输&#xff0c;端口21用于接受客户端发出的相关FTP命令与参数。FTP服务器普遍部署于内网中&#xff0c;具有容易搭建、方…

[Go版]算法通关村第十三关白银——数字数学问题之数组实现加法、幂运算

目录 数组实现加法专题题目&#xff1a;数组实现整数加法思路分析&#xff1a;数组末尾开始&#xff0c;逐个元素1&#xff0c;10就进位&#xff0c;!10就退出复杂度&#xff1a;时间复杂度 O ( n ) O(n) O(n)、空间复杂度 O ( n ) O(n) O(n)Go代码 题目&#xff1a;字符串加法…

Navicat导出Postgres表结构并在新环境导入

0、背景及环境 背景 工程升级&#xff0c;新增了一些表。需要把这些表在生产环境中创建。故此写一下操作示例笔记。 工具 Navicat、postgres数据库 1、导出 1.1、打开想要导出表结构的数据库&#xff0c;找到表 1.2、右键目标表选择导出类型 Structure Only 只导出表结构…

c语言调用mciSendString播放音乐

如下所示&#xff0c;这是一个使用c语言调用系统方法mciSendString()&#xff0c;让系统播放音乐的示例&#xff1a; baihuaxiang 代码&#xff1a; #include <graphics.h> #include <Windows.h> #include <mmsystem.h>#pragma comment(lib,"WINMM.LIB…

【C++】抽象类

2023年8月25日&#xff0c;周五上午 目录 声明抽象类 抽象类的特点 举例说明 声明抽象类 要在C中声明一个抽象类&#xff0c;要求类中至少有一个纯虚函数。 在C中&#xff0c;一个类如果包含至少一个纯虚函数&#xff0c;那么这个类就被称为抽象类。 总结起来&#xff0c…

天眼查接口 查询企业信息API 企查查接口

item_get-获得tyc详情 tyc.item_get 公共参数 请求地址: https://api-gw.cn/tyc/item_get 名称类型必须描述keyString是调用key&#xff08;必须以GET方式拼接在URL中&#xff09;secretString是调用密钥api_nameString是API接口名称&#xff08;包括在请求地址中&#xff0…

板卡设计+硬件每日学习十个知识点(44)23.8.24 (检测单元设计,接口部分设计,板卡电源输入设计,电源检测电路)

文章目录 1.检测单元介绍&#xff08;使用GD32单片机&#xff09;2.GD32的最小系统板3.GD32的温度监测4.GD32的电压监测和电流监测5.GD32的布线6.接口部分设计7.板卡电源输入设计8.电源检测电路 1.检测单元介绍&#xff08;使用GD32单片机&#xff09; 答&#xff1a; 首先要为…

告别gazebo开启长时间等待 设置gazebo打开不再联网找模型

学过ros的对gazebo仿真软件应该都不会陌生&#xff0c;但是有时启动真的很烦人&#xff0c;经常卡在这个地方很长时间&#xff0c;查阅资料 gazebo软件开启的时候会自动从国外官网下载模型&#xff0c;因此这个过程比较漫长&#xff0c;原因是网站在国外&#xff0c;下载不顺畅…

基于大核注意力的高效鲁棒脑损伤分割

文章目录 Large-kernel Attention for Efficient and Robust Brain Lesion Segmentation摘要本文方法实验结果 Large-kernel Attention for Efficient and Robust Brain Lesion Segmentation 摘要 ViT是用于医学图像分割等视觉任务的有效深度学习模型。然而&#xff0c;与卷积…

slowhttptest

压力测试工具 kail-linux安装 apt-get install slowhttptest slowhttptest -c 1000 -H -g -o my_header_stats -i 10 -r 200 -t GET -u "http://192.168.3.239:8889" -x 24 -p 3 SlowRead模式 slowhttptest -c 8000 -X -r 200 -w 512 -y 1024 -n 5 -z 32 -k 3 -u …

用于毒情监测和溯源的自动采样器是哪种

最新多领域采样器的功能升级特点&#xff1a; 1.手机APP 实时观测采样状况、采样量&#xff1b; 2.配置高可靠性蠕动泵&#xff0c;采样过程运行平稳精准&#xff0c;待采集水样全程无与外界接触&#xff0c;防止水样产生污染、破坏&#xff1b; 3.可设置全自动样品采集&#x…

Windows逆向项目-LoadPE

Windows逆向项目-LoadPE 这是PE阶段时&#xff0c;老师布置的作业&#xff1a;[ 写一个LordPE ]&#xff1b;木马&#xff0c;免杀&#xff0c;病毒等等都需要对PE结构有足够的了解PE结构详细图&#xff1a; 项目介绍&#xff1a; 项目使用 C &#xff0c; MFC 开发 功能&am…

JAVA 单线程、多线程测试百度网址

JAVA 单线程、多线程访问百度 单线程示例代码多线程示例代码 单线程示例代码 package org.apache.jmeter.functions; import java.io.BufferedReader; import java.io.InputStreamReader; import java.io.OutputStream; import java.net.HttpURLConnection; import java.net.U…

YOLO目标检测——野生猫科动物图像数据集(虎豹狮等)下载分享

野生猫科动物图像数据集是一个包含了各种野生猫科动物图像样本的数据集&#xff0c;例如狮子、老虎、豹子、猎豹、美洲豹等。这些数据集通常用于研究和分析野生猫科动物的图像识别、分类、行为分析等问题。 数据集点击下载&#xff1a;YOLO野生猫科动物图像数据集&#xff08;虎…

无涯教程-Python - 多线程

运行多个线程类似于同时运行多个不同的程序&#xff0c;但具有以下优点- 一个进程中的多个线程与主线程共享相同的数据空间&#xff0c;因此比起单进程&#xff0c;它们可以更轻松地共享信息或彼此通信。有时称为轻量级进程的线程&#xff0c;它们不需要太多的内存开销。 开始…

【TI毫米波雷达笔记】CCS雷达工程内存RAM指定(DATA_SECTION,以IWR6843AOP为例)

【TI毫米波雷达笔记】CCS雷达工程内存RAM指定&#xff08;DATA_SECTION&#xff0c;以IWR6843AOP为例&#xff09; 工程建立好以后会有一个cmd文件 此文件描述的是内存map /*----------------------------------------------------------------------------*/ /* r4f_linker…

FMT正式版,发布倒计时!

FMT&#xff08;全称Firmament Autopilot&#xff09;是首个基于模型设计的开源自驾仪系统。自2016年立项以来的近七年的时间里&#xff0c;FMT持续完善&#xff0c;经过了数千次Commit。 今天&#xff0c;我们带着骄傲和喜悦跟大家宣布&#xff0c;FMT正式版v1.0.0马上就要发…