|
@@ -3,6 +3,7 @@ package com.fjhx.purchase.service.purchase.impl;
|
|
|
import cn.hutool.core.bean.BeanUtil;
|
|
|
import cn.hutool.core.util.ObjectUtil;
|
|
|
import cn.hutool.extra.spring.SpringUtil;
|
|
|
+import com.alibaba.excel.EasyExcel;
|
|
|
import com.alibaba.fastjson2.JSONArray;
|
|
|
import com.alibaba.fastjson2.JSONObject;
|
|
|
import com.alibaba.fastjson2.JSONWriter;
|
|
@@ -23,22 +24,30 @@ import com.fjhx.common.service.documentary.GetDocumentaryBusinessTemplate;
|
|
|
import com.fjhx.common.utils.Assert;
|
|
|
import com.fjhx.item.entity.product.vo.ProductInfoVo;
|
|
|
import com.fjhx.item.service.product.ProductInfoService;
|
|
|
+import com.fjhx.item.util.excel.util.ExcelUtil;
|
|
|
+import com.fjhx.purchase.entity.deliver.DeliverGoodsDetailsPoVo;
|
|
|
import com.fjhx.purchase.entity.invoice.vo.InvoiceDetailsVo;
|
|
|
import com.fjhx.purchase.entity.pay.vo.PayDetailVo;
|
|
|
+import com.fjhx.purchase.entity.purchase.PayExportExcel;
|
|
|
+import com.fjhx.purchase.entity.purchase.PurchaseJson;
|
|
|
import com.fjhx.purchase.entity.purchase.bo.PurchaseDocumentaryBo;
|
|
|
import com.fjhx.purchase.entity.purchase.dto.PurchaseDto;
|
|
|
+import com.fjhx.purchase.entity.purchase.dto.PurchasePayRecordDetailSelectDto;
|
|
|
import com.fjhx.purchase.entity.purchase.dto.PurchaseSelectDto;
|
|
|
import com.fjhx.purchase.entity.purchase.enums.PurchaseStatusEnum;
|
|
|
import com.fjhx.purchase.entity.purchase.po.Purchase;
|
|
|
import com.fjhx.purchase.entity.purchase.po.PurchaseDetail;
|
|
|
import com.fjhx.purchase.entity.purchase.po.PurchasePayRecordDetail;
|
|
|
import com.fjhx.purchase.entity.purchase.po.PurchaseRefundRecord;
|
|
|
+import com.fjhx.purchase.entity.purchase.vo.PurchaseDetailVo;
|
|
|
import com.fjhx.purchase.entity.purchase.vo.PurchaseDocumentaryVo;
|
|
|
+import com.fjhx.purchase.entity.purchase.vo.PurchasePayRecordDetailVo;
|
|
|
import com.fjhx.purchase.entity.purchase.vo.PurchaseVo;
|
|
|
import com.fjhx.purchase.entity.quality.po.QualityDetail;
|
|
|
import com.fjhx.purchase.entity.subscribe.po.Subscribe;
|
|
|
import com.fjhx.purchase.entity.subscribe.po.SubscribeDetail;
|
|
|
import com.fjhx.purchase.mapper.purchase.PurchaseMapper;
|
|
|
+import com.fjhx.purchase.service.WdlyService;
|
|
|
import com.fjhx.purchase.service.arrival.ArrivalDetailService;
|
|
|
import com.fjhx.purchase.service.arrival.ArrivalService;
|
|
|
import com.fjhx.purchase.service.invoice.InvoiceDetailsService;
|
|
@@ -51,6 +60,7 @@ import com.fjhx.purchase.service.subscribe.SubscribeDetailService;
|
|
|
import com.fjhx.purchase.service.subscribe.SubscribeService;
|
|
|
import com.fjhx.supply.entity.supplier.po.SupplierInfo;
|
|
|
import com.fjhx.supply.service.supplier.SupplierInfoService;
|
|
|
+import com.fjhx.tenant.utils.DictUtils;
|
|
|
import com.fjhx.wms.entity.PurchaseDetailPo;
|
|
|
import com.fjhx.wms.entity.stock.po.Stock;
|
|
|
import com.fjhx.wms.entity.warehouse.po.Warehouse;
|
|
@@ -71,7 +81,11 @@ import org.apache.commons.collections4.MapUtils;
|
|
|
import org.springframework.beans.factory.annotation.Autowired;
|
|
|
import org.springframework.stereotype.Service;
|
|
|
|
|
|
+import javax.servlet.http.HttpServletResponse;
|
|
|
+import java.io.File;
|
|
|
+import java.io.FileOutputStream;
|
|
|
import java.math.BigDecimal;
|
|
|
+import java.text.SimpleDateFormat;
|
|
|
import java.util.*;
|
|
|
import java.util.function.Function;
|
|
|
import java.util.stream.Collectors;
|
|
@@ -133,6 +147,8 @@ public class PurchaseServiceImpl extends ServiceImpl<PurchaseMapper, Purchase>
|
|
|
private PurchaseRefundRecordService purchaseRefundRecordService;
|
|
|
@Autowired
|
|
|
private ISysRoleService sysRoleService;
|
|
|
+ @Autowired
|
|
|
+ private WdlyService wdlyService;
|
|
|
|
|
|
/**
|
|
|
* 列表
|
|
@@ -243,7 +259,13 @@ public class PurchaseServiceImpl extends ServiceImpl<PurchaseMapper, Purchase>
|
|
|
|
|
|
|
|
|
wrapper.groupBy("p.id");
|
|
|
- Page<PurchaseVo> page = this.baseMapper.getPage(dto.getPage(), wrapper);
|
|
|
+ Page<PurchaseVo> page = new Page<>();
|
|
|
+ if (dto.getPageSize() == -1) {
|
|
|
+ page.setRecords(baseMapper.getList(wrapper));
|
|
|
+ } else {
|
|
|
+ page = baseMapper.getPage(dto.getPage(), wrapper);
|
|
|
+ }
|
|
|
+// Page<PurchaseVo> page = this.baseMapper.getPage(dto.getPage(), wrapper);
|
|
|
List<PurchaseVo> list = page.getRecords();
|
|
|
if (ObjectUtils.isEmpty(list)) {
|
|
|
return page;
|
|
@@ -485,7 +507,7 @@ public class PurchaseServiceImpl extends ServiceImpl<PurchaseMapper, Purchase>
|
|
|
List<PurchaseDetail> oldPurchaseDetailList = purchaseDetailService.list(q -> q.eq(PurchaseDetail::getPurchaseId, purchaseDto.getId()));
|
|
|
for (PurchaseDetail purchaseDetail : oldPurchaseDetailList) {
|
|
|
PurchaseDetail newPurchaseDetail = dtoPurchaseDetailMap.get(purchaseDetail.getId());
|
|
|
- if(ObjectUtil.isNotEmpty(newPurchaseDetail)) {
|
|
|
+ if (ObjectUtil.isNotEmpty(newPurchaseDetail)) {
|
|
|
purchaseDetail.setPrice(newPurchaseDetail.getPrice());
|
|
|
purchaseDetail.setAmount(newPurchaseDetail.getAmount());
|
|
|
}
|
|
@@ -678,4 +700,145 @@ public class PurchaseServiceImpl extends ServiceImpl<PurchaseMapper, Purchase>
|
|
|
.set(BasePo::getUpdateUser, SecurityUtils.getUserId())
|
|
|
);
|
|
|
}
|
|
|
+
|
|
|
+ @Override
|
|
|
+ public void purchasePayExcelExport(PurchaseSelectDto dto, HttpServletResponse httpServletResponse) {
|
|
|
+ //产品单位字典读取
|
|
|
+ Map<String, String> unitDictMap = DictUtils.getDictMap("unit");
|
|
|
+ //付款账户字典
|
|
|
+ Map<String, String> purchasePaymentAccountMap = DictUtils.getDictMap("purchase_payment_account");
|
|
|
+
|
|
|
+ SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd-hh-mm-ss");
|
|
|
+
|
|
|
+ List<PayExportExcel> payExportExcelList = new ArrayList<>();
|
|
|
+
|
|
|
+ dto.setPageNum(1);
|
|
|
+ dto.setPageSize(-1);
|
|
|
+ Page<PurchaseVo> page = getPageByWdly(dto);
|
|
|
+ List<PurchaseVo> records = page.getRecords();
|
|
|
+
|
|
|
+ if (ObjectUtils.isEmpty(records)) {
|
|
|
+ ExcelUtil.export(httpServletResponse, payExportExcelList, PayExportExcel.class);
|
|
|
+ }
|
|
|
+
|
|
|
+ //预处理采购明细信息
|
|
|
+ List<Long> purchaseIds = records.stream().map(Purchase::getId).distinct().collect(Collectors.toList());
|
|
|
+ List<PurchaseDetail> purchaseDetailLists = purchaseDetailService.list(q -> q.in(PurchaseDetail::getPurchaseId, purchaseIds));
|
|
|
+ productInfoService.attributeAssign(purchaseDetailLists, PurchaseDetail::getBussinessId, (item, productInfo) -> {
|
|
|
+ //产品编号
|
|
|
+ item.setProductCode(productInfo.getCustomCode());
|
|
|
+ //产品规格
|
|
|
+ item.setProductSpec(productInfo.getSpec());
|
|
|
+ //产品单位
|
|
|
+ String unit = productInfo.getUnit();
|
|
|
+ item.setProductUnit(unitDictMap.getOrDefault(unit, unit));
|
|
|
+ });
|
|
|
+ Map<Long, List<PurchaseDetail>> purchaseDetailMap = purchaseDetailLists.stream().collect(Collectors.groupingBy(PurchaseDetail::getPurchaseId));
|
|
|
+
|
|
|
+ //赋值数据
|
|
|
+ for (PurchaseVo record : records) {
|
|
|
+ PayExportExcel payExportExcel = new PayExportExcel();
|
|
|
+ //解析采购json
|
|
|
+ PurchaseJson purchaseJson = JSONObject.parseObject(record.getVictoriatouristJson(), PurchaseJson.class);
|
|
|
+
|
|
|
+ //采购单号
|
|
|
+ payExportExcel.setContractCode(purchaseJson.getContractCode());
|
|
|
+ //采购时间
|
|
|
+ payExportExcel.setPurchaseTime(record.getCreateTime());
|
|
|
+ //采购明细
|
|
|
+ List<PurchaseDetail> purchaseDetailList = purchaseDetailMap.get(record.getId());
|
|
|
+ //采购金额
|
|
|
+ payExportExcel.setAmount(record.getAmount());
|
|
|
+ //优惠金额
|
|
|
+ payExportExcel.setPreferential(purchaseJson.getPreferential());
|
|
|
+ //付款信息
|
|
|
+ PurchasePayRecordDetailSelectDto dto1 = new PurchasePayRecordDetailSelectDto();
|
|
|
+ dto1.setPurchaseId(record.getId());
|
|
|
+ List<PurchasePayRecordDetailVo> purchasePayRecordDetailVos = purchasePayRecordDetailService.getList(dto1);
|
|
|
+ //付款账号
|
|
|
+ List<String> payAccounts = purchasePayRecordDetailVos.stream().map(PurchasePayRecordDetailVo::getPayAccount).collect(Collectors.toList());
|
|
|
+ StringJoiner payAccountsSj = new StringJoiner("\r\n");
|
|
|
+ for (String payAccount : payAccounts) {
|
|
|
+ payAccountsSj.add(purchasePaymentAccountMap.getOrDefault(payAccount, payAccount));
|
|
|
+ }
|
|
|
+ payExportExcel.setPayAccount(payAccountsSj.toString());
|
|
|
+ //付款金额
|
|
|
+ BigDecimal payAmount = purchasePayRecordDetailVos.stream().map(PurchasePayRecordDetail::getAmount).reduce(BigDecimal.ZERO, BigDecimal::add);
|
|
|
+ payExportExcel.setPayAmount(payAmount);
|
|
|
+ //付款时间
|
|
|
+ List<Date> payDates = purchasePayRecordDetailVos.stream().map(PurchasePayRecordDetail::getPayDate).collect(Collectors.toList());
|
|
|
+ StringJoiner sj = new StringJoiner("\r\n");
|
|
|
+ for (Date payDate : payDates) {
|
|
|
+ sj.add(sdf.format(payDate));
|
|
|
+ }
|
|
|
+ payExportExcel.setPayTime(sj.toString());
|
|
|
+ //已入库信息
|
|
|
+ PurchaseVo purchaseVo = wdlyService.arrivalDetail(record.getId());
|
|
|
+ List<PurchaseDetailVo> purchaseDetailVoList = purchaseVo.getPurchaseDetailVoList();
|
|
|
+ Map<Long, PurchaseDetailVo> PurchaseDetailVoMap = purchaseDetailVoList.stream().collect(Collectors.toMap(PurchaseDetailVo::getId, Function.identity()));
|
|
|
+
|
|
|
+ //遍历采购明细
|
|
|
+ for (PurchaseDetail purchaseDetail : purchaseDetailList) {
|
|
|
+ PayExportExcel newPayExportExcel = BeanUtil.copyProperties(payExportExcel, PayExportExcel.class);
|
|
|
+
|
|
|
+ //产品编号
|
|
|
+ newPayExportExcel.setProductCode(purchaseDetail.getProductCode());
|
|
|
+ //产品规格
|
|
|
+ newPayExportExcel.setProductSpec(purchaseDetail.getProductSpec());
|
|
|
+ //产品单位
|
|
|
+ newPayExportExcel.setProductUnit(purchaseDetail.getProductUnit());
|
|
|
+
|
|
|
+ //采购数量
|
|
|
+ newPayExportExcel.setPurchaseQuantity(purchaseDetail.getCount());
|
|
|
+ //采购单价
|
|
|
+ newPayExportExcel.setPrice(purchaseDetail.getPrice());
|
|
|
+ //到货信息
|
|
|
+ PurchaseDetailVo purchaseDetailVo = PurchaseDetailVoMap.get(purchaseDetail.getId());
|
|
|
+ //已入库数量
|
|
|
+ BigDecimal receiptQuantity = purchaseDetailVo.getReceiptQuantity();
|
|
|
+ if (ObjectUtils.isEmpty(receiptQuantity)) {
|
|
|
+ receiptQuantity = BigDecimal.ZERO;
|
|
|
+ }
|
|
|
+ newPayExportExcel.setReceiptQuantity(receiptQuantity);
|
|
|
+ //已质检数量
|
|
|
+ BigDecimal qualityQuantity = purchaseDetailVo.getQualityQuantity();
|
|
|
+ if (ObjectUtils.isEmpty(qualityQuantity)) {
|
|
|
+ qualityQuantity = BigDecimal.ZERO;
|
|
|
+ }
|
|
|
+ newPayExportExcel.setQualityQuantity(qualityQuantity);
|
|
|
+ //不合格数量
|
|
|
+ BigDecimal noQualifiedCount = purchaseDetailVo.getNoQualifiedCount();
|
|
|
+ if (ObjectUtils.isEmpty(noQualifiedCount)) {
|
|
|
+ noQualifiedCount = BigDecimal.ZERO;
|
|
|
+ }
|
|
|
+ newPayExportExcel.setDisqualificationCount(noQualifiedCount);
|
|
|
+ //退货数量
|
|
|
+ BigDecimal purchaseBackQuantity = purchaseDetailVo.getPurchaseBackQuantity();
|
|
|
+ if (ObjectUtils.isEmpty(purchaseBackQuantity)) {
|
|
|
+ purchaseBackQuantity = BigDecimal.ZERO;
|
|
|
+ }
|
|
|
+ newPayExportExcel.setReturnQuantity(purchaseBackQuantity);
|
|
|
+ //退货金额
|
|
|
+ newPayExportExcel.setReturnAmount(purchaseBackQuantity.multiply(purchaseDetail.getPrice()));
|
|
|
+ //物流单号
|
|
|
+ List<DeliverGoodsDetailsPoVo> deliverGoodsDetailList = purchaseDetailVo.getDeliverGoodsDetailList();
|
|
|
+ if (ObjectUtils.isNotEmpty(deliverGoodsDetailList)) {
|
|
|
+ String logisticsCode = deliverGoodsDetailList.stream().map(DeliverGoodsDetailsPoVo::getLogisticsCode).collect(Collectors.joining("\r\n"));
|
|
|
+ newPayExportExcel.setLogisticsCode(logisticsCode);
|
|
|
+ }
|
|
|
+
|
|
|
+ payExportExcelList.add(newPayExportExcel);
|
|
|
+ }
|
|
|
+
|
|
|
+ }
|
|
|
+ try {
|
|
|
+ File file = new File("C:\\Users\\ASUS\\Desktop\\ou.xlsx");
|
|
|
+ FileOutputStream fos = new FileOutputStream(file);
|
|
|
+ EasyExcel.write(fos, PayExportExcel.class).sheet("aa").doWrite(payExportExcelList);
|
|
|
+ }catch (Exception e){
|
|
|
+ e.printStackTrace();
|
|
|
+ }
|
|
|
+
|
|
|
+ ExcelUtil.export(httpServletResponse, payExportExcelList, PayExportExcel.class);
|
|
|
+ }
|
|
|
}
|