|
|
@@ -0,0 +1,260 @@
|
|
|
+package com.uas.ps.vote.service.impl;
|
|
|
+
|
|
|
+import com.alibaba.fastjson.JSON;
|
|
|
+import com.uas.ps.core.page.PageInfo;
|
|
|
+import com.uas.ps.core.page.PageParams;
|
|
|
+import com.uas.ps.core.page.criteria.CriterionExpression;
|
|
|
+import com.uas.ps.core.page.criteria.SimpleExpression;
|
|
|
+import com.uas.ps.core.util.HttpUtil;
|
|
|
+import com.uas.ps.vote.dao.EnterpriseDao;
|
|
|
+import com.uas.ps.vote.dao.UserDao;
|
|
|
+import com.uas.ps.vote.dao.VoteDao;
|
|
|
+import com.uas.ps.vote.model.Enterprise;
|
|
|
+import com.uas.ps.vote.model.User;
|
|
|
+import com.uas.ps.vote.model.Vote;
|
|
|
+import com.uas.ps.vote.service.VoteService;
|
|
|
+import com.uas.ps.vote.support.ResultMap;
|
|
|
+import com.uas.ps.vote.support.UrlConfig;
|
|
|
+import org.slf4j.Logger;
|
|
|
+import org.slf4j.LoggerFactory;
|
|
|
+import org.springframework.beans.factory.annotation.Autowired;
|
|
|
+import org.springframework.data.domain.Page;
|
|
|
+import org.springframework.data.domain.Sort;
|
|
|
+import org.springframework.data.jpa.domain.Specification;
|
|
|
+import org.springframework.stereotype.Service;
|
|
|
+import org.springframework.util.CollectionUtils;
|
|
|
+import org.springframework.util.StringUtils;
|
|
|
+
|
|
|
+import javax.persistence.criteria.CriteriaBuilder;
|
|
|
+import javax.persistence.criteria.CriteriaQuery;
|
|
|
+import javax.persistence.criteria.Predicate;
|
|
|
+import javax.persistence.criteria.Root;
|
|
|
+import java.text.ParseException;
|
|
|
+import java.text.SimpleDateFormat;
|
|
|
+import java.util.*;
|
|
|
+
|
|
|
+/**
|
|
|
+ * @Author: huj
|
|
|
+ * @Date: Created in 14:20 2018/10/26.
|
|
|
+ */
|
|
|
+@Service
|
|
|
+public class VoteServiceImpl implements VoteService{
|
|
|
+
|
|
|
+ private Logger LOGGER = LoggerFactory.getLogger(VoteServiceImpl.class);
|
|
|
+
|
|
|
+ @Autowired
|
|
|
+ EnterpriseDao enterpriseDao;
|
|
|
+
|
|
|
+ @Autowired
|
|
|
+ VoteDao voteDao;
|
|
|
+
|
|
|
+ @Autowired
|
|
|
+ UserDao userDao;
|
|
|
+
|
|
|
+ @Autowired
|
|
|
+ UrlConfig urlConfig;
|
|
|
+
|
|
|
+ private static List<String> TYPE = Arrays.asList("ONLINE_RETAILERS", "SUPPLIER", "PURCHASERS");
|
|
|
+
|
|
|
+ private static String storeUrl = "/api/vote/store";
|
|
|
+
|
|
|
+ private static String goodsUrl = "/api/vote/goods";
|
|
|
+
|
|
|
+ private static String inquiryUrl = "/inquiry/api/sum/enuu";
|
|
|
+
|
|
|
+ @Override
|
|
|
+ public ResultMap getEnterprise(Long enUU) {
|
|
|
+ Enterprise enterprise = enterpriseDao.findByEnUU(enUU);
|
|
|
+ if (StringUtils.isEmpty(enterprise)) {
|
|
|
+ return ResultMap.fail("该企业未报名");
|
|
|
+ } else {
|
|
|
+ return ResultMap.success(enterprise);
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ @Override
|
|
|
+ public ResultMap getEnterprises(PageParams params, Vote.Type type, String keyword) {
|
|
|
+ if (StringUtils.isEmpty(params) || StringUtils.isEmpty(params.getCount())
|
|
|
+ || StringUtils.isEmpty(params.getPage())) {
|
|
|
+ return ResultMap.fail("分页参数异常");
|
|
|
+ }
|
|
|
+ final PageInfo pageInfo = new PageInfo(params);
|
|
|
+ pageInfo.sorting(Sort.Direction.DESC, "votes", "applyTime");
|
|
|
+ if (!StringUtils.isEmpty(keyword)) {
|
|
|
+ SimpleExpression expression = new SimpleExpression("enName", keyword,
|
|
|
+ CriterionExpression.Operator.LIKE, true);
|
|
|
+ pageInfo.expression(expression);
|
|
|
+ }
|
|
|
+ if (!StringUtils.isEmpty(type)) {
|
|
|
+ Page<Enterprise> page = enterpriseDao.findAll(new Specification<Enterprise>() {
|
|
|
+ @Override
|
|
|
+ public Predicate toPredicate(Root<Enterprise> root, CriteriaQuery<?> query, CriteriaBuilder builder) {
|
|
|
+ query.where(pageInfo.getPredicates(root, query, builder));
|
|
|
+ return null;
|
|
|
+ }
|
|
|
+ }, pageInfo);
|
|
|
+ return ResultMap.success(page);
|
|
|
+ } else {
|
|
|
+ pageInfo.expression(new SimpleExpression("type", TYPE.get(0), CriterionExpression.Operator.EQ, true));
|
|
|
+ Page<Enterprise> page = enterpriseDao.findAll(new Specification<Enterprise>() {
|
|
|
+ @Override
|
|
|
+ public Predicate toPredicate(Root<Enterprise> root, CriteriaQuery<?> query, CriteriaBuilder builder) {
|
|
|
+ query.where(pageInfo.getPredicates(root, query, builder));
|
|
|
+ return null;
|
|
|
+ }
|
|
|
+ }, pageInfo);
|
|
|
+ checkIsNull(pageInfo, page, TYPE.get(1));
|
|
|
+ checkIsNull(pageInfo, page, TYPE.get(2));
|
|
|
+ return ResultMap.success(page);
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ private void checkIsNull(final PageInfo pageInfo, Page<Enterprise> page, String type) {
|
|
|
+ if (CollectionUtils.isEmpty(page.getContent())) {
|
|
|
+ pageInfo.expression(new SimpleExpression("type", type, CriterionExpression.Operator.EQ, true));
|
|
|
+ page = enterpriseDao.findAll(new Specification<Enterprise>() {
|
|
|
+ @Override
|
|
|
+ public Predicate toPredicate(Root<Enterprise> root, CriteriaQuery<?> query, CriteriaBuilder builder) {
|
|
|
+ query.where(pageInfo.getPredicates(root, query, builder));
|
|
|
+ return null;
|
|
|
+ }
|
|
|
+ }, pageInfo);
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ @Override
|
|
|
+ public ResultMap apply(Long enUU, Vote.Type type, Long userUU, String enDes, String enName, String userName) {
|
|
|
+ if (StringUtils.isEmpty(enUU) || StringUtils.isEmpty(type) || StringUtils.isEmpty(userUU)) {
|
|
|
+ return ResultMap.fail("参数异常");
|
|
|
+ }
|
|
|
+ if (!TYPE.contains(type)) {
|
|
|
+ return ResultMap.fail("企业类型异常");
|
|
|
+ }
|
|
|
+ Enterprise enterprise = enterpriseDao.findByEnUU(enUU);
|
|
|
+ if (!StringUtils.isEmpty(enterprise)) {
|
|
|
+ return ResultMap.success("您的企业已报名,无需重复报名");
|
|
|
+ }
|
|
|
+ if (TYPE.get(0).equals(type)) {
|
|
|
+ if (existStore(enUU)) {
|
|
|
+ return ResultMap.fail("请先开店");
|
|
|
+ }
|
|
|
+ if (countGoods(enUU)) {
|
|
|
+ return ResultMap.fail("请先发布10条产品");
|
|
|
+ }
|
|
|
+ enterprise = new Enterprise(enUU, type, userUU, enDes, enName, userName);
|
|
|
+ enterpriseDao.save(enterprise);
|
|
|
+ }
|
|
|
+ if (TYPE.get(2).equals(type)) {
|
|
|
+ if (countInquiry(enUU)) {
|
|
|
+ return ResultMap.fail("请先发布100条询价");
|
|
|
+ }
|
|
|
+ enterprise = new Enterprise(enUU, type, userUU, enDes, enName, userName);
|
|
|
+ enterpriseDao.save(enterprise);
|
|
|
+ }
|
|
|
+ if (TYPE.get(0).equals(type)) {
|
|
|
+ enterprise = new Enterprise(enUU, type, userUU, enDes, enName, userName);
|
|
|
+ enterpriseDao.save(enterprise);
|
|
|
+ }
|
|
|
+ return ResultMap.fail("报名失败");
|
|
|
+ }
|
|
|
+
|
|
|
+ @Override
|
|
|
+ public ResultMap vote(Long userUU, Vote.Type type, Long enUU, String userName) {
|
|
|
+ if (StringUtils.isEmpty(userUU) || StringUtils.isEmpty(type) || StringUtils.isEmpty(enUU)) {
|
|
|
+ return ResultMap.fail("参数异常");
|
|
|
+ }
|
|
|
+ Vote vote = voteDao.findByName("2018年优软商城投票活动");
|
|
|
+ if (!vote.getType().contains(type.toString())) {
|
|
|
+ return ResultMap.fail("投票企业类型异常");
|
|
|
+ }
|
|
|
+ if (!checkTime(vote).isSuccess()) {
|
|
|
+ return ResultMap.fail("不在投票时间");
|
|
|
+ }
|
|
|
+ Enterprise enterprise = enterpriseDao.findByEnUU(enUU);
|
|
|
+ if (StringUtils.isEmpty(enterprise)) {
|
|
|
+ return ResultMap.fail("该企业未报名");
|
|
|
+ }
|
|
|
+ // 判断是否投过该类型企业
|
|
|
+ User existUser = userDao.findByUserUUAndType(userUU, type);
|
|
|
+ if (!StringUtils.isEmpty(enterprise)) {
|
|
|
+ return ResultMap.fail("投票失败,您已投过该类型企业");
|
|
|
+ }
|
|
|
+ User user = new User(userUU, type, enUU, userName);
|
|
|
+ // 保存投票数
|
|
|
+ Date date = new Date();
|
|
|
+ enterprise.setUpdateTime(date.toString());
|
|
|
+ enterprise.setVotes(enterprise.getVotes() + 1L);
|
|
|
+ enterpriseDao.save(enterprise);
|
|
|
+ userDao.save(user);
|
|
|
+ return ResultMap.success("投票成功");
|
|
|
+ }
|
|
|
+
|
|
|
+ private ResultMap checkTime(Vote vote) {
|
|
|
+ SimpleDateFormat formatter = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
|
|
|
+ Date currentTime = new Date();
|
|
|
+ Date startTime = null;
|
|
|
+ Date endTime = null;
|
|
|
+ try {
|
|
|
+ startTime = formatter.parse(vote.getVoteStartTime());
|
|
|
+ endTime = formatter.parse(vote.getVoteEndTime());
|
|
|
+ } catch (ParseException e) {
|
|
|
+ e.printStackTrace();
|
|
|
+ }
|
|
|
+ if (startTime.after(currentTime) || endTime.before(currentTime)) {
|
|
|
+ return ResultMap.fail("不在报名或投票时间");
|
|
|
+ }
|
|
|
+ return ResultMap.success(vote);
|
|
|
+ }
|
|
|
+
|
|
|
+ // 是否开店
|
|
|
+ private Boolean existStore(Long enUU) {
|
|
|
+ Map<String, Long> map = new HashMap<>(1);
|
|
|
+ map.put("enUU", enUU);
|
|
|
+ boolean exist = false;
|
|
|
+ try {
|
|
|
+ HttpUtil.Response response = HttpUtil.sendGetRequest(urlConfig.getMall() + storeUrl, map);
|
|
|
+ ResultMap result = JSON.parseObject(response.getResponseText(), ResultMap.class);
|
|
|
+ if (result.isSuccess()) {
|
|
|
+ exist = true;
|
|
|
+ }
|
|
|
+ } catch (Exception e) {
|
|
|
+ LOGGER.error("获取开店信息失败:" + enUU + " 错误信息:" + e.getMessage());
|
|
|
+ }
|
|
|
+ return exist;
|
|
|
+ }
|
|
|
+
|
|
|
+ // 询价数
|
|
|
+ private Boolean countInquiry(Long enUU) {
|
|
|
+ Map<String, Long> map = new HashMap<>(1);
|
|
|
+ map.put("enuu", enUU);
|
|
|
+ boolean fill = false;
|
|
|
+ try {
|
|
|
+ HttpUtil.Response response = HttpUtil.sendGetRequest(urlConfig.getInquiry() + inquiryUrl, map);
|
|
|
+ Integer count = Integer.valueOf(JSON.parseObject(response.getResponseText()).get("count").toString());
|
|
|
+ if (count >= 10) {
|
|
|
+ fill = true;
|
|
|
+ }
|
|
|
+ } catch (Exception e) {
|
|
|
+ LOGGER.error("获取询价失败:" + enUU + " 错误信息:" + e.getMessage());
|
|
|
+ }
|
|
|
+ return fill;
|
|
|
+ }
|
|
|
+
|
|
|
+ // 发布产品数
|
|
|
+ private Boolean countGoods(Long enUU) {
|
|
|
+ Map<String, Long> map = new HashMap<>(1);
|
|
|
+ map.put("enUU", enUU);
|
|
|
+ boolean fill = false;
|
|
|
+ try {
|
|
|
+ HttpUtil.Response response = HttpUtil.sendGetRequest(urlConfig.getMall() + goodsUrl, map);
|
|
|
+ Integer count = Integer.valueOf(response.getResponseText().trim());
|
|
|
+ if (count >= 100) {
|
|
|
+ fill = true;
|
|
|
+ }
|
|
|
+ } catch (Exception e) {
|
|
|
+ LOGGER.error("获取询价失败:" + enUU + " 错误信息:" + e.getMessage());
|
|
|
+ }
|
|
|
+ return fill;
|
|
|
+ }
|
|
|
+
|
|
|
+}
|