Pārlūkot izejas kodu

申购相关功能修改

yzc 1 gadu atpakaļ
vecāks
revīzija
d0e9524aad

+ 17 - 10
hx-item/src/main/java/com/fjhx/item/service/product/impl/ProductInfoServiceImpl.java

@@ -311,6 +311,9 @@ public class ProductInfoServiceImpl extends ServiceImpl<ProductInfoMapper, Produ
 
         //保存物料信息
         List<ProductBomDetail> productBomDetailList = productInfoDto.getProductBomDetailList();
+        if (ObjectUtil.isNull(productBomDetailList)) {
+            productBomDetailList = new ArrayList<>();
+        }
         productBomDetailList.forEach(item -> item.setProductId(productInfoDto.getId()));
         productBomDetailService.saveBatch(productBomDetailList);
 
@@ -440,9 +443,13 @@ public class ProductInfoServiceImpl extends ServiceImpl<ProductInfoMapper, Produ
 
         //保存物料信息
         List<ProductBomDetail> productBomDetailList = productInfoDto.getProductBomDetailList();
+        if (ObjectUtil.isNull(productBomDetailList)) {
+            productBomDetailList = new ArrayList<>();
+        }
         productBomDetailList.forEach(item -> item.setProductId(productInfoDto.getId()));
         productBomDetailService.editLinked(productBomDetailList, ProductBomDetail::getProductId, productInfoDto.getId());
 
+
         //保存产品定制信息
         saveOrEditCustomInfo(productInfoDto);
     }
@@ -453,18 +460,18 @@ public class ProductInfoServiceImpl extends ServiceImpl<ProductInfoMapper, Produ
     private void saveOrEditCustomInfo(ProductInfoDto productInfoDto) {
         //保存产品定制信息
         List<ProductCustomInfoDto> productCustomInfoList = productInfoDto.getProductCustomInfoList();
-
-        for (ProductCustomInfoDto productCustomInfoDto : productCustomInfoList) {
-            if (ObjectUtil.isEmpty(productCustomInfoDto.getId())) {
-                productCustomInfoDto.setId(IdWorker.getId());
+        if (ObjectUtil.isNotNull(productCustomInfoList)) {
+            for (ProductCustomInfoDto productCustomInfoDto : productCustomInfoList) {
+                if (ObjectUtil.isEmpty(productCustomInfoDto.getId())) {
+                    productCustomInfoDto.setId(IdWorker.getId());
+                }
+                productCustomInfoDto.setProductId(productInfoDto.getId());
+                ObsFileUtil.editFile(productCustomInfoDto.getFileList(), productCustomInfoDto.getId());
             }
-            productCustomInfoDto.setProductId(productInfoDto.getId());
-            ObsFileUtil.editFile(productCustomInfoDto.getFileList(), productCustomInfoDto.getId());
-        }
-
-        List<ProductCustomInfo> productCustomInfos = BeanUtil.copyToList(productCustomInfoList, ProductCustomInfo.class);
-        productCustomInfoService.editLinked(productCustomInfos, ProductCustomInfo::getProductId, productInfoDto.getId());
 
+            List<ProductCustomInfo> productCustomInfos = BeanUtil.copyToList(productCustomInfoList, ProductCustomInfo.class);
+            productCustomInfoService.editLinked(productCustomInfos, ProductCustomInfo::getProductId, productInfoDto.getId());
+        }
     }
 
     /**

+ 5 - 0
hx-purchase/src/main/java/com/fjhx/purchase/entity/subscribe/dto/SubscribeDetailSelectDto.java

@@ -83,4 +83,9 @@ public class SubscribeDetailSelectDto extends BaseSelectDto {
      * 归属公司id
      */
     private Long companyId;
+
+    /**
+     * 是否是待采购页面
+     */
+    private Integer isWaitPurchase;
 }

+ 2 - 0
hx-purchase/src/main/java/com/fjhx/purchase/entity/subscribe/po/Subscribe.java

@@ -117,5 +117,7 @@ public class Subscribe extends BasePo {
 	 */
 	private BigDecimal amountIncludingTax;
 
+	private Long subcribeUserId;
+
 
 }

+ 14 - 8
hx-purchase/src/main/java/com/fjhx/purchase/entity/subscribe/vo/SubscribeDetailVo.java

@@ -132,14 +132,20 @@ public class SubscribeDetailVo extends SubscribeDetail {
 	 */
 	private BigDecimal prodNeedCount;
 
-	/**
-	 * 生产备注
-	 */
-	private String prodRemark;
+    /**
+     * 生产备注
+     */
+    private String prodRemark;
 
-	/**
-	 * 创建人名称
-	 */
-	private String createUserName;
+    /**
+     * 创建人名称
+     */
+    private String createUserName;
+
+
+    private String productColor;
+    private BigDecimal productNetWeight;
+    private String productFrontalTexture;
+    private String productReverseTexture;
 
 }

+ 278 - 275
hx-purchase/src/main/java/com/fjhx/purchase/service/subscribe/impl/SubscribeDetailServiceImpl.java

@@ -55,281 +55,284 @@ import java.util.stream.Collectors;
 @Service
 public class SubscribeDetailServiceImpl extends ServiceImpl<SubscribeDetailMapper, SubscribeDetail> implements SubscribeDetailService {
 
-	@Autowired
-	private ProductInfoService productInfoService;
-
-	@Autowired
-	private PurchaseDetailService purchaseDetailService;
-
-	@Autowired
-	private DictTenantDataService dictTenantDataService;
-
-	@Autowired
-	private CorporationService corporationService;
-	@Autowired
-	private ISysDeptService deptService;
-
-	/**
-	 * 分页
-	 *
-	 * @param dto
-	 * @return
-	 */
-	@Override
-	public Page<SubscribeDetailVo> getPage(SubscribeDetailSelectDto dto) {
-		IWrapper<SubscribeDetail> wrapper = getWrapper();
-		// 申购单号
-		wrapper.like("t2.subscribeCode", dto.getCode());
-		// 申购时间
-		wrapper.between("t2", Subscribe::getCreateTime, dto.getBeginTime(), dto.getEndTime());
-		// 申购状态
-		wrapper.ge("t2", Subscribe::getSubcribeStatus, dto.getSubscribeStatus());
-		// 关键字
-		wrapper.like("t2.subscribeCode", dto.getKeyword());
-		// 状态
-		if (ObjectUtil.isNotEmpty(dto.getStatus())) {
-			wrapper.in("t2", SubscribeDetail::getStatus, Arrays.asList(dto.getStatus().split(",")));
-		}
-
-		// 如果类型存在带入类型查询
-		List<ProductInfoVo> productList = productInfoService.getListByProductType(
-				dto.getProductType(), dto.getDefinition(), dto.getProductName(), dto.getProductCode());
-		if (ObjectUtil.isEmpty(productList)) {
-			return new Page<>();
-		}
-		List<Long> productIds = productList.stream().map(ProductInfoVo::getId).collect(Collectors.toList());
-		wrapper.in("t2", SubscribeDetail::getProductId, productIds);
-
-		// 待采购过滤掉指定状态 例如不要 88 作废
-		if (StrUtil.isNotBlank(dto.getNeStatus())) {
-			wrapper.notIn("t2", SubscribeDetail::getStatus, dto.getNeStatus().split(","));
-		}
-
-		wrapper.eq("t2", SubscribeDetail::getDataType, dto.getDataType());
-
-		//权限过滤:待采购
-		wrapper.in("t2", SubscribeDetail::getCompanyId, SecurityUtils.getCompanyIds());
-		wrapper.eq("t2", SubscribeDetail::getCompanyId, dto.getCompanyId());
-
-
-		wrapper.orderByDesc("t2", SubscribeDetail::getCreateTime);
-
-		//过滤作废的数据
-		wrapper.ne("t2", SubscribeDetail::getStatus, FlowStatusEnum1.CANCELLATION.getKey());
-
-		//过滤要入库的数据
-		wrapper.eq("t2", Subscribe::getIsInStock, 1);
-
-		Page<SubscribeDetailVo> page = this.baseMapper.getPage(dto.getPage(), wrapper);
-		List<SubscribeDetailVo> records = page.getRecords();
-
-		if (records.size() == 0) {
-			return page;
-		}
-
-		//获取部门列表
-		List<SysDept> companyList = deptService.list();
-		Map<Long, String> companyMap = companyList.stream().collect(Collectors.toMap(SysDept::getDeptId, SysDept::getDeptName));
-
-		//获取合同物料数量
-		List<Long> contractIds = records.stream().
-				filter(item -> Objects.equals(item.getDataType(), 1)).map(SubscribeDetail::getContractId).collect(Collectors.toList());
-		List<SubscribeDetailVo> contractCount = new ArrayList<>();
-		if (ObjectUtil.isNotEmpty(contractIds)) {
-			contractCount = baseMapper.getContractCountByContractIds(contractIds);
-		}
-		Map<Long, List<SubscribeDetailVo>> contractCountMap = contractCount.stream().collect(Collectors.groupingBy(SubscribeDetail::getContractId));
-
-		//获取生产公司信息
-		List<Long> companyIds = records.stream().map(SubscribeDetail::getCompanyId).collect(Collectors.toList());
-		Map<Long, String> companyNameMap = DeptUstil.getDeptNameMap(companyIds);
-
-		// 赋值产品信息
-		for (SubscribeDetailVo record : records) {
-			Map<Long, ProductInfoVo> productMap = productList.stream().collect(Collectors.toMap(ProductInfoVo::getId, Function.identity()));
-			ProductInfoVo productInfo = productMap.get(record.getProductId());
-			record.setProductCode(productInfo.getCustomCode());
-			record.setProductName(productInfo.getName());
-			record.setProductType(productInfo.getType());
-			record.setProductCategory(productInfo.getClassifyName());
-			record.setProductUnit(productInfo.getUnit());
-			record.setProductDefinition(productInfo.getDefinition());
-			record.setProductCustomCode(productInfo.getCustomCode());
-			record.setProductSpec(productInfo.getSpec());
-
-			record.setProductLength(productInfo.getLength());
-			record.setProductWidth(productInfo.getWidth());
-			record.setProductHeight(productInfo.getHeight());
-
-
-			//赋值生产公司名称
-			record.setCompanyName(companyNameMap.get(record.getCompanyId()));
-
-			//赋值生产需求量
-			List<SubscribeDetailVo> subscribeDetailList = contractCountMap.get(record.getContractId());
-			if (ObjectUtil.isNotEmpty(subscribeDetailList)) {
-				Map<Long, BigDecimal> collect = subscribeDetailList.stream().collect(Collectors.toMap(SubscribeDetail::getProductId, SubscribeDetail::getCount));
-				BigDecimal bigDecimal = collect.get(record.getProductId());
-				record.setProdNeedCount(bigDecimal);
-			}
-		}
-
-		// 赋值采购数量
-		List<Long> subscribeDetailIds = records.stream().map(SubscribeDetail::getId).collect(Collectors.toList());
-		List<PurchaseDetailVo> purchaseDetailsList = purchaseDetailService.getPurchaseCountListBySubscribeDetailIds(subscribeDetailIds);
+    @Autowired
+    private ProductInfoService productInfoService;
+
+    @Autowired
+    private PurchaseDetailService purchaseDetailService;
+
+    @Autowired
+    private DictTenantDataService dictTenantDataService;
+
+    @Autowired
+    private CorporationService corporationService;
+    @Autowired
+    private ISysDeptService deptService;
+
+    /**
+     * 分页
+     *
+     * @param dto
+     * @return
+     */
+    @Override
+    public Page<SubscribeDetailVo> getPage(SubscribeDetailSelectDto dto) {
+        IWrapper<SubscribeDetail> wrapper = getWrapper();
+        // 申购单号
+        wrapper.like("t2.subscribeCode", dto.getCode());
+        // 申购时间
+        wrapper.between("t2", Subscribe::getCreateTime, dto.getBeginTime(), dto.getEndTime());
+        // 申购状态
+        wrapper.ge("t2", Subscribe::getSubcribeStatus, dto.getSubscribeStatus());
+        // 关键字
+        wrapper.like("t2.subscribeCode", dto.getKeyword());
+        // 状态
+        if (ObjectUtil.isNotEmpty(dto.getStatus())) {
+            wrapper.in("t2", SubscribeDetail::getStatus, Arrays.asList(dto.getStatus().split(",")));
+        }
+
+        // 如果类型存在带入类型查询
+        List<ProductInfoVo> productList = productInfoService.getListByProductType(
+                dto.getProductType(), dto.getDefinition(), dto.getProductName(), dto.getProductCode());
+        if (ObjectUtil.isEmpty(productList)) {
+            return new Page<>();
+        }
+        List<Long> productIds = productList.stream().map(ProductInfoVo::getId).collect(Collectors.toList());
+        wrapper.in("t2", SubscribeDetail::getProductId, productIds);
+
+        // 待采购过滤掉指定状态 例如不要 88 作废
+        if (StrUtil.isNotBlank(dto.getNeStatus())) {
+            wrapper.notIn("t2", SubscribeDetail::getStatus, dto.getNeStatus().split(","));
+        }
+
+        wrapper.eq("t2", SubscribeDetail::getDataType, dto.getDataType());
+
+        //权限过滤:待采购
+        wrapper.in("t2", SubscribeDetail::getCompanyId, SecurityUtils.getCompanyIds());
+        wrapper.eq("t2", SubscribeDetail::getCompanyId, dto.getCompanyId());
+
+
+        wrapper.orderByDesc("t2", SubscribeDetail::getCreateTime);
+
+        //过滤作废的数据
+        wrapper.ne("t2", SubscribeDetail::getStatus, FlowStatusEnum1.CANCELLATION.getKey());
+
+        //如果是待采购页面
+        if (ObjectUtil.equals(dto.getIsWaitPurchase(), 1)) {
+            //过滤要入库的数据
+            wrapper.eq("t2", Subscribe::getIsInStock, 1);
+        }
+
+        Page<SubscribeDetailVo> page = this.baseMapper.getPage(dto.getPage(), wrapper);
+        List<SubscribeDetailVo> records = page.getRecords();
+
+        if (records.size() == 0) {
+            return page;
+        }
+
+        //获取部门列表
+        List<SysDept> companyList = deptService.list();
+        Map<Long, String> companyMap = companyList.stream().collect(Collectors.toMap(SysDept::getDeptId, SysDept::getDeptName));
+
+        //获取合同物料数量
+        List<Long> contractIds = records.stream().
+                filter(item -> Objects.equals(item.getDataType(), 1)).map(SubscribeDetail::getContractId).collect(Collectors.toList());
+        List<SubscribeDetailVo> contractCount = new ArrayList<>();
+        if (ObjectUtil.isNotEmpty(contractIds)) {
+            contractCount = baseMapper.getContractCountByContractIds(contractIds);
+        }
+        Map<Long, List<SubscribeDetailVo>> contractCountMap = contractCount.stream().collect(Collectors.groupingBy(SubscribeDetail::getContractId));
+
+        //获取生产公司信息
+        List<Long> companyIds = records.stream().map(SubscribeDetail::getCompanyId).collect(Collectors.toList());
+        Map<Long, String> companyNameMap = DeptUstil.getDeptNameMap(companyIds);
+
+        // 赋值产品信息
+        for (SubscribeDetailVo record : records) {
+            Map<Long, ProductInfoVo> productMap = productList.stream().collect(Collectors.toMap(ProductInfoVo::getId, Function.identity()));
+            ProductInfoVo productInfo = productMap.get(record.getProductId());
+            record.setProductCode(productInfo.getCustomCode());
+            record.setProductName(productInfo.getName());
+            record.setProductType(productInfo.getType());
+            record.setProductCategory(productInfo.getClassifyName());
+            record.setProductUnit(productInfo.getUnit());
+            record.setProductDefinition(productInfo.getDefinition());
+            record.setProductCustomCode(productInfo.getCustomCode());
+            record.setProductSpec(productInfo.getSpec());
+
+            record.setProductLength(productInfo.getLength());
+            record.setProductWidth(productInfo.getWidth());
+            record.setProductHeight(productInfo.getHeight());
+
+
+            //赋值生产公司名称
+            record.setCompanyName(companyNameMap.get(record.getCompanyId()));
+
+            //赋值生产需求量
+            List<SubscribeDetailVo> subscribeDetailList = contractCountMap.get(record.getContractId());
+            if (ObjectUtil.isNotEmpty(subscribeDetailList)) {
+                Map<Long, BigDecimal> collect = subscribeDetailList.stream().collect(Collectors.toMap(SubscribeDetail::getProductId, SubscribeDetail::getCount));
+                BigDecimal bigDecimal = collect.get(record.getProductId());
+                record.setProdNeedCount(bigDecimal);
+            }
+        }
+
+        // 赋值采购数量
+        List<Long> subscribeDetailIds = records.stream().map(SubscribeDetail::getId).collect(Collectors.toList());
+        List<PurchaseDetailVo> purchaseDetailsList = purchaseDetailService.getPurchaseCountListBySubscribeDetailIds(subscribeDetailIds);
 //        List<PurchaseDetail> purchaseDetailsList = purchaseDetailService.list(q -> q.in(PurchaseDetail::getSubscribeDetailId, subscribeDetailIds));
-		Map<Long, List<PurchaseDetail>> purchaseDetailsMap = purchaseDetailsList.stream().collect(Collectors.groupingBy(PurchaseDetail::getSubscribeDetailId));
-		for (SubscribeDetailVo subscribeDetailVo : records) {
-			List<PurchaseDetail> purchaseDetails = purchaseDetailsMap.get(subscribeDetailVo.getId());
-			if (ObjectUtil.isEmpty(purchaseDetails)) {
-				subscribeDetailVo.setPurchaseCount(BigDecimal.ZERO);
-				continue;
-			}
-			BigDecimal count = purchaseDetails.stream().map(PurchaseDetail::getCount).reduce(BigDecimal.ZERO, BigDecimal::add);
-			subscribeDetailVo.setPurchaseCount(count);
-
-
-			//赋值归属公司
-			subscribeDetailVo.setCompanyName(companyMap.get(subscribeDetailVo.getCompanyId()));
-		}
-
-		corporationService.attributeAssign(records, SubscribeDetailVo::getCorporationId, (item, corporation) -> {
-			item.setCorporationName(corporation.getName());
-		});
-
-		//赋值创建人名称
-		UserUtil.assignmentNickName(records, SubscribeDetail::getCreateUser, SubscribeDetailVo::setCreateUserName);
-
-		return page;
-	}
-
-	/**
-	 * 根据IDS获取明细
-	 *
-	 * @param ids
-	 * @return
-	 */
-	@Override
-	public List<SubscribeDetailVo> detail(List<Long> ids) {
-		if (CollectionUtils.isEmpty(ids)) {
-			throw new ServiceException("参数异常");
-		}
-		List<SubscribeDetailVo> list = baseMapper.getDetail(ids);
-		if (CollectionUtils.isNotEmpty(list)) {
-			//根据申购businessId取出所有产品
-			List<Long> productIds = list.stream().map(SubscribeDetail::getProductId).collect(Collectors.toList());
-			List<ProductInfoVo> productInfoVos = productInfoService.getListByProductIds(productIds);
-			Map<Long, List<ProductInfoVo>> productMap = productInfoVos.stream().collect(Collectors.groupingBy(ProductInfoVo::getId));
-			for (SubscribeDetailVo s : list) {
-				if (MapUtils.isNotEmpty(productMap)) {
-					ProductInfoVo p = productMap.get(s.getProductId()).get(0);
-					s.setProductCategory(p.getClassifyName());
-					s.setProductCode(p.getCode());
-					s.setProductUnit(p.getUnit());
-					s.setProductType(p.getType());
-					s.setProductName(p.getName());
-					s.setProductSpec(p.getSpec());
-					s.setProductCustomCode(p.getCustomCode());
-					s.setProductDefinition(p.getDefinition());
-					s.setProductLength(p.getLength());
-					s.setProductWidth(p.getWidth());
-					s.setProductHeight(p.getHeight());
-				}
-			}
-		}
-
-		// 赋值采购数量
-		List<Long> subscribeDetailIds = list.stream().map(SubscribeDetail::getId).collect(Collectors.toList());
-		List<PurchaseDetailVo> purchaseDetailsList = purchaseDetailService.getPurchaseCountListBySubscribeDetailIds(subscribeDetailIds);
-		Map<Long, List<PurchaseDetail>> purchaseDetailsMap = purchaseDetailsList.stream().collect(Collectors.groupingBy(PurchaseDetail::getSubscribeDetailId));
-		for (SubscribeDetailVo subscribeDetailVo : list) {
-			List<PurchaseDetail> purchaseDetails = purchaseDetailsMap.get(subscribeDetailVo.getId());
-			if (ObjectUtil.isEmpty(purchaseDetails)) {
-				subscribeDetailVo.setPurchaseCount(BigDecimal.ZERO);
-				continue;
-			}
-			BigDecimal count = purchaseDetails.stream().map(PurchaseDetail::getCount).reduce(BigDecimal.ZERO, BigDecimal::add);
-			subscribeDetailVo.setPurchaseCount(count);
-		}
-
-
-		return list;
-	}
-
-	@Override
-	public void add(SubscribeDetailDto subscribeDetailDto) {
-		this.save(subscribeDetailDto);
-	}
-
-	@Override
-	public void edit(SubscribeDetailDto subscribeDetailDto) {
-		this.updateById(subscribeDetailDto);
-	}
-
-	@Override
-	public void delete(Long id) {
-		this.removeById(id);
-	}
-
-	/**
-	 * 申购统计(申购单分页)
-	 */
-	@Override
-	public Map<String, Object> subscribeStatistics(SubscribeDetailSelectDto dto) {
-		//存放申购统计数据
-		Map<String, Object> map = new HashMap<>();
-
-		//存放申购统计详情数据
-		List<Map<String, Object>> list = new ArrayList<>();
-
-		QueryWrapper<Object> query = Wrappers.query();
-		query.groupBy("pi.type");
-		//查询申购统计(产品类型分组)
-		List<SubscribeDetailVo> subscribeDetailVos = baseMapper.subscribeStatistics(query);
-		Map<String, List<SubscribeDetailVo>> subscribeDetailVoMap = subscribeDetailVos.stream()
-				.collect(Collectors.groupingBy(SubscribeDetailVo::getType));
-
-		//计算申购笔合计数据
-		Integer amount = subscribeDetailVos.stream().map(SubscribeDetailVo::getCounts).reduce(Integer::sum).orElse(0);
-		map.put("amount", amount);
-		//计算申购货品种类合计数据
-		Integer typeAmount = subscribeDetailVos.stream().map(SubscribeDetailVo::getTypeCount).reduce(Integer::sum).orElse(0);
-		map.put("typeAmount", typeAmount);
-		//切换数据源
-		DynamicDataSourceContextHolder.push(SourceConstant.BASE);
-		//获取产品类型字典数据
-		List<DictTenantDataVo> dictTenantDataVoList = getDict("product_type");
-		DynamicDataSourceContextHolder.poll();
-
-		if (ObjectUtil.isEmpty(dictTenantDataVoList)) {
-			throw new ServiceException("数据有误:产品没有配置产品类型字典,请先添加产品类型字典");
-		}
-
-		//赋值笔数、货品种类数据
-		for (DictTenantDataVo dictTenantDataVo : dictTenantDataVoList) {
-			//设置初始值
-			Map<String, Object> typeMap = new HashMap<>();
-			typeMap.put("type", dictTenantDataVo.getDictValue());
-			typeMap.put("count", 0);
-			typeMap.put("typeCount", 0);
-
-			//赋值
-			List<SubscribeDetailVo> subscribeDetailVoList = subscribeDetailVoMap.get(dictTenantDataVo.getDictKey());
-			if (ObjectUtil.isNotEmpty(subscribeDetailVoList)) {
-				typeMap.put("count", subscribeDetailVoList.get(0).getCounts());
-				typeMap.put("typeCount", subscribeDetailVoList.get(0).getTypeCount());
-			}
-			list.add(typeMap);
-		}
-		map.put("productTypeList", list);
-		return map;
-	}
-
-	//根据字典编码获取字典的数据
-	private List<DictTenantDataVo> getDict(String code) {
-		DictTenantDataSelectDto dto = new DictTenantDataSelectDto();
-		dto.setDictCode(code);
-		return dictTenantDataService.getList(dto);
-	}
+        Map<Long, List<PurchaseDetail>> purchaseDetailsMap = purchaseDetailsList.stream().collect(Collectors.groupingBy(PurchaseDetail::getSubscribeDetailId));
+        for (SubscribeDetailVo subscribeDetailVo : records) {
+            List<PurchaseDetail> purchaseDetails = purchaseDetailsMap.get(subscribeDetailVo.getId());
+            if (ObjectUtil.isEmpty(purchaseDetails)) {
+                subscribeDetailVo.setPurchaseCount(BigDecimal.ZERO);
+                continue;
+            }
+            BigDecimal count = purchaseDetails.stream().map(PurchaseDetail::getCount).reduce(BigDecimal.ZERO, BigDecimal::add);
+            subscribeDetailVo.setPurchaseCount(count);
+
+
+            //赋值归属公司
+            subscribeDetailVo.setCompanyName(companyMap.get(subscribeDetailVo.getCompanyId()));
+        }
+
+        corporationService.attributeAssign(records, SubscribeDetailVo::getCorporationId, (item, corporation) -> {
+            item.setCorporationName(corporation.getName());
+        });
+
+        //赋值创建人名称
+        UserUtil.assignmentNickName(records, SubscribeDetail::getCreateUser, SubscribeDetailVo::setCreateUserName);
+
+        return page;
+    }
+
+    /**
+     * 根据IDS获取明细
+     *
+     * @param ids
+     * @return
+     */
+    @Override
+    public List<SubscribeDetailVo> detail(List<Long> ids) {
+        if (CollectionUtils.isEmpty(ids)) {
+            throw new ServiceException("参数异常");
+        }
+        List<SubscribeDetailVo> list = baseMapper.getDetail(ids);
+        if (CollectionUtils.isNotEmpty(list)) {
+            //根据申购businessId取出所有产品
+            List<Long> productIds = list.stream().map(SubscribeDetail::getProductId).collect(Collectors.toList());
+            List<ProductInfoVo> productInfoVos = productInfoService.getListByProductIds(productIds);
+            Map<Long, List<ProductInfoVo>> productMap = productInfoVos.stream().collect(Collectors.groupingBy(ProductInfoVo::getId));
+            for (SubscribeDetailVo s : list) {
+                if (MapUtils.isNotEmpty(productMap)) {
+                    ProductInfoVo p = productMap.get(s.getProductId()).get(0);
+                    s.setProductCategory(p.getClassifyName());
+                    s.setProductCode(p.getCode());
+                    s.setProductUnit(p.getUnit());
+                    s.setProductType(p.getType());
+                    s.setProductName(p.getName());
+                    s.setProductSpec(p.getSpec());
+                    s.setProductCustomCode(p.getCustomCode());
+                    s.setProductDefinition(p.getDefinition());
+                    s.setProductLength(p.getLength());
+                    s.setProductWidth(p.getWidth());
+                    s.setProductHeight(p.getHeight());
+                }
+            }
+        }
+
+        // 赋值采购数量
+        List<Long> subscribeDetailIds = list.stream().map(SubscribeDetail::getId).collect(Collectors.toList());
+        List<PurchaseDetailVo> purchaseDetailsList = purchaseDetailService.getPurchaseCountListBySubscribeDetailIds(subscribeDetailIds);
+        Map<Long, List<PurchaseDetail>> purchaseDetailsMap = purchaseDetailsList.stream().collect(Collectors.groupingBy(PurchaseDetail::getSubscribeDetailId));
+        for (SubscribeDetailVo subscribeDetailVo : list) {
+            List<PurchaseDetail> purchaseDetails = purchaseDetailsMap.get(subscribeDetailVo.getId());
+            if (ObjectUtil.isEmpty(purchaseDetails)) {
+                subscribeDetailVo.setPurchaseCount(BigDecimal.ZERO);
+                continue;
+            }
+            BigDecimal count = purchaseDetails.stream().map(PurchaseDetail::getCount).reduce(BigDecimal.ZERO, BigDecimal::add);
+            subscribeDetailVo.setPurchaseCount(count);
+        }
+
+
+        return list;
+    }
+
+    @Override
+    public void add(SubscribeDetailDto subscribeDetailDto) {
+        this.save(subscribeDetailDto);
+    }
+
+    @Override
+    public void edit(SubscribeDetailDto subscribeDetailDto) {
+        this.updateById(subscribeDetailDto);
+    }
+
+    @Override
+    public void delete(Long id) {
+        this.removeById(id);
+    }
+
+    /**
+     * 申购统计(申购单分页)
+     */
+    @Override
+    public Map<String, Object> subscribeStatistics(SubscribeDetailSelectDto dto) {
+        //存放申购统计数据
+        Map<String, Object> map = new HashMap<>();
+
+        //存放申购统计详情数据
+        List<Map<String, Object>> list = new ArrayList<>();
+
+        QueryWrapper<Object> query = Wrappers.query();
+        query.groupBy("pi.type");
+        //查询申购统计(产品类型分组)
+        List<SubscribeDetailVo> subscribeDetailVos = baseMapper.subscribeStatistics(query);
+        Map<String, List<SubscribeDetailVo>> subscribeDetailVoMap = subscribeDetailVos.stream()
+                .collect(Collectors.groupingBy(SubscribeDetailVo::getType));
+
+        //计算申购笔合计数据
+        Integer amount = subscribeDetailVos.stream().map(SubscribeDetailVo::getCounts).reduce(Integer::sum).orElse(0);
+        map.put("amount", amount);
+        //计算申购货品种类合计数据
+        Integer typeAmount = subscribeDetailVos.stream().map(SubscribeDetailVo::getTypeCount).reduce(Integer::sum).orElse(0);
+        map.put("typeAmount", typeAmount);
+        //切换数据源
+        DynamicDataSourceContextHolder.push(SourceConstant.BASE);
+        //获取产品类型字典数据
+        List<DictTenantDataVo> dictTenantDataVoList = getDict("product_type");
+        DynamicDataSourceContextHolder.poll();
+
+        if (ObjectUtil.isEmpty(dictTenantDataVoList)) {
+            throw new ServiceException("数据有误:产品没有配置产品类型字典,请先添加产品类型字典");
+        }
+
+        //赋值笔数、货品种类数据
+        for (DictTenantDataVo dictTenantDataVo : dictTenantDataVoList) {
+            //设置初始值
+            Map<String, Object> typeMap = new HashMap<>();
+            typeMap.put("type", dictTenantDataVo.getDictValue());
+            typeMap.put("count", 0);
+            typeMap.put("typeCount", 0);
+
+            //赋值
+            List<SubscribeDetailVo> subscribeDetailVoList = subscribeDetailVoMap.get(dictTenantDataVo.getDictKey());
+            if (ObjectUtil.isNotEmpty(subscribeDetailVoList)) {
+                typeMap.put("count", subscribeDetailVoList.get(0).getCounts());
+                typeMap.put("typeCount", subscribeDetailVoList.get(0).getTypeCount());
+            }
+            list.add(typeMap);
+        }
+        map.put("productTypeList", list);
+        return map;
+    }
+
+    //根据字典编码获取字典的数据
+    private List<DictTenantDataVo> getDict(String code) {
+        DictTenantDataSelectDto dto = new DictTenantDataSelectDto();
+        dto.setDictCode(code);
+        return dictTenantDataService.getList(dto);
+    }
 
 }

+ 223 - 222
hx-purchase/src/main/java/com/fjhx/purchase/service/subscribe/impl/SubscribeServiceImpl.java

@@ -40,15 +40,13 @@ import com.ruoyi.common.exception.ServiceException;
 import com.ruoyi.common.utils.SecurityUtils;
 import com.ruoyi.common.utils.wrapper.IWrapper;
 import com.ruoyi.system.service.ISysDeptService;
+import com.ruoyi.system.utils.UserUtil;
 import org.apache.commons.collections4.MapUtils;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
 
 import java.math.BigDecimal;
-import java.util.ArrayList;
-import java.util.Collections;
-import java.util.List;
-import java.util.Map;
+import java.util.*;
 import java.util.stream.Collectors;
 
 
@@ -63,223 +61,226 @@ import java.util.stream.Collectors;
 //@DS(SourceConstant.PURCHASE)
 @Service
 public class SubscribeServiceImpl extends ServiceImpl<SubscribeMapper, Subscribe> implements SubscribeService {
-	private final SubscribeDetailService subscribeDetailService;
-	private final ProductInfoService productInfoService;
-	private final ISysDeptService deptService;
-	private final CodingRuleService codingRuleService;
-	private final PurchaseService purchaseService;
-	private final PurchaseDetailService purchaseDetailService;
-	private final WarehouseService warehouseService;
-	private final SupplierInfoService supplierInfoService;
-
-	@Autowired
-	public SubscribeServiceImpl(SubscribeDetailService subscribeDetailService, ProductInfoService productInfoService, ISysDeptService deptService, CodingRuleService codingRuleService, PurchaseService purchaseService, PurchaseDetailService purchaseDetailService, WarehouseService warehouseService, SupplierInfoService supplierInfoService) {
-		this.subscribeDetailService = subscribeDetailService;
-		this.productInfoService = productInfoService;
-		this.deptService = deptService;
-		this.codingRuleService = codingRuleService;
-		this.purchaseService = purchaseService;
-		this.purchaseDetailService = purchaseDetailService;
-		this.warehouseService = warehouseService;
-		this.supplierInfoService = supplierInfoService;
-	}
-
-
-	@Override
-	public Page<SubscribeVo> getPage(SubscribeSelectDto dto) {
-		IWrapper<Subscribe> wrapper = getWrapper();
-
-		//权限过滤:申购
-		wrapper.in("s", Subscribe::getCompanyId, SecurityUtils.getCompanyIds());
-		wrapper.eq("s", Subscribe::getCompanyId, dto.getCompanyId());
-
-
-		wrapper.orderByDesc("s", Subscribe::getId);
-		Page<SubscribeVo> page = this.baseMapper.getPage(dto.getPage(), wrapper);
-		return page;
-	}
-
-	/**
-	 * 详情
-	 *
-	 * @param id
-	 * @return
-	 */
-	@Override
-	public SubscribeVo detail(Long id) {
-		if (ObjectUtils.isEmpty(id)) {
-			throw new ServiceException("参数异常");
-		}
-		Subscribe subscribe = this.getById(id);
-		if (ObjectUtils.isEmpty(subscribe)) {
-			throw new ServiceException("数据不存在");
-		}
-		SubscribeVo subscribeVo = BeanUtil.copyProperties(subscribe, SubscribeVo.class);
-
-		//处理申购产品
-		List<SubscribeDetail> subscribeDetailList = subscribeDetailService.list(q -> q.eq(SubscribeDetail::getSubscribeId, id));
-		List<SubscribeDetailVo> subscribeDetailVos = BeanUtil.copyToList(subscribeDetailList, SubscribeDetailVo.class);
-		if (CollectionUtils.isNotEmpty(subscribeDetailList)) {
-			//根据申购businessId取出所有产品
-			List<Long> productIds = subscribeDetailList.stream().map(SubscribeDetail::getProductId).collect(Collectors.toList());
-			List<ProductInfoVo> productInfoVos = productInfoService.getListByProductIds(productIds);
-			Map<Long, List<ProductInfoVo>> productMap = productInfoVos.stream().collect(Collectors.groupingBy(ProductInfoVo::getId));
-			for (SubscribeDetailVo s : subscribeDetailVos) {
-				if (MapUtils.isNotEmpty(productMap)) {
-					ProductInfoVo p = productMap.get(s.getProductId()).get(0);
-					s.setProductCategory(p.getClassifyName());
-					s.setProductCode(p.getCustomCode());
-					s.setProductUnit(p.getUnit());
-					s.setProductType(p.getType());
-					s.setProductName(p.getName());
-					s.setProductDefinition(p.getDefinition());
-
-					s.setProductLength(p.getLength());
-					s.setProductWidth(p.getWidth());
-					s.setProductHeight(p.getHeight());
-
-					p.getColor();
-					p.getNetWeight();
-					p.getFrontalTexture();
-					p.getReverseTexture();
-				}
-			}
-		}
-		subscribeVo.setSubscribeDetailList(subscribeDetailVos);
-
-		//赋值仓库信息
-		Warehouse warehouse = warehouseService.getById(subscribeVo.getPutWarehouseId());
-		if (ObjectUtil.isNotEmpty(warehouse)) {
-			subscribeVo.setPutWarehouseName(warehouse.getName());
-		}
-		//赋值供应商信息
-		SupplierInfo supplierInfo = supplierInfoService.getById(subscribeVo.getSupplierId());
-		if (ObjectUtil.isNotEmpty(supplierInfo)) {
-			subscribeVo.setSupplierName(supplierInfo.getName());
-			subscribeVo.setSupplierContactPerson(supplierInfo.getContactPerson());
-			subscribeVo.setSupplierContactNumber(supplierInfo.getContactNumber());
-			subscribeVo.setSupplierPrivIncludingTax(supplierInfo.getPrivIncludingTax());
-			subscribeVo.setSupplierPrivTaxPoints(supplierInfo.getPrivTaxPoints());
-		}
-		//赋值部门信息
-		SysDept sysDept = deptService.getById(subscribeVo.getDeptId());
-		if (ObjectUtil.isNotEmpty(sysDept)) {
-			subscribeVo.setDeptName(sysDept.getDeptName());
-		}
-		//赋值公司信息
-		SysDept company = deptService.getById(subscribeVo.getDeptId());
-		if (ObjectUtil.isNotEmpty(company)) {
-			subscribeVo.setCompanyName(company.getDeptName());
-		}
-
-		return subscribeVo;
-	}
-
-	@DSTransactional
-	@Override
-	public void add(SubscribeDto subscribe) {
-		SubscribeService subscribeService = SpringUtil.getBean(SubscribeService.class);
-		SubscribeDetailService subscribeDetailService = SpringUtil.getBean(SubscribeDetailService.class);
-		subscribe.setCode(codingRuleService.createCode(CodingRuleEnum.SUBSCRIBE.getKey(), null));
-		subscribeService.save(subscribe);
-		List<SubscribeDetail> SubscribeDetails = subscribe.getSubscribeDetailList();
-		if (CollectionUtils.isNotEmpty(SubscribeDetails)) {
-			for (SubscribeDetail s : SubscribeDetails) {
-				s.setSubscribeId(subscribe.getId());
-			}
-			subscribeDetailService.saveBatch(subscribe.getSubscribeDetailList());
-		}
-	}
-
-	/**
-	 * 编辑
-	 *
-	 * @param subscribeDto
-	 */
-	@DSTransactional
-	@Override
-	public void edit(SubscribeDto subscribeDto) {
-		this.updateById(subscribeDto);
-	}
-
-	@Override
-	public void delete(Long id) {
-		this.removeById(id);
-	}
-
-	@Override
-	public List<SysDept> getDepts(SubscribeDetailSelectDto subscribeDetailDto) {
-		List<Long> deptIds = new ArrayList<>();
-		List<SubscribeDetail> list;
-		String status = subscribeDetailDto.getStatus();
-		if (ObjectUtils.isEmpty(status)) {
-			list = subscribeDetailService.list();
-		} else {
-			String[] split = status.split(",");
-			list = subscribeDetailService.list(q -> q.in(SubscribeDetail::getStatus, split));
-		}
-		if (ObjectUtils.isEmpty(list)) {
-			return new ArrayList<>();
-		}
-		if (ObjectUtils.isEmpty(deptIds)) {
-			return new ArrayList<>();
-		}
-		DynamicDataSourceContextHolder.push(SourceConstant.BASE);
-		List<SysDept> sysDepts = deptService.listByIds(deptIds);
-		DynamicDataSourceContextHolder.poll();
-		return sysDepts;
-	}
-
-	@Override
-	public DecisionAidVo decisionAid(DecisionAidDto dto) {
-		DecisionAidVo decisionAidVo = new DecisionAidVo();
-
-		Long supplyId = dto.getSupplyId();
-		if (supplyId != null) {
-			List<Purchase> purchaseList = purchaseService.list(q -> q.eq(Purchase::getSupplyId, supplyId)
-					.orderByDesc(BaseIdPo::getId).last("limit 3"));
-			decisionAidVo.setPurchaseList(purchaseList);
-		}
-
-		// 产品价格
-		List<Long> productIdList = dto.getProductIdList();
-		if (ObjectUtil.isNotEmpty(productIdList)) {
-
-			Map<Long, List<PurchaseDetail>> map = purchaseDetailService.mapKGroup(PurchaseDetail::getBussinessId, q -> q
-					.select(PurchaseDetail::getBussinessId, PurchaseDetail::getPrice)
-					.in(PurchaseDetail::getBussinessId, productIdList)
-					.orderByDesc(BaseIdPo::getId)
-			);
-
-			List<DecisionAidVo.ProductPrice> productPriceList = new ArrayList<>();
-
-			for (Long productId : productIdList) {
-				List<PurchaseDetail> contractProductList = map.get(productId);
-				DecisionAidVo.ProductPrice productPrice = new DecisionAidVo.ProductPrice();
-				productPrice.setId(productId);
-				if (ObjectUtil.isNotEmpty(contractProductList)) {
-					productPrice.setLastPrice(contractProductList.get(0).getPrice());
-					productPrice.setMaxPrice(contractProductList.stream().map(PurchaseDetail::getPrice).max(BigDecimal::compareTo).get());
-					productPrice.setMinPrice(contractProductList.stream().map(PurchaseDetail::getPrice).min(BigDecimal::compareTo).get());
-				} else {
-					productPrice.setLastPrice(BigDecimal.ZERO);
-					productPrice.setMaxPrice(BigDecimal.ZERO);
-					productPrice.setMinPrice(BigDecimal.ZERO);
-				}
-				productPriceList.add(productPrice);
-
-			}
-
-			productInfoService.attributeAssign(productPriceList, DecisionAidVo.ProductPrice::getId, (item, product) -> {
-				item.setName(product.getName());
-			});
-
-			decisionAidVo.setProductPriceList(productPriceList);
-		} else {
-			decisionAidVo.setProductPriceList(Collections.emptyList());
-		}
-
-		return decisionAidVo;
-	}
+    private final SubscribeDetailService subscribeDetailService;
+    private final ProductInfoService productInfoService;
+    private final ISysDeptService deptService;
+    private final CodingRuleService codingRuleService;
+    private final PurchaseService purchaseService;
+    private final PurchaseDetailService purchaseDetailService;
+    private final WarehouseService warehouseService;
+    private final SupplierInfoService supplierInfoService;
+
+    @Autowired
+    public SubscribeServiceImpl(SubscribeDetailService subscribeDetailService, ProductInfoService productInfoService, ISysDeptService deptService, CodingRuleService codingRuleService, PurchaseService purchaseService, PurchaseDetailService purchaseDetailService, WarehouseService warehouseService, SupplierInfoService supplierInfoService) {
+        this.subscribeDetailService = subscribeDetailService;
+        this.productInfoService = productInfoService;
+        this.deptService = deptService;
+        this.codingRuleService = codingRuleService;
+        this.purchaseService = purchaseService;
+        this.purchaseDetailService = purchaseDetailService;
+        this.warehouseService = warehouseService;
+        this.supplierInfoService = supplierInfoService;
+    }
+
+
+    @Override
+    public Page<SubscribeVo> getPage(SubscribeSelectDto dto) {
+        IWrapper<Subscribe> wrapper = getWrapper();
+
+        //权限过滤:申购
+        wrapper.in("s", Subscribe::getCompanyId, SecurityUtils.getCompanyIds());
+        wrapper.eq("s", Subscribe::getCompanyId, dto.getCompanyId());
+
+
+        wrapper.orderByDesc("s", Subscribe::getId);
+        Page<SubscribeVo> page = this.baseMapper.getPage(dto.getPage(), wrapper);
+        return page;
+    }
+
+    /**
+     * 详情
+     *
+     * @param id
+     * @return
+     */
+    @Override
+    public SubscribeVo detail(Long id) {
+        if (ObjectUtils.isEmpty(id)) {
+            throw new ServiceException("参数异常");
+        }
+        Subscribe subscribe = this.getById(id);
+        if (ObjectUtils.isEmpty(subscribe)) {
+            throw new ServiceException("数据不存在");
+        }
+        SubscribeVo subscribeVo = BeanUtil.copyProperties(subscribe, SubscribeVo.class);
+
+        //处理申购产品
+        List<SubscribeDetail> subscribeDetailList = subscribeDetailService.list(q -> q.eq(SubscribeDetail::getSubscribeId, id));
+        List<SubscribeDetailVo> subscribeDetailVos = BeanUtil.copyToList(subscribeDetailList, SubscribeDetailVo.class);
+        if (CollectionUtils.isNotEmpty(subscribeDetailList)) {
+            //根据申购businessId取出所有产品
+            List<Long> productIds = subscribeDetailList.stream().map(SubscribeDetail::getProductId).collect(Collectors.toList());
+            List<ProductInfoVo> productInfoVos = productInfoService.getListByProductIds(productIds);
+            Map<Long, List<ProductInfoVo>> productMap = productInfoVos.stream().collect(Collectors.groupingBy(ProductInfoVo::getId));
+            for (SubscribeDetailVo s : subscribeDetailVos) {
+                if (MapUtils.isNotEmpty(productMap)) {
+                    ProductInfoVo p = productMap.get(s.getProductId()).get(0);
+                    s.setProductCategory(p.getClassifyName());
+                    s.setProductCode(p.getCustomCode());
+                    s.setProductUnit(p.getUnit());
+                    s.setProductType(p.getType());
+                    s.setProductName(p.getName());
+                    s.setProductDefinition(p.getDefinition());
+
+                    s.setProductLength(p.getLength());
+                    s.setProductWidth(p.getWidth());
+                    s.setProductHeight(p.getHeight());
+
+                    s.setProductColor(p.getColor());
+                    s.setProductNetWeight(p.getNetWeight());
+                    s.setProductFrontalTexture(p.getFrontalTexture());
+                    s.setProductReverseTexture(p.getReverseTexture());
+                }
+            }
+        }
+        subscribeVo.setSubscribeDetailList(subscribeDetailVos);
+
+        //赋值仓库信息
+        Warehouse warehouse = warehouseService.getById(subscribeVo.getPutWarehouseId());
+        if (ObjectUtil.isNotEmpty(warehouse)) {
+            subscribeVo.setPutWarehouseName(warehouse.getName());
+        }
+        //赋值供应商信息
+        SupplierInfo supplierInfo = supplierInfoService.getById(subscribeVo.getSupplierId());
+        if (ObjectUtil.isNotEmpty(supplierInfo)) {
+            subscribeVo.setSupplierName(supplierInfo.getName());
+            subscribeVo.setSupplierContactPerson(supplierInfo.getContactPerson());
+            subscribeVo.setSupplierContactNumber(supplierInfo.getContactNumber());
+            subscribeVo.setSupplierPrivIncludingTax(supplierInfo.getPrivIncludingTax());
+            subscribeVo.setSupplierPrivTaxPoints(supplierInfo.getPrivTaxPoints());
+        }
+        //赋值部门信息
+        SysDept sysDept = deptService.getById(subscribeVo.getDeptId());
+        if (ObjectUtil.isNotEmpty(sysDept)) {
+            subscribeVo.setDeptName(sysDept.getDeptName());
+        }
+        //赋值公司信息
+        SysDept company = deptService.getById(subscribeVo.getDeptId());
+        if (ObjectUtil.isNotEmpty(company)) {
+            subscribeVo.setCompanyName(company.getDeptName());
+        }
+
+        //赋值申购人
+        UserUtil.assignmentNickName(Arrays.asList(subscribeVo), Subscribe::getSubcribeUserId, SubscribeVo::setSubcribeName);
+
+        return subscribeVo;
+    }
+
+    @DSTransactional
+    @Override
+    public void add(SubscribeDto subscribe) {
+        SubscribeService subscribeService = SpringUtil.getBean(SubscribeService.class);
+        SubscribeDetailService subscribeDetailService = SpringUtil.getBean(SubscribeDetailService.class);
+        subscribe.setCode(codingRuleService.createCode(CodingRuleEnum.SUBSCRIBE.getKey(), null));
+        subscribeService.save(subscribe);
+        List<SubscribeDetail> SubscribeDetails = subscribe.getSubscribeDetailList();
+        if (CollectionUtils.isNotEmpty(SubscribeDetails)) {
+            for (SubscribeDetail s : SubscribeDetails) {
+                s.setSubscribeId(subscribe.getId());
+            }
+            subscribeDetailService.saveBatch(subscribe.getSubscribeDetailList());
+        }
+    }
+
+    /**
+     * 编辑
+     *
+     * @param subscribeDto
+     */
+    @DSTransactional
+    @Override
+    public void edit(SubscribeDto subscribeDto) {
+        this.updateById(subscribeDto);
+    }
+
+    @Override
+    public void delete(Long id) {
+        this.removeById(id);
+    }
+
+    @Override
+    public List<SysDept> getDepts(SubscribeDetailSelectDto subscribeDetailDto) {
+        List<Long> deptIds = new ArrayList<>();
+        List<SubscribeDetail> list;
+        String status = subscribeDetailDto.getStatus();
+        if (ObjectUtils.isEmpty(status)) {
+            list = subscribeDetailService.list();
+        } else {
+            String[] split = status.split(",");
+            list = subscribeDetailService.list(q -> q.in(SubscribeDetail::getStatus, split));
+        }
+        if (ObjectUtils.isEmpty(list)) {
+            return new ArrayList<>();
+        }
+        if (ObjectUtils.isEmpty(deptIds)) {
+            return new ArrayList<>();
+        }
+        DynamicDataSourceContextHolder.push(SourceConstant.BASE);
+        List<SysDept> sysDepts = deptService.listByIds(deptIds);
+        DynamicDataSourceContextHolder.poll();
+        return sysDepts;
+    }
+
+    @Override
+    public DecisionAidVo decisionAid(DecisionAidDto dto) {
+        DecisionAidVo decisionAidVo = new DecisionAidVo();
+
+        Long supplyId = dto.getSupplyId();
+        if (supplyId != null) {
+            List<Purchase> purchaseList = purchaseService.list(q -> q.eq(Purchase::getSupplyId, supplyId)
+                    .orderByDesc(BaseIdPo::getId).last("limit 3"));
+            decisionAidVo.setPurchaseList(purchaseList);
+        }
+
+        // 产品价格
+        List<Long> productIdList = dto.getProductIdList();
+        if (ObjectUtil.isNotEmpty(productIdList)) {
+
+            Map<Long, List<PurchaseDetail>> map = purchaseDetailService.mapKGroup(PurchaseDetail::getBussinessId, q -> q
+                    .select(PurchaseDetail::getBussinessId, PurchaseDetail::getPrice)
+                    .in(PurchaseDetail::getBussinessId, productIdList)
+                    .orderByDesc(BaseIdPo::getId)
+            );
+
+            List<DecisionAidVo.ProductPrice> productPriceList = new ArrayList<>();
+
+            for (Long productId : productIdList) {
+                List<PurchaseDetail> contractProductList = map.get(productId);
+                DecisionAidVo.ProductPrice productPrice = new DecisionAidVo.ProductPrice();
+                productPrice.setId(productId);
+                if (ObjectUtil.isNotEmpty(contractProductList)) {
+                    productPrice.setLastPrice(contractProductList.get(0).getPrice());
+                    productPrice.setMaxPrice(contractProductList.stream().map(PurchaseDetail::getPrice).max(BigDecimal::compareTo).get());
+                    productPrice.setMinPrice(contractProductList.stream().map(PurchaseDetail::getPrice).min(BigDecimal::compareTo).get());
+                } else {
+                    productPrice.setLastPrice(BigDecimal.ZERO);
+                    productPrice.setMaxPrice(BigDecimal.ZERO);
+                    productPrice.setMinPrice(BigDecimal.ZERO);
+                }
+                productPriceList.add(productPrice);
+
+            }
+
+            productInfoService.attributeAssign(productPriceList, DecisionAidVo.ProductPrice::getId, (item, product) -> {
+                item.setName(product.getName());
+            });
+
+            decisionAidVo.setProductPriceList(productPriceList);
+        } else {
+            decisionAidVo.setProductPriceList(Collections.emptyList());
+        }
+
+        return decisionAidVo;
+    }
 
 }

+ 4 - 2
hx-purchase/src/main/resources/mapper/subscribe/SubscribeDetailMapper.xml

@@ -14,7 +14,8 @@
                       t2.flow_id,
                       t2.company_id            AS corporationId,
                       null                     AS prodTag,
-                      NULL                     AS prodRemark
+                      NULL                     AS prodRemark,
+                      t2.is_in_stock
                FROM subscribe_detail t1
                         LEFT JOIN subscribe t2 ON t1.subscribe_id = t2.id
                    AND t1.data_type = 0
@@ -31,7 +32,8 @@
                       t2.flow_id,
                       null           AS corporationId,
                       t2.prod_tag    AS prodTag,
-                      t2.prod_remark AS prodRemark
+                      t2.prod_remark AS prodRemark,
+                      null           as is_in_stock
                FROM subscribe_detail t1
                         LEFT JOIN contract t2 ON t1.contract_id = t2.id
                WHERE t1.data_type = 1)) t2