零件收货管理修改

This commit is contained in:
z 2026-03-18 17:07:48 +08:00
parent ddaf9dbbf5
commit 2da64480c9
8 changed files with 92 additions and 20 deletions

View File

@ -1,5 +1,6 @@
package com.chanko.yunxi.mes.module.heli.dal.dataobject.storagelog;
import com.chanko.yunxi.mes.module.heli.dal.dataobject.material.MaterialDO;
import lombok.*;
import java.util.*;
import java.math.BigDecimal;
@ -72,9 +73,12 @@ public class StorageLogDO extends BaseDO {
private BigDecimal storageAft;
private BigDecimal storageBef;
private String codeNo;
private BigDecimal price;
private Long supplierId;
private String auItem;
@TableField(exist = false)
private String matCode;
@TableField(exist = false)
private String matName;
@TableField(exist = false)
private String matSpec;
@ -86,6 +90,7 @@ public class StorageLogDO extends BaseDO {
private String rgName;
@TableField(exist = false)
private String pnName;
@TableField(exist = false)
private List<MaterialDO> materialDOList;
}

View File

@ -13,6 +13,7 @@ import com.chanko.yunxi.mes.module.heli.dal.dataobject.equip.EquipDO;
import com.chanko.yunxi.mes.module.heli.dal.dataobject.plan.PlanDO;
import com.chanko.yunxi.mes.module.heli.dal.dataobject.projectorder.ProjectOrderDO;
import com.chanko.yunxi.mes.module.heli.dal.dataobject.projectorder.ProjectOrderSubDO;
import com.chanko.yunxi.mes.module.heli.dal.dataobject.storage.StorageDO;
import com.chanko.yunxi.mes.module.system.dal.dataobject.dept.DeptDO;
import com.chanko.yunxi.mes.module.system.dal.dataobject.user.AdminUserDO;
import com.github.yulichang.wrapper.MPJLambdaWrapper;
@ -190,4 +191,11 @@ public interface ProjectOrderMapper extends BaseMapperX<ProjectOrderDO> {
//
// );
}
default ProjectOrderDO selectByStockId(Long stockId){
MPJLambdaWrapper<ProjectOrderDO> query = new MPJLambdaWrapper<>();
query.selectAll(ProjectOrderDO.class)
.leftJoin(StorageDO.class,"s",StorageDO::getProjectNo,ProjectOrderDO::getId);
return selectOne(query.eq(StorageDO::getId,stockId));
}
}

View File

@ -29,7 +29,7 @@ public interface StorageLogMapper extends BaseMapperX<StorageLogDO> {
MPJLambdaWrapper<StorageLogDO> query = new MPJLambdaWrapper<>();
query.selectAll(StorageLogDO.class)
.select( "mat.name as matName","mat.code as matCode","mat.unit as matUnit","wh.wh_name as whName","rg.rg_name as rgName","pn.pn_name as pnName")
.select( "COALESCE(mat.name, t.mat_name) as matName","mat.code as matCode","mat.unit as matUnit","wh.wh_name as whName","rg.rg_name as rgName","pn.pn_name as pnName")
.select("mat.spec as matSpec")
// .leftJoin(StorageDO.class, "st", StorageDO::getId, StorageLogDO::getStockId)
.leftJoin(MaterialDO.class,"mat", MaterialDO::getId,StorageLogDO::getMatId)
@ -44,7 +44,7 @@ public interface StorageLogMapper extends BaseMapperX<StorageLogDO> {
.like(!StringUtils.isEmpty(reqVO.getMatName()), MaterialDO::getName, reqVO.getMatName())
.like(!StringUtils.isEmpty(reqVO.getCodeNo()), StorageLogDO::getCodeNo, reqVO.getCodeNo())
.like(!StringUtils.isEmpty(reqVO.getMatSpec()), MaterialDO::getSpec, reqVO.getMatSpec())
.notIn(StorageLogDO::getStockMode,24,14)
.eq(!ObjectUtil.isEmpty(reqVO.getWhId()), StorageLogDO::getWhId, reqVO.getWhId());
return selectPage(reqVO,query);
}

View File

@ -17,6 +17,7 @@ import com.chanko.yunxi.mes.module.heli.dal.dataobject.pn.PnDO;
import com.chanko.yunxi.mes.module.heli.dal.dataobject.procedure.ProcedureDO;
import com.chanko.yunxi.mes.module.heli.dal.dataobject.processbom.ProcessBomDO;
import com.chanko.yunxi.mes.module.heli.dal.dataobject.processbom.ProcessBomDetailDO;
import com.chanko.yunxi.mes.module.heli.dal.dataobject.projectorder.ProjectOrderDO;
import com.chanko.yunxi.mes.module.heli.dal.dataobject.purchaseorderno.PurchaseOrderNoDO;
import com.chanko.yunxi.mes.module.heli.dal.dataobject.serialnumber.SerialNumberDO;
import com.chanko.yunxi.mes.module.heli.dal.dataobject.storage.StorageDO;
@ -34,6 +35,7 @@ import com.chanko.yunxi.mes.module.heli.dal.mysql.materialplandetail.MaterialPla
import com.chanko.yunxi.mes.module.heli.dal.mysql.plan.PlanMapper;
import com.chanko.yunxi.mes.module.heli.dal.mysql.processbom.ProcessBomDetailMapper;
import com.chanko.yunxi.mes.module.heli.dal.mysql.processbom.ProcessBomMapper;
import com.chanko.yunxi.mes.module.heli.dal.mysql.projectorder.ProjectOrderMapper;
import com.chanko.yunxi.mes.module.heli.dal.mysql.purchaseorderno.PurchaseOrderNoMapper;
import com.chanko.yunxi.mes.module.heli.dal.mysql.storage.StorageMapper;
import com.chanko.yunxi.mes.module.heli.dal.mysql.storagein.StorageInMapper;
@ -138,7 +140,8 @@ public class PurchaseOrderNoDetailServiceImpl implements PurchaseOrderNoDetailSe
private PlanMapper planMapper;
@Resource
private PgMasterService pgMasterService;
@Resource
private ProjectOrderMapper projectOrderMapper;
@Override
public Long createPurchaseOrderNoDetail(PurchaseOrderNoDetailSaveReqVO createReqVO) {
// 插入
@ -243,7 +246,7 @@ public class PurchaseOrderNoDetailServiceImpl implements PurchaseOrderNoDetailSe
// //出库库物料集合
// ArrayList<StorageMatDO> outList = new ArrayList<>();
ArrayList<StorageLogDO> logList = new ArrayList<>();
ArrayList<StorageLogDO> outLogList = new ArrayList<>();
// ArrayList<StorageLogDO> outLogList = new ArrayList<>();
//生成入库单
StorageInDO storageInDO = new StorageInDO();
@ -347,12 +350,13 @@ public class PurchaseOrderNoDetailServiceImpl implements PurchaseOrderNoDetailSe
// storageMatDOS.add(storageMatDO);
// outList.add(outMat);
StorageLogDO logDO = new StorageLogDO();
StorageLogDO outLogDO = new StorageLogDO();
// StorageLogDO outLogDO = new StorageLogDO();
StorageInDetailDO storageInDetailDO = new StorageInDetailDO();
storageInDetailDO.setStorageNoId(storageInDO.getId());
storageInDetailDO.setProjectSubCode(byId.getProjectSubCode());
storageInDetailDO.setBoomDetailId(byId.getBoomDetailId());
storageInDetailDO.setBoomName(byId.getBoomName());
logDO.setMatName(byId.getBoomName());
storageInDetailDO.setBoomSpec(byId.getBoomSpec());
storageInDetailDO.setBoomUnit(byId.getBoomUnit());
storageInDetailDO.setComposition(byId.getComposition());
@ -369,10 +373,10 @@ public class PurchaseOrderNoDetailServiceImpl implements PurchaseOrderNoDetailSe
}
if (result.compareTo(BigDecimal.ZERO)==0){
storageInDetailDO.setEstimatedPrice(BigDecimal.ZERO);
logDO.setPrice(BigDecimal.ZERO);
}else {
storageInDetailDO.setEstimatedPrice(detailDO.getPurchaseRemAmounts().multiply( result).setScale(1, RoundingMode.HALF_UP));
logDO.setPrice(detailDO.getPurchaseRemAmounts().multiply( result).setScale(1, RoundingMode.HALF_UP));
}
storageInDetailDO.setActualPrice(byId.getActualPrice());
storageInDetailDO.setBoomAmount(byId.getBoomAmount());
@ -393,22 +397,27 @@ public class PurchaseOrderNoDetailServiceImpl implements PurchaseOrderNoDetailSe
PurchaseOrderNoDO purchaseOrderNoDO = purchaseOrderNoMapper.selectById(byId.getPurchaseOrderId());
if (ObjectUtil.isNotEmpty(purchaseOrderNoDO)){
storageInDetailDO.setSupplierId(purchaseOrderNoDO.getSupplierId());
logDO.setSupplierId(purchaseOrderNoDO.getSupplierId());
}
storageInDetailDO.setPurchaseOrderNoId(byId.getPurchaseOrderId());
storageInDetailDO.setPurchaseOrderNoDetailId(byId.getId());
storageInDetailDO.setAcarrDate(byId.getBoomArriveDates());
storageInDetailMapper.insert(storageInDetailDO);
logDO.setStockId(storageInDetailDO.getId());
// ProjectOrderDO projectOrderDO = projectOrderMapper.selectById(byId.getProjectId());
// if (ObjectUtil.isNotEmpty(projectOrderDO)){
// logDO.setAuItem(projectOrderDO.getAuItem());
// }
logDO.setStockId(storageInDetailDO.getId());
logDO.setStorageOkQty(detailDO.getPurchaseRemAmounts());
logDO.setStockMode(11);
logDO.setStockType(1);
logDO.setGoodsType(2);
logDO.setCodeNo(storageInDO.getStorageNo());
logList.add(logDO);
outLogDO.setStockMode(25);
outLogDO.setStockType(2);
outLogDO.setGoodsType(2);
outLogList.add(outLogDO);
// outLogDO.setStockMode(25);
// outLogDO.setStockType(2);
// outLogDO.setGoodsType(2);
// outLogList.add(outLogDO);
}
// }
storageLogMapper.insertBatch(logList);

View File

@ -20,6 +20,7 @@ import com.chanko.yunxi.mes.module.heli.dal.dataobject.outsourcestock.OutsourceS
import com.chanko.yunxi.mes.module.heli.dal.dataobject.outsourcestockboom.OutsourceStockBoomDO;
import com.chanko.yunxi.mes.module.heli.dal.dataobject.outsourcestockmaterial.OutsourceStockMaterialDO;
import com.chanko.yunxi.mes.module.heli.dal.dataobject.pn.PnDO;
import com.chanko.yunxi.mes.module.heli.dal.dataobject.projectorder.ProjectOrderDO;
import com.chanko.yunxi.mes.module.heli.dal.dataobject.purchaseorder.PurchaseOrderDO;
import com.chanko.yunxi.mes.module.heli.dal.dataobject.purchaseordernodetail.PurchaseOrderNoDetailDO;
import com.chanko.yunxi.mes.module.heli.dal.dataobject.serialnumber.SerialNumberDO;
@ -37,6 +38,7 @@ import com.chanko.yunxi.mes.module.heli.dal.mysql.outsourcestock.OutsourceStockM
import com.chanko.yunxi.mes.module.heli.dal.mysql.outsourcestockboom.OutsourceStockBoomMapper;
import com.chanko.yunxi.mes.module.heli.dal.mysql.outsourcestockmaterial.OutsourceStockMaterialMapper;
import com.chanko.yunxi.mes.module.heli.dal.mysql.pn.PnMapper;
import com.chanko.yunxi.mes.module.heli.dal.mysql.projectorder.ProjectOrderMapper;
import com.chanko.yunxi.mes.module.heli.dal.mysql.purchaseorder.PurchaseOrderMapper;
import com.chanko.yunxi.mes.module.heli.dal.mysql.purchaseordernodetail.PurchaseOrderNoDetailMapper;
import com.chanko.yunxi.mes.module.heli.dal.mysql.storageinventory.StorageInventoryMapper;
@ -58,6 +60,7 @@ import com.chanko.yunxi.mes.module.system.dal.mysql.dict.DictDataMapper;
import com.chanko.yunxi.mes.module.system.service.user.AdminUserService;
import org.apache.poi.ss.usermodel.*;
import org.apache.poi.xssf.usermodel.XSSFWorkbook;
import org.hibernate.validator.constraints.EAN;
import org.springframework.data.redis.hash.ObjectHashMapper;
import org.springframework.stereotype.Service;
import javax.annotation.Resource;
@ -144,6 +147,8 @@ public class StorageServiceImpl implements StorageService {
@Resource
private StorageLogService storageLogService;
@Resource
private ProjectOrderMapper projectOrderMapper;
/*
*
* 委外验收取消提交作废入库单
@ -512,7 +517,8 @@ public class StorageServiceImpl implements StorageService {
// 将物料信息转化日志信息
List<StorageLogDO> logList = BeanUtils.toBean(matList,StorageLogDO.class);
// 同步库存单状态到日志便于以后统计
ProjectOrderDO projectOrderDO = projectOrderMapper.selectByStockId(stockId);
StorageDO storageDO = storageMapper.selectById(stockId);
for (StorageLogDO log : logList){
log.setId(null);
log.setStatus(status);
@ -521,11 +527,17 @@ public class StorageServiceImpl implements StorageService {
log.setStockType(1);
log.setGoodsType(1);
log.setCodeNo(stockNo);
if (ObjectUtil.isNotEmpty(storageDO.getSupplierId())){
log.setSupplierId(storageDO.getSupplierId());
}
}else {
log.setStockMode(25);
log.setStockType(2);
log.setGoodsType(1);
log.setCodeNo(stockNo);
if (ObjectUtil.isNotEmpty(projectOrderDO)){
log.setAuItem(projectOrderDO.getAuItem());
}
}
}
// 批量保存当前库存物料日志信息

View File

@ -106,7 +106,18 @@ public class StorageLogServiceImpl implements StorageLogService {
@Override
public PageResult<StorageLogDO> getStorageLogPage(StorageLogPageReqVO pageReqVO) {
// return storageLogAllMapper.selectPage(pageReqVO);
return storageLogMapper.selectPage(pageReqVO);
PageResult<StorageLogDO> pageResult = storageLogMapper.selectPage(pageReqVO);
for (StorageLogDO logDO : pageResult.getList()) {
if (logDO.getGoodsType()==2){
if (ObjectUtil.isNotEmpty(logDO.getMatName())){
LambdaQueryWrapper<MaterialDO> queryWrapper = new LambdaQueryWrapper<>();
queryWrapper.eq(MaterialDO::getName, logDO.getMatName());
List<MaterialDO> materialDOS = materialMapper.selectList(queryWrapper);
logDO.setMaterialDOList(materialDOS);
}
}
}
return pageResult;
}
@Override

View File

@ -1,7 +1,7 @@
<template>
<el-card class="hl-card">
<template #header>
<span>零件采购收货</span>
<span></span>
</template>
<ContentWrap class="borderxx">
<!-- 搜索工作栏 -->

View File

@ -44,6 +44,7 @@
<el-button @click="resetQuery">
<Icon icon="ep:refresh" class="mr-5px" /> 重置
</el-button>
</el-form-item>
</el-form>
</ContentWrap>
@ -52,7 +53,31 @@
<ContentWrap>
<el-table v-loading="loading" :data="list" :show-overflow-tooltip="true" class="hl-table">
<el-table-column type="index" width="100" fixed label="序号" align="center" />
<el-table-column label="物料编码" align="center" prop="matCode" min-width="150" fixed />
<el-table-column label="物料编码" align="center" prop="matCode" min-width="150" fixed>
<template #default="scope">
<template v-if="scope.row.goodsType == 2">
<el-form-item class="mb-0px!">
<el-select
v-model="scope.row.matId"
placeholder=""
style="width: 100%"
filterable
clearable
>
<el-option
v-for="dict in scope.row.materialDOList"
:key="dict.id"
:label="dict.code + ' ' + dict.name"
:value="dict.id"
/>
</el-select>
</el-form-item>
</template>
<template v-else>
{{ scope.row.matCode }}
</template>
</template>
</el-table-column>
<el-table-column label="物料名称" align="center" prop="matName" min-width="120" fixed />
<el-table-column label="规格/型号" align="center" prop="matSpec" min-width="120" />
<el-table-column label="单据编号" align="center" prop="codeNo" min-width="180" />
@ -64,8 +89,8 @@
<el-table-column label="仓库" align="center" prop="whName" min-width="100" />
<el-table-column label="库区" align="center" prop="rgName" min-width="100" />
<el-table-column label="库位" align="center" prop="pnName" min-width="100" />
<el-table-column label="盘库前数量" align="center" prop="storageBef" min-width="140" />
<el-table-column label="盘库后数量" align="center" prop="storageAft" min-width="140" />
<!-- <el-table-column label="盘库前数量" align="center" prop="storageBef" min-width="140" />-->
<!-- <el-table-column label="盘库后数量" align="center" prop="storageAft" min-width="140" />-->
<el-table-column label="入/出库数量" align="center" prop="storageOkQty" min-width="140" fixed="right" >
<template #default="scope">
{{scope.row.stockType==1 || scope.row.storageOkQty<0?scope.row.storageOkQty:'-'+scope.row.storageOkQty}}
@ -92,6 +117,8 @@ import * as WarehouseApi from '@/api/heli/warehouse'
import routeParamsCache from '@/utils/routeParamsCache'
import axios from "axios";
import {getAccessToken, getTenantId} from "@/utils/auth";
import Material from "@/views/heli/material/index.vue";
import MaterialSelect from "@/views/heli/hlvuestyle/materialSelect.vue";
defineOptions({ name: 'StorageLog' })