部分代码恢复及修改

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

View File

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

View File

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

View File

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

View File

@ -64,7 +64,7 @@ public interface MaterialPlanBoomMapper extends BaseMapperX<MaterialPlanBoomDO>
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("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("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)
@ -73,7 +73,9 @@ public interface MaterialPlanBoomMapper extends BaseMapperX<MaterialPlanBoomDO>
.leftJoin(CompositionDO.class, "bc", CompositionDO::getId, ProcessBomDetailDO::getCompositionId)
.leftJoin(ProjectOrderDO.class,"po",ProjectOrderDO::getId,MaterialPlanDO::getProjectId)
.leftJoin(AdminUserDO.class,"u",AdminUserDO::getId, MaterialPlanBoomDO::getDuEmpId)
.leftJoin(MaterialDO.class,"m",MaterialDO::getId,MaterialPlanBoomDO::getMaterialId)
.eq(MaterialPlanDO::getMatType,0)
.in(MaterialPlanBoomDO::getIsPurYard,Arrays.asList(0,5))
.disableSubLogicDel()
.groupBy(MaterialPlanBoomDO::getId)
.orderByDesc(MaterialPlanBoomDO::getCreateTime);

View File

@ -4,6 +4,7 @@ import java.util.*;
import cn.hutool.core.util.ObjectUtil;
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.mybatis.core.query.LambdaQueryWrapperX;
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<>();
query.selectAll(PurchaseOrderMakeDetailDO.class)
.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(MaterialDO.class,"m",MaterialDO::getId,PurchaseOrderMakeDetailDO::getMaterialId)
.leftJoin(ProjectOrderSubDO.class,"pos",ProjectOrderSubDO::getId,PurchaseOrderMakeDetailDO::getProjectPlanSubId)
@ -66,7 +67,11 @@ public interface PurchaseOrderMakeDetailMapper extends BaseMapperX<PurchaseOrder
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) {
MPJLambdaWrapper<PurchaseOrderMakeDetailDO> query = new MPJLambdaWrapper<>();
query.selectAll(PurchaseOrderMakeDetailDO.class)

View File

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

View File

@ -33,7 +33,8 @@
<select id="hasPurchase"
parameterType="java.util.Map"
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
<foreach item="id" collection="ids" open="(" separator="," close=")">
#{id}

View File

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

View File

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

View File

@ -1,36 +1,14 @@
<template>
<Dialog v-model="dialogVisible" width="80%">
<Dialog title="实时库存" v-model="dialogVisible" width="80%">
<el-card class="hl-card">
<template #header>
<span>实时库存</span>
</template>
<ContentWrap class="borderxx">
<el-form class="-mb-15px" :model="queryParams" ref="queryFormRef" :inline="true" label-width="120px">
<el-form-item label="批次号" prop="lotNo" v-if="false">
<el-input v-model="queryParams.lotNo" 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 label="物料名称" prop="matName" >
<el-input v-model="queryParams.matName" placeholder="物料名称" clearable @keyup.enter="handleQuery" class="!w-240px" />
</el-form-item>
<el-form-item >
<el-button @click="handleQuery" type="primary">
<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 dayjs from "dayjs";
import {useUserStore} from "@/store/modules/user";
import { useRoute } from 'vue-router';
defineOptions({ name: 'PurchaseOrder' })
const message = useMessage() //
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()
})
</script>