change - 问题114:采购新增原材料条码,选择收料通知单后,可以选择多个物料添加原材料条码

master
yinq 7 months ago
parent 87e90ae301
commit e66fb2b206

@ -443,4 +443,17 @@ public class MesBaseBarcodeInfoController extends BaseController
{
return success(mesBaseBarcodeInfoService.selectMesPrdBarcodeInfoList(mesPrdBarcodeInfo));
}
/**
*
* @param mesBaseBarcodeInfoList
* @return
*/
@RequiresPermissions("mes:barcode:add")
@Log(title = "条码信息", businessType = BusinessType.INSERT)
@PostMapping("/batchAdd")
public AjaxResult batchAdd(@RequestBody List<MesBaseBarcodeInfo> mesBaseBarcodeInfoList)
{
return toAjax(mesBaseBarcodeInfoService.batchAddMesBaseBarcodeInfo(mesBaseBarcodeInfoList));
}
}

@ -249,5 +249,13 @@ public interface IMesBaseBarcodeInfoService {
* @return
*/
public List<MesPrdBarcodeInfo> selectMesPrdBarcodeInfoList(MesPrdBarcodeInfo mesPrdBarcodeInfo);
/**
*
* @param mesBaseBarcodeInfoList
* @return
*/
int batchAddMesBaseBarcodeInfo(List<MesBaseBarcodeInfo> mesBaseBarcodeInfoList);
}

@ -2014,6 +2014,30 @@ public class MesBaseBarcodeInfoServiceImpl implements IMesBaseBarcodeInfoService
return mesPrdBarcodeInfoMapper.selectMesPrdBarcodeInfoList(mesPrdBarcodeInfo);
}
/**
*
* @param mesBaseBarcodeInfoList
* @return
*/
@Override
@Transactional(rollbackFor=Exception.class)
public int batchAddMesBaseBarcodeInfo(List<MesBaseBarcodeInfo> mesBaseBarcodeInfoList) {
for (MesBaseBarcodeInfo mesBaseBarcodeInfo : mesBaseBarcodeInfoList) {
// 生成原材料条码
if (mesBaseBarcodeInfo.getBarcodeType().equals(MesConstants.MES_BARCODE_TYPE_RAW)) {
generateRawBarcode(mesBaseBarcodeInfo);
}
// 生成成品条码
else if (mesBaseBarcodeInfo.getBarcodeType().equals(MesConstants.MES_BARCODE_TYPE_PRODUCT)) {
generateProductBarcode(mesBaseBarcodeInfo);
} else {//生成配对码
generateBindBarcode(mesBaseBarcodeInfo);
}
}
return 1;
}
// public MesPurchaseOrder insertVirtualPurchaseOrder(Long materialId, String barcodeInfo, BigDecimal sumOrderAmount,
// List<MesPurchaseOrderRelate> mesPurchaseOrderRelates,String userName, Date currentDate) {

@ -197,3 +197,12 @@ export function listPrdBarcode(query) {
params: query
})
}
// 批量新增条码信息
export function batchAddBarcode(data) {
return request({
url: '/mes/barcode/batchAdd',
method: 'post',
data: data
})
}

@ -145,6 +145,17 @@
>打印
</el-button>
</el-col>
<el-col :span="1.5">
<el-button
type="primary"
plain
icon="el-icon-plus"
size="mini"
@click="handleBatchAdd"
v-hasPermi="['mes:barcode:add']"
>采购批量新增
</el-button>
</el-col>
<!--right-toolbar :showSearch.sync="showSearch" @queryTable="getList" :columns="columns"></right-toolbar-->
</el-row>
@ -712,6 +723,104 @@
</div>
</el-dialog>
<!-- 采购批量新增对话框 -->
<el-dialog :title="batchTitle" :visible.sync="batchOpen" width="1300px" append-to-body>
<el-form ref="batchForm" :model="batchForm" :rules="batchRules" label-width="100px">
<el-form-item label="采购订单" prop="poNo">
<el-input v-model="batchForm.poNo" placeholder="请点击右侧检索采购订单" disabled>
<el-button slot="append" icon="el-icon-search" @click="handleBatchPurchaseOrderAdd"></el-button>
</el-input>
</el-form-item>
<el-form-item label="采购物料" prop="materialId">
<el-table :data="batchForm.mesPurchaseOrderList" :row-class-name="rowMesPurchaseOrderIndex"
@selection-change="handleMesPurchaseOrderSelectionChange" ref="mesPurchaseOrder">
<!-- <el-table-column type="selection" width="55" align="center"/>-->
<el-table-column label="序号" align="center" prop="index" />
<el-table-column label="物料编码" align="center" prop="materialCode" width="120"/>
<el-table-column label="物料名称" align="center" prop="materialName" width="120"/>
<el-table-column label="物料规格" align="center" prop="materialSpec" width="120"/>
<el-table-column label="规格参数" align="center" prop="barcodeSpec"/>
<el-table-column label="可用数量" align="center" prop="availableBindAmount"/>
<el-table-column label="批次标识" align="center" prop="batchFlag" width="180">
<template slot-scope="scope">
<el-radio-group v-model="scope.row.batchFlag" :disabled="scope.row.saleBatchFlagDisable">
<el-radio
v-for="dict in dict.type.mes_material_batch_flag"
:key="dict.value"
:label="dict.value"
>{{ dict.label }}
</el-radio>
</el-radio-group>
</template>
</el-table-column>
<el-table-column label="批次数量" align="center" prop="amount" width="100">
<el-input-number v-model="form.amount" placeholder="请在物料信息中维护" :disabled="editFlag!=='1'"
:min="0"
size="small"
controls-position="right"/>
</el-table-column>
<el-table-column label="条码数量" align="center" width="100">
<template slot-scope="scope">
<el-input-number
v-model="scope.row.barcodeAmount"
:min="0"
size="small"
controls-position="right"
>
</el-input-number>
</template>
</el-table-column>
<el-table-column label="生产日期" align="center" width="150">
<template slot-scope="scope">
<el-date-picker
v-model="scope.row.productionDate"
type="date"
size="small"
value-format="yyyy-MM-dd"
placeholder="选择生产日期">
</el-date-picker>
</template>
</el-table-column>
<el-table-column label="最晚出库日期" align="center" width="150">
<template slot-scope="scope">
<el-date-picker
v-model="scope.row.lastOutstockDate"
type="date"
size="small"
value-format="yyyy-MM-dd"
placeholder="选择最晚出库日期">
</el-date-picker>
</template>
</el-table-column>
<el-table-column label="备注" align="center" width="150">
<template slot-scope="scope">
<el-input
v-model="scope.row.remark"
type="textarea"
size="small"
:rows="1"
placeholder="请输入备注">
</el-input>
</template>
</el-table-column>
</el-table>
</el-form-item>
</el-form>
<div slot="footer" class="dialog-footer">
<el-button type="primary" :loading="submitLoading" @click="submitBatchForm"> </el-button>
<el-button @click="cancelBatch"> </el-button>
</div>
</el-dialog>
<!-- 选择采购订单对话框 -->
<el-dialog title="选择批量采购订单信息" :visible.sync="batchPurchaseOrderOpen" append-to-body>
<add-multiple-purchaseOrder ref="purchaseOrderRef" v-if="batchPurchaseOrderOpen" :defineData="barcodeData"></add-multiple-purchaseOrder>
<div slot="footer" class="dialog-footer">
<el-button type="primary" @click="submitBatchPurchaseOrderForm"> </el-button>
<el-button @click="batchPurchaseOrderOpen = false"> </el-button>
</div>
</el-dialog>
</div>
</template>
@ -720,7 +829,7 @@ import {
listBarcode, getBarcode, delBarcode, addBarcode, updateBarcode, reprintBarcodes,
printBarcodes, getMaterialInfoByErpId, selectProductBarcodeInfoByBarcodeInfo,
addInternalBarcode, regenerateBarcode, checkRawStock, addNoPurchaseBarcode, addRegularBarcode,
mergeAddBarcode, mergeUpdateBarcode
mergeAddBarcode, mergeUpdateBarcode, batchAddBarcode
} from "@/api/mes/barcode";
import {checkWarehouseMaterials} from "@/api/wms/wmswarehouse";
@ -728,6 +837,7 @@ import {checkWarehouseMaterials} from "@/api/wms/wmswarehouse";
import selectOrderBind from '@//views/mes/purchaseOrder/selectOrderBind.vue';
import selectMaterial from '@//views/mes/materialinfo/selectMaterial.vue';
import selectPurchaseOrder from '@//views/mes/purchaseOrder/addPurchaseOrder.vue';
import addMultiplePurchaseOrder from '@//views/mes/purchaseOrder/addMultiplePurchaseOrder.vue';
export default {
name: "Barcode",
@ -736,6 +846,7 @@ export default {
'select-orderBind': selectOrderBind,
'select-material': selectMaterial,
'select-purchaseOrder': selectPurchaseOrder,
'add-multiple-purchaseOrder': addMultiplePurchaseOrder,
},
data() {
@ -757,8 +868,8 @@ export default {
barcodeList: [],
//
onlyPurchaseOrderOpen: false,
purchaseOrderOpen: false,
batchPurchaseOrderOpen: false,
//
selectMaterialVisible: false,
//
@ -971,6 +1082,19 @@ export default {
REGULAR: "9"
},
batchOpen: false,
batchTitle: "采购批量新增",
batchForm: {
mesPurchaseOrderList: [],
poNo: undefined
},
batchRules: {
poNo: [
{ required: true, message: "采购订单不能为空", trigger: "blur" }
]
},
//
checkedPurchaseOrders: [],
};
},
created() {
@ -1222,6 +1346,7 @@ export default {
submitSingleSelectPurchaseOrder() {
let selectedRow = this.$refs.purchaseOrderRef.selectedRow;
console.log("selectedRow",selectedRow)
this.form.batchFlag = null;
this.form.amount = null;
this.form.receiveBillId = null;
@ -1910,6 +2035,144 @@ export default {
this.onlyPurchaseOrderOpen = false;
},
handleBatchAdd() {
this.resetBatch();
this.batchOpen = true;
this.title = "采购批量新增";
},
resetBatch() {
this.batchForm = {
mesPurchaseOrderList: [],
poNo: undefined
};
this.resetForm("batchForm");
},
/** 批量选择采购订单按钮操作 */
handleBatchPurchaseOrderAdd() {
this.barcodeData = {mergeFlag: null};
this.batchPurchaseOrderOpen = true;
},
/** 复选框选中数据 */
handleMesPurchaseOrderSelectionChange(selection) {
this.checkedPurchaseOrders = selection;
},
rowMesPurchaseOrderIndex({row, rowIndex}) {
row.index = rowIndex + 1;
},
/** 提交按钮 */
submitBatchForm() {
this.$refs["batchForm"].validate(valid => {
if (valid) {
//
const invalidRow = this.batchForm.mesPurchaseOrderList.find(row => {
return !row.productionDate || !row.lastOutstockDate;
});
if (invalidRow) {
this.$modal.msgError("请填写所有行的生产日期和最晚出库日期");
return;
}
//
const invalidAmount = this.batchForm.mesPurchaseOrderList.find(row => {
return !row.barcodeAmount || row.barcodeAmount <= 0;
});
if (invalidAmount) {
this.$modal.msgError("请填写有效的条码数量");
return;
}
this.submitLoading = true;
batchAddBarcode(this.batchForm.mesPurchaseOrderList).then(response => {
this.$modal.msgSuccess("新增成功");
this.cancelBatch();
this.getList();
}).finally(e => {
this.submitLoading = false;
});
}
});
},
cancelBatch() {
this.batchOpen = false;
this.resetBatchForm();
},
/** 提交批量采购订单选择 */
submitBatchPurchaseOrderForm() {
let selectedRows = this.$refs.purchaseOrderRef.selectedRows;
console.log("selectedRows",selectedRows)
if (!selectedRows || selectedRows.length <= 0) {
this.$modal.msgWarning("请选择采购订单");
return;
}
let firstRow = selectedRows[0];
let firstRowPoNo = firstRow.poNo;
//
let unavailableAmountResult = selectedRows.find(item => {
return item.relateSaleOrderAmount <= 0;
});
if (unavailableAmountResult != null && unavailableAmountResult !== '') {
this.$modal.msgError("存在可用数量为0的数据");
return;
}
//
selectedRows.forEach(selectedRow => {
let purchaseOrder = {}
purchaseOrder.poNo = selectedRow.poNo;
purchaseOrder.barcodeType = '1';//1,2,3,4
purchaseOrder.materialId = selectedRow.materialId;//ID
purchaseOrder.materialCode = selectedRow.materialCode;
purchaseOrder.materialName = selectedRow.materialName;
purchaseOrder.materialSpec = selectedRow.materialSpec;
purchaseOrder.projectNo = selectedRow.projectNo;
purchaseOrder.receiveBillId = selectedRow.receiveBillId;
purchaseOrder.purchaseOrderId = selectedRow.purchaseOrderId;
purchaseOrder.currentSafeBindAmount = 0;
if (selectedRow.specificationParameter && selectedRow.specificationParameter !== '') {
purchaseOrder.barcodeSpec = selectedRow.specificationParameter;
} else {
purchaseOrder.barcodeSpec = selectedRow.materialSpec;
}
//
purchaseOrder.availableBindAmount = Math.ceil(selectedRow.relateSaleOrderAmount);
purchaseOrder.orderBindId = selectedRow.orderBindId;
//
purchaseOrder.barcodeAmount = null;
purchaseOrder.batchFlag = selectedRow.batchFlag;
purchaseOrder.amount = selectedRow.batchAmount;
purchaseOrder.saleBatchFlagDisable = !!purchaseOrder.batchFlag;
this.batchForm.mesPurchaseOrderList.push(purchaseOrder);
});
this.batchForm.poNo = firstRowPoNo;
this.batchPurchaseOrderOpen = false;
},
resetBatchForm() {
this.batchForm = {
mesPurchaseOrderList: [],
poNo: undefined
};
this.$refs["batchForm"].resetFields();
},
}
};
</script>

@ -0,0 +1,362 @@
<template>
<div class="app-container">
<el-form :model="queryParams" ref="queryForm" size="small" :inline="true" v-show="showSearch" label-width="100px">
<el-row>
<el-form-item label="收料通知单号" prop="billNo">
<el-input v-model="queryParams.billNo" placeholder="请点击右侧检索收料通知单" style="width:400px;" disabled>
<el-button slot="append" icon="el-icon-search" @click="handlePurchaseReceiveBill"></el-button>
</el-input>
</el-form-item>
</el-row>
<el-form-item label="采购订单编号" prop="poNo">
<el-input
v-model="queryParams.poNo"
placeholder="请输入采购订单编号"
clearable
@keyup.enter.native="handleQuery"
disabled
/>
</el-form-item>
<el-form-item label="可用标识" v-if="queryParams.mergeFlag!==null" prop="mergeFlag">
<el-radio-group v-model="queryParams.mergeFlag">
<el-radio label="1" value="1" >
</el-radio>
<el-radio label="" value="" >
</el-radio>
</el-radio-group>
</el-form-item>
<el-form-item label="可用标识" v-if="queryParams.mergeFlag===null" prop="singleFlag">
<el-radio-group v-model="queryParams.singleFlag">
<el-radio label="1" value="1" >
</el-radio>
<el-radio label="" value="" >
</el-radio>
</el-radio-group>
</el-form-item>
<el-form-item>
<el-button type="primary" icon="el-icon-search" size="mini" @click="handleQuery"></el-button>
<el-button icon="el-icon-refresh" size="mini" @click="resetQuery"></el-button>
</el-form-item>
</el-form>
<el-table v-loading="loading"
:data="orderBindList"
@selection-change="handleSelectionChange"
:current-row-key="selectedRowId"
ref="purchaseOrderRef"
row-key="rowKey"
>
<el-table-column label="选择" width="50" v-if="isSingleSelect">
<template slot-scope="scope">
<el-radio v-model="selectedRowId" :label="scope.row.purchaseOrderId+'-'+scope.row.orderBindId" @change="handleSelect(scope.row)">
{{scope.row.i}}
</el-radio>
</template>
</el-table-column>
<el-table-column
type="selection"
width="55"
:reserve-selection="true"
v-if="!isSingleSelect"
></el-table-column>
<el-table-column label="采购订单ID" align="center" prop="purchaseOrderId" />
<el-table-column label="采购订单" align="center" prop="poNo" />
<el-table-column label="物料编码" align="center" prop="materialCode" />
<el-table-column label="物料名称" align="center" prop="materialName" />
<el-table-column label="物料规格" align="center" prop="materialSpec"/>
<el-table-column label="规格参数" align="center" prop="specificationParameter"/>
<el-table-column label="常备物料" align="center" prop="alwaysFlag">
<template slot-scope="scope">
<dict-tag :options="dict.type.mes_material_bind_flag" :value="scope.row.alwaysFlag"/>
</template>
</el-table-column>
<!-- <el-table-column label="绑定数量" align="center" prop="bindAmount" />-->
<!-- <el-table-column label="条码数量" align="center" prop="barcodeAmount" />-->
<el-table-column label="采购数量" align="center" prop="orderAmount" />
<el-table-column label="可用数量" align="center" prop="relateSaleOrderAmount" />
<el-table-column label="销售订单" align="center" prop="saleOrderCode" />
<el-table-column label="成品编码" align="center" prop="productCode" />
<el-table-column label="成品名称" align="center" prop="productName" />
<el-table-column label="成品规格" align="center" prop="productSpec"/>
<el-table-column label="销售数量" align="center" prop="saleOrderAmount" />
</el-table>
<pagination
v-show="total>0"
:total="total"
:page.sync="queryParams.pageNum"
:limit.sync="queryParams.pageSize"
@pagination="getList"
/>
<!-- 选择收料通知单对话框 -->
<el-dialog title="选择收料通知单信息" :visible.sync="purchaseReceiveBillOpen" append-to-body>
<select-purchase-receive-bill ref="purchaseOrderRef" v-if="purchaseReceiveBillOpen"></select-purchase-receive-bill>
<div slot="footer" class="dialog-footer">
<el-button
type="primary" @click="submitPurchaseReceiveBillForm"> </el-button>
<el-button @click="purchaseReceiveBillOpen = false"> </el-button>
</div>
</el-dialog>
</div>
</template>
<script>
import {
getPurchaseOrdersWithBind
} from "@//api/mes/purchaseOrder";
import selectPurchaseReceiveBill from '@//views/mes/purchaseReceiveBill/selectPurchaseReceiveBill.vue';
export default {
name: "OrderBind",
dicts: ['active_flag', 'order_status', 'document_status','mes_material_bind_flag'],
components: {
'select-purchase-receive-bill': selectPurchaseReceiveBill,
},
props: {
defineData: {
type: Object,
default: {}
}
},
data() {
return {
//
loading: false,
//
ids: [],
//
single: true,
//
multiple: true,
//
showSearch: true,
//
total: 0,
//
orderBindList: [],
//
title: "",
//
open: false,
selectionVisible:false,
//
queryParams: {
pageNum: 1,
pageSize: 10,
erpId: null,
fentryId: null,
poNo: null,
documentStatus: null,
materialId: null,
materialCode: null,
materialName: null,
materialSpec: null,
specificationParameter: null,
orderAmount: null,
completeAmount: null,
approveDate: null,
erpModifyDate: null,
planDeliveryDate: null,
beginDate: null,
endDate: null,
orderStatus: null,
completeDate: null,
isFlag: null,
mergeFlag: null,
singleFlag: null,
alwaysFlag:""
},
//
form: {},
//
rules: {
materialCode: [
{required: true, message: "物料编码不能为空", trigger: "blur"}
],
orderAmount: [
{required: true, message: "订单计划数量不能为空", trigger: "blur"}
],
isFlag: [
{required: true, message: "是否标识不能为空", trigger: "change"}
],
},
columns: [
{key: 0, label: `主键标识`, visible: true},
{key: 1, label: `ERP主键信息`, visible: false},
{key: 2, label: `金蝶ERP订单明细ID`, visible: false},
{key: 3, label: `采购订单编号`, visible: true},
{key: 4, label: `单据状态`, visible: false},
{key: 5, label: `物料ID`, visible: false},
{key: 6, label: `物料编码`, visible: true},
{key: 7, label: `物料名称`, visible: true},
{key: 8, label: `订单计划数量`, visible: true},
{key: 9, label: `完成采购数量`, visible: false},
{key: 10, label: `审核日期`, visible: false},
{key: 11, label: `ERP最后修改日期`, visible: false},
{key: 12, label: `计划交货日期`, visible: false},
{key: 13, label: `计划开始日期`, visible: false},
{key: 14, label: `计划结束日期`, visible: false},
{key: 15, label: `订单状态`, visible: false},
{key: 16, label: `完成日期`, visible: false},
{key: 17, label: `是否标识`, visible: false},
{key: 18, label: `备注`, visible: false},
{key: 19, label: `创建人`, visible: false},
{key: 20, label: `创建时间`, visible: false},
{key: 21, label: `更新人`, visible: false},
{key: 22, label: `更新时间`, visible: false},
],
selectedRows:[],
selectedRow:null,
selectedRowId:null,
isSingleSelect:false,
purchaseReceiveBillOpen:false,
ALWAYS_FLAG:{
YES:"1",
NO:"0"
}
};
},
created() {
this.getData();
},
methods: {
getData() {
if (this.defineData.mergeFlag) {
this.selectionVisible = true;
this.queryParams.mergeFlag = "1";
this.queryParams.singleFlag = null;
this.isSingleSelect = false;
}else{
this.selectionVisible = false;
this.queryParams.singleFlag ="1";
this.queryParams.mergeFlag = null;
this.isSingleSelect = false;
}
},
/** 查询采购订单信息列表 */
getList() {
if(this.queryParams.billNo==null ||this.queryParams.billNo==='') {
this.$modal.msgWarning("请先选择收料通知单");
return;
}
this.loading = true;
getPurchaseOrdersWithBind(this.queryParams).then(response => {
response.rows.forEach(e => {
if(e.orderBindId){
e.relateSaleOrderAmount = e.bindAmount - e.barcodeAmount;
}
e.receiveBillId = this.queryParams.receiveBillId;
// rowKey
e.rowKey = e.purchaseOrderId + '-' + e.orderBindId;
});
this.orderBindList = response.rows;
this.total = response.total;
this.loading = false;
});
},
//
cancel() {
this.open = false;
this.reset();
},
//
reset() {
this.form = {
purchaseOrderId: null,
erpId: null,
fentryId: null,
poNo: null,
documentStatus: null,
materialId: null,
materialCode: null,
materialName: null,
orderAmount: null,
completeAmount: null,
approveDate: null,
erpModifyDate: null,
planDeliveryDate: null,
beginDate: null,
endDate: null,
orderStatus: null,
completeDate: null,
isFlag: null,
remark: null,
createBy: null,
createTime: null,
updateBy: null,
updateTime: null
};
this.resetForm("form");
},
/** 搜索按钮操作 */
handleQuery() {
this.queryParams.pageNum = 1;
this.getList();
},
/** 重置按钮操作 */
resetQuery() {
this.resetForm("queryForm");
this.handleQuery();
},
//
handleRowClick(row) {
this.selectedRow = row
this.selectedRowId = row.purchaseOrderId+"-"+row.orderBindId;
//alert(this.selectedRowId);
},
handleSelect(row){
this.selectedRow = row;
this.selectedRow.receiveBillId = this.queryParams.receiveBillId;
this.selectedRowId = row.purchaseOrderId+"-"+row.orderBindId;
//
this.$nextTick(() => {
this.$refs.purchaseOrderRef.setCurrentRow(row);
});
},
//
handleSelectionChange(selection) {
this.ids = selection.map(item => item.purchaseOrderId)
this.selectedRows = selection.map(item => item)
this.single = selection.length !== 1
this.multiple = !selection.length
},
handlePurchaseReceiveBill() {
this.purchaseReceiveBillOpen = true;
},
submitPurchaseReceiveBillForm() {
let selectedRow = this.$refs.purchaseOrderRef.selectedRow;
this.$set(this.queryParams, "receiveBillId", null);
this.$set(this.queryParams, "billNo", null);
this.$set(this.queryParams, "poNo", null);
this.$set(this.queryParams, "materialId", null);
this.$set(this.queryParams, "receiveBillId", selectedRow.receiveBillId);
this.$set(this.queryParams, "billNo", selectedRow.billNo);
this.$set(this.queryParams, "poNo", selectedRow.poNo);
this.$set(this.queryParams, "materialId", selectedRow.materialId);
this.getList();
this.purchaseReceiveBillOpen = false;
},
}
};
</script>
Loading…
Cancel
Save