函数generirajFakturi用于通过sequelize在表中创建一些数据,在添加需要添加的所有内容后,它应该调用位于末尾的函数 dodeliNagradi ,该函数使用第一个函数需要填充的表中的数据,但不知何故,第二个函数在第一个完成之前被调用并且表是空的,因此第二个函数无法正常工作,我尝试使用承诺等待第一个函数完成但它似乎不起作用,我想我是在这里犯了一些错误,但这样做也可能是不可能的。
如果有人能看到这个并帮助我,那就太好了,我花了这么多时间在这上面。
const generirajFakturi = async function(req, res){
var godina = req.body.godina
var mesec = req.body.mesec
godina=2021
mesec=3
new Promise((resolve, reject)=>{
Firma.findAll({
//TODO: da raboti
}).then((result)=>{
result.map((firma)=>{
var date = new Date()
var rok = new Date()
rok.setDate(date.getDate()+10)
Faktura.findOne({where:{
mesec:03,
godina:2021,
firmaId:firma.id
}}).then((postoeckafaktura)=>{
if((postoeckafaktura===null||true)){
Faktura.create({
arhivskiBroj:"05-2021",
mesec:3,
godina:2021,
datumNaIzdavanje: formatDate(date),
rokZaNaplata: formatDate(rok),
firmaId:firma.id
}).then((faktura)=>{
if(mesec<10){
var tempmesec="0"+mesec
}
firma.getBroilo({
where:{
mesec:godina+"."+tempmesec+"-"+tempmesec
}
}).then((result)=>{
var kolicinaOdSiteBroila=0
var kolicinaZelenaEnergija=0
var promeni = {}
result.map((broilo)=>{
BroiloStatus.update({fakturaId:faktura.id},{where:{id:broilo.id}})
MernaTocka.findOne({where:{
tockaID:broilo.brojMernaTocka,
tarifa:broilo.tarifa
}}).then((mernaTocka)=>{
VkupnoPotrosena.findOne({where:{
mesec,
godina
}}).then((vkupnoPotrosena)=>{
kolicinaOdSiteBroila=parseFloat(kolicinaOdSiteBroila)+parseFloat(broilo.vkupnoKolicina)
kolicinaZelenaEnergija=parseFloat(kolicinaZelenaEnergija) + parseFloat(broilo.potrosenaZelenaEnergija)
faktura.addBroilo(broilo)
promeni={
elektricnaEnergija:parseFloat(kolicinaOdSiteBroila-kolicinaZelenaEnergija).toFixed(2),
elektricnaEnergijaBezStorno:parseFloat(kolicinaOdSiteBroila-kolicinaZelenaEnergija).toFixed(2),
obnovlivaEnergija:parseFloat(kolicinaZelenaEnergija).toFixed(2),
dataOd:broilo.datumPocetok,
dataDo:broilo.datumKraj,
cenaKwhBezDDV:parseFloat(mernaTocka.cena).toFixed(2),
vkupenIznosBezDDV:parseFloat(parseFloat(kolicinaOdSiteBroila-kolicinaZelenaEnergija) * parseFloat(mernaTocka.cena)).toFixed(2),
cenaObnovlivaEnergija:parseFloat(vkupnoPotrosena.zelenaCena).toFixed(2),
vkupnaObnovlivaEnergijaBezDDV:parseFloat(parseFloat(vkupnoPotrosena.zelenaCena)*parseFloat(kolicinaZelenaEnergija)).toFixed(2),
nadomestZaOrganizacija:parseFloat(parseFloat(kolicinaOdSiteBroila-kolicinaZelenaEnergija)*parseFloat(vkupnoPotrosena.nadomestZaOrganizacija)).toFixed(2),
vkupenIznosNaFakturaBezDDV:parseFloat(parseFloat(parseFloat(kolicinaOdSiteBroila-kolicinaZelenaEnergija) * parseFloat(mernaTocka.cena))+parseFloat(parseFloat(vkupnoPotrosena.zelenaCena)*parseFloat(kolicinaZelenaEnergija))+parseFloat(parseFloat(kolicinaOdSiteBroila-kolicinaZelenaEnergija)*parseFloat(vkupnoPotrosena.nadomestZaOrganizacija))).toFixed(2),
DDV:parseFloat(parseFloat(vkupnoPotrosena.DDVProcent)/100.0*(parseFloat(parseFloat(kolicinaOdSiteBroila-kolicinaZelenaEnergija) * parseFloat(mernaTocka.cena))+parseFloat(parseFloat(vkupnoPotrosena.zelenaCena)*parseFloat(kolicinaZelenaEnergija))+parseFloat(parseFloat(kolicinaOdSiteBroila-kolicinaZelenaEnergija)*parseFloat(vkupnoPotrosena.nadomestZaOrganizacija)))).toFixed(2),
vkupnaNaplata:parseFloat(parseFloat(parseFloat(kolicinaOdSiteBroila-kolicinaZelenaEnergija) * parseFloat(mernaTocka.cena))+parseFloat(parseFloat(vkupnoPotrosena.zelenaCena)*parseFloat(kolicinaZelenaEnergija))+parseFloat(parseFloat(kolicinaOdSiteBroila-kolicinaZelenaEnergija)*parseFloat(vkupnoPotrosena.nadomestZaOrganizacija))+parseFloat(parseFloat(vkupnoPotrosena.DDVProcent)/100.0*(parseFloat(parseFloat(kolicinaOdSiteBroila-kolicinaZelenaEnergija) * parseFloat(mernaTocka.cena))+parseFloat(parseFloat(vkupnoPotrosena.zelenaCena)*parseFloat(kolicinaZelenaEnergija))+parseFloat(parseFloat(kolicinaOdSiteBroila-kolicinaZelenaEnergija)*parseFloat(vkupnoPotrosena.nadomestZaOrganizacija))))).toFixed(2)
}
Faktura.update(promeni,{where:{
id:faktura.id
}}).then(()=>{
Storno.findAll(
{where: {firmaId:firma.id, tarifa: broilo.tarifa}
}).then((stornoFirma) => {
stornoFirma.map((stornoData)=>{
if(stornoData.vkupnoKolicina < promeni.elektricnaEnergija){
StornoDisplay.create({
tarifa: stornoData.tarifa,
datumNaPocetokNaMerenje: stornoData.datumNaPocetokNaMerenje,
datumNaZavrshuvanjeNaMerenje: stornoData.datumNaZavrshuvanjeNaMerenje,
vkupnoKolicina: stornoData.vkupnoKolicina,
brojNaBroilo: stornoData.brojNaBroilo,
fakturaId: faktura.id,
firmaId:faktura.firmaId
})
Faktura.update({elektricnaEnergija:promeni.elektricnaEnergija-stornoData.vkupnoKolicina},{where:{
id:faktura.id
}})
Storno.destroy({where:{id:stornoData.id}})
}
if(stornoData.vkupnoKolicina >= promeni.elektricnaEnergija){
Faktura.update({elektricnaEnergija:0},{where:{
id:faktura.id
}})
StornoDisplay.create({
tarifa: stornoData.tarifa,
datumNaPocetokNaMerenje: stornoData.datumNaPocetokNaMerenje,
datumNaZavrshuvanjeNaMerenje: stornoData.datumNaZavrshuvanjeNaMerenje,
vkupnoKolicina: promeni.elektricnaEnergija,
brojNaBroilo: stornoData.brojNaBroilo,
fakturaId: faktura.id,
firmaId:faktura.firmaId
})
Storno.update({
vkupnoKolicina:(parseFloat(stornoData.vkupnoKolicina)-parseFloat(promeni.elektricnaEnergija))*parseFloat(stornoData.multiplikator),
kolicina:(parseFloat(stornoData.vkupnoKolicina)-parseFloat(promeni.elektricnaEnergija))
},{where:{id:stornoData.id}})
}
})
})
})
})
})
})
})
})
}
})
})
})
resolve()
}).then(()=>{
dodeliNagradi(mesec,godina)
})
return
}
这是第二个函数的代码,但我认为这并不重要
const dodeliNagradi = async function(mesec, godina){
console.log("dodeluvam nagradi")
console.log(mesec, godina)
Faktura.findAll({
where:{
mesec, godina
}
}).then((fakturi)=>{
console.log(fakturi)
fakturi.map((faktura)=>{
Firma.findOne({where:{id:faktura.firmaId}}).then((firma)=>{
Nagradi.findOne({where:{
agent:firma.agent,
mesec,
godina,
firma:firma.name
}}).then((postoecka)=>{
if(postoecka==null){
Nagradi.create({
agent:firma.agent,
mesec,
godina,
suma:parseInt(parseFloat(faktura.elektricnaEnergijaBezStorno).toFixed(2)*parseFloat(firma.nagrada)),
firma:firma.name
})
}
})
})
})
})
}
编辑:尝试使用 async/await 仍然得到相同的结果
const generiraj = async function (req, res){
// 1. Pomini gi site firmi
// 2. Proveri dali firmata ima broiloStatus za ovoj mesec
// 3. Ako ima spoj gi i kreiraj red vo tabelata
var godina = req.body.godina
var mesec = req.body.mesec
godina=2021
mesec=3
await Firma.findAll({
//TODO: da raboti
}).then((result)=>{
result.map((firma)=>{
var date = new Date()
var rok = new Date()
rok.setDate(date.getDate()+10)
Faktura.findOne({where:{
mesec:03,
godina:2021,
firmaId:firma.id
}}).then((postoeckafaktura)=>{
if((postoeckafaktura===null||true)){
Faktura.create({
arhivskiBroj:"05-2021",
mesec:3,
godina:2021,
datumNaIzdavanje: formatDate(date),
rokZaNaplata: formatDate(rok),
firmaId:firma.id
}).then((faktura)=>{
if(mesec<10){
var tempmesec="0"+mesec
}
firma.getBroilo({
where:{
mesec:godina+"."+tempmesec+"-"+tempmesec
}
}).then((result)=>{
var kolicinaOdSiteBroila=0
var kolicinaZelenaEnergija=0
var promeni = {}
result.map((broilo)=>{
BroiloStatus.update({fakturaId:faktura.id},{where:{id:broilo.id}})
MernaTocka.findOne({where:{
tockaID:broilo.brojMernaTocka,
tarifa:broilo.tarifa
}}).then((mernaTocka)=>{
VkupnoPotrosena.findOne({where:{
mesec,
godina
}}).then((vkupnoPotrosena)=>{
kolicinaOdSiteBroila=parseFloat(kolicinaOdSiteBroila)+parseFloat(broilo.vkupnoKolicina)
kolicinaZelenaEnergija=parseFloat(kolicinaZelenaEnergija) + parseFloat(broilo.potrosenaZelenaEnergija)
faktura.addBroilo(broilo)
promeni={
elektricnaEnergija:parseFloat(kolicinaOdSiteBroila-kolicinaZelenaEnergija).toFixed(2),
elektricnaEnergijaBezStorno:parseFloat(kolicinaOdSiteBroila-kolicinaZelenaEnergija).toFixed(2),
obnovlivaEnergija:parseFloat(kolicinaZelenaEnergija).toFixed(2),
dataOd:broilo.datumPocetok,
dataDo:broilo.datumKraj,
cenaKwhBezDDV:parseFloat(mernaTocka.cena).toFixed(2),
vkupenIznosBezDDV:parseFloat(parseFloat(kolicinaOdSiteBroila-kolicinaZelenaEnergija) * parseFloat(mernaTocka.cena)).toFixed(2),
cenaObnovlivaEnergija:parseFloat(vkupnoPotrosena.zelenaCena).toFixed(2),
vkupnaObnovlivaEnergijaBezDDV:parseFloat(parseFloat(vkupnoPotrosena.zelenaCena)*parseFloat(kolicinaZelenaEnergija)).toFixed(2),
nadomestZaOrganizacija:parseFloat(parseFloat(kolicinaOdSiteBroila-kolicinaZelenaEnergija)*parseFloat(vkupnoPotrosena.nadomestZaOrganizacija)).toFixed(2),
vkupenIznosNaFakturaBezDDV:parseFloat(parseFloat(parseFloat(kolicinaOdSiteBroila-kolicinaZelenaEnergija) * parseFloat(mernaTocka.cena))+parseFloat(parseFloat(vkupnoPotrosena.zelenaCena)*parseFloat(kolicinaZelenaEnergija))+parseFloat(parseFloat(kolicinaOdSiteBroila-kolicinaZelenaEnergija)*parseFloat(vkupnoPotrosena.nadomestZaOrganizacija))).toFixed(2),
DDV:parseFloat(parseFloat(vkupnoPotrosena.DDVProcent)/100.0*(parseFloat(parseFloat(kolicinaOdSiteBroila-kolicinaZelenaEnergija) * parseFloat(mernaTocka.cena))+parseFloat(parseFloat(vkupnoPotrosena.zelenaCena)*parseFloat(kolicinaZelenaEnergija))+parseFloat(parseFloat(kolicinaOdSiteBroila-kolicinaZelenaEnergija)*parseFloat(vkupnoPotrosena.nadomestZaOrganizacija)))).toFixed(2),
vkupnaNaplata:parseFloat(parseFloat(parseFloat(kolicinaOdSiteBroila-kolicinaZelenaEnergija) * parseFloat(mernaTocka.cena))+parseFloat(parseFloat(vkupnoPotrosena.zelenaCena)*parseFloat(kolicinaZelenaEnergija))+parseFloat(parseFloat(kolicinaOdSiteBroila-kolicinaZelenaEnergija)*parseFloat(vkupnoPotrosena.nadomestZaOrganizacija))+parseFloat(parseFloat(vkupnoPotrosena.DDVProcent)/100.0*(parseFloat(parseFloat(kolicinaOdSiteBroila-kolicinaZelenaEnergija) * parseFloat(mernaTocka.cena))+parseFloat(parseFloat(vkupnoPotrosena.zelenaCena)*parseFloat(kolicinaZelenaEnergija))+parseFloat(parseFloat(kolicinaOdSiteBroila-kolicinaZelenaEnergija)*parseFloat(vkupnoPotrosena.nadomestZaOrganizacija))))).toFixed(2)
}
Faktura.update(promeni,{where:{
id:faktura.id
}}).then(()=>{
Storno.findAll(
{where: {firmaId:firma.id, tarifa: broilo.tarifa}
}).then((stornoFirma) => {
stornoFirma.map((stornoData)=>{
if(stornoData.vkupnoKolicina < promeni.elektricnaEnergija){
StornoDisplay.create({
tarifa: stornoData.tarifa,
datumNaPocetokNaMerenje: stornoData.datumNaPocetokNaMerenje,
datumNaZavrshuvanjeNaMerenje: stornoData.datumNaZavrshuvanjeNaMerenje,
vkupnoKolicina: stornoData.vkupnoKolicina,
brojNaBroilo: stornoData.brojNaBroilo,
fakturaId: faktura.id,
firmaId:faktura.firmaId
})
Faktura.update({elektricnaEnergija:promeni.elektricnaEnergija-stornoData.vkupnoKolicina},{where:{
id:faktura.id
}})
Storno.destroy({where:{id:stornoData.id}})
}
if(stornoData.vkupnoKolicina >= promeni.elektricnaEnergija){
Faktura.update({elektricnaEnergija:0},{where:{
id:faktura.id
}})
StornoDisplay.create({
tarifa: stornoData.tarifa,
datumNaPocetokNaMerenje: stornoData.datumNaPocetokNaMerenje,
datumNaZavrshuvanjeNaMerenje: stornoData.datumNaZavrshuvanjeNaMerenje,
vkupnoKolicina: promeni.elektricnaEnergija,
brojNaBroilo: stornoData.brojNaBroilo,
fakturaId: faktura.id,
firmaId:faktura.firmaId
})
Storno.update({
vkupnoKolicina:(parseFloat(stornoData.vkupnoKolicina)-parseFloat(promeni.elektricnaEnergija))*parseFloat(stornoData.multiplikator),
kolicina:(parseFloat(stornoData.vkupnoKolicina)-parseFloat(promeni.elektricnaEnergija))
},{where:{id:stornoData.id}})
}
})
})
})
})
})
})
})
})
}
})
})
})
}
const generirajFakturi = async function(req, res){
await generiraj(req,res)
dodeliNagradi(3, 2021)
return
}
const dodeliNagradi = async function(mesec, godina){
console.log("dodeluvam nagradi")
console.log(mesec, godina)
Faktura.findAll({
where:{
mesec, godina
}
}).then((fakturi)=>{
console.log(fakturi)
fakturi.map((faktura)=>{
Firma.findOne({where:{id:faktura.firmaId}}).then((firma)=>{
Nagradi.findOne({where:{
agent:firma.agent,
mesec,
godina,
firma:firma.name
}}).then((postoecka)=>{
if(postoecka===null){
Nagradi.create({
agent:firma.agent,
mesec,
godina,
suma:parseInt(parseFloat(faktura.elektricnaEnergijaBezStorno).toFixed(2)*parseFloat(firma.nagrada)),
firma:firma.name
})
}
})
})
})
})
}