|
|
@@ -0,0 +1,272 @@
|
|
|
+package org.dromara.customer.service.impl;
|
|
|
+
|
|
|
+import com.baomidou.mybatisplus.core.metadata.IPage;
|
|
|
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
|
|
|
+import org.apache.dubbo.config.annotation.DubboReference;
|
|
|
+import org.dromara.common.core.utils.MapstructUtils;
|
|
|
+import org.dromara.common.core.utils.StringUtils;
|
|
|
+import org.dromara.common.mybatis.core.page.TableDataInfo;
|
|
|
+import org.dromara.common.mybatis.core.page.PageQuery;
|
|
|
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
|
|
|
+import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
|
|
|
+import com.baomidou.mybatisplus.core.toolkit.Wrappers;
|
|
|
+import lombok.RequiredArgsConstructor;
|
|
|
+import lombok.extern.slf4j.Slf4j;
|
|
|
+import org.dromara.customer.domain.SupplierInfo;
|
|
|
+import org.dromara.customer.domain.vo.SupplierContractVo;
|
|
|
+import org.dromara.customer.domain.vo.SupplyAreaVo;
|
|
|
+import org.dromara.customer.service.ISupplierInfoService;
|
|
|
+import org.dromara.customer.service.ISupplyAreaService;
|
|
|
+import org.dromara.product.api.RemoteCategoryService;
|
|
|
+import org.springframework.beans.BeanUtils;
|
|
|
+import org.springframework.stereotype.Service;
|
|
|
+import org.dromara.customer.domain.bo.SupplierAuthorizeBo;
|
|
|
+import org.dromara.customer.domain.vo.SupplierAuthorizeVo;
|
|
|
+import org.dromara.customer.domain.SupplierAuthorize;
|
|
|
+import org.dromara.customer.mapper.SupplierAuthorizeMapper;
|
|
|
+import org.dromara.customer.service.ISupplierAuthorizeService;
|
|
|
+
|
|
|
+import java.util.*;
|
|
|
+import java.util.stream.Collectors;
|
|
|
+
|
|
|
+/**
|
|
|
+ * 供应能力查询Service业务层处理
|
|
|
+ *
|
|
|
+ * @author LJY
|
|
|
+ * @date 2026-01-15
|
|
|
+ */
|
|
|
+@Slf4j
|
|
|
+@RequiredArgsConstructor
|
|
|
+@Service
|
|
|
+public class SupplierAuthorizeServiceImpl extends ServiceImpl<SupplierAuthorizeMapper, SupplierAuthorize> implements ISupplierAuthorizeService {
|
|
|
+
|
|
|
+ private final SupplierAuthorizeMapper baseMapper;
|
|
|
+
|
|
|
+ private final ISupplierInfoService supplierInfoService;
|
|
|
+
|
|
|
+ private final ISupplyAreaService supplyAreaService;
|
|
|
+
|
|
|
+ @DubboReference
|
|
|
+ private final RemoteCategoryService remoteCategoryService;
|
|
|
+
|
|
|
+ /**
|
|
|
+ * 查询供应能力查询
|
|
|
+ *
|
|
|
+ * @param id 主键
|
|
|
+ * @return 供应能力查询
|
|
|
+ */
|
|
|
+ @Override
|
|
|
+ public SupplierAuthorizeVo queryById(Long id){
|
|
|
+ return baseMapper.selectVoById(id);
|
|
|
+ }
|
|
|
+
|
|
|
+ /**
|
|
|
+ * 分页查询供应能力查询列表
|
|
|
+ *
|
|
|
+ * @param bo 查询条件
|
|
|
+ * @param pageQuery 分页参数
|
|
|
+ * @return 供应能力查询分页列表
|
|
|
+ */
|
|
|
+ @Override
|
|
|
+ public TableDataInfo<SupplierAuthorizeVo> queryPageList(SupplierAuthorizeBo bo, PageQuery pageQuery) {
|
|
|
+ LambdaQueryWrapper<SupplierAuthorize> lqw = buildQueryWrapper(bo);
|
|
|
+ Page<SupplierAuthorizeVo> result = baseMapper.selectVoPage(pageQuery.build(), lqw);
|
|
|
+ return TableDataInfo.build(result);
|
|
|
+ }
|
|
|
+
|
|
|
+ /**
|
|
|
+ * 查询符合条件的供应能力查询列表
|
|
|
+ *
|
|
|
+ * @param bo 查询条件
|
|
|
+ * @return 供应能力查询列表
|
|
|
+ */
|
|
|
+ @Override
|
|
|
+ public List<SupplierAuthorizeVo> queryList(SupplierAuthorizeBo bo) {
|
|
|
+ LambdaQueryWrapper<SupplierAuthorize> lqw = buildQueryWrapper(bo);
|
|
|
+ return baseMapper.selectVoList(lqw);
|
|
|
+ }
|
|
|
+
|
|
|
+ @Override
|
|
|
+ public TableDataInfo<SupplierAuthorizeVo> getSupplyCapacityList(SupplierAuthorizeBo bo, PageQuery pageQuery) {
|
|
|
+ //查询供应商信息
|
|
|
+ IPage<SupplierInfo> result =supplierInfoService.getSupplyCapacityList(bo,pageQuery);
|
|
|
+ List<SupplierInfo> records = result.getRecords();
|
|
|
+ Map<Long,String> supplierCategoryMap = records.stream().collect(Collectors.toMap(SupplierInfo::getId, SupplierInfo::getOperatingCategory));
|
|
|
+
|
|
|
+ Set<Long> allCategoryIds = new HashSet<>();
|
|
|
+ for (String categoryIdStr : supplierCategoryMap.values()) {
|
|
|
+ // 拆分品类ID字符串(如"1,2,3" → ["1","2","3"])
|
|
|
+ String[] idArr = categoryIdStr.split(",");
|
|
|
+ for (String idStr : idArr) {
|
|
|
+ try {
|
|
|
+ Long categoryId = Long.parseLong(idStr.trim()); // 去除空格,避免格式问题
|
|
|
+ allCategoryIds.add(categoryId);
|
|
|
+ } catch (NumberFormatException e) {
|
|
|
+ // 异常处理:ID格式错误时跳过,不影响整体逻辑
|
|
|
+ continue;
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ // 2. 批量查询品类ID→名称的映射
|
|
|
+ Map<Long, String> categoryIdToNameMap = new HashMap<>();
|
|
|
+ if (!allCategoryIds.isEmpty()) {
|
|
|
+ Map<Long, String> categoryNamebyIds = remoteCategoryService.getCategoryNamebyIds(allCategoryIds);
|
|
|
+ }
|
|
|
+
|
|
|
+ /*result.getRecords().stream().map(item -> {
|
|
|
+ SupplierAuthorizeVo supplierAuthorizeVo = new SupplierAuthorizeVo();
|
|
|
+ BeanUtils.copyProperties(item, supplierAuthorizeVo);
|
|
|
+ supplierAuthorizeVo.setSupplierName(item.getSupplierName());
|
|
|
+
|
|
|
+ }).collect(Collectors.toList());*/
|
|
|
+
|
|
|
+ //supplierInfoService
|
|
|
+
|
|
|
+ return null;
|
|
|
+
|
|
|
+ }
|
|
|
+
|
|
|
+ private LambdaQueryWrapper<SupplierAuthorize> buildQueryWrapper(SupplierAuthorizeBo bo) {
|
|
|
+ Map<String, Object> params = bo.getParams();
|
|
|
+ LambdaQueryWrapper<SupplierAuthorize> lqw = Wrappers.lambdaQuery();
|
|
|
+ lqw.orderByAsc(SupplierAuthorize::getId);
|
|
|
+ lqw.eq(StringUtils.isNotBlank(bo.getSupplierNo()), SupplierAuthorize::getSupplierNo, bo.getSupplierNo());
|
|
|
+ lqw.like(StringUtils.isNotBlank(bo.getBrandName()), SupplierAuthorize::getBrandName, bo.getBrandName());
|
|
|
+ lqw.eq(StringUtils.isNotBlank(bo.getAuthorizeType()), SupplierAuthorize::getAuthorizeType, bo.getAuthorizeType());
|
|
|
+ lqw.eq(StringUtils.isNotBlank(bo.getAuthorizationCategory()), SupplierAuthorize::getAuthorizationCategory, bo.getAuthorizationCategory());
|
|
|
+ lqw.eq(StringUtils.isNotBlank(bo.getBrandLicensor()), SupplierAuthorize::getBrandLicensor, bo.getBrandLicensor());
|
|
|
+ lqw.eq(StringUtils.isNotBlank(bo.getAuthorizationRelationshipFile()), SupplierAuthorize::getAuthorizationRelationshipFile, bo.getAuthorizationRelationshipFile());
|
|
|
+ lqw.eq(bo.getAuthorizationStartTime() != null, SupplierAuthorize::getAuthorizationStartTime, bo.getAuthorizationStartTime());
|
|
|
+ lqw.eq(bo.getAuthorizationEndTime() != null, SupplierAuthorize::getAuthorizationEndTime, bo.getAuthorizationEndTime());
|
|
|
+ lqw.eq(StringUtils.isNotBlank(bo.getAuthorizedArea()), SupplierAuthorize::getAuthorizedArea, bo.getAuthorizedArea());
|
|
|
+ lqw.eq(StringUtils.isNotBlank(bo.getBrandHoldType()), SupplierAuthorize::getBrandHoldType, bo.getBrandHoldType());
|
|
|
+ lqw.eq(StringUtils.isNotBlank(bo.getAuthorizeLevel()), SupplierAuthorize::getAuthorizeLevel, bo.getAuthorizeLevel());
|
|
|
+ lqw.eq(StringUtils.isNotBlank(bo.getAuthorizedStatus()), SupplierAuthorize::getAuthorizedStatus, bo.getAuthorizedStatus());
|
|
|
+ lqw.like(StringUtils.isNotBlank(bo.getAuthorizationRelationshipFileName()), SupplierAuthorize::getAuthorizationRelationshipFileName, bo.getAuthorizationRelationshipFileName());
|
|
|
+ lqw.eq(StringUtils.isNotBlank(bo.getBrandRegistrant()), SupplierAuthorize::getBrandRegistrant, bo.getBrandRegistrant());
|
|
|
+ lqw.eq(StringUtils.isNotBlank(bo.getReviewFeedback()), SupplierAuthorize::getReviewFeedback, bo.getReviewFeedback());
|
|
|
+ return lqw;
|
|
|
+ }
|
|
|
+
|
|
|
+ /**
|
|
|
+ * 新增供应能力查询
|
|
|
+ *
|
|
|
+ * @param bo 供应能力查询
|
|
|
+ * @return 是否新增成功
|
|
|
+ */
|
|
|
+ @Override
|
|
|
+ public Boolean insertByBo(SupplierAuthorizeBo bo) {
|
|
|
+ SupplierAuthorize add = MapstructUtils.convert(bo, SupplierAuthorize.class);
|
|
|
+ validEntityBeforeSave(add);
|
|
|
+ boolean flag = baseMapper.insert(add) > 0;
|
|
|
+ return flag;
|
|
|
+ }
|
|
|
+
|
|
|
+ /**
|
|
|
+ * 修改供应能力查询
|
|
|
+ *
|
|
|
+ * @param bo 供应能力查询
|
|
|
+ * @return 是否修改成功
|
|
|
+ */
|
|
|
+ @Override
|
|
|
+ public Boolean updateByBo(SupplierAuthorizeBo bo) {
|
|
|
+ SupplierAuthorize update = MapstructUtils.convert(bo, SupplierAuthorize.class);
|
|
|
+ validEntityBeforeSave(update);
|
|
|
+ return baseMapper.updateById(update) > 0;
|
|
|
+ }
|
|
|
+
|
|
|
+ /**
|
|
|
+ * 保存前的数据校验
|
|
|
+ */
|
|
|
+ private void validEntityBeforeSave(SupplierAuthorize entity){
|
|
|
+ //TODO 做一些数据校验,如唯一约束
|
|
|
+ }
|
|
|
+
|
|
|
+ /**
|
|
|
+ * 校验并批量删除供应能力查询信息
|
|
|
+ *
|
|
|
+ * @param ids 待删除的主键集合
|
|
|
+ * @param isValid 是否进行有效性校验
|
|
|
+ * @return 是否删除成功
|
|
|
+ */
|
|
|
+ @Override
|
|
|
+ public Boolean deleteWithValidByIds(Collection<Long> ids, Boolean isValid) {
|
|
|
+ if(isValid){
|
|
|
+ //TODO 做一些业务上的校验,判断是否需要校验
|
|
|
+ }
|
|
|
+ return baseMapper.deleteByIds(ids) > 0;
|
|
|
+ }
|
|
|
+
|
|
|
+ @Override
|
|
|
+ public List<SupplierAuthorizeVo> getAuthorizeDetailList(Long supplierId) {
|
|
|
+ LambdaQueryWrapper<SupplierAuthorize> lqw = new LambdaQueryWrapper<>();
|
|
|
+ lqw.eq(SupplierAuthorize::getSupplierId, supplierId);
|
|
|
+ List<SupplierAuthorizeVo> supplierAuthorizeVos = baseMapper.selectVoList(lqw);
|
|
|
+ setSupplierNames(supplierAuthorizeVos);
|
|
|
+ //供应区域(省)
|
|
|
+ Map<Long,List<String>> areaMap = supplierAuthorizeVos.stream().collect(Collectors.toMap(
|
|
|
+ SupplierAuthorizeVo::getId,
|
|
|
+ item -> Arrays.stream(item.getAuthorizedArea().split(",")).toList()
|
|
|
+ ));
|
|
|
+ Map<Long,String> provinceMap =supplyAreaService.queryProvincesorCity(supplierId,areaMap,1);
|
|
|
+ provinceMap.forEach((id,province) -> {
|
|
|
+ supplierAuthorizeVos.stream().filter(item -> item.getId().equals(id)).forEach(item -> item.setProvince(province));
|
|
|
+ });
|
|
|
+
|
|
|
+ //供应区域(市)
|
|
|
+ Map<Long,String> cityMap =supplyAreaService.queryProvincesorCity(supplierId,areaMap,2);
|
|
|
+ cityMap.forEach((id,city) -> {
|
|
|
+ supplierAuthorizeVos.stream().filter(item -> item.getId().equals(id)).forEach(item -> item.setCity(city));
|
|
|
+ });
|
|
|
+ //一级 二级 三级 品目
|
|
|
+ Map<Long,Long> categoryMap = supplierAuthorizeVos.stream().collect(Collectors.toMap(
|
|
|
+ SupplierAuthorizeVo::getId,
|
|
|
+ item ->item.getCategoryId()
|
|
|
+ ));
|
|
|
+
|
|
|
+ Map<Long, Map<String, String>> categorysMap = remoteCategoryService.getallCategoryNameById(categoryMap);
|
|
|
+
|
|
|
+ supplierAuthorizeVos.forEach(item -> {
|
|
|
+ Map<String, String> stringStringMap = categorysMap.get(item.getId());
|
|
|
+ item.setCategorysMap(stringStringMap);
|
|
|
+ });
|
|
|
+
|
|
|
+ return supplierAuthorizeVos;
|
|
|
+ }
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+ private void setSupplierNames(List<SupplierAuthorizeVo> records) {
|
|
|
+ if (records == null || records.isEmpty()) {
|
|
|
+ return;
|
|
|
+ }
|
|
|
+ // 提取供应商ID列表
|
|
|
+ List<Long> supplierIds = records.stream()
|
|
|
+ .map(SupplierAuthorizeVo::getSupplierId)
|
|
|
+ .filter(Objects::nonNull)
|
|
|
+ .distinct()
|
|
|
+ .collect(Collectors.toList());
|
|
|
+
|
|
|
+ if (!supplierIds.isEmpty()) {
|
|
|
+ // 查询供应商名称
|
|
|
+ List<SupplierInfo> supplierInfos = supplierInfoService.lambdaQuery()
|
|
|
+ .in(SupplierInfo::getId, supplierIds)
|
|
|
+ .select(SupplierInfo::getId, SupplierInfo::getEnterpriseName)
|
|
|
+ .list();
|
|
|
+
|
|
|
+ // 构建映射关系
|
|
|
+ Map<Long, String> supplierNameMap = supplierInfos.stream()
|
|
|
+ .collect(Collectors.toMap(
|
|
|
+ SupplierInfo::getId,
|
|
|
+ SupplierInfo::getEnterpriseName
|
|
|
+ ));
|
|
|
+
|
|
|
+ // 设置供应商名称
|
|
|
+ records.forEach(record -> {
|
|
|
+ String supplierName = supplierNameMap.get(record.getSupplierId());
|
|
|
+ record.setSupplierName(supplierName);
|
|
|
+ });
|
|
|
+ }
|
|
|
+ }
|
|
|
+}
|