const { Op } = require("sequelize");
const OrderModel = require('../models/order');
const OrderItemModel = require('../models/orderItem');
const GoodsDao = require('../dao/goods');
const md5 = require("md5");
const secretKey = 'longlongago';
const errFun = (msg,data,code)=>{
return {
code:code||500,
success:false,
msg:msg||'操作失败',
data:data
}
}
const sucFun = (data,msg)=>{
return {
code:200,
success:true,
msg:msg||'操作成功',
data,
}
}
const OrderDao = {
//添加商品到订单
addGoodsToOrder:async(data)=>{
const goods = data.goods;
//查看库存数量
let inventoryNotEnough = [];
const resultGoods = await GoodsDao.queryGoodsInventory(data)||[];
resultGoods.forEach(item=>{
goods.forEach(dItem=>{
if(item.goodsId == dItem.goodsId && item.inventory<dItem.count)inventoryNotEnough.push(item);
})
})
if(inventoryNotEnough.length>0)return errFun('以下商品库存不足',inventoryNotEnough);
//生成orderId
const orderId = md5(goods.userId + secretKey + new Date().getTime());
//订单总价
let orderTotal = 0;
//商品total错误
let wrongTotalGoodsData = [];
//订单里存入商品信息
let jsonGoods = [];
//orderItem存入信息
let orderItemGoods = [];
goods.forEach(item=>{
let preferential = item.preferential||[];
if(preferential.length>0){
preferential.forEach(pItem=>{
let nowTotal = Math.round((item.goodsTotal||(item.price*item.count))*100)/100;
if(pItem.operation == 'x'){
item.goodsTotal = Math.round((nowTotal*pItem.value)*100)/100;
}else if(pItem.operation == '-'){
item.goodsTotal = Math.round((nowTotal-pItem.value)*100)/100;
}
})
}
//保留2位小数,向上取整
item.goodsTotal = Math.round(item.goodsTotal*100)/100;
orderTotal += item.goodsTotal*100;
if(item.goodsTotal != item.total)wrongTotalGoodsData.push(item);
jsonGoods.push({
goodsId:item.goodsId,
goodsName:item.goodsName,
price:item.price,
count:item.count
})
orderItemGoods.push({
orderId,
userId:data.userId,
userName:data.userName,
shopId:item.shopId,
shopName:item.shopName,
goodsId:item.goodsId,
goodsName:item.goodsName,
price:item.price,
count:item.count,
specs:item.specs,
preferential:JSON.stringify(item.preferential),
total:item.total,
})
});
orderTotal = orderTotal/100;
if(wrongTotalGoodsData.length > 0)return errFun('以下商品总价计算错误!!',wrongTotalGoodsData);
if(orderTotal != data.total)return errFun('订单总价计算错误!!',{orderTotal,...data});
try{
let json = JSON.stringify(jsonGoods);
const orderResult = await OrderModel.create({
orderId,
userId:data.userId,
userName:data.userName,
total:data.total,
goods:json,
});
if(!orderResult)return errFun('下单失败!!');
try{
const orderItemResult = await OrderItemModel.bulkCreate(orderItemGoods);
if(!orderItemResult)return errFun('子订单下单失败!!');
//修改下单商品库存 单纯调用 结果不影响下单成功
GoodsDao.changeOrderGoodsInventory(resultGoods,data);
return sucFun(orderItemResult,'下单成功');
}catch(oiErr){
return errFun(err);
}
}catch(oErr){
return errFun('下单失败!!',oErr);
}
},
//通过商品ID查询商品信息
queryGoodsByUserIdFromOrder:async(data)=>{
//根据goodsId查询goods
const goodsData = await OrderModel.findAll({where:{userId:data.userId}});
let shopIds = [];
let resultData = [];
if(goodsData&&goodsData.length>0){
goodsData.forEach(item=>{if(shopIds.indexOf(item.shopId)==-1)shopIds.push(item.shopId)});
goodsData.forEach(item=>{
let index = shopIds.indexOf(item.shopId);
let goodsOne = {
userId: item.userId,
shopId: item.shopId,
shopName: item.shopName,
goodsId: item.goodsId,
goodsName: item.goodsName,
count: item.count,
price: item.price,
specs: item.specs
}
if(!resultData[index]){
resultData[index] = {
shopId:item.shopId,
shopName:item.shopName,
goods:[ goodsOne ]
}
}else{
resultData[index].goods.push(goodsOne);
}
});
}
if(!resultData||await resultData.length<1)errFun('订单空空如也');
return sucFun(resultData,'查询成功');
},
}
module.exports = OrderDao;
没有合适的资源?快使用搜索试试~ 我知道了~
资源推荐
资源详情
资源评论
收起资源包目录
express+mysql+vue,从零搭建一个商城管理系统15--快递查询(对接快递100).zip (26个子文件)
dao
user.js 3KB
cart.js 3KB
goods.js 4KB
shop.js 2KB
order.js 6KB
package.json 628B
routes
user.js 551B
upload.js 654B
cart.js 448B
goods.js 448B
index.js 244B
shop.js 267B
order.js 671B
package-lock.json 60KB
models
user.js 521B
orderItem.js 970B
cart.js 771B
goods.js 817B
shop.js 521B
order.js 612B
index.js 1KB
upload
temporary
images
config
db.js 874B
jwt.js 601B
upload.js 2KB
logistics.js 2KB
bcrypt.js 250B
共 26 条
- 1
资源评论
longlongago~~
- 粉丝: 394
- 资源: 24
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功