|
|
var _ = require('lodash');
|
|
|
var path = require("path");
|
|
|
var dao = require(path.join(process.cwd(),"dao/DAO"));
|
|
|
var goodAttributeDao = require(path.join(process.cwd(),"dao/GoodAttributeDAO"));
|
|
|
var orm = require("orm");
|
|
|
var Promise = require("bluebird");
|
|
|
var fs = require("fs");
|
|
|
|
|
|
var gm = require("gm");
|
|
|
var uniqid = require('uniqid');
|
|
|
var upload_config = require('config').get("upload_config");
|
|
|
/**
|
|
|
* 裁剪图片
|
|
|
*
|
|
|
* @param {[type]} srcPath 原始图片路径
|
|
|
* @param {[type]} savePath 存储路径
|
|
|
* @param {[type]} newWidth 新的宽度
|
|
|
* @param {[type]} newHeight 新的高度
|
|
|
* @return {[type]} [description]
|
|
|
*/
|
|
|
function clipImage(srcPath,savePath,newWidth,newHeight) {
|
|
|
return new Promise(function(resolve,reject) {
|
|
|
// console.log("src => %s",srcPath);
|
|
|
// console.log("save => %s",savePath);
|
|
|
/*
|
|
|
gm(srcPath)
|
|
|
.resize(newWidth,newHeight)
|
|
|
.autoOrient()
|
|
|
.write(savePath,function(err){
|
|
|
resolve();
|
|
|
})
|
|
|
|
|
|
*/
|
|
|
|
|
|
// 创建读取流
|
|
|
readable = fs.createReadStream(srcPath);
|
|
|
// 创建写入流
|
|
|
writable = fs.createWriteStream(savePath);
|
|
|
readable.pipe(writable);
|
|
|
readable.on('end',function() {
|
|
|
resolve();
|
|
|
});
|
|
|
|
|
|
});
|
|
|
}
|
|
|
|
|
|
/**
|
|
|
* 通过参数生成产品基本信息
|
|
|
*
|
|
|
* @param {[type]} params.cb [description]
|
|
|
* @return {[type]} [description]
|
|
|
*/
|
|
|
function generateGoodInfo(params) {
|
|
|
return new Promise(function(resolve,reject){
|
|
|
var info = {};
|
|
|
if(params.goods_id) info["goods_id"] = params.goods_id;
|
|
|
if(!params.goods_name) return reject("商品名称不能为空");
|
|
|
info["goods_name"] = params.goods_name;
|
|
|
|
|
|
if(!params.goods_price) return reject("商品价格不能为空");
|
|
|
var price = parseFloat(params.goods_price);
|
|
|
if(isNaN(price) || price < 0) return reject("商品价格不正确")
|
|
|
info["goods_price"] = price;
|
|
|
|
|
|
|
|
|
if(!params.goods_number) return reject("商品数量不能为空");
|
|
|
var num = parseInt(params.goods_number);
|
|
|
if(isNaN(num) || num < 0) return reject("商品数量不正确");
|
|
|
info["goods_number"] = num;
|
|
|
|
|
|
if(!params.goods_cat) return reject("商品没有设置所属分类");
|
|
|
var cats = params.goods_cat.split(',');
|
|
|
if(cats.length > 0) {
|
|
|
info["cat_one_id"] = cats[0];
|
|
|
}
|
|
|
if(cats.length > 1) {
|
|
|
info["cat_two_id"] = cats[1];
|
|
|
}
|
|
|
if(cats.length > 2) {
|
|
|
info["cat_three_id"] = cats[2];
|
|
|
info["cat_id"] = cats[2];
|
|
|
}
|
|
|
|
|
|
|
|
|
if(params.goods_weight) {
|
|
|
weight = parseFloat(params.goods_weight);
|
|
|
if(isNaN(weight) || weight < 0) return reject("商品重量格式不正确");
|
|
|
info["goods_weight"] = weight;
|
|
|
} else {
|
|
|
info["goods_weight"] = 0;
|
|
|
}
|
|
|
if(params.goods_introduce) {
|
|
|
info["goods_introduce"] = params.goods_introduce;
|
|
|
}
|
|
|
|
|
|
if(params.goods_big_logo) {
|
|
|
info["goods_big_logo"] = params.goods_big_logo;
|
|
|
} else {
|
|
|
info["goods_big_logo"] = "";
|
|
|
}
|
|
|
|
|
|
if(params.goods_small_logo) {
|
|
|
info["goods_small_logo"] = params.goods_small_logo;
|
|
|
} else {
|
|
|
info["goods_small_logo"] = "";
|
|
|
}
|
|
|
|
|
|
if(params.goods_state) {
|
|
|
info["goods_state"] = params.goods_state;
|
|
|
}
|
|
|
|
|
|
|
|
|
// 图片
|
|
|
if(params.pics) {
|
|
|
info["pics"] = params.pics;
|
|
|
}
|
|
|
|
|
|
// 属性
|
|
|
if(params.attrs) {
|
|
|
info["attrs"] = params.attrs;
|
|
|
}
|
|
|
|
|
|
|
|
|
info["add_time"] = Date.parse(new Date()) / 1000;
|
|
|
info["upd_time"] = Date.parse(new Date()) / 1000;
|
|
|
info["is_del"] = '0';
|
|
|
|
|
|
if(params.hot_mumber) {
|
|
|
hot_num = parseInt(params.hot_mumber);
|
|
|
if(isNaN(hot_num) || hot_num < 0) return reject("热销品数量格式不正确");
|
|
|
info["hot_mumber"] = hot_num;
|
|
|
} else {
|
|
|
info["hot_mumber"] = 0;
|
|
|
}
|
|
|
|
|
|
info["is_promote"] = info["is_promote"] ? info["is_promote"] : false;
|
|
|
|
|
|
info["goods_introduce"] = params.goods_introduce
|
|
|
|
|
|
resolve(info);
|
|
|
});
|
|
|
}
|
|
|
|
|
|
/**
|
|
|
* 检查商品名称是否重复
|
|
|
*
|
|
|
* @param {[type]} info [description]
|
|
|
* @return {[type]} [description]
|
|
|
*/
|
|
|
function checkGoodName(info) {
|
|
|
return new Promise(function(resolve,reject) {
|
|
|
|
|
|
dao.findOne("GoodModel",{"goods_name":info.goods_name,"is_del":"0"},function(err,good) {
|
|
|
if(err) return reject(err);
|
|
|
if(!good) return resolve(info);
|
|
|
if(good.goods_id == info.goods_id) return resolve(info);
|
|
|
return reject("商品名称已存在");
|
|
|
});
|
|
|
});
|
|
|
}
|
|
|
|
|
|
/**
|
|
|
* 创建商品基本信息
|
|
|
*
|
|
|
* @param {[type]} info [description]
|
|
|
* @return {[type]} [description]
|
|
|
*/
|
|
|
function createGoodInfo(info) {
|
|
|
|
|
|
return new Promise(function(resolve,reject){
|
|
|
dao.create("GoodModel",_.clone(info),function(err,newGood) {
|
|
|
|
|
|
if(err) return reject("创建商品基本信息失败");
|
|
|
newGood.goods_cat = newGood.getGoodsCat();
|
|
|
info.good = newGood;
|
|
|
return resolve(info);
|
|
|
});
|
|
|
});
|
|
|
}
|
|
|
|
|
|
function updateGoodInfo(info) {
|
|
|
return new Promise(function(resolve,reject){
|
|
|
if(!info.goods_id) return reject("商品ID不存在");
|
|
|
dao.update("GoodModel",info.goods_id,_.clone(info),function(err,newGood) {
|
|
|
if(err) return reject("更新商品基本信息失败");
|
|
|
info.good = newGood;
|
|
|
return resolve(info);
|
|
|
});
|
|
|
|
|
|
});
|
|
|
}
|
|
|
|
|
|
/**
|
|
|
* 获取商品对象
|
|
|
*
|
|
|
* @param {[type]} info 查询内容
|
|
|
* @return {[type]} [description]
|
|
|
*/
|
|
|
function getGoodInfo(info) {
|
|
|
return new Promise(function(resolve,reject){
|
|
|
if(!info || !info.goods_id || isNaN(info.goods_id)) return reject("商品ID格式不正确");
|
|
|
|
|
|
dao.show("GoodModel",info.goods_id,function(err,good){
|
|
|
if(err) return reject("获取商品基本信息失败");
|
|
|
good.goods_cat = good.getGoodsCat();
|
|
|
info["good"] = good;
|
|
|
return resolve(info);
|
|
|
});
|
|
|
});
|
|
|
}
|
|
|
|
|
|
/**
|
|
|
* 删除商品图片
|
|
|
*
|
|
|
* @param {[type]} pic 图片对象
|
|
|
* @return {[type]} [description]
|
|
|
*/
|
|
|
function removeGoodPic(pic) {
|
|
|
return new Promise(function(resolve,reject) {
|
|
|
if(!pic || !pic.remove) return reject("删除商品图片记录失败");
|
|
|
pic.remove(function(err){
|
|
|
if(err) return reject("删除失败");
|
|
|
resolve();
|
|
|
});
|
|
|
});
|
|
|
}
|
|
|
|
|
|
function removeGoodPicFile(path) {
|
|
|
return new Promise(function(resolve,reject){
|
|
|
fs.unlink(path,function(err,result){
|
|
|
resolve();
|
|
|
});
|
|
|
});
|
|
|
}
|
|
|
|
|
|
function createGoodPic(pic){
|
|
|
return new Promise(function(resolve,reject){
|
|
|
if(!pic) return reject("图片对象不能为空");
|
|
|
var GoodPicModel = dao.getModel("GoodPicModel");
|
|
|
GoodPicModel.create(pic,function(err,newPic){
|
|
|
if(err) return reject("创建图片数据失败");
|
|
|
resolve();
|
|
|
});
|
|
|
|
|
|
});
|
|
|
}
|
|
|
|
|
|
|
|
|
/**
|
|
|
* 更新商品图片
|
|
|
*
|
|
|
* @param {[type]} info 参数
|
|
|
* @param {[type]} newGood 商品基本信息
|
|
|
*/
|
|
|
function doUpdateGoodPics(info) {
|
|
|
return new Promise(function(resolve,reject){
|
|
|
var good = info.good;
|
|
|
if(!good.goods_id) return reject("更新商品图片失败");
|
|
|
|
|
|
if(!info.pics) return resolve(info);
|
|
|
dao.list("GoodPicModel",{"columns":{"goods_id":good.goods_id}},function(err,oldpics) {
|
|
|
if(err) return reject("获取商品图片列表失败");
|
|
|
|
|
|
|
|
|
|
|
|
var batchFns = [];
|
|
|
|
|
|
var newpics = info.pics ? info.pics : [];
|
|
|
var newpicsKV = _.keyBy(newpics,"pics_id");
|
|
|
var oldpicsKV = _.keyBy(oldpics,"pics_id");
|
|
|
|
|
|
/**
|
|
|
* 保存图片集合
|
|
|
*/
|
|
|
// 需要新建的图片集合
|
|
|
var addNewpics = [];
|
|
|
// 需要保留的图片的集合
|
|
|
var reservedOldpics = [];
|
|
|
// 需要删除的图片集合
|
|
|
var delOldpics = [];
|
|
|
|
|
|
// 如果提交的新的数据中有老的数据的pics_id就说明保留数据,否则就删除
|
|
|
_(oldpics).forEach(function(pic){
|
|
|
if(newpicsKV[pic.pics_id]) {
|
|
|
reservedOldpics.push(pic);
|
|
|
} else {
|
|
|
delOldpics.push(pic);
|
|
|
}
|
|
|
});
|
|
|
|
|
|
// 从新提交的数据中检索出需要新创建的数据
|
|
|
// 计算逻辑如果提交的数据不存在 pics_id 字段说明是新创建的数据
|
|
|
_(newpics).forEach(function(pic){
|
|
|
if(!pic.pics_id && pic.pic) {
|
|
|
addNewpics.push(pic);
|
|
|
}
|
|
|
});
|
|
|
|
|
|
// 开始处理商品图片数据逻辑
|
|
|
// 1. 删除商品图片数据集合
|
|
|
_(delOldpics).forEach(function(pic){
|
|
|
// 1.1 删除图片物理路径
|
|
|
batchFns.push(removeGoodPicFile(path.join(process.cwd(),pic.pics_big)));
|
|
|
batchFns.push(removeGoodPicFile(path.join(process.cwd(),pic.pics_mid)));
|
|
|
batchFns.push(removeGoodPicFile(path.join(process.cwd(),pic.pics_sma)));
|
|
|
// 1.2 数据库中删除图片数据记录
|
|
|
batchFns.push(removeGoodPic(pic));
|
|
|
});
|
|
|
|
|
|
// 2. 处理新建图片的集合
|
|
|
_(addNewpics).forEach(function(pic){
|
|
|
if(!pic.pics_id && pic.pic) {
|
|
|
// 2.1 通过原始图片路径裁剪出需要的图片
|
|
|
var src = path.join(process.cwd(),pic.pic);
|
|
|
var tmp = src.split(path.sep);
|
|
|
var filename = tmp[tmp.length - 1];
|
|
|
pic.pics_big = "/uploads/goodspics/big_" + filename;
|
|
|
pic.pics_mid = "/uploads/goodspics/mid_" + filename;
|
|
|
pic.pics_sma = "/uploads/goodspics/sma_" + filename;
|
|
|
batchFns.push(clipImage(src,path.join(process.cwd(),pic.pics_big),800,800));
|
|
|
batchFns.push(clipImage(src,path.join(process.cwd(),pic.pics_mid),400,400));
|
|
|
batchFns.push(clipImage(src,path.join(process.cwd(),pic.pics_sma),200,200));
|
|
|
pic.goods_id = good.goods_id;
|
|
|
// 2.2 数据库中新建数据记录
|
|
|
batchFns.push(createGoodPic(pic));
|
|
|
}
|
|
|
});
|
|
|
|
|
|
|
|
|
// 如果没有任何图片操作就返回
|
|
|
if(batchFns.length == 0) {
|
|
|
return resolve(info);
|
|
|
}
|
|
|
|
|
|
// 批量执行所有操作
|
|
|
Promise.all(batchFns)
|
|
|
.then(function(){
|
|
|
resolve(info);
|
|
|
})
|
|
|
.catch(function(error){
|
|
|
if(error) return reject(error);
|
|
|
});
|
|
|
|
|
|
|
|
|
});
|
|
|
|
|
|
|
|
|
});
|
|
|
}
|
|
|
|
|
|
function createGoodAttribute(goodAttribute) {
|
|
|
return new Promise(function(resolve,reject) {
|
|
|
dao.create("GoodAttributeModel",_.omit(goodAttribute,"delete_time"),function(err,newAttr){
|
|
|
if(err) return reject("创建商品参数失败");
|
|
|
resolve(newAttr);
|
|
|
});
|
|
|
});
|
|
|
}
|
|
|
|
|
|
/**
|
|
|
* 更新商品属性
|
|
|
*
|
|
|
* @param {[type]} info 参数
|
|
|
* @param {[type]} good 商品对象
|
|
|
*/
|
|
|
function doUpdateGoodAttributes(info) {
|
|
|
return new Promise(function(resolve,reject) {
|
|
|
var good = info.good;
|
|
|
if(!good.goods_id) return reject("获取商品图片必须先获取商品信息");
|
|
|
if(!info.attrs) return resolve(info);
|
|
|
// var GoodAttributeModel = dao.getModel("GoodAttributeModel");
|
|
|
goodAttributeDao.clearGoodAttributes(good.goods_id,function(err){
|
|
|
if(err) return reject("清理原始的商品参数失败");
|
|
|
|
|
|
var newAttrs = info.attrs ? info.attrs : [];
|
|
|
|
|
|
if(newAttrs) {
|
|
|
var createFns = [];
|
|
|
_(newAttrs).forEach(function(newattr) {
|
|
|
newattr.goods_id = good.goods_id;
|
|
|
if(newattr.attr_value) {
|
|
|
if(newattr.attr_value instanceof Array) {
|
|
|
newattr.attr_value = newattr.attr_value.join(",");
|
|
|
} else {
|
|
|
newattr.attr_value = newattr.attr_value;
|
|
|
}
|
|
|
}
|
|
|
else
|
|
|
newattr.attr_value = "";
|
|
|
createFns.push(createGoodAttribute(_.clone(newattr)));
|
|
|
});
|
|
|
}
|
|
|
|
|
|
if(createFns.length == 0) return resolve(info);
|
|
|
|
|
|
Promise.all(createFns)
|
|
|
.then(function(){
|
|
|
resolve(info);
|
|
|
})
|
|
|
.catch(function(error){
|
|
|
if(error) return reject(error);
|
|
|
});
|
|
|
|
|
|
|
|
|
});
|
|
|
});
|
|
|
}
|
|
|
|
|
|
/**
|
|
|
* 挂载图片
|
|
|
*
|
|
|
* @param {[type]} info [description]
|
|
|
* @return {[type]} [description]
|
|
|
*/
|
|
|
function doGetAllPics(info) {
|
|
|
return new Promise(function(resolve,reject){
|
|
|
var good = info.good;
|
|
|
if(!good.goods_id) return reject("获取商品图片必须先获取商品信息");
|
|
|
// 3. 组装最新的数据挂载在“info”中“good”对象下
|
|
|
dao.list("GoodPicModel",{"columns":{"goods_id":good.goods_id}},function(err,goodPics){
|
|
|
|
|
|
if(err) return reject("获取所有商品图片列表失败");
|
|
|
_(goodPics).forEach(function(pic){
|
|
|
if(pic.pics_big.indexOf("http") == 0) {
|
|
|
pic.pics_big_url = pic.pics_big;
|
|
|
} else {
|
|
|
pic.pics_big_url = upload_config.get("baseURL") + pic.pics_big;
|
|
|
|
|
|
}
|
|
|
|
|
|
if(pic.pics_mid.indexOf("http") == 0) {
|
|
|
pic.pics_mid_url = pic.pics_mid;
|
|
|
} else {
|
|
|
pic.pics_mid_url = upload_config.get("baseURL") + pic.pics_mid;
|
|
|
|
|
|
}
|
|
|
if(pic.pics_sma.indexOf("http") == 0) {
|
|
|
pic.pics_sma_url = pic.pics_sma;
|
|
|
} else {
|
|
|
pic.pics_sma_url = upload_config.get("baseURL") + pic.pics_sma;
|
|
|
|
|
|
}
|
|
|
|
|
|
// pic.pics_mid_url = upload_config.get("baseURL") + pic.pics_mid;
|
|
|
// pic.pics_sma_url = upload_config.get("baseURL") + pic.pics_sma;
|
|
|
});
|
|
|
info.good.pics = goodPics;
|
|
|
resolve(info);
|
|
|
});
|
|
|
});
|
|
|
}
|
|
|
|
|
|
/**
|
|
|
* 挂载属性
|
|
|
* @param {[type]} info [description]
|
|
|
* @return {[type]} [description]
|
|
|
*/
|
|
|
function doGetAllAttrs(info) {
|
|
|
return new Promise(function(resolve,reject){
|
|
|
var good = info.good;
|
|
|
if(!good.goods_id) return reject("获取商品图片必须先获取商品信息");
|
|
|
goodAttributeDao.list(good.goods_id,function(err,goodAttrs){
|
|
|
|
|
|
if(err) return reject("获取所有商品参数列表失败");
|
|
|
info.good.attrs = goodAttrs;
|
|
|
resolve(info);
|
|
|
});
|
|
|
});
|
|
|
}
|
|
|
|
|
|
|
|
|
/**
|
|
|
* 创建商品
|
|
|
*
|
|
|
* @param {[type]} params 商品参数
|
|
|
* @param {Function} cb 回调函数
|
|
|
*/
|
|
|
module.exports.createGood = function(params,cb) {
|
|
|
|
|
|
|
|
|
// 验证参数 & 生成数据
|
|
|
generateGoodInfo(params)
|
|
|
// 检查商品名称
|
|
|
.then(checkGoodName)
|
|
|
// 创建商品
|
|
|
.then(createGoodInfo)
|
|
|
// 更新商品图片
|
|
|
.then(doUpdateGoodPics)
|
|
|
// 更新商品参数
|
|
|
.then(doUpdateGoodAttributes)
|
|
|
.then(doGetAllPics)
|
|
|
.then(doGetAllAttrs)
|
|
|
// 创建成功
|
|
|
.then(function(info){
|
|
|
cb(null,info.good);
|
|
|
})
|
|
|
.catch(function(err) {
|
|
|
cb(err);
|
|
|
});
|
|
|
}
|
|
|
|
|
|
/**
|
|
|
* 删除商品
|
|
|
*
|
|
|
* @param {[type]} id 商品ID
|
|
|
* @param {Function} cb 回调函数
|
|
|
*/
|
|
|
module.exports.deleteGood = function(id,cb) {
|
|
|
if(!id) return cb("产品ID不能为空");
|
|
|
if(isNaN(id)) return cb("产品ID必须为数字");
|
|
|
dao.update(
|
|
|
"GoodModel",
|
|
|
id,
|
|
|
{
|
|
|
'is_del':'1',
|
|
|
'delete_time':Date.parse(new Date()) / 1000,
|
|
|
'upd_time' : Date.parse(new Date()) / 1000
|
|
|
},
|
|
|
function(err){
|
|
|
if(err) return cb(err);
|
|
|
cb(null);
|
|
|
}
|
|
|
);
|
|
|
}
|
|
|
|
|
|
/**
|
|
|
* 获取商品列表
|
|
|
*
|
|
|
* @param {[type]} params 查询条件
|
|
|
* @param {Function} cb 回调函数
|
|
|
*/
|
|
|
module.exports.getAllGoods = function(params,cb) {
|
|
|
var conditions = {};
|
|
|
if(!params.pagenum || params.pagenum <= 0) return cb("pagenum 参数错误");
|
|
|
if(!params.pagesize || params.pagesize <= 0) return cb("pagesize 参数错误");
|
|
|
|
|
|
conditions["columns"] = {};
|
|
|
if(params.query) {
|
|
|
conditions["columns"]["goods_name"] = orm.like("%" + params.query + "%");
|
|
|
}
|
|
|
conditions["columns"]["is_del"] = '0';
|
|
|
|
|
|
|
|
|
dao.countByConditions("GoodModel",conditions,function(err,count){
|
|
|
if(err) return cb(err);
|
|
|
pagesize = params.pagesize;
|
|
|
pagenum = params.pagenum;
|
|
|
pageCount = Math.ceil(count / pagesize);
|
|
|
offset = (pagenum - 1) * pagesize;
|
|
|
if(offset >= count) {
|
|
|
offset = count;
|
|
|
}
|
|
|
limit = pagesize;
|
|
|
|
|
|
// 构建条件
|
|
|
conditions["offset"] = offset;
|
|
|
conditions["limit"] = limit;
|
|
|
conditions["only"] = ["goods_id","goods_name","goods_price","goods_weight","goods_state","add_time","goods_number","upd_time","hot_mumber","is_promote","goods_introduce"];
|
|
|
conditions["order"] = "-add_time";
|
|
|
|
|
|
|
|
|
dao.list("GoodModel",conditions,function(err,goods){
|
|
|
if(err) return cb(err);
|
|
|
var resultDta = {};
|
|
|
resultDta["total"] = count;
|
|
|
resultDta["pagenum"] = pagenum;
|
|
|
resultDta["goods"] = _.map(goods,function(good){
|
|
|
return _.omit(good,"is_del","goods_big_logo","goods_small_logo","delete_time");
|
|
|
});
|
|
|
cb(err,resultDta);
|
|
|
})
|
|
|
});
|
|
|
}
|
|
|
|
|
|
/**
|
|
|
* 更新商品
|
|
|
*
|
|
|
* @param {[type]} id 商品ID
|
|
|
* @param {[type]} params 参数
|
|
|
* @param {Function} cb 回调函数
|
|
|
*/
|
|
|
module.exports.updateGood = function(id,params,cb) {
|
|
|
|
|
|
params.goods_id = id;
|
|
|
// 验证参数 & 生成数据
|
|
|
generateGoodInfo(params)
|
|
|
// 检查商品名称
|
|
|
.then(checkGoodName)
|
|
|
// 创建商品
|
|
|
.then(updateGoodInfo)
|
|
|
// 更新商品图片
|
|
|
.then(doUpdateGoodPics)
|
|
|
// 更新商品参数
|
|
|
.then(doUpdateGoodAttributes)
|
|
|
.then(doGetAllPics)
|
|
|
.then(doGetAllAttrs)
|
|
|
// 创建成功
|
|
|
.then(function(info){
|
|
|
cb(null,info.good);
|
|
|
})
|
|
|
.catch(function(err) {
|
|
|
cb(err);
|
|
|
});
|
|
|
}
|
|
|
|
|
|
/**
|
|
|
* 更新商品图片
|
|
|
*
|
|
|
* @param {[type]} goods_id 商品ID
|
|
|
* @param {[type]} pics 商品图片
|
|
|
* @param {Function} cb 回调函数
|
|
|
*/
|
|
|
module.exports.updateGoodPics = function(goods_id,pics,cb) {
|
|
|
if(!goods_id) return cb("商品ID不能为空");
|
|
|
if(isNaN(goods_id)) return cb("商品ID必须为数字");
|
|
|
|
|
|
getGoodInfo({"goods_id":goods_id,"pics":pics})
|
|
|
.then(doUpdateGoodPics)
|
|
|
.then(doGetAllPics)
|
|
|
.then(doGetAllAttrs)
|
|
|
.then(function(info){
|
|
|
cb(null,info.good);
|
|
|
})
|
|
|
.catch(function(err) {
|
|
|
cb(err);
|
|
|
});
|
|
|
}
|
|
|
|
|
|
module.exports.updateGoodAttributes = function(goods_id,attrs,cb) {
|
|
|
|
|
|
getGoodInfo({"goods_id":goods_id,"attrs":attrs})
|
|
|
.then(doUpdateGoodAttributes)
|
|
|
.then(doGetAllPics)
|
|
|
.then(doGetAllAttrs)
|
|
|
.then(function(info){
|
|
|
cb(null,info.good);
|
|
|
})
|
|
|
.catch(function(err) {
|
|
|
cb(err);
|
|
|
});
|
|
|
}
|
|
|
|
|
|
module.exports.updateGoodsState = function(goods_id,state,cb) {
|
|
|
getGoodInfo({"goods_id":goods_id,"goods_state":state})
|
|
|
.then(updateGoodInfo)
|
|
|
.then(doGetAllPics)
|
|
|
.then(doGetAllAttrs)
|
|
|
.then(function(info){
|
|
|
cb(null,info.good);
|
|
|
})
|
|
|
.catch(function(err) {
|
|
|
cb(err);
|
|
|
});
|
|
|
}
|
|
|
|
|
|
/**
|
|
|
* 通过商品ID获取商品数据
|
|
|
*
|
|
|
* @param {[type]} id 商品ID
|
|
|
* @param {Function} cb 回调函数
|
|
|
*/
|
|
|
module.exports.getGoodById = function(id,cb) {
|
|
|
getGoodInfo({"goods_id":id})
|
|
|
.then(doGetAllPics)
|
|
|
.then(doGetAllAttrs)
|
|
|
.then(function(info){
|
|
|
cb(null,info.good);
|
|
|
})
|
|
|
.catch(function(err) {
|
|
|
cb(err);
|
|
|
});
|
|
|
}
|