|
@@ -3,7 +3,6 @@ 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;
|
|
@@ -26,14 +25,14 @@ 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.AbnormalDetailsBo;
|
|
|
-import com.fjhx.purchase.entity.deliver.DeliverGoodsDetailsPoVo;
|
|
|
+import com.fjhx.purchase.entity.PurchaseBackDetailsBo;
|
|
|
+import com.fjhx.purchase.entity.deliver.DeliverGoodsPo;
|
|
|
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;
|
|
@@ -78,13 +77,12 @@ import com.ruoyi.common.utils.StringUtils;
|
|
|
import com.ruoyi.common.utils.wrapper.IWrapper;
|
|
|
import com.ruoyi.system.service.ISysRoleService;
|
|
|
import com.ruoyi.system.service.ISysUserService;
|
|
|
+import org.apache.commons.collections4.ListUtils;
|
|
|
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.*;
|
|
@@ -187,12 +185,9 @@ public class PurchaseServiceImpl extends ServiceImpl<PurchaseMapper, Purchase>
|
|
|
return page;
|
|
|
}
|
|
|
|
|
|
- @Override
|
|
|
- public Page<PurchaseVo> getPageByWdly(PurchaseSelectDto dto) {
|
|
|
+ private IWrapper<Purchase> getWdlyPageWrapper(PurchaseSelectDto dto) {
|
|
|
IWrapper<Purchase> wrapper = getWrapper();
|
|
|
|
|
|
- //过滤维多利亚数据
|
|
|
- wrapper.isNotNull("p.victoriatourist_json");
|
|
|
|
|
|
wrapper.orderByDesc("p", Purchase::getCreateTime);
|
|
|
if (ObjectUtils.isNotEmpty(dto.getPurchaseStatus())) {
|
|
@@ -258,15 +253,19 @@ public class PurchaseServiceImpl extends ServiceImpl<PurchaseMapper, Purchase>
|
|
|
//部门(项目组)过滤
|
|
|
wrapper.eq("de.dept_id", dto.getDeptId());
|
|
|
|
|
|
+ //时间范围过滤
|
|
|
+ wrapper.ge("p", Purchase::getCreateTime,dto.getBeginTime());
|
|
|
+ wrapper.le("p", Purchase::getCreateTime,dto.getEndTime());
|
|
|
|
|
|
wrapper.groupBy("p.id");
|
|
|
- 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);
|
|
|
+ return wrapper;
|
|
|
+ }
|
|
|
+
|
|
|
+ @Override
|
|
|
+ public Page<PurchaseVo> getPageByWdly(PurchaseSelectDto dto) {
|
|
|
+ IWrapper<Purchase> wrapper = getWdlyPageWrapper(dto);
|
|
|
+
|
|
|
+ Page<PurchaseVo> page = this.baseMapper.getPage(dto.getPage(), wrapper);
|
|
|
List<PurchaseVo> list = page.getRecords();
|
|
|
if (ObjectUtils.isEmpty(list)) {
|
|
|
return page;
|
|
@@ -342,7 +341,9 @@ public class PurchaseServiceImpl extends ServiceImpl<PurchaseMapper, Purchase>
|
|
|
List<AbnormalDetailsBo> abnormalDetailsBo = abnormalDetailsMap.get(purchaseVo.getId());
|
|
|
BigDecimal waitRefundAmount = BigDecimal.ZERO;
|
|
|
if (ObjectUtil.isNotEmpty(abnormalDetailsBo)) {
|
|
|
- waitRefundAmount = abnormalDetailsBo.stream().map(AbnormalDetailsBo::getRefundAmount).reduce(BigDecimal.ZERO, BigDecimal::add);
|
|
|
+ waitRefundAmount = abnormalDetailsBo.stream()
|
|
|
+ .filter(item -> ObjectUtil.isNotEmpty(item.getRefundAmount()))
|
|
|
+ .map(AbnormalDetailsBo::getRefundAmount).reduce(BigDecimal.ZERO, BigDecimal::add);
|
|
|
}
|
|
|
//已退款金额
|
|
|
List<PurchaseRefundRecord> purchaseRefundRecords = refundRecordMap.get(purchaseVo.getId());
|
|
@@ -736,21 +737,22 @@ public class PurchaseServiceImpl extends ServiceImpl<PurchaseMapper, Purchase>
|
|
|
|
|
|
List<PayExportExcel> payExportExcelList = new ArrayList<>();
|
|
|
|
|
|
- dto.setPageNum(1);
|
|
|
- dto.setPageSize(-1);
|
|
|
- Page<PurchaseVo> page = getPageByWdly(dto);
|
|
|
- List<PurchaseVo> records = page.getRecords();
|
|
|
+ IWrapper<Purchase> wrapper = getWdlyPageWrapper(dto);
|
|
|
+ List<PurchaseVo> list = baseMapper.getList(wrapper);
|
|
|
|
|
|
- if (ObjectUtils.isEmpty(records)) {
|
|
|
+ if (ObjectUtils.isEmpty(list)) {
|
|
|
ExcelUtil.export(httpServletResponse, payExportExcelList, PayExportExcel.class);
|
|
|
}
|
|
|
|
|
|
//预处理采购明细信息
|
|
|
- List<Long> purchaseIds = records.stream().map(Purchase::getId).distinct().collect(Collectors.toList());
|
|
|
+ List<Long> purchaseIds = list.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.setProductName(productInfo.getName());
|
|
|
//产品规格
|
|
|
item.setProductSpec(productInfo.getSpec());
|
|
|
//产品单位
|
|
@@ -759,8 +761,45 @@ public class PurchaseServiceImpl extends ServiceImpl<PurchaseMapper, Purchase>
|
|
|
});
|
|
|
Map<Long, List<PurchaseDetail>> purchaseDetailMap = purchaseDetailLists.stream().collect(Collectors.groupingBy(PurchaseDetail::getPurchaseId));
|
|
|
|
|
|
+ //预处理 采购付款信息
|
|
|
+ List<PurchasePayRecordDetailVo> purchasePayRecordDetailList = purchasePayRecordDetailService.getList(
|
|
|
+ IWrapper.<PurchasePayRecordDetail>getWrapper().in("t1.purchase_id", purchaseIds)
|
|
|
+ );
|
|
|
+ Map<Long, List<PurchasePayRecordDetailVo>> purchasePayRecordDetailMap = purchasePayRecordDetailList.stream()
|
|
|
+ .collect(Collectors.groupingBy(PurchasePayRecordDetailVo::getPurchaseId));
|
|
|
+
|
|
|
+ //预处理 到货信息
|
|
|
+ List<Long> purchaseDetailIds = purchaseDetailLists.stream().map(PurchaseDetail::getId).distinct().collect(Collectors.toList());
|
|
|
+ //按1000条分割
|
|
|
+ List<List<Long>> purchaseDetailIdPartition = ListUtils.partition(purchaseDetailIds, 500);
|
|
|
+
|
|
|
+
|
|
|
+ List<PurchaseDetailVo> arrayInfoById = new ArrayList<>();
|
|
|
+ for (List<Long> longs : purchaseDetailIdPartition) {
|
|
|
+ List<PurchaseDetailVo> arrayInfoById1 = baseMapper.getArrayInfoById(IWrapper.getWrapper()
|
|
|
+ .in("ad.purchase_detail_id", longs)
|
|
|
+ .groupBy("ad.purchase_detail_id")
|
|
|
+ );
|
|
|
+ arrayInfoById.addAll(arrayInfoById1);
|
|
|
+ }
|
|
|
+ Map<Long, PurchaseDetailVo> arrayInfoMap = arrayInfoById.stream().collect(Collectors.toMap(PurchaseDetail::getId, Function.identity()));
|
|
|
+
|
|
|
+ //预处理 采购退货信息
|
|
|
+ List<PurchaseBackDetailsBo> purchaseBackDetails = new ArrayList<>();
|
|
|
+ for (List<Long> longs : purchaseDetailIdPartition) {
|
|
|
+ purchaseBackDetails.addAll(wdlyService.getPurchaseBackDetails(longs));
|
|
|
+
|
|
|
+ }
|
|
|
+// List<PurchaseBackDetailsBo> purchaseBackDetails = wdlyService.getPurchaseBackDetails(purchaseDetailIds);
|
|
|
+ Map<Long, List<PurchaseBackDetailsBo>> purchaseBackDetailsMap = purchaseBackDetails.stream()
|
|
|
+ .collect(Collectors.groupingBy(PurchaseBackDetailsBo::getPurchaseDetailsId));
|
|
|
+
|
|
|
+ //预处理 物流单号信息
|
|
|
+ List<DeliverGoodsPo> deliverGoodsInfo = wdlyService.getDeliverGoodsInfo(purchaseIds);
|
|
|
+ Map<Long, List<DeliverGoodsPo>> deliverGoodsMap = deliverGoodsInfo.stream().collect(Collectors.groupingBy(DeliverGoodsPo::getPurchaseId));
|
|
|
+
|
|
|
//赋值数据
|
|
|
- for (PurchaseVo record : records) {
|
|
|
+ for (PurchaseVo record : list) {
|
|
|
PayExportExcel payExportExcel = new PayExportExcel();
|
|
|
//解析采购json
|
|
|
PurchaseJson purchaseJson = JSONObject.parseObject(record.getVictoriatouristJson(), PurchaseJson.class);
|
|
@@ -773,12 +812,12 @@ public class PurchaseServiceImpl extends ServiceImpl<PurchaseMapper, Purchase>
|
|
|
List<PurchaseDetail> purchaseDetailList = purchaseDetailMap.get(record.getId());
|
|
|
//采购金额
|
|
|
payExportExcel.setAmount(record.getAmount());
|
|
|
+ //运费
|
|
|
+ payExportExcel.setFreight(purchaseJson.getFreight());
|
|
|
//优惠金额
|
|
|
payExportExcel.setPreferential(purchaseJson.getPreferential());
|
|
|
//付款信息
|
|
|
- PurchasePayRecordDetailSelectDto dto1 = new PurchasePayRecordDetailSelectDto();
|
|
|
- dto1.setPurchaseId(record.getId());
|
|
|
- List<PurchasePayRecordDetailVo> purchasePayRecordDetailVos = purchasePayRecordDetailService.getList(dto1);
|
|
|
+ List<PurchasePayRecordDetailVo> purchasePayRecordDetailVos = purchasePayRecordDetailMap.getOrDefault(record.getId(), new ArrayList<>());
|
|
|
//付款账号
|
|
|
List<String> payAccounts = purchasePayRecordDetailVos.stream().map(PurchasePayRecordDetailVo::getPayAccount).collect(Collectors.toList());
|
|
|
StringJoiner payAccountsSj = new StringJoiner("\r\n");
|
|
@@ -786,6 +825,8 @@ public class PurchaseServiceImpl extends ServiceImpl<PurchaseMapper, Purchase>
|
|
|
payAccountsSj.add(purchasePaymentAccountMap.getOrDefault(payAccount, payAccount));
|
|
|
}
|
|
|
payExportExcel.setPayAccount(payAccountsSj.toString());
|
|
|
+ //采购总金额
|
|
|
+ payExportExcel.setPurchaseAmount(record.getAmount());
|
|
|
//付款金额
|
|
|
BigDecimal payAmount = purchasePayRecordDetailVos.stream().map(PurchasePayRecordDetail::getAmount).reduce(BigDecimal.ZERO, BigDecimal::add);
|
|
|
payExportExcel.setPayAmount(payAmount);
|
|
@@ -797,9 +838,9 @@ public class PurchaseServiceImpl extends ServiceImpl<PurchaseMapper, Purchase>
|
|
|
}
|
|
|
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()));
|
|
|
+// 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) {
|
|
@@ -807,6 +848,8 @@ public class PurchaseServiceImpl extends ServiceImpl<PurchaseMapper, Purchase>
|
|
|
|
|
|
//产品编号
|
|
|
newPayExportExcel.setProductCode(purchaseDetail.getProductCode());
|
|
|
+ //产品名称
|
|
|
+ newPayExportExcel.setProductName(purchaseDetail.getProductName());
|
|
|
//产品规格
|
|
|
newPayExportExcel.setProductSpec(purchaseDetail.getProductSpec());
|
|
|
//产品单位
|
|
@@ -817,37 +860,54 @@ public class PurchaseServiceImpl extends ServiceImpl<PurchaseMapper, Purchase>
|
|
|
//采购单价
|
|
|
newPayExportExcel.setPrice(purchaseDetail.getPrice());
|
|
|
//到货信息
|
|
|
- PurchaseDetailVo purchaseDetailVo = PurchaseDetailVoMap.get(purchaseDetail.getId());
|
|
|
- //已入库数量
|
|
|
- BigDecimal receiptQuantity = purchaseDetailVo.getReceiptQuantity();
|
|
|
- if (ObjectUtils.isEmpty(receiptQuantity)) {
|
|
|
- receiptQuantity = BigDecimal.ZERO;
|
|
|
+// PurchaseDetailVo purchaseDetailVo = PurchaseDetailVoMap.get(purchaseDetail.getId());
|
|
|
+
|
|
|
+ PurchaseDetailVo purchaseDetailVo = arrayInfoMap.get(purchaseDetail.getId());
|
|
|
+
|
|
|
+
|
|
|
+ BigDecimal receiptQuantity = BigDecimal.ZERO;
|
|
|
+ BigDecimal qualityQuantity = BigDecimal.ZERO;
|
|
|
+ BigDecimal noQualifiedCount = BigDecimal.ZERO;
|
|
|
+ if (ObjectUtil.isNotEmpty(purchaseDetailVo)) {
|
|
|
+ //已入库数量
|
|
|
+ if (ObjectUtils.isNotEmpty(purchaseDetailVo.getReceiptQuantity())) {
|
|
|
+ receiptQuantity = purchaseDetailVo.getReceiptQuantity();
|
|
|
+ }
|
|
|
+ //已质检数量
|
|
|
+ if (ObjectUtils.isNotEmpty(purchaseDetailVo.getQualityQuantity())) {
|
|
|
+ qualityQuantity = purchaseDetailVo.getQualityQuantity();
|
|
|
+ }
|
|
|
+ //不合格数量
|
|
|
+ if (ObjectUtils.isNotEmpty(purchaseDetailVo.getNoQualifiedCount())) {
|
|
|
+ noQualifiedCount = purchaseDetailVo.getNoQualifiedCount();
|
|
|
+ }
|
|
|
}
|
|
|
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;
|
|
|
+
|
|
|
+
|
|
|
+ List<PurchaseBackDetailsBo> purchaseBackDetailsBoList = purchaseBackDetailsMap.get(purchaseDetail.getId());
|
|
|
+ BigDecimal purchaseBackQuantity = BigDecimal.ZERO;
|
|
|
+ if (ObjectUtil.isNotEmpty(purchaseBackDetailsBoList)) {
|
|
|
+ for (PurchaseBackDetailsBo purchaseBackDetailsBo : purchaseBackDetailsBoList) {
|
|
|
+
|
|
|
+
|
|
|
+ //退货数量
|
|
|
+ if (ObjectUtils.isNotEmpty(purchaseBackDetailsBo.getQuantity())) {
|
|
|
+ purchaseBackQuantity = purchaseBackQuantity.add(purchaseBackDetailsBo.getQuantity());
|
|
|
+ }
|
|
|
+ }
|
|
|
}
|
|
|
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"));
|
|
|
+ List<DeliverGoodsPo> deliverGoodsPoList = deliverGoodsMap.get(record.getId());
|
|
|
+// List<DeliverGoodsDetailsPoVo> deliverGoodsDetailList = purchaseDetailVo.getDeliverGoodsDetailList();
|
|
|
+ if (ObjectUtils.isNotEmpty(deliverGoodsPoList)) {
|
|
|
+ String logisticsCode = deliverGoodsPoList.stream().map(DeliverGoodsPo::getLogisticsCode).collect(Collectors.joining("\r\n"));
|
|
|
newPayExportExcel.setLogisticsCode(logisticsCode);
|
|
|
}
|
|
|
|
|
@@ -855,13 +915,13 @@ public class PurchaseServiceImpl extends ServiceImpl<PurchaseMapper, Purchase>
|
|
|
}
|
|
|
|
|
|
}
|
|
|
- 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();
|
|
|
- }
|
|
|
+// 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);
|
|
|
}
|