diff --git a/hw-modules/hw-mes/src/main/java/com/hw/mes/controller/MesBaseBarcodeInfoController.java b/hw-modules/hw-mes/src/main/java/com/hw/mes/controller/MesBaseBarcodeInfoController.java index 1e7115d2..576d047a 100644 --- a/hw-modules/hw-mes/src/main/java/com/hw/mes/controller/MesBaseBarcodeInfoController.java +++ b/hw-modules/hw-mes/src/main/java/com/hw/mes/controller/MesBaseBarcodeInfoController.java @@ -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 mesBaseBarcodeInfoList) + { + return toAjax(mesBaseBarcodeInfoService.batchAddMesBaseBarcodeInfo(mesBaseBarcodeInfoList)); + } } diff --git a/hw-modules/hw-mes/src/main/java/com/hw/mes/service/IMesBaseBarcodeInfoService.java b/hw-modules/hw-mes/src/main/java/com/hw/mes/service/IMesBaseBarcodeInfoService.java index 42a21ac9..fa09a88a 100644 --- a/hw-modules/hw-mes/src/main/java/com/hw/mes/service/IMesBaseBarcodeInfoService.java +++ b/hw-modules/hw-mes/src/main/java/com/hw/mes/service/IMesBaseBarcodeInfoService.java @@ -249,5 +249,13 @@ public interface IMesBaseBarcodeInfoService { * @return */ public List selectMesPrdBarcodeInfoList(MesPrdBarcodeInfo mesPrdBarcodeInfo); + + /** + * 批量新增条码信息 + * @param mesBaseBarcodeInfoList + * @return + */ + int batchAddMesBaseBarcodeInfo(List mesBaseBarcodeInfoList); + } diff --git a/hw-modules/hw-mes/src/main/java/com/hw/mes/service/impl/MesBaseBarcodeInfoServiceImpl.java b/hw-modules/hw-mes/src/main/java/com/hw/mes/service/impl/MesBaseBarcodeInfoServiceImpl.java index 1f2ef199..58fbf84a 100644 --- a/hw-modules/hw-mes/src/main/java/com/hw/mes/service/impl/MesBaseBarcodeInfoServiceImpl.java +++ b/hw-modules/hw-mes/src/main/java/com/hw/mes/service/impl/MesBaseBarcodeInfoServiceImpl.java @@ -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 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 mesPurchaseOrderRelates,String userName, Date currentDate) { diff --git a/hw-ui/src/api/mes/barcode.js b/hw-ui/src/api/mes/barcode.js index b46a4b49..6aa35302 100644 --- a/hw-ui/src/api/mes/barcode.js +++ b/hw-ui/src/api/mes/barcode.js @@ -197,3 +197,12 @@ export function listPrdBarcode(query) { params: query }) } + +// 批量新增条码信息 +export function batchAddBarcode(data) { + return request({ + url: '/mes/barcode/batchAdd', + method: 'post', + data: data + }) +} diff --git a/hw-ui/src/views/mes/barcode/index.vue b/hw-ui/src/views/mes/barcode/index.vue index b7a37106..c57bc047 100644 --- a/hw-ui/src/views/mes/barcode/index.vue +++ b/hw-ui/src/views/mes/barcode/index.vue @@ -145,6 +145,17 @@ >打印 + + 采购批量新增 + + @@ -712,6 +723,104 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + @@ -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(); + }, + } }; diff --git a/hw-ui/src/views/mes/purchaseOrder/addMultiplePurchaseOrder.vue b/hw-ui/src/views/mes/purchaseOrder/addMultiplePurchaseOrder.vue new file mode 100644 index 00000000..c95b3d50 --- /dev/null +++ b/hw-ui/src/views/mes/purchaseOrder/addMultiplePurchaseOrder.vue @@ -0,0 +1,362 @@ + + +