|
@@ -34,14 +34,22 @@ import com.fjhx.file.entity.FileInfoVo;
|
|
|
import com.fjhx.file.utils.ObsFileUtil;
|
|
|
import com.fjhx.item.entity.product.dto.ProductInfoSelectDto;
|
|
|
import com.fjhx.item.service.product.ProductInfoService;
|
|
|
+import com.fjhx.purchase.entity.arrival.po.ArrivalDetail;
|
|
|
+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.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.purchase.service.quality.QualityDetailService;
|
|
|
import com.fjhx.sale.entity.claim.po.ClaimContract;
|
|
|
import com.fjhx.sale.entity.contract.bo.ContractCurrencyRate;
|
|
|
import com.fjhx.sale.entity.contract.bo.ContractDocumentaryBo;
|
|
|
import com.fjhx.sale.entity.contract.dto.ContractDto;
|
|
|
import com.fjhx.sale.entity.contract.dto.ContractSelectDto;
|
|
|
import com.fjhx.sale.entity.contract.dto.DecisionAidDto;
|
|
|
+import com.fjhx.sale.entity.contract.dto.PayDecisionAidDto;
|
|
|
import com.fjhx.sale.entity.contract.po.Contract;
|
|
|
import com.fjhx.sale.entity.contract.po.ContractProduct;
|
|
|
import com.fjhx.sale.entity.contract.po.ContractProject;
|
|
@@ -131,6 +139,18 @@ public class ContractServiceImpl extends ServiceImpl<ContractMapper, Contract>
|
|
|
@Autowired
|
|
|
private ContractProjectService contractProjectService;
|
|
|
|
|
|
+ @Autowired
|
|
|
+ private ContractService contractService;
|
|
|
+
|
|
|
+ @Autowired
|
|
|
+ private PurchaseService purchaseService;
|
|
|
+
|
|
|
+ @Autowired
|
|
|
+ private ArrivalDetailService arrivalDetailService;
|
|
|
+
|
|
|
+ @Autowired
|
|
|
+ private QualityDetailService qualityDetailService;
|
|
|
+
|
|
|
/**
|
|
|
* 分页
|
|
|
*
|
|
@@ -775,6 +795,168 @@ public class ContractServiceImpl extends ServiceImpl<ContractMapper, Contract>
|
|
|
return decisionAidVo;
|
|
|
}
|
|
|
|
|
|
+ @Override
|
|
|
+ public PayDecisionAidVo payDecisionAid(PayDecisionAidDto dto) {
|
|
|
+
|
|
|
+ PayDecisionAidVo vo = new PayDecisionAidVo();
|
|
|
+
|
|
|
+ // 采购合同id
|
|
|
+ List<Long> purchaseIdList = dto.getPurchaseIdList();
|
|
|
+
|
|
|
+ if (purchaseIdList.size() == 0) {
|
|
|
+ return vo;
|
|
|
+ }
|
|
|
+
|
|
|
+ // 采购合同
|
|
|
+ List<Purchase> purchaseList = purchaseService.listByIds(purchaseIdList);
|
|
|
+ List<PurchaseDetail> purchaseDetailList = purchaseDetailService.list(q -> q.in(PurchaseDetail::getPurchaseId, purchaseIdList));
|
|
|
+
|
|
|
+ // 赋值关联销售合同
|
|
|
+ setContractInfo(vo, purchaseDetailList);
|
|
|
+
|
|
|
+ // 赋值采购合同数据
|
|
|
+ setPurchaseInfo(vo, purchaseList, purchaseDetailList);
|
|
|
+
|
|
|
+ // 赋值到货数据
|
|
|
+ List<ArrivalDetail> arrivalDetails = setInvoiceQuantity(vo);
|
|
|
+
|
|
|
+ // 赋值合格率
|
|
|
+ setPassRate(vo, arrivalDetails);
|
|
|
+
|
|
|
+ // TODO 赋值退货数量 无法关联
|
|
|
+
|
|
|
+
|
|
|
+ return vo;
|
|
|
+ }
|
|
|
+
|
|
|
+ /**
|
|
|
+ * 赋值合格率
|
|
|
+ */
|
|
|
+ private void setPassRate(PayDecisionAidVo vo, List<ArrivalDetail> arrivalDetails) {
|
|
|
+ List<PayDecisionAidVo.PurchaseInfo> purchaseInfoList = vo.getPurchaseInfoList();
|
|
|
+
|
|
|
+ if (arrivalDetails.size() == 0) {
|
|
|
+ return;
|
|
|
+ }
|
|
|
+
|
|
|
+ // 到货明细通过采购明细id分组
|
|
|
+ Map<Long, List<ArrivalDetail>> arrivalDetailMap = arrivalDetails.stream().collect(Collectors.groupingBy(
|
|
|
+ ArrivalDetail::getPurchaseDetailId
|
|
|
+ ));
|
|
|
+
|
|
|
+ // 通过到货明细查询质检记录
|
|
|
+ List<Long> arrivalDetailsIdList = arrivalDetails.stream().map(BaseIdPo::getId).collect(Collectors.toList());
|
|
|
+ List<QualityDetail> list = qualityDetailService.list(q -> q.in(QualityDetail::getArrivalDetailId, arrivalDetailsIdList));
|
|
|
+
|
|
|
+
|
|
|
+ for (PayDecisionAidVo.PurchaseInfo purchaseInfo : purchaseInfoList) {
|
|
|
+
|
|
|
+ List<ArrivalDetail> arrivalDetailsList = arrivalDetailMap.get(purchaseInfo.getPurchaseDetailsId());
|
|
|
+
|
|
|
+ purchaseInfo.setQualifiedCount(BigDecimal.ZERO);
|
|
|
+ purchaseInfo.setNoQualifiedCount(BigDecimal.ZERO);
|
|
|
+
|
|
|
+ List<Long> itemArrivalDetailsIdList = arrivalDetailsList.stream().map(BaseIdPo::getId).collect(Collectors.toList());
|
|
|
+ for (QualityDetail qualityDetail : list) {
|
|
|
+ if (!itemArrivalDetailsIdList.contains(qualityDetail.getArrivalDetailId())) {
|
|
|
+ continue;
|
|
|
+ }
|
|
|
+ purchaseInfo.setQualifiedCount(purchaseInfo.getQualifiedCount().add(qualityDetail.getQualifiedCount()));
|
|
|
+ purchaseInfo.setNoQualifiedCount(purchaseInfo.getNoQualifiedCount().add(qualityDetail.getNoQualifiedCount()));
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ }
|
|
|
+
|
|
|
+
|
|
|
+ /**
|
|
|
+ * 赋值到货数据
|
|
|
+ */
|
|
|
+ private List<ArrivalDetail> setInvoiceQuantity(PayDecisionAidVo vo) {
|
|
|
+ List<PayDecisionAidVo.PurchaseInfo> purchaseInfoList = vo.getPurchaseInfoList();
|
|
|
+
|
|
|
+ // 采购明细id列表
|
|
|
+ List<Long> purchaseDetailsIdList = purchaseInfoList.stream()
|
|
|
+ .map(PayDecisionAidVo.PurchaseInfo::getPurchaseDetailsId).collect(Collectors.toList());
|
|
|
+
|
|
|
+ if (purchaseDetailsIdList.size() == 0) {
|
|
|
+ return Collections.emptyList();
|
|
|
+ }
|
|
|
+
|
|
|
+ List<ArrivalDetail> list = arrivalDetailService.list(q -> q.eq(ArrivalDetail::getPurchaseDetailId, purchaseDetailsIdList));
|
|
|
+
|
|
|
+ Map<Long, BigDecimal> collect = list.stream().collect(Collectors.toMap(
|
|
|
+ ArrivalDetail::getPurchaseDetailId,
|
|
|
+ ArrivalDetail::getCount,
|
|
|
+ BigDecimal::add
|
|
|
+ ));
|
|
|
+
|
|
|
+ for (PayDecisionAidVo.PurchaseInfo purchaseInfo : purchaseInfoList) {
|
|
|
+ BigDecimal invoiceQuantity = collect.getOrDefault(purchaseInfo.getPurchaseDetailsId(), BigDecimal.ZERO);
|
|
|
+ purchaseInfo.setInvoiceQuantity(invoiceQuantity);
|
|
|
+ }
|
|
|
+
|
|
|
+ return list;
|
|
|
+ }
|
|
|
+
|
|
|
+ /**
|
|
|
+ * 赋值采购合同数据
|
|
|
+ */
|
|
|
+ private void setPurchaseInfo(PayDecisionAidVo vo, List<Purchase> purchaseList, List<PurchaseDetail> purchaseDetailList) {
|
|
|
+
|
|
|
+ Map<Long, List<PurchaseDetail>> purchaseDetailMap = purchaseDetailList.stream()
|
|
|
+ .collect(Collectors.groupingBy(PurchaseDetail::getPurchaseId));
|
|
|
+
|
|
|
+ List<PayDecisionAidVo.PurchaseInfo> list = new ArrayList<>();
|
|
|
+
|
|
|
+ for (Purchase purchase : purchaseList) {
|
|
|
+ List<PurchaseDetail> itemList = purchaseDetailMap.get(purchase.getId());
|
|
|
+
|
|
|
+ if (itemList.size() == 0) {
|
|
|
+ continue;
|
|
|
+ }
|
|
|
+
|
|
|
+ for (PurchaseDetail purchaseDetail : itemList) {
|
|
|
+ PayDecisionAidVo.PurchaseInfo purchaseInfo = new PayDecisionAidVo.PurchaseInfo();
|
|
|
+ purchaseInfo.setPurchaseId(purchase.getId());
|
|
|
+ purchaseInfo.setPurchaseCode(purchase.getCode());
|
|
|
+ purchaseInfo.setPurchaseDetailsId(purchaseDetail.getId());
|
|
|
+ purchaseInfo.setProductId(purchaseDetail.getBussinessId());
|
|
|
+ purchaseInfo.setPurchaseQuantity(purchaseDetail.getCount());
|
|
|
+ list.add(purchaseInfo);
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ // 赋值产品id
|
|
|
+ productInfoService.attributeAssign(list, PayDecisionAidVo.PurchaseInfo::getProductId, (item, product) -> {
|
|
|
+ item.setProductName(product.getName());
|
|
|
+ item.setProductCode(product.getCode());
|
|
|
+ });
|
|
|
+
|
|
|
+ vo.setPurchaseInfoList(list);
|
|
|
+ }
|
|
|
+
|
|
|
+ /**
|
|
|
+ * 赋值销售合同数据
|
|
|
+ */
|
|
|
+ private void setContractInfo(PayDecisionAidVo vo, List<PurchaseDetail> purchaseDetailList) {
|
|
|
+
|
|
|
+ List<Long> contractIdList = purchaseDetailList.stream()
|
|
|
+ .filter(item -> Objects.equals(item.getDataResource(), 1))
|
|
|
+ .map(PurchaseDetail::getDataResourceId)
|
|
|
+ .filter(Objects::nonNull)
|
|
|
+ .distinct()
|
|
|
+ .collect(Collectors.toList());
|
|
|
+
|
|
|
+ if (contractIdList.size() == 0) {
|
|
|
+ vo.setContractList(Collections.emptyList());
|
|
|
+ return;
|
|
|
+ }
|
|
|
+
|
|
|
+ List<Contract> customerList = contractService.list(q -> q.in(BaseIdPo::getId, contractIdList));
|
|
|
+ vo.setContractList(customerList);
|
|
|
+ }
|
|
|
+
|
|
|
|
|
|
/**
|
|
|
* 赋值外销合同信息
|