import BaseController from "../baseController";
|
import { Post, Prefix } from "egg-shell-decorators";
|
import { BaseStorage } from "../../entity/basicInfo/base/baseStorage";
|
import { SaleOrder } from "../../entity/outbound/sale/saleOrder";
|
import * as mssql from "mssql";
|
import { BaseConsignor } from "../../entity/basicInfo/consignor/baseConsignor";
|
import { SaleOrderList } from "../../entity/outbound/sale/saleOrderList";
|
import { BaseProductInfo } from "../../entity/basicInfo/base/baseProductInfo";
|
|
@Prefix("/jiaoma")
|
export default class JiaoMaController extends BaseController {
|
//#region 寻源结果接口
|
/**
|
* 寻源结果接口
|
*/
|
@Post()
|
public async orderTrack() {
|
let { ctx } = this;
|
let body = ctx.body;
|
let userInfo = await this.userInfo;
|
let db = this.app.mongodb;
|
|
try {
|
// 记录数据到mongodb日志中
|
let collection = db.collection("apiJiaoMaOrderTrack");
|
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("apiJiaoMaOrderTrack将数据保存至MongoDB after:" + JSON.stringify(re));
|
} catch {}
|
|
try {
|
let orderId = this.body.orderId;
|
if (!orderId) {
|
let erroColl = db.collection("apiLogs");
|
let data = {
|
type: "角马寻源",
|
msg: `订单ID不存在`,
|
createDate: new Date()
|
};
|
await erroColl.insert(data);
|
|
this.info.result = false;
|
this.info.msg = "推送失败";
|
ctx.body = this.info;
|
return;
|
}
|
|
// 获取仓库信息
|
let storageInfo = await this.dbRead.findOne(BaseStorage, {
|
storageCode: body.storeCode,
|
userProduct_Id: userInfo.userProduct_Id
|
});
|
// 仓库不存在, 01 02 都是失败 只有00才是成功
|
if (!storageInfo || this.body.result != "00") {
|
let erroColl = db.collection("apiLogs");
|
let data = {
|
type: "角马寻源",
|
msg: `仓库名称【${body.storeName}】不存在,采用默认森泽顺义C仓`,
|
order_Id: orderId,
|
createDate: new Date()
|
};
|
await erroColl.insert(data);
|
|
// 默认主仓
|
await this.dbWrite.update(SaleOrder, orderId, {
|
storage_Id: 73,
|
storageName: "森泽顺义C仓"
|
});
|
|
this.info.result = false;
|
this.info.msg = data.msg;
|
ctx.body = this.info;
|
return;
|
}
|
|
// 获取货主信息
|
let consignorInfo = await this.dbRead.findOne(BaseConsignor, {
|
consignorCode: body.storeCode,
|
userProduct_Id: userInfo.userProduct_Id
|
});
|
if (!consignorInfo) {
|
let erroColl = db.collection("apiLogs");
|
let data = {
|
type: "角马寻源",
|
msg: `寻源失败,货主名称【${body.storeName}】不存在`,
|
order_Id: orderId,
|
createDate: new Date()
|
};
|
await erroColl.insert(data);
|
|
this.info.result = false;
|
this.info.msg = data.msg;
|
ctx.body = this.info;
|
return;
|
}
|
|
// 更新仓库
|
await this.dbWrite.update(SaleOrder, orderId, {
|
storage_Id: storageInfo.storage_Id,
|
storageName: storageInfo.storageName,
|
consignor_Id: consignorInfo.consignor_Id,
|
consignorCode: consignorInfo.consignorCode,
|
consignorName: consignorInfo.consignorName
|
});
|
|
this.info.msg = "推送成功";
|
this.info.result = true;
|
let logColl = db.collection("apiLogs");
|
let data = {
|
type: "角马寻源",
|
msg: "寻源成功,修改成功为:" + storageInfo.storageName,
|
order_Id: orderId,
|
createDate: new Date()
|
};
|
await logColl.insert(data);
|
} catch (error) {
|
this.info.result = false;
|
this.info.data = error.message;
|
}
|
ctx.body = this.info;
|
}
|
//#endregion
|
|
//#region 订单状态回调接口
|
/**
|
* 订单状态回调接口
|
*/
|
@Post()
|
public async orderStatus() {
|
let { ctx } = this;
|
let body = ctx.body;
|
let userInfo = await this.userInfo;
|
let db = this.app.mongodb;
|
let orderId = this.body.orderId;
|
|
try {
|
// 记录数据到mongodb日志中
|
let db = this.app.mongodb;
|
let logColl = db.collection("apiLogs");
|
let collection = db.collection("apiJiaoMaOrderStatus");
|
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("apiJiaoMaOrderStatus将数据保存至MongoDB after:" + JSON.stringify(re));
|
|
if (body.status === "09") {
|
// 09-拒收退货,执行自动退货
|
let erroColl = db.collection("apiLogs");
|
let data = {
|
type: "角马寻源",
|
order_Id: orderId,
|
msg: `09-拒收退货,执行自动退货`,
|
createDate: new Date()
|
};
|
await erroColl.insert(data);
|
|
const connection: any = await this.dbWrite.connection;
|
let request = new mssql.Request(connection.driver.master);
|
request.input("order_Id", body.orderId);
|
request.input("user_Id", userInfo.user_Id);
|
request.output("outMsg", mssql.NVarChar(2000));
|
let result = await request.execute("sp_Sale_Return_AutoShelve");
|
let outMsg = result.output.outMsg;
|
|
if (outMsg) {
|
this.info.msg = outMsg;
|
this.info.result = false;
|
} else {
|
this.info.msg = "退货成功";
|
this.info.result = true;
|
}
|
} else if (body.status === "07") {
|
// 07-门店拒单
|
let erroColl = db.collection("apiLogs");
|
let data: any = {};
|
|
// 默认主仓
|
await this.dbWrite.update(SaleOrder, orderId, {
|
storage_Id: 73,
|
storageName: "森泽顺义C仓"
|
});
|
|
// 修改货主
|
let orderDetail = await this.dbRead.findOne(SaleOrderList, {
|
order_Id: orderId
|
});
|
if (orderDetail) {
|
let prodInfo = await this.dbRead.findOne(BaseProductInfo, orderDetail.product_Id);
|
await this.dbWrite.update(SaleOrder, orderId, {
|
consignor_Id: prodInfo.consignor_Id,
|
consignorName: prodInfo.consignorName
|
});
|
data = {
|
type: "角马寻源",
|
order_Id: orderId,
|
msg: `07-角马门店拒单,采用默认森泽顺义C仓,货主:${prodInfo.consignorName}`,
|
createDate: new Date()
|
};
|
} else {
|
await this.dbWrite.update(SaleOrder, orderId, {
|
consignor_Id: null,
|
consignorName: null
|
});
|
data = {
|
type: "角马寻源",
|
order_Id: orderId,
|
msg: `07-角马门店拒单,采用默认森泽顺义C仓,货主清空`,
|
createDate: new Date()
|
};
|
}
|
await erroColl.insert(data);
|
|
this.info.result = true;
|
this.info.msg = data.msg;
|
} else if (body.status === "02") {
|
// 02-门店已接单,执行自动出库
|
const connection: any = await this.dbWrite.connection;
|
let request = new mssql.Request(connection.driver.master);
|
request.input("order_Id", orderId);
|
request.input("user_Id", userInfo.user_Id);
|
request.output("outMsg", mssql.NVarChar(2000));
|
let result = await request.execute("sp_Sale_Order_AutoOut");
|
let outMsg = result.output.outMsg;
|
|
if (outMsg) {
|
this.info.msg = outMsg;
|
this.info.result = false;
|
let logColl = db.collection("apiLogs");
|
let data = {
|
type: "角马寻源",
|
msg: "02-门店已接单,状态回传自动出库失败:" + outMsg,
|
order_Id: orderId,
|
createDate: new Date()
|
};
|
await logColl.insert(data);
|
} else {
|
this.info.msg = "角马订单自动出库成功";
|
this.info.result = true;
|
let logColl = db.collection("apiLogs");
|
let data = {
|
type: "角马寻源",
|
msg: "02-门店已接单,角马订单自动出库成功",
|
order_Id: orderId,
|
createDate: new Date()
|
};
|
await logColl.insert(data);
|
}
|
} else {
|
this.info.result = true;
|
this.info.msg = "推送成功";
|
}
|
let data = {
|
type: "orderStatus",
|
order_Id: body.orderId,
|
msg: `执行自动退货:${this.info.msg}, orderId=${body.orderId}`,
|
createDate: new Date()
|
};
|
await logColl.insert(data);
|
} catch (e) {
|
let logColl = db.collection("apiLogs");
|
let data = {
|
type: "orderStatus",
|
order_Id: body.orderId,
|
msg: `角马状态回传失败, orderId=${body.orderId},error:${e.message}`,
|
createDate: new Date()
|
};
|
await logColl.insert(data);
|
this.info.result = false;
|
}
|
ctx.body = this.info;
|
}
|
//#endregion
|
|
//#region 查找库存
|
/**
|
* 查找库存
|
*/
|
@Post()
|
public async findStock() {
|
let { ctx } = this;
|
let body = ctx.body;
|
let userInfo = await this.userInfo;
|
|
let stnCode = this.body.stnCode;
|
let productCodes = this.body.productCodes;
|
if (!productCodes) {
|
this.info.result = false;
|
this.info.msg = "物料编号为空";
|
ctx.body = this.info;
|
return;
|
}
|
try {
|
// 记录数据到mongodb日志中
|
let db = this.app.mongodb;
|
let collection = db.collection("apiJiaoMaFindStock");
|
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("apiJiaoMaFindStock 将数据保存至MongoDB after:" + JSON.stringify(re));
|
} catch {}
|
|
try {
|
let storageInfo = await this.dbRead.findOne(BaseStorage, {
|
userProduct_Id: userInfo.userProduct_Id,
|
storageCode: stnCode
|
});
|
if (!storageInfo) {
|
this.info.result = false;
|
this.info.data = {
|
productStockList: [],
|
stnCode: stnCode
|
};
|
this.info.msg = "门店仓库不存在";
|
ctx.body = this.info;
|
return;
|
}
|
|
let sql = `SELECT Product_Id AS productId, MAX(productName) AS productName, productCode, NULL AS productPic, SUM(productStorage) AS stock, 0 AS stockStatus
|
FROM dbo.Base_ProductPosition WHERE productStorage>0
|
AND UserProduct_Id=@0
|
AND storage_Id=@2
|
AND ProductCode IN(Select col from dbo.f_split(@1, ','))
|
GROUP BY Product_Id, productCode`;
|
let ppList = await this.dbRead.query(sql, [userInfo.userProduct_Id, productCodes, storageInfo.storage_Id]);
|
this.info.result = true;
|
this.info.state = "00";
|
this.info.msg = "操作成功";
|
this.info.data = {
|
productStockList: ppList,
|
stnCode: stnCode
|
};
|
} catch (error) {
|
this.info.result = false;
|
this.info.data = error.message;
|
}
|
ctx.body = this.info;
|
}
|
//#endregion
|
|
//#region 查找库存-分货主
|
/**
|
* 查找库存-分货主
|
*/
|
@Post()
|
public async findStock2() {
|
let { ctx } = this;
|
let body = ctx.body;
|
let userInfo = await this.userInfo;
|
|
let stnCode = this.body.stnCode;
|
let productCodes = this.body.productCodes;
|
if (!productCodes) {
|
this.info.result = false;
|
this.info.msg = "物料编号为空";
|
ctx.body = this.info;
|
return;
|
}
|
try {
|
// 记录数据到mongodb日志中
|
let db = this.app.mongodb;
|
let collection = db.collection("apiJiaoMaFindStock");
|
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("apiJiaoMaFindStock 将数据保存至MongoDB after:" + JSON.stringify(re));
|
} catch {}
|
|
try {
|
let storageInfo = await this.dbRead.findOne(BaseStorage, {
|
storageCode: stnCode,
|
userProduct_Id: userInfo.userProduct_Id
|
});
|
if (!storageInfo) {
|
this.info.result = false;
|
this.info.data = {
|
productStockList: [],
|
stnCode: stnCode
|
};
|
this.info.msg = "门店仓库不存在";
|
ctx.body = this.info;
|
return;
|
}
|
|
let sql = `SELECT Product_Id AS productId, MAX(productName) AS productName, productCode, NULL AS productPic, SUM(productStorage) AS stock, 0 AS stockStatus, consignorCode
|
FROM dbo.Base_ProductPosition WHERE productStorage>0
|
AND UserProduct_Id=@0
|
AND storage_Id=@2
|
AND consignorCode=@3
|
AND ProductCode IN(Select col from dbo.f_split(@1, ','))
|
GROUP BY Product_Id, productCode, consignorCode`;
|
let ppList = await this.dbRead.query(sql, [userInfo.userProduct_Id, productCodes, storageInfo.storage_Id, stnCode]);
|
this.info.result = true;
|
this.info.state = "00";
|
this.info.msg = "操作成功";
|
this.info.data = {
|
productStockList: ppList,
|
stnCode: stnCode
|
};
|
} catch (error) {
|
this.info.result = false;
|
this.info.data = error.message;
|
}
|
ctx.body = this.info;
|
}
|
//#endregion
|
}
|