import { default as BaseController } from "../../baseController";
|
import { Post } from "egg-shell-decorators";
|
import { BaseProductInfo } from "../../../entity/basicInfo/base/baseProductInfo";
|
import { In, Like } from "typeorm";
|
import { BaseProvider } from "../../../entity/basicInfo/base/baseProvider";
|
import { BaseConsignor } from "../../../entity/basicInfo/consignor/baseConsignor";
|
import * as XLSX from "xlsx";
|
import * as path from "path";
|
// import { BaseBrand } from "../../../entity/basicInfo/base/baseBrand";
|
// import { BaseProductType } from "../../../entity/basicInfo/base/baseProductType";
|
import { vBaseProductPositionGroup } from "../../../entity/storage/product/vBaseProductPositionGroup";
|
import { vBaseProductPosition } from "../../../entity/storage/product/vBaseProductPosition";
|
import { BaseProductInfoHistory } from "../../../entity/basicInfo/base/baseProductInfoHistory";
|
import { BaseProductPosition } from "../../../entity/storage/product/baseProductPosition";
|
import { BasePlate } from "../../../entity/basicInfo/base/basePlate";
|
import { BaseDestination } from "../../../entity/basicInfo/workshop/baseDestination";
|
|
export default class ProductInfoController extends BaseController {
|
//#region getList 获得物料列表
|
/**
|
* 获得物料列表
|
*/
|
@Post()
|
public async getList() {
|
let { ctx } = this;
|
let body = ctx.request.body;
|
let userInfo = await ctx.helper.userInfo();
|
|
try {
|
let whereStr = "product_Id<>0"; // 不筛选空器具
|
var where: any = {};
|
|
// 超级管理员不需要走仓库权限
|
if (userInfo.isAdministrator || body.isAll) {
|
whereStr += ` And userProduct_Id=:userProduct_Id`;
|
where = {
|
userProduct_Id: userInfo.userProduct_Id
|
};
|
} else if (userInfo.userType === "consignor") {
|
// 前端货主登录权限
|
whereStr += ` And userProduct_Id=:userProduct_Id`;
|
where = {
|
userProduct_Id: userInfo.userProduct_Id
|
};
|
} else {
|
whereStr += ` And userProduct_Id=:userProduct_Id`;
|
where = {
|
userProduct_Id: userInfo.userProduct_Id
|
};
|
}
|
// 关键词查询条件
|
if (body.name) {
|
let name = this.ctx.helper.sqlSecurity(body.name);
|
whereStr += ` AND (productName LIKE '%' + :name + '%' OR productCode LIKE '%' + :name + '%')`;
|
where.name = name;
|
}
|
// id查询
|
if (body.product_Id) {
|
let product_Id = this.ctx.helper.sqlSecurity(body.product_Id);
|
whereStr += ` AND (product_Id = :product_Id )`;
|
where.product_Id = product_Id;
|
}
|
// 根据ID查询
|
if (Array.isArray(body.ids)) {
|
whereStr += ` AND (product_Id In(${body.ids.join(",")}))`;
|
}
|
let fields = [
|
"product_Id",
|
"productCode",
|
"productModel",
|
"productName",
|
"orderType",
|
"packingQuantity",
|
"plateCode",
|
"plate_Id",
|
"destination_Id",
|
"destinationName",
|
"plateTypeCode",
|
"weight",
|
"images" // 图片字段
|
];
|
// 自定义查询字段
|
if (body.searchFields) {
|
fields = body.searchFields;
|
}
|
if (body.appendField === "*") {
|
fields = [];
|
}
|
let builder = this.dbRead.createQueryBuilder(BaseProductInfo, "t").where(whereStr, where);
|
if (fields.length) {
|
builder.select(fields);
|
}
|
builder.take(200);
|
let dataList = [];
|
if (body.appendField === "*") {
|
dataList = await builder.getMany();
|
} else {
|
dataList = await builder.getRawMany();
|
}
|
|
this.info.result = true;
|
this.info.data = dataList;
|
|
ctx.body = this.info;
|
} catch (ex) {
|
let msg = "异常错误信息:" + ex.message;
|
this.info.result = false;
|
this.info.msg = msg;
|
ctx.body = this.info;
|
}
|
}
|
//#endregion
|
|
//#region getProductList 获得物料列表
|
/**
|
* 获得物料列表
|
*/
|
@Post()
|
public async getProductList() {
|
let { ctx } = this;
|
let body = ctx.request.body;
|
let userInfo = await ctx.helper.userInfo();
|
|
try {
|
let whereStr = "";
|
var where: any = {};
|
|
// 超级管理员不需要走仓库权限
|
if (userInfo.isAdministrator || body.isAll) {
|
whereStr = `userProduct_Id=:userProduct_Id`;
|
where = {
|
userProduct_Id: userInfo.userProduct_Id
|
};
|
} else if (userInfo.userType === "consignor") {
|
// 前端货主登录权限
|
whereStr = `userProduct_Id=:userProduct_Id`;
|
where = {
|
userProduct_Id: userInfo.userProduct_Id
|
};
|
} else {
|
whereStr = `userProduct_Id=:userProduct_Id`;
|
where = {
|
userProduct_Id: userInfo.userProduct_Id
|
};
|
}
|
let fields = ["productCode", "productName", "product_Id"];
|
// 自定义查询字段
|
if (body.searchFields) {
|
fields = body.searchFields;
|
}
|
if (body.appendField === "*") {
|
fields = [];
|
}
|
let builder = this.dbRead.createQueryBuilder(BaseProductInfo, "t").where(whereStr, where);
|
if (fields.length) {
|
builder.select(fields);
|
}
|
builder.take(200);
|
let dataList = [];
|
if (body.appendField === "*") {
|
dataList = await builder.getMany();
|
} else {
|
dataList = await builder.getRawMany();
|
}
|
|
this.info.result = true;
|
this.info.data = dataList;
|
|
ctx.body = this.info;
|
} catch (ex) {
|
let msg = "异常错误信息:" + ex.message;
|
this.info.result = false;
|
this.info.msg = msg;
|
ctx.body = this.info;
|
}
|
}
|
//#endregion
|
|
//#region getProductStorageList 获得库存空器具物料列表
|
/**
|
* 获得库存空器具物料列表
|
*/
|
@Post()
|
public async getProductStorageList() {
|
let { ctx } = this;
|
let body = ctx.request.body;
|
|
try {
|
let whereStr = "";
|
var where: any = {};
|
// 关键词查询条件
|
if (body.name) {
|
let name = this.ctx.helper.sqlSecurity(body.name);
|
whereStr += `productName='空器具' and productStorage>0 AND (plateCode LIKE '%' + :name + '%')`;
|
where.name = name;
|
}
|
// 查询当前用户常用的物料
|
var dataList = await this.dbRead.createQueryBuilder(BaseProductPosition, "t").where(whereStr, where).take(10).getMany();
|
|
if (dataList.length === 0) {
|
this.info.result = false;
|
this.info.msg = "未找到库存空器具数据";
|
ctx.body = this.info;
|
return;
|
}
|
|
this.info.result = true;
|
this.info.data = dataList;
|
|
ctx.body = this.info;
|
} catch (ex) {
|
let msg = "异常错误信息:" + ex.message;
|
this.info.result = false;
|
this.info.msg = msg;
|
ctx.body = this.info;
|
}
|
}
|
//#endregion
|
|
//#region getHasStorageList 获得有库存物料列表
|
/**
|
* 获得有库存物料列表
|
*/
|
@Post()
|
public async getHasStorageList() {
|
let { ctx } = this;
|
let body = ctx.request.body;
|
let userInfo = await ctx.helper.userInfo();
|
|
try {
|
let whereStr = "product_Id<>0 AND EXISTS(SELECT 1 FROM Base_ProductPosition pp Where pp.product_Id=t.product_Id And productStorage>0)";
|
var where: any = {};
|
|
// 超级管理员不需要走仓库权限
|
if (userInfo.isAdministrator || body.isAll) {
|
whereStr += ` AND userProduct_Id=:userProduct_Id`;
|
where = {
|
userProduct_Id: userInfo.userProduct_Id
|
};
|
} else if (userInfo.userType === "consignor") {
|
// 前端货主登录权限
|
whereStr += ` AND userProduct_Id=:userProduct_Id`;
|
where = {
|
userProduct_Id: userInfo.userProduct_Id
|
};
|
} else {
|
whereStr += ` AND userProduct_Id=:userProduct_Id`;
|
where = {
|
userProduct_Id: userInfo.userProduct_Id
|
};
|
}
|
// 关键词查询条件
|
if (body.name) {
|
let name = this.ctx.helper.sqlSecurity(body.name);
|
whereStr += ` AND (productName LIKE '%' + :name + '%' OR productCode LIKE '%' + :name + '%')`;
|
where.name = name;
|
}
|
// 出库类型
|
if (body.orderType) {
|
if (body.orderType === "焊装出库") {
|
whereStr += ` AND orderType IN('焊装出库', 'EU箱出库', '外协件出库')`;
|
} else {
|
whereStr += ` AND orderType=:orderType`;
|
where.orderType = body.orderType;
|
}
|
}
|
let fields = [
|
"product_Id",
|
"productCode",
|
"productModel",
|
"productName",
|
"orderType",
|
"packingQuantity",
|
"plateCode",
|
"plate_Id",
|
"destination_Id",
|
"destinationName"
|
];
|
// 自定义查询字段
|
if (body.searchFields) {
|
fields = body.searchFields;
|
}
|
if (body.appendField === "*") {
|
fields = [];
|
}
|
let builder = this.dbRead.createQueryBuilder(BaseProductInfo, "t").where(whereStr, where);
|
if (fields.length) {
|
builder.select(fields);
|
}
|
builder.take(200);
|
let dataList = [];
|
if (body.appendField === "*") {
|
dataList = await builder.getMany();
|
} else {
|
dataList = await builder.getRawMany();
|
}
|
|
this.info.result = true;
|
this.info.data = dataList;
|
|
ctx.body = this.info;
|
} catch (ex) {
|
let msg = "异常错误信息:" + ex.message;
|
this.info.result = false;
|
this.info.msg = msg;
|
ctx.body = this.info;
|
}
|
}
|
//#endregion
|
|
//#region getHasStorageListByHistory 获得有库存物料列表
|
/**
|
* 获得有库存物料列表
|
*/
|
@Post()
|
public async getHasStorageListByHistory() {
|
let { ctx } = this;
|
let body = ctx.request.body;
|
let userInfo = await ctx.helper.userInfo();
|
|
try {
|
let whereStr = "product_Id<>0 AND EXISTS(SELECT 1 FROM Base_ProductPosition pp Where pp.product_Id=t.product_Id And productStorage>0)";
|
var where: any = {};
|
|
// 超级管理员不需要走仓库权限
|
if (userInfo.isAdministrator || body.isAll) {
|
whereStr += ` AND userProduct_Id=:userProduct_Id`;
|
where = {
|
userProduct_Id: userInfo.userProduct_Id
|
};
|
} else if (userInfo.userType === "consignor") {
|
// 前端货主登录权限
|
whereStr += ` AND userProduct_Id=:userProduct_Id`;
|
where = {
|
userProduct_Id: userInfo.userProduct_Id
|
};
|
} else {
|
whereStr += ` AND userProduct_Id=:userProduct_Id`;
|
where = {
|
userProduct_Id: userInfo.userProduct_Id
|
};
|
}
|
// 关键词查询条件
|
if (body.name) {
|
let name = this.ctx.helper.sqlSecurity(body.name);
|
whereStr += ` AND (productName LIKE '%' + :name + '%' OR productCode LIKE '%' + :name + '%')`;
|
where.name = name;
|
}
|
// 出库类型
|
if (body.orderType) {
|
if (body.orderType === "焊装出库") {
|
whereStr += ` AND orderType IN('焊装出库', 'EU箱出库', '外协件出库')`;
|
} else {
|
whereStr += ` AND orderType=:orderType`;
|
where.orderType = body.orderType;
|
}
|
}
|
var historyWhere = "user_Id=" + userInfo.user_Id;
|
// 查询当前用户常用的物料
|
var historyList = await this.dbRead
|
.createQueryBuilder(BaseProductInfoHistory, "t")
|
.where(historyWhere)
|
.orderBy({ useNum: "DESC" })
|
.take(10)
|
.getMany();
|
if (historyList.length === 0) {
|
this.info.result = false;
|
this.info.msg = "未找到历史数据";
|
ctx.body = this.info;
|
return;
|
} else {
|
var productidArray = historyList.map(v => {
|
return v.product_Id;
|
});
|
var productids = productidArray.join(",");
|
whereStr += ` AND product_Id in (` + productids + `)`;
|
}
|
let fields = [
|
"product_Id",
|
"productCode",
|
"productModel",
|
"productName",
|
"orderType",
|
"packingQuantity",
|
"plateCode",
|
"plate_Id",
|
"destination_Id",
|
"destinationName"
|
];
|
// 自定义查询字段
|
if (body.searchFields) {
|
fields = body.searchFields;
|
}
|
if (body.appendField === "*") {
|
fields = [];
|
}
|
let builder = this.dbRead.createQueryBuilder(BaseProductInfo, "t").where(whereStr, where);
|
if (fields.length) {
|
builder.select(fields);
|
}
|
builder.take(200);
|
let dataList = [];
|
if (body.appendField === "*") {
|
dataList = await builder.getMany();
|
} else {
|
dataList = await builder.getRawMany();
|
}
|
|
this.info.result = true;
|
this.info.data = dataList;
|
|
ctx.body = this.info;
|
} catch (ex) {
|
let msg = "异常错误信息:" + ex.message;
|
this.info.result = false;
|
this.info.msg = msg;
|
ctx.body = this.info;
|
}
|
}
|
//#endregion
|
|
//#region 根据物料ID获取物料
|
/**
|
* 根据物料ID获取物料
|
*/
|
@Post()
|
public async getById() {
|
let { ctx } = this;
|
let body = ctx.body;
|
let userInfo = await ctx.helper.userInfo();
|
let userProduct_Id = userInfo.userProduct_Id;
|
if (!body.id) {
|
this.info.result = false;
|
this.info.msg = "ID查询条件不存在";
|
ctx.body = this.info;
|
return;
|
}
|
|
try {
|
let dataInfo = await this.dbRead.findOne(BaseProductInfo, {
|
select: ["product_Id", "productCode", "productName", "productSpec", "weight"],
|
where: {
|
product_Id: body.id,
|
userProduct_Id: userProduct_Id
|
}
|
});
|
|
this.info.result = true;
|
this.info.data = dataInfo;
|
} catch (error) {
|
this.info.result = false;
|
this.info.data = error.message;
|
}
|
ctx.body = this.info;
|
}
|
//#endregion
|
|
//#region 根据物料ID获取物料
|
/**
|
* 根据物料ID获取物料
|
*/
|
@Post()
|
public async getByIds() {
|
let { ctx } = this;
|
let body = ctx.body;
|
let userInfo = await ctx.helper.userInfo();
|
let userProduct_Id = userInfo.userProduct_Id;
|
if (!body.id) {
|
this.info.result = false;
|
this.info.msg = "ID查询条件不存在";
|
ctx.body = this.info;
|
return;
|
}
|
|
try {
|
let dataInfo = await this.dbRead.findOne(BaseProductInfo, {
|
select: ["product_Id", "productCode", "productName", "weight", "ratePrice", "images", "packingQuantity"],
|
where: {
|
product_Id: body.id,
|
userProduct_Id: userProduct_Id
|
}
|
});
|
|
this.info.result = true;
|
this.info.data = dataInfo;
|
} catch (error) {
|
this.info.result = false;
|
this.info.data = error.message;
|
}
|
ctx.body = this.info;
|
}
|
//#endregion
|
|
//#region 根据物料ID获取物料信息
|
/**
|
* 根据物料ID获取物料信息
|
*/
|
@Post()
|
public async getStockNumByProductId() {
|
let { ctx } = this;
|
let body = ctx.body;
|
if (!body.id) {
|
this.info.result = false;
|
this.info.msg = "ID查询条件不存在";
|
ctx.body = this.info;
|
return;
|
}
|
|
try {
|
let builder = this.dbRead
|
.createQueryBuilder(vBaseProductPosition, "t")
|
.where("product_Id=:product_Id And productStorage>0 And PositionType<>5", { product_Id: body.id });
|
|
let dataList = [];
|
let validQty = 0;
|
let productStorage = 0;
|
dataList = await builder.getMany();
|
for (var datainfo of dataList) {
|
validQty += datainfo.validQty;
|
productStorage += datainfo.productStorage;
|
}
|
this.info.result = true;
|
this.info.data = {
|
validQty: validQty,
|
productStorage: productStorage
|
};
|
} catch (error) {
|
this.info.result = false;
|
this.info.data = error.message;
|
}
|
ctx.body = this.info;
|
}
|
//#endregion
|
|
//#region 根据物料条码获取物料信息
|
/**
|
* 根据物料条码获取物料信息
|
*/
|
@Post()
|
public async getByModel() {
|
let { ctx } = this;
|
let body = ctx.request.body;
|
let userInfo = await ctx.helper.userInfo();
|
let userProduct_Id = userInfo.userProduct_Id;
|
if (!body.productModel) {
|
this.info.result = false;
|
this.info.msg = "物料条码查询条件不存在";
|
ctx.body = this.info;
|
return;
|
}
|
|
try {
|
let dataInfo = await this.dbRead.findOne(BaseProductInfo, {
|
where: {
|
productModel: body.productModel,
|
userProduct_Id: userProduct_Id
|
}
|
});
|
if (!dataInfo) {
|
this.info.result = false;
|
this.info.msg = "物料条码不存在";
|
ctx.body = this.info;
|
return;
|
}
|
|
this.info.result = true;
|
this.info.data = dataInfo;
|
} catch (error) {
|
this.info.result = false;
|
this.info.data = error.message;
|
}
|
ctx.body = this.info;
|
}
|
//#endregion
|
|
//#region 根据查询条件获取物料信息
|
/**
|
* 根据物料条码获取物料信息
|
*/
|
@Post()
|
public async find() {
|
let { ctx } = this;
|
let body = ctx.request.body;
|
let userInfo = await ctx.helper.userInfo();
|
let userProduct_Id = userInfo.userProduct_Id;
|
|
// 拼接查询条件
|
let where: any = {};
|
if (body.product_Id) {
|
where.product_Id = body.product_Id;
|
}
|
if (body.productCode) {
|
where.productCode = body.productCode;
|
}
|
if (body.productName) {
|
where.productName = Like(`%${body.productName}%`);
|
}
|
|
// 判断查询条件是否存在
|
// if (!Object.keys(where).length) {
|
// this.info.result = false;
|
// this.info.msg = "没有合法的查询条件";
|
// ctx.body = this.info;
|
// return;
|
// }
|
// 限定当前账套
|
where.userProduct_Id = userProduct_Id;
|
|
try {
|
let dataInfo = await this.dbRead.find(BaseProductInfo, {
|
where: where,
|
take: 50
|
});
|
if (!dataInfo) {
|
this.info.result = false;
|
this.info.msg = "物料不存在";
|
ctx.body = this.info;
|
return;
|
}
|
|
this.info.result = true;
|
this.info.data = dataInfo;
|
} catch (error) {
|
this.info.result = false;
|
this.info.data = error.message;
|
}
|
ctx.body = this.info;
|
}
|
//#endregion
|
|
//#region 根据查询条件获取库存物料信息
|
/**
|
* 根据物料条码获取库存物料信息
|
*/
|
@Post()
|
public async findPositionList() {
|
let { ctx } = this;
|
let body = ctx.request.body;
|
let userInfo = await ctx.helper.userInfo();
|
let userProduct_Id = userInfo.userProduct_Id;
|
|
// 拼接查询条件
|
let where: any = {};
|
if (body.productModel) {
|
where.productModel = body.productModel;
|
}
|
if (body.productCode) {
|
where.productCode = body.productCode;
|
}
|
if (body.productName) {
|
where.productName = Like(`%${body.productName}%`);
|
}
|
// 判断查询条件是否存在
|
// if (!Object.keys(where).length) {
|
// this.info.result = false;
|
// this.info.msg = "没有合法的查询条件";
|
// ctx.body = this.info;
|
// return;
|
// }
|
// 设置固定查询条件
|
if (body.consignor_Id > 0) {
|
where.consignor_Id = body.consignor_Id;
|
}
|
// 限定当前账套
|
where.userProduct_Id = userProduct_Id;
|
try {
|
let dataInfo = await this.dbRead.find(vBaseProductPositionGroup, {
|
where: where,
|
take: 50
|
});
|
if (!dataInfo) {
|
this.info.result = false;
|
this.info.msg = "物料条码不存在";
|
ctx.body = this.info;
|
return;
|
}
|
|
this.info.result = true;
|
this.info.data = dataInfo;
|
} catch (error) {
|
this.info.result = false;
|
this.info.data = error.message;
|
}
|
ctx.body = this.info;
|
}
|
//#endregion
|
|
//#region 新增物料信息
|
/**
|
* 新增物料信息
|
*/
|
@Post()
|
public async add() {
|
let { ctx } = this;
|
let body = ctx.body;
|
let userInfo = await this.userInfo;
|
|
try {
|
// 记录数据到mongodb日志中
|
let db = this.app.mongodb;
|
let collection = db.collection("apiProduct");
|
let mongoData = JSON.parse(JSON.stringify(body));
|
mongoData.createDate = new Date();
|
mongoData.userProduct_Id = userInfo.userProduct_Id;
|
let re = await collection.insert(mongoData);
|
ctx.logger.info("apiProduct将数据保存至MongoDB after:" + JSON.stringify(re));
|
} catch {}
|
|
if (!userInfo && !userInfo.userProduct_Id) {
|
this.info.result = false;
|
this.info.msg = "数据不存在";
|
ctx.body = this.info;
|
return;
|
}
|
let userProduct_Id = userInfo.userProduct_Id;
|
|
if (!body.consignorName) {
|
this.info.result = false;
|
this.info.msg = "货主名称不能为空";
|
ctx.body = this.info;
|
return;
|
}
|
|
if (!body.productModel) {
|
this.info.result = false;
|
this.info.msg = "物料条码不能为空";
|
ctx.body = this.info;
|
return;
|
}
|
|
if (!body.productName) {
|
this.info.result = false;
|
this.info.msg = "物料名称不能为空";
|
ctx.body = this.info;
|
return;
|
}
|
|
try {
|
// 验证货主
|
let consignorInfo = await this.dbRead.findOne(BaseConsignor, {
|
consignorName: body.consignorName,
|
userProduct_Id: userProduct_Id
|
});
|
if (!consignorInfo) {
|
this.info.result = false;
|
this.info.msg = "货主不存在";
|
ctx.body = this.info;
|
return;
|
}
|
this.body.consignor_Id = consignorInfo.consignor_Id;
|
this.body.consignorCode = consignorInfo.consignorCode;
|
|
// 验证供应商
|
let providerInfo = await this.dbRead.findOne(BaseProvider, {
|
providerShortName: body.providerShortName,
|
userProduct_Id: userProduct_Id
|
});
|
if (!providerInfo) {
|
this.info.result = false;
|
this.info.msg = "供应商不存在";
|
ctx.body = this.info;
|
return;
|
}
|
this.body.provider_Id = providerInfo.provider_Id;
|
this.body.providerShortName = providerInfo.providerShortName;
|
this.body.providerName = providerInfo.providerName;
|
|
// 判断物料是否已存在
|
let dataInfo = await this.dbRead.findOne(BaseProductInfo, {
|
where: {
|
productCode: body.productCode,
|
consignor_Id: consignorInfo.consignor_Id,
|
userProduct_Id: userProduct_Id
|
}
|
});
|
if (dataInfo) {
|
this.info.result = false;
|
this.info.msg = this.body.productCode + "物料编号已存在,不能重复推送";
|
ctx.body = this.info;
|
return;
|
}
|
|
dataInfo = new BaseProductInfo();
|
if (!this.body.productCode) {
|
// 生成物料编号
|
let code = await this.ctx.service.common.getCodeRegular(254);
|
this.body.productCode = code;
|
}
|
|
dataInfo = new BaseProductInfo();
|
dataInfo = Object.assign(dataInfo, this.body);
|
await this.setAccountInfo(dataInfo);
|
await this.dbWrite.save(dataInfo);
|
|
this.info.result = true;
|
this.info.msg = "物料信息保存成功";
|
} catch (error) {
|
this.info.result = false;
|
this.info.data = error.message;
|
}
|
ctx.body = this.info;
|
}
|
//#endregion
|
|
//#region ProductAuditing
|
/**
|
* 物料审核
|
*/
|
@Post()
|
public async productAuditing() {
|
let { ctx } = this;
|
let body = ctx.request.body;
|
let userInfo = await ctx.helper.userInfo();
|
|
try {
|
if (!body.IDs) {
|
this.info.result = false;
|
this.info.msg = "至少选择一条物料";
|
return;
|
}
|
let IDs = body.IDs.split(",");
|
|
await this.dbWrite.update(
|
BaseProductInfo,
|
{
|
userProduct_Id: userInfo.userProduct_Id,
|
product_Id: In(IDs)
|
},
|
{
|
auditor: userInfo.userTrueName,
|
auditing: 2,
|
auditDate: new Date()
|
}
|
);
|
|
this.info.result = true;
|
this.info.msg = "审核成功";
|
} catch (ex) {
|
this.info.result = false;
|
this.info.msg = "错误信息:" + ex.message;
|
}
|
ctx.body = this.info;
|
}
|
//#endregion
|
|
//#region funReAudit
|
/**
|
* 反审
|
*/
|
@Post()
|
public async funReAudit() {
|
let { ctx } = this;
|
let body = ctx.request.body;
|
let userInfo = await ctx.helper.userInfo();
|
try {
|
if (!body.IDs) {
|
this.info.result = false;
|
this.info.msg = "至少选择一条物料";
|
return;
|
}
|
let IDs = body.IDs.split(",");
|
|
await this.dbWrite.update(
|
BaseProductInfo,
|
{
|
userProduct_Id: userInfo.userProduct_Id,
|
product_Id: In(IDs)
|
},
|
{
|
auditor: userInfo.userTrueName,
|
auditing: 0,
|
auditDate: new Date()
|
}
|
);
|
|
this.info.result = true;
|
this.info.msg = "反审成功";
|
} catch (ex) {
|
this.info.msg = ex.message;
|
this.info.result = false;
|
}
|
ctx.body = this.info;
|
}
|
//#endregion
|
|
//#region getBarcode
|
/**
|
* 获得中大条码
|
*/
|
@Post()
|
public async getBarcode() {
|
let { ctx } = this;
|
let body = ctx.request.body;
|
let userInfo = await ctx.helper.userInfo();
|
try {
|
if (!Array.isArray(body.code) || !body.code.length) {
|
this.info.result = false;
|
this.info.msg = "至少选择一条物料";
|
return;
|
}
|
let codeList = body.code;
|
var prodList = await this.dbRead.find(BaseProductInfo, {
|
select: ["productModel", "middleBarcode", "bigBarcode"],
|
where: {
|
userProduct_Id: userInfo.userProduct_Id,
|
productModel: In(codeList)
|
}
|
});
|
|
this.info.result = true;
|
this.info.data = prodList;
|
} catch (ex) {
|
this.info.msg = ex.message;
|
this.info.result = false;
|
}
|
ctx.body = this.info;
|
}
|
//#endregion
|
|
//#region 获得默认值 getDefaultValue
|
/**
|
* 获得默认值
|
*/
|
@Post()
|
public async getDefaultValue() {
|
let { ctx } = this;
|
let userInfo = await this.userInfo;
|
try {
|
let providerInfo = await this.dbRead.findOne(BaseProvider, {
|
select: ["provider_Id", "providerCode", "providerShortName"],
|
where: {
|
providerShortName: "默认供应商",
|
userProduct_Id: userInfo.userProduct_Id
|
}
|
});
|
let consignorInfo = await this.dbRead.findOne(BaseConsignor, {
|
select: ["consignor_Id", "consignorCode", "consignorName"],
|
where: {
|
consignorName: "默认货主",
|
userProduct_Id: userInfo.userProduct_Id
|
}
|
});
|
|
let defaultValue = {};
|
if (providerInfo) {
|
defaultValue = Object.assign(defaultValue, providerInfo);
|
}
|
if (consignorInfo) {
|
defaultValue = Object.assign(defaultValue, consignorInfo);
|
}
|
this.info.result = true;
|
this.info.data = defaultValue;
|
} catch (ex) {
|
this.info.msg = ex.message;
|
this.info.result = false;
|
}
|
ctx.body = this.info;
|
}
|
//#endregion
|
|
//#region 物料导入Excel
|
@Post()
|
public async importExcel() {
|
setTimeout(async () => {
|
await this.importExcelWork();
|
}, 0);
|
|
this.info.result = true;
|
this.info.msg = "开始上传...";
|
this.ctx.body = this.info;
|
}
|
//#endregion
|
|
//#region importExcelWork
|
private async importExcelWork() {
|
let { ctx } = this;
|
let body = ctx.request.body;
|
let redis = ctx.app.redis.clients.get("common"); // 将消息放入redis缓存
|
let fileUrl = body.fileUrl;
|
let userInfo = await ctx.helper.userInfo();
|
|
redis.expire(body.key, 5 * 60);
|
if (!fileUrl) {
|
this.setMsg("上传文件不存在", "red");
|
return;
|
}
|
|
try {
|
let rootPath = path.resolve(); // 获得根目录
|
let filePath = rootPath + path.sep + fileUrl.replace(/\//gi, path.sep); // 上传文件路径
|
var workbook = XLSX.readFile(filePath); //整个 excel 文档
|
var sheetNames = workbook.SheetNames; //获取所有工作薄名
|
var sheet1 = workbook.Sheets[sheetNames[0]]; //根据工作薄名获取工作薄
|
let dataList = XLSX.utils.sheet_to_json(sheet1); // 获得当前sheet表单数据转为json格式
|
|
//#region 验证数据正确性
|
this.info.result = true;
|
if (!dataList.length) {
|
this.setMsg("没有可导入的数据", "red");
|
return;
|
}
|
let i = 1,
|
successCount = 0,
|
updateCount = 0;
|
|
// 货主集合
|
let consignorInfo = await this.dbRead.findOne(BaseConsignor, {
|
userProduct_Id: userInfo.userProduct_Id
|
});
|
let providerInfo = await this.dbRead.findOne(BaseProvider, {
|
userProduct_Id: userInfo.userProduct_Id
|
});
|
// 物料集合
|
let productList = await this.dbRead.find(BaseProductInfo, {
|
userProduct_Id: userInfo.userProduct_Id,
|
productCode: In(dataList.map(item => "" + item["物料编号"]))
|
});
|
let dataRows = []; //数据集合
|
for (let row of dataList) {
|
i++;
|
let destinationName = row["目的地"];
|
if (destinationName) {
|
let destinationNames = destinationName.split("/");
|
let destination_Id = "";
|
for (let item of destinationNames) {
|
let desInfo = await this.dbRead.findOne(BaseDestination, {
|
destinationName: item
|
});
|
if (destination_Id) destination_Id += "/";
|
destination_Id += desInfo ? desInfo.destination_Id : "0";
|
}
|
}
|
|
let plateTypeCode = row["关联器具种类"];
|
let plateType = "";
|
let plateInfo = await this.dbRead.findOne(BasePlate, {
|
plateTypeCode: plateTypeCode
|
});
|
if (plateInfo) {
|
plateType = plateInfo.plateType;
|
}
|
let data = {
|
productName: "" + row["物料名称"],
|
productCode: row["物料编号"],
|
productModel: row["物料编号"],
|
// brand_Id: 0,
|
// brandName: "" + (row["品牌"] || ""),
|
// cIQName: row["英文名称"],
|
// netWeight: row["净重(kg)"] || row["单位净重"],
|
|
smallUnit: row["库存单位"],
|
bigUnit: row["PO单位"],
|
unitConvert: row["大单位与小单位换算关系"],
|
productSpec: row["物料规格"],
|
type_Id: 0,
|
typeName: row["类别名称"],
|
consignor_Id: consignorInfo.consignor_Id,
|
consignorCode: consignorInfo.consignorCode,
|
consignorName: consignorInfo.consignorName,
|
provider_Id: providerInfo.provider_Id,
|
providerCode: providerInfo.providerCode,
|
providerShortName: providerInfo.providerShortName,
|
weight: row["重量(kg)"],
|
ratePrice: row["物料单价"],
|
|
dayPrice: row["市场价"],
|
salePrice: row["销售价"],
|
vipPrice: row["VIP价"],
|
storageLower: row["库存预警下限"],
|
middleUnit: row["中单位"],
|
middleBarcode: row["中包装条码"],
|
middleUnitConvert: row["中单位换算(和小单位换算)"],
|
bigBarcode: row["大包装条码"],
|
isNeedPeriod: row["需效期管理"],
|
isFullContainerLoad: row["拆分出整拣单"],
|
shelfLifeDay: row["保质期(天)"],
|
purchasePrice: row["采购价(不含税)"],
|
rate: row["税率"],
|
originPlace: row["原产地"],
|
currency: row["币种"],
|
postMailCode: row["行邮税号"],
|
hSCode: row["HSCode"],
|
declareUnit: row["申报单位"],
|
declareQuantityOrder: row["申报数量"],
|
statutoryUnit2: row["第二法定单位"],
|
statutoryQty2: row["第二法定数量"],
|
aliasName: row["物料别名"],
|
long: row["长"],
|
wide: row["宽"],
|
height: row["高"],
|
cube: row["体积"],
|
UnitPackage: row["打包配置"],
|
UnitPackageType: row["打包配置类型"],
|
urchasePrice: row["采购价"],
|
DayPrice: row["销售价"],
|
packingQuantity: row["装箱数量"],
|
weightTolerance: row["重量公差"],
|
productionLineName: row["冲压生产线"],
|
orderType: row["出库类型"],
|
productEdition: row["物料版本"],
|
destinationName: row["目的地"],
|
//destination_Id: destination_Id,
|
plateType: plateType,
|
plateTypeCode: row["关联器具种类"],
|
remark: row["备注"],
|
expandFields: {} // 扩展字段
|
};
|
|
let expandFields = {}; // 扩展字段值
|
if (row["温层"]) {
|
expandFields["warmlayer"] = row["温层"];
|
}
|
if (row["停售提前时长"]) {
|
expandFields["tingshoushichang"] = row["停售提前时长"];
|
}
|
if (row["禁收效期系数"]) {
|
expandFields["jingshouxiaoqixishu"] = row["禁收效期系数"];
|
}
|
if (row["是否按批次分拣"]) {
|
expandFields["isBatchsorting"] = row["是否按批次分拣"];
|
}
|
data.expandFields = expandFields;
|
|
// #region 校验数据
|
if (!data.productModel) {
|
this.setMsg(`第${i}行、条形码为空`, "red");
|
updateCount++;
|
}
|
if (!data.productCode) {
|
this.setMsg(`第${i}行、物料编号为空`, "red");
|
updateCount++;
|
}
|
if (!data.productName) {
|
this.setMsg(`第${i}行、物料名称为空`, "red");
|
updateCount++;
|
}
|
// if (!data.brandName) {
|
// this.setMsg(`第${i}行、品牌为空`, "red");
|
// updateCount++;
|
// continue;
|
// }
|
if (!data.typeName) {
|
this.setMsg(`第${i}行、类别名称为空`, "red");
|
updateCount++;
|
continue;
|
}
|
// if (!data.consignorName) {
|
// this.setMsg(`第${i}行、货主名称为空`, "red");
|
// updateCount++;
|
// continue;
|
// }
|
// if (!data.providerShortName) {
|
// this.setMsg(`第${i}行、默认供应商为空`, "red");
|
// updateCount++;
|
// }
|
//校验货主
|
// let consignorInfo = consignorList.find(item => item.consignorName === data.consignorName);
|
// if (!consignorInfo) {
|
// this.setMsg(`第${i}行、${data.consignorName}货主不存在,请核实信息!`, "red");
|
// updateCount++;
|
// }
|
//校验供应商
|
// let providerInfo = providerList.find(item => item.providerShortName === data.providerShortName);
|
// if (!providerInfo) {
|
// this.setMsg(`第${i}行、${data.providerShortName}供应商不存在,请核实信息!`, "red");
|
// updateCount++;
|
// }
|
// 校验品牌
|
// let brandInfo = brandList.find(item => item.brandName === data.brandName);
|
// if (!brandInfo) {
|
// this.setMsg(`第${i}行、${data.brandName}品牌不存在,请核实信息!`, "red");
|
// updateCount++;
|
// }
|
// 校验类别
|
// let typeInfo = typeList.find(item => (item.typeName = data.typeName));
|
// if (!typeInfo) {
|
// this.setMsg(`第${i}行、${data.typeName}类别不存在,请核实信息!`, "red");
|
// updateCount++;
|
// }
|
// #endregion
|
// if (brandInfo.brand_Id && typeInfo.type_Id && consignorInfo.consignor_Id && providerInfo.provider_Id) {
|
// if (typeInfo.type_Id && consignorInfo.consignor_Id) {
|
// data.brand_Id = brandInfo.brand_Id;
|
// data.type_Id = typeInfo.type_Id;
|
// data.consignor_Id = consignorInfo.consignor_Id;
|
// data.consignorCode = consignorInfo.consignorCode;
|
// data.provider_Id = providerInfo.provider_Id;
|
// data.providerCode = providerInfo.providerCode;
|
// }
|
if (!data.cube) {
|
data.cube = data.height * data.long * data.height;
|
}
|
dataRows.push(data);
|
}
|
|
if (this.isMsgError) {
|
this.setMsg(`导入数据有错误,请处理好重新导入`, "red");
|
this.setMsg("-1");
|
return;
|
}
|
//#endregion
|
|
i = 1;
|
successCount = 0;
|
updateCount = 0;
|
let rows = []; // 准备更新或者新增的数据
|
for (let data of dataRows) {
|
i++;
|
// 根据物料编号查询物料是否存在
|
let dataInfo = productList.find(item => item.productCode === data.productCode);
|
let isadd = true;
|
if (!dataInfo) {
|
dataInfo = new BaseProductInfo(); // 新建数据
|
isadd = false;
|
}
|
// 扩展字段处理
|
// let expandFields = JSON.parse(dataInfo.expandFields);
|
let expandFields = data.expandFields;
|
expandFields = Object.assign(expandFields, data.expandFields);
|
data.expandFields = JSON.stringify(expandFields);
|
|
dataInfo = Object.assign(dataInfo, data); // 合并数据
|
await this.setAccountInfo(dataInfo, "product_Id");
|
if (isadd == true) {
|
this.setMsg(`第${i}行、${data.productCode}已存在,正在更新...`);
|
updateCount++;
|
// 物料审核状态
|
data.auditing = 0;
|
rows.push(dataInfo);
|
} else {
|
this.setMsg(`第${i}行、${data.productCode}正在导入...`);
|
// let productCode = await this.ctx.service.common.getCodeRegular(254);
|
// data.productCode = productCode;
|
successCount++;
|
rows.push(dataInfo);
|
}
|
if (i % 50 === 0) {
|
await this.dbWrite.save(BaseProductInfo, rows);
|
rows = [];
|
}
|
}
|
if (rows.length > 0) {
|
await this.dbWrite.save(BaseProductInfo, rows);
|
rows = [];
|
}
|
|
this.setMsg(`导入成功,新增${successCount}条,更新${updateCount}条`, "blue");
|
} catch (ex) {
|
this.setMsg("出现异常:" + ex.message, "red");
|
this.info.result = false;
|
}
|
this.setMsg("-1");
|
}
|
//#endregion
|
|
//#region 根据类型查到相对应的商品 getListByPlateTypeEU
|
/**
|
* 根据类型查到相对应的商品
|
*/
|
@Post()
|
public async getListByPlateTypeEU() {
|
let { ctx } = this;
|
let body = ctx.body;
|
let userInfo = await this.userInfo;
|
|
try {
|
let productInfo = await this.dbRead.find(BaseProductInfo, {
|
select: ["product_Id", "productCode", "productName"],
|
where: {
|
plateType_Id: body.plateType_Id,
|
plateType: body.plateType,
|
userProduct_Id: userInfo.userProduct_Id
|
}
|
});
|
|
this.info.result = true;
|
this.info.data = productInfo;
|
} catch (ex) {
|
this.info.msg = ex.message;
|
this.info.result = false;
|
}
|
ctx.body = this.info;
|
}
|
//#endregion
|
|
//#region 根据类型查到相对应的商品 getListByPlateType
|
/**
|
* 根据类型查到相对应的商品
|
*/
|
@Post()
|
public async getListByPlateType() {
|
let { ctx } = this;
|
let userInfo = await this.userInfo;
|
|
try {
|
let productInfo = await this.dbRead.find(BaseProductInfo, {
|
select: ["product_Id", "productCode", "productName"],
|
where: {
|
userProduct_Id: userInfo.userProduct_Id
|
}
|
});
|
|
this.info.result = true;
|
this.info.data = productInfo;
|
} catch (ex) {
|
this.info.msg = ex.message;
|
this.info.result = false;
|
}
|
ctx.body = this.info;
|
}
|
//#endregion
|
|
//#region 更新图片 updateImages
|
/**
|
* 更新图片 updateImages
|
*/
|
@Post()
|
public async updateImages() {
|
let { ctx } = this;
|
let product_Id = Number(this.body.product_Id);
|
if (!product_Id) {
|
this.info.msg = "商品不存在";
|
this.info.result = false;
|
ctx.body = this.info;
|
return;
|
}
|
|
try {
|
await this.dbWrite.update(BaseProductInfo, this.body.product_Id, {
|
images: this.body.images
|
});
|
|
this.info.result = true;
|
this.info.msg = "图片更新成功";
|
} catch (ex) {
|
this.info.msg = ex.message;
|
this.info.result = false;
|
}
|
ctx.body = this.info;
|
}
|
//#endregion
|
|
//#region 获取器具类别编号 getPlateTypeCode
|
/**
|
* 获取器具类别编号 getPlateTypeCode
|
*/
|
@Post()
|
public async getPlateType() {
|
let { ctx } = this;
|
|
try {
|
let dataInfo = await this.dbRead.findOne(BasePlate, {
|
plateTypeCode: this.body.plateTypeCode
|
});
|
|
this.info.result = true;
|
this.info.data = dataInfo;
|
} catch (ex) {
|
this.info.msg = ex.message;
|
this.info.result = false;
|
}
|
ctx.body = this.info;
|
}
|
//#endregion
|
//#region getList
|
/**
|
* 获得TableSelect获得物料信息
|
*/
|
@Post()
|
public async getData() {
|
let userInfo = await this.userInfo;
|
let where: any = {
|
userProduct_Id: userInfo.userProduct_Id
|
};
|
if (this.body.name) {
|
where.productCode = this.body.name;
|
}
|
if (this.body.ids) {
|
where.product_Id = In(this.body.ids);
|
}
|
var dataList = await this.dbRead.find(BaseProductInfo, {
|
where: where
|
});
|
if (dataList.length == 0) {
|
this.info.result = false;
|
this.info.data = dataList;
|
} else {
|
this.info.result = true;
|
this.info.data = dataList;
|
}
|
|
this.ctx.body = this.info;
|
}
|
//#endregion
|
}
|