Procházet zdrojové kódy

采购付款数据添加Excel导出

yzc před 1 rokem
rodič
revize
f4553dacde

+ 43 - 0
hx-purchase/src/main/java/com/fjhx/purchase/entity/PurchaseBackDetailsBo.java

@@ -0,0 +1,43 @@
+package com.fjhx.purchase.entity;
+
+import com.baomidou.mybatisplus.annotation.TableName;
+import com.ruoyi.common.core.domain.BasePo;
+import lombok.Getter;
+import lombok.Setter;
+
+import java.math.BigDecimal;
+
+/**
+ * <p>
+ * 采购退货明细
+ * </p>
+ *
+ * @author 
+ * @since 2023-05-19
+ */
+@Getter
+@Setter
+@TableName("purchase_back_details")
+public class PurchaseBackDetailsBo extends BasePo {
+
+    /**
+     * 采购退货id
+     */
+    private Long purchaseBackId;
+
+    /**
+     * 采购明细id
+     */
+    private Long purchaseDetailsId;
+
+    /**
+     * 产品id
+     */
+    private Long productId;
+
+    /**
+     * 退货数量
+     */
+    private BigDecimal quantity;
+
+}

+ 2 - 0
hx-purchase/src/main/java/com/fjhx/purchase/entity/deliver/DeliverGoodsPo.java

@@ -38,4 +38,6 @@ public class DeliverGoodsPo extends BasePo {
      */
     private Integer status;
 
+    private String logisticsCode;
+
 }

+ 10 - 1
hx-purchase/src/main/java/com/fjhx/purchase/entity/purchase/PayExportExcel.java

@@ -20,7 +20,11 @@ public class PayExportExcel {
     @ColumnWidth(20)
     @ExcelProperty("物品编码")
     private String productCode;
-    @ExcelProperty("规格")
+    @ColumnWidth(20)
+    @ExcelProperty("物品名称")
+    private String productName;
+    @ColumnWidth(20)
+    @ExcelProperty("物品规格")
     private String productSpec;
     @ExcelProperty("单位")
     private String productUnit;
@@ -31,6 +35,8 @@ public class PayExportExcel {
     private BigDecimal price;
     @ExcelProperty("金额")
     private BigDecimal amount;
+    @ExcelProperty("运费")
+    private String freight;
     @ColumnWidth(20)
     @ExcelProperty("优惠金额")
     private String preferential;
@@ -38,6 +44,9 @@ public class PayExportExcel {
     @ExcelProperty("付款账号")
     private String payAccount;
     @ColumnWidth(20)
+    @ExcelProperty("采购总金额")
+    private BigDecimal purchaseAmount;
+    @ColumnWidth(20)
     @ExcelProperty("付款金额")
     private BigDecimal payAmount;
     @ColumnWidth(20)

+ 3 - 0
hx-purchase/src/main/java/com/fjhx/purchase/mapper/purchase/PurchaseMapper.java

@@ -5,6 +5,7 @@ import com.baomidou.mybatisplus.core.mapper.BaseMapper;
 import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
 import com.fjhx.purchase.entity.purchase.dto.PurchaseDto;
 import com.fjhx.purchase.entity.purchase.po.Purchase;
+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.wms.entity.PurchaseDetailPo;
@@ -69,4 +70,6 @@ public interface PurchaseMapper extends BaseMapper<Purchase> {
      * 获取采购次品数量
      */
     List<QualityDetail> getPurchaseDisqualificationQuantity(@Param("purchaseId") Long purchaseId);
+
+    List<PurchaseDetailVo>getArrayInfoById(@Param("ew") IWrapper<Object> wrapper);
 }

+ 7 - 0
hx-purchase/src/main/java/com/fjhx/purchase/service/WdlyService.java

@@ -1,6 +1,7 @@
 package com.fjhx.purchase.service;
 
 import com.fjhx.purchase.entity.AbnormalDetailsBo;
+import com.fjhx.purchase.entity.PurchaseBackDetailsBo;
 import com.fjhx.purchase.entity.deliver.DeliverGoodsDetailsPo;
 import com.fjhx.purchase.entity.deliver.DeliverGoodsPo;
 import com.fjhx.purchase.entity.purchase.vo.PurchaseVo;
@@ -27,4 +28,10 @@ public interface WdlyService {
 
     List<AbnormalDetailsBo> getAbnormalDetails(List<Long>purchaseIds);
 
+    /**
+     * 根据采购明细id 获取采购退货记录
+     */
+    List<PurchaseBackDetailsBo> getPurchaseBackDetails(List<Long> getPurchaseDetailsIds);
+
+    List<DeliverGoodsPo> getDeliverGoodsInfo(List<Long> purchaseIds);
 }

+ 3 - 0
hx-purchase/src/main/java/com/fjhx/purchase/service/purchase/PurchasePayRecordDetailService.java

@@ -5,6 +5,7 @@ import com.fjhx.purchase.entity.purchase.dto.PurchasePayRecordDetailSelectDto;
 import com.fjhx.purchase.entity.purchase.po.PurchasePayRecordDetail;
 import com.fjhx.purchase.entity.purchase.vo.PurchasePayRecordDetailVo;
 import com.ruoyi.common.core.service.BaseService;
+import com.ruoyi.common.utils.wrapper.IWrapper;
 
 import java.util.List;
 
@@ -30,4 +31,6 @@ public interface PurchasePayRecordDetailService extends BaseService<PurchasePayR
     void empty(PurchasePayRecordDetailSelectDto dto);
 
     List<PurchasePayRecordDetailVo> getList(PurchasePayRecordDetailSelectDto dto);
+
+    List<PurchasePayRecordDetailVo> getList(IWrapper<PurchasePayRecordDetail> wrapper);
 }

+ 6 - 0
hx-purchase/src/main/java/com/fjhx/purchase/service/purchase/impl/PurchasePayRecordDetailServiceImpl.java

@@ -89,4 +89,10 @@ public class PurchasePayRecordDetailServiceImpl extends ServiceImpl<PurchasePayR
         return baseMapper.getList(wrapper);
     }
 
+
+    @Override
+    public List<PurchasePayRecordDetailVo> getList(IWrapper<PurchasePayRecordDetail> wrapper){
+        return baseMapper.getList(wrapper);
+    }
+
 }

+ 119 - 59
hx-purchase/src/main/java/com/fjhx/purchase/service/purchase/impl/PurchaseServiceImpl.java

@@ -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);
     }

+ 15 - 3
hx-purchase/src/main/resources/mapper/purchase/PurchaseMapper.xml

@@ -37,11 +37,10 @@
         FROM purchase p
                  LEFT JOIN purchase_detail pd ON pd.purchase_id = p.id
                  LEFT JOIN bytesailing_item.product_info pi ON pd.bussiness_id = pi.id
-                 LEFT JOIN bytesailing_base.sys_dept de
-                           ON CAST(json_unquote(pi.victoriatourist_json -> '$.deptId') AS UNSIGNED) = de.dept_id
+                 LEFT JOIN bytesailing_base.sys_dept de ON pi.deptIdWdly = de.dept_id
                  LEFT JOIN bytesailing_victoriatourist.deliver_goods dg ON dg.purchase_id = p.id
             ${ew.customSqlSegment}
-        </sql>
+    </sql>
     <select id="paymentBill" resultType="com.fjhx.purchase.entity.purchase.dto.PurchaseDto">
         SELECT
             pu.code,
@@ -115,5 +114,18 @@
         GROUP BY
             qd.product_info_id
     </select>
+    <select id="getArrayInfoById" resultType="com.fjhx.purchase.entity.purchase.vo.PurchaseDetailVo">
+        SELECT
+            ad.purchase_detail_id as id,
+            IFNULL( sum( swd.receipt_quantity ), 0 ) AS receiptQuantity,
+            IFNULL( sum( qd.total_quantity ), 0 ) AS qualityQuantity,
+            IFNULL( sum( qd.disqualification_quantity ), 0 ) AS noQualifiedCount
+        FROM
+            bytesailing_wms.stock_wait_details swd
+                LEFT JOIN bytesailing_wms.arrival_stock_records_details asrd ON asrd.business_details_id = swd.id
+                LEFT JOIN bytesailing_victoriatourist.quality_details qd ON qd.arrival_stock_records_details_id = asrd.id
+                LEFT JOIN arrival_detail ad ON swd.business_details_id = ad.id
+            ${ew.customSqlSegment}
+    </select>
 
 </mapper>

+ 21 - 0
hx-victoriatourist/src/main/java/com/fjhx/victoriatourist/service/WdlyServiceImpl.java

@@ -5,6 +5,7 @@ import cn.hutool.core.util.ObjectUtil;
 import com.baomidou.dynamic.datasource.toolkit.DynamicDataSourceContextHolder;
 import com.fjhx.common.constant.SourceConstant;
 import com.fjhx.purchase.entity.AbnormalDetailsBo;
+import com.fjhx.purchase.entity.PurchaseBackDetailsBo;
 import com.fjhx.purchase.entity.deliver.DeliverGoodsDetailsPo;
 import com.fjhx.purchase.entity.deliver.DeliverGoodsPo;
 import com.fjhx.purchase.entity.purchase.vo.PurchaseVo;
@@ -14,13 +15,16 @@ import com.fjhx.victoriatourist.entity.abnormal.po.AbnormalInfo;
 import com.fjhx.victoriatourist.entity.abnormal.vo.AbnormalDetailsVo;
 import com.fjhx.victoriatourist.entity.deliver.po.DeliverGoods;
 import com.fjhx.victoriatourist.entity.deliver.po.DeliverGoodsDetails;
+import com.fjhx.victoriatourist.entity.deliver.vo.DeliverGoodsDetailsVo;
 import com.fjhx.victoriatourist.entity.logistics.po.LogisticsInfos;
+import com.fjhx.victoriatourist.entity.purchase.po.PurchaseBackDetails;
 import com.fjhx.victoriatourist.mapper.abnormal.AbnormalDetailsMapper;
 import com.fjhx.victoriatourist.service.abnormal.AbnormalInfoService;
 import com.fjhx.victoriatourist.service.deliver.DeliverGoodsDetailsService;
 import com.fjhx.victoriatourist.service.deliver.DeliverGoodsService;
 import com.fjhx.victoriatourist.service.logistics.LogisticsInfosService;
 import com.fjhx.victoriatourist.service.order.OrderInfoService;
+import com.fjhx.victoriatourist.service.purchase.PurchaseBackDetailsService;
 import com.ruoyi.common.utils.wrapper.IWrapper;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
@@ -42,6 +46,8 @@ public class WdlyServiceImpl implements WdlyService {
     private LogisticsInfosService logisticsInfosService;
     @Autowired
     private AbnormalDetailsMapper abnormalDetailsMapper;
+    @Autowired
+    private PurchaseBackDetailsService purchaseBackDetailsService;
 
     /**
      * 更新发货记录的状态为到货
@@ -111,4 +117,19 @@ public class WdlyServiceImpl implements WdlyService {
         DynamicDataSourceContextHolder.poll();
         return BeanUtil.copyToList(list, AbnormalDetailsBo.class);
     }
+
+    @Override
+    public List<PurchaseBackDetailsBo> getPurchaseBackDetails(List<Long> getPurchaseDetailsIds) {
+        List<PurchaseBackDetails> list = purchaseBackDetailsService.list(q -> q.in(PurchaseBackDetails::getPurchaseDetailsId, getPurchaseDetailsIds));
+        return BeanUtil.copyToList(list, PurchaseBackDetailsBo.class);
+    }
+
+    @Override
+    public List<DeliverGoodsPo> getDeliverGoodsInfo(List<Long> purchaseIds) {
+        List<DeliverGoodsDetailsVo> list = deliverGoodsService.listDeliverGoodsDetails(IWrapper.<DeliverGoods>getWrapper()
+                .in("dg",DeliverGoods::getPurchaseId, purchaseIds)
+                .groupBy("dg.id")
+        );
+        return  BeanUtil.copyToList(list, DeliverGoodsPo.class);
+    }
 }

+ 10 - 4
hx-victoriatourist/src/main/java/com/fjhx/victoriatourist/service/deliver/DeliverGoodsService.java

@@ -1,13 +1,14 @@
 package com.fjhx.victoriatourist.service.deliver;
 
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
 import com.fjhx.purchase.entity.purchase.vo.PurchaseVo;
+import com.fjhx.victoriatourist.entity.deliver.dto.DeliverGoodsDto;
+import com.fjhx.victoriatourist.entity.deliver.dto.DeliverGoodsSelectDto;
 import com.fjhx.victoriatourist.entity.deliver.po.DeliverGoods;
 import com.fjhx.victoriatourist.entity.deliver.vo.DeliverGoodsDetailsVo;
-import com.ruoyi.common.core.service.BaseService;
-import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
 import com.fjhx.victoriatourist.entity.deliver.vo.DeliverGoodsVo;
-import com.fjhx.victoriatourist.entity.deliver.dto.DeliverGoodsSelectDto;
-import com.fjhx.victoriatourist.entity.deliver.dto.DeliverGoodsDto;
+import com.ruoyi.common.core.service.BaseService;
+import com.ruoyi.common.utils.wrapper.IWrapper;
 
 import java.util.List;
 
@@ -60,4 +61,9 @@ public interface DeliverGoodsService extends BaseService<DeliverGoods> {
      * @return
      */
     PurchaseVo arrivalDetail(Long purchaseId);
+
+    /**
+     * 获取发货明细信息
+     */
+    List<DeliverGoodsDetailsVo> listDeliverGoodsDetails(IWrapper<DeliverGoods> wrapper);
 }

+ 5 - 0
hx-victoriatourist/src/main/java/com/fjhx/victoriatourist/service/deliver/impl/DeliverGoodsServiceImpl.java

@@ -475,4 +475,9 @@ public class DeliverGoodsServiceImpl extends ServiceImpl<DeliverGoodsMapper, Del
         return result;
     }
 
+    @Override
+    public List<DeliverGoodsDetailsVo> listDeliverGoodsDetails(IWrapper<DeliverGoods> wrapper){
+        return baseMapper.listDeliverGoodsDetails(wrapper);
+    }
+
 }

+ 9 - 0
hx-wms/src/main/java/com/fjhx/wms/service/stock/impl/StockJournalDetailsServiceImpl.java

@@ -9,6 +9,7 @@ import com.fjhx.common.utils.Assert;
 import com.fjhx.item.entity.product.po.ProductInfo;
 import com.fjhx.item.service.product.ProductInfoService;
 import com.fjhx.item.util.excel.util.ExcelUtil;
+import com.fjhx.tenant.utils.DictUtils;
 import com.fjhx.wms.entity.arrival.po.ArrivalStockRecords;
 import com.fjhx.wms.entity.arrival.po.ArrivalStockRecordsDetails;
 import com.fjhx.wms.entity.stock.bo.StockJournalDetailsExcelBo;
@@ -304,9 +305,17 @@ public class StockJournalDetailsServiceImpl extends ServiceImpl<StockJournalDeta
     @Override
     public void exportExcel(StockJournalSelectDto dto, HttpServletResponse httpServletResponse) {
         IWrapper<StockJournalDetails> wrapper = getPageWrapper(dto);
+
+        //产品单位字典读取
+        Map<String, String> unitDictMap = DictUtils.getDictMap("unit");
+
         List<StockJournalDetailsVo> list = baseMapper.getList(wrapper);
         List<StockJournalDetailsExcelBo> stockJournalDetailsExcelBos = BeanUtil.copyToList(list, StockJournalDetailsExcelBo.class);
         for (StockJournalDetailsExcelBo stockJournalDetailsExcelBo : stockJournalDetailsExcelBos) {
+
+            //赋值产品单位字典
+            stockJournalDetailsExcelBo.setProductUnit(unitDictMap.get(stockJournalDetailsExcelBo.getProductUnit()));
+
             //赋值操作类型
             stockJournalDetailsExcelBo.setOpTypeName(Objects.equals(stockJournalDetailsExcelBo.getOpType(), 1) ? "入库" : "出库");
             //赋值业务类型