|
@@ -1,5 +1,6 @@
|
|
|
package com.fjhx.victoriatourist.service.deliver.impl;
|
|
|
|
|
|
+import cn.hutool.core.bean.BeanUtil;
|
|
|
import cn.hutool.core.util.ObjectUtil;
|
|
|
import com.alibaba.fastjson2.JSONObject;
|
|
|
import com.baomidou.dynamic.datasource.annotation.DS;
|
|
@@ -9,10 +10,18 @@ import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
|
|
|
import com.fjhx.common.constant.SourceConstant;
|
|
|
import com.fjhx.item.entity.product.po.ProductInfo;
|
|
|
import com.fjhx.item.service.product.ProductInfoService;
|
|
|
+import com.fjhx.purchase.entity.arrival.po.ArrivalDetail;
|
|
|
+import com.fjhx.purchase.entity.arrival.vo.ArrivalDetailVo;
|
|
|
import com.fjhx.purchase.entity.purchase.po.Purchase;
|
|
|
import com.fjhx.purchase.entity.purchase.po.PurchaseDetail;
|
|
|
+import com.fjhx.purchase.entity.purchase.vo.PurchaseDetailVo;
|
|
|
+import com.fjhx.purchase.entity.purchase.vo.PurchaseVo;
|
|
|
+import com.fjhx.purchase.entity.quality.po.QualityDetail;
|
|
|
+import com.fjhx.purchase.service.arrival.ArrivalDetailService;
|
|
|
import com.fjhx.purchase.service.purchase.PurchaseDetailService;
|
|
|
import com.fjhx.purchase.service.purchase.PurchaseService;
|
|
|
+import com.fjhx.supply.entity.supplier.po.SupplierInfo;
|
|
|
+import com.fjhx.supply.service.supplier.SupplierInfoService;
|
|
|
import com.fjhx.victoriatourist.entity.deliver.dto.DeliverGoodsDto;
|
|
|
import com.fjhx.victoriatourist.entity.deliver.dto.DeliverGoodsSelectDto;
|
|
|
import com.fjhx.victoriatourist.entity.deliver.po.DeliverGoods;
|
|
@@ -21,18 +30,22 @@ import com.fjhx.victoriatourist.entity.deliver.vo.DeliverGoodsDetailsVo;
|
|
|
import com.fjhx.victoriatourist.entity.deliver.vo.DeliverGoodsVo;
|
|
|
import com.fjhx.victoriatourist.entity.logistics.po.LogisticsDetails;
|
|
|
import com.fjhx.victoriatourist.entity.logistics.po.LogisticsInfos;
|
|
|
+import com.fjhx.victoriatourist.entity.purchase.po.PurchaseBack;
|
|
|
+import com.fjhx.victoriatourist.entity.purchase.po.PurchaseBackDetails;
|
|
|
import com.fjhx.victoriatourist.mapper.deliver.DeliverGoodsMapper;
|
|
|
import com.fjhx.victoriatourist.service.deliver.DeliverGoodsDetailsService;
|
|
|
import com.fjhx.victoriatourist.service.deliver.DeliverGoodsService;
|
|
|
import com.fjhx.victoriatourist.service.logistics.LogisticsDetailsService;
|
|
|
import com.fjhx.victoriatourist.service.logistics.LogisticsInfosService;
|
|
|
+import com.fjhx.victoriatourist.service.purchase.PurchaseBackDetailsService;
|
|
|
+import com.fjhx.victoriatourist.service.purchase.PurchaseBackService;
|
|
|
import com.ruoyi.common.utils.wrapper.IWrapper;
|
|
|
import org.springframework.beans.factory.annotation.Autowired;
|
|
|
import org.springframework.stereotype.Service;
|
|
|
-import org.springframework.transaction.annotation.Transactional;
|
|
|
|
|
|
import java.math.BigDecimal;
|
|
|
import java.util.ArrayList;
|
|
|
+import java.util.Collections;
|
|
|
import java.util.List;
|
|
|
import java.util.Map;
|
|
|
import java.util.function.Function;
|
|
@@ -62,6 +75,14 @@ public class DeliverGoodsServiceImpl extends ServiceImpl<DeliverGoodsMapper, Del
|
|
|
LogisticsDetailsService logisticsDetailsService;
|
|
|
@Autowired
|
|
|
PurchaseService purchaseService;
|
|
|
+ @Autowired
|
|
|
+ private SupplierInfoService supplierInfoService;
|
|
|
+ @Autowired
|
|
|
+ private ArrivalDetailService arrivalDetailService;
|
|
|
+ @Autowired
|
|
|
+ private PurchaseBackDetailsService purchaseBackDetailsService;
|
|
|
+ @Autowired
|
|
|
+ private PurchaseBackService purchaseBackService;
|
|
|
|
|
|
@Override
|
|
|
public Page<DeliverGoodsVo> getPage(DeliverGoodsSelectDto dto) {
|
|
@@ -81,7 +102,7 @@ public class DeliverGoodsServiceImpl extends ServiceImpl<DeliverGoodsMapper, Del
|
|
|
//获取采购明细列表
|
|
|
//赋值产品信息
|
|
|
List<Long> pdids = deliverGoodsDetailsVos.stream().map(DeliverGoodsDetails::getPurchaseDetailId).collect(Collectors.toList());
|
|
|
- if(ObjectUtil.isEmpty(pdids)){
|
|
|
+ if (ObjectUtil.isEmpty(pdids)) {
|
|
|
return deliverGoodsDetailsVos;
|
|
|
}
|
|
|
List<PurchaseDetail> purchaseDetailList = purchaseDetailService.listByIds(pdids);
|
|
@@ -90,7 +111,7 @@ public class DeliverGoodsServiceImpl extends ServiceImpl<DeliverGoodsMapper, Del
|
|
|
List<ProductInfo> productInfos = productInfoService.listByIds(goodids);
|
|
|
Map<Long, ProductInfo> productInfoMap = productInfos.stream().collect(Collectors.toMap(ProductInfo::getId, Function.identity()));
|
|
|
//获取采购明细信息
|
|
|
- Map<Long, PurchaseDetail> purchaseDetailMap = purchaseDetailList.stream().collect(Collectors.toMap(PurchaseDetail::getId,Function.identity()));
|
|
|
+ Map<Long, PurchaseDetail> purchaseDetailMap = purchaseDetailList.stream().collect(Collectors.toMap(PurchaseDetail::getId, Function.identity()));
|
|
|
|
|
|
for (DeliverGoodsDetailsVo deliverGoodsDetailsVo : deliverGoodsDetailsVos) {
|
|
|
//赋值产品信息
|
|
@@ -110,8 +131,8 @@ public class DeliverGoodsServiceImpl extends ServiceImpl<DeliverGoodsMapper, Del
|
|
|
deliverGoodsDetailsVo.setCount(purchaseDetail.getCount());
|
|
|
//赋值在途数量
|
|
|
IWrapper<DeliverGoods> wrapper1 = IWrapper.getWrapper();
|
|
|
- wrapper1.eq("dgd",DeliverGoodsDetails::getPurchaseDetailId, deliverGoodsDetailsVo.getPurchaseDetailId());
|
|
|
- wrapper1.eq("dg.status",0);
|
|
|
+ wrapper1.eq("dgd", DeliverGoodsDetails::getPurchaseDetailId, deliverGoodsDetailsVo.getPurchaseDetailId());
|
|
|
+ wrapper1.eq("dg.status", 0);
|
|
|
List<DeliverGoodsDetailsVo> list = baseMapper.listDeliverGoodsDetails(wrapper1);
|
|
|
BigDecimal count = list.stream()
|
|
|
.map(DeliverGoodsDetails::getDeliverGoodsQuantity)
|
|
@@ -135,7 +156,7 @@ public class DeliverGoodsServiceImpl extends ServiceImpl<DeliverGoodsMapper, Del
|
|
|
logisticsInfos.setBusinessId(deliverGoodsDto.getId());//设置业务id为发货id
|
|
|
// logisticsInfos.setBusinessCode(purchase.getCode());//设置采购单号为业务单号
|
|
|
String victoriatouristJson2 = purchase.getVictoriatouristJson();
|
|
|
- JSONObject json2 = ObjectUtil.isNotEmpty(victoriatouristJson2) ? JSONObject.parseObject(victoriatouristJson2):new JSONObject();
|
|
|
+ JSONObject json2 = ObjectUtil.isNotEmpty(victoriatouristJson2) ? JSONObject.parseObject(victoriatouristJson2) : new JSONObject();
|
|
|
logisticsInfos.setBusinessCode(json2.getString("contractCode"));
|
|
|
logisticsInfos.setBusinessType(1);//采购到货
|
|
|
logisticsInfos.setStatus(0);
|
|
@@ -180,4 +201,112 @@ public class DeliverGoodsServiceImpl extends ServiceImpl<DeliverGoodsMapper, Del
|
|
|
return list;
|
|
|
}
|
|
|
|
|
|
+ @Override
|
|
|
+ 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());
|
|
|
+ }
|
|
|
+ //赋值采购明细
|
|
|
+ List<PurchaseDetail> purchaseDetailList = purchaseDetailService.list(q -> q.eq(PurchaseDetail::getPurchaseId, purchase.getId()));
|
|
|
+ List<PurchaseDetailVo> purchaseDetailVoList = BeanUtil.copyToList(purchaseDetailList, PurchaseDetailVo.class);
|
|
|
+ //赋值产品信息
|
|
|
+ productInfoService.attributeAssign(purchaseDetailVoList, PurchaseDetailVo::getBussinessId, (item, productInfo) -> {
|
|
|
+ item.setProductCode(productInfo.getCode());
|
|
|
+ item.setProductName(productInfo.getName());
|
|
|
+ item.setProductCustomCode(productInfo.getCustomCode());
|
|
|
+ });
|
|
|
+ //赋值质检信息
|
|
|
+ List<QualityDetail> qualityInfoByPurchaseId = baseMapper.getQualityInfoByPurchaseId(purchase.getId());
|
|
|
+ if (ObjectUtil.isNotEmpty(qualityInfoByPurchaseId)) {
|
|
|
+ Map<Long, QualityDetail> qualityDetailsMap = qualityInfoByPurchaseId.stream().collect(Collectors.toMap(QualityDetail::getBussinessId, Function.identity()));
|
|
|
+ for (PurchaseDetailVo purchaseDetailVo : purchaseDetailVoList) {
|
|
|
+ QualityDetail qualityDetails = qualityDetailsMap.get(purchaseDetailVo.getBussinessId());
|
|
|
+ if (ObjectUtil.isEmpty(qualityDetails)) {
|
|
|
+ purchaseDetailVo.setQualifiedCount(BigDecimal.ZERO);
|
|
|
+ purchaseDetailVo.setNoQualifiedCount(BigDecimal.ZERO);
|
|
|
+ purchaseDetailVo.setQualityQuantity(BigDecimal.ZERO);
|
|
|
+ continue;
|
|
|
+ }
|
|
|
+ purchaseDetailVo.setQualifiedCount(qualityDetails.getQualifiedCount());
|
|
|
+ purchaseDetailVo.setNoQualifiedCount(qualityDetails.getNoQualifiedCount());
|
|
|
+ purchaseDetailVo.setQualityQuantity(qualityDetails.getQualifiedCount().add(qualityDetails.getNoQualifiedCount()));
|
|
|
+ }
|
|
|
+ }
|
|
|
+ //赋值发货信息
|
|
|
+ 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(list1);
|
|
|
+ }
|
|
|
+ }
|
|
|
+ //赋值到货信息
|
|
|
+ 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::getBussinessId));
|
|
|
+
|
|
|
+ Map<Long, String> dgdMap = list.stream().collect(Collectors.toMap(DeliverGoodsDetailsVo::getId, DeliverGoodsDetailsVo::getLogisticsCode));
|
|
|
+ for (PurchaseDetailVo purchaseDetailVo : purchaseDetailVoList) {
|
|
|
+ List<ArrivalDetailVo> list1 = collect.get(purchaseDetailVo.getBussinessId());
|
|
|
+ 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());
|
|
|
+
|
|
|
+ if (ObjectUtil.isEmpty(purchaseBackDetails)) {
|
|
|
+ purchaseDetailVo.setPurchaseBackQuantity(BigDecimal.ZERO);
|
|
|
+ continue;
|
|
|
+ }
|
|
|
+ //退货数量求和
|
|
|
+ BigDecimal backCount = purchaseBackDetails.stream()
|
|
|
+ .map(PurchaseBackDetails::getQuantity)
|
|
|
+ .reduce(BigDecimal.ZERO, BigDecimal::add);
|
|
|
+ purchaseDetailVo.setPurchaseBackQuantity(backCount);
|
|
|
+ purchaseDetailVo.setPurchaseBackDetailsList(purchaseBackDetails);
|
|
|
+ }
|
|
|
+ }
|
|
|
+ result.setPurchaseDetailVoList(purchaseDetailVoList);
|
|
|
+ return result;
|
|
|
+ }
|
|
|
+
|
|
|
}
|