Merge remote-tracking branch 'origin/main'

This commit is contained in:
wb_zhanghaoyuan 2025-06-24 20:31:40 +08:00
commit 92d4f9aade
11 changed files with 74 additions and 34 deletions

View File

@ -27,6 +27,7 @@ public class MaterialPageReqVO extends PageParam {
@Schema(description = "物料名称", example = "李四") @Schema(description = "物料名称", example = "李四")
private String codeAndName; private String codeAndName;
private String inventoryName;
@Schema(description = "品牌") @Schema(description = "品牌")
private String brand; private String brand;

View File

@ -29,7 +29,7 @@ public class PurchaseOrderMakeDetailSaveReqVO {
@Schema(description = "规格型号") @Schema(description = "规格型号")
private String boomSpec; private String boomSpec;
private Long materialId;
@Schema(description = "系统单位") @Schema(description = "系统单位")
private String boomUnit; private String boomUnit;

View File

@ -100,6 +100,7 @@ public class PurchaseOrderMakeDetailDO extends BaseDO {
* 物料需求计划id * 物料需求计划id
*/ */
private Long projectMaterialPlanId; private Long projectMaterialPlanId;
private Long materialId;
/** /**
* 物料需求计划子项目id * 物料需求计划子项目id
*/ */

View File

@ -61,6 +61,13 @@ public interface MaterialMapper extends BaseMapperX<MaterialDO> {
.eq(true,MaterialDO::getVirtualPart, YesOrNoEnum.N.name()) .eq(true,MaterialDO::getVirtualPart, YesOrNoEnum.N.name())
.apply(!StringUtils.isEmpty(reqVO.getCodeAndName()), " (t.name like {0} or t.code like {0})", "%"+reqVO.getCodeAndName()+"%"); .apply(!StringUtils.isEmpty(reqVO.getCodeAndName()), " (t.name like {0} or t.code like {0})", "%"+reqVO.getCodeAndName()+"%");
if (!StringUtils.isEmpty(reqVO.getInventoryName())) {
query.and(qw ->
qw.like("t.name", reqVO.getInventoryName())
.or()
.like("t.code", reqVO.getInventoryName())
);
}
// if(!StringUtils.isEmpty(reqVO.getCodeAndName())){ // if(!StringUtils.isEmpty(reqVO.getCodeAndName())){
// query.like(MaterialDO::getName, reqVO.getCodeAndName()).or().like(MaterialDO::getCode, reqVO.getCodeAndName()); // query.like(MaterialDO::getName, reqVO.getCodeAndName()).or().like(MaterialDO::getCode, reqVO.getCodeAndName());
// //

View File

@ -121,13 +121,7 @@ public interface ProcessBomDetailMapper extends BaseMapperX<ProcessBomDetailDO>
.eq(reqVO.getBomStatus() != null, ProcessBomDO::getBomStatus, reqVO.getBomStatus()) .eq(reqVO.getBomStatus() != null, ProcessBomDO::getBomStatus, reqVO.getBomStatus())
; ;
if (!StringUtils.isEmpty(reqVO.getInventoryName())) {
query.and(qw ->
qw.like("t.material_name", reqVO.getInventoryName())
.or()
.like("t.material_code", reqVO.getInventoryName())
);
}
return selectPage(reqVO, query); return selectPage(reqVO, query);
} }
// default List<ProcessBomDetailDO> selectListByBomIdbyid(Long bomId,Long bomId) { // default List<ProcessBomDetailDO> selectListByBomIdbyid(Long bomId,Long bomId) {

View File

@ -10,6 +10,7 @@ import com.chanko.yunxi.mes.framework.mybatis.core.mapper.BaseMapperX;
import com.chanko.yunxi.mes.module.heli.controller.admin.materialplanboom.vo.MaterialPlanBoomPageReqVO; import com.chanko.yunxi.mes.module.heli.controller.admin.materialplanboom.vo.MaterialPlanBoomPageReqVO;
import com.chanko.yunxi.mes.module.heli.controller.admin.purchaseordermake.vo.PartPurchaseOrderPageReqVO; import com.chanko.yunxi.mes.module.heli.controller.admin.purchaseordermake.vo.PartPurchaseOrderPageReqVO;
import com.chanko.yunxi.mes.module.heli.controller.admin.purchaseordermake.vo.PartPurchaseOrderPageRespVO; import com.chanko.yunxi.mes.module.heli.controller.admin.purchaseordermake.vo.PartPurchaseOrderPageRespVO;
import com.chanko.yunxi.mes.module.heli.dal.dataobject.material.MaterialDO;
import com.chanko.yunxi.mes.module.heli.dal.dataobject.materialplan.MaterialPlanDO; import com.chanko.yunxi.mes.module.heli.dal.dataobject.materialplan.MaterialPlanDO;
import com.chanko.yunxi.mes.module.heli.dal.dataobject.materialplanboom.MaterialPlanBoomDO; import com.chanko.yunxi.mes.module.heli.dal.dataobject.materialplanboom.MaterialPlanBoomDO;
import com.chanko.yunxi.mes.module.heli.dal.dataobject.procedure.ProcedureDO; import com.chanko.yunxi.mes.module.heli.dal.dataobject.procedure.ProcedureDO;
@ -36,9 +37,10 @@ public interface PurchaseOrderMakeDetailMapper extends BaseMapperX<PurchaseOrder
default PageResult<PurchaseOrderMakeDetailDO> selectPage(PurchaseOrderMakeDetailPageReqVO reqVO) { default PageResult<PurchaseOrderMakeDetailDO> selectPage(PurchaseOrderMakeDetailPageReqVO reqVO) {
MPJLambdaWrapper<PurchaseOrderMakeDetailDO> query = new MPJLambdaWrapper<>(); MPJLambdaWrapper<PurchaseOrderMakeDetailDO> query = new MPJLambdaWrapper<>();
query.selectAll(PurchaseOrderMakeDetailDO.class) query.selectAll(PurchaseOrderMakeDetailDO.class)
.select("b.material_name as boomName","b.material_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(ProjectOrderSubDO.class,"pos",ProjectOrderSubDO::getId,PurchaseOrderMakeDetailDO::getProjectPlanSubId) .leftJoin(ProjectOrderSubDO.class,"pos",ProjectOrderSubDO::getId,PurchaseOrderMakeDetailDO::getProjectPlanSubId)
.leftJoin(ProjectOrderDO.class,"po",ProjectOrderDO::getId, ProjectOrderSubDO::getProjectOrderId) .leftJoin(ProjectOrderDO.class,"po",ProjectOrderDO::getId, ProjectOrderSubDO::getProjectOrderId)
.leftJoin(PurchaseOrderMakeDO.class,"pom",PurchaseOrderMakeDO::getId,PurchaseOrderMakeDetailDO::getPurchaseOrderId) .leftJoin(PurchaseOrderMakeDO.class,"pom",PurchaseOrderMakeDO::getId,PurchaseOrderMakeDetailDO::getPurchaseOrderId)

View File

@ -195,11 +195,12 @@ public class ProcessBomServiceImpl implements ProcessBomService {
materialNameList.forEach((materialName, listTemp2) -> { materialNameList.forEach((materialName, listTemp2) -> {
if (listTemp2.size() > 1) { if (listTemp2.size() > 1) {
throw new RuntimeException("非标准件物料名称:" + materialName + "重复!"); throw new RuntimeException("非标准件物料名称:" + materialName + "重复!");
}else{
if(listTemp2.get(0).getSpec() == null){
throw new RuntimeException("非标准件:" + materialName + "规格为空!");
}
} }
// else{
// if(listTemp2.get(0).getSpec() == null){
// throw new RuntimeException("非标准件:" + materialName + "规格为空!");
// }
// }
}); });
}); });
List<ProcessBomDetailDO> processBomDetailDOList = new ArrayList<>(); List<ProcessBomDetailDO> processBomDetailDOList = new ArrayList<>();
@ -300,12 +301,18 @@ public class ProcessBomServiceImpl implements ProcessBomService {
// processBomDetailDO.setMaterialId(materialDO.getId());//物料ID // processBomDetailDO.setMaterialId(materialDO.getId());//物料ID
// processBomDetailDO.setMaterialCode(materialDO.getCode());//物料编码 // processBomDetailDO.setMaterialCode(materialDO.getCode());//物料编码
// processBomDetailDO.setMaterialName(materialDO.getName());//物料名称 // processBomDetailDO.setMaterialName(materialDO.getName());//物料名称
}else{ }else{
processBomDetailDO.setMaterialName(o.getMaterialName()); processBomDetailDO.setMaterialName(o.getMaterialName());
} }
processBomDetailDO.setSpec(o.getSpec());//规格 if (o.getSpec() == null || o.getSpec().trim().equals("")){
processBomDetailDO.setSpec("A");//规格
}else {
processBomDetailDO.setSpec(o.getSpec());
}
processBomDetailDO.setUnit(o.getUnit());//单位 processBomDetailDO.setUnit(o.getUnit());//单位
processBomDetailDO.setBlueprintNo(o.getBlueprintNo());//图号 processBomDetailDO.setBlueprintNo(o.getBlueprintNo());//图号
try { try {

View File

@ -91,7 +91,7 @@ public class PurchaseOrderMakeDetailServiceImpl implements PurchaseOrderMakeDeta
pd.setPurchaseOrderId(purchaseOrderNoDO.getId()); pd.setPurchaseOrderId(purchaseOrderNoDO.getId());
pd.setBoomDetailId(pmd.getBoomDetailId()); pd.setBoomDetailId(pmd.getBoomDetailId());
pd.setBoomName(pmd.getBoomName()); pd.setBoomName(pmd.getBoomName());
pd.setMaterialId(pmd.getBoomDetailId()); pd.setMaterialId(pmd.getMaterialId());
pd.setBoomSpec(pmd.getBoomSpec()); pd.setBoomSpec(pmd.getBoomSpec());
pd.setBoomUnit(pmd.getBoomUnit()); pd.setBoomUnit(pmd.getBoomUnit());
pd.setComposition(pmd.getComposition()); pd.setComposition(pmd.getComposition());

View File

@ -84,12 +84,12 @@
> >
<el-option <el-option
v-for="item in scope.row.materialSelectList" v-for="item in scope.row.materialSelectList"
:key="item.materialCode" :key="item.code"
:label="item.inventCode" :label="item.code"
:value="item" :value="item"
> >
<span style="float: left">{{ item.materialName }}</span> <span style="float: left">{{ item.name }}</span>
<span style="float: right; color: #8492a6; font-size: 13px">{{ item.materialCode }}</span> <span style="float: right; color: #8492a6; font-size: 13px">{{ item.code }}</span>
</el-option> </el-option>
</el-select> </el-select>
</template> </template>
@ -145,7 +145,7 @@ import { getIntDictOptions, DICT_TYPE } from '@/utils/dict'
import download from '@/utils/download' import download from '@/utils/download'
import * as purchaseOrderMakeDetailApi from '@/api/heli/purchaseordermakedetail' import * as purchaseOrderMakeDetailApi from '@/api/heli/purchaseordermakedetail'
import { useCommonStateWithOut } from '@/store/modules/common' import { useCommonStateWithOut } from '@/store/modules/common'
import * as bomApi from '@/api/heli/processbom' import * as matApi from '@/api/heli/material'
import { useUserStore } from '@/store/modules/user' import { useUserStore } from '@/store/modules/user'
import matLog from './storageLog.vue' import matLog from './storageLog.vue'
import * as supplierApi from '@/api/heli/supplier' import * as supplierApi from '@/api/heli/supplier'
@ -236,7 +236,7 @@ const remoteMethod = async (query, row) => {
// //
queryMaterialParams.inventoryName = query; queryMaterialParams.inventoryName = query;
// API // API
const data = await bomApi.detailpages(queryMaterialParams); const data = await matApi.getMaterialPage(queryMaterialParams);
// //
row.materialSelectList = data.list; row.materialSelectList = data.list;
} else { } else {
@ -252,7 +252,7 @@ const remoteMethod = async (query, row) => {
} }
}; };
const getMateriallist = async(row) =>{ const getMateriallist = async(row) =>{
const data = await bomApi.detailpages(queryMaterialParams) const data = await matApi.getMaterialPage(queryMaterialParams)
row.materialSelectList = data.list row.materialSelectList = data.list
} }
@ -287,10 +287,11 @@ const getMat = async (rowids,amount,ids) => {
} }
const changeSupp = async(e,row) => { const changeSupp = async(e,row) => {
if(e){ if(e){
row.boomDetailId = e.id row.materialId = e.id
row.boomName = e.materialName; row.boomCode = e.code
row.boomSpec = e.spec; // row.boomName = e.materialName;
row.boomUnit = e.unit // row.boomSpec = e.spec;
// row.boomUnit = e.unit
await updateRows(row) await updateRows(row)
} }
} }
@ -311,6 +312,7 @@ const handleQuery = () => {
getList() getList()
} }
const opearteForm = async(type) =>{ const opearteForm = async(type) =>{
loading.value = true;
if(type == 1){ if(type == 1){
router.push({ path: '/purchase/PurchaseOrder', query: { flush: 1 } }) router.push({ path: '/purchase/PurchaseOrder', query: { flush: 1 } })
return; return;
@ -324,10 +326,12 @@ const opearteForm = async(type) =>{
var row = ids.value[i]; var row = ids.value[i];
if(row.orderStatus == 2){ if(row.orderStatus == 2){
message.error('已生成采购订单!') message.error('已生成采购订单!')
loading.value = false
return return
} }
if(!row.boomDetailId){ if(!row.boomDetailId){
message.error('零件编码不能为空!') message.error('零件编码不能为空!')
loading.value = false
return return
} }
if( !sets.has(row.supplierId) || sets == null ){ if( !sets.has(row.supplierId) || sets == null ){
@ -336,6 +340,7 @@ const opearteForm = async(type) =>{
} }
if(sets != null && sets.size > 1){ if(sets != null && sets.size > 1){
message.error('不同供应商,不能生成一个订单,请确认!'); message.error('不同供应商,不能生成一个订单,请确认!');
loading.value = false
return return
} }
@ -348,7 +353,9 @@ const opearteForm = async(type) =>{
buyType:0 buyType:0
} }
await purchaseOrderMakeDetailApi.updatePurchaseOrderDetail(form); await purchaseOrderMakeDetailApi.updatePurchaseOrderDetail(form);
message.success("生成成功,请刷新") loading.value = false
message.success("生成成功")
await getList();
} }
}else{ }else{
message.error("至少选择一项后进行操作!") message.error("至少选择一项后进行操作!")

View File

@ -265,7 +265,7 @@ const changeDate = async(e,row) => {
} }
} }
const serachLog = (row) => { const serachLog = (row) => {
matLogRef.value.open(row.id,row.matCode) matLogRef.value.open(row.id,row.matName)
} }
/** 搜索按钮操作 */ /** 搜索按钮操作 */
const handleQuery = () => { const handleQuery = () => {
@ -274,29 +274,36 @@ const handleQuery = () => {
} }
const opearteForm = async(type) =>{ const opearteForm = async(type) =>{
if(ids.value != null && ids.value.length > 0){ if(ids.value != null && ids.value.length > 0){
loading.value = true
if(type == 0){ if(type == 0){
// //
var isError = false; var isError = false;
var sets = new Set(); var sets = new Set();
for(var i = 0 ; i<ids.value.length ;i++){ for(var i = 0 ; i<ids.value.length ;i++){
var row = ids.value[i]; var row = ids.value[i];
if(!row.purchaseAmount ){ if(!row.purchaseAmount && row.purchaseAmount != 0){
message.error('零件:'+row.matName+ '采购数量不能为空!') message.error('零件:'+row.matName+ '采购数量不能为空!')
loading.value = false
return return
} else if( row.purchaseAmount == 0){ } else if( row.purchaseAmount == 0){
message.error('零件:'+row.matName+ '采购数量不能为0') message.error('零件:'+row.matName+ '采购数量不能为0')
loading.value = false
return return
} else if(!row.supplierId){ } else if(!row.supplierId){
message.error('零件:'+row.matName+ '供应商不能为空!') message.error('零件:'+row.matName+ '供应商不能为空!')
loading.value = false
return return
} else if(!row.estimatedPrice){ } else if(!row.estimatedPrice && row.estimatedPrice != 0){
message.error('零件:'+row.matName+ '预估总价不能为空') message.error('零件:'+row.matName+ '预估总价不能为空')
loading.value = false
return return
} else if( row.estimatedPrice == 0){ } else if( row.estimatedPrice == 0){
message.error('零件:'+row.matName+ '预估总价不能为0') message.error('零件:'+row.matName+ '预估总价不能为0')
loading.value = false
return return
} else if(!row.arriveTime ){ } else if(!row.arriveTime ){
message.error('零件:'+row.matName+ '预计到货日期不能为空') message.error('零件:'+row.matName+ '预计到货日期不能为空')
loading.value = false
return return
} }
if( !sets.has(row.projectId) || sets == null ){ if( !sets.has(row.projectId) || sets == null ){
@ -305,6 +312,7 @@ const opearteForm = async(type) =>{
} }
if(sets != null && sets.size > 1){ if(sets != null && sets.size > 1){
message.error('不通项目不能同时生成采购单'); message.error('不通项目不能同时生成采购单');
loading.value = false
return return
} }
@ -316,14 +324,24 @@ const opearteForm = async(type) =>{
materialPlanBoomDOList:ids.value, materialPlanBoomDOList:ids.value,
buyType:0 buyType:0
} }
await materialPlanBoomApi.updateMaterialPlanBoom(form); try{
message.success("送审成功") await materialPlanBoomApi.updateMaterialPlanBoom(form);
message.success("送审成功")
await getList()
}catch(e){
loading.value = false
}finally{
loading.value = false
}
}else{ }else{
// //
for(var i = 0 ; i<ids.value.length ;i++){ for(var i = 0 ; i<ids.value.length ;i++){
var row = ids.value[i]; var row = ids.value[i];
if(!row.materialId){ if(!row.materialId){
message.error('请先查询库存量后进行操作') message.error('请先查询库存量后进行操作')
loading.value = false
return return
} }
} }
@ -337,9 +355,12 @@ const opearteForm = async(type) =>{
} }
await materialPlanBoomApi.updateMaterialPlanBoom(form); await materialPlanBoomApi.updateMaterialPlanBoom(form);
message.success("去库存成功") message.success("去库存成功")
await getList()
loading.value = false
} }
}else{ }else{
message.error("至少选择一项后进行操作!") message.error("至少选择一项后进行操作!")
loading.value = false
return ; return ;
} }
} }

View File

@ -174,7 +174,7 @@ const open = async (rowids,matCode) => {
clickItem.value = null; clickItem.value = null;
//multipleTableRef.value!.clearSelection() //multipleTableRef.value!.clearSelection()
dialogVisible.value = true dialogVisible.value = true
queryParams.matCode = matCode; queryParams.matName = matCode;
rowid.value = rowids rowid.value = rowids
await getList(); await getList();