From 92849062544b7278230ba6613538712374a9ea57 Mon Sep 17 00:00:00 2001 From: Ledo Date: Wed, 25 Jun 2025 21:47:33 +0800 Subject: [PATCH] =?UTF-8?q?=E8=B0=83=E6=95=B4=E9=83=A8=E5=88=86=E6=95=B0?= =?UTF-8?q?=E6=8D=AE=E4=B8=8D=E5=86=8D=E5=86=99=E5=85=A5=E6=95=B0=E6=8D=AE?= =?UTF-8?q?=E5=BA=93?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../module/heli/enums/ErrorCodeConstants.java | 1 + .../dal/dataobject/material/MaterialDO.java | 2 + .../materialplanboom/MaterialPlanBoomDO.java | 1 + .../PurchaseOrderMakeDetailDO.java | 1 + .../dal/mysql/material/MaterialMapper.java | 10 +++ .../PurchaseOrderMakeDetailMapper.java | 3 +- .../processbom/ProcessBomServiceImpl.java | 10 ++- .../PurchaseOrderMakeDetailServiceImpl.java | 50 +++++++++++--- .../src/api/heli/materialplanboom/index.ts | 1 + .../views/heli/materialplan/purchasemake.vue | 12 ++-- .../views/heli/materialplan/standardbuy.vue | 69 +++++++++++-------- .../views/heli/materialplan/storageLog.vue | 4 +- .../views/heli/processdesign/bomDetail.vue | 2 +- 13 files changed, 115 insertions(+), 51 deletions(-) diff --git a/mes-module-heli/mes-module-heli-api/src/main/java/com/chanko/yunxi/mes/module/heli/enums/ErrorCodeConstants.java b/mes-module-heli/mes-module-heli-api/src/main/java/com/chanko/yunxi/mes/module/heli/enums/ErrorCodeConstants.java index 0c39f2a..c823619 100644 --- a/mes-module-heli/mes-module-heli-api/src/main/java/com/chanko/yunxi/mes/module/heli/enums/ErrorCodeConstants.java +++ b/mes-module-heli/mes-module-heli-api/src/main/java/com/chanko/yunxi/mes/module/heli/enums/ErrorCodeConstants.java @@ -103,6 +103,7 @@ public interface ErrorCodeConstants { ErrorCode PURCHASE_ORDER_MAKE_DETAIL_NOT_EXISTS = new ErrorCode(1_008_008, "采购单明细不存在"); ErrorCode PURCHASE_ORDER_MAKE_DETAIL_IS_EXISTS = new ErrorCode(1_008_009, "存在物料清单已生成采购订单,请刷新界面!"); ErrorCode PURCHASE_ORDER_MAKE_DETAIL_IS_STORAGE = new ErrorCode(1_008_010, "存在物料清单已转库存,请刷新界面!"); + ErrorCode PURCHASE_ORDER_MAKE_DETAIL_MATERIAL_NOT_EXISTS = new ErrorCode(1_008_011, "物料数据不能为空,请选择物料后重试!"); /************生产管理***********/ ErrorCode TASK_DISPATCH_NOT_EXISTS = new ErrorCode(1_009_001, "派工单不存在"); ErrorCode TASK_REPORT_NOT_EXISTS = new ErrorCode(1_009_002, "任务报工不存在"); diff --git a/mes-module-heli/mes-module-heli-biz/src/main/java/com/chanko/yunxi/mes/module/heli/dal/dataobject/material/MaterialDO.java b/mes-module-heli/mes-module-heli-biz/src/main/java/com/chanko/yunxi/mes/module/heli/dal/dataobject/material/MaterialDO.java index efdfeb7..3edde13 100644 --- a/mes-module-heli/mes-module-heli-biz/src/main/java/com/chanko/yunxi/mes/module/heli/dal/dataobject/material/MaterialDO.java +++ b/mes-module-heli/mes-module-heli-biz/src/main/java/com/chanko/yunxi/mes/module/heli/dal/dataobject/material/MaterialDO.java @@ -90,6 +90,8 @@ public class MaterialDO extends TenantBaseDO { * 材质id */ private Long compositionId; + @TableField(exist = false) + private String compositionName; /** * 销项税率或进项税率 (%) */ diff --git a/mes-module-heli/mes-module-heli-biz/src/main/java/com/chanko/yunxi/mes/module/heli/dal/dataobject/materialplanboom/MaterialPlanBoomDO.java b/mes-module-heli/mes-module-heli-biz/src/main/java/com/chanko/yunxi/mes/module/heli/dal/dataobject/materialplanboom/MaterialPlanBoomDO.java index 29f06e5..13b8ef1 100644 --- a/mes-module-heli/mes-module-heli-biz/src/main/java/com/chanko/yunxi/mes/module/heli/dal/dataobject/materialplanboom/MaterialPlanBoomDO.java +++ b/mes-module-heli/mes-module-heli-biz/src/main/java/com/chanko/yunxi/mes/module/heli/dal/dataobject/materialplanboom/MaterialPlanBoomDO.java @@ -86,6 +86,7 @@ public class MaterialPlanBoomDO extends BaseDO { /** * 物料id */ + @TableField(exist = false) private Long materialId; /** * 零件重量 diff --git a/mes-module-heli/mes-module-heli-biz/src/main/java/com/chanko/yunxi/mes/module/heli/dal/dataobject/purchaseordermakedetail/PurchaseOrderMakeDetailDO.java b/mes-module-heli/mes-module-heli-biz/src/main/java/com/chanko/yunxi/mes/module/heli/dal/dataobject/purchaseordermakedetail/PurchaseOrderMakeDetailDO.java index 744416e..fe21389 100644 --- a/mes-module-heli/mes-module-heli-biz/src/main/java/com/chanko/yunxi/mes/module/heli/dal/dataobject/purchaseordermakedetail/PurchaseOrderMakeDetailDO.java +++ b/mes-module-heli/mes-module-heli-biz/src/main/java/com/chanko/yunxi/mes/module/heli/dal/dataobject/purchaseordermakedetail/PurchaseOrderMakeDetailDO.java @@ -154,6 +154,7 @@ public class PurchaseOrderMakeDetailDO extends BaseDO { /** * 物料id */ + @TableField(exist = false) private Long materialId; } diff --git a/mes-module-heli/mes-module-heli-biz/src/main/java/com/chanko/yunxi/mes/module/heli/dal/mysql/material/MaterialMapper.java b/mes-module-heli/mes-module-heli-biz/src/main/java/com/chanko/yunxi/mes/module/heli/dal/mysql/material/MaterialMapper.java index 21d5132..04b498a 100644 --- a/mes-module-heli/mes-module-heli-biz/src/main/java/com/chanko/yunxi/mes/module/heli/dal/mysql/material/MaterialMapper.java +++ b/mes-module-heli/mes-module-heli-biz/src/main/java/com/chanko/yunxi/mes/module/heli/dal/mysql/material/MaterialMapper.java @@ -4,6 +4,7 @@ import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.chanko.yunxi.mes.framework.common.pojo.PageResult; import com.chanko.yunxi.mes.framework.mybatis.core.mapper.BaseMapperX; import com.chanko.yunxi.mes.module.heli.controller.admin.material.vo.MaterialPageReqVO; +import com.chanko.yunxi.mes.module.heli.dal.dataobject.composition.CompositionDO; import com.chanko.yunxi.mes.module.heli.dal.dataobject.material.MaterialDO; import com.chanko.yunxi.mes.module.heli.dal.dataobject.pn.PnDO; import com.chanko.yunxi.mes.module.heli.dal.dataobject.supplier.SupplierDO; @@ -31,6 +32,15 @@ public interface MaterialMapper extends BaseMapperX { query.eq(code != null, MaterialDO::getCode, code); return selectOne( query); } + //材质为空时查不出来数据注释 +// default MaterialDO selectById(Long id) { +// MPJLambdaWrapper query = new MPJLambdaWrapper<>(); +// query.selectAll(MaterialDO.class) +// .select("c.name as compositionName") +// .leftJoin(CompositionDO.class,"c",CompositionDO::getId,MaterialDO::getCompositionId); +// query.eq(MaterialDO::getId, id); +// return selectOne( query); +// } default MaterialDO selectMaterial(String code) { MPJLambdaWrapper query = new MPJLambdaWrapper<>(); diff --git a/mes-module-heli/mes-module-heli-biz/src/main/java/com/chanko/yunxi/mes/module/heli/dal/mysql/purchaseordermakedetail/PurchaseOrderMakeDetailMapper.java b/mes-module-heli/mes-module-heli-biz/src/main/java/com/chanko/yunxi/mes/module/heli/dal/mysql/purchaseordermakedetail/PurchaseOrderMakeDetailMapper.java index 9e64734..ec84a43 100644 --- a/mes-module-heli/mes-module-heli-biz/src/main/java/com/chanko/yunxi/mes/module/heli/dal/mysql/purchaseordermakedetail/PurchaseOrderMakeDetailMapper.java +++ b/mes-module-heli/mes-module-heli-biz/src/main/java/com/chanko/yunxi/mes/module/heli/dal/mysql/purchaseordermakedetail/PurchaseOrderMakeDetailMapper.java @@ -38,10 +38,9 @@ public interface PurchaseOrderMakeDetailMapper extends BaseMapperX selectPage(PurchaseOrderMakeDetailPageReqVO reqVO) { MPJLambdaWrapper query = new MPJLambdaWrapper<>(); query.selectAll(PurchaseOrderMakeDetailDO.class) - .select("b.material_name as boomName","m.code as boomCode","b.spec as boomSpec","b.unit as boomUnit") + .select("b.material_name as boomName","b.spec as boomSpec","b.unit as boomUnit") // .select("pom.purchase_no as purchaseNo") .leftJoin(ProcessBomDetailDO.class,"b",ProcessBomDetailDO::getId,PurchaseOrderMakeDetailDO::getBoomDetailId) - .leftJoin(MaterialDO.class,"m",MaterialDO::getId,PurchaseOrderMakeDetailDO::getMaterialId) .leftJoin(ProjectOrderSubDO.class,"pos",ProjectOrderSubDO::getId,PurchaseOrderMakeDetailDO::getProjectPlanSubId) .leftJoin(ProjectOrderDO.class,"po",ProjectOrderDO::getId, ProjectOrderSubDO::getProjectOrderId) .leftJoin(PurchaseOrderMakeDO.class,"pom",PurchaseOrderMakeDO::getId,PurchaseOrderMakeDetailDO::getPurchaseOrderId) diff --git a/mes-module-heli/mes-module-heli-biz/src/main/java/com/chanko/yunxi/mes/module/heli/service/processbom/ProcessBomServiceImpl.java b/mes-module-heli/mes-module-heli-biz/src/main/java/com/chanko/yunxi/mes/module/heli/service/processbom/ProcessBomServiceImpl.java index 27ddf4e..206dacb 100644 --- a/mes-module-heli/mes-module-heli-biz/src/main/java/com/chanko/yunxi/mes/module/heli/service/processbom/ProcessBomServiceImpl.java +++ b/mes-module-heli/mes-module-heli-biz/src/main/java/com/chanko/yunxi/mes/module/heli/service/processbom/ProcessBomServiceImpl.java @@ -403,7 +403,7 @@ public class ProcessBomServiceImpl implements ProcessBomService { //不论怎么样,都要校验这次的数据它图号是否唯一、非标准件的名称是否重复,规格是否为空 if (CollUtil.isNotEmpty(processBomDetails)){ //校验这次的数据它图号是否唯一 - Map> groupedByBluePrintfNo = processBomDetails.stream().collect(Collectors.groupingBy(vo -> vo.getBlueprintNo() == null ? "NULL" : vo.getBlueprintNo())); + Map> groupedByBluePrintfNo = processBomDetails.stream().filter(e -> e.getDeleted() == false).collect(Collectors.groupingBy(vo -> vo.getBlueprintNo() == null ? "NULL" : vo.getBlueprintNo())); groupedByBluePrintfNo.forEach((printNo,list)->{ if (printNo.equals("NULL")){ throw exception(PROCESS_BOM_DETAIL_BLUE_PRINT_NO_NOT_EXISTS); @@ -439,6 +439,14 @@ public class ProcessBomServiceImpl implements ProcessBomService { // processBomDetail.setMaterialCode(""); // } // } + }else { + if(operateTypeEnum == OperateTypeEnum.SUBMIT){ + if (processBomDetail.getSpec() == null){ + throw exception(new ErrorCode(1_006_9998,processBomDetail.getMaterialName()+"规格型号不能为空,请确认!")); + + } + } + } } diff --git a/mes-module-heli/mes-module-heli-biz/src/main/java/com/chanko/yunxi/mes/module/heli/service/purchaseordermakedetail/PurchaseOrderMakeDetailServiceImpl.java b/mes-module-heli/mes-module-heli-biz/src/main/java/com/chanko/yunxi/mes/module/heli/service/purchaseordermakedetail/PurchaseOrderMakeDetailServiceImpl.java index 434443f..3a9bb8e 100644 --- a/mes-module-heli/mes-module-heli-biz/src/main/java/com/chanko/yunxi/mes/module/heli/service/purchaseordermakedetail/PurchaseOrderMakeDetailServiceImpl.java +++ b/mes-module-heli/mes-module-heli-biz/src/main/java/com/chanko/yunxi/mes/module/heli/service/purchaseordermakedetail/PurchaseOrderMakeDetailServiceImpl.java @@ -1,11 +1,15 @@ package com.chanko.yunxi.mes.module.heli.service.purchaseordermakedetail; import cn.hutool.core.collection.CollUtil; +import com.chanko.yunxi.mes.module.heli.dal.dataobject.composition.CompositionDO; +import com.chanko.yunxi.mes.module.heli.dal.dataobject.material.MaterialDO; import com.chanko.yunxi.mes.module.heli.dal.dataobject.purchaseorder.PurchaseOrderDO; import com.chanko.yunxi.mes.module.heli.dal.dataobject.purchaseordermake.PurchaseOrderMakeDO; import com.chanko.yunxi.mes.module.heli.dal.dataobject.purchaseorderno.PurchaseOrderNoDO; import com.chanko.yunxi.mes.module.heli.dal.dataobject.purchaseordernodetail.PurchaseOrderNoDetailDO; import com.chanko.yunxi.mes.module.heli.dal.dataobject.serialnumber.SerialNumberDO; +import com.chanko.yunxi.mes.module.heli.dal.mysql.composition.CompositionMapper; +import com.chanko.yunxi.mes.module.heli.dal.mysql.material.MaterialMapper; import com.chanko.yunxi.mes.module.heli.dal.mysql.purchaseordermake.PurchaseOrderMakeMapper; import com.chanko.yunxi.mes.module.heli.dal.mysql.purchaseorderno.PurchaseOrderNoMapper; import com.chanko.yunxi.mes.module.heli.dal.mysql.purchaseordernodetail.PurchaseOrderNoDetailMapper; @@ -53,7 +57,10 @@ public class PurchaseOrderMakeDetailServiceImpl implements PurchaseOrderMakeDeta private PurchaseOrderNoDetailMapper purchaseOrderNoDetailMapper; @Resource private PurchaseOrderMakeMapper purchaseOrderMakeMapper; - + @Resource + private MaterialMapper materialMapper; + @Resource + private CompositionMapper compositionMapper; @Override public Long createPurchaseOrderMakeDetail(PurchaseOrderMakeDetailSaveReqVO createReqVO) { // 插入 @@ -84,16 +91,39 @@ public class PurchaseOrderMakeDetailServiceImpl implements PurchaseOrderMakeDeta purchaseOrderNoMapper.insert(purchaseOrderNoDO); List insertList =new ArrayList<>(); HashMap insertMap = new HashMap<>(); + HashMap insertMaterialMap = new HashMap<>(); + HashMap compositionDOHashMap = new HashMap<>(); for (PurchaseOrderMakeDetailDO pmd : updateList) { PurchaseOrderNoDetailDO pd = new PurchaseOrderNoDetailDO(); pd.setMakeDetailId(pmd.getId()); pd.setPurchaseOrderId(purchaseOrderNoDO.getId()); pd.setBoomDetailId(pmd.getBoomDetailId()); - pd.setBoomName(pmd.getBoomName()); - pd.setBoomSpec(pmd.getBoomSpec()); - pd.setBoomUnit(pmd.getBoomUnit()); - pd.setComposition(pmd.getComposition()); + if (pd.getMakeDetailId() != null) { + MaterialDO materialDO = insertMaterialMap.get(pmd.getMaterialId()); + + if (materialDO == null) { + materialDO = materialMapper.selectById(pmd.getMaterialId()); + insertMaterialMap.put(pd.getMakeDetailId(), materialDO); + } + if (materialDO.getCompositionId() != null) { + CompositionDO compositionDO = compositionDOHashMap.get(materialDO.getCompositionId()); + if (compositionDO == null) { + compositionDO = compositionMapper.selectById(materialDO.getCompositionId()); + compositionDOHashMap.put(materialDO.getCompositionId(), compositionDO); + } + pd.setComposition(compositionDO == null ?"":compositionDO.getName()); + } + + pd.setBoomName(materialDO.getName()); + pd.setMaterialId(materialDO.getId()); + pd.setBoomSpec(materialDO.getSpec()); + pd.setBoomUnit(materialDO.getUnit()); + + }else { + throw exception(PURCHASE_ORDER_MAKE_DETAIL_MATERIAL_NOT_EXISTS); + } + pd.setPurchaseAmount(pmd.getPurchaseAmount()); pd.setEstimatedPrice(pmd.getEstimatedPrice()); pd.setArriveTime(pmd.getArriveTime()); @@ -143,12 +173,12 @@ public class PurchaseOrderMakeDetailServiceImpl implements PurchaseOrderMakeDeta validatePurchaseOrderMakeDetailExists(updateReqVO.getId()); // 更新 PurchaseOrderMakeDetailDO updateObj = BeanUtils.toBean(updateReqVO, PurchaseOrderMakeDetailDO.class); - if (updateObj.getMaterialId() == null){ - purchaseOrderMakeDetailMapper.clearMaterialId(updateObj.getId()); +// if (updateObj.getMaterialId() == null){ +// purchaseOrderMakeDetailMapper.clearMaterialId(updateObj.getId()); +// purchaseOrderMakeDetailMapper.updateById(updateObj); +// }else { purchaseOrderMakeDetailMapper.updateById(updateObj); - }else { - purchaseOrderMakeDetailMapper.updateById(updateObj); - } + // } } diff --git a/mes-ui/mes-ui-admin-vue3/src/api/heli/materialplanboom/index.ts b/mes-ui/mes-ui-admin-vue3/src/api/heli/materialplanboom/index.ts index ae50060..844b8e0 100644 --- a/mes-ui/mes-ui-admin-vue3/src/api/heli/materialplanboom/index.ts +++ b/mes-ui/mes-ui-admin-vue3/src/api/heli/materialplanboom/index.ts @@ -11,6 +11,7 @@ export interface MaterialPlanBoomVO { purchaseAmount:number estimatedPrice:number arriveTime:Date + projectPurchaseOrderMakeDetailId:number supplierId:number materialPlanBoomDOList:Array } diff --git a/mes-ui/mes-ui-admin-vue3/src/views/heli/materialplan/purchasemake.vue b/mes-ui/mes-ui-admin-vue3/src/views/heli/materialplan/purchasemake.vue index e4f3146..4007c11 100644 --- a/mes-ui/mes-ui-admin-vue3/src/views/heli/materialplan/purchasemake.vue +++ b/mes-ui/mes-ui-admin-vue3/src/views/heli/materialplan/purchasemake.vue @@ -19,7 +19,7 @@ - + @@ -75,6 +75,7 @@ :remote-method="e => remoteMethod(e,scope.row)" remote-show-suffix remote + @click="remoteMethod(scope.row.boomCode,scope.row)" :disabled="scope.row.orderStatus == 2" clearable reserve-keyword @@ -107,6 +108,7 @@ v-model="scope.row.supplierId" size="large" disabled + filterable style="width: 165 px" > { // row.boomName = e.materialName; // row.boomSpec = e.spec; // row.boomUnit = e.unit - await updateRows(row) + // await updateRows(row) }else{ row.materialId = null; await updateRows(row) @@ -320,7 +322,7 @@ const handleQuery = () => { const opearteForm = async(type) =>{ loading.value = true; if(type == 1){ - router.push({ path: '/purchase/PurchaseOrder', query: { flush: 1 } }) + router.push({ path: '/purchase/purchaseordernomanagement', query: { flush: 1 } }) return; } if(ids.value != null && ids.value.length > 0){ @@ -472,8 +474,8 @@ const handleExport = async () => { await message.exportConfirm() // 发起导出 exportLoading.value = true - const data = await ProcessBomApi.exportProcessBom(queryParams) - download.excel(data, '工艺bom.xls') + // const data = await ProcessBomApi.exportProcessBom(queryParams) + // download.excel(data, '工艺bom.xls') } catch { } finally { exportLoading.value = false diff --git a/mes-ui/mes-ui-admin-vue3/src/views/heli/materialplan/standardbuy.vue b/mes-ui/mes-ui-admin-vue3/src/views/heli/materialplan/standardbuy.vue index 7d10fb7..ca9200d 100644 --- a/mes-ui/mes-ui-admin-vue3/src/views/heli/materialplan/standardbuy.vue +++ b/mes-ui/mes-ui-admin-vue3/src/views/heli/materialplan/standardbuy.vue @@ -28,7 +28,7 @@ /> - + @@ -91,12 +91,6 @@ - - - - + + + + @@ -134,7 +135,7 @@ - + - - + + + + + @@ -230,9 +236,10 @@ const getRowKeys=(row)=>{ const handleSelectionChange = (selection) => { ids.value = selection; - console.log(ids.value) } - +const clearItem = () =>{ + multipleTable.value.clearSelection(); +} /** 导出按钮操作 */ const handleExportDetail = async () => { try { @@ -247,13 +254,14 @@ const handleExportDetail = async () => { exportLoading.value = false } } -const getMat = async (rowids,amount,ids) => { +const getMat = async (rowids,amount,ids,matCodes) => { //formData.value.boomItemDOList = arrBoom for(var i = 0 ; i < list.value.length ; i ++){ if(list.value[i].id == rowids){ list.value[i].matRest = amount + list.value[i].matCode = matCodes list.value[i].materialId = ids - await updateRow(2,list.value[i]); + // await updateRow(2,list.value[i]); break; } } @@ -332,23 +340,24 @@ const opearteForm = async(type) =>{ await materialPlanBoomApi.updateMaterialPlanBoom(form); message.success("送审成功") await getList() - }catch(e){ + }catch{ loading.value = false }finally{ loading.value = false } - - + + }else{ //去库存 - for(var i = 0 ; i{ await materialPlanBoomApi.updateMaterialPlanBoom(form); message.success("去库存成功") await getList() - }catch(e){ + }catch{ loading.value = false }finally{ loading.value = false } - - + + } }else{ message.error("至少选择一项后进行操作!") @@ -478,8 +487,8 @@ const handleExport = async () => { await message.exportConfirm() // 发起导出 exportLoading.value = true - const data = await ProcessBomApi.exportProcessBom(queryParams) - download.excel(data, '工艺bom.xls') + // const data = await ProcessBomApi.exportProcessBom(queryParams) + // download.excel(data, '工艺bom.xls') } catch { } finally { exportLoading.value = false diff --git a/mes-ui/mes-ui-admin-vue3/src/views/heli/materialplan/storageLog.vue b/mes-ui/mes-ui-admin-vue3/src/views/heli/materialplan/storageLog.vue index 8b12aa0..51c8f3e 100644 --- a/mes-ui/mes-ui-admin-vue3/src/views/heli/materialplan/storageLog.vue +++ b/mes-ui/mes-ui-admin-vue3/src/views/heli/materialplan/storageLog.vue @@ -7,7 +7,7 @@ - + @@ -162,7 +162,7 @@ const emit = defineEmits(['success']) // emit('success', multipleSelection.value) const success = () =>{ dialogVisible.value = false; - emit('success',rowid.value,clickItem.value.storageOkQty,clickItem.value.id) + emit('success',rowid.value,clickItem.value.storageOkQty,clickItem.value.id,clickItem.value.matCode) } const handleRg = async (rgid) => { pnCurrentList.value =[] diff --git a/mes-ui/mes-ui-admin-vue3/src/views/heli/processdesign/bomDetail.vue b/mes-ui/mes-ui-admin-vue3/src/views/heli/processdesign/bomDetail.vue index 62854c5..1eb8bfd 100644 --- a/mes-ui/mes-ui-admin-vue3/src/views/heli/processdesign/bomDetail.vue +++ b/mes-ui/mes-ui-admin-vue3/src/views/heli/processdesign/bomDetail.vue @@ -167,7 +167,7 @@