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"), UNQUALIFIED_NOTIFICATION("品质异常通知单", "RN", 4, "yyyyMMdd"),
MATERIAL("物料", 6), MATERIAL("物料", 6),
XZD_STORAGE("新中大入出单", "X", 3, "yyyyMM"),
; ;

View File

@ -43,7 +43,7 @@ public interface StorageLogMapper extends BaseMapperX<StorageLogDO> {
.like(!StringUtils.isEmpty(reqVO.getMatName()), MaterialDO::getName, reqVO.getMatName()) .like(!StringUtils.isEmpty(reqVO.getMatName()), MaterialDO::getName, reqVO.getMatName())
.like(!StringUtils.isEmpty(reqVO.getCodeNo()), StorageLogDO::getCodeNo, reqVO.getCodeNo()) .like(!StringUtils.isEmpty(reqVO.getCodeNo()), StorageLogDO::getCodeNo, reqVO.getCodeNo())
.like(!StringUtils.isEmpty(reqVO.getMatSpec()), MaterialDO::getSpec, reqVO.getMatSpec()) .like(!StringUtils.isEmpty(reqVO.getMatSpec()), MaterialDO::getSpec, reqVO.getMatSpec())
.notIn(StorageLogDO::getStockMode,24,14) .notIn(StorageLogDO::getStockMode, 24, 14)
.eq(!ObjectUtil.isEmpty(reqVO.getWhId()), StorageLogDO::getWhId, reqVO.getWhId()); .eq(!ObjectUtil.isEmpty(reqVO.getWhId()), StorageLogDO::getWhId, reqVO.getWhId());
return selectPage(reqVO,query); return selectPage(reqVO,query);
} }
@ -67,6 +67,7 @@ public interface StorageLogMapper extends BaseMapperX<StorageLogDO> {
.orderByDesc(StorageLogDO::getId); .orderByDesc(StorageLogDO::getId);
query query
.notIn(StorageLogDO::getStockMode,24,14)
.like(!StringUtils.isEmpty(reqVO.getMatName()), StorageLogDO::getMatName, reqVO.getMatName()) .like(!StringUtils.isEmpty(reqVO.getMatName()), StorageLogDO::getMatName, reqVO.getMatName())
.like(!StringUtils.isEmpty(reqVO.getMatCode()), MaterialDO::getCode, reqVO.getMatCode()) .like(!StringUtils.isEmpty(reqVO.getMatCode()), MaterialDO::getCode, reqVO.getMatCode())
.eq(!StringUtils.isEmpty(reqVO.getStockType()), StorageLogDO::getStockType, reqVO.getStockType()) .eq(!StringUtils.isEmpty(reqVO.getStockType()), StorageLogDO::getStockType, reqVO.getStockType())

View File

@ -1,6 +1,5 @@
package com.chanko.yunxi.mes.module.heli.service.storagelog; package com.chanko.yunxi.mes.module.heli.service.storagelog;
import cn.hutool.core.util.IdUtil;
import cn.hutool.core.util.ObjectUtil; import cn.hutool.core.util.ObjectUtil;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper; 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.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.bdgzsomthing.bdgzsomthingDO;
import com.chanko.yunxi.mes.module.heli.dal.dataobject.material.MaterialDO; 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.storagelog.StorageLogDO;
import com.chanko.yunxi.mes.module.heli.dal.dataobject.storagelogNow.StorageLogNowDO; import com.chanko.yunxi.mes.module.heli.dal.dataobject.storagelogNow.StorageLogNowDO;
import com.chanko.yunxi.mes.module.heli.dal.dataobject.storagelogNow.StorageMaterialDO; 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.wmsconfig.WmsConfigMapper;
import com.chanko.yunxi.mes.module.heli.dal.mysql.wmsstorage.WmsStorageMapper; 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.heli.dal.mysql.wmsstoragedetail.WmsStorageDetailMapper;
import com.chanko.yunxi.mes.module.system.service.dict.DictDataService; import com.chanko.yunxi.mes.module.heli.service.serialnumber.SerialNumberService;
import com.chanko.yunxi.mes.module.system.service.dict.DictTypeService;
import org.springframework.stereotype.Service; import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional; import org.springframework.transaction.annotation.Transactional;
import org.springframework.validation.annotation.Validated; import org.springframework.validation.annotation.Validated;
@ -37,12 +36,14 @@ import reactor.util.function.Tuples;
import javax.annotation.Resource; import javax.annotation.Resource;
import java.math.BigDecimal; import java.math.BigDecimal;
import java.text.SimpleDateFormat;
import java.time.LocalDate; import java.time.LocalDate;
import java.time.LocalDateTime; import java.time.LocalDateTime;
import java.util.*; import java.util.*;
import java.util.stream.Collectors; import java.util.stream.Collectors;
import static com.chanko.yunxi.mes.framework.common.exception.util.ServiceExceptionUtil.exception; 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; 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; private WmsConfigMapper wmsConfigMapper;
@Resource @Resource
private DictTypeService dictTypeService; private SerialNumberService serialNumberService;
@Resource
private DictDataService dictDataService;
@Resource @Resource
private com.chanko.yunxi.mes.module.heli.dal.mysql.bdgzsomthing.bdgzsomthingMapper bdgzsomthingMapper; private com.chanko.yunxi.mes.module.heli.dal.mysql.bdgzsomthing.bdgzsomthingMapper bdgzsomthingMapper;
@ -157,16 +155,13 @@ public class StorageLogServiceImpl implements StorageLogService {
idSet = new HashSet<>(pageReqVO.getIds()); idSet = new HashSet<>(pageReqVO.getIds());
} }
for (StorageLogDO logDO : pageResult.getList()) { for (StorageLogDO logDO : pageResult.getList()) {
if (logDO.getGoodsType() == 2) { LambdaQueryWrapper<MaterialDO> queryWrapper = new LambdaQueryWrapper<>();
if (ObjectUtil.isNotEmpty(logDO.getMatName())) { queryWrapper.like(logDO.getMatName() != null, MaterialDO::getName, logDO.getMatName());
LambdaQueryWrapper<MaterialDO> queryWrapper = new LambdaQueryWrapper<>(); queryWrapper.like(logDO.getMatSpec() != null, MaterialDO::getSpec, logDO.getMatSpec());
queryWrapper.eq(MaterialDO::getName, logDO.getMatName()); List<MaterialDO> materialDOS = materialMapper.selectList(queryWrapper);
List<MaterialDO> materialDOS = materialMapper.selectList(queryWrapper); logDO.setMaterialDOList(materialDOS);
logDO.setMaterialDOList(materialDOS); if (idSet.contains(logDO.getId()) && materialDOS.size() == 1) {
if (idSet.contains(logDO.getId()) && materialDOS.size() == 1) { logDO.setMatId(materialDOS.get(0).getId());
logDO.setMatId(materialDOS.get(0).getId());
}
}
} }
} }
return pageResult; return pageResult;
@ -466,7 +461,11 @@ public class StorageLogServiceImpl implements StorageLogService {
storageDO.setStockType(stockType); storageDO.setStockType(stockType);
storageDO.setBusiType(stockType == 1 ? configDO.getBusiTypeIn() : configDO.getBusiTypeOut()); storageDO.setBusiType(stockType == 1 ? configDO.getBusiTypeIn() : configDO.getBusiTypeOut());
storageDO.setWhName(configDO.getWhName()); 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.setBusiDate(LocalDate.now());
storageDO.setSupplierName(supplierName); storageDO.setSupplierName(supplierName);
storageDO.setPriceType(priceType); storageDO.setPriceType(priceType);

View File

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