通過對比 入庫申請->入庫審核流程 與 直接入庫 代碼實現,解決前者誤修改stock_info表is_in=1或2數據的bug

入庫申請->入庫審核流程:

提交按鍵定義位置:src\views\purchase\rurchase\RurchaseAdd.vue

<a-button @click="handleSubmit" type="primary" :loading="loading">確認物品已入庫</a-button>

<template><a-drawertitle="采購單入庫":maskClosable="false"placement="right":closable="false":visible="show":width="1200"@close="onClose"style="height: calc(100% - 55px);overflow: auto;padding-bottom: 53px;"><a-form :form="form" layout="vertical"><a-row :gutter="20"><a-col :span="12"><a-form-item label='采購單號' v-bind="formItemLayout"><a-input v-model="rurchaseData.num" disabled/></a-form-item></a-col><a-col :span="12"><a-form-item label='申請人' v-bind="formItemLayout"><a-input v-model="rurchaseData.applicant" disabled/></a-form-item></a-col><a-col :span="12"><a-form-item label='申請時間' v-bind="formItemLayout"><a-input v-model="rurchaseData.createDate" disabled/></a-form-item></a-col><a-col :span="12"><a-form-item label='備注消息' v-bind="formItemLayout"><a-input v-model="rurchaseData.content" disabled/></a-form-item></a-col><a-col :span="12"><a-form-item label='保管人' v-bind="formItemLayout"><a-input v-decorator="['custodian',{ rules: [{ required: true, message: '請輸入保管人!' }] }]"/></a-form-item></a-col><a-col :span="12"><a-form-item label='入庫人' v-bind="formItemLayout"><a-input v-decorator="['putUser',{ rules: [{ required: true, message: '請輸入入庫人!' }] }]"/></a-form-item></a-col><a-col :span="24"><a-form-item label='備注消息' v-bind="formItemLayout"><a-textarea :rows="4" v-decorator="['rurchaseContent',{ rules: [{ required: true, message: '請輸入名稱!' }] }]"/></a-form-item></a-col><a-col :span="24"><a-table :columns="columns" :data-source="dataList"><template slot="nameShow" slot-scope="text, record"><a-input v-model="record.name"></a-input></template><template slot="typeShow" slot-scope="text, record"><a-input v-model="record.type"></a-input></template><template slot="typeIdShow" slot-scope="text, record"><a-select v-model="record.typeId" style="width: 100%"><a-select-option v-for="(item, index) in consumableType" :value="item.id" :key="index">{{ item.name }}</a-select-option></a-select></template><template slot="unitShow" slot-scope="text, record"><a-input v-model="record.unit"></a-input></template><template slot="amountShow" slot-scope="text, record"><a-input-number v-model="record.amount" :min="1" :step="1"/></template><template slot="priceShow" slot-scope="text, record"><a-input-number v-model="record.price" :min="1"/></template></a-table><a-button @click="dataAdd" type="primary" ghost size="large" style="margin-top: 10px;width: 100%">新增物品</a-button></a-col></a-row></a-form><div class="drawer-bootom-button"><a-popconfirm title="確定放棄編輯?" @confirm="onClose" okText="確定" cancelText="取消"><a-button style="margin-right: .8rem">取消</a-button></a-popconfirm><a-button @click="handleSubmit" type="primary" :loading="loading">確認物品已入庫RurchaseAdd</a-button></div></a-drawer>
</template><script>
import {mapState} from 'vuex'
const formItemLayout = {labelCol: { span: 24 },wrapperCol: { span: 24 }
}
export default {name: 'RurchaseAdd',props: {rurchaseAddVisiable: {default: false},rurchaseData: {type: Object}},computed: {...mapState({currentUser: state => state.account.user}),show: {get: function () {return this.rurchaseAddVisiable},set: function () {}},columns () {return [{title: '物品名稱',dataIndex: 'name',scopedSlots: {customRender: 'nameShow'}}, {title: '型號',dataIndex: 'type',scopedSlots: {customRender: 'typeShow'}}, {title: '數量',dataIndex: 'amount',scopedSlots: {customRender: 'amountShow'}}, {title: '所屬類型',dataIndex: 'typeId',width: 200,scopedSlots: {customRender: 'typeIdShow'}}, {title: '單位',dataIndex: 'unit',scopedSlots: {customRender: 'unitShow'}}, {title: '單價',dataIndex: 'price',scopedSlots: {customRender: 'priceShow'}}]}},data () {return {formItemLayout,form: this.$form.createForm(this),loading: false,dataList: [],consumableType: []}},mounted () {this.getConsumableType()this.getGoodsByNum(this.rurchaseData.num)},methods: {getGoodsByNum (num) {this.$get('/cos/goods-belong/getGoodsByNum', { num }).then((r) => {this.dataList = r.data.data})},getConsumableType () {this.$get('/cos/consumable-type/list').then((r) => {this.consumableType = r.data.data})},dataAdd () {this.dataList.push({name: '', type: '', typeId: '', unit: '', amount: '', price: ''})},reset () {this.loading = falsethis.form.resetFields()},onClose () {this.reset()this.$emit('close')},handleSubmit () {let price = 0this.dataList.forEach(item => {price += item.price * item.amount})this.form.validateFields((err, values) => {if (!err) {values.price = pricevalues.goods = JSON.stringify(this.dataList)values.id = this.rurchaseData.idthis.loading = truethis.$post('/cos/rurchase-request/rurchasePut ', {...values}).then((r) => {this.reset()this.$emit('success')}).catch(() => {this.loading = false})}})}}
}
</script><style scoped></style>

后臺API地址:/cos/rurchase-request/rurchasePut

后臺服務方法名:cc.mrbird.febs.cos.service.impl.RurchaseRequestServiceImpl#rurchasePut

后臺java文件路徑:D:\code\javaspringboot\dinningroomsupply\SuppliesManagementSystem\backend\src\main\java\cc\mrbird\febs\cos\service\impl\RurchaseRequestServiceImpl.java

存在的bug:80~82行,更新 stock_info表的當前物品庫存總數,條件為限定is_in=0,導致is_in=1(入庫)和is_in=2(出庫)的歷史出入庫數據都被修改

stockInfoService.update(Wrappers.<StockInfo>lambdaUpdate()

.set(StockInfo::getAmount, stockInfo.getAmount()+item.getAmount()) ? ? ? ?

.set(StockInfo::getPrice, stockInfo.getPrice()) ? ? ? ?

.eq(StockInfo::getName, stockInfo.getName())); //注意,這里更新條件用的是name不是id

從控制臺打印的sql語句可以看出,更新語句的條件有誤:

2023-11-22 16:26:31 | INFO ?| http-nio-9527-exec-10 | p6spy | 2023-11-22 16:26:31 | 耗時 8 ms | SQL 語句: UPDATE stock_info SET amount=14,price=11.00 WHERE name = 'test';

package cc.mrbird.febs.cos.service.impl;import cc.mrbird.febs.cos.entity.GoodsBelong;
import cc.mrbird.febs.cos.entity.RurchaseRequest;
import cc.mrbird.febs.cos.dao.RurchaseRequestMapper;
import cc.mrbird.febs.cos.entity.StockInfo;
import cc.mrbird.febs.cos.entity.StockPut;
import cc.mrbird.febs.cos.service.IGoodsBelongService;
import cc.mrbird.febs.cos.service.IRurchaseRequestService;
import cc.mrbird.febs.cos.service.IStockInfoService;
import cc.mrbird.febs.cos.service.IStockPutService;
import cn.hutool.core.date.DateUtil;
import cn.hutool.json.JSONArray;
import cn.hutool.json.JSONUtil;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.core.toolkit.Wrappers;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import lombok.RequiredArgsConstructor;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;import java.util.Date;
import java.util.LinkedHashMap;
import java.util.List;/*** @author FanK*/
@Service
@RequiredArgsConstructor(onConstructor = @__(@Autowired))
public class RurchaseRequestServiceImpl extends ServiceImpl<RurchaseRequestMapper, RurchaseRequest> implements IRurchaseRequestService {private final IGoodsBelongService goodsBelongService;private final IStockPutService stockPutService;private final IStockInfoService stockInfoService;@Overridepublic IPage<LinkedHashMap<String, Object>> rurchaseRequestByPage(Page page, RurchaseRequest rurchaseRequest) {return baseMapper.rurchaseRequestByPage(page, rurchaseRequest);}@Overridepublic Boolean rurchaseRequestAdd(RurchaseRequest rurchaseRequest) {rurchaseRequest.setNum("RUR-"+new Date().getTime());JSONArray array = JSONUtil.parseArray(rurchaseRequest.getGoods());List<GoodsBelong> goodsBelongList = JSONUtil.toList(array, GoodsBelong.class);rurchaseRequest.setStep(0);this.save(rurchaseRequest);goodsBelongList.forEach(item -> {item.setCreateDate(DateUtil.formatDateTime(new Date()));item.setNum(rurchaseRequest.getNum());});return goodsBelongService.saveBatch(goodsBelongList);}@Overridepublic Boolean rurchasePut(RurchaseRequest rurchaseRequest) {JSONArray array = JSONUtil.parseArray(rurchaseRequest.getGoods());List<GoodsBelong> goodsBelongList = JSONUtil.toList(array, GoodsBelong.class);// 添加入庫單StockPut stockPut = new StockPut();stockPut.setContent(rurchaseRequest.getRurchaseContent());stockPut.setCreateDate(DateUtil.formatDateTime(new Date()));stockPut.setCustodian(rurchaseRequest.getCustodian());stockPut.setPutUser(rurchaseRequest.getPutUser());stockPut.setPrice(rurchaseRequest.getPrice());stockPut.setNum("PUT-"+new Date().getTime());stockPutService.save(stockPut);goodsBelongList.forEach(item -> {item.setCreateDate(DateUtil.formatDateTime(new Date()));item.setNum(stockPut.getNum());// 判斷庫房物品是否存在StockInfo stockInfo = stockInfoService.getOne(Wrappers.<StockInfo>lambdaQuery().eq(StockInfo::getName, item.getName()).eq(StockInfo::getTypeId, item.getTypeId()).eq(StockInfo::getIsIn, 0));if (stockInfo != null) {// 更改庫房數據 這句話有bug,沒有限定is_in=0stockInfoService.update(Wrappers.<StockInfo>lambdaUpdate().set(StockInfo::getAmount, stockInfo.getAmount()+item.getAmount()).set(StockInfo::getPrice, stockInfo.getPrice()).eq(StockInfo::getName, stockInfo.getName())); // 更新條件應該用id} else {// 重新添加庫房數據StockInfo stock = new StockInfo();stock.setName(item.getName());stock.setAmount(item.getAmount());stock.setCreateDate(DateUtil.formatDateTime(new Date()));stock.setType(item.getType());stock.setTypeId(item.getTypeId());stock.setUnit(item.getUnit());stock.setPrice(item.getPrice());stock.setIsIn(0);stockInfo = stock;stockInfoService.save(stock);}// 添加入庫記錄StockInfo stockInfoPut = new StockInfo();stockInfoPut.setParentId(stockInfo.getId());stockInfoPut.setName(item.getName());stockInfoPut.setAmount(item.getAmount());stockInfoPut.setCreateDate(DateUtil.formatDateTime(new Date()));stockInfoPut.setType(item.getType());stockInfoPut.setTypeId(item.getTypeId());stockInfoPut.setUnit(item.getUnit());stockInfoPut.setPrice(item.getPrice());stockInfoPut.setIsIn(1);stockInfoService.save(stockInfoPut);// 添加所屬信息GoodsBelong goodsBelong = new GoodsBelong();goodsBelong.setNum(stockPut.getNum());goodsBelong.setCreateDate(DateUtil.formatDateTime(new Date()));goodsBelong.setAmount(item.getAmount());goodsBelong.setName(item.getName());goodsBelong.setPrice(item.getPrice());goodsBelong.setType(item.getType());goodsBelong.setTypeId(item.getTypeId());goodsBelong.setUnit(item.getUnit());goodsBelongService.save(goodsBelong);});// 修改狀態this.update(Wrappers.<RurchaseRequest>lambdaUpdate().set(RurchaseRequest::getStep, 1).eq(RurchaseRequest::getId, rurchaseRequest.getId()));return true;}
}

直接入庫流程: 前臺代碼定義位置:src\views\purchase\request\RequestAdd.vue

<a-button @click="handleSubmit" type="primary" :loading="loading">提交</a-button>

后臺API地址:/cos/stock-info/put

后臺服務方法名:cc.mrbird.febs.cos.service.impl.StockInfoServiceImpl#stockPut

后臺java文件路徑:D:\code\javaspringboot\dinningroomsupply\SuppliesManagementSystem\backend\src\main\java\cc\mrbird\febs\cos\service\impl\StockInfoServiceImpl.java

// 判斷庫房物品是否存在 StockInfo stockInfo = this.getOne(Wrappers.<StockInfo>lambdaQuery().eq(StockInfo::getName, item.getName()).eq(StockInfo::getTypeId, item.getTypeId()).eq(StockInfo::getIsIn, 0));

if (stockInfo != null) { ? ? // 更改庫房數據 ? ?

this.update(Wrappers.<StockInfo>lambdaUpdate()

.set(StockInfo::getAmount, stockInfo.getAmount()+item.getAmount()) ? ? ? ? ? ? .set(StockInfo::getPrice, stockInfo.getPrice()) ? ? ? ? ? ?

.eq(StockInfo::getId, stockInfo.getId())); ?//注意,這里更新條件用的是id

package cc.mrbird.febs.cos.service.impl;import cc.mrbird.febs.cos.entity.GoodsBelong;
import cc.mrbird.febs.cos.entity.StockInfo;
import cc.mrbird.febs.cos.dao.StockInfoMapper;
import cc.mrbird.febs.cos.entity.StockPut;
import cc.mrbird.febs.cos.entity.StudentInfo;
import cc.mrbird.febs.cos.service.*;
import cn.hutool.core.date.DateUtil;
import cn.hutool.json.JSONArray;
import cn.hutool.json.JSONUtil;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.core.toolkit.Wrappers;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import lombok.RequiredArgsConstructor;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;import java.math.BigDecimal;
import java.util.Date;
import java.util.LinkedHashMap;
import java.util.List;/*** @author FanK*/
@Service
@RequiredArgsConstructor(onConstructor = @__(@Autowired))
public class StockInfoServiceImpl extends ServiceImpl<StockInfoMapper, StockInfo> implements IStockInfoService {private final IStockPutService stockPutService;private final IGoodsBelongService goodsBelongService;private final IBulletinInfoService bulletinInfoService;private final IStudentInfoService studentInfoService;@Overridepublic IPage<LinkedHashMap<String, Object>> stockInfoByPage(Page page, StockInfo stockInfo) {return baseMapper.stockInfoByPage(page, stockInfo);}@Overridepublic Boolean stockPut(String goods, String custodian, String putUser, String content, BigDecimal price) {// 添加入庫單StockPut stockPut = new StockPut();stockPut.setContent(content);stockPut.setCreateDate(DateUtil.formatDateTime(new Date()));stockPut.setCustodian(custodian);stockPut.setPutUser(putUser);stockPut.setPrice(price);stockPut.setNum("PUT-"+new Date().getTime());stockPutService.save(stockPut);// 添加入庫JSONArray array = JSONUtil.parseArray(goods);List<GoodsBelong> goodsBelongList = JSONUtil.toList(array, GoodsBelong.class);goodsBelongList.forEach(item -> {item.setCreateDate(DateUtil.formatDateTime(new Date()));item.setNum(stockPut.getNum());// 判斷庫房物品是否存在StockInfo stockInfo = this.getOne(Wrappers.<StockInfo>lambdaQuery().eq(StockInfo::getName, item.getName()).eq(StockInfo::getTypeId, item.getTypeId()).eq(StockInfo::getIsIn, 0));if (stockInfo != null) {// 更改庫房數據this.update(Wrappers.<StockInfo>lambdaUpdate().set(StockInfo::getAmount, stockInfo.getAmount()+item.getAmount()).set(StockInfo::getPrice, stockInfo.getPrice()).eq(StockInfo::getId, stockInfo.getId()));  // 這里用的id就不會出現誤修改} else {// 重新添加庫房數據StockInfo stock = new StockInfo();stock.setName(item.getName());stock.setAmount(item.getAmount());stock.setCreateDate(DateUtil.formatDateTime(new Date()));stock.setType(item.getType());stock.setTypeId(item.getTypeId());stock.setUnit(item.getUnit());stock.setPrice(item.getPrice());stock.setIsIn(0);stockInfo = stock;this.save(stock);}// 添加入庫記錄StockInfo stockInfoPut = new StockInfo();stockInfoPut.setParentId(stockInfo.getId());stockInfoPut.setName(item.getName());stockInfoPut.setAmount(item.getAmount());stockInfoPut.setCreateDate(DateUtil.formatDateTime(new Date()));stockInfoPut.setType(item.getType());stockInfoPut.setTypeId(item.getTypeId());stockInfoPut.setUnit(item.getUnit());stockInfoPut.setPrice(item.getPrice());stockInfoPut.setIsIn(1);this.save(stockInfoPut);// 添加所屬信息GoodsBelong goodsBelong = new GoodsBelong();goodsBelong.setNum(stockPut.getNum());goodsBelong.setCreateDate(DateUtil.formatDateTime(new Date()));goodsBelong.setAmount(item.getAmount());goodsBelong.setName(item.getName());goodsBelong.setPrice(item.getPrice());goodsBelong.setType(item.getType());goodsBelong.setTypeId(item.getTypeId());goodsBelong.setUnit(item.getUnit());goodsBelongService.save(goodsBelong);});return true;}@Overridepublic IPage<LinkedHashMap<String, Object>> stockInfoDetailPage(Page page, StockInfo stockInfo) {return baseMapper.stockInfoDetailPage(page, stockInfo);}@Overridepublic IPage<LinkedHashMap<String, Object>> getGoodsPutByUserId(Page page, StockInfo stockInfo) {return baseMapper.getGoodsPutByUserId(page, stockInfo);}@Overridepublic LinkedHashMap<String, Object> home(Integer type, Integer userId) {LinkedHashMap<String, Object> result = new LinkedHashMap<>();result.put("bulletinList", bulletinInfoService.list());if (type == 74) {result.put("studentInfo", studentInfoService.getOne(Wrappers.<StudentInfo>lambdaQuery().eq(StudentInfo::getUserId, userId)));}result.put("stockPutRate", baseMapper.stockPutRate());result.put("stockPutTypeRate", baseMapper.stockPutTypeRate());result.put("stockOutRate", baseMapper.stockOutRate());result.put("stockOutTypeRate", baseMapper.stockOutTypeRate());result.put("stockInfo", baseMapper.stockInfoByMonth());return result;}
}

?修復bug后,數據庫查詢正常了

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/160181.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/160181.shtml
英文地址,請注明出處:http://en.pswp.cn/news/160181.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

二、類與對象(二)

8 this指針 8.1 this指針的引入 我們先來定義一個日期的類Date&#xff1a; #include <iostream> using namespace std; class Date { public:void Init(int year, int month, int day){_year year;_month month;_day day;}void Print(){cout << _year <&l…

Python BDD之Behave測試報告

behave 本身的測試報告 behave 本身提供了四種報告格式&#xff1a; pretty&#xff1a;這是默認的報告格式&#xff0c;提供顏色化的文本輸出&#xff0c;每個測試步驟的結果都會詳細列出。plain&#xff1a;這也是一種文本格式的報告&#xff0c;但沒有顏色&#xff0c;并且…

電動汽車充放電V2G模型MATLAB代碼

微?關注“電氣仔推送”獲得資料&#xff08;專享優惠&#xff09; 主要內容&#xff1a; 本程序主要建立電動汽車充放電V2G模型&#xff0c;采用粒子群算法&#xff0c;在保證電動汽車用戶出行需求的前提下&#xff0c;為了使工作區域電動汽車盡可能多的消納供給商場基礎負荷…

【辦公常識】寫好的代碼如何上傳?使用svn commit

首先找到對應的目錄 找到文件之后點擊SVN Commit

五大資源之Service(可以固定IP)

Service可以看作是一組同類Pod對外訪問接口,借助Service應用可以方便的實現服務發現與負載均衡 創建集群內部可以訪問Service #暴露Service(也創建在了namespace dev下) [root@master ~]# kubectl expose deployment(pod控制器) nginx --name=svc-nginx1 --type=Cluste…

基于原子軌道搜索算法優化概率神經網絡PNN的分類預測 - 附代碼

基于原子軌道搜索算法優化概率神經網絡PNN的分類預測 - 附代碼 文章目錄 基于原子軌道搜索算法優化概率神經網絡PNN的分類預測 - 附代碼1.PNN網絡概述2.變壓器故障診街系統相關背景2.1 模型建立 3.基于原子軌道搜索優化的PNN網絡5.測試結果6.參考文獻7.Matlab代碼 摘要&#xf…

mysql 中 varchar 和 text 的區別

varchar 數據類型 如何理解 varchar(50) varchar(50) 中的 50 在 mysql5.0 及以上默認是存儲的字符數&#xff0c;5.0 以下&#xff0c;默認是字節長度。 varchar 占據的存儲空間 varchar 占據的存儲空間大概有以下幾部分組成&#xff1a; varchar 類型用來存儲【實際字符…

Python入門教學——輸入任意長度的int整型一維數組

使用python輸入一個任意長度的整型一維數組&#xff1a; nums input("請輸入整數數組&#xff0c;用空格分隔&#xff1a; ") nums [int(i) for i in nums.split( )] # 將每個數轉換為整型后輸出 運行結果&#xff1a; 【注】如果不強制轉換類型&#xff0c;數字…

功能測試進階建議,學習思路講解

1. 深入了解測試理論&#xff1a; 了解測試的原理、方法和最佳實踐&#xff0c;包括黑盒測試、白盒測試、灰盒測試等。可以閱讀相關的書籍或參加在線課程。 2. 學習相關測試工具&#xff1a; 掌握常用的測試工具&#xff0c;如缺陷發現工具、性能測試工具、安全測試工具等。可以…

matlab求矩陣的偽逆或者負二分之一次方

如果X不是滿秩矩陣的時候&#xff0c;那么不能使用inv()函數來求X的逆&#xff0c;因為X此時不存在逆&#xff0c;但是我們可以求X的偽逆。 &#xff08;1&#xff09;有以下兩種方法求X的偽逆&#xff1a; 假設 X[1 2 1;1 2 1;2 3 4]; 1, pinvXpinv(X); 2, [U,D,P]svd(X); r…

如何使用YOLOv8代碼框架中的RT-DETR

1. RT-DETR RT-DETR是由由此&#xff0c;百度推出了——RT-DETR (Real-Time DEtection TRansformer) &#xff0c;一種基于 DETR 架構的實時端到端檢測器&#xff0c;其在速度和精度上取得了 SOTA 性能。 RT-DETR開源的代碼在百度自己的飛槳paddlepaddle上&#xff0c;因此非…

基于天鷹算法優化概率神經網絡PNN的分類預測 - 附代碼

基于天鷹算法優化概率神經網絡PNN的分類預測 - 附代碼 文章目錄 基于天鷹算法優化概率神經網絡PNN的分類預測 - 附代碼1.PNN網絡概述2.變壓器故障診街系統相關背景2.1 模型建立 3.基于天鷹優化的PNN網絡5.測試結果6.參考文獻7.Matlab代碼 摘要&#xff1a;針對PNN神經網絡的光滑…

新手必看!!附源碼!!STM32通用定時器輸出PWM

一、什么是PWM? PWM&#xff08;脈沖寬度調制&#xff09;是一種用于控制電子設備的技術。它通過調整信號的脈沖寬度來控制電壓的平均值。PWM常用于調節電機速度、控制LED亮度、產生模擬信號等應用。 二、PWM的原理 PWM的基本原理是通過以一定頻率產生的脈沖信號&#xff0…

【5 樹與二叉樹】統計二叉樹結點值和。

typedef struct BiTNode{int data;struct BiTNode *lchild,*rchild; }*BiTree,BiTNode;int sum(BiTree T){if(Tnull)return 0;return T->datasum(T->lchild)sum(T->rchild); }

Android:Google三方庫之Firebase集成詳細步驟(二)

Analytics分析 1、將 Firebase 添加到您的 Android 項目&#xff08;如果尚未添加&#xff09;&#xff0c;并確保在 Firebase 項目中啟用了 Google Analytics&#xff08;分析&#xff09;&#xff1a; 如果您要創建新的 Firebase 項目&#xff0c;請在項目創建過程中啟用 G…

實時錯誤’-2147217887‘多步OLB DB 操作產生錯誤。如果可能,請檢查OLE DB狀態值

目錄 背景問題問題分析問題解決 錯誤解決與定位技巧總結 背景 仍舊是學生信息管理系統的問題&#xff0c;當時做的時候沒發現這么多問題呢&#xff0c;只能說明一件事&#xff0c;做的時候沒有站在用戶的角度考慮需求&#xff0c;設置了什么內容&#xff0c;就按照設置好的去測…

AIGC ChatGPT4總結SQL優化細節操作

數據庫SQL優化是一個復雜的過程,它通常涉及到許多不同的技術和方法。以下是一些常用的SQL優化策略: 1. **索引使用**:索引可以極大地加速查詢速度。但是,索引并不總是有好處的,因為它們需要額外的空間來存儲,并且在插入和更新數據時可能會減慢速度。因此,選擇正確的字段…

Unity中Shader紋理的過濾

文章目錄 前言一、為什么要過濾&#xff1f;二、過濾方式1、Point(no filter) 無過濾2、Bilinear 雙線性過濾3、Trilinear 三線性過濾 前言 Unity中Shader紋理的過濾 一、為什么要過濾&#xff1f; 事實上沒有一個紋理上的紋素是與屏幕上的像素是一一對應的。 屏幕上的 一個…

redis安裝(Windows和linux)

如何實現Redis安裝與使用的詳細教程 Redis 簡介 Redis是一個使用C語言編寫的開源、高性能、非關系型的鍵值對存儲數據庫。它支持多種數據結構&#xff0c;包括字符串、列表、集合、有序集合、哈希表等。Redis的內存操作能力極強&#xff0c;其讀寫性能非常優秀&#xff0c;且…

萬字解析:十大排序(直接插入排序+希爾排序+選擇排序+堆排序+冒泡排序+快速排序+歸并排序+計數排序+基數排序+桶排序)

文章目錄 十大排序排序算法復雜度及穩定性分析一、 排序的概念1.排序&#xff1a;2.穩定性&#xff1a;3.內部排序&#xff1a;4.外部排序&#xff1a; 二、插入排序1.直接插入排序2.希爾排序 三、選擇排序1.直接選擇排序方法一方法二直接插入排序和直接排序的區別 2.堆排序 四…