import { default as BaseController } from "../../baseController";
|
import { Post } from "egg-shell-decorators";
|
import { BaseStorageArea } from "../../../entity/basicInfo/base/baseStorageArea";
|
import { BasePosition } from "../../../entity/basicInfo/base/basePosition";
|
import { BaseStorageShelve } from "../../../entity/basicInfo/position/baseStorageShelve";
|
import { vBaseProductPosition } from "../../../entity/storage/product/vBaseProductPosition";
|
import { MoreThan } from "typeorm";
|
// import { BasePlateType } from "../../../entity/basicInfo/base/basePlateType";
|
|
export default class PositionController extends BaseController {
|
//#region GetStorageAreaList 获得库区列表
|
/**
|
* 获得库区列表
|
*/
|
@Post()
|
public async getStorageAreaList() {
|
let { ctx } = this;
|
let body = ctx.request.body;
|
let userInfo = await ctx.helper.userInfo();
|
|
try {
|
var areaList = await this.dbRead.find(BaseStorageArea, {
|
where: {
|
storage_Id: body.storage_Id,
|
userProduct_Id: userInfo.userProduct_Id
|
},
|
order: {
|
orderNo: "DESC",
|
storageArea_Id: "ASC"
|
}
|
});
|
|
this.info.result = true;
|
this.info.data = areaList;
|
|
ctx.body = this.info;
|
return;
|
} catch (ex) {
|
let msg = "异常错误信息:" + ex.message;
|
this.info.result = false;
|
this.info.msg = msg;
|
ctx.body = this.info;
|
return;
|
}
|
}
|
//#endregion
|
|
//#region GetStorageAreaInfo 获得库区信息
|
/**
|
* 加载下拉框数据
|
*/
|
@Post()
|
public async getStorageAreaInfo() {
|
let { ctx } = this;
|
let body = ctx.request.body;
|
let userInfo = await ctx.helper.userInfo();
|
|
try {
|
var areaInfo = await this.dbRead.findOne(BaseStorageArea, {
|
storage_Id: body.storage_Id,
|
areaCode: body.areaCode,
|
userProduct_Id: userInfo.userProduct_Id
|
});
|
if (areaInfo) {
|
this.info.result = true;
|
this.info.data = areaInfo;
|
} else {
|
this.info.result = false;
|
this.info.msg = "库区不存在";
|
}
|
} catch (ex) {
|
let msg = "异常错误信息:" + ex.message;
|
this.info.result = false;
|
this.info.msg = msg;
|
}
|
ctx.body = this.info;
|
}
|
//#endregion
|
|
//#region LoadShelveList 获得库区信息
|
/**
|
* 获得库区信息
|
*/
|
@Post()
|
public async loadShelveList() {
|
let { ctx } = this;
|
let body = ctx.request.body;
|
|
try {
|
var storageArea = await this.dbRead.findOne(BaseStorageArea, {
|
storage_Id: body.storage_Id,
|
areaCode: body.areaCode
|
});
|
|
if (storageArea != null && storageArea.jsonData && storageArea.jsonData != "[]") {
|
this.info.result = true;
|
let dataInfo = JSON.parse(storageArea.jsonData);
|
dataInfo = ctx.helper.arrayToCase(dataInfo);
|
this.info.data = dataInfo;
|
} else {
|
var areaInfo = await this.dbRead.findOne(BaseStorageArea, {
|
storage_Id: body.storage_Id,
|
areaCode: body.areaCode
|
});
|
|
this.info.result = true;
|
this.info.data = JSON.parse(areaInfo.jsonData);
|
}
|
|
ctx.body = this.info;
|
return;
|
} catch (ex) {
|
let msg = "异常错误信息:" + ex.message;
|
this.info.result = false;
|
this.info.msg = msg;
|
ctx.body = this.info;
|
return;
|
}
|
}
|
//#endregion
|
|
//#region getPositionList 获得货位列表
|
/**
|
* 加载下拉框数据
|
*/
|
@Post()
|
public async getPositionList() {
|
let { ctx } = this;
|
let body = ctx.request.body;
|
let where: any = {
|
storage_Id: body.storage_Id
|
};
|
if (body.areaCode) {
|
where.areaCode = body.areaCode;
|
}
|
if (body.positionType) {
|
where.positionType = body.positionType;
|
}
|
|
try {
|
var dataList = await this.dbRead.find(BasePosition, {
|
select: ["positionName", "positionType", "enable", "isLocked", "isFreeze", "positionLength"],
|
where: where,
|
order: { position_Id: "ASC" }
|
});
|
|
this.info.result = true;
|
this.info.data = dataList;
|
|
ctx.body = this.info;
|
return;
|
} catch (ex) {
|
let msg = "异常错误信息:" + ex.message;
|
this.info.result = false;
|
this.info.msg = msg;
|
ctx.body = this.info;
|
return;
|
}
|
}
|
//#endregion
|
|
//#region loadPositionData 获得货位数据
|
/**
|
* 获得货位数据
|
*/
|
@Post()
|
public async loadPositionData() {
|
let { ctx } = this;
|
let body = ctx.request.body;
|
|
try {
|
var sql = `SELECT productPosition_Id, storage_Id, storageName, positionName, productStorage, orignStorage, validQuantity,
|
placeholderStorage, maxCapacity,PositionLength
|
FROM vBase_ProductPositionGroup_Position
|
WHERE (storage_Id = @0) AND productStorage>0
|
AND (positionName in(Select positionName from Base_Position Where storage_Id=@0 And areaCode=@1))
|
`;
|
var dataList = await this.dbRead.query(sql, [body.storage_Id, body.areaCode]);
|
|
this.info.result = true;
|
this.info.data = dataList;
|
|
ctx.body = this.info;
|
return;
|
} catch (ex) {
|
let msg = "异常错误信息:" + ex.message;
|
this.info.result = false;
|
this.info.msg = msg;
|
ctx.body = this.info;
|
return;
|
}
|
}
|
//#endregion
|
|
//#region getPositionStorageList 获得货位列表
|
/**
|
* 获得货位列表
|
*/
|
@Post()
|
public async getPositionStorageList() {
|
let { ctx } = this;
|
let body = ctx.request.body;
|
|
try {
|
var dataList = await this.dbRead.find(vBaseProductPosition, {
|
select: [
|
"className",
|
"positionName",
|
"productCode",
|
"productName",
|
"productStorage",
|
"totalWeight",
|
"purchasePrice",
|
"purchaseMoney",
|
"inStorageDate"
|
],
|
where: {
|
userProduct_Id: (await this.userInfo).userProduct_Id,
|
storage_Id: body.storage_Id,
|
areaCode: body.areaCode,
|
positionName: body.positionName,
|
productStorage: MoreThan(0)
|
},
|
order: {
|
productPosition_Id: "ASC"
|
}
|
});
|
|
this.info.result = true;
|
this.info.data = dataList;
|
|
ctx.body = this.info;
|
return;
|
} catch (ex) {
|
let msg = "异常错误信息:" + ex.message;
|
this.info.result = false;
|
this.info.msg = msg;
|
ctx.body = this.info;
|
return;
|
}
|
}
|
//#endregion
|
|
//#region save
|
@Post()
|
public async save() {
|
let { ctx } = this;
|
let body = ctx.request.body;
|
let userInfo = await ctx.helper.userInfo();
|
|
try {
|
//#region 版本权限控制
|
if (!(await ctx.service.common.isSaaSAuth("库区数量"))) {
|
this.info.result = false;
|
this.info.msg = "当前版本不支持该操作";
|
ctx.body = this.info;
|
return;
|
} else {
|
var num = await ctx.service.common.getAuthNum("库区数量");
|
if (num) {
|
var currentCount = await this.dbRead.find(BaseStorageArea, {
|
userProduct_Id: userInfo.userProduct_Id
|
});
|
if (currentCount && currentCount.length >= num) {
|
this.info.result = false;
|
this.info.msg = "超出当前版本数量限制,请升级为更高版本!";
|
|
ctx.body = this.info;
|
return;
|
}
|
}
|
}
|
//#endregion
|
|
let objAreaData = body.areaData;
|
let storage_Id = objAreaData.storage_Id;
|
let action = objAreaData.action;
|
let storageName = objAreaData.storageName;
|
let areaCode = objAreaData.areaCode;
|
let positionRegular = objAreaData.positionRegular;
|
let channelRegular = objAreaData.channelRegular;
|
let shelvesRegular = objAreaData.shelvesRegular;
|
let rowRegular = objAreaData.rowRegular;
|
let columnRegular = objAreaData.columnRegular;
|
|
let pickMode = objAreaData.pickMode;
|
let shelveMode = objAreaData.shelveMode;
|
let positionType = objAreaData.positionType;
|
let channelNum = objAreaData.channelNum;
|
let maxCapacity = objAreaData.maxCapacity;
|
let rowNum = objAreaData.rowNum;
|
let columnNum = objAreaData.columnNum;
|
let shelveNumA_1 = shelveMode == "地堆" ? 0 : objAreaData.shelveNumA_1;
|
let shelveNumA_2 = shelveMode == "地堆" ? 0 : objAreaData.shelveNumA_2;
|
let shelveNumB_1 = shelveMode == "地堆" ? 0 : objAreaData.shelveNumB_1;
|
let shelveNumB_2 = shelveMode == "地堆" ? 0 : objAreaData.shelveNumB_2;
|
if (!positionRegular) {
|
this.info.result = false;
|
this.info.msg = "货位编码规则不存在,无法生成货位!";
|
|
ctx.body = this.info;
|
return;
|
}
|
|
let thermoclineType = objAreaData.thermoclineType;
|
let maxWeight = objAreaData.maxWeight;
|
let maxBeatNumber = objAreaData.maxBeatNumber;
|
let inventoryRate = objAreaData.inventoryRate;
|
//#region 库区校验
|
let areaInfo = await this.dbRead.findOne(BaseStorageArea, {
|
storage_Id: storage_Id,
|
areaCode: areaCode
|
});
|
if (areaInfo == null) {
|
areaInfo = new BaseStorageArea();
|
areaInfo.createDate = new Date();
|
areaInfo.createID = userInfo.user_Id;
|
areaInfo.creator = userInfo.userTrueName;
|
} else {
|
//区域是否已经生成过库区
|
if (action == "add") {
|
this.info.result = false;
|
this.info.msg = "库区编号已经使用了,不允许重复创建,请选择修改模式!";
|
|
ctx.body = this.info;
|
return;
|
}
|
areaInfo.modifyDate = new Date();
|
areaInfo.modifyID = userInfo.user_Id;
|
areaInfo.modifier = userInfo.userTrueName;
|
}
|
areaInfo.maxCapacity = maxCapacity;
|
areaInfo.channelNum = channelNum;
|
areaInfo.columnNum = columnNum;
|
areaInfo.rowNum = rowNum;
|
areaInfo.pickMode = pickMode;
|
areaInfo.shelveMode = shelveMode;
|
areaInfo.shelveNumA_1 = shelveNumA_1;
|
areaInfo.shelveNumA_2 = shelveNumA_2;
|
areaInfo.shelveNumB_1 = shelveNumB_1;
|
areaInfo.shelveNumB_2 = shelveNumB_2;
|
areaInfo.storage_Id = storage_Id;
|
areaInfo.areaCode = areaCode;
|
areaInfo.positionType = positionType;
|
areaInfo.storageName = storageName;
|
areaInfo.positionRegular = positionRegular;
|
areaInfo.channelRegular = channelRegular;
|
areaInfo.shelvesRegular = shelvesRegular;
|
areaInfo.rowRegular = rowRegular;
|
areaInfo.columnRegular = columnRegular;
|
areaInfo.jsonData = JSON.stringify(body.shelveDataList); // 存放自定义货架信息
|
|
areaInfo.platCorpName = userInfo.platCorpName;
|
areaInfo.platUserCode = userInfo.platUserCode;
|
areaInfo.platUserName = userInfo.platUserName;
|
areaInfo.platUser_Id = userInfo.platUser_Id;
|
areaInfo.userProductAlias = userInfo.userProductAlias;
|
areaInfo.userProductCode = userInfo.userProductCode;
|
areaInfo.userProduct_Id = userInfo.userProduct_Id;
|
|
areaInfo.thermoclineType = thermoclineType;
|
areaInfo.maxWeight = maxWeight;
|
areaInfo.maxBeatNumber = maxBeatNumber;
|
areaInfo.inventoryRate = inventoryRate;
|
|
await this.dbWrite.save(areaInfo);
|
//#endregion
|
|
let shelveDataList = objAreaData.shelveDataList; //货架信息列表
|
this.saveShelve(shelveDataList); //保存自定义货架信息
|
|
//通道
|
for (let channelIndex = 1; channelIndex <= channelNum; channelIndex++) {
|
let channelCode = await this.channelCodeCreator(channelIndex, channelRegular); //(channelIndex < 10 ? "0" : "") + channelIndex;
|
if (shelveMode == "地堆") {
|
//#region 货架编码
|
//let shelveCode = "01";
|
let shelveCode = await this.shelveCodeCreator(1, shelvesRegular);
|
let shelveInfo = await this.findShelve(shelveDataList, storage_Id, areaCode, channelCode, shelveCode);
|
let _rowNum = rowNum;
|
let _columnNum = columnNum;
|
if (shelveInfo != null) {
|
_rowNum = shelveInfo.rowNum;
|
_columnNum = shelveInfo.columnNum;
|
}
|
//行数据
|
for (let rowIndex = 1; rowIndex <= _rowNum; rowIndex++) {
|
let rowCode = await this.rowCodeCreator(rowIndex, rowRegular); //(rowIndex < 10 ? "0" : "") + rowIndex;
|
//列数据
|
for (let columnIndex = 1; columnIndex <= _columnNum; columnIndex++) {
|
//#region 货位编码
|
let columnCode = await this.columnCodeCreator(columnIndex, columnRegular); //(columnIndex < 10 ? "0" : "") + columnIndex;
|
var positionTmpl = positionRegular; // "{库区}-{通道}{货架}{层}{列}";
|
if (shelveInfo != null) {
|
//自定义编码规则
|
var _positionRegular = "";
|
var _rowNo = (rowIndex < 10 ? "0" : "") + rowIndex;
|
var _colNo = (columnIndex < 10 ? "0" : "") + columnIndex;
|
if (shelveInfo.columnConfigs != null) {
|
// 列级别配置
|
for (var item of shelveInfo.columnConfigs) {
|
if (item.colNo == _colNo) {
|
_positionRegular = item.positionRegular;
|
}
|
}
|
}
|
if (!_positionRegular && shelveInfo.rowConfigs != null) {
|
// 层级别配置
|
for (var item of shelveInfo.rowConfigs) {
|
if (item.rowNo == _rowNo) {
|
_positionRegular = item.positionRegular;
|
}
|
}
|
}
|
|
if (!_positionRegular) {
|
// 通道级别配置
|
positionTmpl = shelveInfo.positionRegular;
|
} else {
|
positionTmpl = _positionRegular;
|
}
|
}
|
positionTmpl = positionTmpl.replace("{库区}", areaCode);
|
positionTmpl = positionTmpl.replace("{通道}", channelCode);
|
positionTmpl = positionTmpl.replace("{货架}", shelveCode);
|
positionTmpl = positionTmpl.replace("{层}", rowCode);
|
positionTmpl = positionTmpl.replace("{列}", columnCode);
|
//#endregion
|
|
//#region 创建货位
|
let posInfo = await this.dbRead.findOne(BasePosition, {
|
storage_Id: storage_Id,
|
areaCode: areaCode,
|
positionName: positionTmpl
|
});
|
if (posInfo == null) {
|
posInfo = new BasePosition();
|
posInfo.createDate = new Date();
|
posInfo.createID = userInfo.user_Id;
|
posInfo.creator = userInfo.userTrueName;
|
posInfo.enable = 1;
|
posInfo.isMixProduct = 1;
|
posInfo.isLocked = 0;
|
} else {
|
posInfo.modifyDate = new Date();
|
posInfo.modifyID = userInfo.user_Id;
|
posInfo.modifier = userInfo.userTrueName;
|
}
|
posInfo.isFreeze = 0;
|
posInfo.orderNo = 0;
|
posInfo.parentId = 0;
|
posInfo.positionName = positionTmpl;
|
posInfo.positionType = positionType; //常规货位
|
posInfo.storage_Id = storage_Id;
|
posInfo.storageName = storageName;
|
posInfo.maxCapacity = maxCapacity;
|
|
posInfo.channelCode = channelCode;
|
posInfo.columnCode = columnCode;
|
posInfo.shelveCode = shelveCode;
|
posInfo.rowCode = rowCode;
|
posInfo.columnCode = columnCode;
|
posInfo.areaCode = areaCode;
|
posInfo.lineCode = "A面";
|
posInfo.shelveMode = shelveMode;
|
|
posInfo.platCorpName = userInfo.platCorpName;
|
posInfo.platUserCode = userInfo.platUserCode;
|
posInfo.platUserName = userInfo.platUserName;
|
posInfo.platUser_Id = userInfo.platUser_Id;
|
posInfo.userProductAlias = userInfo.userProductAlias;
|
posInfo.userProductCode = userInfo.userProductCode;
|
posInfo.userProduct_Id = userInfo.userProduct_Id;
|
|
await this.dbWrite.save(posInfo);
|
//#endregion
|
}
|
}
|
//#endregion
|
} else {
|
//#region A面货架
|
for (let ShelveAIndex = shelveNumA_1; ShelveAIndex <= shelveNumA_2; ShelveAIndex++) {
|
let shelveCode = await this.shelveCodeCreator(ShelveAIndex, shelvesRegular); //(ShelveAIndex < 10 ? "0" : "") + ShelveAIndex;
|
let shelveInfo = await this.findShelve(shelveDataList, storage_Id, areaCode, channelCode, shelveCode);
|
let _rowNum = rowNum;
|
let _columnNum = columnNum;
|
if (shelveInfo != null) {
|
_rowNum = shelveInfo.rowNum;
|
_columnNum = shelveInfo.columnNum;
|
}
|
//行数据
|
for (let rowIndex = 1; rowIndex <= _rowNum; rowIndex++) {
|
let rowCode = await this.rowCodeCreator(rowIndex, rowRegular);
|
//列数据
|
for (let columnIndex = 1; columnIndex <= _columnNum; columnIndex++) {
|
//#region 货位编码
|
let colNo = columnIndex;
|
if (pickMode == "AB面奇偶型") {
|
if (ShelveAIndex == 1) colNo = columnIndex * 2 - 1;
|
if (ShelveAIndex == 2) colNo = columnIndex * 2;
|
}
|
let columnCode = await this.columnCodeCreator(colNo, columnRegular); //(columnIndex < 10 ? "0" : "") + columnIndex;
|
var positionTmpl = positionRegular; // "{库区}-{通道}{货架}{层}{列}";
|
if (shelveInfo != null) {
|
//自定义编码规则
|
var _positionRegular = "";
|
var _rowNo = (rowIndex < 10 ? "0" : "") + rowIndex;
|
var _colNo = (columnIndex < 10 ? "0" : "") + columnIndex;
|
if (shelveInfo.columnConfigs != null) {
|
// 列级别配置
|
for (var item of shelveInfo.columnConfigs) {
|
if (item.colNo == _colNo) {
|
_positionRegular = item.positionRegular;
|
}
|
}
|
}
|
if (!_positionRegular && shelveInfo.rowConfigs != null) {
|
// 层级别配置
|
for (var item of shelveInfo.rowConfigs) {
|
if (item.rowNo == _rowNo) {
|
_positionRegular = item.positionRegular;
|
}
|
}
|
}
|
|
if (!_positionRegular) {
|
// 通道级别配置
|
positionTmpl = shelveInfo.positionRegular;
|
} else {
|
positionTmpl = _positionRegular;
|
}
|
}
|
positionTmpl = positionTmpl.replace("{库区}", areaCode);
|
positionTmpl = positionTmpl.replace("{通道}", channelCode);
|
positionTmpl = positionTmpl.replace("{货架}", shelveCode);
|
positionTmpl = positionTmpl.replace("{层}", rowCode);
|
positionTmpl = positionTmpl.replace("{列}", columnCode);
|
//#endregion
|
|
//#region 创建货位
|
let posInfo = await this.dbRead.findOne(BasePosition, {
|
storage_Id: storage_Id,
|
areaCode: areaCode,
|
positionName: positionTmpl
|
});
|
if (posInfo == null) {
|
posInfo = new BasePosition();
|
posInfo.createDate = new Date();
|
posInfo.createID = userInfo.user_Id;
|
posInfo.creator = userInfo.userTrueName;
|
posInfo.enable = 1;
|
posInfo.isMixProduct = 1;
|
posInfo.isLocked = 0;
|
} else {
|
posInfo.modifyDate = new Date();
|
posInfo.modifyID = userInfo.user_Id;
|
posInfo.modifier = userInfo.userTrueName;
|
}
|
posInfo.isFreeze = 0;
|
posInfo.orderNo = 0;
|
posInfo.parentId = 0;
|
posInfo.positionName = positionTmpl;
|
posInfo.positionType = positionType; //常规货位
|
posInfo.storage_Id = storage_Id;
|
posInfo.storageName = storageName;
|
posInfo.maxCapacity = maxCapacity;
|
posInfo.channelCode = channelCode;
|
posInfo.columnCode = columnCode;
|
posInfo.shelveCode = shelveCode;
|
posInfo.rowCode = rowCode;
|
posInfo.columnCode = columnCode;
|
posInfo.areaCode = areaCode;
|
posInfo.lineCode = "A面";
|
posInfo.shelveMode = shelveMode;
|
|
posInfo.platCorpName = userInfo.platCorpName;
|
posInfo.platUserCode = userInfo.platUserCode;
|
posInfo.platUserName = userInfo.platUserName;
|
posInfo.platUser_Id = userInfo.platUser_Id;
|
posInfo.userProductAlias = userInfo.userProductAlias;
|
posInfo.userProductCode = userInfo.userProductCode;
|
posInfo.userProduct_Id = userInfo.userProduct_Id;
|
|
await this.dbWrite.save(posInfo);
|
//#endregion
|
}
|
}
|
}
|
//#endregion
|
|
if (pickMode == "U型") {
|
//#region B面货架
|
for (let shelveBIndex = shelveNumB_1; shelveBIndex <= shelveNumB_2; shelveBIndex++) {
|
let shelveCode = await this.shelveCodeCreator(shelveBIndex, shelvesRegular);
|
let shelveInfo = await this.findShelve(shelveDataList, storage_Id, areaCode, channelCode, shelveCode);
|
let _rowNum = rowNum;
|
let _columnNum = columnNum;
|
if (shelveInfo != null) {
|
_rowNum = shelveInfo.rowNum;
|
_columnNum = shelveInfo.columnNum;
|
}
|
//行数据
|
for (let rowIndex = 1; rowIndex <= _rowNum; rowIndex++) {
|
let rowCode = await this.rowCodeCreator(rowIndex, rowRegular); //(rowIndex < 10 ? "0" : "") + rowIndex;
|
//列数据
|
for (let columnIndex = 1; columnIndex <= _columnNum; columnIndex++) {
|
//#region 货位编码
|
let columnCode = await this.columnCodeCreator(columnIndex, columnRegular); //(columnIndex < 10 ? "0" : "") + columnIndex;
|
var positionTmpl = positionRegular; // "{库区}-{通道}{货架}{层}{列}";
|
if (shelveInfo != null) {
|
//自定义编码规则
|
var _positionRegular = "";
|
var _rowNo = (rowIndex < 10 ? "0" : "") + rowIndex;
|
var _colNo = (columnIndex < 10 ? "0" : "") + columnIndex;
|
if (shelveInfo.columnConfigs != null) {
|
// 列级别配置
|
for (var item of shelveInfo.columnConfigs) {
|
if (item.colNo == _colNo) {
|
_positionRegular = item.positionRegular;
|
}
|
}
|
}
|
if (!_positionRegular && shelveInfo.rowConfigs != null) {
|
// 层级别配置
|
for (var item of shelveInfo.rowConfigs) {
|
if (item.rowNo == _rowNo) {
|
_positionRegular = item.positionRegular;
|
}
|
}
|
}
|
|
if (!_positionRegular) {
|
// 通道级别配置
|
positionTmpl = shelveInfo.positionRegular;
|
} else {
|
positionTmpl = _positionRegular;
|
}
|
}
|
positionTmpl = positionTmpl.replace("{库区}", areaCode);
|
positionTmpl = positionTmpl.replace("{通道}", channelCode);
|
positionTmpl = positionTmpl.replace("{货架}", shelveCode);
|
positionTmpl = positionTmpl.replace("{层}", rowCode);
|
positionTmpl = positionTmpl.replace("{列}", columnCode);
|
//#endregion
|
|
//#region 创建货位
|
let posInfo = await this.dbRead.findOne(BasePosition, {
|
storage_Id: storage_Id,
|
areaCode: areaCode,
|
positionName: positionTmpl
|
});
|
if (posInfo == null) {
|
posInfo = new BasePosition();
|
posInfo.createDate = new Date();
|
posInfo.createID = userInfo.user_Id;
|
posInfo.creator = userInfo.userTrueName;
|
posInfo.enable = 1;
|
posInfo.isMixProduct = 1;
|
posInfo.isLocked = 0;
|
} else {
|
posInfo.modifyDate = new Date();
|
posInfo.modifyID = userInfo.user_Id;
|
posInfo.modifier = userInfo.userTrueName;
|
}
|
|
posInfo.isFreeze = 0;
|
posInfo.orderNo = 0;
|
posInfo.parentId = 0;
|
posInfo.positionName = positionTmpl;
|
posInfo.positionType = positionType; //常规货位
|
posInfo.storage_Id = storage_Id;
|
posInfo.storageName = storageName;
|
posInfo.maxCapacity = maxCapacity;
|
posInfo.channelCode = channelCode;
|
posInfo.columnCode = columnCode;
|
posInfo.shelveCode = shelveCode;
|
posInfo.rowCode = rowCode;
|
posInfo.columnCode = columnCode;
|
posInfo.areaCode = areaCode;
|
posInfo.lineCode = "B面";
|
posInfo.shelveMode = shelveMode;
|
|
posInfo.platCorpName = userInfo.platCorpName;
|
posInfo.platUserCode = userInfo.platUserCode;
|
posInfo.platUserName = userInfo.platUserName;
|
posInfo.platUser_Id = userInfo.platUser_Id;
|
posInfo.userProductAlias = userInfo.userProductAlias;
|
posInfo.userProductCode = userInfo.userProductCode;
|
posInfo.userProduct_Id = userInfo.userProduct_Id;
|
|
await this.dbWrite.save(posInfo);
|
//#endregion
|
}
|
}
|
}
|
//#endregion
|
}
|
}
|
}
|
this.info.result = true;
|
this.info.msg = "保存成功!";
|
ctx.body = this.info;
|
return;
|
} catch (ex) {
|
this.info.result = false;
|
this.info.msg = "保存失败," + ex.message;
|
|
ctx.body = this.info;
|
return;
|
}
|
}
|
//#endregion
|
|
//#region 查找货架信息
|
private async findShelve(shelveDataList: Array<any>, storage_Id: string, areaCode: string, channelCode: string, shelveCode: string) {
|
for (let shelveInfo of shelveDataList) {
|
if (
|
shelveInfo.storage_Id == storage_Id &&
|
shelveInfo.areaCode == areaCode &&
|
shelveInfo.channelCode == channelCode &&
|
shelveInfo.shelveCode == shelveCode
|
) {
|
return shelveInfo;
|
}
|
}
|
|
return null;
|
}
|
//#endregion
|
|
//#region 保存货架信息
|
private async saveShelve(shelveDataList) {
|
let userInfo = await this.ctx.helper.userInfo();
|
for (let shelveInfo of shelveDataList) {
|
let storageShelveInfo = await this.dbRead.findOne(BaseStorageShelve, {
|
storage_Id: shelveInfo.storage_Id,
|
areaCode: shelveInfo.areaCode,
|
channelCode: shelveInfo.channelCode,
|
shelveCode: shelveInfo.shelveCode
|
});
|
if (storageShelveInfo == null) {
|
storageShelveInfo = new BaseStorageShelve();
|
}
|
storageShelveInfo.areaCode = shelveInfo.areaCode;
|
storageShelveInfo.channelCode = shelveInfo.channelCode;
|
storageShelveInfo.rowNum = shelveInfo.rowNum;
|
storageShelveInfo.columnNum = shelveInfo.columnNum;
|
storageShelveInfo.storage_Id = shelveInfo.storage_Id;
|
storageShelveInfo.storageName = shelveInfo.storageName;
|
storageShelveInfo.shelveCode = shelveInfo.shelveCode;
|
storageShelveInfo.positionRegular = shelveInfo.positionRegular;
|
|
await this.dbWrite.save(storageShelveInfo);
|
|
await this.dbWrite.delete(BasePosition, {
|
storage_Id: shelveInfo.storage_Id,
|
areaCode: shelveInfo.areaCode,
|
channelCode: shelveInfo.channelCode,
|
shelveCode: shelveInfo.shelveCode,
|
userProduct_Id: userInfo.userProduct_Id
|
});
|
}
|
}
|
//#endregion
|
|
//#region 编码规则
|
//通道编码规则
|
private async channelCodeCreator(numIndex: number, channelRegular: string) {
|
if (!channelRegular) {
|
channelRegular = "{数字}{数字}";
|
}
|
|
return await this.codeCreator(numIndex, channelRegular);
|
}
|
|
//货架编码规则
|
private async shelveCodeCreator(numIndex: number, shelvesRegular: string) {
|
if (!shelvesRegular) {
|
shelvesRegular = "{数字}{数字}";
|
}
|
return await this.codeCreator(numIndex, shelvesRegular);
|
}
|
|
//行编码规则
|
private async rowCodeCreator(numIndex: number, rowRegular: string) {
|
if (!rowRegular) {
|
rowRegular = "{数字}{数字}";
|
}
|
return this.codeCreator(numIndex, rowRegular);
|
}
|
|
//货架编码规则
|
private async columnCodeCreator(numIndex: number, columnRegular: string) {
|
if (!columnRegular) {
|
columnRegular = "{数字}{数字}";
|
}
|
return this.codeCreator(numIndex, columnRegular);
|
}
|
|
//通用编码规则
|
private async codeCreator(numIndex: number, regular: string) {
|
var letterList = "A,B,C,D,E,F,G,H,I,J,K,L,M,N,O,P,Q,R,S,T,U,V,W,X,Y,Z".split(",");
|
if (!regular) {
|
regular = "{数字}{数字}";
|
}
|
//var codeList = regular.replace("}{", ",").replace("{", "").replace("}", "").Split(',');
|
var regHelper = /数字|字母/gi;
|
var codeList = regular.match(regHelper);
|
var codeValue: Array<any> = [];
|
for (var i = codeList.length - 1; i >= 0; i--) {
|
var item = codeList[codeList.length - 1];
|
if (item == "数字") {
|
if (numIndex < 10) {
|
codeValue.push(numIndex);
|
numIndex = 0;
|
} else {
|
var lastNum = numIndex % 10;
|
codeValue.push(lastNum);
|
numIndex = Math.floor((1.0 * numIndex) / 10);
|
}
|
} else if (item == "字母") {
|
if (numIndex < 27) {
|
codeValue.push(letterList[numIndex - 1]);
|
numIndex = 0;
|
} else {
|
var lastNum = numIndex % 27;
|
codeValue.push(lastNum);
|
numIndex = Math.floor((1.0 * numIndex) / 27);
|
}
|
}
|
}
|
|
for (var i = 0; i < codeList.length; i++) {
|
let val = codeValue[codeList.length - 1 - i];
|
let rep = "{" + codeList[i] + "}";
|
regular = regular.replace(rep, val);
|
}
|
|
return regular;
|
}
|
|
//#endregion
|
//#region 器具类型
|
@Post()
|
public async lockPlateType() {
|
let { ctx } = this;
|
let body = ctx.request.body;
|
let positionInfo = body.positionInfo;
|
let userInfo = await ctx.helper.userInfo();
|
|
let storage_Id = positionInfo.storage_Id;
|
let storageArea = positionInfo.storageArea;
|
let channelCode = positionInfo.channelCode;
|
let shelveCode = positionInfo.shelveCode;
|
let colNo = positionInfo.colNo;
|
let rowNo = positionInfo.rowNo;
|
// let plateType = positionInfo.plateType;
|
let plateType = null;
|
// let plateType_Id = positionInfo.plateType_Id;
|
for (let type of positionInfo.plateType) {
|
plateType = type;
|
}
|
let where: any = {
|
storage_Id: storage_Id,
|
channelCode: channelCode,
|
userProduct_Id: userInfo.userProduct_Id
|
};
|
if (storageArea) {
|
where.areaCode = storageArea;
|
}
|
if (shelveCode) {
|
where.shelveCode = shelveCode;
|
}
|
if (colNo) {
|
where.columnCode = colNo;
|
}
|
if (rowNo) {
|
where.rowCode = rowNo;
|
}
|
// let plateTypeinfo = await this.dbRead.find(BasePlateType, {
|
// plateType_Id: In(plateType_Id)
|
// });
|
|
// let qijutype = [];
|
// var plate = null;
|
// var plateId = null;
|
// for (let type of plateTypeinfo) {
|
// qijutype.push(type.plateType);
|
// plate = qijutype.join("/");
|
// plateId = plateType_Id.join("/");
|
// }
|
// console.log(plate);
|
// console.log(plateId);
|
await this.dbWrite.update(BasePosition, where, {
|
plateType: plateType
|
});
|
|
this.info.result = true;
|
this.info.msg = "器具种类修改成功!";
|
|
ctx.body = this.info;
|
return;
|
}
|
//#endregion
|
//#region 锁定货位
|
@Post()
|
public async lockPosition() {
|
let { ctx } = this;
|
let body = ctx.request.body;
|
let positionInfo = body.positionInfo;
|
let userInfo = await ctx.helper.userInfo();
|
|
let storage_Id = positionInfo.storage_Id;
|
let storageArea = positionInfo.storageArea;
|
let channelCode = positionInfo.channelCode;
|
let shelveCode = positionInfo.shelveCode;
|
let colNo = positionInfo.colNo;
|
let rowNo = positionInfo.rowNo;
|
let where: any = {
|
storage_Id: storage_Id,
|
channelCode: channelCode,
|
userProduct_Id: userInfo.userProduct_Id
|
};
|
if (storageArea) {
|
where.areaCode = storageArea;
|
}
|
if (shelveCode) {
|
where.shelveCode = shelveCode;
|
}
|
if (colNo) {
|
where.columnCode = colNo;
|
}
|
if (rowNo) {
|
where.rowCode = rowNo;
|
}
|
await this.dbWrite.update(BasePosition, where, {
|
isLocked: 1
|
});
|
this.info.result = true;
|
this.info.msg = "库存已经锁定!";
|
|
ctx.body = this.info;
|
return;
|
}
|
//#endregion
|
|
//#region 解锁货位
|
@Post()
|
public async unlockPosition() {
|
let { ctx } = this;
|
let body = ctx.request.body;
|
let positionInfo = body.positionInfo;
|
let userInfo = await ctx.helper.userInfo();
|
let storage_Id = positionInfo.storage_Id;
|
let storageArea = positionInfo.storageArea;
|
let channelCode = positionInfo.channelCode;
|
let shelveCode = positionInfo.shelveCode;
|
let colNo = positionInfo.colNo;
|
let rowNo = positionInfo.rowNo;
|
let where: any = {
|
storage_Id: storage_Id,
|
channelCode: channelCode,
|
userProduct_Id: userInfo.userProduct_Id
|
};
|
if (storageArea) {
|
where.areaCode = storageArea;
|
}
|
if (shelveCode) {
|
where.shelveCode = shelveCode;
|
}
|
if (colNo) {
|
where.columnCode = colNo;
|
}
|
if (rowNo) {
|
where.rowCode = rowNo;
|
}
|
await this.dbWrite.update(BasePosition, where, {
|
isLocked: 0
|
});
|
this.info.result = true;
|
this.info.msg = "库存已经解锁成功!";
|
|
ctx.body = this.info;
|
return;
|
}
|
//#endregion
|
|
//#region IsMixProductPosition
|
@Post()
|
public async isMixProductPosition() {
|
let { ctx } = this;
|
let body = ctx.request.body;
|
let positionInfo = body.positionInfo;
|
let userInfo = await ctx.helper.userInfo();
|
let storage_Id = positionInfo.storage_Id;
|
let storageArea = positionInfo.storageArea;
|
let channelCode = positionInfo.channelCode;
|
let shelveCode = positionInfo.shelveCode;
|
let colNo = positionInfo.colNo;
|
let rowNo = positionInfo.rowNo;
|
let isMixProduct = positionInfo.isMixProduct;
|
let where: any = {
|
storage_Id: storage_Id,
|
channelCode: channelCode,
|
userProduct_Id: userInfo.userProduct_Id
|
};
|
if (storageArea) {
|
where.areaCode = storageArea;
|
}
|
if (shelveCode) {
|
where.shelveCode = shelveCode;
|
}
|
if (colNo) {
|
where.columnCode = colNo;
|
}
|
if (rowNo) {
|
where.rowCode = rowNo;
|
}
|
await this.dbWrite.update(BasePosition, where, {
|
isMixProduct: isMixProduct
|
});
|
this.info.result = true;
|
this.info.msg = "设置成功!";
|
|
ctx.body = this.info;
|
return;
|
}
|
//#endregion
|
|
//#region EnablePosition
|
@Post()
|
public async enablePosition() {
|
let { ctx } = this;
|
let body = ctx.request.body;
|
let positionInfo = body.positionInfo;
|
let userInfo = await ctx.helper.userInfo();
|
|
let storage_Id = positionInfo.storage_Id;
|
let storageArea = positionInfo.storageArea;
|
let channelCode = positionInfo.channelCode;
|
let shelveCode = positionInfo.shelveCode;
|
let colNo = positionInfo.colNo;
|
let rowNo = positionInfo.rowNo;
|
let enable = positionInfo.enable;
|
let where: any = {
|
storage_Id: storage_Id,
|
channelCode: channelCode,
|
userProduct_Id: userInfo.userProduct_Id
|
};
|
if (storageArea) {
|
where.areaCode = storageArea;
|
}
|
if (shelveCode) {
|
where.shelveCode = shelveCode;
|
}
|
if (colNo) {
|
where.columnCode = colNo;
|
}
|
if (rowNo) {
|
where.rowCode = rowNo;
|
}
|
await this.dbWrite.update(BasePosition, where, {
|
enable: enable
|
});
|
this.info.result = true;
|
this.info.msg = "设置成功!";
|
|
ctx.body = this.info;
|
return;
|
}
|
//#endregion
|
|
//#region 最低库存
|
@Post()
|
public async submitminCapacity() {
|
let { ctx } = this;
|
let body = ctx.request.body;
|
let positionInfo = body.positionInfo;
|
let userInfo = await ctx.helper.userInfo();
|
|
let storage_Id = positionInfo.storage_Id;
|
let storageArea = positionInfo.storageArea;
|
let channelCode = positionInfo.channelCode;
|
let shelveCode = positionInfo.shelveCode;
|
let colNo = positionInfo.colNo;
|
let rowNo = positionInfo.rowNo;
|
let minCapacity = positionInfo.minCapacity;
|
let where: any = {
|
storage_Id: storage_Id,
|
channelCode: channelCode,
|
userProduct_Id: userInfo.userProduct_Id
|
};
|
if (storageArea) {
|
where.areaCode = storageArea;
|
}
|
if (shelveCode) {
|
where.shelveCode = shelveCode;
|
}
|
if (colNo) {
|
where.columnCode = colNo;
|
}
|
if (rowNo) {
|
where.rowCode = rowNo;
|
}
|
await this.dbWrite.update(BasePosition, where, {
|
minCapacity: minCapacity
|
});
|
this.info.result = true;
|
this.info.msg = "设置成功!";
|
|
ctx.body = this.info;
|
return;
|
}
|
//#endregion
|
|
//#region 根据当前仓库获取仓库下的货位
|
@Post()
|
public async getPositionName() {
|
let { ctx } = this;
|
let userInfo = await ctx.helper.userInfo();
|
try {
|
let positionList = await this.dbRead.find(BasePosition, {
|
select: ["positionName"],
|
where: {
|
userProduct_Id: userInfo.userProduct_Id,
|
storage_Id: this.body.storage_Id,
|
positionType: 4 // 4=收货位
|
}
|
});
|
this.info.result = true;
|
this.info.data = positionList;
|
} catch (ex) {
|
this.info.result = false;
|
this.info.msg = ex.message;
|
}
|
ctx.body = this.info;
|
}
|
//#endregion
|
|
//#region 根据当前仓库和货位名称模糊查询
|
@Post()
|
public async getVaguePositionName() {
|
let { ctx } = this;
|
let body = this.ctx.request.body;
|
let userInfo = await ctx.helper.userInfo();
|
try {
|
let where = "userProduct_Id=:userProduct_Id and storage_Id=:storage_Id and positionName like :positionName";
|
let positionList = await this.dbRead
|
.createQueryBuilder(BasePosition, "t")
|
.where(where, {
|
userProduct_Id: userInfo.userProduct_Id,
|
storage_Id: body.storage_Id,
|
positionName: "%" + body.positionName + "%"
|
})
|
.take(30)
|
.getMany();
|
this.info.result = true;
|
this.info.data = positionList;
|
} catch (ex) {
|
this.info.result = false;
|
this.info.msg = ex.message;
|
}
|
ctx.body = this.info;
|
}
|
//#endregion
|
}
|