InquiryServiceImpl.java 12 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289
  1. package com.uas.ps.inquiry.service.impl;
  2. import com.uas.ps.core.util.CollectionUtils;
  3. import com.uas.ps.entity.Product;
  4. import com.uas.ps.inquiry.dao.*;
  5. import com.uas.ps.inquiry.entity.Constant;
  6. import com.uas.ps.inquiry.entity.InquiryDetailInfo;
  7. import com.uas.ps.inquiry.entity.InquiryProductInfo;
  8. import com.uas.ps.inquiry.entity.OrderStatus;
  9. import com.uas.ps.inquiry.model.*;
  10. import com.uas.ps.inquiry.page.PageInfo;
  11. import com.uas.ps.inquiry.page.SearchFilter;
  12. import com.uas.ps.inquiry.page.criteria.CriterionExpression;
  13. import com.uas.ps.inquiry.page.criteria.LogicalExpression;
  14. import com.uas.ps.inquiry.page.criteria.PredicateUtils;
  15. import com.uas.ps.inquiry.page.criteria.SimpleExpression;
  16. import com.uas.ps.inquiry.page.exception.IllegalOperatorException;
  17. import com.uas.ps.inquiry.service.InquiryService;
  18. import org.springframework.beans.factory.annotation.Autowired;
  19. import org.springframework.data.domain.Page;
  20. import org.springframework.data.jpa.domain.Specification;
  21. import org.springframework.stereotype.Service;
  22. import org.springframework.ui.ModelMap;
  23. import org.springframework.util.StringUtils;
  24. import javax.persistence.criteria.CriteriaBuilder;
  25. import javax.persistence.criteria.CriteriaQuery;
  26. import javax.persistence.criteria.Predicate;
  27. import javax.persistence.criteria.Root;
  28. import java.util.*;
  29. /**
  30. * 针对转询价报价单的数据查询操作
  31. *
  32. * Created by hejq on 2018-01-17.
  33. */
  34. @Service
  35. public class InquiryServiceImpl implements InquiryService {
  36. @Autowired
  37. private PublicInquiryItemDao itemDao;
  38. @Autowired
  39. private PurcInquiryItemInfoDao inquiryItemDao;
  40. @Autowired
  41. private PurcInquiryDao purcInquiryDao;
  42. @Autowired
  43. private PublicInquiryDao inquiryDao;
  44. @Autowired
  45. private ProductDao productDao;
  46. @Autowired
  47. private PurcInquiryItemDao purcInquiryItemDao;
  48. /**
  49. * 查询公共询价列表信息
  50. *
  51. * @param info 分页新
  52. * @param filter 过滤条件
  53. * @param state 过滤状态
  54. * @return
  55. */
  56. @Override
  57. public Page<PurcInquiryItemInfo> findTodoByPageInfo(final PageInfo info, SearchFilter filter, String state) {
  58. if (null != filter) {
  59. if (StringUtils.hasText(filter.getKeyword())) {
  60. SimpleExpression cmpCode = new SimpleExpression("cmpCode", filter.getKeyword(), CriterionExpression.Operator.LIKE);
  61. SimpleExpression brand = new SimpleExpression("inbrand", filter.getKeyword(), CriterionExpression.Operator.LIKE);
  62. SimpleExpression code = new SimpleExpression("product.cmpCode", filter.getKeyword(), CriterionExpression.Operator.LIKE);
  63. SimpleExpression[] simpleExpressions = new SimpleExpression[]{cmpCode, brand, code};
  64. LogicalExpression logicalExpression = PredicateUtils.or(simpleExpressions);
  65. info.expression(logicalExpression);
  66. }
  67. if (filter.getFromDate() != null) {
  68. info.expression(PredicateUtils.gte("date", new Date(filter.getFromDate()), false));
  69. }
  70. if (filter.getEndDate() != null) {
  71. info.expression(PredicateUtils.lte("date", new Date(filter.getEndDate()), false));
  72. }
  73. }
  74. if (null != state) {
  75. // 待报价
  76. if (state.equals(OrderStatus.todo.name())) {
  77. SimpleExpression amount = new SimpleExpression("offerAmount", Constant.NO, CriterionExpression.Operator.EQ);
  78. SimpleExpression[] simpleExpressions = new SimpleExpression[]{amount};
  79. LogicalExpression logicalExpression = PredicateUtils.and(simpleExpressions);
  80. info.expression(logicalExpression);
  81. }
  82. // 已报价
  83. if (state.equals(OrderStatus.done.name())) {
  84. SimpleExpression amount = new SimpleExpression("offerAmount", Constant.YES, CriterionExpression.Operator.GTE);
  85. SimpleExpression[] simpleExpressions = new SimpleExpression[]{amount};
  86. LogicalExpression logicalExpression = PredicateUtils.and(simpleExpressions);
  87. info.expression(logicalExpression);
  88. }
  89. // 已超过截止日期
  90. if (state.equals(OrderStatus.end.name())) {
  91. SimpleExpression date = new SimpleExpression("endDate", new Date(System.currentTimeMillis()), CriterionExpression.Operator.LT);
  92. SimpleExpression[] simpleExpressions = new SimpleExpression[]{date};
  93. LogicalExpression logicalExpression = PredicateUtils.and(simpleExpressions);
  94. info.expression(logicalExpression);
  95. }
  96. }
  97. return inquiryItemDao.findAll(new Specification<PurcInquiryItemInfo>() {
  98. public Predicate toPredicate(Root<PurcInquiryItemInfo> root, CriteriaQuery<?> query, CriteriaBuilder builder) {
  99. query.where(info.getPredicates(root, query, builder));
  100. return null;
  101. }
  102. }, info);
  103. }
  104. /**
  105. * 保存公共询价
  106. *
  107. * @param currentInquiry 询价信息
  108. */
  109. @Override
  110. public PurcInquiry saveInquiry(PurcInquiry currentInquiry) {
  111. PurcInquiry existInquiry = purcInquiryDao.findByCodeAndEnUU(currentInquiry.getCode(), currentInquiry.getEnUU());
  112. if (null != existInquiry) {
  113. throw new IllegalOperatorException("单号重复");
  114. } else {
  115. PurcInquiry inquiry = purcInquiryDao.save(currentInquiry);
  116. if (!CollectionUtils.isEmpty(currentInquiry.getInquiryItems())) {
  117. List<PurcInquiryItem> items = new ArrayList<PurcInquiryItem>();
  118. for (PurcInquiryItem item : currentInquiry.getInquiryItems()) {
  119. item.setInquiry(inquiry);
  120. item.setOfferAmount(0);
  121. if (null == item.getDate()) {
  122. item.setDate(new Date(System.currentTimeMillis()));
  123. }
  124. // 这里设置物料信息的冗余字段
  125. if (null != item.getProduct()) {
  126. item.setProdTitle(item.getProduct().getTitle());
  127. item.setProdCode(item.getProduct().getCode());
  128. item.setSpec(item.getProduct().getSpec());
  129. item.setInbrand(item.getProduct().getBrand());
  130. }
  131. items.add(item);
  132. }
  133. purcInquiryItemDao.save(items);
  134. }
  135. return inquiry;
  136. }
  137. }
  138. /**
  139. * 通过报价明细id对供应商报价进行相关审核操作
  140. *
  141. * @param id 报价明细id
  142. * @param status 状态
  143. */
  144. @Override
  145. public void decideQuote(Long id, Short status) {
  146. PublicInquiryItem item = itemDao.findOne(id);
  147. item.setAgreed(status);
  148. itemDao.save(item);
  149. }
  150. /**
  151. * 针对客户,查询供应商报价详情
  152. *
  153. * @param id 主表id
  154. * @param enuu 企业UU
  155. * @return
  156. */
  157. @Override
  158. public InquiryDetailInfo findById(Long id, Long enuu) {
  159. PublicInquiry inquiry = inquiryDao.findOne(id);
  160. InquiryDetailInfo inquiryInfo = new InquiryDetailInfo();
  161. if (inquiry != null) {
  162. inquiryInfo.setAttachs(inquiry.getAttachs());
  163. inquiryInfo.setAuditor(inquiry.getAuditor());
  164. inquiryInfo.setCheck(inquiry.getCheck());
  165. inquiryInfo.setCode(inquiry.getCode());
  166. inquiryInfo.setDate(inquiry.getDate());
  167. inquiryInfo.setEndDate(inquiry.getEndDate());
  168. inquiryInfo.setEnterprise(inquiry.getEnterprise());
  169. inquiryInfo.setEnUU(inquiry.getEnUU());
  170. inquiryInfo.setEnvironment(inquiry.getEnvironment());
  171. inquiryInfo.setId(inquiry.getId());
  172. inquiryInfo.setIsOpen(inquiry.getIsOpen());
  173. inquiryInfo.setOverdue(inquiry.getOverdue());
  174. inquiryInfo.setPriceType(inquiry.getPriceType());
  175. inquiryInfo.setRecorder(inquiry.getRecorder());
  176. inquiryInfo.setRecorderUU(inquiry.getRecorderUU());
  177. inquiryInfo.setRemark(inquiry.getRemark());
  178. inquiryInfo.setSourceApp(inquiry.getSourceApp());
  179. inquiryInfo.setSourceId(inquiry.getSourceId());
  180. inquiryInfo.setShip(inquiry.getShip());
  181. inquiryInfo.setInvoice(inquiry.getInvoice());
  182. inquiryInfo.setInquirytype(inquiry.getInquirytype());
  183. Set<Long> ids = new HashSet<Long>();
  184. List<Long> idList = new ArrayList<>();
  185. Set<InquiryProductInfo> products = new HashSet<InquiryProductInfo>();
  186. if (!CollectionUtils.isEmpty(inquiry.getInquiryItems())) {
  187. for (PublicInquiryItem item : inquiry.getInquiryItems()) {
  188. idList.add(item.getProductId());
  189. ids.addAll(idList);
  190. }
  191. }
  192. if (!CollectionUtils.isEmpty(ids)) {
  193. for (Long idInfo : ids) {
  194. InquiryProductInfo productInfo = new InquiryProductInfo();
  195. Set<PublicInquiryItem> items = new HashSet<PublicInquiryItem>();
  196. Product product = productDao.findOne(idInfo);
  197. productInfo.setBrand(product.getBrand());
  198. productInfo.setId(product.getId());
  199. productInfo.setSpec(product.getSpec());
  200. productInfo.setCode(product.getCode());
  201. productInfo.setTitle(product.getTitle());
  202. productInfo.setUnit(product.getUnit());
  203. for (PublicInquiryItem item : inquiry.getInquiryItems()) {
  204. if (item.getProductId().equals(idInfo)) {
  205. items.add(item);
  206. }
  207. }
  208. productInfo.setInquiryItems(items);
  209. products.add(productInfo);
  210. inquiryInfo.setProducts(products);
  211. }
  212. }
  213. }
  214. return inquiryInfo;
  215. }
  216. /**
  217. * 通过企业UU和分页信息等查询已发布信息
  218. *
  219. * @param info 分页信息
  220. * @param filter 过滤条件
  221. * @return
  222. */
  223. @Override
  224. public Page<PurcInquiry> findByPageInfo(final PageInfo info, SearchFilter filter) {
  225. if (null != filter) {
  226. if (!StringUtils.isEmpty(filter.getKeyword())) {
  227. SimpleExpression code = new SimpleExpression("remark", filter.getKeyword(), CriterionExpression.Operator.LIKE);
  228. SimpleExpression[] simpleExpressions = new SimpleExpression[]{code};
  229. LogicalExpression logicalExpression = PredicateUtils.or(simpleExpressions);
  230. info.expression(logicalExpression);
  231. }
  232. if (filter.getFromDate() != null) {
  233. info.expression(PredicateUtils.gte("date", new Date(filter.getFromDate()), false));
  234. }
  235. if (filter.getEndDate() != null) {
  236. info.expression(PredicateUtils.lte("date", new Date(filter.getEndDate()), false));
  237. }
  238. }
  239. SimpleExpression amount = new SimpleExpression("amount", Constant.YES, CriterionExpression.Operator.GT);
  240. SimpleExpression[] simpleExpressions = new SimpleExpression[]{amount};
  241. LogicalExpression logicalExpression = PredicateUtils.and(simpleExpressions);
  242. info.expression(logicalExpression);
  243. return purcInquiryDao.findAll(new Specification<PurcInquiry>() {
  244. public Predicate toPredicate(Root<PurcInquiry> root, CriteriaQuery<?> query, CriteriaBuilder builder) {
  245. query.where(info.getPredicates(root, query, builder));
  246. return null;
  247. }
  248. }, info);
  249. }
  250. /**
  251. * 针对客户,查询单个物料的报价情况
  252. *
  253. * @param id 明细id
  254. * @param enuu 当前企业UU
  255. * @return
  256. */
  257. @Override
  258. public InquiryProductInfo findInquiryDetailById(Long id, Long enuu) {
  259. List<PublicInquiryItem> items = itemDao.findBySourceId(id);
  260. InquiryProductInfo productInfo = new InquiryProductInfo();
  261. if (!CollectionUtils.isEmpty(items)) {
  262. Long prId = items.get(0).getProductId();
  263. Product product = productDao.findOne(prId);
  264. productInfo.setBrand(product.getBrand());
  265. productInfo.setCode(product.getCode());
  266. productInfo.setTitle(product.getTitle());
  267. productInfo.setSpec(product.getSpec());
  268. productInfo.setUnit(product.getUnit());
  269. productInfo.setCmpCode(productInfo.getCmpCode());
  270. productInfo.setInquiryItems(new HashSet<PublicInquiryItem>(items));
  271. }
  272. return productInfo;
  273. }
  274. }