瀏覽代碼

问题处理

yzc 1 年之前
父節點
當前提交
f978ac16f5

+ 5 - 1
hx-mes/src/main/java/com/fjhx/mes/service/report/impl/ReportLossesDetailsServiceImpl.java

@@ -53,6 +53,10 @@ public class ReportLossesDetailsServiceImpl extends ServiceImpl<ReportLossesDeta
         //类型过滤
         wrapper.eq("rld", ReportLossesDetailsVo::getType, dto.getType());
 
+        //时间范围过滤
+        wrapper.ge("rld", ReportLossesDetails::getRepoTime, dto.getBeginTime());
+        wrapper.le("rld", ReportLossesDetails::getRepoTime, dto.getEndTime());
+
         //近n天过滤
         Integer pastDay = dto.getPastDay();
         if (ObjectUtil.isNotEmpty(pastDay)) {
@@ -68,7 +72,7 @@ public class ReportLossesDetailsServiceImpl extends ServiceImpl<ReportLossesDeta
                     .or().like(ProductInfo::getName, dto.getKeyword())
             );
             wrapper.and(q -> q
-                    .in("sjd.product_id", pIds)
+                    .in("rld.material_id", pIds)
                     .or().like("rld.repo_time", dto.getKeyword())
                     .or().like("po.code", dto.getKeyword())
             );

+ 5 - 0
hx-purchase/src/main/java/com/fjhx/purchase/entity/subscribe/vo/SubscribeDetailVo.java

@@ -127,5 +127,10 @@ public class SubscribeDetailVo extends SubscribeDetail {
 
     private String companyName;
 
+    /**
+     * 生产需求量
+     */
+    private BigDecimal prodNeedCount;
+
 
 }

+ 2 - 0
hx-purchase/src/main/java/com/fjhx/purchase/mapper/subscribe/SubscribeDetailMapper.java

@@ -42,4 +42,6 @@ public interface SubscribeDetailMapper extends BaseMapper<SubscribeDetail> {
      * 根据id获取已采购数量
      */
     List<SubscribeDetail> getPurchaseCountByIds(List<Long> ids);
+
+    List<SubscribeDetail> getContractCountByContractIds(List<Long> ids);
 }

+ 224 - 210
hx-purchase/src/main/java/com/fjhx/purchase/service/subscribe/impl/SubscribeDetailServiceImpl.java

@@ -53,83 +53,89 @@ import java.util.stream.Collectors;
 @Service
 public class SubscribeDetailServiceImpl extends ServiceImpl<SubscribeDetailMapper, SubscribeDetail> implements SubscribeDetailService {
 
-	@Autowired
-	private ProductInfoService productInfoService;
-
-	@Autowired
-	private WarehouseService warehouseService;
-
-	@Autowired
-	private PurchaseDetailService purchaseDetailService;
-
-	@Autowired
-	private DictTenantDataService dictTenantDataService;
-
-	@Autowired
-	private CorporationService corporationService;
-
-	/**
-	 * 分页
-	 *
-	 * @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());
-
-		//权限过滤:待采购-子公司看自己的,总公司看全部
-		Long companyId = SecurityUtils.getCompanyId();
-		if (!Objects.equals(companyId, 100L)) {
-			wrapper.eq("t2", SubscribeDetail::getCompanyId, companyId);
-		} else {
-			wrapper.eq("t2", SubscribeDetail::getCompanyId, dto.getCompanyId());
-		}
-
-		//按类型倒序 先显示合同数据 再显示申购数据
-		wrapper.orderByDesc("t2", SubscribeDetail::getDataType);
-		wrapper.orderByDesc("t2", SubscribeDetail::getCreateTime);
-
-		//过滤作废的数据
-		wrapper.ne("t2", SubscribeDetail::getStatus, FlowStatusEnum1.CANCELLATION.getKey());
-
-		Page<SubscribeDetailVo> page = this.baseMapper.getPage(dto.getPage(), wrapper);
-		List<SubscribeDetailVo> records = page.getRecords();
-
-		if (records.size() == 0) {
-			return page;
-		}
-
-		//获取生产公司信息
-		List<Long> companyIds = records.stream().map(SubscribeDetail::getCompanyId).collect(Collectors.toList());
+    @Autowired
+    private ProductInfoService productInfoService;
+
+    @Autowired
+    private WarehouseService warehouseService;
+
+    @Autowired
+    private PurchaseDetailService purchaseDetailService;
+
+    @Autowired
+    private DictTenantDataService dictTenantDataService;
+
+    @Autowired
+    private CorporationService corporationService;
+
+    /**
+     * 分页
+     *
+     * @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());
+
+        //权限过滤:待采购-子公司看自己的,总公司看全部
+        Long companyId = SecurityUtils.getCompanyId();
+        if (!Objects.equals(companyId, 100L)) {
+            wrapper.eq("t2", SubscribeDetail::getCompanyId, companyId);
+        } else {
+            wrapper.eq("t2", SubscribeDetail::getCompanyId, dto.getCompanyId());
+        }
+
+        //按类型倒序 先显示合同数据 再显示申购数据
+        wrapper.orderByDesc("t2", SubscribeDetail::getDataType);
+        wrapper.orderByDesc("t2", SubscribeDetail::getCreateTime);
+
+        //过滤作废的数据
+        wrapper.ne("t2", SubscribeDetail::getStatus, FlowStatusEnum1.CANCELLATION.getKey());
+
+        Page<SubscribeDetailVo> page = this.baseMapper.getPage(dto.getPage(), wrapper);
+        List<SubscribeDetailVo> records = page.getRecords();
+
+        if (records.size() == 0) {
+            return page;
+        }
+
+        //获取合同物料数量
+        List<Long> contractIds = records.stream().
+                filter(item -> Objects.equals(item.getDataType(), 1)).map(SubscribeDetail::getContractId).collect(Collectors.toList());
+        List<SubscribeDetail> contractCount = baseMapper.getContractCountByContractIds(contractIds);
+        Map<Long, List<SubscribeDetail>> 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);
 
         // 赋值产品信息
@@ -152,13 +158,21 @@ public class SubscribeDetailServiceImpl extends ServiceImpl<SubscribeDetailMappe
 
             //赋值生产公司名称
             record.setCompanyName(companyNameMap.get(record.getCompanyId()));
+
+            //赋值生产需求量
+            List<SubscribeDetail> 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));
+        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)) {
@@ -173,136 +187,136 @@ public class SubscribeDetailServiceImpl extends ServiceImpl<SubscribeDetailMappe
             item.setCorporationName(corporation.getName());
         });
 
-		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);
-	}
+        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);
+    }
 
 }

+ 18 - 0
hx-purchase/src/main/resources/mapper/subscribe/SubscribeDetailMapper.xml

@@ -79,4 +79,22 @@
         GROUP BY
         pp.subscribe_detail_id
     </select>
+    <select id="getContractCountByContractIds"
+            resultType="com.fjhx.purchase.entity.subscribe.po.SubscribeDetail">
+        SELECT
+        cpb.contract_id,
+        cpb.material_id AS productId,
+        sum( cpb.quantity * cp.quantity ) AS count
+        FROM
+        contract_product_bom cpb
+        LEFT JOIN contract_product cp ON cpb.contract_product_id = cp.id
+        <where>
+            <foreach collection="ids" item="id" open="cpb.contract_id IN (" separator="," close=")">
+                #{id}
+            </foreach>
+        </where>
+        GROUP BY
+        cpb.contract_id,
+        cpb.material_id
+    </select>
 </mapper>