feat(inventory): 实现订单与服务入库功能分离
- 新增标签页切换功能,区分订单入库和服务入库 - 增加采购单号和合同编号搜索条件 - 根据入库类型动态显示表格列和操作按钮 - 引入订单详情和服务详情组件,优化查看界面 - 更新Java实体类和Mapper,支持按产品类型筛选和模糊查询 - 实现入库取消功能,同步更新采购订单状态 - 添加根据合同编号查询项目信息的功能 - 优化前端组件结构,提高代码可维护性dev_1.0.0
parent
d579a27562
commit
6747c224c8
|
|
@ -0,0 +1,52 @@
|
|||
<template>
|
||||
<div style="padding: 20px;">
|
||||
<el-form :model="form" label-width="100px">
|
||||
<el-row>
|
||||
<el-col :span="24"><h3>入库信息</h3></el-col>
|
||||
<el-col :span="12">
|
||||
<el-form-item label="入库单号:">{{ form.innerCode }}</el-form-item>
|
||||
</el-col>
|
||||
<el-col :span="12">
|
||||
<el-form-item label="制造商:">{{ form.vendorName }}</el-form-item>
|
||||
</el-col>
|
||||
<el-col :span="12">
|
||||
<el-form-item label="入库时间:">{{ parseTime(form.createTime) }}</el-form-item>
|
||||
</el-col>
|
||||
<el-col :span="12">
|
||||
<el-form-item label="备注:">{{ form.remark }}</el-form-item>
|
||||
</el-col>
|
||||
<el-col :span="12">
|
||||
<el-form-item label="附件信息:">
|
||||
<div v-if="form.originalFilename">
|
||||
<el-link type="primary" @click="$emit('download-file')">{{ form.originalFilename }}</el-link>
|
||||
</div>
|
||||
<span v-else>无</span>
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
</el-row>
|
||||
<el-row>
|
||||
<el-col :span="24"><h3>产品信息</h3></el-col>
|
||||
</el-row>
|
||||
<el-table :data="form.inventoryInfoList">
|
||||
<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>
|
||||
</el-form>
|
||||
</div>
|
||||
</template>
|
||||
|
||||
<script>
|
||||
export default {
|
||||
name: "OrderDetail",
|
||||
props: {
|
||||
form: {
|
||||
type: Object,
|
||||
required: true
|
||||
}
|
||||
}
|
||||
}
|
||||
</script>
|
||||
|
|
@ -0,0 +1,60 @@
|
|||
<template>
|
||||
<div style="padding: 20px;">
|
||||
<el-form :model="form" label-width="100px">
|
||||
<el-row>
|
||||
<el-col :span="24"><h3>入库信息</h3></el-col>
|
||||
<el-col :span="12">
|
||||
<el-form-item label="入库单号:">{{ form.innerCode }}</el-form-item>
|
||||
</el-col>
|
||||
<el-col :span="12">
|
||||
<el-form-item label="入库时间:">{{ parseTime(form.createTime) }}</el-form-item>
|
||||
</el-col>
|
||||
<el-col :span="12">
|
||||
<el-form-item label="经办人:">{{ form.createByName }}</el-form-item>
|
||||
</el-col>
|
||||
<el-col :span="12">
|
||||
<el-form-item label="产品类型:">
|
||||
<dict-tag :options="dict.type.product_type" :value="form.productType"/>
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
<el-col :span="12">
|
||||
<el-form-item label="制造商:">{{ form.vendorName }}</el-form-item>
|
||||
</el-col>
|
||||
<el-col :span="12">
|
||||
<el-form-item label="合同编号:">{{ form.orderCode }}</el-form-item>
|
||||
</el-col>
|
||||
<el-col :span="12">
|
||||
<el-form-item label="项目编号:">{{ form.projectCode }}</el-form-item>
|
||||
</el-col>
|
||||
<el-col :span="12">
|
||||
<el-form-item label="项目名称:">{{ form.projectName }}</el-form-item>
|
||||
</el-col>
|
||||
<el-col :span="12">
|
||||
<el-form-item label="数量:">{{ form.quantity }}</el-form-item>
|
||||
</el-col>
|
||||
</el-row>
|
||||
<el-row>
|
||||
<el-col :span="24"><h3>产品信息</h3></el-col>
|
||||
</el-row>
|
||||
<el-table :data="form.inventoryInfoList">
|
||||
<el-table-column label="产品编码" prop="productCode"/>
|
||||
<el-table-column label="产品型号" prop="model"/>
|
||||
<el-table-column label="描述" prop="productDesc"/>
|
||||
<!-- <el-table-column label="入库价" prop="innerPrice"/>-->
|
||||
</el-table>
|
||||
</el-form>
|
||||
</div>
|
||||
</template>
|
||||
|
||||
<script>
|
||||
export default {
|
||||
name: "ServiceDetail",
|
||||
dicts: ['product_type'],
|
||||
props: {
|
||||
form: {
|
||||
type: Object,
|
||||
required: true
|
||||
}
|
||||
}
|
||||
}
|
||||
</script>
|
||||
|
|
@ -1,10 +1,21 @@
|
|||
<template>
|
||||
<div class="app-container">
|
||||
<el-tabs v-model="activeTab" @tab-click="handleTabClick">
|
||||
<el-tab-pane label="订单入库" name="order"></el-tab-pane>
|
||||
<el-tab-pane label="服务入库" name="service"></el-tab-pane>
|
||||
</el-tabs>
|
||||
|
||||
<!-- 搜索表单 -->
|
||||
<el-form :model="queryParams" ref="queryForm" :inline="true" v-show="showSearch" label-width="88px">
|
||||
<el-form-item label="入库单号" prop="innerCode">
|
||||
<el-input v-model="queryParams.innerCode" placeholder="请输入入库单号" clearable @keyup.enter.native="handleQuery"/>
|
||||
</el-form-item>
|
||||
<el-form-item label="采购单号" prop="purchaseNo">
|
||||
<el-input v-model="queryParams.purchaseNo" placeholder="请输入采购单号" clearable @keyup.enter.native="handleQuery"/>
|
||||
</el-form-item>
|
||||
<el-form-item v-if="activeTab === 'service'" label="合同编号" prop="orderCode">
|
||||
<el-input v-model="queryParams.orderCode" placeholder="请输入合同编号" clearable @keyup.enter.native="handleQuery"/>
|
||||
</el-form-item>
|
||||
<el-form-item label="产品编码" prop="productCode">
|
||||
<el-input v-model="queryParams.productCode" placeholder="请输入产品编码" clearable @keyup.enter.native="handleQuery"/>
|
||||
</el-form-item>
|
||||
|
|
@ -30,22 +41,22 @@
|
|||
|
||||
<!-- 操作按钮 -->
|
||||
<el-row :gutter="10" class="mb8">
|
||||
<el-col :span="1.5">
|
||||
<el-col :span="1.5" v-if="activeTab === 'order'">
|
||||
<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-col :span="1.5" v-if="activeTab === 'service'">
|
||||
<el-button type="primary" plain icon="el-icon-plus" @click="handleAdd('maintenance')" v-hasPermi="['inventory:inner:add']">
|
||||
服务入库
|
||||
</el-button>
|
||||
</el-col>
|
||||
<el-col :span="1.5">
|
||||
<el-col :span="1.5" v-if="activeTab === 'order'">
|
||||
<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-col :span="1.5" v-if="activeTab === 'service'">
|
||||
<el-button type="warning" plain icon="el-icon-download" @click="handleExport"
|
||||
v-hasPermi="['inventory:inner:export']">导出服务产品
|
||||
</el-button>
|
||||
|
|
@ -66,14 +77,14 @@
|
|||
<el-table-column label="产品编码" align="center" prop="productCode" show-overflow-tooltip/>
|
||||
<el-table-column label="数量" align="center" prop="quantity" />
|
||||
<el-table-column label="制造商" align="center" prop="vendorName" show-overflow-tooltip/>
|
||||
<el-table-column label="入库类型" align="center" prop="warehouseType" >
|
||||
<el-table-column v-if="activeTab === 'order'" label="入库类型" align="center" prop="warehouseType" >
|
||||
<template slot-scope="scope">
|
||||
<dict-tag :options="dict.type.warehouse_type" :value="scope.row.warehouseType"/>
|
||||
</template>
|
||||
</el-table-column>
|
||||
<el-table-column label="入库仓" align="center" prop="warehouseName" show-overflow-tooltip/>
|
||||
<el-table-column v-if="activeTab === 'order'" label="入库仓" align="center" prop="warehouseName" show-overflow-tooltip/>
|
||||
<el-table-column label="经办人" align="center" prop="createByName" />
|
||||
<el-table-column label="备注" align="center" prop="remark" show-overflow-tooltip/>
|
||||
<!-- <el-table-column label="备注" align="center" prop="remark" show-overflow-tooltip/>-->
|
||||
<el-table-column label="入库时间" align="center" prop="createTime" width="180">
|
||||
<template slot-scope="scope">
|
||||
<span>{{ parseTime(scope.row.createTime) }}</span>
|
||||
|
|
@ -95,45 +106,6 @@
|
|||
<!-- 新增/修改 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="12">
|
||||
|
|
@ -205,8 +177,6 @@
|
|||
<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="操作" align="center">
|
||||
<template slot-scope="scope">
|
||||
<el-button size="mini" type="text" icon="el-icon-delete"
|
||||
|
|
@ -246,109 +216,8 @@
|
|||
|
||||
<!-- 查看详情 Drawer -->
|
||||
<el-drawer :title="title" :visible.sync="drawerOpen" direction="rtl" size="70%">
|
||||
<div style="padding: 20px;">
|
||||
<el-form :model="form" label-width="100px">
|
||||
<el-row>
|
||||
<el-col :span="24"><h3>入库信息</h3></el-col>
|
||||
<el-col :span="12">
|
||||
<el-form-item label="入库单号:">{{ form.innerCode }}</el-form-item>
|
||||
</el-col>
|
||||
<el-col :span="12">
|
||||
<el-form-item label="制造商:">{{ form.vendorName }}</el-form-item>
|
||||
</el-col>
|
||||
<el-col :span="12">
|
||||
<el-form-item label="入库时间:">{{ parseTime(form.createTime) }}</el-form-item>
|
||||
</el-col>
|
||||
<el-col :span="12">
|
||||
<el-form-item label="备注:">{{ form.remark }}</el-form-item>
|
||||
</el-col>
|
||||
<el-col :span="12">
|
||||
<el-form-item label="附件信息:">
|
||||
<div v-if="form.originalFilename">
|
||||
<el-link type="primary" @click="handleDownloadFile">{{ form.originalFilename }}</el-link>
|
||||
</div>
|
||||
<span v-else>无</span>
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
</el-row>
|
||||
<el-row>
|
||||
<el-col :span="24"><h3>产品信息</h3></el-col>
|
||||
</el-row>
|
||||
<el-table :data="form.inventoryInfoList">
|
||||
<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>
|
||||
</el-form>
|
||||
</div>
|
||||
<component :is="detailComponent" :form="form" @download-file="handleDownloadFile" v-if="drawerOpen"/>
|
||||
</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>-->
|
||||
|
||||
</div>
|
||||
</template>
|
||||
|
||||
|
|
@ -363,6 +232,8 @@ import {exportProject} from "@/api/project/info";
|
|||
import PurchaseOrderSelectDialog from '../../purchaseorder/components/PurchaseOrderSelectDialog.vue';
|
||||
import OrderSelectDialog from '../../project/order/components/OrderSelectDialog.vue';
|
||||
import Dict from "@/views/system/dict/index.vue";
|
||||
import OrderDetail from "@/views/inventory/inner/components/OrderDetail.vue";
|
||||
import ServiceDetail from "@/views/inventory/inner/components/ServiceDetail.vue";
|
||||
|
||||
export default {
|
||||
name: "Inner",
|
||||
|
|
@ -370,10 +241,15 @@ export default {
|
|||
Dict,
|
||||
PurchaseOrderSelectDialog,
|
||||
OrderSelectDialog,
|
||||
OrderDetail,
|
||||
ServiceDetail,
|
||||
},
|
||||
dicts: ['product_type', 'warehouse_type'],
|
||||
data() {
|
||||
return {
|
||||
detailComponent: null,
|
||||
// 激活的 Tab
|
||||
activeTab: 'order',
|
||||
// 遮罩层
|
||||
loading: true,
|
||||
// 显示搜索条件
|
||||
|
|
@ -406,6 +282,8 @@ export default {
|
|||
innerCode: null,
|
||||
productCode: null,
|
||||
createByName: null,
|
||||
orderCode: null,
|
||||
productTypeList: ['1','2','99'], // 'service' or 'order'
|
||||
orderByColumn:'createTime',
|
||||
isAsc: 'desc'
|
||||
},
|
||||
|
|
@ -469,6 +347,10 @@ export default {
|
|||
this.loading = false;
|
||||
});
|
||||
},
|
||||
/** Tab 切换 */
|
||||
handleTabClick() {
|
||||
this.resetQuery();
|
||||
},
|
||||
submitSn() {
|
||||
if (this.snRow) {
|
||||
this.snRow.productSn = this.inputSn;
|
||||
|
|
@ -515,6 +397,11 @@ export default {
|
|||
/** 搜索按钮操作 */
|
||||
handleQuery() {
|
||||
this.queryParams.pageNum = 1;
|
||||
if (this.activeTab==='service'){
|
||||
this.queryParams.productTypeList = ['11','22'];
|
||||
}else{
|
||||
this.queryParams.productTypeList = ['1','2','99'];
|
||||
}
|
||||
this.getList();
|
||||
},
|
||||
/** 重置按钮操作 */
|
||||
|
|
@ -582,6 +469,11 @@ export default {
|
|||
const id = row.id;
|
||||
getInner(id).then(response => {
|
||||
this.form = response.data;
|
||||
if (['11', '22'].includes(this.form.productType)) {
|
||||
this.detailComponent = 'ServiceDetail';
|
||||
} else {
|
||||
this.detailComponent = 'OrderDetail';
|
||||
}
|
||||
if (this.form.fileId && this.form.originalFilename) {
|
||||
this.upload.fileList = [{
|
||||
name: this.form.originalFilename,
|
||||
|
|
|
|||
|
|
@ -84,6 +84,10 @@ export default {
|
|||
productTypeList:{
|
||||
type:Array,
|
||||
default: []
|
||||
},
|
||||
type:{
|
||||
type: String,
|
||||
default: 'inner'
|
||||
}
|
||||
},
|
||||
dicts:['product_type'],
|
||||
|
|
@ -108,7 +112,8 @@ export default {
|
|||
productTypeList: [],
|
||||
vendorName: null,
|
||||
approveStatus: '2', // 只查询审批通过的
|
||||
confirmStatus:'1'
|
||||
confirmStatus:'1',
|
||||
type: this.type
|
||||
},
|
||||
};
|
||||
},
|
||||
|
|
|
|||
|
|
@ -34,7 +34,10 @@ public class OmsInventoryInner extends BaseEntity {
|
|||
*/
|
||||
@Excel(name = "入库单号")
|
||||
private String innerCode;
|
||||
|
||||
@Excel(name = "采购单号")
|
||||
private String purchaseNo;
|
||||
@Excel(name = "产品类型",dictType = "product_type")
|
||||
private String productType;
|
||||
/**
|
||||
* 产品编码
|
||||
*/
|
||||
|
|
@ -68,12 +71,13 @@ public class OmsInventoryInner extends BaseEntity {
|
|||
@Excel(name = "入库时间",dateFormat="yyyy-MM-dd HH:mm:ss")
|
||||
private Date createTime;
|
||||
|
||||
private String purchaseNo;
|
||||
private String productType;
|
||||
private String orderCode;
|
||||
private String projectCode;
|
||||
private String projectName;
|
||||
private BigDecimal totalAmount;
|
||||
private BigDecimal taxRate;
|
||||
private BigDecimal taxTotal;
|
||||
private Long itemId;
|
||||
private List<String> productTypeList;
|
||||
private List<InventoryInfo> inventoryInfoList;
|
||||
}
|
||||
|
|
|
|||
|
|
@ -27,6 +27,7 @@ public class OmsPurchaseOrderItem extends BaseEntity
|
|||
|
||||
/** 关联采购单ID */
|
||||
private Long purchaseId;
|
||||
private String purchaseNo;
|
||||
|
||||
/** 产品CODE */
|
||||
private String productCode;
|
||||
|
|
|
|||
|
|
@ -35,7 +35,8 @@ public class OmsPurchaseOrderItemDto extends OmsPurchaseOrder {
|
|||
private BigDecimal taxRate;
|
||||
private Long itemId;
|
||||
|
||||
|
||||
// inner 代表查询入库数量和实际数量不一致的
|
||||
private String type;
|
||||
/** 单价 */
|
||||
private BigDecimal price;
|
||||
private String productType;
|
||||
|
|
|
|||
|
|
@ -62,4 +62,6 @@ public interface OmsInventoryInnerMapper
|
|||
int selectMaxOrderCode(String code);
|
||||
|
||||
List<String> checkDelete(String[] ids);
|
||||
|
||||
List<OmsInventoryInner> listById(String[] idArray);
|
||||
}
|
||||
|
|
|
|||
|
|
@ -106,4 +106,9 @@ public interface OmsPurchaseOrderMapper
|
|||
List<OmsPurchaseOrderItem> listByItemId(Long itemId);
|
||||
|
||||
void updateOmsPurchaseOrderItem(OmsPurchaseOrderItem updateItem);
|
||||
|
||||
void cancelInnerItem(List<OmsPurchaseOrderItem> omsPurchaseOrderItems);
|
||||
|
||||
List<OmsPurchaseOrderItem> listItemByCodeList(List<String> collect);
|
||||
|
||||
}
|
||||
|
|
|
|||
|
|
@ -72,4 +72,6 @@ public interface ProjectInfoMapper
|
|||
|
||||
void updateOrderTimeById(Long projectId);
|
||||
void updateCustomerCodeByCode(@Param("oldValue") String oldValue, @Param("newValue")String newValue);
|
||||
|
||||
ProjectInfo selectProjectInfoByOrderCode(String orderCode);
|
||||
}
|
||||
|
|
|
|||
|
|
@ -2,6 +2,7 @@ package com.ruoyi.sip.service;
|
|||
|
||||
import java.util.List;
|
||||
import com.ruoyi.sip.domain.OmsPurchaseOrder;
|
||||
import com.ruoyi.sip.domain.OmsPurchaseOrderItem;
|
||||
import com.ruoyi.sip.dto.inventory.OmsPurchaseOrderItemDto;
|
||||
import com.ruoyi.sip.flowable.domain.Todo;
|
||||
|
||||
|
|
@ -92,4 +93,6 @@ public interface IOmsPurchaseOrderService
|
|||
List<OmsPurchaseOrderItemDto> listItem(OmsPurchaseOrderItemDto omsPurchaseOrder);
|
||||
|
||||
void innerWarehouse(Long itemId, Long quantity);
|
||||
|
||||
void cancelInnerItem(List<OmsPurchaseOrderItem> omsPurchaseOrderItems);
|
||||
}
|
||||
|
|
|
|||
|
|
@ -67,4 +67,5 @@ public interface IProjectInfoService
|
|||
StatisticsDto homePageData(HomepageQueryDto dto);
|
||||
|
||||
|
||||
ProjectInfo selectProjectInfoByOrderCode(String orderCode);
|
||||
}
|
||||
|
|
|
|||
|
|
@ -1,5 +1,6 @@
|
|||
package com.ruoyi.sip.service.impl;
|
||||
|
||||
import java.math.BigDecimal;
|
||||
import java.util.*;
|
||||
import java.util.function.Function;
|
||||
import java.util.stream.Collectors;
|
||||
|
|
@ -38,6 +39,8 @@ public class OmsInventoryInnerServiceImpl implements IOmsInventoryInnerService {
|
|||
@Autowired
|
||||
private IProductInfoService productInfoService;
|
||||
@Autowired
|
||||
private IProjectInfoService projectInfoService;
|
||||
@Autowired
|
||||
private IOmsWarehouseInfoService warehouseInfoService;
|
||||
@Autowired
|
||||
private IInventoryAuthService inventoryAuthService;
|
||||
|
|
@ -61,6 +64,14 @@ public class OmsInventoryInnerServiceImpl implements IOmsInventoryInnerService {
|
|||
List<InventoryInfo> inventoryInfos = inventoryInfoService.selectInventoryInfoList(queryParams);
|
||||
omsInventoryInner.setInventoryInfoList(inventoryInfos);
|
||||
}
|
||||
if (omsInventoryInner != null && StringUtils.isNotEmpty(omsInventoryInner.getOrderCode())) {
|
||||
ProjectInfo projectInfo = projectInfoService.selectProjectInfoByOrderCode(omsInventoryInner.getOrderCode());
|
||||
if (projectInfo != null) {
|
||||
omsInventoryInner.setProjectCode(projectInfo.getProjectCode());
|
||||
omsInventoryInner.setProjectName(projectInfo.getProjectName());
|
||||
|
||||
}
|
||||
}
|
||||
return omsInventoryInner;
|
||||
}
|
||||
|
||||
|
|
@ -195,6 +206,18 @@ public class OmsInventoryInnerServiceImpl implements IOmsInventoryInnerService {
|
|||
throw new ServiceException(StrUtil.format("已发货的入库单[{}]不能删除", String.join(",",innerCodeList)));
|
||||
}
|
||||
inventoryInfoService.deleteInventoryInfoByInnerIds(idArray);
|
||||
//还原入库数量
|
||||
List<OmsInventoryInner> omsInventoryInners = omsInventoryInnerMapper.listById(idArray);
|
||||
List<OmsPurchaseOrderItem> omsPurchaseOrderItems = omsInventoryInners.stream().map(item -> {
|
||||
OmsPurchaseOrderItem omsPurchaseOrderItem = new OmsPurchaseOrderItem();
|
||||
omsPurchaseOrderItem.setInnerQuantity(BigDecimal.valueOf(item.getQuantity()));
|
||||
omsPurchaseOrderItem.setProductCode(item.getProductCode());
|
||||
omsPurchaseOrderItem.setPurchaseNo(item.getPurchaseNo());
|
||||
return omsPurchaseOrderItem;
|
||||
}).collect(Collectors.toList());
|
||||
|
||||
|
||||
purchaseOrderService.cancelInnerItem(omsPurchaseOrderItems);
|
||||
return omsInventoryInnerMapper.deleteOmsInventoryInnerByIds(idArray);
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -309,6 +309,46 @@ public class OmsPurchaseOrderServiceImpl implements IOmsPurchaseOrderService, To
|
|||
|
||||
}
|
||||
|
||||
@Override
|
||||
public void cancelInnerItem(List<OmsPurchaseOrderItem> omsPurchaseOrderItems) {
|
||||
omsPurchaseOrderMapper.cancelInnerItem(omsPurchaseOrderItems);
|
||||
List<OmsPurchaseOrderItem> omsPurchaseOrderItemList = omsPurchaseOrderMapper.listItemByCodeList(
|
||||
omsPurchaseOrderItems.stream().map(OmsPurchaseOrderItem::getPurchaseNo).distinct().collect(Collectors.toList()));
|
||||
Map<String, List<OmsPurchaseOrderItem>> collect = omsPurchaseOrderItemList.stream().collect(Collectors.groupingBy(OmsPurchaseOrderItem::getPurchaseNo));
|
||||
for (Map.Entry<String, List<OmsPurchaseOrderItem>> entry : collect.entrySet()) {
|
||||
// 计算该purchaseNo下所有item的数量总和和已入库数量总和
|
||||
BigDecimal totalQuantity = entry.getValue().stream()
|
||||
.map(OmsPurchaseOrderItem::getQuantity)
|
||||
.filter(Objects::nonNull)
|
||||
.reduce(BigDecimal.ZERO, BigDecimal::add);
|
||||
|
||||
BigDecimal totalInnerQuantity = entry.getValue().stream()
|
||||
.map(OmsPurchaseOrderItem::getInnerQuantity)
|
||||
.filter(Objects::nonNull)
|
||||
.reduce(BigDecimal.ZERO, BigDecimal::add);
|
||||
|
||||
// 根据规则判断状态
|
||||
int status;
|
||||
if (totalInnerQuantity.compareTo(BigDecimal.ZERO) == 0) {
|
||||
// 已入库数量为0,表示未完成
|
||||
status = OmsPurchaseOrder.StatusEnum.WAIT_COMPLETED.getCode();
|
||||
} else if (totalInnerQuantity.compareTo(totalQuantity) == 0) {
|
||||
// 已入库数量等于总数量,表示已完成
|
||||
status = OmsPurchaseOrder.StatusEnum.COMPLETED.getCode();
|
||||
} else {
|
||||
// 其他情况为部分完成
|
||||
status = OmsPurchaseOrder.StatusEnum.PART_COMPLETED.getCode();
|
||||
}
|
||||
|
||||
// 创建更新对象
|
||||
OmsPurchaseOrder order = new OmsPurchaseOrder();
|
||||
order.setPurchaseNo(entry.getKey());
|
||||
order.setStatus(status);
|
||||
order.setUpdateTime(DateUtils.getNowDate());
|
||||
omsPurchaseOrderMapper.updateOmsPurchaseOrderByCode(order);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* 新增采购单明细表信息
|
||||
|
|
|
|||
|
|
@ -589,6 +589,11 @@ public class ProjectInfoServiceImpl implements IProjectInfoService {
|
|||
return result;
|
||||
}
|
||||
|
||||
@Override
|
||||
public ProjectInfo selectProjectInfoByOrderCode(String orderCode) {
|
||||
return projectInfoMapper.selectProjectInfoByOrderCode(orderCode);
|
||||
}
|
||||
|
||||
private List<ProjectInfo> fetchProjectInfos(ProjectInfo projectInfo) {
|
||||
List<ProjectInfo> projectInfos = projectInfoMapper.selectProjectInfoList(projectInfo);
|
||||
if (CollUtil.isEmpty(projectInfos)) {
|
||||
|
|
|
|||
|
|
@ -51,9 +51,11 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
|
|||
<if test="warehouseId != null "> and t1.warehouse_id = #{warehouseId}</if>
|
||||
<if test="createBy != null and createBy != ''"> and t1.create_by like concat('%', #{createBy}, '%')</if>
|
||||
<if test="createByName != null and createByName != ''"> and t3.user_name like concat('%', #{createByName}, '%')</if>
|
||||
<if test="purchaseNo != null and purchaseNo != ''"> and t1.purchase_no = #{purchaseNo}</if>
|
||||
<if test="purchaseNo != null and purchaseNo != ''"> and t1.purchase_no like concat('%', #{purchaseNo}, '%')</if>
|
||||
<if test="productType != null and productType != ''"> and t1.product_type = #{productType}</if>
|
||||
<if test="orderCode != null and orderCode != ''"> and t1.order_code = #{orderCode}</if>
|
||||
<if test="productTypeList != null and productTypeList.size>0"> and t1.product_type in
|
||||
<foreach item="productType" collection="productTypeList" open="(" separator="," close=")">#{productType}</foreach></if>
|
||||
<if test="orderCode != null and orderCode != ''"> and t1.order_code like concat('%', #{orderCode}, '%')</if>
|
||||
<if test="(params.beginCreateTime != null and params.beginCreateTime != '') or (params.endCreateTime != null and params.endCreateTime!='')">
|
||||
<choose>
|
||||
<when test="(params.beginCreateTime != null and params.beginCreateTime != '') and (params.endCreateTime != null and params.endCreateTime!='')">
|
||||
|
|
@ -92,6 +94,13 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
|
|||
and inventory_status=1
|
||||
|
||||
</select>
|
||||
<select id="listById" resultType="com.ruoyi.sip.domain.OmsInventoryInner">
|
||||
<include refid="selectOmsInventoryInnerVo"/>
|
||||
where t1.id in
|
||||
<foreach item="id" collection="array" open="(" separator="," close=")">
|
||||
#{id}
|
||||
</foreach>
|
||||
</select>
|
||||
|
||||
|
||||
<insert id="insertOmsInventoryInner" parameterType="OmsInventoryInner" useGeneratedKeys="true" keyProperty="id">
|
||||
|
|
|
|||
|
|
@ -179,6 +179,7 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
|
|||
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="type != null and 'inner'.toString() == type">and t1.quantity != t1.inner_quantity</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>
|
||||
|
|
@ -198,6 +199,27 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
|
|||
inner JOIN oms_purchase_order_item opoi ON t1.purchase_id = opoi.purchase_id
|
||||
WHERE opoi.id = #{itemId};
|
||||
</select>
|
||||
<select id="listItemByCodeList" resultType="com.ruoyi.sip.domain.OmsPurchaseOrderItem">
|
||||
SELECT
|
||||
t1.id,
|
||||
t1.purchase_id,
|
||||
t1.product_code,
|
||||
t1.quantity,
|
||||
t1.price,
|
||||
t1.tax_rate,
|
||||
t1.tax_total,
|
||||
t1.amount_total,
|
||||
t1.delivery_date,
|
||||
t1.inner_quantity,
|
||||
opo.purchase_no
|
||||
FROM
|
||||
oms_purchase_order_item t1
|
||||
inner join oms_purchase_order opo on t1.purchase_id = opo.id
|
||||
where opo.purchase_no in
|
||||
<foreach item="item" collection="list" separator="," open="(" close=")">
|
||||
#{item}
|
||||
</foreach>
|
||||
</select>
|
||||
|
||||
<insert id="insertOmsPurchaseOrder" parameterType="OmsPurchaseOrder" useGeneratedKeys="true" keyProperty="id">
|
||||
insert into oms_purchase_order
|
||||
|
|
@ -379,6 +401,14 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
|
|||
<delete id="deleteOmsPurchaseOrderItemByPurchaseId" parameterType="Long">
|
||||
delete from oms_purchase_order_item where purchase_id = #{purchaseId}
|
||||
</delete>
|
||||
<update id="cancelInnerItem">
|
||||
<foreach collection="list" item="item" index="index" separator=";">
|
||||
update oms_purchase_order_item t1
|
||||
left join oms_purchase_order t2 on t1.purchase_id = t2.id
|
||||
set t1.inner_quantity = t1.inner_quantity- #{item.innerQuantity}
|
||||
where t1.product_code = #{item.productCode} and t2.purchase_no=#{item.purchaseNo}
|
||||
</foreach>
|
||||
</update>
|
||||
|
||||
<insert id="batchOmsPurchaseOrderItem">
|
||||
insert into oms_purchase_order_item( purchase_id, product_code, inner_quantity, quantity, price, tax_rate, tax_total, amount_total,delivery_date) values
|
||||
|
|
|
|||
|
|
@ -202,6 +202,10 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
|
|||
|
||||
|
||||
</select>
|
||||
<select id="selectProjectInfoByOrderCode" resultType="com.ruoyi.sip.domain.ProjectInfo">
|
||||
<include refid="selectRelationProjectInfoVo"/>
|
||||
where t1.id in (select project_id from project_order_info where order_code = #{orderCode})
|
||||
</select>
|
||||
|
||||
<insert id="insertProjectInfo" parameterType="ProjectInfo" useGeneratedKeys="true" keyProperty="id">
|
||||
insert into project_info
|
||||
|
|
|
|||
Loading…
Reference in New Issue