feat(inventory): 优化入库管理功能并增强采购订单集成

- 新增PO订单入库和服务入库两个独立的入口按钮
- 区分导出软硬件产品与服务产品的功能按钮
- 重构入库单表单结构,增加产品类型、入库类型等字段展示
- 优化产品信息表格,支持序号显示和行内修改操作
- 引入采购订单选择对话框组件,实现订单数据联动填充
- 增强SN码处理逻辑,支持批量生成连续SN码序列
- 调整添加产品流程,通过弹窗方式输入起始SN码
- 更新系统合作伙伴认证级别校验规则,针对不同等级控制必填项
- 扩展采购订单接口,新增基于订单项的数据查询能力
- 完善采购订单实体类,补充制造商编码等关键属性
- 新增采购订单项DTO用于库存模块数据交互
- 实现采购订单项数据库映射及查询SQL配置
- 提供前端API调用封装以支持新采购订单项列表获取
- 修复原文件上传相关方法位置错乱问题,确保功能正常运行
dev_1.0.0
chenhao 2025-11-28 17:07:15 +08:00
parent d775904dc3
commit 5f3c8b3463
10 changed files with 388 additions and 132 deletions

View File

@ -8,6 +8,13 @@ export function listPurchaseorder(query) {
params: query
})
}
export function listPurchaseOrderItem(query) {
return request({
url: '/sip/purchaseorder/item/list',
method: 'get',
params: query
})
}
export function listVendorPurchaseorder(query) {
return request({
url: '/sip/purchaseorder/vendor/list',

View File

@ -31,10 +31,24 @@
<!-- 操作按钮 -->
<el-row :gutter="10" class="mb8">
<el-col :span="1.5">
<el-button type="primary" plain icon="el-icon-plus" @click="handleAdd" v-hasPermi="['inventory:inner:add']"></el-button>
<el-button type="primary" plain icon="el-icon-plus" @click="handleAdd" v-hasPermi="['inventory:inner:add']">
PO订单入库
</el-button>
</el-col>
<el-col :span="1.5">
<el-button type="warning" plain icon="el-icon-download" @click="handleExport" v-hasPermi="['inventory:inner:export']"></el-button>
<el-button type="primary" plain icon="el-icon-plus" @click="handleAdd" v-hasPermi="['inventory:inner:add']">
服务入库
</el-button>
</el-col>
<el-col :span="1.5">
<el-button type="warning" plain icon="el-icon-download" @click="handleExport"
v-hasPermi="['inventory:inner:export']">导出软硬件产品
</el-button>
</el-col>
<el-col :span="1.5">
<el-button type="warning" plain icon="el-icon-download" @click="handleExport"
v-hasPermi="['inventory:inner:export']">导出服务产品
</el-button>
</el-col>
<right-toolbar :showSearch.sync="showSearch" @queryTable="getList"></right-toolbar>
</el-row>
@ -64,54 +78,79 @@
<pagination v-show="total>0" :total="total" :page.sync="queryParams.pageNum" :limit.sync="queryParams.pageSize" @pagination="getList"/>
<purchase-order-select-dialog :visible.sync="purchaseOrderSelectVisible" @select="handlePurchaseOrderSelect"/>
<!-- 新增/修改 Dialog -->
<el-dialog :title="title" :visible.sync="open" width="80%" append-to-body :close-on-click-modal="false">
<el-form ref="form" :model="form" :rules="rules" label-width="100px">
<!-- <el-row>-->
<!-- <el-col :span="24"><h3>入库信息</h3></el-col>-->
<!-- <el-col :span="8">-->
<!-- <el-form-item label="入库单号" prop="innerCode">-->
<!-- <el-input v-model="form.innerCode" placeholder="保存后自动生成" readonly />-->
<!-- </el-form-item>-->
<!-- </el-col>-->
<!-- <el-col :span="8">-->
<!-- <el-form-item label="制造商" prop="vendorCode">-->
<!-- <el-select v-model="form.vendorCode" placeholder="请选择制造商" style="width:100%">-->
<!-- <el-option v-for="item in vendorOptions" :key="item.vendorCode" :label="item.vendorName" :value="item.vendorCode"></el-option>-->
<!-- </el-select>-->
<!-- </el-form-item>-->
<!-- </el-col>-->
<!-- <el-col :span="8">-->
<!-- <el-form-item label="入库时间" prop="createTime">-->
<!-- <el-input v-model="form.createTime" readonly />-->
<!-- </el-form-item>-->
<!-- </el-col>-->
<!-- <el-col :span="8">-->
<!-- <el-form-item label="备注" prop="remark">-->
<!-- <el-input v-model="form.remark" placeholder="请输入备注"/>-->
<!-- </el-form-item>-->
<!-- </el-col>-->
<!-- <el-col :span="8">-->
<!-- <el-form-item label="附件信息">-->
<!-- <el-upload-->
<!-- :action="upload.url"-->
<!-- :headers="upload.headers"-->
<!-- :on-success="handleFileSuccess"-->
<!-- :on-remove="handleFileRemove"-->
<!-- :before-upload="beforeUpload"-->
<!-- :file-list="upload.fileList"-->
<!-- >-->
<!-- <el-button size="small" type="primary">点击上传</el-button>-->
<!-- </el-upload>-->
<!-- </el-form-item>-->
<!-- </el-col>-->
<!-- </el-row>-->
<el-row>
<el-col :span="24"><h3>入库信息</h3></el-col>
<el-col :span="8">
<el-form-item label="入库单号" prop="innerCode">
<el-input v-model="form.innerCode" placeholder="保存后自动生成" readonly />
</el-form-item>
</el-col>
<el-col :span="8">
<el-form-item label="制造商" prop="vendorCode">
<el-select v-model="form.vendorCode" placeholder="请选择制造商" style="width:100%">
<el-option v-for="item in vendorOptions" :key="item.vendorCode" :label="item.vendorName" :value="item.vendorCode"></el-option>
</el-select>
</el-form-item>
</el-col>
<el-col :span="8">
<el-form-item label="入库时间" prop="createTime">
<el-input v-model="form.createTime" readonly />
</el-form-item>
</el-col>
<el-col :span="8">
<el-form-item label="备注" prop="remark">
<el-input v-model="form.remark" placeholder="请输入备注"/>
</el-form-item>
</el-col>
<el-col :span="8">
<el-form-item label="附件信息">
<el-upload
:action="upload.url"
:headers="upload.headers"
:on-success="handleFileSuccess"
:on-remove="handleFileRemove"
:before-upload="beforeUpload"
:file-list="upload.fileList"
>
<el-button size="small" type="primary">点击上传</el-button>
</el-upload>
</el-form-item>
</el-col>
<el-col :span="24"><h3>入库信息</h3></el-col>
<el-col :span="12">
<el-form-item label="产品类型" prop="productType">
<dict-tag :options="dict.type.product_type" :value="form.productType"></dict-tag>
</el-form-item>
</el-col>
<el-col :span="12">
<el-form-item label="入库类型" prop="warehouseType">
<dict-tag :options="dict.type.warehouse_type" :value="form.warehouseType"></dict-tag>
</el-form-item>
</el-col>
<el-col :span="12">
<el-form-item label="仓库" prop="warehouseName">
<el-input v-model="form.warehouseName" readonly/>
</el-form-item>
</el-col>
<el-col :span="12">
<el-form-item label="制造商" prop="vendorName">
<el-input v-model="form.vendorName" readonly/>
</el-form-item>
</el-col>
</el-row>
<el-row>
<el-col :span="24"><h3>产品信息</h3></el-col>
</el-row>
<el-row :gutter="10" class="mb8">
<el-col :span="1.5">
<el-button type="info" plain icon="el-icon-plus" @click="handleProductAdd"></el-button>
<el-button type="info" plain icon="el-icon-plus" @click="handleProductAddNew('add')"></el-button>
</el-col>
<el-col :span="1.5">
<el-upload
@ -129,14 +168,18 @@
</el-row>
<el-table :data="form.inventoryInfoList">
<el-table-column type="index"/>
<el-table-column label="SN码" prop="productSn" />
<el-table-column label="产品编码" prop="productCode" />
<el-table-column label="产品型号" prop="model" />
<el-table-column label="产品描述" prop="productDesc" width="200" show-overflow-tooltip/>
<el-table-column label="入库价(含税)" prop="innerPrice" />
<el-table-column label="仓库" prop="warehouseName" />
<!-- <el-table-column label="入库价(含税)" prop="innerPrice" />-->
<!-- <el-table-column label="仓库" prop="warehouseName" />-->
<el-table-column label="操作" align="center">
<template slot-scope="scope">
<el-button size="mini" type="text" icon="el-icon-delete"
@click="handleProductAddNew('update',scope.row)">修改
</el-button>
<el-button size="mini" type="text" icon="el-icon-delete" @click="handleProductDelete(scope.$index)"></el-button>
</template>
</el-table-column>
@ -148,6 +191,19 @@
</div>
</el-dialog>
<el-dialog :title="snTitle" :visible.sync="snOpen">
<el-row>
<el-col :span="8"><span>{{ snLabel }}</span><span style="color: red">*</span></el-col>
<el-col :span="16">
<el-input v-model="inputSn" placeholder=""/>
</el-col>
</el-row>
<div slot="footer" class="dialog-footer">
<el-button type="primary" @click="submitSn"> </el-button>
<el-button @click="snOpen=false"> </el-button>
</div>
</el-dialog>
<!-- 查看详情 Drawer -->
<el-drawer :title="title" :visible.sync="drawerOpen" direction="rtl" size="70%">
<div style="padding: 20px;">
@ -191,81 +247,89 @@
</el-drawer>
<!-- 添加产品 Dialog -->
<el-dialog title="添加产品" :visible.sync="productOpen" width="60%" append-to-body>
<el-form :model="productQuery" ref="productQueryForm" :inline="true" label-width="88px">
<el-form-item label="产品编码" prop="productCodeQuery">
<el-input v-model="productQuery.productCodeQuery" placeholder="请输入产品编码" clearable @keyup.enter.native="handleProductQuery"/>
</el-form-item>
<el-form-item>
<el-button type="primary" icon="el-icon-search" @click="handleProductQuery"></el-button>
<el-button icon="el-icon-refresh" @click="resetProductQuery"></el-button>
</el-form-item>
</el-form>
<el-form :model="productForm" ref="productForm" :rules="productRules" label-width="140px">
<el-row>
<el-col :span="12">
<el-form-item label="产品编码" prop="productCode">
<el-input v-model="productForm.productCode" readonly/>
</el-form-item>
</el-col>
<el-col :span="12">
<el-form-item label="产品型号" prop="model">
<el-input v-model="productForm.model" readonly/>
</el-form-item>
</el-col>
<el-col :span="24">
<el-form-item label="产品描述" prop="productDesc">
<el-input v-model="productForm.productDesc" readonly/>
</el-form-item>
</el-col>
<el-col :span="12">
<el-form-item label="入库价(含税)" prop="innerPrice">
<el-input-number v-model="productForm.innerPrice" :precision="2" :step="0.1" :min="0"></el-input-number>
</el-form-item>
</el-col>
<el-col :span="12">
<el-form-item label="数量" prop="quantity">
<el-input-number v-model="productForm.quantity" @change="calcSn" :min="1" :max="3000" step="1"></el-input-number>
</el-form-item>
</el-col>
<el-col :span="12">
<el-form-item label="入库仓" prop="warehouseId">
<el-select v-model="productForm.warehouseId" placeholder="请选择仓库" style="width:100%">
<el-option v-for="item in warehouseOptions" :key="item.id" :label="item.warehouseName" :value="item.id"></el-option>
</el-select>
</el-form-item>
</el-col>
<el-col :span="12">
<el-form-item label="该批次起始SN码" prop="productSn">
<el-input v-model="productForm.productSn" @input="calcSn" placeholder="只能输入数字和字母"/>
</el-form-item>
</el-col>
<el-col :span="24">
<el-form-item label="SN码范围">
<span>{{ snRange }}</span>
</el-form-item>
</el-col>
</el-row>
</el-form>
<div slot="footer" class="dialog-footer">
<el-button type="primary" @click="submitProductForm"> </el-button>
<el-button @click="cancelProduct"> </el-button>
</div>
</el-dialog>
<!-- <el-dialog title="添加产品" :visible.sync="productOpen" width="60%" append-to-body>-->
<!-- <el-form :model="productQuery" ref="productQueryForm" :inline="true" label-width="88px">-->
<!-- <el-form-item label="产品编码" prop="productCodeQuery">-->
<!-- <el-input v-model="productQuery.productCodeQuery" placeholder="请输入产品编码" clearable @keyup.enter.native="handleProductQuery"/>-->
<!-- </el-form-item>-->
<!-- <el-form-item>-->
<!-- <el-button type="primary" icon="el-icon-search" @click="handleProductQuery"></el-button>-->
<!-- <el-button icon="el-icon-refresh" @click="resetProductQuery"></el-button>-->
<!-- </el-form-item>-->
<!-- </el-form>-->
<!-- <el-form :model="productForm" ref="productForm" :rules="productRules" label-width="140px">-->
<!-- <el-row>-->
<!-- <el-col :span="12">-->
<!-- <el-form-item label="产品编码" prop="productCode">-->
<!-- <el-input v-model="productForm.productCode" readonly/>-->
<!-- </el-form-item>-->
<!-- </el-col>-->
<!-- <el-col :span="12">-->
<!-- <el-form-item label="产品型号" prop="model">-->
<!-- <el-input v-model="productForm.model" readonly/>-->
<!-- </el-form-item>-->
<!-- </el-col>-->
<!-- <el-col :span="24">-->
<!-- <el-form-item label="产品描述" prop="productDesc">-->
<!-- <el-input v-model="productForm.productDesc" readonly/>-->
<!-- </el-form-item>-->
<!-- </el-col>-->
<!-- <el-col :span="12">-->
<!-- <el-form-item label="入库价(含税)" prop="innerPrice">-->
<!-- <el-input-number v-model="productForm.innerPrice" :precision="2" :step="0.1" :min="0"></el-input-number>-->
<!-- </el-form-item>-->
<!-- </el-col>-->
<!-- <el-col :span="12">-->
<!-- <el-form-item label="数量" prop="quantity">-->
<!-- <el-input-number v-model="productForm.quantity" @change="calcSn" :min="1" :max="3000" :step="1"></el-input-number>-->
<!-- </el-form-item>-->
<!-- </el-col>-->
<!-- <el-col :span="12">-->
<!-- <el-form-item label="入库仓" prop="warehouseId">-->
<!-- <el-select v-model="productForm.warehouseId" placeholder="请选择仓库" style="width:100%">-->
<!-- <el-option v-for="item in warehouseOptions" :key="item.id" :label="item.warehouseName" :value="item.id"></el-option>-->
<!-- </el-select>-->
<!-- </el-form-item>-->
<!-- </el-col>-->
<!-- <el-col :span="12">-->
<!-- <el-form-item label="该批次起始SN码" prop="productSn">-->
<!-- <el-input v-model="productForm.productSn" @input="calcSn" placeholder="只能输入数字和字母"/>-->
<!-- </el-form-item>-->
<!-- </el-col>-->
<!-- <el-col :span="24">-->
<!-- <el-form-item label="SN码范围">-->
<!-- <span>{{ snRange }}</span>-->
<!-- </el-form-item>-->
<!-- </el-col>-->
<!-- </el-row>-->
<!-- </el-form>-->
<!-- <div slot="footer" class="dialog-footer">-->
<!-- <el-button type="primary" @click="submitProductForm"> </el-button>-->
<!-- <el-button @click="cancelProduct"> </el-button>-->
<!-- </div>-->
<!-- </el-dialog>-->
</div>
</template>
<script>
import {getPurchaseorder} from "@/api/sip/purchaseorder";
import { listInner, getInner, addInner, updateInner, delInner, exportInner, importProductData, downloadTemplate } from "@/api/inventory/inner";
import { listAllVendor } from "@/api/base/vendor";
import { listAllWarehouse } from "@/api/base/warehouse";
import { getProductByCode } from "@/api/system/product";
import { getToken } from "@/utils/auth";
import {exportProject} from "@/api/project/info";
import PurchaseOrderSelectDialog from '../../purchaseorder/components/PurchaseOrderSelectDialog.vue';
import Dict from "@/views/system/dict/index.vue";
export default {
name: "Inner",
components: {
Dict,
PurchaseOrderSelectDialog
},
dicts: ['product_type', 'warehouse_type'],
data() {
return {
//
@ -278,8 +342,14 @@ export default {
innerList: [],
//
title: "",
inputSn: "",
//
open: false,
snRow: {},
snOpen: false,
snTitle: '添加SN码',
snLabel: '该批次起始SN码',
snInput: false,
//
drawerOpen: false,
//
@ -335,7 +405,8 @@ export default {
warehouseId: [{ required: true, message: "入库仓不能为空", trigger: "change" }],
productSn: [{ required: true, message: "起始SN码不能为空", trigger: "blur" }],
},
snRange: ''
snRange: '',
purchaseOrderSelectVisible: false,
};
},
created() {
@ -353,6 +424,49 @@ export default {
this.loading = false;
});
},
submitSn() {
if (this.snRow) {
this.snRow.productSn = this.inputSn;
this.snOpen = false;
return;
}
let quantity = Number(this.form.quantity);
let productSn = this.inputSn;
let snPrefix = "";
let snNumber = "";
for (let i = productSn.length - 1; i >= 0; i--) {
if (!isNaN(productSn[i]) && productSn[i] !== ' ') {
snNumber = productSn[i] + snNumber;
} else {
snPrefix = productSn.substring(0, i + 1);
break;
}
}
if (snNumber.length === 0) {
this.$modal.msgError("SN码最后一位必须为数字");
return;
}
let startNumber = parseInt(snNumber);
let productsToAdd = [];
for (let i = 0; i < quantity; i++) {
let currentNumber = startNumber + i;
let formattedNumber = String(currentNumber).padStart(snNumber.length, '0');
let currentSn = snPrefix + formattedNumber;
productsToAdd.push({
productSn: currentSn,
productCode: this.form.productCode,
model: this.form.productModel,
productDesc: this.form.productDesc,
innerPrice: this.form.price,
warehouseId: this.form.warehouseId,
warehouseName: this.form.warehouseName
});
}
this.form.inventoryInfoList.push(...productsToAdd);
this.snOpen = false;
},
/** 搜索按钮操作 */
handleQuery() {
this.queryParams.pageNum = 1;
@ -380,6 +494,21 @@ export default {
/** 新增按钮操作 */
handleAdd() {
this.reset();
this.purchaseOrderSelectVisible = true;
},
handlePurchaseOrderSelect(order) {
this.form.vendorCode = order.vendorCode
this.form.vendorName = order.vendorName
this.form.productType = order.productType
this.form.productCode = order.productCode
this.form.productModel = order.productModel
this.form.price = order.price
this.form.quantity = order.quantity
this.form.warehouseId = order.warehouseId
const warehouse = this.warehouseOptions.find(w => w.id === this.form.warehouseId);
this.form.warehouseName = warehouse.warehouseName || '';
this.form.warehouseType = warehouse.warehouseType
this.form.productDesc = order.productDesc
this.open = true;
this.isView = false;
this.title = "添加入库单";
@ -466,25 +595,7 @@ export default {
this.warehouseOptions = res.data;
})
},
//
handleFileSuccess(res, file, fileList) {
if (res.code === 0) {
this.form.fileId = res.id || res.data.id;
this.form.originalFilename = res.originalFilename || res.data.originalFilename; // Store filename
this.upload.fileList = fileList;
} else {
this.$modal.msgError(res.msg);
}
},
handleFileRemove(file, fileList) {
this.form.fileId = null;
this.form.originalFilename = null; // Clear filename
this.upload.fileList = fileList;
},
beforeUpload(file) {
// Add file type/size validation if needed
return true;
},
handleDownloadFile() {
if (this.form.fileId) {
window.location.href = process.env.VUE_APP_BASE_API + "/common/file/download?id=" + this.form.fileId;
@ -492,10 +603,13 @@ export default {
this.$modal.msgWarning("文件ID不存在无法下载");
}
},
//
handleProductAdd() {
this.resetProductForm();
this.productOpen = true;
handleProductAddNew(type, row) {
this.snTitle = type === 'add' ? '添加SN码' : '修改SN码'
this.snLabel = type === 'add' ? '该批次起始SN码' : 'SN码'
this.inputSn = row?.productSn
this.snRow = row
this.snOpen = true
},
handleImportSuccess(res, file) {
if (res.code === 0) {
@ -506,13 +620,15 @@ export default {
}
},
handleDownloadTemplate() {
downloadTemplate().then(res => {
this.download(res, "入库数据模板.xlsx");
})
this.download('/inventory/inner/vue/export/template', {}, "入库数据模板.xlsx");
},
handleProductDelete(index) {
this.form.inventoryInfoList.splice(index, 1);
},
//
//
resetProductForm() {
this.productForm = {
@ -625,7 +741,31 @@ export default {
cancelProduct() {
this.productOpen = false;
this.resetProductForm();
}
},
//
handleProductAdd() {
this.resetProductForm();
this.productOpen = true;
},
//
handleFileSuccess(res, file, fileList) {
if (res.code === 0) {
this.form.fileId = res.id || res.data.id;
this.form.originalFilename = res.originalFilename || res.data.originalFilename; // Store filename
this.upload.fileList = fileList;
} else {
this.$modal.msgError(res.msg);
}
},
handleFileRemove(file, fileList) {
this.form.fileId = null;
this.form.originalFilename = null; // Clear filename
this.upload.fileList = fileList;
},
beforeUpload(file) {
// Add file type/size validation if needed
return true;
},
}
};
</script>

View File

@ -297,7 +297,19 @@ export default {
{ required: true, message: "认证级别不能为空", trigger: "change" }
],
systemUserName: [
{ required: true, message: "系统用户不能为空", trigger: "blur" }
{
validator: (rule, value, callback) => {
if (this.form.level === '04') {
callback();
} else {
if (!value) {
callback(new Error("系统用户不能为空"));
} else {
callback();
}
}
}, trigger: "blur"
}
],
contactEmail: [
{

View File

@ -8,6 +8,7 @@ import com.ruoyi.common.enums.ApproveStatusEnum;
import com.ruoyi.common.enums.BusinessType;
import com.ruoyi.common.utils.poi.ExcelUtil;
import com.ruoyi.sip.domain.OmsPurchaseOrder;
import com.ruoyi.sip.dto.inventory.OmsPurchaseOrderItemDto;
import com.ruoyi.sip.flowable.domain.Todo;
import com.ruoyi.sip.flowable.service.TodoService;
import com.ruoyi.sip.service.IOmsPurchaseOrderHistoryService;
@ -55,6 +56,17 @@ public class OmsPurchaseOrderController extends BaseController
*
*/
@RequiresPermissions("sip:purchaseorder:list")
@GetMapping("/item/list")
public TableDataInfo listItem(OmsPurchaseOrderItemDto omsPurchaseOrder)
{
startPage();
List<OmsPurchaseOrderItemDto> list = omsPurchaseOrderService.listItem(omsPurchaseOrder);
return getDataTable(list);
}
/**
*
*/
@RequiresPermissions("sip:purchaseorder:list")
@GetMapping("/vendor/list")
public TableDataInfo listVendor(OmsPurchaseOrder omsPurchaseOrder)
{

View File

@ -37,6 +37,7 @@ public class OmsPurchaseOrder extends BaseEntity
/** 制造商ID */
private Long vendorId;
private String vendorCode;
private String vendorName;
private String vendorUser;
private String vendorPhone;

View File

@ -0,0 +1,39 @@
package com.ruoyi.sip.dto.inventory;
import com.ruoyi.common.annotation.DataScope;
import com.ruoyi.sip.domain.OmsPurchaseOrder;
import lombok.Data;
import lombok.ToString;
import java.math.BigDecimal;
/**
* @author : ch
* @version : 1.0
* @ClassName : OmsPurchaseOrderItemDto
* @Description :
* @DATE : Created in 15:02 2025/11/28
* <pre> Copyright: Copyright(c) 2025 </pre>
* <pre> Company : </pre>
* Modification History:
* Date Author Version Discription
* --------------------------------------------------------------------------
* 2025/11/28 ch 1.0 Why & What is modified: <> *
*/
@Data
@ToString
public class OmsPurchaseOrderItemDto extends OmsPurchaseOrder {
/** 产品CODE */
private String productCode;
/** 数量 */
private BigDecimal quantity;
private BigDecimal innerQuantity;
/** 单价 */
private BigDecimal price;
private String productType;
private String productModel;
private String productDesc;
}

View File

@ -3,6 +3,7 @@ package com.ruoyi.sip.mapper;
import java.util.List;
import com.ruoyi.sip.domain.OmsPurchaseOrder;
import com.ruoyi.sip.domain.OmsPurchaseOrderItem;
import com.ruoyi.sip.dto.inventory.OmsPurchaseOrderItemDto;
import org.apache.ibatis.annotations.Param;
/**
@ -100,4 +101,5 @@ public interface OmsPurchaseOrderMapper
List<OmsPurchaseOrder> listByCodeList(List<String> businessKeyList);
List<OmsPurchaseOrderItemDto> listItem(OmsPurchaseOrderItemDto omsPurchaseOrder);
}

View File

@ -2,6 +2,7 @@ package com.ruoyi.sip.service;
import java.util.List;
import com.ruoyi.sip.domain.OmsPurchaseOrder;
import com.ruoyi.sip.dto.inventory.OmsPurchaseOrderItemDto;
import com.ruoyi.sip.flowable.domain.Todo;
/**
@ -87,4 +88,6 @@ public interface IOmsPurchaseOrderService
List<OmsPurchaseOrder> listApprove(OmsPurchaseOrder omsPurchaseOrder);
List<OmsPurchaseOrder> listApproved(OmsPurchaseOrder omsPurchaseOrder);
List<OmsPurchaseOrderItemDto> listItem(OmsPurchaseOrderItemDto omsPurchaseOrder);
}

View File

@ -12,6 +12,7 @@ import com.ruoyi.common.exception.ServiceException;
import com.ruoyi.common.utils.DateUtils;
import com.ruoyi.common.utils.ShiroUtils;
import com.ruoyi.sip.domain.*;
import com.ruoyi.sip.dto.inventory.OmsPurchaseOrderItemDto;
import com.ruoyi.sip.flowable.domain.Todo;
import com.ruoyi.sip.flowable.service.DeleteFlowableProcessInstanceCmd;
import com.ruoyi.sip.flowable.service.TodoCommonTemplate;
@ -273,6 +274,11 @@ public class OmsPurchaseOrderServiceImpl implements IOmsPurchaseOrderService, To
return omsPurchaseOrderMapper.listApprove(omsPurchaseOrder,"bu_todo_completed");
}
@Override
public List<OmsPurchaseOrderItemDto> listItem(OmsPurchaseOrderItemDto omsPurchaseOrder) {
return omsPurchaseOrderMapper.listItem(omsPurchaseOrder);
}
/**
*

View File

@ -148,6 +148,40 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
#{item}
</foreach>
</select>
<select id="listItem" resultType="com.ruoyi.sip.dto.inventory.OmsPurchaseOrderItemDto">
SELECT
t2.purchase_no,
t2.buyer_name,
t4.vendor_code,
t4.vendor_name,
t4.vendor_user,
t4.vendor_phone,
t2.create_time,
t2.owner_name,
t3.type as product_type,
t1.product_code,
t3.model as product_model,
t1.inner_quantity,
t1.quantity,
t1.price,
t1.amount_total,
t2.warehouse_id,
t3.description as product_desc
FROM
oms_purchase_order_item t1
LEFT JOIN oms_purchase_order t2 ON t1.purchase_id = t2.id
left join product_info t3 on t1.product_code=t3.product_code
left join oms_vendor_info t4 on t2.vendor_id=t4.vendor_id
<where>
<if test="purchaseNo != null and purchaseNo != ''">and t2.purchase_no = #{purchaseNo}</if>
<if test="productCode != null and productCode != '' ">and t1.product_code = #{productCode}</if>
<if test="productType != null">and t3.type = #{productType}</if>
<if test="vendorName != null and vendorName != ''">and t4.vendor_name = #{vendorName}</if>
</where>
</select>
<insert id="insertOmsPurchaseOrder" parameterType="OmsPurchaseOrder" useGeneratedKeys="true" keyProperty="id">
insert into oms_purchase_order