1.添加物料信息后端更新关闭接口

2.完善goods.vue页面
This commit is contained in:
李宇奇 2025-03-21 10:22:26 +08:00
parent f6328d49bd
commit a901b2847d
5 changed files with 235 additions and 96 deletions

View File

@ -8,5 +8,27 @@ export const getGoodsInfoByPage = (params) => {
url: '/goods/getGoodsInfoByPage',
method: 'post',
data: params
})
}
});
};
/**
* 更新物料信息
*/
export const updateGoodsInfo = (params) => {
return request({
url: '/goods/updateGoodsInfo',
method: 'post',
data: params
});
};
/**
* 关闭物料使用
*/
export const closeGoodsInfo = (params) => {
return request({
url: '/goods/closeGoodsInfo',
method: 'post',
data: params
});
};

View File

@ -57,14 +57,15 @@
show-overflow-tooltip />
<el-table-column prop="hotPoint" label="热点区域" min-width="120px" sortable="custom"
show-overflow-tooltip />
<!-- <el-table-column fixed="right" label="操作" width="170px">
<el-table-column fixed="right" label="操作" width="170px">
<template v-slot="scope">
<div style="display: inline-block; align-content: center;">
<el-button type="primary"
@click="editCurrentRowFormEntity(scope.row)">编辑</el-button>
<el-button type="danger" @click="closeGoods(scope.row)">关闭</el-button>
</div>
</template>
</el-table-column> -->
</el-table-column>
</el-table>
<br />
<el-pagination v-model:current-page="baseTableQuery.currentPage"
@ -73,78 +74,79 @@
@current-change="search" layout="total, sizes, prev, pager, next, jumper"
:total="baseTableQuery.total" />
</div>
<el-dialog v-model="rowEditFlag" title="工作信息" width="40%" draggable :show-close="false">
<el-dialog v-model="rowEditFlag" title="物料信息" width="60%" draggable :show-close="false">
<el-form ref="rowEditFormRef" :model="rowFormEntity" :label-position="labelPosition"
label-width="100px" style="max-width: 100%" status-icon>
<el-row :gutter="16">
<el-col :span="12" :offset="0">
<el-form-item label="工作编号">
<el-input v-model="rowFormEntity.workIndex" disabled />
</el-form-item>
</el-col>
<el-col :span="12">
<el-form-item label="工单号">
<el-input v-model="rowFormEntity.workOrder" disabled />
</el-form-item>
</el-col>
</el-row>
<el-row :gutter="16">
<el-col :span="12" :offset="0">
<el-form-item label="总成号">
<el-input v-model="rowFormEntity.productId" disabled />
</el-form-item>
</el-col>
<el-col :span="12">
<el-form-item label="成品号">
<el-input v-model="rowFormEntity.singleProductId" disabled />
</el-form-item>
</el-col>
</el-row>
<el-row :gutter="16">
<el-col :span="12" :offset="0">
<el-form-item label="料盒号">
<el-input v-model="rowFormEntity.boxNo" disabled />
</el-form-item>
</el-col>
<el-col :span="12">
<el-form-item label="料号">
<el-input v-model="rowFormEntity.goodsId" disabled />
</el-form-item>
</el-col>
<el-col :span="12">
<el-form-item label="描述">
<el-input v-model="rowFormEntity.goodsDescription" disabled />
</el-form-item>
</el-col>
</el-row>
<el-row :gutter="16">
<el-col :span="12" :offset="0">
<el-form-item label="需求数量">
<el-input-number v-model.number="rowFormEntity.needNum" controls-position="right"
:min="0" disabled />
<el-form-item label="工厂">
<el-input v-model="rowFormEntity.plant" disabled />
</el-form-item>
</el-col>
<el-col :span="12">
<el-form-item label="已完成数量">
<el-input-number v-model.number="rowFormEntity.finishNum" controls-position="right"
:min="0" :max="rowFormEntity.needNum" clearable />
<el-form-item label="供应商">
<el-input v-model="rowFormEntity.vendorName" disabled />
</el-form-item>
</el-col>
</el-row>
<el-row :gutter="16">
<el-col :span="12" :offset="0">
<el-form-item label="已分配数量">
<el-input-number v-model.number="rowFormEntity.distributeNum"
controls-position="right" :min="0" :max="rowFormEntity.needNum" clearable />
</el-form-item>
</el-col>
</el-row>
<el-row :gutter="16">
<el-col :span="12" :offset="0">
<el-form-item label="工作状态">
<el-select-v2 v-model="rowFormEntity.workStatus" placeholder="请选择工作状态"
:options="workStatusOptions"></el-select-v2>
<el-form-item label="SLED管理">
<el-input v-model="rowFormEntity.isSled" disabled />
</el-form-item>
</el-col>
<el-col :span="12">
<el-form-item label="缺料状态">
<el-select-v2 v-model="rowFormEntity.lackStatus" placeholder="请选择缺料状态"
:options="lackStatusOptions"></el-select-v2>
<el-form-item label="SLED天数">
<el-input v-model="rowFormEntity.sledDays" disabled />
</el-form-item>
</el-col>
</el-row>
<el-row :gutter="16">
<el-col :span="12" :offset="0">
<el-form-item label="补料类型">
<el-input v-model="rowFormEntity.feedingType" disabled />
</el-form-item>
</el-col>
</el-row>
<!-- 可编辑字段 -->
<el-divider>可编辑字段</el-divider>
<el-row :gutter="16">
<el-col :span="12" :offset="0">
<el-form-item label="每盒数量">
<el-input-number v-model="rowFormEntity.boxQty" controls-position="right"
:min="0" clearable />
</el-form-item>
</el-col>
<el-col :span="12">
<el-form-item label="最大盒数">
<el-input-number v-model="rowFormEntity.maxBoxNum" controls-position="right"
:min="0" clearable />
</el-form-item>
</el-col>
</el-row>
<el-row :gutter="16">
<el-col :span="12" :offset="0">
<el-form-item label="存放区域">
<el-input v-model="rowFormEntity.putArea" clearable />
</el-form-item>
</el-col>
<el-col :span="12">
<el-form-item label="热点区域">
<el-input v-model="rowFormEntity.hotPoint" clearable />
</el-form-item>
</el-col>
</el-row>
@ -166,10 +168,10 @@
<script setup>
import store from '@/store'
import zhCn from 'element-plus/dist/locale/zh-cn.mjs'
import { getGoodsInfoByPage } from '@/api/goods.js'
import { getGoodsInfoByPage, updateGoodsInfo, closeGoodsInfo } from '@/api/goods.js'
import { timeFormatter, wmsTaskTypeFormatter, wmsTaskStatusFormatter } from '@/utils/formatter.js'
import { ref, reactive, onMounted, nextTick, onBeforeUnmount } from 'vue'
import { ElMessage } from 'element-plus'
import { ElMessage, ElMessageBox } from 'element-plus'
import { genTableRequest } from '@/utils/generator.js'
import { labelPosition } from '@/constant/form.js'
import { loading } from '@/utils/loading'
@ -243,7 +245,6 @@ const search = () => {
ElMessage.error(response.message)
}
}).catch(err => {
console.log(err)
ElMessage.error('查询数据异常。')
}).finally(() => {
tableLoading.value = false
@ -274,57 +275,54 @@ const taskStatusFormat = (row, column, cellValue, index) => {
}
//
const editCurrentRowFormEntity = (row) => {
// form
rowFormEntity.workIndex = row.workIndex
rowFormEntity.workOrder = row.workOrder
rowFormEntity.productId = row.productId
rowFormEntity.singleProductId = row.singleProductId
rowFormEntity.boxNo = row.boxNo
rowFormEntity.goodsId = row.goodsId
rowFormEntity.needNum = row.needNum
rowFormEntity.distributeNum = row.distributeNum
rowFormEntity.finishNum = row.finishNum
rowFormEntity.workStatus = row.workStatus
rowFormEntity.lackStatus = row.lackStatus
// form
Object.assign(rowFormEntity, row)
//
rowEditFlag.value = true
}
//
const closeLackWork = (row) => {
const request = {
workIndex: row.workIndex,
standId: STAND_ID,
userName: USER_NAME
}
loading.open('关闭中...')
closeCurrentWorks(request).then(res => {
const response = res.data
if (response.code == 0) {
ElMessage.success(response.message)
search()
} else {
ElMessage.error(response.message)
}
//
const closeGoods = (row) => {
ElMessageBox.confirm(`确定要关闭物料(${row.goodsId})吗?`, '提示', {
confirmButtonText: '确定',
cancelButtonText: '取消',
type: 'warning'
}).then(() => {
const request = {
goodsId: row.goodsId,
standId: STAND_ID,
userName: USER_NAME
};
loading.open('关闭中...');
closeGoodsInfo(request).then(res => {
const response = res.data;
if (response.code == 0) {
ElMessage.success(response.message);
search();
} else {
ElMessage.error(response.message);
}
}).catch(err => {
ElMessage.error('请求异常。');
}).finally(() => {
loading.close();
});
}).catch(err => {
console.log(err)
ElMessage.error('请求异常。')
}).finally(() => {
loading.close()
})
ElMessage.info('已取消关闭操作');
});
}
//
const submitUpdateRow = (rowFormEntity) => {
const request = {
workIndex: rowFormEntity.workIndex,
distributeNum: rowFormEntity.distributeNum,
finishNum: rowFormEntity.finishNum,
workStatus: rowFormEntity.workStatus,
lackStatus: rowFormEntity.lackStatus,
goodsId: rowFormEntity.goodsId,
boxQty: rowFormEntity.boxQty,
maxBoxNum: rowFormEntity.maxBoxNum,
putArea: rowFormEntity.putArea,
hotPoint: rowFormEntity.hotPoint,
standId: STAND_ID,
userName: USER_NAME
}
loading.open('更新中...')
updateKateWorks(request).then(res => {
updateGoodsInfo(request).then(res => {
if (res.data.code == 0) {
ElMessage.success('更新数据成功。')
rowEditFlag.value = false

View File

@ -1,6 +1,8 @@
package com.wms_main.controller.wms;
import com.wms_main.model.dto.query.GoodsQuery;
import com.wms_main.model.dto.request.wms.UpdateGoodsRequest;
import com.wms_main.model.dto.response.wms.BaseWmsApiResponse;
import com.wms_main.model.vo.wms.GoodsVo;
import com.wms_main.model.vo.wms.PageVo;
import com.wms_main.model.dto.response.wms.WmsApiResponse;
@ -28,4 +30,24 @@ public class GoodsController {
public WmsApiResponse<PageVo<GoodsVo>> getGoodsInfoByPage(@RequestBody GoodsQuery goodsQuery) {
return goodsControllerService.getGoodsInfoByPage(goodsQuery);
}
/**
* 更新物料信息
* @param updateGoodsRequest 更新请求
* @return 更新结果
*/
@PostMapping("/updateGoodsInfo")
public BaseWmsApiResponse updateGoodsInfo(@RequestBody UpdateGoodsRequest updateGoodsRequest) {
return goodsControllerService.updateGoodsInfo(updateGoodsRequest);
}
/**
* 关闭物料使用
* @param updateGoodsRequest 关闭请求
* @return 关闭结果
*/
@PostMapping("/closeGoodsInfo")
public BaseWmsApiResponse closeGoodsInfo(@RequestBody UpdateGoodsRequest updateGoodsRequest) {
return goodsControllerService.closeGoodsInfo(updateGoodsRequest);
}
}

View File

@ -1,6 +1,8 @@
package com.wms_main.service.controller;
import com.wms_main.model.dto.query.GoodsQuery;
import com.wms_main.model.dto.request.wms.UpdateGoodsRequest;
import com.wms_main.model.dto.response.wms.BaseWmsApiResponse;
import com.wms_main.model.vo.wms.GoodsVo;
import com.wms_main.model.vo.wms.PageVo;
import com.wms_main.model.dto.response.wms.WmsApiResponse;
@ -16,4 +18,18 @@ public interface IGoodsControllerService {
* @return 查询结果
*/
WmsApiResponse<PageVo<GoodsVo>> getGoodsInfoByPage(@RequestBody GoodsQuery goodsQuery);
/**
* 更新物料信息
* @param updateGoodsRequest 更新请求
* @return 更新结果
*/
BaseWmsApiResponse updateGoodsInfo(@RequestBody UpdateGoodsRequest updateGoodsRequest);
/**
* 关闭物料使用
* @param updateGoodsRequest 关闭请求
* @return 关闭结果
*/
BaseWmsApiResponse closeGoodsInfo(@RequestBody UpdateGoodsRequest updateGoodsRequest);
}

View File

@ -1,8 +1,11 @@
package com.wms_main.service.controller.serviceImpl;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.wms_main.dao.ITAppGoodsService;
import com.wms_main.model.dto.request.wms.UpdateGoodsRequest;
import com.wms_main.model.dto.response.wms.BaseWmsApiResponse;
import com.wms_main.model.po.TAppGoods;
import com.wms_main.model.dto.query.GoodsQuery;
import com.wms_main.model.vo.wms.GoodsVo;
@ -13,6 +16,9 @@ import com.wms_main.service.controller.IGoodsControllerService;
import lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import java.time.LocalDateTime;
/**
* 物料控制类 服务实现
@ -41,4 +47,79 @@ public class GoodsControllerServiceImpl implements IGoodsControllerService {
PageVo<GoodsVo> pageVo = PageVo.of(goodsPage, GoodsVo::of);
return WmsApiResponse.success("查询成功", pageVo);
}
/**
* 实现--更新物料信息
* @param updateGoodsRequest 更新请求
* @return 更新结果
*/
@Override
@Transactional(rollbackFor = Exception.class)
public BaseWmsApiResponse updateGoodsInfo(UpdateGoodsRequest updateGoodsRequest) {
if (updateGoodsRequest == null) {
return BaseWmsApiResponse.error("更新参数不能为NULL");
}
if (StringUtils.isEmpty(updateGoodsRequest.getGoodsId())) {
return BaseWmsApiResponse.error("物料编号不能为空");
}
try {
// 更新物料信息
boolean result = goodsService.update(new LambdaUpdateWrapper<TAppGoods>()
.eq(TAppGoods::getGoodsId, updateGoodsRequest.getGoodsId())
.set(updateGoodsRequest.getBoxQty() != null, TAppGoods::getBoxQty, updateGoodsRequest.getBoxQty())
.set(updateGoodsRequest.getMaxBoxNum() != null, TAppGoods::getMaxBoxNum, updateGoodsRequest.getMaxBoxNum())
.set(StringUtils.isNotEmpty(updateGoodsRequest.getPutArea()), TAppGoods::getPutArea, updateGoodsRequest.getPutArea())
.set(StringUtils.isNotEmpty(updateGoodsRequest.getHotPoint()), TAppGoods::getHotPoint, updateGoodsRequest.getHotPoint())
.set(TAppGoods::getLastUpdateUser, updateGoodsRequest.getUserName())
.set(TAppGoods::getLastUpdateTime, LocalDateTime.now()));
if (result) {
return BaseWmsApiResponse.success("更新物料信息成功");
} else {
return BaseWmsApiResponse.error("更新物料信息失败,未找到对应物料或物料信息未发生变更");
}
} catch (Exception e) {
log.error("更新物料信息异常: {}", e.getMessage(), e);
return BaseWmsApiResponse.error("更新物料信息异常: " + e.getMessage());
}
}
/**
* 实现--关闭物料使用
* @param updateGoodsRequest 关闭请求
* @return 关闭结果
*/
@Override
@Transactional(rollbackFor = Exception.class)
public BaseWmsApiResponse closeGoodsInfo(UpdateGoodsRequest updateGoodsRequest) {
if (updateGoodsRequest == null) {
return BaseWmsApiResponse.error("关闭参数不能为NULL");
}
if (StringUtils.isEmpty(updateGoodsRequest.getGoodsId())) {
return BaseWmsApiResponse.error("物料编号不能为空");
}
try {
// 这里根据业务需求实现物料关闭逻辑
// 例如将物料设置为不可用状态更新特定字段等
boolean result = goodsService.update(new LambdaUpdateWrapper<TAppGoods>()
.eq(TAppGoods::getGoodsId, updateGoodsRequest.getGoodsId())
.set(TAppGoods::getPutArea, "已关闭")
.set(TAppGoods::getHotPoint, "已关闭")
.set(TAppGoods::getLastUpdateUser, updateGoodsRequest.getUserName())
.set(TAppGoods::getLastUpdateTime, LocalDateTime.now()));
if (result) {
return BaseWmsApiResponse.success("关闭物料成功");
} else {
return BaseWmsApiResponse.error("关闭物料失败,未找到对应物料");
}
} catch (Exception e) {
log.error("关闭物料异常: {}", e.getMessage(), e);
return BaseWmsApiResponse.error("关闭物料异常: " + e.getMessage());
}
}
}