|
@@ -62,6 +62,7 @@ import com.fjhx.wms.service.stock.StockJournalDetailsService;
|
|
|
import com.fjhx.wms.service.stock.StockJournalService;
|
|
|
import com.fjhx.wms.service.stock.StockWaitDetailsService;
|
|
|
import com.fjhx.wms.service.stock.StockWaitService;
|
|
|
+import com.ruoyi.common.core.domain.BaseIdPo;
|
|
|
import com.ruoyi.common.utils.wrapper.IWrapper;
|
|
|
import com.ruoyi.system.utils.UserUtil;
|
|
|
import org.springframework.beans.factory.annotation.Autowired;
|
|
@@ -70,8 +71,11 @@ import org.springframework.stereotype.Service;
|
|
|
|
|
|
import java.math.BigDecimal;
|
|
|
import java.util.ArrayList;
|
|
|
+import java.util.Collection;
|
|
|
+import java.util.Collections;
|
|
|
import java.util.List;
|
|
|
import java.util.Map;
|
|
|
+import java.util.Set;
|
|
|
import java.util.function.Function;
|
|
|
import java.util.stream.Collectors;
|
|
|
|
|
@@ -322,11 +326,10 @@ public class DeliverGoodsServiceImpl extends ServiceImpl<DeliverGoodsMapper, Del
|
|
|
public PurchaseVo arrivalDetail(Long purchaseId) {
|
|
|
Purchase purchase = purchaseService.getById(purchaseId);
|
|
|
PurchaseVo result = BeanUtil.toBean(purchase, PurchaseVo.class);
|
|
|
- //赋值供应商信息
|
|
|
- SupplierInfo supplierInfo = supplierInfoService.getById(purchase.getSupplyId());
|
|
|
- if (ObjectUtil.isNotEmpty(supplierInfo)) {
|
|
|
- result.setSupplyName(supplierInfo.getName());
|
|
|
- }
|
|
|
+
|
|
|
+ // 赋值供应商名称
|
|
|
+ setSupplyName(result, purchase.getSupplyId());
|
|
|
+
|
|
|
//赋值采购明细
|
|
|
DynamicDataSourceContextHolder.push(SourceConstant.PURCHASE);
|
|
|
List<PurchaseDetailVo> purchaseDetailVoList = purchaseDetailMapper.getList(IWrapper.<PurchaseDetail>getWrapper()
|
|
@@ -334,216 +337,348 @@ public class DeliverGoodsServiceImpl extends ServiceImpl<DeliverGoodsMapper, Del
|
|
|
.orderByAsc("pi.name")
|
|
|
);
|
|
|
DynamicDataSourceContextHolder.poll();
|
|
|
- //赋值质检信息
|
|
|
- List<QualityDetailVo> qualityInfoByPurchaseId = baseMapper.getQualityInfoByPurchaseId(purchase.getId());
|
|
|
- //赋值质检人名称
|
|
|
- UserUtil.assignmentNickName(qualityInfoByPurchaseId, QualityDetailVo::getCreateUser, QualityDetailVo::setCreateUserName);
|
|
|
-
|
|
|
- if (ObjectUtil.isNotEmpty(qualityInfoByPurchaseId)) {
|
|
|
- Map<Long, List<QualityDetailVo>> qualityDetailsMap = qualityInfoByPurchaseId.stream().collect(Collectors.groupingBy(QualityDetailVo::getPurchaseDetailId));
|
|
|
-
|
|
|
- for (PurchaseDetailVo purchaseDetailVo : purchaseDetailVoList) {
|
|
|
- //根据产品id获取质检信息
|
|
|
- List<QualityDetailVo> qualityDetails = qualityDetailsMap.get(purchaseDetailVo.getId());
|
|
|
- if (ObjectUtil.isEmpty(qualityDetails)) {
|
|
|
- purchaseDetailVo.setQualifiedCount(BigDecimal.ZERO);
|
|
|
- purchaseDetailVo.setNoQualifiedCount(BigDecimal.ZERO);
|
|
|
- purchaseDetailVo.setQualityQuantity(BigDecimal.ZERO);
|
|
|
- continue;
|
|
|
- }
|
|
|
|
|
|
- BigDecimal qualifiedCount = qualityDetails.stream().map(QualityDetail::getQualifiedCount).reduce(BigDecimal.ZERO, BigDecimal::add);
|
|
|
- BigDecimal noQualifiedCount = qualityDetails.stream().map(QualityDetail::getNoQualifiedCount).reduce(BigDecimal.ZERO, BigDecimal::add);
|
|
|
+ // 赋值质检信息
|
|
|
+ setQualityInfo(purchaseId, purchaseDetailVoList);
|
|
|
+
|
|
|
+ // 赋值发货信息
|
|
|
+ List<DeliverGoodsDetailsVo> list = setDeliverGoodsInfo(purchaseId, purchaseDetailVoList);
|
|
|
+
|
|
|
+ // 赋值到货信息
|
|
|
+ setArrivalDetailInfo(purchaseId, purchaseDetailVoList, list);
|
|
|
|
|
|
- //赋值质检之和
|
|
|
- purchaseDetailVo.setQualifiedCount(qualifiedCount);
|
|
|
- purchaseDetailVo.setNoQualifiedCount(noQualifiedCount);
|
|
|
- purchaseDetailVo.setQualityQuantity(qualifiedCount.add(noQualifiedCount));
|
|
|
+ // 赋值退货信息
|
|
|
+ setPurchaseBackInfo(purchaseId, purchaseDetailVoList);
|
|
|
|
|
|
- purchaseDetailVo.setIsReject(noQualifiedCount.compareTo(BigDecimal.ZERO) > 0 ? 1 : 0);
|
|
|
+ // 赋值已入库记录
|
|
|
+ setWarehousingInfo(purchaseDetailVoList, list);
|
|
|
+
|
|
|
+ result.setPurchaseDetailVoList(purchaseDetailVoList);
|
|
|
+ return result;
|
|
|
+ }
|
|
|
+
|
|
|
+ @Override
|
|
|
+ public List<DeliverGoodsDetailsVo> listDeliverGoodsDetails(IWrapper<DeliverGoods> wrapper) {
|
|
|
+ return baseMapper.listDeliverGoodsDetails(wrapper);
|
|
|
+ }
|
|
|
+
|
|
|
+ /**
|
|
|
+ * 赋值供应商名称
|
|
|
+ */
|
|
|
+ private void setSupplyName(PurchaseVo result, Long supplyId) {
|
|
|
+ SupplierInfo supplierInfo = supplierInfoService.getById(supplyId);
|
|
|
+ if (ObjectUtil.isNotEmpty(supplierInfo)) {
|
|
|
+ result.setSupplyName(supplierInfo.getName());
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ /**
|
|
|
+ * 赋值质检信息
|
|
|
+ */
|
|
|
+ private void setQualityInfo(Long purchaseId, List<PurchaseDetailVo> purchaseDetailVoList) {
|
|
|
+
|
|
|
+ List<QualityDetailVo> qualityDetailVoList = baseMapper.getQualityInfoByPurchaseId(purchaseId);
|
|
|
+
|
|
|
+ if (ObjectUtil.isEmpty(qualityDetailVoList)) {
|
|
|
+ return;
|
|
|
+ }
|
|
|
+
|
|
|
+ //赋值质检人名称
|
|
|
+ UserUtil.assignmentNickName(qualityDetailVoList, QualityDetailVo::getCreateUser, QualityDetailVo::setCreateUserName);
|
|
|
+
|
|
|
+ Map<Long, List<QualityDetailVo>> qualityDetailsMap = qualityDetailVoList.stream()
|
|
|
+ .collect(Collectors.groupingBy(QualityDetailVo::getPurchaseDetailId));
|
|
|
+
|
|
|
+ for (PurchaseDetailVo purchaseDetailVo : purchaseDetailVoList) {
|
|
|
|
|
|
- //过滤调质检数为0的明细数据 留下有质检数的数据
|
|
|
- qualityDetails = qualityDetails.stream().filter(item -> {
|
|
|
- BigDecimal add = item.getQualifiedCount().add(item.getNoQualifiedCount());
|
|
|
- return add.compareTo(BigDecimal.ZERO) != 0;
|
|
|
- }).collect(Collectors.toList());
|
|
|
+ //根据产品id获取质检信息
|
|
|
+ List<QualityDetailVo> qualityDetails = qualityDetailsMap.get(purchaseDetailVo.getId());
|
|
|
|
|
|
- //赋值产品质检的明细
|
|
|
- purchaseDetailVo.setQualityDetailsList(qualityDetails);
|
|
|
+ if (ObjectUtil.isEmpty(qualityDetails)) {
|
|
|
+ purchaseDetailVo.setQualifiedCount(BigDecimal.ZERO);
|
|
|
+ purchaseDetailVo.setNoQualifiedCount(BigDecimal.ZERO);
|
|
|
+ purchaseDetailVo.setQualityQuantity(BigDecimal.ZERO);
|
|
|
+ continue;
|
|
|
}
|
|
|
+
|
|
|
+ BigDecimal qualifiedCount = qualityDetails.stream().map(QualityDetail::getQualifiedCount).reduce(BigDecimal.ZERO, BigDecimal::add);
|
|
|
+ BigDecimal noQualifiedCount = qualityDetails.stream().map(QualityDetail::getNoQualifiedCount).reduce(BigDecimal.ZERO, BigDecimal::add);
|
|
|
+
|
|
|
+ //赋值质检之和
|
|
|
+ purchaseDetailVo.setQualifiedCount(qualifiedCount);
|
|
|
+ purchaseDetailVo.setNoQualifiedCount(noQualifiedCount);
|
|
|
+ purchaseDetailVo.setQualityQuantity(qualifiedCount.add(noQualifiedCount));
|
|
|
+ purchaseDetailVo.setIsReject(noQualifiedCount.compareTo(BigDecimal.ZERO) > 0 ? 1 : 0);
|
|
|
+
|
|
|
+ //过滤调质检数为0的明细数据 留下有质检数的数据
|
|
|
+ qualityDetails = qualityDetails.stream()
|
|
|
+ .filter(item -> item.getQualifiedCount().add(item.getNoQualifiedCount()).compareTo(BigDecimal.ZERO) != 0)
|
|
|
+ .collect(Collectors.toList());
|
|
|
+
|
|
|
+ //赋值产品质检的明细
|
|
|
+ purchaseDetailVo.setQualityDetailsList(qualityDetails);
|
|
|
}
|
|
|
- //赋值发货信息
|
|
|
+ }
|
|
|
+
|
|
|
+ /**
|
|
|
+ * 赋值发货信息
|
|
|
+ */
|
|
|
+ private List<DeliverGoodsDetailsVo> setDeliverGoodsInfo(Long purchaseId, List<PurchaseDetailVo> purchaseDetailVoList) {
|
|
|
+
|
|
|
IWrapper<DeliverGoods> wrapper = getWrapper();
|
|
|
wrapper.eq("dg", DeliverGoods::getPurchaseId, purchaseId);
|
|
|
List<DeliverGoodsDetailsVo> list = baseMapper.listDeliverGoodsDetails(wrapper);
|
|
|
- if (ObjectUtil.isNotEmpty(list)) {
|
|
|
- Map<Long, List<DeliverGoodsDetailsVo>> collect = list.stream().collect(Collectors.groupingBy(DeliverGoodsDetailsVo::getPurchaseDetailId));
|
|
|
- for (PurchaseDetailVo purchaseDetailVo : purchaseDetailVoList) {
|
|
|
- List<DeliverGoodsDetailsVo> list1 = collect.get(purchaseDetailVo.getId());
|
|
|
- if (ObjectUtil.isEmpty(list1)) {
|
|
|
- purchaseDetailVo.setDeliverGoodsQuantity(BigDecimal.ZERO);
|
|
|
- continue;
|
|
|
- }
|
|
|
- //发货数量求和
|
|
|
- BigDecimal dgdCount = list1.stream()
|
|
|
- .map(DeliverGoodsDetailsVo::getDeliverGoodsQuantity)
|
|
|
- .reduce(BigDecimal.ZERO, BigDecimal::add);
|
|
|
- purchaseDetailVo.setDeliverGoodsQuantity(dgdCount);
|
|
|
- purchaseDetailVo.setDeliverGoodsDetailList(BeanUtil.copyToList(list1, DeliverGoodsDetailsPoVo.class));
|
|
|
+
|
|
|
+ if (ObjectUtil.isEmpty(list)) {
|
|
|
+ return list;
|
|
|
+ }
|
|
|
+
|
|
|
+ Map<Long, List<DeliverGoodsDetailsVo>> deliverGoodsDetailsVoMap = list.stream()
|
|
|
+ .collect(Collectors.groupingBy(DeliverGoodsDetailsVo::getPurchaseDetailId));
|
|
|
+
|
|
|
+ for (PurchaseDetailVo purchaseDetailVo : purchaseDetailVoList) {
|
|
|
+
|
|
|
+ List<DeliverGoodsDetailsVo> itemList = deliverGoodsDetailsVoMap.get(purchaseDetailVo.getId());
|
|
|
+
|
|
|
+ if (ObjectUtil.isEmpty(itemList)) {
|
|
|
+ purchaseDetailVo.setDeliverGoodsQuantity(BigDecimal.ZERO);
|
|
|
+ continue;
|
|
|
}
|
|
|
+
|
|
|
+ //发货数量求和
|
|
|
+ BigDecimal dgdCount = itemList.stream()
|
|
|
+ .map(DeliverGoodsDetailsVo::getDeliverGoodsQuantity)
|
|
|
+ .reduce(BigDecimal.ZERO, BigDecimal::add);
|
|
|
+
|
|
|
+ purchaseDetailVo.setDeliverGoodsQuantity(dgdCount);
|
|
|
+ purchaseDetailVo.setDeliverGoodsDetailList(BeanUtil.copyToList(itemList, DeliverGoodsDetailsPoVo.class));
|
|
|
}
|
|
|
- //赋值到货信息
|
|
|
- IWrapper<ArrivalDetail> wrapper1 = arrivalDetailService.getWrapper();
|
|
|
- wrapper1.eq("a.purchase_id", purchaseId);
|
|
|
- List<ArrivalDetailVo> arrivalDetail = arrivalDetailService.getArrivalDetail(wrapper1);
|
|
|
- if (ObjectUtil.isNotEmpty(arrivalDetail)) {
|
|
|
- Map<Long, List<ArrivalDetailVo>> collect = arrivalDetail.stream().collect(Collectors.groupingBy(ArrivalDetailVo::getPurchaseDetailId));
|
|
|
-
|
|
|
- Map<Long, String> dgdMap = list.stream().collect(Collectors.toMap(DeliverGoodsDetailsVo::getId, DeliverGoodsDetailsVo::getLogisticsCode));
|
|
|
- for (PurchaseDetailVo purchaseDetailVo : purchaseDetailVoList) {
|
|
|
- List<ArrivalDetailVo> list1 = collect.get(purchaseDetailVo.getId());
|
|
|
- if (ObjectUtil.isEmpty(list1)) {
|
|
|
- purchaseDetailVo.setArrivalQuantity(BigDecimal.ZERO);
|
|
|
- continue;
|
|
|
- }
|
|
|
|
|
|
- //赋值发货单号
|
|
|
- for (ArrivalDetailVo arrivalDetailVo : list1) {
|
|
|
- arrivalDetailVo.setLogisticsCode(dgdMap.get(arrivalDetailVo.getDeliverGoodsDetailsId()));
|
|
|
- }
|
|
|
+ return list;
|
|
|
+ }
|
|
|
|
|
|
- //到货数量求和
|
|
|
- BigDecimal arrCount = list1.stream()
|
|
|
- .map(ArrivalDetailVo::getCount)
|
|
|
- .reduce(BigDecimal.ZERO, BigDecimal::add);
|
|
|
- purchaseDetailVo.setArrivalQuantity(arrCount);
|
|
|
- purchaseDetailVo.setArrivalDetailList(list1);
|
|
|
+ /**
|
|
|
+ * 赋值到货信息
|
|
|
+ */
|
|
|
+ private void setArrivalDetailInfo(Long purchaseId, List<PurchaseDetailVo> purchaseDetailVoList, List<DeliverGoodsDetailsVo> list) {
|
|
|
+ IWrapper<ArrivalDetail> wrapper = arrivalDetailService.getWrapper();
|
|
|
+ wrapper.eq("a.purchase_id", purchaseId);
|
|
|
+ List<ArrivalDetailVo> arrivalDetail = arrivalDetailService.getArrivalDetail(wrapper);
|
|
|
+
|
|
|
+ if (ObjectUtil.isEmpty(arrivalDetail)) {
|
|
|
+ return;
|
|
|
+ }
|
|
|
+
|
|
|
+ Map<Long, List<ArrivalDetailVo>> collect = arrivalDetail.stream().collect(Collectors.groupingBy(ArrivalDetailVo::getPurchaseDetailId));
|
|
|
+
|
|
|
+ Map<Long, String> dgdMap = list.stream().collect(Collectors.toMap(DeliverGoodsDetailsVo::getId, DeliverGoodsDetailsVo::getLogisticsCode));
|
|
|
+ for (PurchaseDetailVo purchaseDetailVo : purchaseDetailVoList) {
|
|
|
+ List<ArrivalDetailVo> list1 = collect.get(purchaseDetailVo.getId());
|
|
|
+ if (ObjectUtil.isEmpty(list1)) {
|
|
|
+ purchaseDetailVo.setArrivalQuantity(BigDecimal.ZERO);
|
|
|
+ continue;
|
|
|
}
|
|
|
+
|
|
|
+ //赋值发货单号
|
|
|
+ for (ArrivalDetailVo arrivalDetailVo : list1) {
|
|
|
+ arrivalDetailVo.setLogisticsCode(dgdMap.get(arrivalDetailVo.getDeliverGoodsDetailsId()));
|
|
|
+ }
|
|
|
+
|
|
|
+ //到货数量求和
|
|
|
+ BigDecimal arrCount = list1.stream()
|
|
|
+ .map(ArrivalDetailVo::getCount)
|
|
|
+ .reduce(BigDecimal.ZERO, BigDecimal::add);
|
|
|
+ purchaseDetailVo.setArrivalQuantity(arrCount);
|
|
|
+ purchaseDetailVo.setArrivalDetailList(list1);
|
|
|
}
|
|
|
- //赋值退货信息
|
|
|
- List<PurchaseBack> list1 = purchaseBackService.list(q -> q.eq(PurchaseBack::getPurchaseId, purchaseId));
|
|
|
- if (ObjectUtil.isNotEmpty(list1)) {
|
|
|
- List<Long> ids = list1.stream().map(PurchaseBack::getId).collect(Collectors.toList());
|
|
|
- Map<Long, List<PurchaseBackDetails>> longListMap = purchaseBackDetailsService.mapKGroup(PurchaseBackDetails::getPurchaseDetailsId, q -> q.in(PurchaseBackDetails::getPurchaseBackId, ids));
|
|
|
-
|
|
|
- for (PurchaseDetailVo purchaseDetailVo : purchaseDetailVoList) {
|
|
|
- List<PurchaseBackDetails> purchaseBackDetails = longListMap.get(purchaseDetailVo.getId());
|
|
|
- List<PurchaseBackDetailsVo> purchaseBackDetailsVos = BeanUtil.copyToList(purchaseBackDetails, PurchaseBackDetailsVo.class);
|
|
|
-
|
|
|
- if (ObjectUtil.isEmpty(purchaseBackDetailsVos)) {
|
|
|
- purchaseDetailVo.setPurchaseBackQuantity(BigDecimal.ZERO);
|
|
|
- continue;
|
|
|
- }
|
|
|
- //退货数量求和
|
|
|
- BigDecimal backCount = purchaseBackDetailsVos.stream()
|
|
|
- .map(PurchaseBackDetails::getQuantity)
|
|
|
- .reduce(BigDecimal.ZERO, BigDecimal::add);
|
|
|
- purchaseDetailVo.setPurchaseBackQuantity(backCount);
|
|
|
- //已退数量
|
|
|
- BigDecimal returnedQuantityCount = BigDecimal.ZERO;
|
|
|
- //赋值已退货数量(已经出库的数量)
|
|
|
- List<Long> pbdIds = purchaseBackDetailsVos.stream().map(PurchaseBackDetails::getId).collect(Collectors.toList());
|
|
|
- Map<Long, StockWaitDetails> stockWaitDetailsMap = stockWaitDetailsService.mapKEntity(StockWaitDetails::getBusinessDetailsId,
|
|
|
- q -> q.in(StockWaitDetails::getBusinessDetailsId, pbdIds));
|
|
|
- for (PurchaseBackDetailsVo purchaseBackDetailsVo : purchaseBackDetailsVos) {
|
|
|
- StockWaitDetails stockWaitDetails = stockWaitDetailsMap.get(purchaseBackDetailsVo.getId());
|
|
|
- BigDecimal returnedQuantity = BigDecimal.ZERO;
|
|
|
- if (ObjectUtil.isNotEmpty(stockWaitDetails)) {
|
|
|
- returnedQuantity = stockWaitDetails.getReceiptQuantity();
|
|
|
- }
|
|
|
- returnedQuantityCount = returnedQuantityCount.add(returnedQuantity);
|
|
|
- purchaseBackDetailsVo.setReturnedQuantity(returnedQuantity);
|
|
|
+ }
|
|
|
|
|
|
- }
|
|
|
- purchaseDetailVo.setPurchaseReturnedQuantity(returnedQuantityCount);
|
|
|
+ /**
|
|
|
+ * 赋值退货信息
|
|
|
+ */
|
|
|
+ private void setPurchaseBackInfo(Long purchaseId, List<PurchaseDetailVo> purchaseDetailVoList) {
|
|
|
+ List<PurchaseBack> list = purchaseBackService.list(q -> q.eq(PurchaseBack::getPurchaseId, purchaseId));
|
|
|
|
|
|
- purchaseDetailVo.setPurchaseBackDetailsList(purchaseBackDetailsVos);
|
|
|
+ if (ObjectUtil.isEmpty(list)) {
|
|
|
+ return;
|
|
|
+ }
|
|
|
+
|
|
|
+ List<Long> ids = list.stream().map(PurchaseBack::getId).collect(Collectors.toList());
|
|
|
+ Map<Long, List<PurchaseBackDetails>> longListMap = purchaseBackDetailsService.mapKGroup(PurchaseBackDetails::getPurchaseDetailsId, q -> q.in(PurchaseBackDetails::getPurchaseBackId, ids));
|
|
|
+
|
|
|
+ //赋值已退货数量(已经出库的数量)
|
|
|
+ List<Long> pbdIds = longListMap.values().stream().flatMap(Collection::stream).map(PurchaseBackDetails::getId).collect(Collectors.toList());
|
|
|
+
|
|
|
+ Map<Long, StockWaitDetails> stockWaitDetailsMap = stockWaitDetailsService.mapKEntity(StockWaitDetails::getBusinessDetailsId,
|
|
|
+ q -> q.in(StockWaitDetails::getBusinessDetailsId, pbdIds));
|
|
|
+
|
|
|
+ for (PurchaseDetailVo purchaseDetailVo : purchaseDetailVoList) {
|
|
|
+ List<PurchaseBackDetails> purchaseBackDetails = longListMap.get(purchaseDetailVo.getId());
|
|
|
+ List<PurchaseBackDetailsVo> purchaseBackDetailsVos = BeanUtil.copyToList(purchaseBackDetails, PurchaseBackDetailsVo.class);
|
|
|
+
|
|
|
+ if (ObjectUtil.isEmpty(purchaseBackDetailsVos)) {
|
|
|
+ purchaseDetailVo.setPurchaseBackQuantity(BigDecimal.ZERO);
|
|
|
+ continue;
|
|
|
}
|
|
|
+
|
|
|
+ //退货数量求和
|
|
|
+ BigDecimal backCount = purchaseBackDetailsVos.stream()
|
|
|
+ .map(PurchaseBackDetails::getQuantity)
|
|
|
+ .reduce(BigDecimal.ZERO, BigDecimal::add);
|
|
|
+ purchaseDetailVo.setPurchaseBackQuantity(backCount);
|
|
|
+
|
|
|
+ //已退数量
|
|
|
+ BigDecimal returnedQuantityCount = BigDecimal.ZERO;
|
|
|
+
|
|
|
+ for (PurchaseBackDetailsVo purchaseBackDetailsVo : purchaseBackDetailsVos) {
|
|
|
+ StockWaitDetails stockWaitDetails = stockWaitDetailsMap.get(purchaseBackDetailsVo.getId());
|
|
|
+ BigDecimal returnedQuantity = BigDecimal.ZERO;
|
|
|
+ if (ObjectUtil.isNotEmpty(stockWaitDetails)) {
|
|
|
+ returnedQuantity = stockWaitDetails.getReceiptQuantity();
|
|
|
+ }
|
|
|
+ returnedQuantityCount = returnedQuantityCount.add(returnedQuantity);
|
|
|
+ purchaseBackDetailsVo.setReturnedQuantity(returnedQuantity);
|
|
|
+ }
|
|
|
+
|
|
|
+ purchaseDetailVo.setPurchaseReturnedQuantity(returnedQuantityCount);
|
|
|
+ purchaseDetailVo.setPurchaseBackDetailsList(purchaseBackDetailsVos);
|
|
|
+ }
|
|
|
+
|
|
|
+ }
|
|
|
+
|
|
|
+ private void setWarehousingInfo(List<PurchaseDetailVo> purchaseDetailVoList, List<DeliverGoodsDetailsVo> list) {
|
|
|
+
|
|
|
+ if (purchaseDetailVoList.isEmpty()) {
|
|
|
+ return;
|
|
|
}
|
|
|
- //赋值已入库记录
|
|
|
+
|
|
|
+ //对入库已入库列表赋值发货单号
|
|
|
+ Map<Long, String> dgdMap = list.stream().collect(Collectors.toMap(DeliverGoodsDetailsVo::getId, DeliverGoodsDetailsVo::getLogisticsCode));
|
|
|
+
|
|
|
+ Set<Long> idSet = purchaseDetailVoList.stream().map(BaseIdPo::getId).collect(Collectors.toSet());
|
|
|
+ List<ArrivalDetail> arrivalDetailList = arrivalDetailService.list(q -> q.in(ArrivalDetail::getPurchaseDetailId, idSet));
|
|
|
+ Map<Long, List<ArrivalDetail>> arrivalDetailMap = arrivalDetailList.stream().collect(Collectors.groupingBy(ArrivalDetail::getPurchaseDetailId));
|
|
|
+
|
|
|
+ Set<Long> arrivalDetailIdSet = arrivalDetailList.stream().map(BaseIdPo::getId).collect(Collectors.toSet());
|
|
|
+ List<StockWaitDetails> stockWaitDetailsList = arrivalDetailIdSet.isEmpty() ? Collections.emptyList()
|
|
|
+ : stockWaitDetailsService.list(q -> q.in(StockWaitDetails::getBusinessDetailsId, arrivalDetailIdSet));
|
|
|
+
|
|
|
+ Set<Long> stockWaitIdSet = stockWaitDetailsList.stream().map(StockWaitDetails::getStockWaitId).collect(Collectors.toSet());
|
|
|
+ List<StockJournal> stockJournalList = stockWaitIdSet.isEmpty() ? Collections.emptyList()
|
|
|
+ : stockJournalService.list(q -> q.in(StockJournal::getBusinessId, stockWaitIdSet));
|
|
|
+
|
|
|
+ Set<Long> stockWaitDetailsIdSet = stockWaitDetailsList.stream().map(BaseIdPo::getId).collect(Collectors.toSet());
|
|
|
+ List<StockJournalDetails> stockJournalDetailsList = stockWaitDetailsIdSet.isEmpty() ? Collections.emptyList()
|
|
|
+ : stockJournalDetailsService.list(q -> q.in(StockJournalDetails::getBusinessDetailsId, stockWaitDetailsIdSet));
|
|
|
+
|
|
|
+ //Set<Long> stockJournalIdSet = stockJournalDetailsList.stream().map(StockJournalDetails::getStockJournalId).collect(Collectors.toSet());
|
|
|
+ //List<StockJournal> stockJournalList1 = stockJournalService.list(q -> q.in(StockJournal::getId, stockJournalIdSet));
|
|
|
+
|
|
|
+ Map<Long, StockJournal> stockJournalMap = stockJournalList.stream().collect(Collectors.toMap(StockJournal::getId, item -> item));
|
|
|
+
|
|
|
+ Map<Long, Map<Long, StockWaitDetails>> stockWaitDetailsMap = stockWaitDetailsList.stream()
|
|
|
+ .collect(Collectors.groupingBy(StockWaitDetails::getStockWaitId,
|
|
|
+ Collectors.toMap(StockWaitDetails::getProductId, item -> item)));
|
|
|
+
|
|
|
+ Map<Long, ArrivalDetail> arrivalDetailIdMap = arrivalDetailList.stream().collect(Collectors.toMap(BaseIdPo::getId, item -> item));
|
|
|
+
|
|
|
+ List<ArrivalStockRecordsDetails> arrivalStockRecordsDetailsList = stockWaitDetailsIdSet.isEmpty() ? Collections.emptyList()
|
|
|
+ : arrivalStockRecordsDetailsService.list(q -> q.in(ArrivalStockRecordsDetails::getBusinessDetailsId, stockWaitDetailsIdSet));
|
|
|
+ Map<Long, List<ArrivalStockRecordsDetails>> arrivalStockRecordsDetailsMap = arrivalStockRecordsDetailsList.stream()
|
|
|
+ .collect(Collectors.groupingBy(ArrivalStockRecordsDetails::getBusinessDetailsId));
|
|
|
+
|
|
|
+ Set<Long> arrivalStockRecordsDetailsIdSet = arrivalStockRecordsDetailsList.stream().map(ArrivalStockRecordsDetails::getId).collect(Collectors.toSet());
|
|
|
+ List<QualityDetails> qualityDetailsList = arrivalStockRecordsDetailsIdSet.isEmpty() ? Collections.emptyList()
|
|
|
+ : qualityDetailsService.list(q -> q.in(QualityDetails::getArrivalStockRecordsDetailsId, arrivalStockRecordsDetailsIdSet));
|
|
|
+
|
|
|
for (PurchaseDetailVo purchaseDetailVo : purchaseDetailVoList) {
|
|
|
+
|
|
|
//根据采购明细id查到货明细
|
|
|
- List<ArrivalDetail> arrivalDetailList = arrivalDetailService.list(q -> q.eq(ArrivalDetail::getPurchaseDetailId, purchaseDetailVo.getId()));
|
|
|
- if (ObjectUtil.isEmpty(arrivalDetailList)) {
|
|
|
+ List<ArrivalDetail> tempArrivalDetailList = arrivalDetailMap.get(purchaseDetailVo.getId());
|
|
|
+ if (ObjectUtil.isEmpty(tempArrivalDetailList)) {
|
|
|
continue;
|
|
|
}
|
|
|
+
|
|
|
//根据到货明细id查待入库明细
|
|
|
- List<Long> arrivalDetailIds = arrivalDetailList.stream().map(ArrivalDetail::getId).collect(Collectors.toList());
|
|
|
- List<StockWaitDetails> stockWaitDetailsList = stockWaitDetailsService.list(q -> q.in(StockWaitDetails::getBusinessDetailsId, arrivalDetailIds));
|
|
|
- if (ObjectUtil.isEmpty(stockWaitDetailsList)) {
|
|
|
+ Set<Long> arrivalDetailIds = tempArrivalDetailList.stream().map(ArrivalDetail::getId).collect(Collectors.toSet());
|
|
|
+ List<StockWaitDetails> tempStockWaitDetailsList = stockWaitDetailsList.stream()
|
|
|
+ .filter(item -> arrivalDetailIds.contains(item.getBusinessDetailsId()))
|
|
|
+ .collect(Collectors.toList());
|
|
|
+ if (ObjectUtil.isEmpty(tempStockWaitDetailsList)) {
|
|
|
continue;
|
|
|
}
|
|
|
+
|
|
|
//根据待入库id查出入库记录
|
|
|
- List<Long> stockWaitIds = stockWaitDetailsList.stream().map(StockWaitDetails::getStockWaitId).collect(Collectors.toList());
|
|
|
- List<Long> stockJournalIds = stockJournalService.listObject(StockJournal::getId, q -> q.in(StockJournal::getBusinessId, stockWaitIds));
|
|
|
+ List<Long> stockWaitIds = tempStockWaitDetailsList.stream().map(StockWaitDetails::getStockWaitId).collect(Collectors.toList());
|
|
|
+ List<Long> stockJournalIds = stockJournalList.stream()
|
|
|
+ .filter(item -> stockWaitIds.contains(item.getBusinessId()))
|
|
|
+ .map(StockJournal::getId)
|
|
|
+ .collect(Collectors.toList());
|
|
|
if (ObjectUtil.isEmpty(stockJournalIds)) {
|
|
|
continue;
|
|
|
}
|
|
|
|
|
|
//查出产品的出入库明细
|
|
|
- List<Long> swdIds = stockWaitDetailsList.stream().map(StockWaitDetails::getId).collect(Collectors.toList());
|
|
|
- List<StockJournalDetails> stockJournalDetailsList = stockJournalDetailsService.list(q -> q
|
|
|
- .in(StockJournalDetails::getBusinessDetailsId, swdIds)
|
|
|
- );
|
|
|
- if (ObjectUtil.isEmpty(stockJournalDetailsList)) {
|
|
|
+ List<Long> swdIds = tempStockWaitDetailsList.stream().map(StockWaitDetails::getId).collect(Collectors.toList());
|
|
|
+ List<StockJournalDetailsVo> stockJournalDetailsVos = stockJournalDetailsList.stream()
|
|
|
+ .filter(item -> swdIds.contains(item.getBusinessDetailsId()))
|
|
|
+ .map(item -> BeanUtil.toBean(item, StockJournalDetailsVo.class))
|
|
|
+ .collect(Collectors.toList());
|
|
|
+
|
|
|
+ if (ObjectUtil.isEmpty(stockJournalDetailsVos)) {
|
|
|
continue;
|
|
|
}
|
|
|
- List<StockJournalDetailsVo> stockJournalDetailsVos = BeanUtil.copyToList(stockJournalDetailsList, StockJournalDetailsVo.class);
|
|
|
- //对入库已入库列表赋值发货单号
|
|
|
- Map<Long, String> dgdMap = list.stream().collect(Collectors.toMap(DeliverGoodsDetailsVo::getId, DeliverGoodsDetailsVo::getLogisticsCode));
|
|
|
|
|
|
for (StockJournalDetailsVo stockJournalDetailsVo : stockJournalDetailsVos) {
|
|
|
- StockJournal stockJournal = stockJournalService.getById(stockJournalDetailsVo.getStockJournalId());
|
|
|
- StockWaitDetails stockWaitDetails = stockWaitDetailsService.getOne(q -> q
|
|
|
- .eq(StockWaitDetails::getStockWaitId, stockJournal.getBusinessId())
|
|
|
- .eq(StockWaitDetails::getProductId, stockJournalDetailsVo.getProductId())
|
|
|
- );
|
|
|
+
|
|
|
+ StockJournal stockJournal = stockJournalMap.get(stockJournalDetailsVo.getStockJournalId());
|
|
|
+
|
|
|
+ StockWaitDetails stockWaitDetails = stockWaitDetailsMap.get(stockJournal.getBusinessId()).get(stockJournalDetailsVo.getProductId());
|
|
|
|
|
|
Long businessDetailsId = stockWaitDetails.getBusinessDetailsId();
|
|
|
- ArrivalDetail arrivalDetail1 = arrivalDetailService.getById(businessDetailsId);
|
|
|
+ ArrivalDetail arrivalDetail1 = arrivalDetailIdMap.get(businessDetailsId);
|
|
|
|
|
|
//赋值发货单号
|
|
|
stockJournalDetailsVo.setLogisticsCode(dgdMap.get(arrivalDetail1.getDeliverGoodsDetailsId()));
|
|
|
|
|
|
//赋值是否有次品
|
|
|
stockJournalDetailsVo.setIsReject(0);
|
|
|
- List<ArrivalStockRecordsDetails> arrivalStockRecordsDetailsList = arrivalStockRecordsDetailsService.list(
|
|
|
- q -> q.eq(ArrivalStockRecordsDetails::getBusinessDetailsId, stockWaitDetails.getId()));
|
|
|
- if (ObjectUtil.isNotEmpty(arrivalStockRecordsDetailsList)) {
|
|
|
- List<Long> ids = arrivalStockRecordsDetailsList.stream().map(ArrivalStockRecordsDetails::getId)
|
|
|
- .collect(Collectors.toList());
|
|
|
- List<QualityDetails> qualityDetailsList = qualityDetailsService.list(
|
|
|
- q -> q.in(QualityDetails::getArrivalStockRecordsDetailsId, ids));
|
|
|
- if (ObjectUtil.isNotEmpty(qualityDetailsList)) {
|
|
|
- BigDecimal noQualityCount = qualityDetailsList.stream().map(QualityDetails::getDisqualificationQuantity).reduce(BigDecimal.ZERO, BigDecimal::add);
|
|
|
- if (noQualityCount.compareTo(BigDecimal.ZERO) > 0) {
|
|
|
- stockJournalDetailsVo.setIsReject(1);
|
|
|
- }
|
|
|
+
|
|
|
+ List<ArrivalStockRecordsDetails> tempArrivalStockRecordsDetailsList = arrivalStockRecordsDetailsMap.get(stockWaitDetails.getId());
|
|
|
+
|
|
|
+ if (ObjectUtil.isNotEmpty(tempArrivalStockRecordsDetailsList)) {
|
|
|
+
|
|
|
+ List<Long> ids = tempArrivalStockRecordsDetailsList.stream().map(ArrivalStockRecordsDetails::getId).collect(Collectors.toList());
|
|
|
+
|
|
|
+ BigDecimal noQualityCount = qualityDetailsList.stream()
|
|
|
+ .filter(item -> ids.contains(item.getArrivalStockRecordsDetailsId()))
|
|
|
+ .map(QualityDetails::getDisqualificationQuantity)
|
|
|
+ .reduce(BigDecimal.ZERO, BigDecimal::add);
|
|
|
+
|
|
|
+ if (noQualityCount.compareTo(BigDecimal.ZERO) > 0) {
|
|
|
+ stockJournalDetailsVo.setIsReject(1);
|
|
|
}
|
|
|
+
|
|
|
}
|
|
|
+
|
|
|
//赋值入库状态
|
|
|
stockJournalDetailsVo.setReceiptStatus(1);//部分入库
|
|
|
+
|
|
|
if (stockWaitDetails.getReceiptQuantity().compareTo(stockWaitDetails.getQuantity()) >= 0) {
|
|
|
stockJournalDetailsVo.setReceiptStatus(2);//完全入库
|
|
|
}
|
|
|
+
|
|
|
}
|
|
|
|
|
|
//对数量求和
|
|
|
- BigDecimal receiptQuantity = stockJournalDetailsList.stream()
|
|
|
+ BigDecimal receiptQuantity = stockJournalDetailsVos.stream()
|
|
|
.map(StockJournalDetails::getQuantity)
|
|
|
.reduce(BigDecimal.ZERO, BigDecimal::add);
|
|
|
+
|
|
|
//赋值数量和记录
|
|
|
purchaseDetailVo.setReceiptQuantity(receiptQuantity);
|
|
|
purchaseDetailVo.setReceiptList(stockJournalDetailsVos);
|
|
|
}
|
|
|
-
|
|
|
- result.setPurchaseDetailVoList(purchaseDetailVoList);
|
|
|
- return result;
|
|
|
- }
|
|
|
-
|
|
|
- @Override
|
|
|
- public List<DeliverGoodsDetailsVo> listDeliverGoodsDetails(IWrapper<DeliverGoods> wrapper) {
|
|
|
- return baseMapper.listDeliverGoodsDetails(wrapper);
|
|
|
}
|
|
|
|
|
|
}
|