部分代码恢复及修改

This commit is contained in:
Ledo 2025-06-25 16:03:35 +08:00
parent fea38d7741
commit 11893e4cd2
13 changed files with 75 additions and 54 deletions

View File

@ -35,6 +35,8 @@ public class MaterialPlanBoomSaveReqVO {
@Schema(description = "需求到货日期") @Schema(description = "需求到货日期")
private LocalDateTime boomArriveDate; private LocalDateTime boomArriveDate;
private Integer buyType; private Integer buyType;
@Schema(description = "备注") @Schema(description = "备注")
private String description; private String description;
@ -47,6 +49,6 @@ public class MaterialPlanBoomSaveReqVO {
//供应商id //供应商id
private Long supplierId; private Long supplierId;
private BigDecimal matRest; private BigDecimal matRest;
private Long materialId;
private List<MaterialPlanBoomDO> materialPlanBoomDOList; private List<MaterialPlanBoomDO> materialPlanBoomDOList;
} }

View File

@ -78,7 +78,7 @@ public class PurchaseOrderMakeDetailRespVO {
@Schema(description = "供应商id", example = "30352") @Schema(description = "供应商id", example = "30352")
@ExcelProperty("供应商id") @ExcelProperty("供应商id")
private Long supplierId; private Long supplierId;
private Long materialId;
@Schema(description = "物料需求计划id", example = "16465") @Schema(description = "物料需求计划id", example = "16465")
@ExcelProperty("物料需求计划id") @ExcelProperty("物料需求计划id")
private Long projectMaterialPlanId; private Long projectMaterialPlanId;
@ -117,7 +117,7 @@ public class PurchaseOrderMakeDetailRespVO {
@Schema(description = "收货状态 未收货/收货中/收货完成 1/2/3", example = "2") @Schema(description = "收货状态 未收货/收货中/收货完成 1/2/3", example = "2")
@ExcelProperty("收货状态 未收货/收货中/收货完成 1/2/3") @ExcelProperty("收货状态 未收货/收货中/收货完成 1/2/3")
private Boolean receivingStatus; private Integer receivingStatus;
@Schema(description = "采购单号") @Schema(description = "采购单号")
@ExcelProperty("采购单号") @ExcelProperty("采购单号")

View File

@ -21,6 +21,8 @@ public class PurchaseOrderMakeDetailSaveReqVO {
@NotNull(message = "采购单id不能为空") @NotNull(message = "采购单id不能为空")
private Long purchaseOrderId; private Long purchaseOrderId;
private Integer buyType;
@Schema(description = "加工件boom detail id", example = "31132") @Schema(description = "加工件boom detail id", example = "31132")
private Long boomDetailId; private Long boomDetailId;
@ -88,7 +90,7 @@ public class PurchaseOrderMakeDetailSaveReqVO {
private String projectSubCode; private String projectSubCode;
@Schema(description = "收货状态 未收货/收货中/收货完成 1/2/3", example = "2") @Schema(description = "收货状态 未收货/收货中/收货完成 1/2/3", example = "2")
private Boolean receivingStatus; private Integer receivingStatus;
@Schema(description = "采购单号") @Schema(description = "采购单号")
private String purchaseNo; private String purchaseNo;

View File

@ -141,18 +141,18 @@ public class MaterialPlanBoomDO extends BaseDO {
private String matType; private String matType;
@TableField(exist = false) @TableField(exist = false)
private String mplanStatusName; private String mplanStatusName;
@TableField(exist = false)
private BigDecimal matRest; private BigDecimal matRest;
//采购数量 //采购数量
@TableField(exist = false)
private BigDecimal purchaseAmount; private BigDecimal purchaseAmount;
@TableField(exist = false)
//暂估价格 //暂估价格
private BigDecimal estimatedPrice; private BigDecimal estimatedPrice;
@TableField(exist = false)
//预估到时间 //预估到时间
private LocalDateTime arriveTime; private LocalDateTime arriveTime;
@TableField(exist = false)
//供应商id //供应商id
private Long supplierId; private Long supplierId;

View File

@ -64,7 +64,7 @@ public interface MaterialPlanBoomMapper extends BaseMapperX<MaterialPlanBoomDO>
query.selectAll(MaterialPlanBoomDO.class) query.selectAll(MaterialPlanBoomDO.class)
// .select("mat.id as matId","mat.name as matName","mat.code as matCode","mat.spec as matSpec","mat.unit as matUnit","mat.material_type as matType") // .select("mat.id as matId","mat.name as matName","mat.code as matCode","mat.spec as matSpec","mat.unit as matUnit","mat.material_type as matType")
.select("b.material_name as matName","b.material_code as matCode","b.spec as matSpec","b.unit as matUnit","b.blueprint_no as blueprintNo") .select("b.material_name as matName","m.code as matCode","b.spec as matSpec","b.unit as matUnit","b.blueprint_no as blueprintNo")
.select("bc.`name` as compositionName","b.`composition_id` as compositionId") .select("bc.`name` as compositionName","b.`composition_id` as compositionId")
.select("ma.brief as customerBriefName,ma.project_name as projectName,ma.name as projectSubName,ma.project_id as projectId") .select("ma.brief as customerBriefName,ma.project_name as projectName,ma.name as projectSubName,ma.project_id as projectId")
.leftJoin(MaterialPlanDO.class,"ma",MaterialPlanDO::getId, MaterialPlanBoomDO::getProjectMaterialPlanId) .leftJoin(MaterialPlanDO.class,"ma",MaterialPlanDO::getId, MaterialPlanBoomDO::getProjectMaterialPlanId)
@ -73,7 +73,9 @@ public interface MaterialPlanBoomMapper extends BaseMapperX<MaterialPlanBoomDO>
.leftJoin(CompositionDO.class, "bc", CompositionDO::getId, ProcessBomDetailDO::getCompositionId) .leftJoin(CompositionDO.class, "bc", CompositionDO::getId, ProcessBomDetailDO::getCompositionId)
.leftJoin(ProjectOrderDO.class,"po",ProjectOrderDO::getId,MaterialPlanDO::getProjectId) .leftJoin(ProjectOrderDO.class,"po",ProjectOrderDO::getId,MaterialPlanDO::getProjectId)
.leftJoin(AdminUserDO.class,"u",AdminUserDO::getId, MaterialPlanBoomDO::getDuEmpId) .leftJoin(AdminUserDO.class,"u",AdminUserDO::getId, MaterialPlanBoomDO::getDuEmpId)
.leftJoin(MaterialDO.class,"m",MaterialDO::getId,MaterialPlanBoomDO::getMaterialId)
.eq(MaterialPlanDO::getMatType,0) .eq(MaterialPlanDO::getMatType,0)
.in(MaterialPlanBoomDO::getIsPurYard,Arrays.asList(0,5))
.disableSubLogicDel() .disableSubLogicDel()
.groupBy(MaterialPlanBoomDO::getId) .groupBy(MaterialPlanBoomDO::getId)
.orderByDesc(MaterialPlanBoomDO::getCreateTime); .orderByDesc(MaterialPlanBoomDO::getCreateTime);

View File

@ -4,6 +4,7 @@ import java.util.*;
import cn.hutool.core.util.ObjectUtil; import cn.hutool.core.util.ObjectUtil;
import com.alibaba.excel.util.StringUtils; import com.alibaba.excel.util.StringUtils;
import com.baomidou.mybatisplus.core.conditions.update.UpdateWrapper;
import com.chanko.yunxi.mes.framework.common.pojo.PageResult; import com.chanko.yunxi.mes.framework.common.pojo.PageResult;
import com.chanko.yunxi.mes.framework.mybatis.core.query.LambdaQueryWrapperX; import com.chanko.yunxi.mes.framework.mybatis.core.query.LambdaQueryWrapperX;
import com.chanko.yunxi.mes.framework.mybatis.core.mapper.BaseMapperX; import com.chanko.yunxi.mes.framework.mybatis.core.mapper.BaseMapperX;
@ -38,7 +39,7 @@ public interface PurchaseOrderMakeDetailMapper extends BaseMapperX<PurchaseOrder
MPJLambdaWrapper<PurchaseOrderMakeDetailDO> query = new MPJLambdaWrapper<>(); MPJLambdaWrapper<PurchaseOrderMakeDetailDO> query = new MPJLambdaWrapper<>();
query.selectAll(PurchaseOrderMakeDetailDO.class) 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","m.code as boomCode","b.spec as boomSpec","b.unit as boomUnit")
.select("pom.purchase_no as purchaseNo") // .select("pom.purchase_no as purchaseNo")
.leftJoin(ProcessBomDetailDO.class,"b",ProcessBomDetailDO::getId,PurchaseOrderMakeDetailDO::getBoomDetailId) .leftJoin(ProcessBomDetailDO.class,"b",ProcessBomDetailDO::getId,PurchaseOrderMakeDetailDO::getBoomDetailId)
.leftJoin(MaterialDO.class,"m",MaterialDO::getId,PurchaseOrderMakeDetailDO::getMaterialId) .leftJoin(MaterialDO.class,"m",MaterialDO::getId,PurchaseOrderMakeDetailDO::getMaterialId)
.leftJoin(ProjectOrderSubDO.class,"pos",ProjectOrderSubDO::getId,PurchaseOrderMakeDetailDO::getProjectPlanSubId) .leftJoin(ProjectOrderSubDO.class,"pos",ProjectOrderSubDO::getId,PurchaseOrderMakeDetailDO::getProjectPlanSubId)
@ -66,7 +67,11 @@ public interface PurchaseOrderMakeDetailMapper extends BaseMapperX<PurchaseOrder
return selectPage(reqVO, query); return selectPage(reqVO, query);
} }
default int clearMaterialId(Long id){
UpdateWrapper<PurchaseOrderMakeDetailDO> updateWrapper = new UpdateWrapper<>();
updateWrapper.set("material_id",null).eq("id",id);
return update(updateWrapper);
}
default PageResult<PartPurchaseOrderPageRespVO> selectPartPurchaseOrderPage(PartPurchaseOrderPageReqVO pageReqVO) { default PageResult<PartPurchaseOrderPageRespVO> selectPartPurchaseOrderPage(PartPurchaseOrderPageReqVO pageReqVO) {
MPJLambdaWrapper<PurchaseOrderMakeDetailDO> query = new MPJLambdaWrapper<>(); MPJLambdaWrapper<PurchaseOrderMakeDetailDO> query = new MPJLambdaWrapper<>();
query.selectAll(PurchaseOrderMakeDetailDO.class) query.selectAll(PurchaseOrderMakeDetailDO.class)

View File

@ -143,7 +143,13 @@ public class PurchaseOrderMakeDetailServiceImpl implements PurchaseOrderMakeDeta
validatePurchaseOrderMakeDetailExists(updateReqVO.getId()); validatePurchaseOrderMakeDetailExists(updateReqVO.getId());
// 更新 // 更新
PurchaseOrderMakeDetailDO updateObj = BeanUtils.toBean(updateReqVO, PurchaseOrderMakeDetailDO.class); PurchaseOrderMakeDetailDO updateObj = BeanUtils.toBean(updateReqVO, PurchaseOrderMakeDetailDO.class);
purchaseOrderMakeDetailMapper.updateById(updateObj); if (updateObj.getMaterialId() == null){
purchaseOrderMakeDetailMapper.clearMaterialId(updateObj.getId());
purchaseOrderMakeDetailMapper.updateById(updateObj);
}else {
purchaseOrderMakeDetailMapper.updateById(updateObj);
}
} }
} }

View File

@ -33,7 +33,8 @@
<select id="hasPurchase" <select id="hasPurchase"
parameterType="java.util.Map" parameterType="java.util.Map"
resultType="Long"> resultType="Long">
select count(*) from project_material_plan_boom where project_purchase_order_make_id is not null and deleted = 0 and tenant_id = 2 and select count(*) from project_material_plan_boom where
project_purchase_order_make_id is not null and deleted = 0 and tenant_id = 2 and
id in id in
<foreach item="id" collection="ids" open="(" separator="," close=")"> <foreach item="id" collection="ids" open="(" separator="," close=")">
#{id} #{id}

View File

@ -11,6 +11,7 @@ export interface PuchaseOrderMakeDetail {
purchaseAmount:number purchaseAmount:number
estimatedPrice:number estimatedPrice:number
arriveTime:Date arriveTime:Date
receivingStatus:number
supplierId:number supplierId:number
materialPlanBoomDOList:Array<PuchaseOrderMakeDetail> materialPlanBoomDOList:Array<PuchaseOrderMakeDetail>
} }

View File

@ -67,6 +67,7 @@
<el-table-column label="序号" align="center" type="index" width="60" /> <el-table-column label="序号" align="center" type="index" width="60" />
<el-table-column label="子项目编码" align="center" prop="projectSubCode" min-width="150" /> <el-table-column label="子项目编码" align="center" prop="projectSubCode" min-width="150" />
<el-table-column label="物料编码" align="center" min-width="180" > <el-table-column label="物料编码" align="center" min-width="180" >
<template #header><span class="hl-table_header">*</span>物料编码</template>
<template #default="scope"> <template #default="scope">
<el-select <el-select
v-model="scope.row.boomCode" v-model="scope.row.boomCode"
@ -224,7 +225,7 @@ const getRowKeys=(row)=>{
const materialSelectList = ref([]) const materialSelectList = ref([])
const queryMaterialParams = { const queryMaterialParams = {
pageNo: 1, pageNo: 1,
pageSize: 40, pageSize: 99,
inventoryCodes: undefined, inventoryCodes: undefined,
inventoryName: undefined, inventoryName: undefined,
} }
@ -241,7 +242,9 @@ const remoteMethod = async (query, row) => {
row.materialSelectList = data.list; row.materialSelectList = data.list;
} else { } else {
// //
row.materialSelectList = []; queryMaterialParams.inventoryName = undefined;
const data = await matApi.getMaterialPage(queryMaterialParams);
row.materialSelectList = data.list;
} }
} catch (error) { } catch (error) {
console.error("查询物料失败:", error); console.error("查询物料失败:", error);
@ -293,6 +296,9 @@ const changeSupp = async(e,row) => {
// row.boomSpec = e.spec; // row.boomSpec = e.spec;
// row.boomUnit = e.unit // row.boomUnit = e.unit
await updateRows(row) await updateRows(row)
}else{
row.materialId = null;
await updateRows(row)
} }
} }
const updateRows = async(row) =>{ const updateRows = async(row) =>{
@ -329,7 +335,7 @@ const opearteForm = async(type) =>{
loading.value = false loading.value = false
return return
} }
if(!row.boomDetailId){ if(!row.materialId){
message.error('零件编码不能为空!') message.error('零件编码不能为空!')
loading.value = false loading.value = false
return return
@ -359,6 +365,7 @@ const opearteForm = async(type) =>{
} }
}else{ }else{
message.error("至少选择一项后进行操作!") message.error("至少选择一项后进行操作!")
loading.value = false
return ; return ;
} }
} }

View File

@ -1,7 +1,7 @@
<template> <template>
<el-card class="hl-card"> <el-card class="hl-card">
<template #header> <template #header>
<span>标准件物料需求计划</span> <span>标准件采购</span>
</template> </template>
<ContentWrap class="borderxx"> <ContentWrap class="borderxx">
<!-- 搜索工作栏 --> <!-- 搜索工作栏 -->
@ -91,12 +91,14 @@
<dict-tag :type="DICT_TYPE.HELI_MATERIAL_UNIT" :value="scope.row.matUnit" /> <dict-tag :type="DICT_TYPE.HELI_MATERIAL_UNIT" :value="scope.row.matUnit" />
</template> </template>
</el-table-column> </el-table-column>
<el-table-column label="采购数量" align="center" prop="purchaseAmount" min-width="180" > <el-table-column align="center" prop="purchaseAmount" min-width="180" >
<template #header><span class="hl-table_header">*</span>采购数量</template>
<template #default="scope"> <template #default="scope">
<el-input-number @blur="updateRow(1,scope.row)" v-model="scope.row.purchaseAmount" :precision="2" :step="0.01" /> <el-input-number @blur="updateRow(1,scope.row)" v-model="scope.row.purchaseAmount" :precision="2" :step="0.01" />
</template> </template>
</el-table-column> </el-table-column>
<el-table-column label="物料编码" align="center" prop="matCode" min-width="180" > <el-table-column label="物料编码" align="center" prop="matCode" min-width="180" >
<template #default="scope"> <template #default="scope">
<el-input v-model="scope.row.matCode" disabled> <el-input v-model="scope.row.matCode" disabled>
<template #suffix> <template #suffix>
@ -106,7 +108,8 @@
</template> </template>
</el-table-column> </el-table-column>
<el-table-column label="库存量" align="center" prop="matRest" min-width="120" /> <el-table-column label="库存量" align="center" prop="matRest" min-width="120" />
<el-table-column label="供应商" align="center" prop="supplierId" min-width="180" > <el-table-column align="center" prop="supplierId" min-width="180" >
<template #header><span class="hl-table_header">*</span>供应商</template>
<template #default="scope"> <template #default="scope">
<el-select <el-select
v-model="scope.row.supplierId" v-model="scope.row.supplierId"
@ -125,7 +128,8 @@
</template> </template>
</el-table-column> </el-table-column>
<el-table-column label="预估总价" align="center" prop="estimatedPrice" min-width="180" > <el-table-column align="center" prop="estimatedPrice" min-width="180" >
<template #header><span class="hl-table_header">*</span>预估总价</template>
<template #default="scope"> <template #default="scope">
<el-input-number @blur="updateRow(3,scope.row)" v-model="scope.row.estimatedPrice" :precision="2" :step="0.01" /> <el-input-number @blur="updateRow(3,scope.row)" v-model="scope.row.estimatedPrice" :precision="2" :step="0.01" />
</template> </template>
@ -294,7 +298,7 @@ const opearteForm = async(type) =>{
loading.value = false loading.value = false
return return
} else if(!row.estimatedPrice && row.estimatedPrice != 0){ } else if(!row.estimatedPrice && row.estimatedPrice != 0){
message.error('零件:'+row.matName+ '预估总价不能为空') message.error('零件:'+row.matName+ '预估总价不能为空!')
loading.value = false loading.value = false
return return
} else if( row.estimatedPrice == 0){ } else if( row.estimatedPrice == 0){
@ -302,7 +306,7 @@ const opearteForm = async(type) =>{
loading.value = false loading.value = false
return return
} else if(!row.arriveTime ){ } else if(!row.arriveTime ){
message.error('零件:'+row.matName+ '预计到货日期不能为空') message.error('零件:'+row.matName+ '预计到货日期不能为空!')
loading.value = false loading.value = false
return return
} }
@ -311,7 +315,7 @@ const opearteForm = async(type) =>{
} }
} }
if(sets != null && sets.size > 1){ if(sets != null && sets.size > 1){
message.error('不项目不能同时生成采购单'); message.error('不项目不能同时生成采购单');
loading.value = false loading.value = false
return return
} }
@ -353,10 +357,17 @@ const opearteForm = async(type) =>{
materialPlanBoomDOList:ids.value, materialPlanBoomDOList:ids.value,
buyType:2 buyType:2
} }
await materialPlanBoomApi.updateMaterialPlanBoom(form); try{
await materialPlanBoomApi.updateMaterialPlanBoom(form);
message.success("去库存成功") message.success("去库存成功")
await getList() await getList()
}catch(e){
loading.value = false loading.value = false
}finally{
loading.value = false
}
} }
}else{ }else{
message.error("至少选择一项后进行操作!") message.error("至少选择一项后进行操作!")

View File

@ -1,36 +1,14 @@
<template> <template>
<Dialog v-model="dialogVisible" width="80%"> <Dialog title="实时库存" v-model="dialogVisible" width="80%">
<el-card class="hl-card"> <el-card class="hl-card">
<template #header>
<span>实时库存</span>
</template>
<ContentWrap class="borderxx"> <ContentWrap class="borderxx">
<el-form class="-mb-15px" :model="queryParams" ref="queryFormRef" :inline="true" label-width="120px"> <el-form class="-mb-15px" :model="queryParams" ref="queryFormRef" :inline="true" label-width="120px">
<el-form-item label="批次号" prop="lotNo" v-if="false"> <el-form-item label="物料名称" prop="matName" >
<el-input v-model="queryParams.lotNo" placeholder="批次号" clearable @keyup.enter="handleQuery" class="!w-240px" /> <el-input v-model="queryParams.matName" placeholder="物料名称" clearable @keyup.enter="handleQuery" class="!w-240px" />
</el-form-item>
<el-form-item label="仓库" prop="whId">
<el-select v-model="queryParams.whId" placeholder="下拉选择" clearable class="!w-240px" @change="handleWh">
<el-option
v-for="dict in whList" :key="dict.id" :label="dict.wh_name"
:value="dict.id" />
</el-select>
</el-form-item>
<el-form-item label="库区" prop="rgId">
<el-select v-model="queryParams.rgId" placeholder="下拉选择" clearable class="!w-240px" @change="handleRg">
<el-option
v-for="dict in rgCurrentList" :key="dict.id" :label="dict.rg_name"
:value="dict.id" />
</el-select>
</el-form-item>
<el-form-item label="库位" prop="pnId">
<el-select v-model="queryParams.pnId" placeholder="下拉选择" clearable class="!w-240px">
<el-option
v-for="dict in pnCurrentList" :key="dict.id" :label="dict.pn_name"
:value="dict.id" />
</el-select>
</el-form-item> </el-form-item>
<el-form-item > <el-form-item >
<el-button @click="handleQuery" type="primary"> <el-button @click="handleQuery" type="primary">
<Icon icon="ep:search" class="mr-5px" /> 搜索 <Icon icon="ep:search" class="mr-5px" /> 搜索

View File

@ -94,7 +94,7 @@ import * as PurchaseOrderNoApi from '@/api/heli/purchaseorderno'
import { ElTable } from 'element-plus' import { ElTable } from 'element-plus'
import dayjs from "dayjs"; import dayjs from "dayjs";
import {useUserStore} from "@/store/modules/user"; import {useUserStore} from "@/store/modules/user";
import { useRoute } from 'vue-router';
defineOptions({ name: 'PurchaseOrder' }) defineOptions({ name: 'PurchaseOrder' })
const message = useMessage() // const message = useMessage() //
const { t } = useI18n() // const { t } = useI18n() //
@ -262,7 +262,13 @@ const handleExportWithTax = async () => {
} }
} }
/** 初始化 **/ /** 初始化 **/
onMounted( () => { const route = useRoute();
/** 初始化 **/
onMounted(async () => {
const flushParam = route.query.flush;
if(flushParam){
getList()
}
getList() getList()
}) })
</script> </script>