feat(heli): 新增新中大入出单功能并优化物料编码选择逻辑

This commit is contained in:
zxy 2026-04-02 17:53:54 +08:00
parent b62e2023e5
commit b4ed055dca
4 changed files with 52 additions and 25 deletions

View File

@ -56,6 +56,8 @@ public enum CodeEnum {
UNQUALIFIED_NOTIFICATION("品质异常通知单", "RN", 4, "yyyyMMdd"),
MATERIAL("物料", 6),
XZD_STORAGE("新中大入出单", "X", 3, "yyyyMM"),
;

View File

@ -67,6 +67,7 @@ public interface StorageLogMapper extends BaseMapperX<StorageLogDO> {
.orderByDesc(StorageLogDO::getId);
query
.notIn(StorageLogDO::getStockMode,24,14)
.like(!StringUtils.isEmpty(reqVO.getMatName()), StorageLogDO::getMatName, reqVO.getMatName())
.like(!StringUtils.isEmpty(reqVO.getMatCode()), MaterialDO::getCode, reqVO.getMatCode())
.eq(!StringUtils.isEmpty(reqVO.getStockType()), StorageLogDO::getStockType, reqVO.getStockType())

View File

@ -1,6 +1,5 @@
package com.chanko.yunxi.mes.module.heli.service.storagelog;
import cn.hutool.core.util.IdUtil;
import cn.hutool.core.util.ObjectUtil;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper;
@ -13,6 +12,7 @@ import com.chanko.yunxi.mes.module.heli.controller.admin.storagelog.vo.StorageLo
import com.chanko.yunxi.mes.module.heli.controller.admin.storagelog.vo.StorageNowAllReqVO;
import com.chanko.yunxi.mes.module.heli.dal.dataobject.bdgzsomthing.bdgzsomthingDO;
import com.chanko.yunxi.mes.module.heli.dal.dataobject.material.MaterialDO;
import com.chanko.yunxi.mes.module.heli.dal.dataobject.serialnumber.SerialNumberDO;
import com.chanko.yunxi.mes.module.heli.dal.dataobject.storagelog.StorageLogDO;
import com.chanko.yunxi.mes.module.heli.dal.dataobject.storagelogNow.StorageLogNowDO;
import com.chanko.yunxi.mes.module.heli.dal.dataobject.storagelogNow.StorageMaterialDO;
@ -27,8 +27,7 @@ import com.chanko.yunxi.mes.module.heli.dal.mysql.storagelog.StorageMaterialMapp
import com.chanko.yunxi.mes.module.heli.dal.mysql.wmsconfig.WmsConfigMapper;
import com.chanko.yunxi.mes.module.heli.dal.mysql.wmsstorage.WmsStorageMapper;
import com.chanko.yunxi.mes.module.heli.dal.mysql.wmsstoragedetail.WmsStorageDetailMapper;
import com.chanko.yunxi.mes.module.system.service.dict.DictDataService;
import com.chanko.yunxi.mes.module.system.service.dict.DictTypeService;
import com.chanko.yunxi.mes.module.heli.service.serialnumber.SerialNumberService;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import org.springframework.validation.annotation.Validated;
@ -37,12 +36,14 @@ import reactor.util.function.Tuples;
import javax.annotation.Resource;
import java.math.BigDecimal;
import java.text.SimpleDateFormat;
import java.time.LocalDate;
import java.time.LocalDateTime;
import java.util.*;
import java.util.stream.Collectors;
import static com.chanko.yunxi.mes.framework.common.exception.util.ServiceExceptionUtil.exception;
import static com.chanko.yunxi.mes.module.heli.enums.CodeEnum.XZD_STORAGE;
import static com.chanko.yunxi.mes.module.heli.enums.ErrorCodeConstants.STORAGE_LOG_NOT_EXISTS;
/**
@ -75,10 +76,7 @@ public class StorageLogServiceImpl implements StorageLogService {
private WmsConfigMapper wmsConfigMapper;
@Resource
private DictTypeService dictTypeService;
@Resource
private DictDataService dictDataService;
private SerialNumberService serialNumberService;
@Resource
private com.chanko.yunxi.mes.module.heli.dal.mysql.bdgzsomthing.bdgzsomthingMapper bdgzsomthingMapper;
@ -157,18 +155,15 @@ public class StorageLogServiceImpl implements StorageLogService {
idSet = new HashSet<>(pageReqVO.getIds());
}
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());
queryWrapper.like(logDO.getMatName() != null, MaterialDO::getName, logDO.getMatName());
queryWrapper.like(logDO.getMatSpec() != null, MaterialDO::getSpec, logDO.getMatSpec());
List<MaterialDO> materialDOS = materialMapper.selectList(queryWrapper);
logDO.setMaterialDOList(materialDOS);
if (idSet.contains(logDO.getId()) && materialDOS.size() == 1) {
logDO.setMatId(materialDOS.get(0).getId());
}
}
}
}
return pageResult;
}
@ -466,7 +461,11 @@ public class StorageLogServiceImpl implements StorageLogService {
storageDO.setStockType(stockType);
storageDO.setBusiType(stockType == 1 ? configDO.getBusiTypeIn() : configDO.getBusiTypeOut());
storageDO.setWhName(configDO.getWhName());
storageDO.setStockNo(IdUtil.getSnowflakeNextIdStr());
// 生成订单号 X202604+3位流水号 001 002
SerialNumberDO serialNumberDO = serialNumberService.getSerialNumber(XZD_STORAGE.name(), new SimpleDateFormat("yyyyMM").format(new Date()));
serialNumberDO.setSerialNumber(serialNumberDO.getSerialNumber() + 1);
serialNumberService.updateSerialNumber(serialNumberDO);
storageDO.setStockNo(XZD_STORAGE.getCode(serialNumberDO.getSerialNumber().toString()));
storageDO.setBusiDate(LocalDate.now());
storageDO.setSupplierName(supplierName);
storageDO.setPriceType(priceType);

View File

@ -163,7 +163,7 @@
<el-table-column label="物料编码" align="center" prop="matCode" min-width="200">
<template #default="scope">
<template v-if="scope.row.goodsType == 2">
<template v-if="scope.row.goodsType == 2 || scope.row.goodsType == 1">
<el-form-item class="mb-0px!">
<el-select
v-model="scope.row.matId"
@ -307,10 +307,15 @@ const getList = async () => {
list.value = data.list
total.value = data.total
// 1|
//
list.value.forEach((item) => {
if (!item.priceType) {
item.priceType = '1|临时暂估价'
}
//
if (item.materialDOList && item.materialDOList.length === 1) {
item.matId = item.materialDOList[0].id
}
})
} finally {
loading.value = false
@ -401,12 +406,25 @@ const generateBill = async () => {
message.warning('请选择同一单据类型的数据')
return
}
// 3. goodsType
const rowWithoutMat = multipleSelection.value.find((row) => {
if (row.goodsType == 1 || row.goodsType == 2) {
return !row.matId
} else {
return !row.matCode
}
})
if (rowWithoutMat) {
const tableRowIndex = list.value.findIndex((r) => r.id === rowWithoutMat.id) + 1
message.error(`${tableRowIndex} )没有选择物料编码,请确认!`)
return
}
try {
// 3.
// 4.
await StorageLogApi.generateBill(multipleSelection.value)
message.success(`成功生成 ${multipleSelection.value.length} 条单据`)
// 4.
// 5.
await getList()
} catch (e: any) {
// ID
@ -470,9 +488,16 @@ const submitForm = async () => {
return
}
// 2. 使
if (selectedList.some((row) => !row.matId)) {
const rowWithoutMatId = selectedList.find((row) => !row.matId)
const tableRowIndex = list.value.findIndex((r) => r.id === rowWithoutMatId.id) + 1
// goodsTypegoodsType12matIdmatCode
const rowWithoutMat = selectedList.find((row) => {
if (row.goodsType == 1 || row.goodsType == 2) {
return !row.matId
} else {
return !row.matCode
}
})
if (rowWithoutMat) {
const tableRowIndex = list.value.findIndex((r) => r.id === rowWithoutMat.id) + 1
message.error(`${tableRowIndex} )没有选择物料编码,请确认!`)
return
}