当前位置: 首页 > news >正文

微信支付开发-程序开发

一、操作流程图

二、后端代码实现

        1、题库实现

                a、列表、所有、详情、保存、启禁用、导入答题

                b、获取奖品信息、保存奖品信息、

class Question extends Base
{// 列表public function getList(){$param = $this->request->param();$where = [];if(!empty($param['title']))$where[] = ['title','like','%'.$param['title'].'%'];if(!empty($param['id']))$where[] = ['id','=',$param['id']];if(!empty($param['status']))$where[] = ['status','=',$param['status'] == 1 ? 1 : 0];$resList = AQBModel::getList($where, 'id,title,option_number,status,create_time,update_time',[$param['currentPage'], $param['currentSize']]);$list  =  $resList['info'];$res['list'] = $list;$res['meat'] = $resList['page'];return success($res);}// 所有public function getAll(){$param = $this->request->param();$where = [];if(!empty($param['title']))$where[] = ['title','like','%'.$param['title'].'%'];$list = AQBModel::getAll($where, 'id,title','id DESC');return success($list);}// 详情public function getInfo(){$id = $this->request->param('id',0);if(empty($id)) return error('主键不能为空');$data = AQBModel::dataFind([['id','=',$id]],'id,title,status',true);if(!empty($data))$data['quest_opt'] = AQOModel::getAll(['bank_id' =>  $id],'content,is_correct','id DESC');return success($data);}// 保存public function saveInfo(){$param = $this->request->param();$validateBank = new \app\validate\anxun\admin\activity\QuestionBank;if (!$validateBank->check($param)) return error($validateBank->getError());//验证参数$validateOpt = new \app\validate\anxun\admin\activity\QuestionOpt;$dataOpt = [];foreach($param['quest_opt'] as $k => $v){$dataOpt[$k]['content'] = $v['content'];$dataOpt[$k]['is_correct'] = $v['is_correct'];if (!$validateOpt->check($dataOpt[$k])) return error($validateOpt->getError());//验证参数$dataOpt[$k]['opt'] = question_bank($k);}if(count($dataOpt) < 2) return error('题目选项最低两个选项');//验证参数$where = empty($param['id']) ? [] : ['id' => $param['id']];$data['title'] = $param['title'];$data['status'] = $param['status'];$data['update_time'] = date('Y-m-d H:i:s',time());$data['option_number'] = count($dataOpt);if(empty($param['id']))$data['create_time'] = date('Y-m-d H:i:s',time());$bankId = AQBModel::save($data,$where);if($param['id'] > 0)AQOModel::dataDetele(['bank_id' => $bankId]);foreach ($dataOpt as $ks => $vs){$dataOpt[$ks]['bank_id'] = $bankId;}AQOModel::dataAllSave($dataOpt);return success([],"操作成功");}// 启禁用public function saveStatus(){$param = $this->request->param();AQBModel::save(['status' => $param['status']],[['id','in',$param['id']]]);return success([],"操作成功");}//获取奖品信息public function getPrizeInfo(){$data = AQPModel::dataFind(['id' => 1],'prize_name,prize_price,postage_price,prize_picture,status',true);return success($data);}//保存产品信息public function savePrizeInfo(){$param = $this->request->param();$validateBank = new \app\validate\anxun\admin\activity\QuestionPrize;if (!$validateBank->check($param)) return error($validateBank->getError());//验证参数$data['prize_name'] = $param['prize_name'];$data['prize_price'] = $param['prize_price'];$data['postage_price'] = $param['postage_price'];$data['prize_picture'] = $param['prize_picture'];$data['status'] = $param['status'];$data['update_time'] = date('Y-m-d H:i:s',time());AQPModel::save($data,['id' => 1]);return success([],"操作成功");}//导入答题public function saveImportInfo(){$file = $this->request->file();$savename = Filesystem::disk('public')->putFile('topic',$file['file'],'md5');$reader = IOFactory::createReader('Xlsx');$reader->setReadDataOnly(true);$filePath = app()->getRootPath().'public/storage/'.$savename;$spreadsheet=$reader->load($filePath);//载入文件$worksheet=$spreadsheet->getActiveSheet();$highestRow=$worksheet->getHighestRow();//总行数for($row=2;$row<=$highestRow;$row++){$questionOpt[$row] = array_filter(explode('|', $worksheet->getCellByColumnAndRow(2, $row)->getValue()), 'remove_empty_values', ARRAY_FILTER_USE_BOTH);$questionOpt[$row] = remove_array_values($questionOpt[$row]);if(count($questionOpt[$row]) < 2)continue;$title[$row] = trim($worksheet->getCellByColumnAndRow(1, $row)->getValue());$bankId[$row] = AQBModel::dataFind([['title','=',$title[$row]]],'id',false);if(empty($bankId[$row])){//添加题目$data[$row]['title'] = $title[$row];$data[$row]['status'] = 1;$data[$row]['option_number'] = count($questionOpt[$row]);$data[$row]['create_time'] = date('Y-m-d H:i:s', time());$data[$row]['update_time'] = date('Y-m-d H:i:s', time());$bankId[$row] = AQBModel::save($data[$row]);$correct[$row] = array_filter(explode(',', $worksheet->getCellByColumnAndRow(3, $row)->getValue()), 'remove_empty_values', ARRAY_FILTER_USE_BOTH);//添加选项foreach($questionOpt[$row] as $k => $v) {$da[$row.$k]['bank_id'] = $bankId[$row];$da[$row.$k]['opt'] = question_bank($k);$da[$row.$k]['content'] = trim($v);foreach ($correct[$row] as $ko => $vo) {$da[$row.$k]['is_correct'] = $da[$row.$k]['opt'] == trim($vo) ? 1 : 0;}AQOModel::save($da[$row.$k]);}}}@unlink($filePath);return success([],'导入成功');}
}

        2、机器人实现

                a、列表、详情、保存、删除

class DigitizedHuman extends Base
{//列表public function getList(){$param = $this->request->param();$where = [];if(!empty($param['digitized_human_name']))$where[] = ['digitized_human_name','like','%'.$param['digitized_human_name'].'%'];if(!empty($param['digitized_human_id']))$where[] = ['digitized_human_id','=',$param['digitized_human_id']];if(!empty($param['area_code'])){if(count($param['area_code']) >= 1){if(count($param['area_code']) == 1)$where[] = ['province_code','=',$param['area_code'][0]];if(count($param['area_code']) >= 2)$where[] = ['municipality_code','=',$param['area_code'][1]];if(count($param['area_code']) == 3)$where[] = ['district_code','=',$param['area_code'][2]];}}$resList = ASDHModel::getList($where, 'id,digitized_human_code,digitized_human_name,digitized_human_id,province_code,municipality_code,district_code,address,update_time',[$param['currentPage'], $param['currentSize']]);$list  =  $resList['info'];foreach ($list as $k => $v) {$areaTitle[$k] = PPModel::dataFind(['id' => $v['province_code']],'title',false);if(!empty($v['municipality_code']))$areaTitle[$k] = $areaTitle[$k].'-'.PPModel::dataFind(['id' => $v['municipality_code']],'title',false);if(!empty($v['district_code']))$areaTitle[$k] = $areaTitle[$k].'-'.PPModel::dataFind(['id' => $v['district_code']],'title',false);$list[$k]['area_title'] = $areaTitle[$k];unset($list[$k]['province_code']);unset($list[$k]['municipality_code']);unset($list[$k]['district_code']);}$res['list'] = $list;$res['meat'] = $resList['page'];return success($res);}//详情public function getInfo(){$id = $this->request->param('id');//接收参数if(empty($id)) return error('主键不能为空');$data = ASDHModel::dataFind(['id' => $id],'id,digitized_human_id,digitized_human_name,province_code,municipality_code,district_code,address',true);return success($data);}//保存public function saveInfo(){$param = $this->request->param();// 模板基础验证$validate = new \app\validate\anxun\admin\shuziren\DigitizedHuman;if (!$validate->check($param)) return error($validate->getError());//验证参数if(count($param['area_code']) == 0 || count($param['area_code']) >= 4) return error('省市区至少选择一项');//验证参数$time = date('Y-m-d H:i:s', time());$data['digitized_human_name'] = $param['digitized_human_name'];$data['digitized_human_id'] = $param['digitized_human_id'];$data['province_code'] = $param['area_code'][0];$data['municipality_code'] = count($param['area_code']) >= 2 ? $param['area_code'][1] : 0;$data['district_code'] = count($param['area_code']) == 3 ? $param['area_code'][2] : 0;$data['address'] = $param['address'];$data['update_time'] = $time;if($param['id'] == 0){$data['status'] = 1;$data['create_time'] = $time;$data['digitized_human_code'] = create_order();}$where = empty($param['id']) ? [] : ['id' => $param['id']];ASDHModel::save($data,$where);return success([], '操作成功');}//删除public function deleteInfo(){$id = $this->request->param('id');//接收参数if(empty($id)) return error('主键不能为空');ASDHModel::dataDetele(['id' => 1]);return success([], '操作成功');}
}

        3、订单实现(也就是发货记录)

                a、列表、详情、发货、修改发货信息、导出信息

class QuestionOrder extends Base
{//获取分页数据public function getList(){$param = $this->request->param();$where = [];if(!empty($param['express_company']))$where[] = ['express_company','like','%'.$param['express_company'].'%'];if(!empty($param['express_number']))$where[] = ['express_number','like','%'.$param['express_number'].'%'];if(!empty($param['receipt_status']))$where[] = ['receipt_status','=',$param['receipt_status']];$resList = ASQOModel::getList($where, 'id,order_no,consignee_name,consignee_phone,prize_name,receipt_status,express_company,status,express_number',[$param['currentPage'], $param['currentSize']]);$list  =  $resList['info'];$res['list'] = $list;$res['meat'] = $resList['page'];return success($res);}//获取详情public function getInfo(){$id = $this->request->param('id');//接收参数if(empty($id)) return error('主键不能为空');$data =  ASQOModel::dataFind(['id' => $id], 'id,order_no,consignee_name,consignee_phone,area,details_addr,receipt_status,express_company,express_number',true);return success($data);}//发货public function saveInfo(){$param = $this->request->param();// 模板基础验证$validate = new \app\validate\anxun\admin\shuziren\QuestionOrder;if (!$validate->check($param)) return error($validate->getError());//验证参数$data['prize_name'] = $param['prize_name'];$data['express_company'] = $param['express_company'];$data['express_number'] = $param['express_number'];$data['receipt_status'] = 3;ASQOModel::save($data,['id' => $param['id'],'receipt_status' => 2]);return success('操作成功');}//修改发货信息public function saveDeliverGoods(){$param = $this->request->param();// 模板基础验证$validate = new \app\validate\anxun\admin\shuziren\QuestionOrder;if (!$validate->check($param)) return error($validate->getError());//验证参数$data['prize_name'] = $param['prize_name'];$data['express_company'] = $param['express_company'];$data['express_number'] = $param['express_number'];ASQOModel::save($data,['id' => $param['id'],'receipt_status' => 3]);return success('操作成功');}//导出信息public function exportInfo(){$list = ASQOModel::getAll([],'receipt_status,order_no,consignee_name,consignee_phone,area,details_addr,express_company,express_number','id DESC');if(!$list) return error('暂无可导出');// 处理标题$title = ['发货状态', '订单号', '收货人','收货手机号','所在地区','详细地址','快递公司','快递单号'];$filename = '发货记录';$spreadsheet = new Spreadsheet();$spreadsheet->getDefaultStyle()->getAlignment()->setHorizontal(Alignment::HORIZONTAL_CENTER); //设置水平默认对齐方式$spreadsheet->getDefaultStyle()->getAlignment()->setVertical(Alignment::VERTICAL_CENTER); //设置垂直默认对齐方式$sheet = $spreadsheet->getActiveSheet();$everyDay = date('Y-m-d', time()). '_' .$this->user_id;foreach ($title as $key => $value) {$sheet->setCellValueByColumnAndRow($key+1, 1, $value);}$row = 2;foreach ($list as $item) {$column = 1;foreach ($item as $k => $value) {$sheet->setCellValueByColumnAndRow($column, $row, $value);$column++;}$row++;}$savename = '/storage/'.$filename . '_' . $everyDay . '.xlsx';$object = date('Y-m-d',time()).'/' . $filename . '_' . $everyDay . '.xlsx';$writer = IOFactory::createWriter($spreadsheet, 'Xlsx');$writer->save('.' . $savename);$UploadFactory = new UploadFactory();$uploadHandle = $UploadFactory->getUploadHandle();$res = $uploadHandle->uploadFile($object,'.' . $savename);$data['url'] = $res;$filePath = app()->getRuntimePath() . $savename;@unlink($filePath);return success($data,'上传成功');}
}

        4、题库参数配置

                a、获取配置、保存配置

class QuestionParam extends Base
{//获取配置public function getInfo(){$data = ASQPModel::dataFind(['id' => 1],'answer_number,answer_accuracy,answer_interval_period,postage_price');return success($data, '操作成功');}//保存配置public function saveInfo(){$param = $this->request->param();$validate = new \app\validate\anxun\admin\shuziren\QuestionParam;if(!$validate->check($param)) return error($validate->getError());ASQPModel::save(['answer_number' => $param['answer_number'],'answer_accuracy' => $param['answer_accuracy'],'answer_interval_period' => $param['answer_interval_period'],'postage_price' => $param['postage_price']],[['id','=',1]]);return success([], '操作成功');}
}

        5、统计

                a、列表、详情、导出

class Statistics extends Base
{//列表public function getList(){$param = $this->request->param();if(empty($param['currentPage']))return error('狗日的,到底是第几页呀。不要瞎闹');if(empty($param['currentSize']))return error('狗日的,一页我给你拉取多少条合适呀。不要瞎闹');//初始化工厂$statisticsFactory = new StatisticsFactory($param['types']);//选择通道$statisticsHandle = $statisticsFactory->statisticsHandle();$res = $statisticsHandle->getList($param);return success($res);}//详情public function getInfo(){$param = $this->request->param();//接收参数if(empty($param['id'])) return error('主键不能为空');//初始化工厂$statisticsFactory = new StatisticsFactory($param['types']);//选择通道$statisticsHandle = $statisticsFactory->statisticsHandle();$res = $statisticsHandle->getInfo($param['id']);return success($res);}//导出public function exportInfo(){$param = $this->request->param();//接收参数//初始化工厂$statisticsFactory = new StatisticsFactory($param['types']);//选择通道$statisticsHandle = $statisticsFactory->statisticsHandle();$res = $statisticsHandle->exportInfo($param);return success($res,'导出成功');}
}

相关文章:

微信支付开发-程序开发

一、操作流程图 二、后端代码实现 1、题库实现 a、列表、所有、详情、保存、启禁用、导入答题 b、获取奖品信息、保存奖品信息、 class Question extends Base {// 列表public function getList(){$param $this->request->param();$where [];if(!empty($param[title])…...

【数据结构】排序算法系列——堆排序(附源码+图解)

堆排序 堆排序基于一种常见的**[[二叉树]]结构**&#xff1a;堆 我们前面讲到选择排序&#xff0c;它在待排序的n个记录中选择一个最小的记录需要比较n一1次。本来这也可以理解&#xff0c;查找第一个数据需要比较这么多次是正常的&#xff0c;否则无法知道它是最小的记录。 …...

Linux——应用层自定义协议与序列化

目录 一应用层 1再谈 "协议" 2序列化与反序列化 3理解read,write,recv,send 4Udp vs Tcp 二网络版本计算器 三手写序列和反序列化 四进程间关系与守护进程 1进程组 1.1什么是进程组 1.2组长进程 2会话 2.1什么是会话 2.2会话下的前后台进程 3作业控…...

CGAL 从DSM到DTM-建筑物区域提取

CGAL 从DSM到DTM-建筑物区域提取 生成的DSM被用作DTM计算的基础&#xff0c;即地面表示为过滤掉非地面点后的另一个TIN。主要是去除一些建筑物和植被非地形点。 建筑物立面及连通区域提取 建筑物立面的特征是三角形面片的高度变化剧烈。 通过遍历每一个三角面片&#xff0c;…...

Python--编码解码报错

报错问题 错误信息 UnicodeDecodeError: gbk codec cant decode byte 0xac in position 2: illegal multibyte sequence 通常出现在尝试使用 GBK 编码解码某些二进制数据时&#xff0c;但数据中包含了无法被 GBK 解码的字符。具体错误提示是解码器在处理某个字节时发现该字节无…...

大屏可视化常用图标效果表达

1-echarts-雷达图 2-echarts-仪表盘 3-echarts-水球图&#xff08;利用插件&#xff0c;echarts-liquidfill&#xff09; 4-element UI tree 添加连接线&#xff0c;修改样式或使用插件&#xff08;element-tree-line&#xff09; 5-echarts-漏斗图 6-echarts-饼状图嵌套 optio…...

高通Liunx 系统镜像编译

本文将会介绍如何在编译高通Liunx代码, 具体可以在高通 Linux | 高通下查看相关信息。 编译服务器配置 首先&#xff0c;准备一台Ubuntu 22.04版本主机或者服务器 1&#xff0c;编译Yocto 系统&#xff0c;需要如下一些配置 sudo apt update sudo apt install repo gawk wg…...

105、解析Java中1000个常用类:StringTokenizer类,你学会了吗?

在线工具站 推荐一个程序员在线工具站:程序员常用工具(http://cxytools.com),有时间戳、JSON格式化、文本对比、HASH生成、UUID生成等常用工具,效率加倍嘎嘎好用。程序员资料站 推荐一个程序员编程资料站:程序员的成长之路(http://cxyroad.com),收录了一些列的技术教程…...

虚幻引擎 | 实时语音转口型 Multilingual lipsync

实时语音转口型&#xff1a;EPIC的metahuman sdk&#xff0c;NVIDIA的audio2face&#xff0c;都好。本文使用metahuman sdk 需要工具&#xff1a;Metahuman SDK网页账号&#xff0c;获取两日免费tokens https://space.metahumansdk.io/#/unauthorized ———————————…...

vue国际化

前言 现在的大公司都走国际化路线&#xff0c;我们应用程序也不例外。今天就在 Vue3 项目中整一个比较简单的国际化 背景 之前搞国际化的时候&#xff0c;也搜索了很多帖子&#xff0c;但是没有一个可以完整的实现。今天有空搞了一版&#xff0c;大家有什么问题欢迎留言探讨…...

解决tiktoken库调用get_encoding时SSL超时

文章目录 解决tiktoken库调用get_encoding时SSL超时1. 获取词表文件url2. 手动下载词表文件并保存到本地3. 复制并重命名文件4. 环境变量中设置tiktoken cache5. 使用tiktoken库参考资料 解决tiktoken库调用get_encoding时SSL超时 最近在看Build a Large Language Model (From…...

C++从入门到起飞之——继承上篇 全方位剖析!

&#x1f308;个人主页&#xff1a;秋风起&#xff0c;再归来~&#x1f525;系列专栏&#xff1a;C从入门到起飞 &#x1f516;克心守己&#xff0c;律己则安 目录 1、继承的概念 2、继承定义 2.1 定义格式 2.2 继承基类成员访问⽅式的变化 3、继承类模板 4、 基…...

【文件包含】——日志文件注入

改变的确很难&#xff0c;但结果值得冒险 本文主要根据做题内容的总结&#xff0c;如有错误之处&#xff0c;还请各位师傅指正 一.伪协议的失效 当我们做到关于文件包含的题目时&#xff0c;常用思路其实就是使用伪协议&#xff08;php:filter,data,inpput等等&#xff09;执行…...

UE5源码Windows编译、运行

官方文档 Welcome To Unreal Engine 5 Early Access Learn what to expect from the UE5 Early Access program. 链接如下&#xff1a;https://docs.unrealengine.com/5.0/en-US/Welcome/#gettingue5earlyaccessfromgithub Step 0&#xff1a;找到UE5源码 直接先上链接 https…...

AI大模型与产品经理:替代与合作的深度剖析

在创业的征途中&#xff0c;产品经理常常被外界以一种半开玩笑的口吻提及&#xff1a;“就差一个程序员了。”这句话背后&#xff0c;既蕴含着对产品经理创意与策略能力的认可&#xff0c;也揭示了技术实现环节对于产品成功不可或缺的重要性。然而&#xff0c;随着AI技术的飞速…...

资本的运作方式、贷款的评估标准、杠杆率

在资本领域&#xff0c;涉及到多个角色和复杂的运作机制。以下是一些主要的角色及其运作方式&#xff1a; 主要角色 政府&#xff1a; 发行债券&#xff1a;政府通过发行国债和其他债券来筹集资金&#xff0c;用于公共支出和基础设施建设。货币政策&#xff1a;政府通过调节利…...

Python:抓取 Bilibili(B站)评论、弹幕、字幕等

个人学习需求&#xff0c;需要获取一些 UGC&#xff08;user generated content&#xff09;&#xff0c;包括 UP 的内容、弹幕、评论等。于是从 哔哩哔哩 (゜-゜)つロ 干杯~-bilibili 抓取了一些数据&#xff0c;以下内容仅供学习参考。 目录 1. Python 包&#xff1a;bilib…...

Ubuntu系统Docker部署数据库管理工具DbGate并实现远程查询数据

文章目录 前言1. 安装Docker2. 使用Docker拉取DbGate镜像3. 创建并启动DbGate容器4. 本地连接测试5. 公网远程访问本地DbGate容器5.1 内网穿透工具安装5.2 创建远程连接公网地址5.3 使用固定公网地址远程访问 前言 本文主要介绍如何在Linux Ubuntu系统中使用Docker部署DbGate数…...

18063 圈中的游戏

### 思路 1. 创建一个循环链表表示围成一圈的 n 个人。 2. 从第一个人开始报数&#xff0c;每报到 3 的人退出圈子。 3. 重复上述过程&#xff0c;直到只剩下一个人。 4. 输出最后留下的人的编号。 ### 伪代码 1. 创建一个循环链表&#xff0c;节点表示每个人的编号。 2. 初始…...

【Spring Boot】SpringBoot自动装配-Import

目录 一、前言二、 定义三、使用说明3.1 创建项目3.1.1 导入依赖3.1.2 创建User类 3.2 测试导入Bean3.2.1 修改启动类 3.3 测试导入配置类3.3.1 创建UserConfig类3.3.2 修改启动类 3.4 测试导入ImportSelector3.4.1 创建UseImportSelector类3.4.2 修改启动类3.4.3 启动测试 3.5…...

Appium+python自动化(十六)- ADB命令

简介 Android 调试桥(adb)是多种用途的工具&#xff0c;该工具可以帮助你你管理设备或模拟器 的状态。 adb ( Android Debug Bridge)是一个通用命令行工具&#xff0c;其允许您与模拟器实例或连接的 Android 设备进行通信。它可为各种设备操作提供便利&#xff0c;如安装和调试…...

Oracle查询表空间大小

1 查询数据库中所有的表空间以及表空间所占空间的大小 SELECTtablespace_name,sum( bytes ) / 1024 / 1024 FROMdba_data_files GROUP BYtablespace_name; 2 Oracle查询表空间大小及每个表所占空间的大小 SELECTtablespace_name,file_id,file_name,round( bytes / ( 1024 …...

ssc377d修改flash分区大小

1、flash的分区默认分配16M、 / # df -h Filesystem Size Used Available Use% Mounted on /dev/root 1.9M 1.9M 0 100% / /dev/mtdblock4 3.0M...

相机从app启动流程

一、流程框架图 二、具体流程分析 1、得到cameralist和对应的静态信息 目录如下: 重点代码分析: 启动相机前,先要通过getCameraIdList获取camera的个数以及id,然后可以通过getCameraCharacteristics获取对应id camera的capabilities(静态信息)进行一些openCamera前的…...

土地利用/土地覆盖遥感解译与基于CLUE模型未来变化情景预测;从基础到高级,涵盖ArcGIS数据处理、ENVI遥感解译与CLUE模型情景模拟等

&#x1f50d; 土地利用/土地覆盖数据是生态、环境和气象等诸多领域模型的关键输入参数。通过遥感影像解译技术&#xff0c;可以精准获取历史或当前任何一个区域的土地利用/土地覆盖情况。这些数据不仅能够用于评估区域生态环境的变化趋势&#xff0c;还能有效评价重大生态工程…...

Fabric V2.5 通用溯源系统——增加图片上传与下载功能

fabric-trace项目在发布一年后,部署量已突破1000次,为支持更多场景,现新增支持图片信息上链,本文对图片上传、下载功能代码进行梳理,包含智能合约、后端、前端部分。 一、智能合约修改 为了增加图片信息上链溯源,需要对底层数据结构进行修改,在此对智能合约中的农产品数…...

视频行为标注工具BehaviLabel(源码+使用介绍+Windows.Exe版本)

前言&#xff1a; 最近在做行为检测相关的模型&#xff0c;用的是时空图卷积网络&#xff08;STGCN&#xff09;&#xff0c;但原有kinetic-400数据集数据质量较低&#xff0c;需要进行细粒度的标注&#xff0c;同时粗略搜了下已有开源工具基本都集中于图像分割这块&#xff0c…...

基于 TAPD 进行项目管理

起因 自己写了个小工具&#xff0c;仓库用的Github。之前在用markdown进行需求管理&#xff0c;现在随着功能的增加&#xff0c;感觉有点难以管理了&#xff0c;所以用TAPD这个工具进行需求、Bug管理。 操作流程 注册 TAPD&#xff0c;需要提供一个企业名新建一个项目&#…...

QT3D学习笔记——圆台、圆锥

类名作用Qt3DWindow3D渲染窗口容器QEntity场景中的实体&#xff08;对象或容器&#xff09;QCamera控制观察视角QPointLight点光源QConeMesh圆锥几何网格QTransform控制实体的位置/旋转/缩放QPhongMaterialPhong光照材质&#xff08;定义颜色、反光等&#xff09;QFirstPersonC…...

STM32---外部32.768K晶振(LSE)无法起振问题

晶振是否起振主要就检查两个1、晶振与MCU是否兼容&#xff1b;2、晶振的负载电容是否匹配 目录 一、判断晶振与MCU是否兼容 二、判断负载电容是否匹配 1. 晶振负载电容&#xff08;CL&#xff09;与匹配电容&#xff08;CL1、CL2&#xff09;的关系 2. 如何选择 CL1 和 CL…...