盘库不生成单据

This commit is contained in:
Ledo 2025-07-05 22:46:22 +08:00
parent da6b435eeb
commit 05d944ecd4
3 changed files with 139 additions and 54 deletions

View File

@ -69,17 +69,18 @@ public class StorageCheckController {
item.setId(null);
double storageOkQty = Double.parseDouble(item.getStorageOkQty().toString());
double money = Double.parseDouble(item.getMoney().toString());
if (money != 0) {
BigDecimal moneyBD = new BigDecimal(money);
BigDecimal storageOkQtyBD = new BigDecimal(storageOkQty);
BigDecimal result = moneyBD.divide(storageOkQtyBD, 1, RoundingMode.HALF_UP);
item.setOnemoney(result.toString());
} else {
// 处理除数为零的情况例如设置一个默认值或返回一个错误
item.setOnemoney("0"); // 或者根据业务逻辑设置一个合适的值
}
// double money = Double.parseDouble(item.getMoney().toString());
//
// if (money != 0) {
// BigDecimal moneyBD = new BigDecimal(money);
// BigDecimal storageOkQtyBD = new BigDecimal(storageOkQty);
// BigDecimal result = moneyBD.divide(storageOkQtyBD, 1, RoundingMode.HALF_UP);
// item.setOnemoney(result.toString());
// } else {
// // 处理除数为零的情况例如设置一个默认值或返回一个错误
// item.setOnemoney("0"); // 或者根据业务逻辑设置一个合适的值
// }
// storageCheckMatService.createStorageCheckMat(item);

View File

@ -21,15 +21,18 @@ import com.chanko.yunxi.mes.module.heli.service.serialnumber.SerialNumberService
import com.chanko.yunxi.mes.module.heli.service.storagecheckmat.StorageCheckMatService;
import io.swagger.v3.oas.models.security.SecurityScheme;
import org.springframework.stereotype.Service;
import javax.annotation.Resource;
import javax.print.DocFlavor;
import org.springframework.transaction.annotation.Transactional;
import org.springframework.validation.annotation.Validated;
import java.math.BigDecimal;
import java.text.SimpleDateFormat;
import java.time.LocalDateTime;
import java.util.*;
import com.chanko.yunxi.mes.module.heli.controller.admin.storagecheck.vo.*;
import com.chanko.yunxi.mes.module.heli.dal.dataobject.storagecheck.StorageCheckDO;
import com.chanko.yunxi.mes.framework.common.pojo.PageResult;
@ -82,7 +85,7 @@ public class StorageCheckServiceImpl implements StorageCheckService {
StorageCheckDO storageCheck = BeanUtils.toBean(createReqVO, StorageCheckDO.class);
// 月度流水号
SerialNumberDO serialNumberDO = serialNumberService.getSerialNumber(CodeEnum.STOCK_CHECK.name(), new SimpleDateFormat("yyyyMM").format(new Date()));
serialNumberDO.setSerialNumber(serialNumberDO.getSerialNumber()+1);
serialNumberDO.setSerialNumber(serialNumberDO.getSerialNumber() + 1);
storageCheck.setStockNo(STOCK_CHECK.getCode(serialNumberDO.getSerialNumber().toString()));
@ -128,27 +131,97 @@ public class StorageCheckServiceImpl implements StorageCheckService {
}
@Override
public Boolean createStorageByCheckInfo(Long checkId){
public Boolean createStorageByCheckInfo(Long checkId) {
// 获取盘点单据信息
StorageCheckDO storageCheckDO = this.getStorageCheck(checkId);
// 获取盘点单据物料信息
List<StorageCheckMatDO> storageCheckMats = storageCheckMatService.getStorageMatListByCheckId(checkId);
long hasStockIn = storageCheckMats.stream().filter(item->item.getStorageOkQty().subtract(item.getMatRest()).intValue()>0).count();
long hasStockOut = storageCheckMats.stream().filter(item->item.getStorageOkQty().subtract(item.getMatRest()).intValue()<0).count();
// long hasStockIn = storageCheckMats.stream().filter(item->item.getStorageOkQty().subtract(item.getMatRest()).intValue()>0).count();
// long hasStockOut = storageCheckMats.stream().filter(item->item.getStorageOkQty().subtract(item.getMatRest()).intValue()<0).count();
//20250705新逻辑
for (StorageCheckMatDO storageMatDO : storageCheckMats) {
BigDecimal dif = storageMatDO.getStorageOkQty().subtract(storageMatDO.getMatRest());
if (dif.compareTo(BigDecimal.ZERO) > 0) {
//大于0 入库增加库额度
LambdaQueryWrapper<StorageInventoryDO> wrapper = new LambdaQueryWrapper<>();
wrapper.eq(StorageInventoryDO::getWhId, storageMatDO.getWhId());
wrapper.eq(StorageInventoryDO::getMaterialId, storageMatDO.getMatId());
wrapper.eq(StorageInventoryDO::getRgId, storageMatDO.getRgId());
wrapper.eq(StorageInventoryDO::getPnId, storageMatDO.getPnId());
wrapper.eq(StorageInventoryDO::getDeleted, 0);
StorageInventoryDO storageInventoryDO = storageInventoryMapper.selectOne(wrapper);
if (ObjectUtil.isEmpty(storageInventoryDO)) {
storageInventoryDO = new StorageInventoryDO();
storageInventoryDO.setMaterialId(storageMatDO.getMatId());
storageInventoryDO.setWhId(storageMatDO.getWhId());
storageInventoryDO.setRgId(storageMatDO.getRgId());
storageInventoryDO.setPnId(storageMatDO.getPnId());
storageInventoryDO.setYardAmount(storageMatDO.getStorageOkQty());
MaterialDO materialDO = materialMapper.selectById(storageMatDO.getMatId());
if (ObjectUtil.isNotEmpty(materialDO)) {
storageInventoryDO.setBoomUnit(materialDO.getUnit());
storageInventoryDO.setBoomName(materialDO.getName());
storageInventoryDO.setBoomSpec(materialDO.getSpec());
storageInventoryDO.setShortName(materialDO.getShortName());
storageInventoryDO.setBoomCode(materialDO.getCode());
}
if(hasStockIn>0){
// 库存类型为入库
saveStorage(storageCheckDO,1,2);
}
if(hasStockOut>0){
// 库存类型为出库
saveStorage(storageCheckDO,2,3);
//要同步设置
} else {
storageInventoryDO.setYardAmount(storageInventoryDO.getYardAmount().add(storageMatDO.getStorageOkQty()));
}
if (storageMatDO.getOnemoney() != null && !storageMatDO.getOnemoney().trim().equals("")) {
BigDecimal bigDecimal = new BigDecimal(storageMatDO.getOnemoney());
storageInventoryDO.setPrice(bigDecimal);
}
storageInventoryMapper.insertOrUpdate(storageInventoryDO);
} else {
//不然就是出库
LambdaQueryWrapper<StorageInventoryDO> wrapper = new LambdaQueryWrapper<>();
wrapper.eq(StorageInventoryDO::getWhId, storageMatDO.getWhId());
wrapper.eq(StorageInventoryDO::getMaterialId, storageMatDO.getMatId());
wrapper.eq(StorageInventoryDO::getRgId, storageMatDO.getRgId());
wrapper.eq(StorageInventoryDO::getPnId, storageMatDO.getPnId());
wrapper.eq(StorageInventoryDO::getDeleted, 0);
StorageInventoryDO storageInventoryDO = storageInventoryMapper.selectOne(wrapper);
if (ObjectUtil.isNotEmpty(storageInventoryDO)) {
storageInventoryDO.setYardAmount(storageInventoryDO.getYardAmount().subtract(storageMatDO.getStorageOkQty()));
}
if (storageMatDO.getOnemoney() != null && !storageMatDO.getOnemoney().trim().equals("")) {
BigDecimal bigDecimal = new BigDecimal(storageMatDO.getOnemoney());
storageInventoryDO.setPrice(bigDecimal);
}
storageInventoryMapper.insertOrUpdate(storageInventoryDO);
}
// 插入库存日志表
StorageLogDO storageLogDO = new StorageLogDO();
storageLogDO.setStockId(storageMatDO.getCheckId());
storageLogDO.setMatId(storageMatDO.getMatId());
storageLogDO.setWhId(storageMatDO.getWhId());
storageLogDO.setRgId(storageMatDO.getRgId());
storageLogDO.setPnId(storageMatDO.getPnId());
storageLogDO.setStorageOkQty(storageMatDO.getStorageOkQty().subtract(storageMatDO.getMatRest()));
storageLogDO.setLotNo(storageMatDO.getLotNo());
storageLogDO.setStatus(2);
storageLogMapper.insert(storageLogDO);
}
//同步插入日志
// if(hasStockIn>0){
// // 库存类型为入库
// saveStorage(storageCheckDO,1,2);
// }
// if(hasStockOut>0){
// // 库存类型为出库
// saveStorage(storageCheckDO,2,3);
// }
return true;
}
private void saveStorage(StorageCheckDO storageCheckDO,Integer stockType,Integer stockInType){
private void saveStorage(StorageCheckDO storageCheckDO, Integer stockType, Integer stockInType) {
LocalDateTime current = LocalDateTime.now();
// 库存类型为stockType
@ -164,60 +237,60 @@ public class StorageCheckServiceImpl implements StorageCheckService {
storageDO.setKeeperTime(current);
storageDO.setOutbound(storageCheckDO.getKeeper());
storageDO.setOutboundTime(current);
storageDO.setDescription("由盘点单号"+storageCheckDO.getStockNo()+"提交产生");
if(stockType == 1){
storageDO.setDescription("由盘点单号" + storageCheckDO.getStockNo() + "提交产生");
if (stockType == 1) {
storageDO.setStatus(2);
}else{
} else {
storageDO.setStatus(4);
}
storageMapper.insert(storageDO);
storageDO.setStockNo(STOCK_IN.getCode(storageDO.getId().toString()));
storageMapper.updateById(storageDO);
saveStorageMat(storageCheckDO,storageDO.getId(),stockType);
List<StorageMatDO> matList = storageMatMapper.selectMatByStorckID(storageDO.getId());
if (storageDO.getStockType()==1){
if (storageDO.getStatus() ==2){
saveStorageMat(storageCheckDO, storageDO.getId(), stockType);
List<StorageMatDO> matList = storageMatMapper.selectMatByStorckID(storageDO.getId());
if (storageDO.getStockType() == 1) {
if (storageDO.getStatus() == 2) {
for (StorageMatDO storageMatDO : matList) {
LambdaQueryWrapper<StorageInventoryDO> wrapper = new LambdaQueryWrapper<>();
wrapper.eq(StorageInventoryDO::getWhId,storageMatDO.getWhId());
wrapper.eq(StorageInventoryDO::getMaterialId,storageMatDO.getMatId());
wrapper.eq(StorageInventoryDO::getRgId,storageMatDO.getRgId());
wrapper.eq(StorageInventoryDO::getPnId,storageMatDO.getPnId());
wrapper.eq(StorageInventoryDO::getDeleted,0);
wrapper.eq(StorageInventoryDO::getWhId, storageMatDO.getWhId());
wrapper.eq(StorageInventoryDO::getMaterialId, storageMatDO.getMatId());
wrapper.eq(StorageInventoryDO::getRgId, storageMatDO.getRgId());
wrapper.eq(StorageInventoryDO::getPnId, storageMatDO.getPnId());
wrapper.eq(StorageInventoryDO::getDeleted, 0);
StorageInventoryDO storageInventoryDO = storageInventoryMapper.selectOne(wrapper);
if (ObjectUtil.isEmpty(storageInventoryDO)){
if (ObjectUtil.isEmpty(storageInventoryDO)) {
storageInventoryDO = new StorageInventoryDO();
storageInventoryDO.setMaterialId(storageMatDO.getMatId());
storageInventoryDO.setWhId(storageMatDO.getWhId());
storageInventoryDO.setRgId(storageMatDO.getRgId());
storageInventoryDO.setPnId(storageMatDO.getPnId());
storageInventoryDO.setYardAmount(storageMatDO.getStorageOkQty() );
storageInventoryDO.setYardAmount(storageMatDO.getStorageOkQty());
MaterialDO materialDO = materialMapper.selectById(storageMatDO.getMatId());
if (ObjectUtil.isNotEmpty(materialDO)){
if (ObjectUtil.isNotEmpty(materialDO)) {
storageInventoryDO.setBoomUnit(materialDO.getUnit());
storageInventoryDO.setBoomName(materialDO.getName());
storageInventoryDO.setBoomSpec(materialDO.getSpec());
storageInventoryDO.setShortName(materialDO.getShortName());
storageInventoryDO.setBoomCode(materialDO.getCode());
}
}else {
} else {
storageInventoryDO.setYardAmount(storageInventoryDO.getYardAmount().add(storageMatDO.getStorageOkQty()));
}
storageInventoryMapper.insertOrUpdate(storageInventoryDO);
}
}
}else if (storageDO.getStockType()==2){
if (storageDO.getStatus() == 4){
} else if (storageDO.getStockType() == 2) {
if (storageDO.getStatus() == 4) {
for (StorageMatDO storageMatDO : matList) {
LambdaQueryWrapper<StorageInventoryDO> wrapper = new LambdaQueryWrapper<>();
wrapper.eq(StorageInventoryDO::getWhId,storageMatDO.getWhId());
wrapper.eq(StorageInventoryDO::getMaterialId,storageMatDO.getMatId());
wrapper.eq(StorageInventoryDO::getRgId,storageMatDO.getRgId());
wrapper.eq(StorageInventoryDO::getPnId,storageMatDO.getPnId());
wrapper.eq(StorageInventoryDO::getDeleted,0);
wrapper.eq(StorageInventoryDO::getWhId, storageMatDO.getWhId());
wrapper.eq(StorageInventoryDO::getMaterialId, storageMatDO.getMatId());
wrapper.eq(StorageInventoryDO::getRgId, storageMatDO.getRgId());
wrapper.eq(StorageInventoryDO::getPnId, storageMatDO.getPnId());
wrapper.eq(StorageInventoryDO::getDeleted, 0);
StorageInventoryDO storageInventoryDO = storageInventoryMapper.selectOne(wrapper);
if (ObjectUtil.isNotEmpty(storageInventoryDO)){
if (ObjectUtil.isNotEmpty(storageInventoryDO)) {
storageInventoryDO.setYardAmount(storageInventoryDO.getYardAmount().subtract(storageMatDO.getStorageOkQty()));
}
storageInventoryMapper.insertOrUpdate(storageInventoryDO);
@ -227,11 +300,11 @@ public class StorageCheckServiceImpl implements StorageCheckService {
storageMapper.deleteById(storageDO.getId());
}
private void saveStorageMat(StorageCheckDO storageCheckDO, Long stockId, Integer stockType){
private void saveStorageMat(StorageCheckDO storageCheckDO, Long stockId, Integer stockType) {
List<StorageCheckMatDO> storageCheckMats = storageCheckMatMapper.selectListByCheckID(storageCheckDO.getId());
for(StorageCheckMatDO item : storageCheckMats){
for (StorageCheckMatDO item : storageCheckMats) {
StorageMatDO storageMatDO = new StorageMatDO();
storageMatDO.setStockId(stockId);
@ -242,17 +315,18 @@ public class StorageCheckServiceImpl implements StorageCheckService {
storageMatDO.setStorageOkQty(item.getStorageOkQty().subtract(item.getMatRest()).abs());
storageMatDO.setLotNo(item.getLotNo());
// 插入出入库物料表
if(stockType == 1 && item.getStorageOkQty().subtract(item.getMatRest()).doubleValue()>0){
if (stockType == 1 && item.getStorageOkQty().subtract(item.getMatRest()).doubleValue() > 0) {
storageMatMapper.insert(storageMatDO);
// saveStorageLog(storageMatDO);
}
if(stockType == 2 && item.getStorageOkQty().subtract(item.getMatRest()).doubleValue()<0){
if (stockType == 2 && item.getStorageOkQty().subtract(item.getMatRest()).doubleValue() < 0) {
storageMatMapper.insert(storageMatDO);
saveStorageLog(storageMatDO);
}
}
}
private void saveStorageLog(StorageMatDO storageMatDO){
private void saveStorageLog(StorageMatDO storageMatDO) {
// 插入库存日志表
StorageLogDO storageLogDO = new StorageLogDO();
storageLogDO.setStockId(storageMatDO.getStockId());

View File

@ -140,15 +140,21 @@
</template>
</el-table-column>
<el-table-column prop="money" min-width="120" align="center" >
<!-- <el-table-column prop="money" min-width="120" align="center" >
<template #header> <span class="hl-table_header">*</span>金额</template>
<template #default="scope">
<el-form-item :prop="`${scope.$index}.money`" :rules="subFormRules.money" class="mb-0px!" >
<el-input v-model="scope.row.money" :disabled="ctrView || ctrSave" />
</el-form-item>
</template>
</el-table-column>
<el-table-column prop="onemoney" label="单价" min-width="120" align="center"/>
</el-table-column> -->
<el-table-column prop="onemoney" label="单价" min-width="120" align="center">
<template #default="scope">
<el-form-item :prop="`${scope.$index}.onemoney`" class="mb-0px!" >
<el-input v-model="scope.row.onemoney" :disabled="ctrView || ctrSave" />
</el-form-item>
</template>
</el-table-column>
@ -453,6 +459,10 @@ const getList = async (arrMat) => {
row.pnId = ''
row.matRest = 0
}
console.log(row.price)
if(row.price){
row.onemoney = row.price
}
formData.value.matItemDOList.push(row)
matCount = matCount + 1
}