Compare commits

...

3 Commits

Author SHA1 Message Date
曹鹏飞 376f3c5323 fix: bug-928 成品订单入库(生产订单入库)清点件,入库后WMS库存没增加 2025-11-25 11:49:56 +08:00
曹鹏飞 268fbc3220 feat: 一些优化 2025-11-18 10:37:13 +08:00
曹鹏飞 172ddbc444 feat: 一些优化 2025-11-17 14:04:50 +08:00
12 changed files with 75 additions and 53 deletions

View File

@ -12,7 +12,6 @@ import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Value; import org.springframework.beans.factory.annotation.Value;
import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration; import org.springframework.context.annotation.Configuration;
import org.springframework.context.annotation.Lazy;
import java.util.HashMap; import java.util.HashMap;
import java.util.Map; import java.util.Map;
@ -92,13 +91,11 @@ public class SAPConfig {
} }
@Bean(destroyMethod = "") @Bean(destroyMethod = "")
@Lazy
public JCoDestination jcoDestination() throws JCoException { public JCoDestination jcoDestination() throws JCoException {
return JCoDestinationManager.getDestination(ABAP_AS_POOLED); return JCoDestinationManager.getDestination(ABAP_AS_POOLED);
} }
@Bean @Bean
@Lazy
public JCoRepository getJCoRepository() throws JCoException { public JCoRepository getJCoRepository() throws JCoException {
return jcoDestination().getRepository(); return jcoDestination().getRepository();
} }

View File

@ -172,12 +172,12 @@ public class ComponentOutboundController extends BaseController {
.eq(WmsComponentPackingItem::getPackingId, packing.getId()) .eq(WmsComponentPackingItem::getPackingId, packing.getId())
.list(); .list();
VUtil.trueThrowBusinessError(CollectionUtil.isEmpty(packingItems)).throwMessage("无法找到有效的装箱单详情"); VUtil.trueThrowBusinessError(CollectionUtil.isEmpty(packingItems)).throwMessage("无法找到有效的装箱单详情");
//判断是否存在了相同的交货单了 // //判断是否存在了相同的交货单了
WmsComponentOutbound outboundSelect = wmsComponentOutboundService.lambdaQuery() // WmsComponentOutbound outboundSelect = wmsComponentOutboundService.lambdaQuery()
.eq(WmsComponentOutbound::getVbelv, packing.getVbelv()) // .eq(WmsComponentOutbound::getVbelv, packing.getVbelv())
.eq(WmsComponentOutbound::getIsReverse, false) // .eq(WmsComponentOutbound::getIsReverse, false)
.one(); // .one();
VUtil.trueThrowBusinessError(Objects.nonNull(outboundSelect), () -> "交货单已出库,单号为【" + outboundSelect.getOutboundNo() + ""); // VUtil.trueThrowBusinessError(Objects.nonNull(outboundSelect), () -> "交货单已出库,单号为【" + outboundSelect.getOutboundNo() + "");
//判断数量是否一致且已经存在了相同的收货单了 //判断数量是否一致且已经存在了相同的收货单了
// for (WmsComponentPackingItem item : packingItems) { // for (WmsComponentPackingItem item : packingItems) {
// List<ComponentOutboundItemInputQO> items = request.getItems() // List<ComponentOutboundItemInputQO> items = request.getItems()
@ -240,7 +240,7 @@ public class ComponentOutboundController extends BaseController {
); );
}); });
VUtil.trueThrowBusinessError(outboundItem.getOutQty() VUtil.trueThrowBusinessError(outboundItem.getOutQty()
.compareTo(records.stream().map(OutMaterialScanRecord::getNum).reduce(BigDecimal.ZERO, BigDecimal::add)) < 0) .compareTo(records.stream().map(OutMaterialScanRecord::getNum).reduce(BigDecimal.ZERO, BigDecimal::add)) != 0)
.throwMessage("物料" + outboundItem.getIdnrk() + "的领取数量不等于装箱数量"); .throwMessage("物料" + outboundItem.getIdnrk() + "的领取数量不等于装箱数量");
} else { } else {
VUtil.trueThrowBusinessError(CollectionUtil.isEmpty(item.getScanCodes())) VUtil.trueThrowBusinessError(CollectionUtil.isEmpty(item.getScanCodes()))
@ -261,7 +261,8 @@ public class ComponentOutboundController extends BaseController {
//判断扫码数量是否等于了出货数量 //判断扫码数量是否等于了出货数量
BigDecimal qty = scanCodesGroup.stream().map(ScanCodeQO::getCodeNum).reduce(BigDecimal.ZERO, BigDecimal::add); BigDecimal qty = scanCodesGroup.stream().map(ScanCodeQO::getCodeNum).reduce(BigDecimal.ZERO, BigDecimal::add);
VUtil.trueThrowBusinessError(outboundItem.getOutQty().equals(qty)).throwMessage("物料[" + outboundItem.getIdnrk() + "]的出库数量[" + qty + "]不等于装箱数量[" + outboundItem.getOutQty() + "]"); VUtil.trueThrowBusinessError(outboundItem.getOutQty().compareTo(qty) != 0)
.throwMessage("物料[" + outboundItem.getIdnrk() + "]的出库数量[" + qty + "]不等于装箱数量[" + outboundItem.getOutQty() + "]");
buildZwm3a20DTO(zwm3a20DTO, scanCodesGroup, outboundItem); buildZwm3a20DTO(zwm3a20DTO, scanCodesGroup, outboundItem);

View File

@ -417,13 +417,15 @@ public class InProduceOrderController extends BaseController {
.map(InMaterialScanRecord::getSerialNo) .map(InMaterialScanRecord::getSerialNo)
.toList(); .toList();
} }
inventoryService.in(input1.stream().map(it -> new InventoryDTO() inventoryService.in(list.stream()
.setMaterialNo(request.getItems().get(0).getMaterialNo()) .filter(it -> Objects.equals(it.getParentId(), 0L))
.setNum(it.getPSMNG()) .map(it -> new InventoryDTO()
.setFactoryNo(it.getPWERK()) .setMaterialNo(it.getMaterialNo())
.setWarehouseNo(it.getLGORT()) .setNum(it.getNum())
.setBatchNo(it.getCHARG()) .setFactoryNo(it.getFactoryNo())
.setSerialNo("") //TODO 如何设置序列号 .setWarehouseNo(it.getWarehouseNo())
.setBatchNo(it.getBatchNo())
.setSerialNo(it.getSernr())
).toList() ).toList()
); );
inMaterialScanRecordRespository.saveAll(records); inMaterialScanRecordRespository.saveAll(records);

View File

@ -301,11 +301,11 @@ public class OutAssistanceController extends BaseController {
}); });
outAssistanceItemService.updateBatchById(datas); outAssistanceItemService.updateBatchById(datas);
outAssistanceTicketItemService.saveBatch(ticketItems); outAssistanceTicketItemService.saveBatch(ticketItems);
outAssistanceTicketService.save(ticket);
if (!request.getNeedAudit()) { if (!request.getNeedAudit()) {
//不需要审核 //不需要审核
submitSap(order, ticket, records, datas); submitSap(order, ticket, records, datas);
} else { } else {
outAssistanceTicketService.save(ticket);
inventoryForOutRepository.saveAll(request.getRecommendBatch() inventoryForOutRepository.saveAll(request.getRecommendBatch()
.stream() .stream()
.map(item -> { .map(item -> {
@ -360,9 +360,11 @@ public class OutAssistanceController extends BaseController {
}).toList() }).toList()
) )
); );
ticket.setMatDoc(dto.getMatDoc()); outAssistanceTicketService.lambdaUpdate()
ticket.setDocYear(dto.getDocYear()); .set(WmsOutAssistanceTicket::getMatDoc, dto.getMatDoc())
outAssistanceTicketService.save(ticket); .set(WmsOutAssistanceTicket::getDocYear, dto.getDocYear())
.eq(WmsOutAssistanceTicket::getId, ticket.getId())
.update();
} }
/** /**

View File

@ -289,11 +289,11 @@ public class OutCostCenterController extends BaseController {
}); });
outCostcenterItemService.updateBatchById(datas); outCostcenterItemService.updateBatchById(datas);
outCostcenterTicketItemService.saveBatch(ticketItems); outCostcenterTicketItemService.saveBatch(ticketItems);
outCostcenterTicketService.save(ticket);
if (!request.getNeedAudit()) { if (!request.getNeedAudit()) {
//不需要审核 //不需要审核
submitSap(order, ticket, records, datas); submitSap(order, ticket, records, datas);
} else { } else {
outCostcenterTicketService.save(ticket);
inventoryForOutRepository.saveAll(request.getRecommendBatch() inventoryForOutRepository.saveAll(request.getRecommendBatch()
.stream() .stream()
.map(item -> { .map(item -> {
@ -347,9 +347,11 @@ public class OutCostCenterController extends BaseController {
}).toList() }).toList()
) )
); );
ticket.setMatDoc(vo.getEMblnr()); outCostcenterTicketService.lambdaUpdate()
ticket.setDocYear(vo.getEMJahr()); .set(WmsOutCostcenterTicket::getMatDoc, vo.getEMblnr())
outCostcenterTicketService.save(ticket); .set(WmsOutCostcenterTicket::getDocYear, vo.getEMJahr())
.eq(WmsOutCostcenterTicket::getId, ticket.getId())
.update();
} }
/** /**

View File

@ -346,7 +346,6 @@ public class OutProduceController extends BaseController {
ticketItems.add(ti); ticketItems.add(ti);
return ti; return ti;
}); });
BigDecimal num = Objects.equals(order.getType(), 0) ? item.getLockNum() : item.getSqsl().subtract(item.getNum());
if (qitem.isQiTao()) { if (qitem.isQiTao()) {
VUtil.trueThrowBusinessError(CollectionUtil.isEmpty(qitem.getBatchs())) VUtil.trueThrowBusinessError(CollectionUtil.isEmpty(qitem.getBatchs()))
.throwMessage("齐套物料需要提供批次信息"); .throwMessage("齐套物料需要提供批次信息");
@ -377,8 +376,7 @@ public class OutProduceController extends BaseController {
item.setNum(item.getNum().add(it.getNum())); item.setNum(item.getNum().add(it.getNum()));
pti.setNum(pti.getNum().add(it.getNum())); pti.setNum(pti.getNum().add(it.getNum()));
}); });
VUtil.trueThrowBusinessError(num.subtract(records.stream().map(OutMaterialScanRecord::getNum).reduce(BigDecimal.ZERO, BigDecimal::add)) VUtil.trueThrowBusinessError(item.getNum().compareTo(item.getSqsl()) > 0)
.compareTo(BigDecimal.ZERO) < 0)
.throwMessage("物料" + item.getMatnr() + "的领取数量超出申请限制"); .throwMessage("物料" + item.getMatnr() + "的领取数量超出申请限制");
} else { } else {
VUtil.trueThrowBusinessError(CollectionUtil.isEmpty(qitem.getQrCodes())) VUtil.trueThrowBusinessError(CollectionUtil.isEmpty(qitem.getQrCodes()))
@ -392,7 +390,7 @@ public class OutProduceController extends BaseController {
} }
item.setNum(item.getNum().add(qrCodeContent.getNum())); item.setNum(item.getNum().add(qrCodeContent.getNum()));
pti.setNum(pti.getNum().add(qrCodeContent.getNum())); pti.setNum(pti.getNum().add(qrCodeContent.getNum()));
VUtil.trueThrowBusinessError(num.compareTo(pti.getNum()) < 0) VUtil.trueThrowBusinessError(item.getNum().compareTo(item.getSqsl()) > 0)
.throwMessage("物料" + materialNo + "的领取数量超出申请限制"); .throwMessage("物料" + materialNo + "的领取数量超出申请限制");
records.add(new OutMaterialScanRecord() records.add(new OutMaterialScanRecord()
.setSource(1) .setSource(1)
@ -418,11 +416,11 @@ public class OutProduceController extends BaseController {
}); });
outProduceItemService.updateBatchById(datas); outProduceItemService.updateBatchById(datas);
outProduceTicketItemService.saveBatch(ticketItems); outProduceTicketItemService.saveBatch(ticketItems);
outProduceTicketService.save(ticket);
if (!request.getNeedAudit()) { if (!request.getNeedAudit()) {
//不需要审核 //不需要审核
submitSap(order, ticket, records, datas); submitSap(order, ticket, records, datas);
} else { } else {
outProduceTicketService.save(ticket);
inventoryForOutRepository.saveAll(request.getRecommendBatch() inventoryForOutRepository.saveAll(request.getRecommendBatch()
.stream() .stream()
.map(ifo -> { .map(ifo -> {
@ -472,17 +470,18 @@ public class OutProduceController extends BaseController {
}).toList() }).toList()
) )
); );
ticket.setMatDoc(vo.getMat_doc()); outProduceTicketService.lambdaUpdate()
ticket.setDocYear(vo.getDocYear()); .set(WmsOutProduceTicket::getMatDoc, vo.getMat_doc())
outProduceTicketService.save(ticket); .set(WmsOutProduceTicket::getDocYear, vo.getDocYear())
.eq(WmsOutProduceTicket::getId, ticket.getId())
.update();
} }
/** /**
* 搜索出库单 * 搜索出库单
*/ */
@PostMapping("searchTicket") @PostMapping("searchTicket")
public ApiResult<PageData<OutProduceTicketVO>> searchTicket(@Valid @RequestBody OutProduceTicketSearchQO public ApiResult<PageData<OutProduceTicketVO>> searchTicket(@Valid @RequestBody OutProduceTicketSearchQO request) {
request) {
return ApiResult.success(outProduceTicketService.search(request)); return ApiResult.success(outProduceTicketService.search(request));
} }

View File

@ -102,13 +102,16 @@ public class ScanRecordController extends BaseController {
dto.getItems().forEach(item -> { dto.getItems().forEach(item -> {
OutDifferenceItemVO itemVO = new OutDifferenceItemVO() OutDifferenceItemVO itemVO = new OutDifferenceItemVO()
.setRecommendbatchNo(item.getBatchNo()) .setRecommendbatchNo(item.getBatchNo())
.setRecommendSerialNo(item.getSerialNo())
.setRecommendNum(item.getNum()); .setRecommendNum(item.getNum());
List<OutMaterialScanRecord> mrecords = records.stream() List<OutMaterialScanRecord> mrecords = records.stream()
.filter(r -> StrUtil.equals(r.getMaterialNo(), dto.getMaterialNo()) .filter(r -> StrUtil.equals(r.getMaterialNo(), dto.getMaterialNo())
&& StrUtil.equals(r.getBatchNo(), item.getBatchNo())) && StrUtil.equals(r.getBatchNo(), item.getBatchNo())
&& StrUtil.equals(r.getSerialNo(), item.getSerialNo()))
.toList(); .toList();
if (CollectionUtil.isNotEmpty(mrecords)) { if (CollectionUtil.isNotEmpty(mrecords)) {
itemVO.setScanBatchNo(item.getBatchNo()); itemVO.setScanBatchNo(item.getBatchNo());
itemVO.setScanSerialNo(item.getSerialNo());
itemVO.setScanNum(mrecords.stream().map(OutMaterialScanRecord::getNum).reduce(BigDecimal.ZERO, BigDecimal::add)); itemVO.setScanNum(mrecords.stream().map(OutMaterialScanRecord::getNum).reduce(BigDecimal.ZERO, BigDecimal::add));
records.removeAll(mrecords); records.removeAll(mrecords);
} }
@ -120,18 +123,18 @@ public class ScanRecordController extends BaseController {
records.stream() records.stream()
.collect(Collectors.groupingBy(OutMaterialScanRecord::getMaterialNo)) .collect(Collectors.groupingBy(OutMaterialScanRecord::getMaterialNo))
.forEach((k, v) -> { .forEach((k, v) -> {
OutDifferenceVO vo = new OutDifferenceVO() OutDifferenceVO vo = vos.stream().filter(it -> StrUtil.equals(it.getMaterialNo(), k)).findFirst().get();
.setMaterialNo(k);
v.stream() v.stream()
.collect(Collectors.groupingBy(OutMaterialScanRecord::getBatchNo)) .collect(Collectors.groupingBy(OutMaterialScanRecord::getKey8))
.forEach((batchNo, vv) -> { .forEach((key, vv) -> {
vo.getItems().add(new OutDifferenceItemVO() vo.getItems().add(new OutDifferenceItemVO()
.setRecommendbatchNo("") .setRecommendbatchNo("")
.setRecommendSerialNo("")
.setRecommendNum(BigDecimal.ZERO) .setRecommendNum(BigDecimal.ZERO)
.setScanBatchNo(batchNo) .setScanBatchNo(StrUtil.split(key, "|").get(1))
.setScanSerialNo(StrUtil.split(key, "|").get(2))
.setScanNum(vv.stream().map(OutMaterialScanRecord::getNum).reduce(BigDecimal.ZERO, BigDecimal::add))); .setScanNum(vv.stream().map(OutMaterialScanRecord::getNum).reduce(BigDecimal.ZERO, BigDecimal::add)));
}); });
vos.add(vo);
}); });
} }
return ApiResult.success(vos); return ApiResult.success(vos);

View File

@ -339,11 +339,11 @@ public class TransferCompanyController extends BaseController {
.eq(WmsTransferCompany::getId, order.getId()) .eq(WmsTransferCompany::getId, order.getId())
.update(); .update();
transferCompanyTicketItemService.saveBatch(ticketItems); transferCompanyTicketItemService.saveBatch(ticketItems);
transferCompanyTicketService.save(ticket);
if (!request.getNeedAudit()) { if (!request.getNeedAudit()) {
//不需要审核 //不需要审核
submitSap(order, ticket, records, datas, ticketItems); submitSap(order, ticket, records, datas, ticketItems);
} else { } else {
transferCompanyTicketService.save(ticket);
inventoryForOutRepository.saveAll(request.getRecommendBatch() inventoryForOutRepository.saveAll(request.getRecommendBatch()
.stream() .stream()
.map(item -> { .map(item -> {
@ -399,9 +399,11 @@ public class TransferCompanyController extends BaseController {
).toList() ).toList()
) )
); );
ticket.setDocYear(vo.getMjahr()); transferCompanyTicketService.lambdaUpdate()
ticket.setMatDoc(vo.getMblnr()); .set(WmsTransferCompanyTicket::getMatDoc, vo.getMblnr())
transferCompanyTicketService.save(ticket); .set(WmsTransferCompanyTicket::getDocYear, vo.getMjahr())
.eq(WmsTransferCompanyTicket::getId, ticket.getId())
.update();
} }
/** /**

View File

@ -21,7 +21,6 @@ import com.nflg.wms.common.util.VUtil;
import com.sap.conn.jco.*; import com.sap.conn.jco.*;
import jakarta.annotation.Resource; import jakarta.annotation.Resource;
import lombok.extern.slf4j.Slf4j; import lombok.extern.slf4j.Slf4j;
import org.springframework.context.annotation.Lazy;
import org.springframework.stereotype.Component; import org.springframework.stereotype.Component;
import java.math.BigDecimal; import java.math.BigDecimal;
@ -33,11 +32,9 @@ import java.util.stream.Collectors;
public class SapService { public class SapService {
@Resource @Resource
@Lazy
private JCoDestination destination; private JCoDestination destination;
@Resource @Resource
@Lazy
private JCoRepository repository; private JCoRepository repository;
/** /**

View File

@ -164,4 +164,11 @@ public class OutMaterialScanRecord {
public String getKey7() { public String getKey7() {
return materialNo + "|" + batchNo; return materialNo + "|" + batchNo;
} }
@Transient
private String key8;
public String getKey8() {
return materialNo + "|" + batchNo + "|" + this.serialNo;
}
} }

View File

@ -14,6 +14,11 @@ public class OutDifferenceItemVO {
*/ */
private String recommendbatchNo; private String recommendbatchNo;
/**
* 推荐序列号
*/
private String recommendSerialNo;
/** /**
* 推荐数量 * 推荐数量
*/ */
@ -24,6 +29,11 @@ public class OutDifferenceItemVO {
*/ */
private String scanBatchNo; private String scanBatchNo;
/**
* 扫码序列号
*/
private String scanSerialNo;
/** /**
* 扫码数量 * 扫码数量
*/ */

View File

@ -60,14 +60,14 @@ public class WmsInventoryServiceImpl extends ServiceImpl<WmsInventoryMapper, Wms
} else { } else {
BigDecimal left = inventory.getNum(); BigDecimal left = inventory.getNum();
for (WmsInventory info : list) { for (WmsInventory info : list) {
if (left.compareTo(info.getNum()) <= 0) {
break;
}
BigDecimal sub = NumberUtil.min(info.getNum(), left); BigDecimal sub = NumberUtil.min(info.getNum(), left);
left = left.subtract(sub); left = left.subtract(sub);
info.setNum(info.getNum().subtract(sub)); info.setNum(info.getNum().subtract(sub));
info.setUpdateBy(UserUtil.getUserName()); info.setUpdateBy(UserUtil.getUserName());
info.setUpdateTime(LocalDateTime.now()); info.setUpdateTime(LocalDateTime.now());
if (left.compareTo(BigDecimal.ZERO) <= 0) {
break;
}
} }
if (left.compareTo(BigDecimal.ZERO) > 0) { if (left.compareTo(BigDecimal.ZERO) > 0) {
errorMaterialNos.add(inventory.getMaterialNo()); errorMaterialNos.add(inventory.getMaterialNo());