货架绑定解绑 接口明细+前端实现

This commit is contained in:
hehaibing-1996
2025-02-17 15:30:03 +08:00
parent f723878f32
commit a2a13d15a0
7 changed files with 757 additions and 216 deletions

View File

@ -1,34 +1,5 @@
<template>
<view class="bg-image">
<uni-popup ref="popup" type="dialog">
<view class="popup-content">
<view class="info-item">
<label>物料编码</label>
<text>{{fixedInfo.matCode}}</text>
</view>
<view class="info-item">
<label>物料名称</label>
<text>{{fixedInfo.matName}}</text>
</view>
<view class="info-item">
<label>物料规格</label>
<text>{{fixedInfo.matSpec}}</text>
</view>
<view class="info-item">
<label>数量</label>
<text>{{fixedInfo.matQty}}</text>
</view>
<view class="input-item" style="background-color: wheat;">
<label>盘点数量</label>
<input ref="inputRef" v-model.number="inputValue" type="number" placeholder="输入数量" />
</view>
<view class="button-group">
<button @click="hidePopup">取消</button>
<button @click="saveData(fixedInfo)">保存</button>
</view>
</view>
</uni-popup>
<view class="diy-flex-row">
<view style="flex: 3">
<!-- 占位 -->
@ -41,14 +12,14 @@
<view class="uni-input-wrapper" style="flex: 60;">
<input id="inputMatCode" class="uni-input" style="font-size: 50rpx; padding: 10rpx;"
:placeholder="placeholderText" v-model="matCodeCondition" @blur="queryMatList"></input>
:placeholder="placeholderText" v-model="shelfCodeCondition" @blur="queryMatList"></input>
</view>
<view style="flex: 3;">
</view>
<view style="flex: 30;">
<button @click="analysisScanCode(this.shelfCode)">切换</button>
<button @click="clear">清空</button>
</view>
</view>
</view>
@ -63,20 +34,42 @@
<view style="width: 700rpx;">货架码:{{shelfCode}}</view>
</view>
</view>
<view class="diy-flex-column" style="margin-top: 5rpx;">
<view class="diy-flex-inforow">
<view style="width: 10rpx;"></view>
<view style="width: 700rpx;">当前位置:{{shelfCode}}</view>
<view style="width: 700rpx;">运输状态:{{transStatusStr}}</view>
</view>
</view>
<view style="flex: 1;">
<view style="flex: 40;text-align: center;">
<button style="margin: 50rpx;font-size: 40rpx;" size="mini">&nbsp;&nbsp;</button>
<button style="margin: 50rpx;font-size: 40rpx;background-color: red;" size="mini">&nbsp;&nbsp;</button>
<view class="diy-flex-column" style="margin-top: 5rpx;">
<view class="diy-flex-inforow">
<view style="width: 10rpx;"></view>
<view style="width: 700rpx;">当前位置:{{currentLocationCode}}</view>
</view>
</view>
<view class="diy-flex-column" style="margin-top: 5rpx;">
<view class="diy-flex-inforow">
<view style="width: 10rpx;"></view>
<view style="width: 700rpx;">目标位置:{{destinationLocaiotnCode}}</view>
</view>
</view>
<view class="diy-flex-column" style="margin-top: 5rpx;">
<view class="diy-flex-inforow">
<view style="width: 10rpx;"></view>
<view style="width: 740rpx;">扫描的位置码:{{scanedShelfCode}}</view>
</view>
</view>
<view style="flex: 1;">
<view style="flex: 40;text-align: center;">
<button style="margin: 50rpx;font-size: 40rpx;" @click="bind" size="mini">&nbsp;&nbsp;</button>
<button style="margin: 50rpx;font-size: 40rpx;background-color: red;" @click="unbind"
size="mini">&nbsp;&nbsp;</button>
</view>
</view>
</view>
</view>
</template>
@ -105,16 +98,21 @@
export default {
data() {
return {
locationId: null,
locationCode: '',
//初始化
placeholderText: '请先扫描货架码',
shelfCodeCondition: '',
shelfId: 0,
shelfCode: '',
currentLocationId: 0,
currentLocationCode: '',
destinationLocationId: 0,
destinationLocaiotnCode: '',
transStatusStr: '',
scanedShelfCode: '', //扫描的位置编码
userName: '', //当前登录的用户名
shelfId: null,
shelfCode: '',
placeholderText: '请先扫描货架码',
matCodeCondition: '', //物料编码搜索条件
}
},
onShow: function() {
@ -122,8 +120,11 @@
const self = this; // 保存this的引用
recive(function(res) {
console.log("Success:" + res.data);
self.analysisScanCode(res.data);
if (self.shelfCode == '') {
self.analysisScanCode(res.data);
} else {
self.saveScanedShelfCode(res.data);
}
}, function(err) {
console.log("Error:", JSON.stringify(err)); // 正确打印错误信息
});
@ -132,19 +133,18 @@
analysisScanCode: function(encodedString) {
// 去除末尾的逗号和"..."(如果有的话)
encodedString = encodedString.replace(/,\s*\.\.\.$/, '');
this.shelfCode = encodedString;
this.shelfCodeCondition = encodedString;
//调用接口获取当前货架信息,查看当前货架的工位绑定情况
var serverIPAndPort = getServerIPAndPort();
uni.request({
url: 'http://' + serverIPAndPort +
'/pdaStocktaking/getStocktakingInfosByShelfCode', // 请求的接口地址
'/pdaShelfLocationBindUnbind/getLocationInfoByShelfCode', // 请求的接口地址
method: 'POST', // 设置请求方式为 POST
data: {
"shelfCode": this.shelfCode,
"shelfCode": encodedString,
"userName": this.userName,
"deviceType": "PDA",
"pageNumber": 1,
"pageSize": 1000
},
header: {
'Content-Type': 'application/json', // 如果需要以JSON格式发送数据
@ -157,15 +157,22 @@
//未查询到信息
if (res.data.data == null || res.data.data.count == 0) {
uni.showToast({
title: '该货架不存在绑定的物料信息!',
title: '获取失败,请重试!',
icon: 'none',
duration: 1500
});
return;
}
//有物料信息
this.cardData = res.data.data.lists;
this.recordCount = res.data.data.count;
this.shelfId = res.data.data.shelfId;
this.shelfCode = res.data.data.shelfCode;
this.currentLocationId = res.data.data.currentLocationId;
this.currentLocationCode = res.data.data.currentLocationCode;
this.destinationLocationId = res.data.data.destinationLocationId;
this.destinationLocaiotnCode = res.data.data.destinationLocaiotnCode;
this.transStatusStr = res.data.data.transStatusStr;
this.scanedShelfCode = '';
uni.showToast({
title: '获取成功!',
icon: 'none',
@ -206,10 +213,180 @@
}
});
},
saveScanedShelfCode: function(encodedString) {
// 去除末尾的逗号和"..."(如果有的话)
encodedString = encodedString.replace(/,\s*\.\.\.$/, '');
this.scanedShelfCode = encodedString;
},
bind: function() {
if (this.shelfId == 0 || this.shelfId == null) {
uni.showToast({
title: '请先扫描获取数据!',
icon: 'none',
duration: 3500
});
return;
}
if (this.scanedShelfCode == 0 || this.scanedShelfCode == null) {
uni.showToast({
title: '请先扫描获取位置码!',
icon: 'none',
duration: 3500
});
return;
}
//调用接口获取当前货架信息,查看当前货架的工位绑定情况
var serverIPAndPort = getServerIPAndPort();
uni.request({
url: 'http://' + serverIPAndPort +
'/pdaShelfLocationBindUnbind/shelfLocationBind', // 请求的接口地址
method: 'POST', // 设置请求方式为 POST
data: {
"shelfId": this.shelfId,
"shelfCode": this.shelfCode,
"locationId": 0,
"locationCode": this.scanedShelfCode,
"userName": this.userName,
"deviceType": "PDA",
},
header: {
'Content-Type': 'application/json', // 如果需要以JSON格式发送数据
},
success: (res) => {
// 请求成功的回调函数
if (res.statusCode === 200) {
//接口返回数据为200 表示获取成功!
if (res.data.code == 200) {
uni.showToast({
title: '绑定成功!',
icon: 'none',
duration: 3000
});
//绑定成功
this.analysisScanCode(this.shelfCode);
} else {
uni.showToast({
title: '绑定失败:' + res.data.message,
icon: 'none',
duration: 4500
});
//this.clear();
}
} else {
uni.showToast({
title: '服务器返回错误状态码' + res.statusCode,
icon: 'none',
duration: 4500
});
this.clear();
}
},
fail: (err) => {
// 请求失败的回调函数
uni.showToast({
title: '请求失败' + err,
icon: 'none',
duration: 4000
});
this.clear();
},
complete: (event) => {
// 请求完成的回调函数(无论成功或失败都会调用)
console.log('请求完成', event);
}
});
},
//解绑
unbind: function() {
if (this.shelfId == 0 || this.shelfId == null) {
uni.showToast({
title: '请先扫描获取数据!',
icon: 'none',
duration: 3500
});
return;
}
//调用接口获取当前货架信息,查看当前货架的工位绑定情况
var serverIPAndPort = getServerIPAndPort();
uni.request({
url: 'http://' + serverIPAndPort +
'/pdaShelfLocationBindUnbind/shelfLocationUnBind', // 请求的接口地址
method: 'POST', // 设置请求方式为 POST
data: {
"shelfId": this.shelfId,
"shelfCode": this.shelfCode,
"locationId": 0,
"locationCode": this.scanedShelfCode,
"userName": this.userName,
"deviceType": "PDA",
},
header: {
'Content-Type': 'application/json', // 如果需要以JSON格式发送数据
},
success: (res) => {
// 请求成功的回调函数
if (res.statusCode === 200) {
//接口返回数据为200 表示获取成功!
if (res.data.code == 200) {
uni.showToast({
title: '解绑成功!',
icon: 'none',
duration: 3000
});
//解绑成功
this.analysisScanCode(this.shelfCode);
} else {
uni.showToast({
title: '解绑失败:' + res.data.message,
icon: 'none',
duration: 4500
});
//this.clear();
}
} else {
uni.showToast({
title: '服务器返回错误状态码' + res.statusCode,
icon: 'none',
duration: 4500
});
this.clear();
}
},
fail: (err) => {
// 请求失败的回调函数
uni.showToast({
title: '请求失败' + err,
icon: 'none',
duration: 4000
});
this.clear();
},
complete: (event) => {
// 请求完成的回调函数(无论成功或失败都会调用)
console.log('请求完成', event);
}
});
},
//清空当前界面所有内容
clear: function() {
this.placeholderText = '请先扫描货架码';
this.placeholderText = '请先扫描';
this.shelfCodeCondition = '';
this.shelfId = 0;
this.shelfCode = '';
this.currentLocationId = 0;
this.currentLocationCode = '';
this.destinationLocationId = 0;
this.destinationLocaiotnCode = '';
this.transStatusStr = '';
this.scanedShelfCode = '';
},
}
}

View File

@ -3466,43 +3466,49 @@ if (uni.restoreGlobal) {
const _sfc_main$1 = {
data() {
return {
locationId: null,
locationCode: "",
userName: "",
//当前登录的用户名
shelfId: null,
shelfCode: "",
//初始化
placeholderText: "请先扫描货架码",
matCodeCondition: ""
//物料编码搜索条件
shelfCodeCondition: "",
shelfId: 0,
shelfCode: "",
currentLocationId: 0,
currentLocationCode: "",
destinationLocationId: 0,
destinationLocaiotnCode: "",
transStatusStr: "",
scanedShelfCode: "",
//扫描的位置编码
userName: ""
//当前登录的用户名
};
},
onShow: function() {
this.userName = getConfig("userName", "admin");
const self = this;
recive(function(res) {
formatAppLog("log", "at pages/shelfLocationBindUnbind/shelfLocationBindUnbind.vue:125", "Success:" + res.data);
self.analysisScanCode(res.data);
if (self.shelfCode == "") {
self.analysisScanCode(res.data);
} else {
self.saveScanedShelfCode(res.data);
}
}, function(err) {
formatAppLog("log", "at pages/shelfLocationBindUnbind/shelfLocationBindUnbind.vue:128", "Error:", JSON.stringify(err));
formatAppLog("log", "at pages/shelfLocationBindUnbind/shelfLocationBindUnbind.vue:129", "Error:", JSON.stringify(err));
});
},
methods: {
analysisScanCode: function(encodedString) {
encodedString = encodedString.replace(/,\s*\.\.\.$/, "");
this.shelfCode = encodedString;
this.shelfCodeCondition = encodedString;
var serverIPAndPort = getServerIPAndPort();
uni.request({
url: "http://" + serverIPAndPort + "/pdaStocktaking/getStocktakingInfosByShelfCode",
url: "http://" + serverIPAndPort + "/pdaShelfLocationBindUnbind/getLocationInfoByShelfCode",
// 请求的接口地址
method: "POST",
// 设置请求方式为 POST
data: {
"shelfCode": this.shelfCode,
"shelfCode": encodedString,
"userName": this.userName,
"deviceType": "PDA",
"pageNumber": 1,
"pageSize": 1e3
"deviceType": "PDA"
},
header: {
"Content-Type": "application/json"
@ -3513,14 +3519,20 @@ if (uni.restoreGlobal) {
if (res.data.code == 200) {
if (res.data.data == null || res.data.data.count == 0) {
uni.showToast({
title: "该货架不存在绑定的物料信息!",
title: "获取失败,请重试!",
icon: "none",
duration: 1500
});
return;
}
this.cardData = res.data.data.lists;
this.recordCount = res.data.data.count;
this.shelfId = res.data.data.shelfId;
this.shelfCode = res.data.data.shelfCode;
this.currentLocationId = res.data.data.currentLocationId;
this.currentLocationCode = res.data.data.currentLocationCode;
this.destinationLocationId = res.data.data.destinationLocationId;
this.destinationLocaiotnCode = res.data.data.destinationLocaiotnCode;
this.transStatusStr = res.data.data.transStatusStr;
this.scanedShelfCode = "";
uni.showToast({
title: "获取成功!",
icon: "none",
@ -3552,109 +3564,170 @@ if (uni.restoreGlobal) {
this.clear();
},
complete: (event) => {
formatAppLog("log", "at pages/shelfLocationBindUnbind/shelfLocationBindUnbind.vue:205", "请求完成", event);
formatAppLog("log", "at pages/shelfLocationBindUnbind/shelfLocationBindUnbind.vue:212", "请求完成", event);
}
});
},
saveScanedShelfCode: function(encodedString) {
encodedString = encodedString.replace(/,\s*\.\.\.$/, "");
this.scanedShelfCode = encodedString;
},
bind: function() {
if (this.shelfId == 0 || this.shelfId == null) {
uni.showToast({
title: "请先扫描获取数据!",
icon: "none",
duration: 3500
});
return;
}
if (this.scanedShelfCode == 0 || this.scanedShelfCode == null) {
uni.showToast({
title: "请先扫描获取位置码!",
icon: "none",
duration: 3500
});
return;
}
var serverIPAndPort = getServerIPAndPort();
uni.request({
url: "http://" + serverIPAndPort + "/pdaShelfLocationBindUnbind/shelfLocationBind",
// 请求的接口地址
method: "POST",
// 设置请求方式为 POST
data: {
"shelfId": this.shelfId,
"shelfCode": this.shelfCode,
"locationId": 0,
"locationCode": this.scanedShelfCode,
"userName": this.userName,
"deviceType": "PDA"
},
header: {
"Content-Type": "application/json"
// 如果需要以JSON格式发送数据
},
success: (res) => {
if (res.statusCode === 200) {
if (res.data.code == 200) {
uni.showToast({
title: "绑定成功!",
icon: "none",
duration: 3e3
});
this.analysisScanCode(this.shelfCode);
} else {
uni.showToast({
title: "绑定失败:" + res.data.message,
icon: "none",
duration: 4500
});
}
} else {
uni.showToast({
title: "服务器返回错误状态码" + res.statusCode,
icon: "none",
duration: 4500
});
this.clear();
}
},
fail: (err) => {
uni.showToast({
title: "请求失败" + err,
icon: "none",
duration: 4e3
});
this.clear();
},
complete: (event) => {
formatAppLog("log", "at pages/shelfLocationBindUnbind/shelfLocationBindUnbind.vue:297", "请求完成", event);
}
});
},
//解绑
unbind: function() {
if (this.shelfId == 0 || this.shelfId == null) {
uni.showToast({
title: "请先扫描获取数据!",
icon: "none",
duration: 3500
});
return;
}
var serverIPAndPort = getServerIPAndPort();
uni.request({
url: "http://" + serverIPAndPort + "/pdaShelfLocationBindUnbind/shelfLocationUnBind",
// 请求的接口地址
method: "POST",
// 设置请求方式为 POST
data: {
"shelfId": this.shelfId,
"shelfCode": this.shelfCode,
"locationId": 0,
"locationCode": this.scanedShelfCode,
"userName": this.userName,
"deviceType": "PDA"
},
header: {
"Content-Type": "application/json"
// 如果需要以JSON格式发送数据
},
success: (res) => {
if (res.statusCode === 200) {
if (res.data.code == 200) {
uni.showToast({
title: "解绑成功!",
icon: "none",
duration: 3e3
});
this.analysisScanCode(this.shelfCode);
} else {
uni.showToast({
title: "解绑失败:" + res.data.message,
icon: "none",
duration: 4500
});
}
} else {
uni.showToast({
title: "服务器返回错误状态码" + res.statusCode,
icon: "none",
duration: 4500
});
this.clear();
}
},
fail: (err) => {
uni.showToast({
title: "请求失败" + err,
icon: "none",
duration: 4e3
});
this.clear();
},
complete: (event) => {
formatAppLog("log", "at pages/shelfLocationBindUnbind/shelfLocationBindUnbind.vue:371", "请求完成", event);
}
});
},
//清空当前界面所有内容
clear: function() {
this.placeholderText = "请先扫描货架码";
this.placeholderText = "请先扫描";
this.shelfCodeCondition = "";
this.shelfId = 0;
this.shelfCode = "";
this.currentLocationId = 0;
this.currentLocationCode = "";
this.destinationLocationId = 0;
this.destinationLocaiotnCode = "";
this.transStatusStr = "";
this.scanedShelfCode = "";
}
}
};
function _sfc_render(_ctx, _cache, $props, $setup, $data, $options) {
const _component_uni_popup = resolveEasycom(vue.resolveDynamicComponent("uni-popup"), __easycom_0);
return vue.openBlock(), vue.createElementBlock("view", { class: "bg-image" }, [
vue.createVNode(
_component_uni_popup,
{
ref: "popup",
type: "dialog"
},
{
default: vue.withCtx(() => [
vue.createElementVNode("view", { class: "popup-content" }, [
vue.createElementVNode("view", { class: "info-item" }, [
vue.createElementVNode("label", null, "物料编码:"),
vue.createElementVNode(
"text",
null,
vue.toDisplayString(_ctx.fixedInfo.matCode),
1
/* TEXT */
)
]),
vue.createElementVNode("view", { class: "info-item" }, [
vue.createElementVNode("label", null, "物料名称:"),
vue.createElementVNode(
"text",
null,
vue.toDisplayString(_ctx.fixedInfo.matName),
1
/* TEXT */
)
]),
vue.createElementVNode("view", { class: "info-item" }, [
vue.createElementVNode("label", null, "物料规格:"),
vue.createElementVNode(
"text",
null,
vue.toDisplayString(_ctx.fixedInfo.matSpec),
1
/* TEXT */
)
]),
vue.createElementVNode("view", { class: "info-item" }, [
vue.createElementVNode("label", null, "数量:"),
vue.createElementVNode(
"text",
null,
vue.toDisplayString(_ctx.fixedInfo.matQty),
1
/* TEXT */
)
]),
vue.createElementVNode("view", {
class: "input-item",
style: { "background-color": "wheat" }
}, [
vue.createElementVNode("label", null, "盘点数量:"),
vue.withDirectives(vue.createElementVNode(
"input",
{
ref: "inputRef",
"onUpdate:modelValue": _cache[0] || (_cache[0] = ($event) => _ctx.inputValue = $event),
type: "number",
placeholder: "输入数量"
},
null,
512
/* NEED_PATCH */
), [
[
vue.vModelText,
_ctx.inputValue,
void 0,
{ number: true }
]
])
]),
vue.createElementVNode("view", { class: "button-group" }, [
vue.createElementVNode("button", {
onClick: _cache[1] || (_cache[1] = (...args) => _ctx.hidePopup && _ctx.hidePopup(...args))
}, "取消"),
vue.createElementVNode("button", {
onClick: _cache[2] || (_cache[2] = ($event) => _ctx.saveData(_ctx.fixedInfo))
}, "保存")
])
])
]),
_: 1
/* STABLE */
},
512
/* NEED_PATCH */
),
vue.createElementVNode("view", { class: "diy-flex-row" }, [
vue.createElementVNode("view", { style: { "flex": "3" } }, [
vue.createCommentVNode(" 占位 ")
@ -3679,17 +3752,17 @@ if (uni.restoreGlobal) {
class: "uni-input",
style: { "font-size": "50rpx", "padding": "10rpx" },
placeholder: $data.placeholderText,
"onUpdate:modelValue": _cache[3] || (_cache[3] = ($event) => $data.matCodeCondition = $event),
onBlur: _cache[4] || (_cache[4] = (...args) => _ctx.queryMatList && _ctx.queryMatList(...args))
"onUpdate:modelValue": _cache[0] || (_cache[0] = ($event) => $data.shelfCodeCondition = $event),
onBlur: _cache[1] || (_cache[1] = (...args) => _ctx.queryMatList && _ctx.queryMatList(...args))
}, null, 40, ["placeholder"]), [
[vue.vModelText, $data.matCodeCondition]
[vue.vModelText, $data.shelfCodeCondition]
])
]),
vue.createElementVNode("view", { style: { "flex": "3" } }),
vue.createElementVNode("view", { style: { "flex": "30" } }, [
vue.createElementVNode("button", {
onClick: _cache[5] || (_cache[5] = ($event) => $options.analysisScanCode(this.shelfCode))
}, "切换")
onClick: _cache[2] || (_cache[2] = (...args) => $options.clear && $options.clear(...args))
}, "清空")
])
])
]),
@ -3721,7 +3794,52 @@ if (uni.restoreGlobal) {
vue.createElementVNode(
"view",
{ style: { "width": "700rpx" } },
"当前位置:" + vue.toDisplayString($data.shelfCode),
"运输状态:" + vue.toDisplayString($data.transStatusStr),
1
/* TEXT */
)
])
]),
vue.createElementVNode("view", {
class: "diy-flex-column",
style: { "margin-top": "5rpx" }
}, [
vue.createElementVNode("view", { class: "diy-flex-inforow" }, [
vue.createElementVNode("view", { style: { "width": "10rpx" } }),
vue.createElementVNode(
"view",
{ style: { "width": "700rpx" } },
"当前位置:" + vue.toDisplayString($data.currentLocationCode),
1
/* TEXT */
)
])
]),
vue.createElementVNode("view", {
class: "diy-flex-column",
style: { "margin-top": "5rpx" }
}, [
vue.createElementVNode("view", { class: "diy-flex-inforow" }, [
vue.createElementVNode("view", { style: { "width": "10rpx" } }),
vue.createElementVNode(
"view",
{ style: { "width": "700rpx" } },
"目标位置:" + vue.toDisplayString($data.destinationLocaiotnCode),
1
/* TEXT */
)
])
]),
vue.createElementVNode("view", {
class: "diy-flex-column",
style: { "margin-top": "5rpx" }
}, [
vue.createElementVNode("view", { class: "diy-flex-inforow" }, [
vue.createElementVNode("view", { style: { "width": "10rpx" } }),
vue.createElementVNode(
"view",
{ style: { "width": "740rpx" } },
"扫描的位置码:" + vue.toDisplayString($data.scanedShelfCode),
1
/* TEXT */
)
@ -3731,10 +3849,12 @@ if (uni.restoreGlobal) {
vue.createElementVNode("view", { style: { "flex": "40", "text-align": "center" } }, [
vue.createElementVNode("button", {
style: { "margin": "50rpx", "font-size": "40rpx" },
onClick: _cache[3] || (_cache[3] = (...args) => $options.bind && $options.bind(...args)),
size: "mini"
}, "绑  定"),
vue.createElementVNode("button", {
style: { "margin": "50rpx", "font-size": "40rpx", "background-color": "red" },
onClick: _cache[4] || (_cache[4] = (...args) => $options.unbind && $options.unbind(...args)),
size: "mini"
}, "解  绑")
])

View File

@ -17,20 +17,12 @@ namespace WCS.BLL.Services.IService
public interface IPDAShelfLocationBindUnbindService
{
/// <summary>
/// 通过货架编码查询当前绑定的位置
/// 通过货架编码查询当前绑定的位置等信息
/// </summary>
/// <param name="request"></param>
/// <returns></returns>
public Task<ResponseBase> getLocationInfoByShelfCode(ShelfLocationBindUnbindRequest request);
/// <summary>
/// 扫码 通过位置码获取当前位置的相关信息和当前位置上的货架的信息
/// </summary>
/// <param name="request"></param>
/// <returns></returns>
public Task<ResponseBase> getLocationInfoByLocationInfo(ShelfLocationBindUnbindRequest request);
/// <summary>
/// 货架绑定至位置
/// </summary>

View File

@ -0,0 +1,227 @@
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using WCS.BLL.Services.IService;
using WCS.DAL.Db;
using WCS.DAL.DbModels;
using WCS.Model;
using WCS.Model.ApiModel.PDAShelfLocationBindUnbind;
namespace WCS.BLL.Services.Service
{
public class PDAShelfLocationBindUnbindService : IPDAShelfLocationBindUnbindService
{
public async Task<ResponseBase> getLocationInfoByShelfCode(ShelfLocationBindUnbindRequest request)
{
try
{
request.ShelfCode.Replace("\r", string.Empty)
.Replace("\n", string.Empty)
.Trim();
//校验参数 传入数据为PDA扫描的货架编码
if (request == null || string.IsNullOrEmpty(request.ShelfCode))
{
return new ResponseCommon()
{
Code = 201,
Message = $"获取失败:参数异常,货架码为空!",
};
}
//获取货架数据
var shelfInfo = await DbHelp.db.Queryable<ShelfInfo>()
.Where(t => t.ShelfCode == request.ShelfCode)
.Where(t => t.IsEnable)
.FirstAsync();
if (shelfInfo == null)
{
//通过货架编码匹配不到就通过当前位置码去匹配 获取当前位置上的货架等相关信息
shelfInfo = await DbHelp.db.Queryable<ShelfInfo>()
.Where(t => t.CurrentLocaiotnCode == request.ShelfCode || t.DestinationLocaiotnCode == request.ShelfCode)
.Where(t => t.IsEnable)
.FirstAsync();
if (shelfInfo == null)
{
return new ResponseCommon()
{
Code = 201,
Message = $"获取失败:货架{request.ShelfCode}不存在或已被禁用!",
};
}
}
//货架数据不为空
return new ResponseCommon<ShelfLocationBindUnbindResponseData>()
{
Code = 200,
Message = "success",
Data = new ShelfLocationBindUnbindResponseData()
{
ShelfId = shelfInfo.Id,
ShelfCode = shelfInfo.ShelfCode,
CurrentLocationId = shelfInfo.CurrentLocationId,
CurrentLocationCode = shelfInfo.CurrentLocaiotnCode,
DestinationLocationId = shelfInfo.DestinationLocationId,
DestinationLocaiotnCode = shelfInfo.DestinationLocaiotnCode,
TransStatusStr = shelfInfo.TransStatus.ToString(),
},
};
}
catch (Exception ex)
{
return new ResponseCommon()
{
Code = 201,
Message = $"获取失败:发生异常{ex.Message}",
};
}
}
/// <summary>
/// 货架和位置绑定 绑定都绑定为 静止状态 当前位置为所传入的位置
/// </summary>
/// <param name="request"></param>
/// <returns></returns>
public async Task<ResponseBase> shelfLocationBind(ShelfLocationBindUnbindRequest request)
{
try
{
//校验参数 传入数据为货架编码、货架ID 为上一个接口的返回数据
if (request == null || request.ShelfId == 0)
{
return new ResponseCommon()
{
Code = 205,
Message = $"绑定失败:货架参数异常,请重新扫描货架码!",
};
}
//校验参数 传入数据为扫描的位置码
if (string.IsNullOrEmpty(request.LocationCode))
{
return new ResponseCommon()
{
Code = 201,
Message = $"绑定失败:货架码参数异常,请重新扫描位置码!",
};
}
//获取货架数据
var shelfInfo = await DbHelp.db.Queryable<ShelfInfo>()
.Where(t => t.Id == request.ShelfId)
.Where(t => t.IsEnable)
.FirstAsync();
if (shelfInfo == null)
{
return new ResponseCommon()
{
Code = 201,
Message = $"绑定失败:货架{request.ShelfCode}不存在或已被禁用!",
};
}
//获取位置码代表的位置数据
var locationInfo = await DbHelp.db.Queryable<LocationInfo>()
.Where(t => t.LocationCode == request.LocationCode)
.Where(t => t.IsEnable)
.FirstAsync();
if (locationInfo == null)
{
return new ResponseCommon()
{
Code = 201,
Message = $"绑定失败:位置{request.LocationCode}不存在或已被禁用!",
};
}
//查询该位置是否已绑定货架
var shelfAlreadyBinded = await DbHelp.db.Queryable<ShelfInfo>()
.Where(t => t.DestinationLocationId == locationInfo.Id || t.CurrentLocationId == locationInfo.Id)
.Where(t => t.IsEnable)
.FirstAsync();
if (shelfAlreadyBinded != null)
{
return new ResponseCommon()
{
Code = 201,
Message = $"绑定失败:位置{request.LocationCode}已绑定货架{request.ShelfCode}\r\n请扫描位置码解绑后再进行绑定",
};
}
//开始绑定
shelfInfo.CurrentLocaiotnCode = locationInfo.LocationCode;
shelfInfo.CurrentLocationId = locationInfo.Id;
shelfInfo.TransStatus = TransStatusEnum.;
DbHelp.db.Updateable(shelfInfo).ExecuteCommand();
//返回成功
return new ResponseCommon()
{
Code = 200,
Message = "success",
Data = null,
};
}
catch (Exception ex)
{
return new ResponseCommon()
{
Code = 201,
Message = $"绑定失败:发生异常{ex.Message}",
};
}
}
public async Task<ResponseBase> shelfLocationUnBind(ShelfLocationBindUnbindRequest request)
{
try
{
//校验参数 传入数据为货架编码、货架ID 为上一个接口的返回数据
if (request == null || request.ShelfId == 0)
{
return new ResponseCommon()
{
Code = 205,
Message = $"解绑失败:货架参数异常,请重新扫描货架码!",
};
}
//获取货架数据
var shelfInfo = await DbHelp.db.Queryable<ShelfInfo>()
.Where(t => t.Id == request.ShelfId)
.Where(t => t.IsEnable)
.FirstAsync();
if (shelfInfo == null)
{
return new ResponseCommon()
{
Code = 201,
Message = $"解绑失败:货架{request.ShelfCode}不存在或已被禁用!",
};
}
//开始解绑
shelfInfo.CurrentLocationId = 0;
shelfInfo.CurrentLocaiotnCode = string.Empty;
shelfInfo.DestinationLocationId = 0;
shelfInfo.DestinationLocaiotnCode = string.Empty;
shelfInfo.TransStatus = TransStatusEnum.;
DbHelp.db.Updateable(shelfInfo).ExecuteCommand();
//返回成功
return new ResponseCommon()
{
Code = 200,
Message = "success",
Data = null,
};
}
catch (Exception ex)
{
return new ResponseCommon()
{
Code = 201,
Message = $"解绑失败:发生异常{ex.Message}",
};
}
}
}
}

View File

@ -13,7 +13,15 @@ namespace WCS.Model.ApiModel.PDAShelfLocationBindUnbind
{
public int ShelfId { get; set; }
public string ShelfCode { get; set; }
public int LocationId { get; set; } = 0;
public string LocationCode { get; set; }
//当前位置ID
public int CurrentLocationId { get; set; } = 0;
//当前位置的编码
public string CurrentLocationCode { get; set; }
//目标位置ID
public int DestinationLocationId { get; set; } = 0;
//目标位置编码
public string DestinationLocaiotnCode { get; set; } = string.Empty;
/// 货架运输状态字符串
public string TransStatusStr { get; set; }
}
}

View File

@ -3,6 +3,7 @@ using WCS.BLL.Services.IService;
using WCS.BLL.Services.Service;
using WCS.Model;
using WCS.Model.ApiModel.MatBaseInfo;
using WCS.Model.ApiModel.PDAShelfLocationBindUnbind;
using WCS.Model.ApiModel.Stocktaking;
namespace WCS.WebApi.Controllers
@ -14,49 +15,64 @@ namespace WCS.WebApi.Controllers
[Route("[controller]")]
public class PDAShelfLocationBindUnbindController : ControllerBase
{
public IStockTakingService _stockTakingService { get; set; }
public PDAShelfLocationBindUnbindController(IStockTakingService stockTakingService)
public IPDAShelfLocationBindUnbindService _pdaShelfLocationBindUnbindService { get; set; }
public PDAShelfLocationBindUnbindController(IPDAShelfLocationBindUnbindService pdaShelfLocationBindUnbindService)
{
_stockTakingService = stockTakingService;
_pdaShelfLocationBindUnbindService = pdaShelfLocationBindUnbindService;
}
[Route("getLocationInfoByShelfCode")]
[HttpPost(Name = "getLocationInfoByShelfCode")]
public async Task<ResponseCommon> getLocationInfoByShelfCode(StockTakingByIdRequest request)
public async Task<ResponseBase> getLocationInfoByShelfCode(ShelfLocationBindUnbindRequest request)
{
try
{
#region
//判断参数 //数量可以为空 数量为空盘点确认 这边删除对应数据即可
if (request.MatDetailCurrentInfoId == 0)
{
return new ResponseCommon()
{
Code = 201,
Message = $"操作失败:参数传入错误(Id为0)!",
Data = null,
};
}
if (request.StocktakingQty < 0)
{
return new ResponseCommon()
{
Code = 201,
Message = $"操作失败:数量应大于等于0!",
Data = null,
};
}
#endregion
return await _stockTakingService.stockTakingById(request);
return await _pdaShelfLocationBindUnbindService.getLocationInfoByShelfCode(request);
}
catch (Exception ex)
{
return new ResponseCommon()
{
Code = 201,
Message = ex.Message,
Message = "获取失败:" + ex.Message,
Data = null,
};
}
}
[Route("shelfLocationBind")]
[HttpPost(Name = "shelfLocationBind")]
public async Task<ResponseBase> shelfLocationBind(ShelfLocationBindUnbindRequest request)
{
try
{
return await _pdaShelfLocationBindUnbindService.shelfLocationBind(request);
}
catch (Exception ex)
{
return new ResponseCommon()
{
Code = 201,
Message = "绑定失败:" + ex.Message,
Data = null,
};
}
}
[Route("shelfLocationUnBind")]
[HttpPost(Name = "shelfLocationUnBind")]
public async Task<ResponseBase> shelfLocationUnBind(ShelfLocationBindUnbindRequest request)
{
try
{
return await _pdaShelfLocationBindUnbindService.shelfLocationUnBind(request);
}
catch (Exception ex)
{
return new ResponseCommon()
{
Code = 201,
Message = "解绑失败:" + ex.Message,
Data = null,
};
}

View File

@ -84,6 +84,7 @@ namespace WebApi
builder.Services.AddScoped<ILocationInfoService, LocationInfoService>();
builder.Services.AddScoped<IMatDetailCurrentInfoService,MatDetailCurrentInfoService>();
builder.Services.AddScoped<IBatchBindMatDetailService, BatchBindMatDetailService>();
builder.Services.AddScoped<IPDAShelfLocationBindUnbindService, PDAShelfLocationBindUnbindService>();
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EBA1A2><EFBFBD>ɵ<EFBFBD><C9B5><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>õ<EFBFBD><C3B5><EFBFBD>ģʽ
builder.Services.AddSingleton<IGenerateService, GenerateService>();