@Override
  public Response<Paging<Requirement>> findByParams(
      BaseUser user,
      Integer qualifyStatus,
      Integer status,
      String reqName,
      String startAt,
      String endAt,
      Integer pageNo,
      Integer size) {
    Response<Paging<Requirement>> result = new Response<Paging<Requirement>>();

    // 验证用户是否已登入
    if (user == null) {
      log.error("create requirement solution, user must login.");
      result.setError("user.not.login");
      return result;
    }

    // 获取用户对应的供应商信息
    Response<Company> companyRes = companyService.findCompanyByUserId(user.getId());
    if (!companyRes.isSuccess()) {
      log.error("query company failed, error code={}", companyRes.getError());
      result.setError(companyRes.getError());
      return result;
    }

    try {
      Map<String, Object> params = Maps.newHashMap();
      params.put("name", Strings.isNullOrEmpty(reqName) ? null : reqName);
      params.put("qualifyStatus", qualifyStatus);
      params.put("status", status);
      params.put("startAt", startAt);
      params.put("endAt", endAt);

      PageInfo pageInfo = new PageInfo(pageNo, Objects.firstNonNull(size, 10));
      params.putAll(pageInfo.toMap());

      result.setResult(requirementDao.findBySupplier(companyRes.getResult().getId(), params));
    } catch (Exception e) {
      log.error(
          "find requirement solutions failed, supplierId={}, error code={}",
          companyRes.getResult().getId(),
          Throwables.getStackTraceAsString(e));
      result.setError("solution.find.failed");
    }

    return result;
  }
  @Override
  public LoginDTO getUserSession(String code, String password) {
    LoginDTO userFinal = null;

    try {
      User user = userService.findByCodeAndPassword(code, password);

      Teacher testTeacher = teacherService.findByUser(user);

      if (testTeacher != null) {
        userFinal =
            new LoginDTO(
                user.getId(),
                code,
                testTeacher.getName(),
                testTeacher.getLastName(),
                UserType.TEACHER);
      }

      if (testTeacher == null) {
        Attendant testAttendant = attendantService.findByUser(user);
        if (testAttendant == null) {
          Company testCompany = companyService.findById(user.getId());
          userFinal = new LoginDTO(user.getId(), code, testCompany.getName(), "", UserType.COMPANY);
        } else {
          userFinal =
              new LoginDTO(
                  user.getId(),
                  code,
                  testAttendant.getName(),
                  testAttendant.getLastName(),
                  UserType.ATTENDANT);
        }
      }

    } catch (Exception e) {
      System.out.println("User + Password don't match.");
    }

    return userFinal;
  }
예제 #3
0
  public Offer postOffer(
      String title, String description, String location, String url, Integer companyId) {

    Validate.isTrue(
        companyService.exists(companyId), "Company with Id=" + companyId + " does not exist");

    Offer offer = new Offer();
    offer.setTitle(normalize(title));
    offer.setDescription(normalize(description));
    offer.setLocation(normalize(location));
    offer.setUrl(normalize(url));
    offer.setPublicationDate(new Date());
    offer.setUpdated(new Date());
    offer.setCompanyId(companyId);

    try {
      offerDAO.create(offer);
      return offer;
    } catch (DataIntegrityViolationException e) {
      throw new IllegalArgumentException("Cannot create offer with given parameters", e);
    }
  }
  void validateCompanies(List<VacancyTemplate> vacancyTemplates) {
    List<Company> companies = new ArrayList<>();
    Set<String> companyCaptions = new HashSet<String>();
    vacancyTemplates.forEach(
        vacancyTemplate -> companyCaptions.add(vacancyTemplate.getCompanyCaption()));

    companyCaptions.forEach(
        s -> {
          Company company = companyService.findByCaption(s);
          if (company == null) {
            company = new Company();
            company.setCaption(s);

            BeanPropertyBindingResult result = new BeanPropertyBindingResult(company, s);

            ValidationUtils.invokeValidator(validator, company, result);
            if (result.hasErrors()) {
              List<ObjectError> errors = result.getAllErrors();
              StringBuilder builder = new StringBuilder();
              builder.append(
                  String.format(
                      "Validate company '%s' . No of validation errors: %s", s, errors.size()));
              errors.forEach(
                  objectError -> {
                    builder.append("\n");
                    builder.append(objectError.getDefaultMessage());
                  });
              log.error(builder.toString());
            } else {
              companies.add(company);
            }
          }
        });

    saveAllCompanies(companies);
  }
  @Override
  public Response<Boolean> createSolution(RequirementSolution solution, BaseUser user) {
    Response<Boolean> result = new Response<Boolean>();

    // 验证用户是否已登入
    if (user == null) {
      log.error("create requirement solution, user must login.");
      result.setError("user.not.login");
      return result;
    }

    // 获取用户对应的供应商信息
    Response<Company> companyRes = companyService.findCompanyByUserId(user.getId());
    if (!companyRes.isSuccess()) {
      log.error("query company failed, error code={}", companyRes.getError());
      result.setError(companyRes.getError());
      return result;
    }

    // 判断供应商是否已经对于需求进行了承诺
    Response<RequirementSolution> existRes =
        existSolution(solution.getRequirementId(), companyRes.getResult().getId());
    if (!existRes.isSuccess()) {
      log.error("check solution existed failed, error code={}", existRes.getError());
      result.setError(existRes.getError());
      return result;
    }
    if (existRes.getResult() != null) {
      log.error("supplier have send solution,can't send again.");
      result.setError("solution.existed.error");
      return result;
    }

    // 需要保证该方案处于3:方案交互 or 4:方案综投(采购商才能够创建方案)
    RequirementStatus[] statuses = {RequirementStatus.SOL_INTERACTIVE, RequirementStatus.SOL_END};
    Response<Boolean> statusRes = checkRequirementStatus(solution.getRequirementId(), statuses);
    if (!statusRes.isSuccess()) {
      log.error("check requirement status failed, error code={}", statusRes.getError());
      result.setError(statusRes.getError());
      return result;
    }
    // 无法创建方案
    if (!statusRes.getResult()) {
      log.error("requirement status can't allow suppler send solution.");
      result.setError("solution.status.stop");
      return result;
    }

    try {
      // 获取需求方案信息
      Requirement requirement = requirementDao.findById(solution.getRequirementId());

      solution.setRequirementName(requirement.getName());
      solution.setSupplierId(companyRes.getResult().getId());
      solution.setSupplierName(companyRes.getResult().getCorporation());
      solution.setUserId(user.getId());
      // 默认的T评分
      solution.setTechnology(TECHNOLOGY);

      // 写入方案承诺后需求方案的状态
      if (solution.getNotAccept() == null) {
        // 全部承诺
        solution.setStatus(RequirementSolution.Status.ALL_ACCEPT.value());
      } else {
        solution.setStatus(RequirementSolution.Status.LITTLE_ACCEPT.value());
      }

      result.setResult(requirementSolutionDao.create(solution) != null);
    } catch (Exception e) {
      log.error(
          "create requirement solution failed, error code={}", Throwables.getStackTraceAsString(e));
      result.setError("solution.create.failed");
    }

    return result;
  }
  @Override
  public Response<Boolean> checkSupplierInfo(Long requirementId, BaseUser user) {
    Response<Boolean> result = new Response<Boolean>();

    Requirement requirement = requirementDao.findById(requirementId);

    // 写入供应商信用等级信息
    Response<SupplierCreditQualify> creditRes =
        supplierCreditQualifyService.findCreditQualifyByUserId(user.getId());

    if (!creditRes.isSuccess()) {
      log.error("find supplier credit qualify info failed, error code={}", creditRes.getError());
      result.setError(creditRes.getError());
      return result;
    }

    if (!creditRes.getResult().isCreditQualified()) {
      log.error("supplier credit is not allow to do.");
      result.setError("supplier.credit.failed");
      return result;
    }

    // 获取公司信息
    Response<Company> companyRes = companyService.findCompanyByUserId(user.getId());

    if (!companyRes.isSuccess()) {
      result.setError(companyRes.getError());
      return result;
    }

    // 获取后台三级类目信息
    List<BackendJSON> categoryList =
        JSON_MAPPER.fromJson(
            requirement.getSeriesIds(),
            JSON_MAPPER.createCollectionType(List.class, BackendJSON.class));
    List<Long> categoryIds = Lists.newArrayList();
    for (BackendJSON backendJSON : categoryList) {
      categoryIds.add(backendJSON.getBcId());
    }

    // 获取供应商资质验证信息
    Response<Integer> qualifyRes =
        supplierResourceMaterialService.getInfoInBcIds(companyRes.getResult().getId(), categoryIds);
    if (!qualifyRes.isSuccess()) {
      log.error(
          "find user qualify failed, userId={}, error code={}",
          user.getId(),
          qualifyRes.getError());
      result.setError(qualifyRes.getError());
      return result;
    }

    // 资质是否全部验证通过
    if (!Objects.equal(
        SupplierResourceMaterialInfo.Status.from(qualifyRes.getResult()),
        SupplierResourceMaterialInfo.Status.QUALIFIED)) {
      log.error("supplier resource is not allow to do.");
      result.setError("supplier.resource.failed");
      return result;
    }

    result.setResult(true);

    return result;
  }
  @Override
  public Response<Boolean> signSecrecy(Long requirementId, Integer signType, BaseUser user) {
    Response<Boolean> result = new Response<Boolean>();

    if (requirementId == null) {
      log.error("find requirement solution need requirementId");
      result.setError("solution.requirementId.null");
      return result;
    }

    // 验证用户是否已登入
    if (user == null) {
      log.error("create requirement solution, user must login.");
      result.setError("user.not.login");
      return result;
    }

    try {
      // 是否是供应商
      if (Objects.equal(user.getType(), User.Type.SUPPLIER.value())) {
        // 验证供应商信息是否完整(不完整无法显示需求详情)
        Response<Boolean> checkRes = companyService.isComplete(user.getId());
        if (!checkRes.isSuccess()) {
          log.error("check user complete info failed, error code={}", checkRes.getError());
          result.setError(checkRes.getError());
          return result;
        }

        if (!checkRes.getResult()) {
          log.error("company info is not complete.");
          result.setError("requirement.company.noComplete");
          return result;
        }
      } else {
        // 采购商直接跳转
        result.setResult(true);
        return result;
      }

      // 查询供应商保密协议是否已签订
      if (signType == null) {
        // 查询登录的供应商是否已经淘汰
        Response<User> supplier = accountService.findUserById(user.getId());
        if (Objects.equal(supplier.getResult().getStep(), User.Step.DIE_OUT.value())) {
          log.error("supplier is die_out.");
          result.setError("supplier.is.dieout");
          return result;
        }
        // 查询登录供应商是否绩效的质量得分在60下
        Response<SupplierTQRDCInfo> suTQRDinfo =
            companyService.findSupplierLastTQRDCInfoByUserId(user.getId());
        if (suTQRDinfo.getResult().getQualityScore() != null) {
          if (suTQRDinfo.getResult().getQualityScore() < 60) {
            log.error("supplier quality score less.");
            result.setError("supplier.quality.less");
            return result;
          }
        }
        // 在淘汰供应商物料明细表中的也不让查看
        Response<Company> comtemp = companyService.findCompanyByUserId(user.getId());
        if (!comtemp.isSuccess()) {
          log.error("query company failed, error code={}", comtemp.getError());
          result.setError(comtemp.getError());
          return result;
        }
        if (comtemp.getResult().getSupplierCode() != null
            || comtemp.getResult().getSupplierCode() != "") {
          List<SupplierModuleDetail> templ =
              supplierModuleDetailService
                  .findBySupplierCode(comtemp.getResult().getSupplierCode())
                  .getResult();
          if (templ.size() > 0) {
            log.error("supplier module Detail have.");
            result.setError("supplier.module.detail.have.some");
            return result;
          }
        }

        RequirementSolution solution =
            requirementSolutionDao.findByUserId(requirementId, user.getId());
        result.setResult(solution != null);
      } else {
        RequirementSolution solution = new RequirementSolution();

        // 获取用户对应的供应商信息
        Response<Company> companyRes = companyService.findCompanyByUserId(user.getId());
        if (!companyRes.isSuccess()) {
          log.error("query company failed, error code={}", companyRes.getError());
          result.setError(companyRes.getError());
          return result;
        }

        // 判断供应商是否已经签订过协议
        Response<RequirementSolution> existRes =
            existSolution(requirementId, companyRes.getResult().getId());
        if (!existRes.isSuccess()) {
          log.error("check solution existed failed, error code={}", existRes.getError());
          result.setError(existRes.getError());
          return result;
        }
        if (existRes.getResult() != null) {
          log.error("supplier have send solution,can't send again.");
          result.setError("solution.sign.failed");
          return result;
        }

        // 获取需求信息
        Requirement requirement = requirementDao.findById(requirementId);
        solution.setRequirementId(requirementId);
        solution.setRequirementName(requirement.getName());
        solution.setSupplierId(companyRes.getResult().getId());
        solution.setSupplierName(companyRes.getResult().getCorporation());
        solution.setUserId(user.getId());
        // 默认的T评分
        solution.setTechnology(TECHNOLOGY);

        // 签订保证协议
        solution.setStatus(RequirementSolution.Status.SIGN_CONF.value());

        if (requirementSolutionDao.create(solution) != null) {
          // 增加供应商的方案统计数据
          SupplierSolutionCount supplierSolutionCount = new SupplierSolutionCount();
          supplierSolutionCount.setUserId(user.getId());
          supplierSolutionCount.setUserName(user.getName());
          supplierSolutionCount.setStatusCounts(ImmutableMap.of(requirement.getStatus(), 1));

          solutionCountService.setSupCount(supplierSolutionCount);

          // 供应商交互方案统计
          solutionCountService.setSolCountInfo(user.getId(), SolutionCountType.MUTUAL_SOL, 1);

          result.setResult(true);
        } else {
          result.setError("solution.sign.failed");
        }
      }
    } catch (Exception e) {
      log.error(
          "find user sign requirement solution failed, requirementId={}, userId={}, error code={}",
          requirementId,
          user.getId(),
          Throwables.getStackTraceAsString(e));
      result.setError("solution.find.failed");
    }

    return result;
  }
  List<Vacancy> validateVacancies(List<VacancyTemplate> vacancyTemplates) {
    Set<String> vacancyURLs = new HashSet<>();
    List<Vacancy> vacancies = new ArrayList<>();
    for (VacancyTemplate vt : vacancyTemplates) {
      Company company = companyService.findByCaption(vt.getCompanyCaption());
      if (company == null)
        log.error(
            "Job missing: '{}'. Reason: company '{}' not found",
            vt.getVacancyCaption(),
            vt.getCompanyCaption());
      else if (!vacancyURLs.contains(vt.getVacancyUrl())) {

        String pathSegment;

        try {
          pathSegment =
              UriUtils.encodePathSegment(vt.getVacancyUrl(), WebUtils.DEFAULT_CHARACTER_ENCODING);
        } catch (UnsupportedEncodingException uee) {
          log.error(uee.toString());
          continue;
        }

        vacancyURLs.add(pathSegment);

        Vacancy vacancy = new Vacancy();
        vacancy.setId(pathSegment);
        vacancy.setCaption(vt.getVacancyCaption());
        vacancy.setUrl(vt.getVacancyUrl());
        vacancy.setPriceMax(vt.getPriceMax());
        vacancy.setPriceMin(vt.getPriceMin());
        vacancy.setRegistrationDate(vt.getRegistrationDate());
        vacancy.setCurrency(currencyService.findByCaption(vt.getCurrencyCaption()));
        vacancy.setSite(vt.getSite());
        vacancy.setCity(vt.getCity());
        vacancy.setCompany(company);

        BeanPropertyBindingResult result =
            new BeanPropertyBindingResult(vacancy, vacancy.getCaption());

        ValidationUtils.invokeValidator(validator, vacancy, result);
        if (result.hasErrors()) {
          List<ObjectError> errors = result.getAllErrors();

          StringBuilder builder = new StringBuilder();
          builder.append(
              String.format(
                  "Validate vacancy '%s' . No of validation errors: %s",
                  vacancy.getCaption(), errors.size()));
          errors.forEach(
              objectError -> {
                builder.append("\n");
                builder.append(objectError.getDefaultMessage());
              });
          log.error(builder.toString());
        } else {
          vacancies.add(vacancy);
        }
      }
    }

    return vacancies;
  }
 @Transactional
 void saveAllCompanies(List<Company> companies) {
   companyService.save(companies);
 }