"use strict";
|
Object.defineProperty(exports, "__esModule", { value: true });
|
const tslib_1 = require("tslib");
|
const baseController_1 = require("../baseController");
|
const egg_shell_decorators_1 = require("egg-shell-decorators");
|
const typeorm_1 = require("typeorm");
|
const vBaseProductPosition_1 = require("../../entity/storage/product/vBaseProductPosition");
|
const basePositionPrint_1 = require("../../entity/storage/product/basePositionPrint");
|
// import { siemensApi } from "../../public/webServiceHelper";
|
const taskQueue_1 = require("../../entity/basicInfo/base/taskQueue");
|
const baseEquipment_1 = require("../../entity/basicInfo/base/baseEquipment");
|
const purchaseShelve_1 = require("../../entity/inbound/purchase/purchaseShelve");
|
const basePlate_1 = require("../../entity/basicInfo/base/basePlate");
|
/**
|
* 上架 - 码盘操作
|
*/
|
class ShelveStackingScanController extends baseController_1.default {
|
//#region 上架码盘扫描-获取物料信息
|
// @Post()
|
// public async getBufferProductInfo() {
|
// let { ctx } = this;
|
// let body = ctx.request.body;
|
// let storage_Id = body.storage_Id; // 仓库ID
|
// let productCode = body.productCode; // 条码
|
// let positionName = body.positionName; // 货位
|
// if (!storage_Id) {
|
// this.info.result = false;
|
// this.info.msg = "请正确选择仓库!";
|
// this.ctx.body = this.info;
|
// return;
|
// }
|
// if (!productCode) {
|
// this.info.result = false;
|
// this.info.msg = "条码不能为空!";
|
// this.ctx.body = this.info;
|
// return;
|
// }
|
// if (!positionName) {
|
// this.info.result = false;
|
// this.info.msg = "货位不能为空!";
|
// this.ctx.body = this.info;
|
// return;
|
// }
|
// try {
|
// this.info = await this.ctx.service.inbound.shelveStackingScan.getData(storage_Id, positionName, productCode);
|
// if (!this.info.result) {
|
// this.ctx.body = this.info;
|
// return;
|
// }
|
// } catch (error) {
|
// this.info.result = false;
|
// this.info.msg = "错误:" + error.message;
|
// }
|
// this.ctx.body = this.info;
|
// }
|
//#endregion
|
//#region 扫描获取数据
|
async getBufferProductInfo() {
|
let { ctx } = this;
|
let body = ctx.request.body;
|
let userInfo = await ctx.helper.userInfo();
|
try {
|
let datalist = await this.dbRead.find(basePositionPrint_1.BasePositionPrint, {
|
userProduct_Id: userInfo.userProduct_Id,
|
extendField06: body.extendField06,
|
quantity: typeorm_1.MoreThan(0)
|
});
|
if (datalist.length === 0) {
|
this.info.result = false;
|
this.info.msg = "条码不存在!";
|
this.ctx.body = this.info;
|
return;
|
}
|
// 根据条码值找到打印记录信息
|
// let dataPrint = await this.dbRead.findOne(BasePositionPrint, {
|
// extendField06: body.extendField06,
|
// quantity: MoreThan(0)
|
// });
|
// // 根据po单号和
|
// let dataPrintPosition = await this.dbRead.find(vBaseProductPosition, {
|
// poCode: dataPrint.poCode,
|
// productCode: dataPrint.productCode
|
// });
|
// let unPositionPrint = 0;
|
// for (let item of dataPrintPosition) {
|
// unPositionPrint += item.productStorage;
|
// }
|
// let countPrints = 0;
|
// countPrints = dataPrint.quantity + unPositionPrint;
|
// for (let item of datalist) {
|
// item.productStorage = countPrints;
|
// }
|
if (datalist.length) {
|
this.info.data = datalist;
|
// this.info.countPrint = countPrints;
|
this.info.result = true;
|
}
|
else {
|
this.info.result = false;
|
this.info.msg = `${body.extendField06}不存在`;
|
}
|
}
|
catch (error) {
|
this.info.result = false;
|
this.info.msg = "错误:" + error.message;
|
}
|
ctx.body = this.info;
|
}
|
//#endregion
|
//#region 码盘扫描- 码盘扫描入库
|
async inStackingSave() {
|
let { ctx } = this;
|
let body = ctx.request.body;
|
let datalist = body.datalist; // 码盘数据
|
// let plateType = body.plateType;
|
// let plateHeight = body.plateHeight;
|
let percentAge = body.percentAge;
|
let plateCode = body.plateCode;
|
// let productPosition_Id = body.productPosition_Id;
|
let taskPlate = await this.dbRead.find(basePlate_1.BasePlate, {
|
plateCode: body.plateCode
|
});
|
if (taskPlate.length === 0) {
|
this.info.result = false;
|
this.info.msg = "托盘" + body.plateCode + "不存在!";
|
this.ctx.body = this.info;
|
return;
|
}
|
let plateData = await this.dbRead.find(vBaseProductPosition_1.vBaseProductPosition, {
|
plateCode: body.plateCode
|
});
|
let taskQueue = await this.dbRead.find(taskQueue_1.TaskQueue, {
|
plateCode: body.plateCode,
|
taskStatus: "未下发"
|
});
|
let taskQueue2 = await this.dbRead.find(taskQueue_1.TaskQueue, {
|
plateCode: body.plateCode,
|
taskStatus: "已下发"
|
});
|
let taskQueue3 = await this.dbRead.find(taskQueue_1.TaskQueue, {
|
plateCode: body.plateCode,
|
taskStatus: "下发中"
|
});
|
let taskShelve = await this.dbRead.find(purchaseShelve_1.PurchaseShelve, {
|
plateCode: body.plateCode,
|
onShelveStatus: "待上架"
|
});
|
let taskShelves = await this.dbRead.find(purchaseShelve_1.PurchaseShelve, {
|
plateCode: body.plateCode,
|
onShelveStatus: "上架中"
|
});
|
//拆分下面的提示,让提示更清晰一点 【EditBy shaocx,2022-08-29】
|
/*
|
if (plateData.length > 0 || taskQueue.length > 0 || taskShelve.length > 0 || taskShelves.length > 0) {
|
this.info.result = false;
|
this.info.msg = "托盘已存在!";
|
this.ctx.body = this.info;
|
return;
|
}
|
//*/
|
if (plateData.length > 0 && body.shelveType === '码盘上架') {
|
this.info.result = false;
|
this.info.msg = "(码盘上架)托盘" + body.plateCode + "已经在库存里存在!";
|
this.ctx.body = this.info;
|
return;
|
}
|
debugger;
|
//拼盘上架增加 对 收货暂存区的校验 【Editby shaocx,2024-09-12】
|
if (plateData.length > 0 && plateData[0].positionName !== '' && plateData[0].positionName!=='收货暂存区' && body.shelveType === '拼盘上架') {
|
this.info.result = false;
|
this.info.msg = "(拼盘上架)托盘" + body.plateCode + "已经在库存里存在!";
|
this.ctx.body = this.info;
|
return;
|
}
|
if (taskQueue.length > 0) {
|
this.info.result = false;
|
this.info.msg = "托盘" + body.plateCode + "存在于任务状态是'未下发'的任务中!";
|
this.ctx.body = this.info;
|
return;
|
}
|
if (taskQueue2.length > 0) {
|
this.info.result = false;
|
this.info.msg = "托盘" + body.plateCode + "存在于任务状态是'已下发'的任务中!";
|
this.ctx.body = this.info;
|
return;
|
}
|
if (taskQueue3.length > 0) {
|
this.info.result = false;
|
this.info.msg = "托盘" + body.plateCode + "存在于任务状态是'下发中'的任务中!";
|
this.ctx.body = this.info;
|
return;
|
}
|
if (taskShelve.length > 0) {
|
this.info.result = false;
|
this.info.msg = "托盘" + body.plateCode + "存在于上架状态是'待上架'的码盘上架任务中!";
|
this.ctx.body = this.info;
|
return;
|
}
|
if (taskShelves.length > 0) {
|
this.info.result = false;
|
this.info.msg = "托盘" + body.plateCode + "存在于上架状态是'上架中'的码盘上架任务中!";
|
this.ctx.body = this.info;
|
return;
|
}
|
try {
|
// siemensApi.domainUrl = this.app.config.domainUrl;
|
// const subtractQtyResult = await siemensApi.subtractQty({
|
// detailList: body.detailList
|
// });
|
// let ssss = subtractQtyResult;
|
// if (ssss !== true) {
|
// this.info.msg = "请打开后台服务";
|
// ctx.body = this.info;
|
// return;
|
// }
|
this.info = await this.ctx.service.inbound.shelveStackingScan.billEnterSave(datalist, plateCode, percentAge, body.shelveType);
|
if (!this.info.result) {
|
this.ctx.body = this.info;
|
return;
|
}
|
}
|
catch (error) {
|
this.info.result = false;
|
this.info.msg = "错误:" + error.message;
|
}
|
this.ctx.body = this.info;
|
}
|
//#endregion
|
//#region根据物料编号查询库存
|
async getProduct() {
|
let { ctx } = this;
|
let body = ctx.request.body;
|
let userInfo = await ctx.helper.userInfo();
|
try {
|
let datalist = await this.dbRead.find(vBaseProductPosition_1.vBaseProductPosition, {
|
userProduct_Id: userInfo.userProduct_Id,
|
productCode: body.productCode,
|
productStorage: typeorm_1.MoreThan(0),
|
positionType: 1
|
});
|
if (datalist.length) {
|
this.info.data = datalist;
|
this.info.result = true;
|
}
|
else {
|
this.info.result = false;
|
this.info.msg = `${body.plateCode}不存在`;
|
}
|
}
|
catch (error) {
|
this.info.result = false;
|
this.info.msg = "错误:" + error.message;
|
}
|
ctx.body = this.info;
|
}
|
//#endregion
|
//#region显示所有常规货位,库存量大于0的库存
|
async getPosition() {
|
let { ctx } = this;
|
let body = ctx.request.body;
|
let userInfo = await ctx.helper.userInfo();
|
try {
|
let datalist = await this.dbRead.find(vBaseProductPosition_1.vBaseProductPosition, {
|
userProduct_Id: userInfo.userProduct_Id,
|
productStorage: typeorm_1.MoreThan(0),
|
positionType: 1,
|
extendField01: typeorm_1.Not(typeorm_1.In([1]))
|
});
|
if (datalist.length) {
|
this.info.data = datalist;
|
this.info.result = true;
|
}
|
else {
|
this.info.result = false;
|
this.info.msg = `${body.plateCode}不存在`;
|
}
|
}
|
catch (error) {
|
this.info.result = false;
|
this.info.msg = "错误:" + error.message;
|
}
|
ctx.body = this.info;
|
}
|
//#endregion
|
//#region判断堆垛机是否禁用
|
async isEquipment() {
|
let { ctx } = this;
|
let userInfo = await ctx.helper.userInfo();
|
try {
|
let datalist = await this.dbRead.find(baseEquipment_1.BaseEquipment, {
|
userProduct_Id: userInfo.userProduct_Id,
|
deviceType: "堆垛机",
|
enable: 1,
|
deviceCode: "2"
|
});
|
if (datalist.length) {
|
this.info.result = true;
|
}
|
else {
|
this.info.result = false;
|
this.info.msg = `2号堆垛机已禁用`;
|
}
|
}
|
catch (error) {
|
this.info.result = false;
|
this.info.msg = "错误:" + error.message;
|
}
|
ctx.body = this.info;
|
}
|
//#endregion
|
//#region 拼盘出库-查询库存用
|
async searchApi() {
|
let { ctx } = this;
|
let body = ctx.request.body;
|
// let userInfo = await ctx.helper.userInfo();
|
try {
|
// let datalist = await this.dbRead.find(vBaseProductPosition, {
|
// userProduct_Id: userInfo.userProduct_Id,
|
// positionName: body.positionName,
|
// plateCode: body.plateCode,
|
// productStorage: MoreThan(0),
|
// positionType: 1
|
// });
|
let whereStr = "";
|
var where = {};
|
//whereStr += ` productStorage>0 AND (positionType=1 OR positionType=6)`;//常规货位 = 1, 暂存区 = 4, 空托盘 = 6
|
whereStr += ` productStorage>0 AND (positionType=1 )`; //拼盘只允许查询常规货位 【EditBy shaocx,2022-10-16】
|
whereStr += ` AND ( IsLocked=0 AND IsFreeze=1 AND Enable=1 )`; //增加对锁定状态、是否可用、是否有货的筛选 【EditBy shaocx,2022-10-16】
|
// 关键词查询条件
|
if (body.plateCode) {
|
let plateCode = this.ctx.helper.sqlSecurity(body.plateCode);
|
whereStr += `AND (plateCode LIKE '%' + :plateCode + '%')`;
|
where.plateCode = plateCode;
|
}
|
if (body.positionName) {
|
let positionName = this.ctx.helper.sqlSecurity(body.positionName);
|
whereStr += ` AND positionName = '` + positionName + `'`;
|
where.positionName = positionName;
|
}
|
// 查询当前用户常用的物料
|
var dataList = await this.dbRead.createQueryBuilder(vBaseProductPosition_1.vBaseProductPosition, "t").where(whereStr).getMany();
|
if (dataList.length) {
|
this.info.data = dataList;
|
this.info.result = true;
|
}
|
else {
|
this.info.result = false;
|
this.info.msg = `${body.plateCode}不存在`;
|
}
|
}
|
catch (error) {
|
this.info.result = false;
|
this.info.msg = "错误:" + error.message;
|
}
|
ctx.body = this.info;
|
}
|
//#endregion
|
//#region判断库存是否有此器具
|
async isPlate() {
|
let { ctx } = this;
|
let body = ctx.request.body;
|
let userInfo = await ctx.helper.userInfo();
|
try {
|
let taskPlate = await this.dbRead.find(basePlate_1.BasePlate, {
|
plateCode: body.plateCode
|
});
|
if (taskPlate.length === 0) {
|
this.info.result = false;
|
this.info.msg = "托盘不存在!";
|
this.ctx.body = this.info;
|
return;
|
}
|
let datalist = await this.dbRead.find(vBaseProductPosition_1.vBaseProductPosition, {
|
userProduct_Id: userInfo.userProduct_Id,
|
plateCode: body.plateCode
|
});
|
let taskQueue = await this.dbRead.find(taskQueue_1.TaskQueue, {
|
plateCode: body.plateCode,
|
taskStatus: "未下发"
|
});
|
let taskShelve = await this.dbRead.find(purchaseShelve_1.PurchaseShelve, {
|
plateCode: body.plateCode,
|
onShelveStatus: "待上架"
|
});
|
if (datalist.length || taskQueue.length || taskShelve.length) {
|
this.info.data = datalist;
|
this.info.result = true;
|
}
|
}
|
catch (error) {
|
this.info.result = false;
|
this.info.msg = "错误:" + error.message;
|
}
|
ctx.body = this.info;
|
}
|
}
|
tslib_1.__decorate([
|
egg_shell_decorators_1.Post(),
|
tslib_1.__metadata("design:type", Function),
|
tslib_1.__metadata("design:paramtypes", []),
|
tslib_1.__metadata("design:returntype", Promise)
|
], ShelveStackingScanController.prototype, "getBufferProductInfo", null);
|
tslib_1.__decorate([
|
egg_shell_decorators_1.Post(),
|
tslib_1.__metadata("design:type", Function),
|
tslib_1.__metadata("design:paramtypes", []),
|
tslib_1.__metadata("design:returntype", Promise)
|
], ShelveStackingScanController.prototype, "inStackingSave", null);
|
tslib_1.__decorate([
|
egg_shell_decorators_1.Post(),
|
tslib_1.__metadata("design:type", Function),
|
tslib_1.__metadata("design:paramtypes", []),
|
tslib_1.__metadata("design:returntype", Promise)
|
], ShelveStackingScanController.prototype, "getProduct", null);
|
tslib_1.__decorate([
|
egg_shell_decorators_1.Post(),
|
tslib_1.__metadata("design:type", Function),
|
tslib_1.__metadata("design:paramtypes", []),
|
tslib_1.__metadata("design:returntype", Promise)
|
], ShelveStackingScanController.prototype, "getPosition", null);
|
tslib_1.__decorate([
|
egg_shell_decorators_1.Post(),
|
tslib_1.__metadata("design:type", Function),
|
tslib_1.__metadata("design:paramtypes", []),
|
tslib_1.__metadata("design:returntype", Promise)
|
], ShelveStackingScanController.prototype, "isEquipment", null);
|
tslib_1.__decorate([
|
egg_shell_decorators_1.Post(),
|
tslib_1.__metadata("design:type", Function),
|
tslib_1.__metadata("design:paramtypes", []),
|
tslib_1.__metadata("design:returntype", Promise)
|
], ShelveStackingScanController.prototype, "searchApi", null);
|
tslib_1.__decorate([
|
egg_shell_decorators_1.Post(),
|
tslib_1.__metadata("design:type", Function),
|
tslib_1.__metadata("design:paramtypes", []),
|
tslib_1.__metadata("design:returntype", Promise)
|
], ShelveStackingScanController.prototype, "isPlate", null);
|
exports.default = ShelveStackingScanController;
|
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2hlbHZlU3RhY2tpbmdTY2FuLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsic2hlbHZlU3RhY2tpbmdTY2FuLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7OztBQUFBLHNEQUErQztBQUMvQywrREFBNEM7QUFDNUMscUNBQTRDO0FBQzVDLDRGQUF5RjtBQUN6RixzRkFBbUY7QUFDbkYsOERBQThEO0FBQzlELHFFQUFrRTtBQUNsRSw2RUFBMEU7QUFDMUUsaUZBQThFO0FBQzlFLHFFQUFrRTtBQUVsRTs7R0FFRztBQUNILE1BQXFCLDRCQUE2QixTQUFRLHdCQUFjO0lBQ3RFLHVCQUF1QjtJQUN2QixVQUFVO0lBQ1Ysd0NBQXdDO0lBQ3hDLHdCQUF3QjtJQUN4QixpQ0FBaUM7SUFDakMsOENBQThDO0lBQzlDLDhDQUE4QztJQUM5QyxnREFBZ0Q7SUFDaEQsdUJBQXVCO0lBQ3ZCLGdDQUFnQztJQUNoQyxrQ0FBa0M7SUFDbEMsaUNBQWlDO0lBQ2pDLGNBQWM7SUFDZCxNQUFNO0lBQ04sd0JBQXdCO0lBQ3hCLGdDQUFnQztJQUNoQyxpQ0FBaUM7SUFDakMsaUNBQWlDO0lBQ2pDLGNBQWM7SUFDZCxNQUFNO0lBQ04seUJBQXlCO0lBQ3pCLGdDQUFnQztJQUNoQyxpQ0FBaUM7SUFDakMsaUNBQWlDO0lBQ2pDLGNBQWM7SUFDZCxNQUFNO0lBQ04sVUFBVTtJQUNWLG9IQUFvSDtJQUNwSCwrQkFBK0I7SUFDL0IsbUNBQW1DO0lBQ25DLGdCQUFnQjtJQUNoQixRQUFRO0lBQ1Isc0JBQXNCO0lBQ3RCLGdDQUFnQztJQUNoQyw2Q0FBNkM7SUFDN0MsTUFBTTtJQUNOLCtCQUErQjtJQUMvQixJQUFJO0lBQ0osWUFBWTtJQUVaLGdCQUFnQjtJQUVULEtBQUssQ0FBQyxvQkFBb0I7UUFDL0IsSUFBSSxFQUFFLEdBQUcsRUFBRSxHQUFHLElBQUksQ0FBQztRQUNuQixJQUFJLElBQUksR0FBRyxHQUFHLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQztRQUM1QixJQUFJ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
|