盘库不生成单据

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); item.setId(null);
double storageOkQty = Double.parseDouble(item.getStorageOkQty().toString()); double storageOkQty = Double.parseDouble(item.getStorageOkQty().toString());
double money = Double.parseDouble(item.getMoney().toString());
if (money != 0) { // double money = Double.parseDouble(item.getMoney().toString());
BigDecimal moneyBD = new BigDecimal(money); //
BigDecimal storageOkQtyBD = new BigDecimal(storageOkQty); // if (money != 0) {
BigDecimal result = moneyBD.divide(storageOkQtyBD, 1, RoundingMode.HALF_UP); // BigDecimal moneyBD = new BigDecimal(money);
item.setOnemoney(result.toString()); // BigDecimal storageOkQtyBD = new BigDecimal(storageOkQty);
} else { // BigDecimal result = moneyBD.divide(storageOkQtyBD, 1, RoundingMode.HALF_UP);
// 处理除数为零的情况例如设置一个默认值或返回一个错误 // item.setOnemoney(result.toString());
item.setOnemoney("0"); // 或者根据业务逻辑设置一个合适的值 // } else {
} // // 处理除数为零的情况例如设置一个默认值或返回一个错误
// item.setOnemoney("0"); // 或者根据业务逻辑设置一个合适的值
// }
// storageCheckMatService.createStorageCheckMat(item); // 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 com.chanko.yunxi.mes.module.heli.service.storagecheckmat.StorageCheckMatService;
import io.swagger.v3.oas.models.security.SecurityScheme; import io.swagger.v3.oas.models.security.SecurityScheme;
import org.springframework.stereotype.Service; import org.springframework.stereotype.Service;
import javax.annotation.Resource; import javax.annotation.Resource;
import javax.print.DocFlavor; import javax.print.DocFlavor;
import org.springframework.transaction.annotation.Transactional; import org.springframework.transaction.annotation.Transactional;
import org.springframework.validation.annotation.Validated; import org.springframework.validation.annotation.Validated;
import java.math.BigDecimal;
import java.text.SimpleDateFormat; import java.text.SimpleDateFormat;
import java.time.LocalDateTime; import java.time.LocalDateTime;
import java.util.*; import java.util.*;
import com.chanko.yunxi.mes.module.heli.controller.admin.storagecheck.vo.*; 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.module.heli.dal.dataobject.storagecheck.StorageCheckDO;
import com.chanko.yunxi.mes.framework.common.pojo.PageResult; 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); StorageCheckDO storageCheck = BeanUtils.toBean(createReqVO, StorageCheckDO.class);
// 月度流水号 // 月度流水号
SerialNumberDO serialNumberDO = serialNumberService.getSerialNumber(CodeEnum.STOCK_CHECK.name(), new SimpleDateFormat("yyyyMM").format(new Date())); 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())); storageCheck.setStockNo(STOCK_CHECK.getCode(serialNumberDO.getSerialNumber().toString()));
@ -128,27 +131,97 @@ public class StorageCheckServiceImpl implements StorageCheckService {
} }
@Override @Override
public Boolean createStorageByCheckInfo(Long checkId){ public Boolean createStorageByCheckInfo(Long checkId) {
// 获取盘点单据信息 // 获取盘点单据信息
StorageCheckDO storageCheckDO = this.getStorageCheck(checkId); StorageCheckDO storageCheckDO = this.getStorageCheck(checkId);
// 获取盘点单据物料信息 // 获取盘点单据物料信息
List<StorageCheckMatDO> storageCheckMats = storageCheckMatService.getStorageMatListByCheckId(checkId); List<StorageCheckMatDO> storageCheckMats = storageCheckMatService.getStorageMatListByCheckId(checkId);
long hasStockIn = 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(); // 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){ //要同步设置
// 库存类型为入库 } else {
saveStorage(storageCheckDO,1,2); storageInventoryDO.setYardAmount(storageInventoryDO.getYardAmount().add(storageMatDO.getStorageOkQty()));
} }
if(hasStockOut>0){
// 库存类型为出库 if (storageMatDO.getOnemoney() != null && !storageMatDO.getOnemoney().trim().equals("")) {
saveStorage(storageCheckDO,2,3); 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; return true;
} }
private void saveStorage(StorageCheckDO storageCheckDO,Integer stockType,Integer stockInType){
private void saveStorage(StorageCheckDO storageCheckDO, Integer stockType, Integer stockInType) {
LocalDateTime current = LocalDateTime.now(); LocalDateTime current = LocalDateTime.now();
// 库存类型为stockType // 库存类型为stockType
@ -164,60 +237,60 @@ public class StorageCheckServiceImpl implements StorageCheckService {
storageDO.setKeeperTime(current); storageDO.setKeeperTime(current);
storageDO.setOutbound(storageCheckDO.getKeeper()); storageDO.setOutbound(storageCheckDO.getKeeper());
storageDO.setOutboundTime(current); storageDO.setOutboundTime(current);
storageDO.setDescription("由盘点单号"+storageCheckDO.getStockNo()+"提交产生"); storageDO.setDescription("由盘点单号" + storageCheckDO.getStockNo() + "提交产生");
if(stockType == 1){ if (stockType == 1) {
storageDO.setStatus(2); storageDO.setStatus(2);
}else{ } else {
storageDO.setStatus(4); storageDO.setStatus(4);
} }
storageMapper.insert(storageDO); storageMapper.insert(storageDO);
storageDO.setStockNo(STOCK_IN.getCode(storageDO.getId().toString())); storageDO.setStockNo(STOCK_IN.getCode(storageDO.getId().toString()));
storageMapper.updateById(storageDO); storageMapper.updateById(storageDO);
saveStorageMat(storageCheckDO,storageDO.getId(),stockType); saveStorageMat(storageCheckDO, storageDO.getId(), stockType);
List<StorageMatDO> matList = storageMatMapper.selectMatByStorckID(storageDO.getId()); List<StorageMatDO> matList = storageMatMapper.selectMatByStorckID(storageDO.getId());
if (storageDO.getStockType()==1){ if (storageDO.getStockType() == 1) {
if (storageDO.getStatus() ==2){ if (storageDO.getStatus() == 2) {
for (StorageMatDO storageMatDO : matList) { for (StorageMatDO storageMatDO : matList) {
LambdaQueryWrapper<StorageInventoryDO> wrapper = new LambdaQueryWrapper<>(); LambdaQueryWrapper<StorageInventoryDO> wrapper = new LambdaQueryWrapper<>();
wrapper.eq(StorageInventoryDO::getWhId,storageMatDO.getWhId()); wrapper.eq(StorageInventoryDO::getWhId, storageMatDO.getWhId());
wrapper.eq(StorageInventoryDO::getMaterialId,storageMatDO.getMatId()); wrapper.eq(StorageInventoryDO::getMaterialId, storageMatDO.getMatId());
wrapper.eq(StorageInventoryDO::getRgId,storageMatDO.getRgId()); wrapper.eq(StorageInventoryDO::getRgId, storageMatDO.getRgId());
wrapper.eq(StorageInventoryDO::getPnId,storageMatDO.getPnId()); wrapper.eq(StorageInventoryDO::getPnId, storageMatDO.getPnId());
wrapper.eq(StorageInventoryDO::getDeleted,0); wrapper.eq(StorageInventoryDO::getDeleted, 0);
StorageInventoryDO storageInventoryDO = storageInventoryMapper.selectOne(wrapper); StorageInventoryDO storageInventoryDO = storageInventoryMapper.selectOne(wrapper);
if (ObjectUtil.isEmpty(storageInventoryDO)){ if (ObjectUtil.isEmpty(storageInventoryDO)) {
storageInventoryDO = new StorageInventoryDO(); storageInventoryDO = new StorageInventoryDO();
storageInventoryDO.setMaterialId(storageMatDO.getMatId()); storageInventoryDO.setMaterialId(storageMatDO.getMatId());
storageInventoryDO.setWhId(storageMatDO.getWhId()); storageInventoryDO.setWhId(storageMatDO.getWhId());
storageInventoryDO.setRgId(storageMatDO.getRgId()); storageInventoryDO.setRgId(storageMatDO.getRgId());
storageInventoryDO.setPnId(storageMatDO.getPnId()); storageInventoryDO.setPnId(storageMatDO.getPnId());
storageInventoryDO.setYardAmount(storageMatDO.getStorageOkQty() ); storageInventoryDO.setYardAmount(storageMatDO.getStorageOkQty());
MaterialDO materialDO = materialMapper.selectById(storageMatDO.getMatId()); MaterialDO materialDO = materialMapper.selectById(storageMatDO.getMatId());
if (ObjectUtil.isNotEmpty(materialDO)){ if (ObjectUtil.isNotEmpty(materialDO)) {
storageInventoryDO.setBoomUnit(materialDO.getUnit()); storageInventoryDO.setBoomUnit(materialDO.getUnit());
storageInventoryDO.setBoomName(materialDO.getName()); storageInventoryDO.setBoomName(materialDO.getName());
storageInventoryDO.setBoomSpec(materialDO.getSpec()); storageInventoryDO.setBoomSpec(materialDO.getSpec());
storageInventoryDO.setShortName(materialDO.getShortName()); storageInventoryDO.setShortName(materialDO.getShortName());
storageInventoryDO.setBoomCode(materialDO.getCode()); storageInventoryDO.setBoomCode(materialDO.getCode());
} }
}else { } else {
storageInventoryDO.setYardAmount(storageInventoryDO.getYardAmount().add(storageMatDO.getStorageOkQty())); storageInventoryDO.setYardAmount(storageInventoryDO.getYardAmount().add(storageMatDO.getStorageOkQty()));
} }
storageInventoryMapper.insertOrUpdate(storageInventoryDO); storageInventoryMapper.insertOrUpdate(storageInventoryDO);
} }
} }
}else if (storageDO.getStockType()==2){ } else if (storageDO.getStockType() == 2) {
if (storageDO.getStatus() == 4){ if (storageDO.getStatus() == 4) {
for (StorageMatDO storageMatDO : matList) { for (StorageMatDO storageMatDO : matList) {
LambdaQueryWrapper<StorageInventoryDO> wrapper = new LambdaQueryWrapper<>(); LambdaQueryWrapper<StorageInventoryDO> wrapper = new LambdaQueryWrapper<>();
wrapper.eq(StorageInventoryDO::getWhId,storageMatDO.getWhId()); wrapper.eq(StorageInventoryDO::getWhId, storageMatDO.getWhId());
wrapper.eq(StorageInventoryDO::getMaterialId,storageMatDO.getMatId()); wrapper.eq(StorageInventoryDO::getMaterialId, storageMatDO.getMatId());
wrapper.eq(StorageInventoryDO::getRgId,storageMatDO.getRgId()); wrapper.eq(StorageInventoryDO::getRgId, storageMatDO.getRgId());
wrapper.eq(StorageInventoryDO::getPnId,storageMatDO.getPnId()); wrapper.eq(StorageInventoryDO::getPnId, storageMatDO.getPnId());
wrapper.eq(StorageInventoryDO::getDeleted,0); wrapper.eq(StorageInventoryDO::getDeleted, 0);
StorageInventoryDO storageInventoryDO = storageInventoryMapper.selectOne(wrapper); StorageInventoryDO storageInventoryDO = storageInventoryMapper.selectOne(wrapper);
if (ObjectUtil.isNotEmpty(storageInventoryDO)){ if (ObjectUtil.isNotEmpty(storageInventoryDO)) {
storageInventoryDO.setYardAmount(storageInventoryDO.getYardAmount().subtract(storageMatDO.getStorageOkQty())); storageInventoryDO.setYardAmount(storageInventoryDO.getYardAmount().subtract(storageMatDO.getStorageOkQty()));
} }
storageInventoryMapper.insertOrUpdate(storageInventoryDO); storageInventoryMapper.insertOrUpdate(storageInventoryDO);
@ -227,11 +300,11 @@ public class StorageCheckServiceImpl implements StorageCheckService {
storageMapper.deleteById(storageDO.getId()); 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()); List<StorageCheckMatDO> storageCheckMats = storageCheckMatMapper.selectListByCheckID(storageCheckDO.getId());
for(StorageCheckMatDO item : storageCheckMats){ for (StorageCheckMatDO item : storageCheckMats) {
StorageMatDO storageMatDO = new StorageMatDO(); StorageMatDO storageMatDO = new StorageMatDO();
storageMatDO.setStockId(stockId); storageMatDO.setStockId(stockId);
@ -242,17 +315,18 @@ public class StorageCheckServiceImpl implements StorageCheckService {
storageMatDO.setStorageOkQty(item.getStorageOkQty().subtract(item.getMatRest()).abs()); storageMatDO.setStorageOkQty(item.getStorageOkQty().subtract(item.getMatRest()).abs());
storageMatDO.setLotNo(item.getLotNo()); 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); storageMatMapper.insert(storageMatDO);
// saveStorageLog(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); storageMatMapper.insert(storageMatDO);
saveStorageLog(storageMatDO); saveStorageLog(storageMatDO);
} }
} }
} }
private void saveStorageLog(StorageMatDO storageMatDO){
private void saveStorageLog(StorageMatDO storageMatDO) {
// 插入库存日志表 // 插入库存日志表
StorageLogDO storageLogDO = new StorageLogDO(); StorageLogDO storageLogDO = new StorageLogDO();
storageLogDO.setStockId(storageMatDO.getStockId()); storageLogDO.setStockId(storageMatDO.getStockId());

View File

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