| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392 |
- package com.uas.ps.inquiry.service.impl;
- import com.uas.ps.core.util.CollectionUtils;
- import com.uas.ps.entity.Product;
- import com.uas.ps.entity.Status;
- import com.uas.ps.inquiry.dao.*;
- import com.uas.ps.inquiry.domain.IPage;
- import com.uas.ps.inquiry.entity.Constant;
- import com.uas.ps.inquiry.entity.InquiryDetailInfo;
- import com.uas.ps.inquiry.entity.InquiryProductInfo;
- import com.uas.ps.inquiry.entity.OrderStatus;
- import com.uas.ps.inquiry.model.*;
- import com.uas.ps.inquiry.page.PageInfo;
- import com.uas.ps.inquiry.page.SearchFilter;
- import com.uas.ps.inquiry.page.criteria.CriterionExpression;
- import com.uas.ps.inquiry.page.criteria.LogicalExpression;
- import com.uas.ps.inquiry.page.criteria.PredicateUtils;
- import com.uas.ps.inquiry.page.criteria.SimpleExpression;
- import com.uas.ps.inquiry.page.exception.IllegalOperatorException;
- import com.uas.ps.inquiry.service.InquiryService;
- import com.uas.ps.inquiry.service.PublicInquiryService;
- import org.springframework.beans.factory.annotation.Autowired;
- import org.springframework.data.domain.Page;
- import org.springframework.data.jpa.domain.Specification;
- import org.springframework.stereotype.Service;
- 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.util.*;
- /**
- * 针对转询价报价单的数据查询操作
- *
- * Created by hejq on 2018-01-17.
- */
- @Service
- public class InquiryServiceImpl implements InquiryService {
- @Autowired
- private PublicInquiryItemDao itemDao;
- @Autowired
- private PurcInquiryItemInfoDao inquiryItemDao;
- @Autowired
- private PurcInquiryDao purcInquiryDao;
- @Autowired
- private PublicInquiryDao inquiryDao;
- @Autowired
- private ProductDao productDao;
- @Autowired
- private PurcInquiryItemDao purcInquiryItemDao;
- @Autowired
- private PublicInquiryService inquiryService;
- @Autowired
- private InquiryRemindDao inquiryRemindDao;
- /**
- * 查询公共询价列表信息
- *
- * @param info 分页新
- * @param filter 过滤条件
- * @param state 过滤状态
- * @param overdue 是否过期 1、已过期;0、未过期
- * @return
- */
- @Override
- public Page<PurcInquiryItemInfo> findTodoByPageInfo(final PageInfo info, SearchFilter filter, String state, Integer overdue) {
- if (null != filter) {
- if (StringUtils.hasText(filter.getKeyword())) {
- SimpleExpression cmpCode = new SimpleExpression("cmpCode", filter.getKeyword(), CriterionExpression.Operator.LIKE);
- SimpleExpression brand = new SimpleExpression("inbrand", filter.getKeyword(), CriterionExpression.Operator.LIKE);
- SimpleExpression code = new SimpleExpression("product.cmpCode", filter.getKeyword(), CriterionExpression.Operator.LIKE);
- SimpleExpression[] simpleExpressions = new SimpleExpression[]{cmpCode, brand, code};
- LogicalExpression logicalExpression = PredicateUtils.or(simpleExpressions);
- info.expression(logicalExpression);
- }
- if (filter.getFromDate() != null) {
- info.expression(PredicateUtils.gte("date", new Date(filter.getFromDate()), false));
- }
- if (filter.getEndDate() != null) {
- info.expression(PredicateUtils.lte("date", new Date(filter.getEndDate()), false));
- }
- }
- if (null != state) {
- // 待报价
- if (state.equals(OrderStatus.todo.name())) {
- SimpleExpression amount = new SimpleExpression("offerAmount", Constant.NO, CriterionExpression.Operator.EQ);
- SimpleExpression[] simpleExpressions = new SimpleExpression[]{amount};
- LogicalExpression logicalExpression = PredicateUtils.and(simpleExpressions);
- info.expression(logicalExpression);
- }
- // 已报价
- if (state.equals(OrderStatus.done.name())) {
- SimpleExpression amount = new SimpleExpression("offerAmount", Constant.YES, CriterionExpression.Operator.GTE);
- SimpleExpression[] simpleExpressions = new SimpleExpression[]{amount};
- LogicalExpression logicalExpression = PredicateUtils.and(simpleExpressions);
- info.expression(logicalExpression);
- }
- // 已超过截止日期
- if (state.equals(OrderStatus.end.name())) {
- SimpleExpression date = new SimpleExpression("endDate", new Date(System.currentTimeMillis()), CriterionExpression.Operator.LT);
- SimpleExpression[] simpleExpressions = new SimpleExpression[]{date};
- LogicalExpression logicalExpression = PredicateUtils.and(simpleExpressions);
- info.expression(logicalExpression);
- }
- }
- if (null != overdue) {
- // 已超过截止日期
- if (overdue.equals(Constant.YES)) {
- SimpleExpression date = new SimpleExpression("endDate", new Date(System.currentTimeMillis()), CriterionExpression.Operator.LT);
- SimpleExpression[] simpleExpressions = new SimpleExpression[]{date};
- LogicalExpression logicalExpression = PredicateUtils.and(simpleExpressions);
- info.expression(logicalExpression);
- }
- }
- return inquiryItemDao.findAll(new Specification<PurcInquiryItemInfo>() {
- public Predicate toPredicate(Root<PurcInquiryItemInfo> root, CriteriaQuery<?> query, CriteriaBuilder builder) {
- query.where(info.getPredicates(root, query, builder));
- return null;
- }
- }, info);
- }
- /**
- * 保存公共询价
- *
- * @param currentInquiry 询价信息
- */
- @Override
- public PurcInquiry saveInquiry(PurcInquiry currentInquiry) {
- PurcInquiry existInquiry = purcInquiryDao.findByCodeAndEnUU(currentInquiry.getCode(), currentInquiry.getEnUU());
- if (null != existInquiry) {
- throw new IllegalOperatorException("单号重复");
- } else {
- PurcInquiry inquiry = purcInquiryDao.save(currentInquiry);
- if (!CollectionUtils.isEmpty(currentInquiry.getInquiryItems())) {
- List<PurcInquiryItem> items = new ArrayList<PurcInquiryItem>();
- for (PurcInquiryItem item : currentInquiry.getInquiryItems()) {
- item.setInquiry(inquiry);
- item.setOfferAmount(0);
- item.setStatus((short) Status.NOT_REPLY.value());
- item.setIsOpen(Constant.YES);
- if (null == item.getDate()) {
- item.setDate(new Date(System.currentTimeMillis()));
- }
- // 这里设置物料信息的冗余字段
- if (null != item.getProduct()) {
- item.setProdTitle(item.getProduct().getTitle());
- item.setProdCode(item.getProduct().getCode());
- item.setSpec(item.getProduct().getSpec());
- item.setInbrand(item.getProduct().getBrand());
- }
- items.add(item);
- }
- items = purcInquiryItemDao.save(items);
- // 消息推送
- if (null != inquiry.getSourceapp()) {
- try {
- inquiryService.notify(items, inquiry.getSourceapp());
- } catch (Exception e) {
- e.printStackTrace();
- }
- }
- }
- return inquiry;
- }
- }
- /**
- * 通过报价明细id对供应商报价进行相关审核操作
- *
- * @param id 报价明细id
- * @param status 状态
- */
- @Override
- public void decideQuote(Long id, Short status) {
- PublicInquiryItem item = itemDao.findOne(id);
- item.setAgreed(status);
- itemDao.save(item);
- // 更新询价推荐表相关信息
- if (status.equals(Constant.YES)) {
- inquiryRemindDao.updateStatus(item.getSourceId(), Status.ALLOW.value(), item.getVendUU());
- } else if (status.equals(Constant.NO)) {
- inquiryRemindDao.updateStatus(item.getSourceId(), Status.NOTALLOW.value(), item.getVendUU());
- }
- }
- /**
- * 针对客户,查询供应商报价详情
- *
- * @param id 主表id
- * @param enuu 企业UU
- * @return
- */
- @Override
- public InquiryDetailInfo findById(Long id, Long enuu) {
- PublicInquiry inquiry = inquiryDao.findOne(id);
- InquiryDetailInfo inquiryInfo = new InquiryDetailInfo();
- if (inquiry != null) {
- inquiryInfo.setAttachs(inquiry.getAttachs());
- inquiryInfo.setAuditor(inquiry.getAuditor());
- inquiryInfo.setCheck(inquiry.getCheck());
- inquiryInfo.setCode(inquiry.getCode());
- inquiryInfo.setDate(inquiry.getDate());
- inquiryInfo.setEndDate(inquiry.getEndDate());
- inquiryInfo.setEnterprise(inquiry.getEnterprise());
- inquiryInfo.setEnUU(inquiry.getEnUU());
- inquiryInfo.setEnvironment(inquiry.getEnvironment());
- inquiryInfo.setId(inquiry.getId());
- inquiryInfo.setIsOpen(inquiry.getIsOpen());
- inquiryInfo.setOverdue(inquiry.getOverdue());
- inquiryInfo.setPriceType(inquiry.getPriceType());
- inquiryInfo.setRecorder(inquiry.getRecorder());
- inquiryInfo.setRecorderUU(inquiry.getRecorderUU());
- inquiryInfo.setRemark(inquiry.getRemark());
- inquiryInfo.setSourceApp(inquiry.getSourceApp());
- inquiryInfo.setSourceId(inquiry.getSourceId());
- inquiryInfo.setShip(inquiry.getShip());
- inquiryInfo.setInvoice(inquiry.getInvoice());
- inquiryInfo.setInquirytype(inquiry.getInquirytype());
- Set<Long> ids = new HashSet<Long>();
- List<Long> idList = new ArrayList<>();
- Set<InquiryProductInfo> products = new HashSet<InquiryProductInfo>();
- if (!CollectionUtils.isEmpty(inquiry.getInquiryItems())) {
- for (PublicInquiryItem item : inquiry.getInquiryItems()) {
- if (item.getProductId() != null) {
- idList.add(item.getProductId());
- ids.addAll(idList);
- } else {
- InquiryProductInfo productInfo = new InquiryProductInfo();
- Set<PublicInquiryItem> items = new HashSet<PublicInquiryItem>();
- productInfo.setBrand(item.getBrand());
- productInfo.setSpec(item.getSpec());
- productInfo.setCode(item.getProdCode());
- productInfo.setTitle(item.getProdTitle());
- productInfo.setUnit(item.getUnit());
- productInfo.setCmpCode(item.getCmpCode());
- products.add(productInfo);
- for (PublicInquiryItem item1 : inquiry.getInquiryItems()) {
- if (item1.getCmpCode() != null && item1.getCmpCode().equals(productInfo.getCmpCode())) {
- items.add(item1);
- }
- }
- productInfo.setInquiryItems(items);
- inquiryInfo.setProducts(products);
- }
- }
- }
- if (!CollectionUtils.isEmpty(ids)) {
- for (Long idInfo : ids) {
- InquiryProductInfo productInfo = new InquiryProductInfo();
- Set<PublicInquiryItem> items = new HashSet<PublicInquiryItem>();
- Product product = productDao.findOne(idInfo);
- productInfo.setBrand(product.getBrand());
- productInfo.setId(product.getId());
- productInfo.setSpec(product.getSpec());
- productInfo.setCode(product.getCode());
- productInfo.setTitle(product.getTitle());
- productInfo.setUnit(product.getUnit());
- for (PublicInquiryItem item : inquiry.getInquiryItems()) {
- if (item.getProductId().equals(idInfo)) {
- items.add(item);
- }
- }
- productInfo.setInquiryItems(items);
- products.add(productInfo);
- inquiryInfo.setProducts(products);
- }
- }
- }
- return inquiryInfo;
- }
- /**
- * 通过企业UU和分页信息等查询已发布信息
- *
- * @param info 分页信息
- * @param filter 过滤条件
- * @return
- */
- @Override
- public Page<PurcInquiry> findByPageInfo(final PageInfo info, SearchFilter filter) {
- if (null != filter) {
- if (!StringUtils.isEmpty(filter.getKeyword())) {
- SimpleExpression code = new SimpleExpression("remark", filter.getKeyword(), CriterionExpression.Operator.LIKE);
- SimpleExpression[] simpleExpressions = new SimpleExpression[]{code};
- LogicalExpression logicalExpression = PredicateUtils.or(simpleExpressions);
- info.expression(logicalExpression);
- }
- if (filter.getFromDate() != null) {
- info.expression(PredicateUtils.gte("date", new Date(filter.getFromDate()), false));
- }
- if (filter.getEndDate() != null) {
- info.expression(PredicateUtils.lte("date", new Date(filter.getEndDate()), false));
- }
- }
- SimpleExpression amount = new SimpleExpression("amount", Constant.YES, CriterionExpression.Operator.GT);
- SimpleExpression[] simpleExpressions = new SimpleExpression[]{amount};
- LogicalExpression logicalExpression = PredicateUtils.and(simpleExpressions);
- info.expression(logicalExpression);
- return purcInquiryDao.findAll(new Specification<PurcInquiry>() {
- public Predicate toPredicate(Root<PurcInquiry> root, CriteriaQuery<?> query, CriteriaBuilder builder) {
- query.where(info.getPredicates(root, query, builder));
- return null;
- }
- }, info);
- }
- /**
- * 针对客户,查询单个物料的报价情况
- *
- * @param id 明细id
- * @param enuu 当前企业UU
- * @return
- */
- @Override
- public InquiryProductInfo findInquiryDetailById(Long id, Long enuu) {
- List<PublicInquiryItem> items = itemDao.findBySourceId(id);
- InquiryProductInfo productInfo = new InquiryProductInfo();
- if (!CollectionUtils.isEmpty(items)) {
- Long prId = items.get(0).getProductId();
- if (null != prId) {
- Product product = productDao.findOne(prId);
- productInfo.setBrand(product.getBrand());
- productInfo.setCode(product.getCode());
- productInfo.setTitle(product.getTitle());
- productInfo.setSpec(product.getSpec());
- productInfo.setUnit(product.getUnit());
- productInfo.setCmpCode(product.getCmpCode());
- } else {
- productInfo.setCmpCode(items.get(0).getCmpCode());
- productInfo.setBrand(items.get(0).getInbrand());
- }
- productInfo.setInquiryItems(new HashSet<PublicInquiryItem>(items));
- }
- return productInfo;
- }
- /**
- * 针对客户查询供应商报价信息
- *
- * @param pageInfo 分页信息
- * @param filter 过滤条件
- * @return
- */
- @Override
- public Page<PurcInquiryItemInfo> findQuotationsByPage(final PageInfo pageInfo, final SearchFilter filter) {
- if (StringUtils.hasText(filter.getKeyword())) {
- SimpleExpression cmpCode = new SimpleExpression("cmpCode", filter.getKeyword(), CriterionExpression.Operator.LIKE);
- SimpleExpression offerAmount = new SimpleExpression("offerAmount", Constant.NO, CriterionExpression.Operator.GT);
- SimpleExpression[] simpleExpressions = new SimpleExpression[]{offerAmount, cmpCode};
- LogicalExpression logicalExpression = PredicateUtils.and(simpleExpressions);
- pageInfo.expression(logicalExpression);
- } else {
- SimpleExpression offerAmount = new SimpleExpression("offerAmount", Constant.NO, CriterionExpression.Operator.GT);
- SimpleExpression[] simpleExpressions = new SimpleExpression[]{offerAmount};
- LogicalExpression logicalExpression = PredicateUtils.and(simpleExpressions);
- pageInfo.expression(logicalExpression);
- }
- Page<PurcInquiryItemInfo> items = inquiryItemDao.findAll(new Specification<PurcInquiryItemInfo>() {
- public Predicate toPredicate(Root<PurcInquiryItemInfo> root, CriteriaQuery<?> query, CriteriaBuilder builder) {
- query.where(pageInfo.getPredicates(root, query, builder));
- return null;
- }
- }, pageInfo);
- if (!CollectionUtils.isEmpty(items.getContent())) {
- for (PurcInquiryItemInfo itemInfo : items.getContent()) {
- List<PublicInquiryItem> itemList = itemDao.findBySourceId(itemInfo.getId());
- itemInfo.setQutations(itemList);
- itemInfo.setAgreed(Constant.NO);
- if (!CollectionUtils.isEmpty(itemList)) {
- for (PublicInquiryItem i : itemList) {
- if (i.getAgreed() != null && i.getAgreed().equals(Constant.YES)) {
- itemInfo.setAgreed(Constant.YES);
- break;
- }
- }
- }
- }
- }
- return items;
- }
- }
|