PublicInquiryServiceImpl.java 49 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830831832833834835836837838839840841842843844845846847848849850851852853854855856857858859860861862863864865866867868869870871872873874875876877878879880881882883884885886887888889890891892893894895896897898899900901902903904905906907908909910911912913914915916917918919920921922923924925926927928929930931932933934935936937938939940941942943944945946947948949950951952953954955956957958959960961962963964965966967968969970971972973974975976977978979980981982983984985986987988989990991992993994995996997998999100010011002100310041005100610071008100910101011101210131014101510161017101810191020102110221023102410251026102710281029103010311032103310341035103610371038103910401041104210431044104510461047104810491050105110521053105410551056105710581059106010611062106310641065106610671068106910701071107210731074107510761077
  1. package com.uas.ps.inquiry.service.impl;
  2. import com.alibaba.fastjson.JSON;
  3. import com.alibaba.fastjson.JSONObject;
  4. import com.uas.ps.core.util.ContextUtils;
  5. import com.uas.ps.entity.Product;
  6. import com.uas.ps.entity.ProductUsers;
  7. import com.uas.ps.entity.Status;
  8. import com.uas.ps.inquiry.AccessConfiguration;
  9. import com.uas.ps.inquiry.dao.*;
  10. import com.uas.ps.inquiry.domain.IPage;
  11. import com.uas.ps.inquiry.entity.*;
  12. import com.uas.ps.inquiry.model.*;
  13. import com.uas.ps.inquiry.page.PageInfo;
  14. import com.uas.ps.inquiry.page.SearchFilter;
  15. import com.uas.ps.inquiry.page.criteria.CriterionExpression;
  16. import com.uas.ps.inquiry.page.criteria.LogicalExpression;
  17. import com.uas.ps.inquiry.page.criteria.PredicateUtils;
  18. import com.uas.ps.inquiry.page.criteria.SimpleExpression;
  19. import com.uas.ps.inquiry.service.PublicInquiryService;
  20. import com.uas.ps.inquiry.util.*;
  21. import javassist.NotFoundException;
  22. import org.apache.log4j.Logger;
  23. import org.springframework.beans.factory.annotation.Autowired;
  24. import org.springframework.dao.DataAccessException;
  25. import org.springframework.data.domain.Page;
  26. import org.springframework.data.jpa.domain.Specification;
  27. import org.springframework.jdbc.core.BeanPropertyRowMapper;
  28. import org.springframework.jdbc.core.JdbcTemplate;
  29. import org.springframework.stereotype.Service;
  30. import org.springframework.ui.ModelMap;
  31. import org.springframework.util.CollectionUtils;
  32. import org.springframework.util.StringUtils;
  33. import javax.persistence.criteria.*;
  34. import java.text.SimpleDateFormat;
  35. import java.util.*;
  36. /**
  37. * 公共询价接口实现
  38. *
  39. * Created by hejq on 2018-01-13.
  40. */
  41. @Service
  42. public class PublicInquiryServiceImpl implements PublicInquiryService {
  43. @Autowired
  44. private PublicInquiryDao publicInquiryDao;
  45. @Autowired
  46. private PurcInquiryDao purcInquiryDao;
  47. @Autowired
  48. private ProductDao productDao;
  49. @Autowired
  50. private PurcInquiryItemDao purcInquiryItemDao;
  51. @Autowired
  52. private JdbcTemplate jdbcTemplate;
  53. @Autowired
  54. private PublicInquiryReplyDao publicInquiryReplyDao;
  55. @Autowired
  56. private PurcInquiryItemInfoDao inquiryItemInfoDao;
  57. @Autowired
  58. private PublicInquiryItemInfoDao itemInfoDao;
  59. @Autowired
  60. private PublicInquiryItemDao publicInquiryItemDao;
  61. @Autowired
  62. private UserDao userDao;
  63. @Autowired
  64. private EnterpriseDao enterpriseDao;
  65. @Autowired
  66. private InquiryRemindDao remindDao;
  67. private static final Logger logger = Logger.getLogger(Logger.class);
  68. /**
  69. * 应用来源
  70. */
  71. private final String SOURCERAPP = "B2B";
  72. /**
  73. * 消息类型 (在B2B消息中拼接跳转单据详情url请求时需要)
  74. */
  75. private final String INQUIRY_TYPE = "公共询价";
  76. /**
  77. * 消息类型,公共询价的采纳结果
  78. */
  79. private final String INQUIRY_DECIDE_TYPE = "公共询价采纳结果";
  80. /**
  81. * 询价种类
  82. */
  83. private final String INQUIRYKIND = "publicInquiry";
  84. /**
  85. * 消息推送邮件模板id
  86. */
  87. private final String MAIL_TEMP_ID = "d94e931b-b699-46d7-8bb2-94604a3352c0";
  88. /**
  89. * 消息推送短信模板id
  90. */
  91. private final String SMS_TEMP_ID = "6e094dcf-f2c7-462a-9686-b2d32d684a78";
  92. /**
  93. * 消息推送方式:邮件、短信、im
  94. */
  95. private final String SMS_TYPE = "MAIL_AND_SM_AND_IM";
  96. /**
  97. * 来源应用,ERP
  98. */
  99. private final String PRODUCERAPP = "ERP";
  100. /**
  101. * 消费类型: 多个,MULTI
  102. */
  103. private final String CUST_TYPE = "MULTI";
  104. /**
  105. * 接收应用
  106. */
  107. private final String CONSUMERAPP = "B2B,MALL";
  108. /**
  109. * 公共物料访问地址
  110. */
  111. private final String PS_PRODUCT_URL = ContextUtils.getBean(AccessConfiguration.class).getPsProductUrl();
  112. /**
  113. * 公共消息访问地址
  114. */
  115. private final String PS_MESSAGE_URL = ContextUtils.getBean(AccessConfiguration.class).getPsMessageUrl();
  116. /**
  117. * 保存公共询价信息
  118. *
  119. * @param inquiries erp传入公共询价的信息
  120. * @param enuu 询价企业UU号
  121. * @param address 询价企业地址
  122. */
  123. @Override
  124. public void save(List<BatchInquiry> inquiries, Long enuu, String address) throws NotFoundException {
  125. List<PurcInquiry> purcInquiries = covert(inquiries, enuu, address);
  126. if (!CollectionUtils.isEmpty(purcInquiries)) {
  127. for (PurcInquiry inquiry : purcInquiries) {
  128. // 判断单号是否已存在
  129. PurcInquiry old = purcInquiryDao.findByCodeAndEnUU(inquiry.getCode(), enuu);
  130. List<PurcInquiryItem> items = new ArrayList<PurcInquiryItem>();
  131. if (old == null && !CollectionUtils.isEmpty(inquiry.getInquiryItems())) {
  132. for (PurcInquiryItem item : inquiry.getInquiryItems()) {
  133. item.setInquiry(inquiry);
  134. items.add(item);
  135. }
  136. }
  137. try {
  138. items = purcInquiryItemDao.save(items);
  139. if (!CollectionUtils.isEmpty(items)) {
  140. notify(items, PRODUCERAPP);
  141. }
  142. } catch (Exception e) {
  143. e.printStackTrace();
  144. }
  145. }
  146. }
  147. }
  148. /**
  149. * 消息推送
  150. *
  151. * @param inquiryItems 询价明细
  152. * @param sourceApp 消息来源应用
  153. */
  154. @Override
  155. public void notify(List<PurcInquiryItem> inquiryItems, String sourceApp) throws Exception {
  156. for (PurcInquiryItem item : inquiryItems) {
  157. String cmpCode = null;
  158. if (item.getCmpCode() != null) {
  159. cmpCode = item.getCmpCode();
  160. } else if (null != item.getProductId()) {
  161. Product product = productDao.findOne(item.getProductId());
  162. cmpCode = product.getCmpCode();
  163. }
  164. if (null != cmpCode) {
  165. String url = PS_PRODUCT_URL + "/productuser/getProductUsersByEnUUAndCmpCode";
  166. JSONObject formData = new JSONObject();
  167. formData.put("enUU", item.getInquiry().getEnUU());
  168. formData.put("cmpCode", cmpCode);
  169. try {
  170. HttpUtil.Response res = HttpUtil.sendGetRequest(url, formData);
  171. if (res.getStatusCode() == 200) {
  172. List<ProductUsers> users = FlexJsonUtils.fromJsonArray(res.getResponseText(), ProductUsers.class);
  173. if (!CollectionUtils.isEmpty(users)) {
  174. List<MessageModel> models = new ArrayList<MessageModel>();
  175. for (ProductUsers user : users) {
  176. User u = userDao.findOne(null != item.getInquiry().getRecorderUU() ? item.getInquiry().getRecorderUU() : 0L);
  177. Enterprise e = enterpriseDao.findOne(item.getInquiry().getEnUU());
  178. String cmp = cmpCode.length() > 10 ? cmpCode.substring(0, 10).concat("...") : cmpCode;
  179. String content = "发布关于“" + cmp + "”的公共询价信息,邀请您参与报价";
  180. if (null != e) {
  181. content = e.getEnName() + content;
  182. } else if (null != u) {
  183. content = u.getUserName() + content;
  184. }
  185. MessageModel model = new MessageModel();
  186. model.setType(INQUIRY_TYPE);
  187. model.setProducerApp(sourceApp);
  188. model.setConsumerType(CUST_TYPE);
  189. model.setConsumerApp(CONSUMERAPP);
  190. model.setContent(content);
  191. model.setRemark(String.valueOf(item.getInquiry().getId()));
  192. model.setSourceId(item.getId());
  193. model.setReceiverEnuu(user.getEnuu());
  194. model.setReceiverUu(user.getUseruu());
  195. model.setSenderEnuu(item.getInquiry().getEnUU());
  196. if (null != item.getUserUU() || null != item.getInquiry().getRecorderUU()) {
  197. model.setSenderUu(item.getUserUU() != null ? item.getUserUU() : item.getInquiry().getRecorderUU());
  198. } else {
  199. Enterprise enterprise = enterpriseDao.findOne(item.getInquiry().getEnUU());
  200. model.setSenderUu(null != enterprise ? enterprise.getAdminUU() : 0L);
  201. }
  202. model.setSmsType(SMS_TYPE);
  203. model.setMailTemplate(MAIL_TEMP_ID);
  204. model.setSmTemplate(SMS_TEMP_ID);
  205. models.add(model);
  206. }
  207. if (!CollectionUtils.isEmpty(models)) {
  208. sendMessage(models);
  209. }
  210. // 生成推荐信息
  211. remindInquiry(inquiryItems, users);
  212. }
  213. }
  214. } catch (Exception e) {
  215. logger.info("根据企业UU和物料原厂型号cmpCode从公共物料库获取个人产品库相关用户失败:" + e.getMessage());
  216. e.printStackTrace();
  217. }
  218. }
  219. }
  220. }
  221. /**
  222. * 通过查询的个人物料相关联的信息,自动生成推荐的报价的数据
  223. *
  224. * @param inquiryItems 报价明细
  225. * @param users 用户信息
  226. */
  227. private void remindInquiry(final List<PurcInquiryItem> inquiryItems, final List<ProductUsers> users) {
  228. ThreadUtils.task(new Runnable() {
  229. @Override
  230. public void run() {
  231. try {
  232. List<InquiryRemind> reminds = new ArrayList<InquiryRemind>();
  233. for (ProductUsers u : users) {
  234. for (PurcInquiryItem item : inquiryItems) {
  235. List<InquiryRemind> remindList = remindDao.findByVendUserUUAndVendUUAndItemId(u.getUseruu(), u.getEnuu(), item.getId());
  236. if (remindList.size() == 0 && item.getInquiry().getEnUU() != null &&
  237. ((item.getProduct() != null && item.getProduct().getCmpCode().equals(u.getProduct().getCmpCode())) ||
  238. item.getCmpCode().equals(u.getProduct().getCmpCode()))) {
  239. Enterprise enterprise = enterpriseDao.findOne(item.getInquiry().getEnUU());
  240. InquiryRemind remind = new InquiryRemind();
  241. remind.setEnName(enterprise.getEnName());
  242. remind.setEnUU(item.getInquiry().getEnUU());
  243. remind.setUserName(item.getUserName());
  244. remind.setUserTel(item.getUserTel());
  245. remind.setCode(item.getInquiry().getCode());
  246. remind.setBrand(item.getBrand());
  247. remind.setCmpCode(item.getCmpCode());
  248. remind.setSpec(item.getSpec());
  249. remind.setTitle(item.getProdTitle());
  250. if (item.getProduct() != null) {
  251. remind.setBrand(item.getProduct().getBrand());
  252. remind.setCmpCode(item.getProduct().getCmpCode());
  253. remind.setSpec(item.getProduct().getSpec());
  254. remind.setTitle(item.getProduct().getTitle());
  255. }
  256. remind.setItemId(item.getId());
  257. remind.setNeedQty(item.getNeedquantity());
  258. remind.setReDate(item.getInquiry().getDate());
  259. remind.setEndDate(item.getInquiry().getEndDate());
  260. remind.setVendUU(u.getEnuu());
  261. remind.setVendUserUU(u.getUseruu());
  262. remind.setDate(new Date(System.currentTimeMillis()));
  263. remind.setStatus(Status.INPUTTING.value());
  264. reminds.add(remind);
  265. }
  266. }
  267. }
  268. if (!CollectionUtils.isEmpty(reminds)) {
  269. remindDao.save(reminds);
  270. }
  271. } catch (Exception e) {
  272. e.printStackTrace();
  273. }
  274. }
  275. }).run();
  276. }
  277. /**
  278. * 通过id查询询价信息
  279. *
  280. * @param id 公共询价主表id
  281. * @return
  282. */
  283. @Override
  284. public PurcInquiry findInquiryById(Long id) {
  285. PurcInquiry inquiry = purcInquiryDao.findOne(id);
  286. if (!CollectionUtils.isEmpty(inquiry.getInquiryItems())) {
  287. for (PurcInquiryItem item : inquiry.getInquiryItems()) {
  288. if (null == item.getProductId()) {
  289. Product product = new Product();
  290. product.setTitle(item.getProdTitle());
  291. product.setCmpCode(item.getCmpCode());
  292. product.setBrand(item.getInbrand());
  293. product.setSpec(item.getSpec());
  294. item.setProduct(product);
  295. }
  296. }
  297. }
  298. return inquiry;
  299. }
  300. /**
  301. * 发送消息推送
  302. *
  303. * @param models 封装的消息信息
  304. */
  305. private void sendMessage(final List<MessageModel> models) {
  306. ThreadUtils.task(new Runnable() {
  307. @Override
  308. public void run() {
  309. try {
  310. logger.info("发送消息实体" + JSON.toJSONString(models));
  311. String res = HttpUtil.doPost(PS_MESSAGE_URL + "/messages", FlexJsonUtils.toJsonDeep(models));
  312. logger.info("消息请求发送日志" + res);
  313. } catch (Exception e) {
  314. e.printStackTrace();
  315. }
  316. }
  317. }).run();
  318. }
  319. /**
  320. * 将ERP传入的inquiry信息转成公共询价服务中心需要的信息
  321. *
  322. * @param inquiries 将ERP传入的inquiry信息
  323. * @param enuu 询价企业UU号
  324. * @param address 询价企业地址
  325. * @return
  326. */
  327. @Override
  328. public List<PurcInquiry> covert(List<BatchInquiry> inquiries, Long enuu, String address) throws NotFoundException {
  329. List<PurcInquiry> purcInquiries = new ArrayList<PurcInquiry>();
  330. if (!CollectionUtils.isEmpty(inquiries)) {
  331. for (BatchInquiry inquiry : inquiries) {
  332. PurcInquiry old = purcInquiryDao.findByCodeAndEnUU(inquiry.getBi_code(), enuu);
  333. //先判断是否已经存在,不存在才进行存储
  334. if (null == old) {
  335. PurcInquiry purcInquiry = inquiry.covert();
  336. purcInquiry.setEnUU(enuu);
  337. purcInquiry.setShip(address);
  338. Set<PurcInquiryItem> purcInquiryItems = new HashSet<PurcInquiryItem>();
  339. if (!CollectionUtils.isEmpty(inquiry.getInProducts())) {
  340. for (BatchInProduct batch : inquiry.getInProducts()) {
  341. PurcInquiryItem item = new PurcInquiryItem();
  342. item.setIsOpen(Constant.YES);
  343. List<Product> products = productDao.findByEnUUAndCode(enuu, batch.getBip_prodcode());
  344. if (CollectionUtils.isEmpty(products)) {
  345. throw new NotFoundException("编号为[" + batch.getBip_prodcode() + "]的物料未找到");
  346. }
  347. item.setProductId(products.get(0).getId());
  348. item.setCmpCode(products.get(0).getCmpCode());
  349. item.setInbrand(products.get(0).getBrand());
  350. item.setProdTitle(products.get(0).getTitle());
  351. item.setSpec(products.get(0).getSpec());
  352. item.setRemark(batch.getBip_remark());
  353. item.setProdCode(products.get(0).getCode());
  354. item.setProdTitle(products.get(0).getTitle());
  355. item.setNumber(batch.getBip_detno());
  356. item.setFromDate(new Date());
  357. item.setToDate(purcInquiry.getEndDate());
  358. item.setStatus((short) Status.NOT_REPLY.value());
  359. item.setIsOpen(Constant.YES);
  360. item.setSource("ERP");
  361. item.setSourceid(batch.getBip_id());
  362. item.setCurrency(batch.getBip_currency());
  363. item.setUserName(batch.getEm_name());
  364. item.setUserTel(batch.getBip_mobile());
  365. item.setUserCode(batch.getBip_buyercode());
  366. item.setOfferAmount(0);
  367. item.setEndDate(inquiry.getBi_enddate());
  368. if (null != inquiry.getBi_date()) {
  369. item.setDate(inquiry.getBi_date());
  370. } else {
  371. item.setDate(new Date(System.currentTimeMillis()));
  372. }
  373. if (item.getCurrency() == null) {
  374. item.setCurrency("RMB");
  375. }
  376. purcInquiryItems.add(item);
  377. }
  378. }
  379. purcInquiry.setInquiryItems(purcInquiryItems);
  380. purcInquiries.add(purcInquiry);
  381. }
  382. }
  383. }
  384. return purcInquiries;
  385. }
  386. /**
  387. * erp提交审核时,公共询价服务中心单据禁用报价功能
  388. *
  389. * @param inquiries erp询价信息
  390. * @param enuu 询价企业UU号
  391. */
  392. @Override
  393. public void updateStatus(List<BatchInquiry> inquiries, Long enuu) {
  394. if (!CollectionUtils.isEmpty(inquiries)) {
  395. for (BatchInquiry inquiry : inquiries) {
  396. PurcInquiry purcInquiry = purcInquiryDao.findByCodeAndEnUU(inquiry.getBi_code(), enuu);
  397. purcInquiryItemDao.updateStatus(purcInquiry.getId());
  398. }
  399. }
  400. }
  401. /**
  402. * 查询供应商的报价信息
  403. *
  404. * @return
  405. */
  406. @Override
  407. public List<InquiryDetail> findNotUploadReply(Long enuu) {
  408. List<PublicInquiryItem> items = publicInquiryItemDao.findByEnUUAndBackStatus(enuu, (short) Status.NOT_UPLOAD.value());
  409. if (!CollectionUtils.isEmpty(items)) {
  410. // 防止下载过程中进行操作,这里设置一个下载中的状态
  411. Set<Long> ids = new HashSet<>();
  412. for (PublicInquiryItem item : items) {
  413. ids.add(item.getId());
  414. }
  415. if (ids.size() > 0) {
  416. publicInquiryItemDao.updateBackStatus(ids);
  417. }
  418. return convertPublicInquiryReply(items);
  419. }
  420. return new ArrayList<>();
  421. }
  422. /**
  423. * 将公共询价服务中心的公共询价转成ERP的对应的字段
  424. *
  425. * @param notUploadReply 未下载的供应商报价信息
  426. * @return
  427. * @author hejq
  428. * @date 2018-01-14 11:51
  429. */
  430. @Override
  431. public List<InquiryDetail> convertPublicInquiryReply(List<PublicInquiryItem> notUploadReply) {
  432. List<InquiryDetail> details = new ArrayList<InquiryDetail>();
  433. if (!CollectionUtils.isEmpty(notUploadReply)) {
  434. for (PublicInquiryItem item : notUploadReply) {
  435. details.add(new InquiryDetail(item));
  436. }
  437. }
  438. return details;
  439. }
  440. /**
  441. * 下载完成后更新公共询价服务中心询价单明细的下载状态
  442. *
  443. * @param idArray 询价单明细id
  444. * @author hejq
  445. * @date 2018-01-14 12:12
  446. */
  447. @Override
  448. public void onReplyUploadSuccess(String[] idArray) {
  449. for (String id : idArray) {
  450. PublicInquiryItem item = publicInquiryItemDao.findOne(Long.parseLong(id));
  451. if (item != null) {
  452. item.setBackStatus((short) Status.DOWNLOADED.value());
  453. item.setErpstatus(Constant.YES);
  454. publicInquiryItemDao.save(item);
  455. }
  456. }
  457. }
  458. /**
  459. * ERP提交公共询价单之后,更新平台状态,让公共询价服务中心询价单不能进行报价操作
  460. *
  461. * @param details 询价信息
  462. * @author hejq
  463. * @date 2018-01-14 12:20
  464. */
  465. @Override
  466. public void updateInquiryStatus(List<InquiryDetail> details, Long enuu) {
  467. if (!CollectionUtils.isEmpty(details)) {
  468. for (InquiryDetail detail : details) {
  469. // 更新为过期状态,不能进行报价处理
  470. String sql = "update purc$puInquiryItems set id_overdue = 1 where id_id = " +
  471. "(select id_sourceid from public$inquiryItems where id_id = " + detail.getB2b_id_id() + ")";
  472. jdbcTemplate.update(sql);
  473. // 更新已转报价的询价单明细状态
  474. jdbcTemplate.update("update public$inquiryItems set id_checked = 1 where id_id = " + detail.getB2b_id_id());
  475. }
  476. }
  477. }
  478. /**
  479. * ERP对报价信息的采纳状态上传到公共询价服务中心
  480. *
  481. * @param decides 采纳信息
  482. */
  483. @Override
  484. public void onReplyDecide(List<InquiryDecide> decides, Long enuu) {
  485. List<PublicInquiryItem> publicInquiryItems = convertInquiryDecide(decides);
  486. if (!CollectionUtils.isEmpty(publicInquiryItems)) {
  487. for (PublicInquiryItem inquiryItem : publicInquiryItems) {
  488. publicInquiryItemDao.updateDecideStatusByID(inquiryItem.getAgreed(), inquiryItem.getDecideStatus(), inquiryItem.getId());
  489. notifyDecide(inquiryItem, PRODUCERAPP);
  490. }
  491. }
  492. }
  493. /**
  494. * 针对供应商,客户对报价结果发送消息通知
  495. *
  496. * @param item 询价明细
  497. * @param sourceApp 应用来源
  498. */
  499. @Override
  500. public void notifyDecide(PublicInquiryItem item, String sourceApp) {
  501. final String SMS_TYPE = "IM"; //只推送消息
  502. List<MessageModel> models = new ArrayList<MessageModel>();
  503. User u = userDao.findOne(null != item.getInquiry().getRecorderUU() ? item.getInquiry().getRecorderUU() : 0L);
  504. Enterprise e = enterpriseDao.findOne(item.getInquiry().getEnUU());
  505. String cmpCode = item.getProduct().getCmpCode() != null ? item.getProduct().getCmpCode() : item.getCmpCode();
  506. String content = item.getAgreed() == 1 ? "【采纳】" : "【未采纳】";
  507. content = content + "您关于“" + cmpCode + "”的报价";
  508. if (null != e) {
  509. content = e.getEnName() + content;
  510. } else if (null != u) {
  511. content = u.getUserName() + content;
  512. } else if (null == e && null == u) {
  513. content = "您关于“" + cmpCode + "”的报价已被";
  514. String result = item.getAgreed() == 1 ? "【采纳】" : "【拒绝】";
  515. content = content + result;
  516. }
  517. MessageModel model = new MessageModel();
  518. model.setType(INQUIRY_DECIDE_TYPE);
  519. model.setProducerApp(sourceApp);
  520. model.setConsumerType(CUST_TYPE);
  521. model.setConsumerApp(CONSUMERAPP);
  522. model.setContent(content);
  523. model.setRemark(String.valueOf(item.getInquiry().getId()));
  524. model.setSourceId(item.getId());
  525. model.setReceiverEnuu(item.getVendUU());
  526. model.setReceiverUu(item.getVendUserUU());
  527. model.setSenderEnuu(item.getInquiry().getEnUU());
  528. if (null != item.getUserUU() || null != item.getInquiry().getRecorderUU()) {
  529. model.setSenderUu(item.getUserUU() != null ? item.getUserUU() : item.getInquiry().getRecorderUU());
  530. } else {
  531. Enterprise enterprise = enterpriseDao.findOne(item.getInquiry().getEnUU());
  532. model.setSenderUu(null != enterprise ? enterprise.getAdminUU() : 0L);
  533. }
  534. model.setSmsType(SMS_TYPE);
  535. models.add(model);
  536. if (!CollectionUtils.isEmpty(models)) {
  537. sendMessage(models);
  538. }
  539. }
  540. /**
  541. * 将ERP的报价采纳信息转为公共询价服务中心需要的信息
  542. *
  543. * @param decides erp报价采纳信息
  544. * @author hejq
  545. * @date 2018-01-14 12:25
  546. */
  547. @Override
  548. public List<PublicInquiryItem> convertInquiryDecide(List<InquiryDecide> decides) {
  549. List<PublicInquiryItem> inquiryItems = new ArrayList<PublicInquiryItem>();
  550. if (!CollectionUtils.isEmpty(decides)) {
  551. for (InquiryDecide decide : decides) {
  552. PublicInquiryItem item = publicInquiryItemDao.findOne(decide.getB2b_id());
  553. if (null != item) {
  554. item.setAgreed(decide.getId_agreed());
  555. item.setDecideStatus((short) Status.NOT_UPLOAD.value());
  556. inquiryItems.add(item);
  557. }
  558. }
  559. }
  560. return inquiryItems;
  561. }
  562. /**
  563. * 买家ERP作废询价单后,修改公共询价服务中心里面的状态
  564. *
  565. * @param inquiries 询价信息
  566. * @param enuu 企业UU
  567. * @author hejq
  568. * @date 2018-01-14 12:28
  569. */
  570. @Override
  571. public void onReplyInvalid(List<Inquiry> inquiries, final Long enuu) {
  572. final List<PublicInquiryItem> newInquiryItems = new ArrayList<>();
  573. ThreadUtils.tasks(new IRunnable<Inquiry>() {
  574. @Override
  575. public void run(Inquiry inquiry) {
  576. List<PublicInquiry> purchaseInquiries = publicInquiryDao.findByEnUUAndCode(enuu, inquiry.getIn_code());
  577. if (!CollectionUtils.isEmpty(purchaseInquiries)) {
  578. PublicInquiry publicInquiry = purchaseInquiries.get(0);
  579. for (PublicInquiryItem item : publicInquiry.getInquiryItems()) {
  580. item.setStatus((short) Status.DISABLED.value());
  581. // 获取作废信息时,更新作废上传状态为 待上传
  582. item.setInvalidStatus((short) Status.NOT_UPLOAD.value());
  583. synchronized (newInquiryItems) {
  584. newInquiryItems.add(item);
  585. }
  586. }
  587. }
  588. }
  589. }, inquiries).run();
  590. }
  591. /**
  592. * 将公共询价列表转成需要报价的询价单,类型是公共询价
  593. *
  594. * @param id 询价明细id
  595. * @param enuu 报价企业UU
  596. * @param useruu 报价人uu
  597. * @return
  598. * @author hejq
  599. * @date 2018-01-14 14:46
  600. */
  601. @Override
  602. public ModelMap transtoInquiry(Long id, Long enuu, Long useruu) {
  603. ModelMap map = new ModelMap();
  604. PurcInquiryItem purcInquiryItem = purcInquiryItemDao.findOne(id);
  605. PurcInquiry purcInquiry = purcInquiryItem.getInquiry();
  606. // 先判断客户询价单是否存在这张单据
  607. PublicInquiry inquiry = publicInquiryDao.findBySourceIdAndSourceApp(purcInquiry.getId(), SOURCERAPP);
  608. if (null == inquiry) {// 新增
  609. PublicInquiry saleInquiry = new PublicInquiry();
  610. saleInquiry.setDate(new Date());
  611. saleInquiry.setCode(purcInquiry.getCode());
  612. saleInquiry.setEnUU(purcInquiry.getEnUU());
  613. saleInquiry.setRecorder(purcInquiry.getRecorder());
  614. saleInquiry.setRecorderUU(purcInquiry.getRecorderUU());
  615. saleInquiry.setAuditor(purcInquiry.getAuditor());
  616. saleInquiry.setSourceApp(SOURCERAPP);
  617. saleInquiry.setKind(INQUIRYKIND);
  618. saleInquiry.setSourceId(purcInquiry.getId());
  619. saleInquiry.setPriceType(purcInquiry.getPriceType());
  620. saleInquiry.setInvoice(purcInquiry.getInvoice());
  621. saleInquiry.setShip(purcInquiry.getShip());
  622. saleInquiry.setEndDate(purcInquiry.getEndDate());
  623. if (!CollectionUtils.isEmpty(purcInquiry.getAttachs())) {
  624. Set<com.uas.ps.inquiry.model.Attach> attachs = new HashSet<com.uas.ps.inquiry.model.Attach>();
  625. for (com.uas.ps.inquiry.model.Attach attach : purcInquiry.getAttachs()) {
  626. com.uas.ps.inquiry.model.Attach newAttach = new com.uas.ps.inquiry.model.Attach();
  627. newAttach.setDate(new Date());
  628. newAttach.setDescription(attach.getDescription());
  629. newAttach.setName(attach.getName());
  630. newAttach.setPath(attach.getPath());
  631. newAttach.setRelatedKey(attach.getRelatedKey());
  632. newAttach.setSize(attach.getSize());
  633. newAttach.setRelatedKey(attach.getRelatedKey());
  634. attachs.add(newAttach);
  635. }
  636. saleInquiry.setAttachs(attachs);
  637. }
  638. saleInquiry.setEnvironment(purcInquiry.getEnvironment());
  639. saleInquiry.setRemark(purcInquiry.getRemark());
  640. saleInquiry.setInquirytype(purcInquiry.getInquirytype());
  641. Set<PublicInquiryItem> items = new HashSet<PublicInquiryItem>();
  642. Short i = 0;
  643. if (null != purcInquiryItem) {
  644. PublicInquiryItem item = new PublicInquiryItem();
  645. Product product = productDao.findOne(purcInquiryItem.getProductId());
  646. item.setProductId(product.getId());
  647. item.setInquiry(saleInquiry);
  648. item.setNumber(i);
  649. item.setCurrency(purcInquiryItem.getCurrency());
  650. item.setFromDate(new Date());
  651. item.setToDate(purcInquiryItem.getToDate());
  652. item.setTaxrate(purcInquiryItem.getTaxrate());
  653. item.setRemark(purcInquiryItem.getRemark());
  654. item.setProductId(purcInquiryItem.getProductId());
  655. item.setStatus((short) Status.NOT_REPLY.value());
  656. item.setVendUU(enuu);
  657. item.setVendUserUU(useruu);
  658. item.setSource(purcInquiryItem.getSource());
  659. item.setCustLap(Constant.NO);
  660. item.setSendStatus((short) Status.NOT_UPLOAD.value());
  661. item.setSourceId(id);
  662. List<PublicInquiryReply> replies = new ArrayList<PublicInquiryReply>();
  663. PublicInquiryReply reply = new PublicInquiryReply();
  664. reply.setLapQty((double) 0);
  665. replies.add(reply);
  666. item.setReplies(replies);
  667. item.setNeedquantity(purcInquiryItem.getNeedquantity());
  668. item.setKind(INQUIRYKIND);
  669. item.setProdCode(purcInquiryItem.getProdCode());
  670. items.add(item);
  671. i++;
  672. }
  673. List<PublicInquiryItem> purcitems = publicInquiryItemDao.save(items);
  674. if (purcitems.get(0).getId() != null) {
  675. map.put("success", "转客户询价单成功");
  676. map.put("id", purcitems.get(0).getInquiry().getId());
  677. } else {
  678. map.put("success", "转客户询价单失败");
  679. }
  680. } else {// 插入
  681. PublicInquiryItem purcItem = publicInquiryItemDao.findByVendUUAndSourceId(enuu, id);
  682. if (purcItem != null) {
  683. map.put("info", "询价单已存在");
  684. map.put("inid", purcItem.getId());
  685. } else {
  686. if (!CollectionUtils.isEmpty(purcInquiry.getInquiryItems())) {
  687. if (null != purcInquiryItem) {
  688. // 涉及到级联存储及ERP转入单据的操作,用主表id存储存在问题,这里先用sql语句直接插入
  689. PublicInquiryItem item = new PublicInquiryItem();
  690. Product product = productDao.findOne(purcInquiryItem.getProductId());
  691. item.setProductId(product.getId());
  692. item.setNumber((short) (purcInquiry.getInquiryItems().size() + 1));
  693. item.setCurrency(purcInquiryItem.getCurrency());
  694. item.setFromDate(new Date());
  695. item.setToDate(purcInquiryItem.getToDate());
  696. item.setTaxrate(purcInquiryItem.getTaxrate());
  697. item.setRemark(purcInquiryItem.getRemark());
  698. item.setProductId(purcInquiryItem.getProductId());
  699. item.setVendUU(enuu);
  700. item.setVendUserUU(useruu);
  701. item.setSource(purcInquiryItem.getSource());
  702. item.setStatus((short) Status.NOT_REPLY.value());
  703. item.setCustLap(Constant.NO);
  704. item.setSendStatus((short) Status.NOT_UPLOAD.value());
  705. item.setSourceId(id);
  706. item.setProdCode(purcInquiryItem.getProdCode());
  707. item.setKind(INQUIRYKIND);
  708. item.setNeedquantity(purcInquiryItem.getNeedquantity());
  709. List<PublicInquiryReply> replies = new ArrayList<PublicInquiryReply>();
  710. List<PublicInquiryReply> purcReplies = new ArrayList<PublicInquiryReply>();
  711. PublicInquiryReply reply = new PublicInquiryReply();
  712. reply.setLapQty((double) 0);
  713. purcReplies.add(reply);
  714. purcReplies = publicInquiryReplyDao.save(purcReplies);
  715. replies.addAll(purcReplies);
  716. item.setReplies(replies);
  717. Long idid = jdbcTemplate.queryForObject("select public$inquiryitems_seq.nextval from dual", Long.class);
  718. try {
  719. jdbcTemplate.update(
  720. "insert into public$inquiryitems(id_id,id_number,id_currency,id_fromdate,id_todate,id_taxrate,id_prid,id_venduu,"
  721. + "id_venduseruu,id_sourceapp,id_status,id_custlap,id_sendstatus,id_sourceid,id_inid,id_kind) values (?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?)",
  722. idid, item.getNumber(), item.getCurrency(), item.getFromDate(), item.getToDate(),
  723. item.getTaxrate(), item.getProductId(), item.getVendUU(), item.getVendUserUU(),
  724. item.getSource(), item.getStatus(), item.getCustLap(), item.getSendStatus(),
  725. item.getSourceId(), inquiry.getId(), inquiry.getKind());
  726. } catch (DataAccessException e) {
  727. map.put("info", "转客户询价单失败");
  728. }
  729. item = publicInquiryItemDao.findOne(idid);
  730. //回复清单更新
  731. if(replies.size() > 0) {
  732. for (PublicInquiryReply reply1 : replies) {
  733. jdbcTemplate.update("update public$inquiryreply set ir_idid = " + idid + "where ir_id = " + reply1.getId());
  734. }
  735. }
  736. if (item != null) {
  737. map.put("success", "转客户询价单成功");
  738. map.put("id", item.getInquiry().getId());
  739. } else {
  740. map.put("info", "转客户询价单失败");
  741. }
  742. }
  743. }
  744. }
  745. }
  746. return map;
  747. }
  748. /**
  749. * 通过分页参数和过滤条件查询报价信息
  750. *
  751. * @param info 分页参数
  752. * @param filter 过滤条件
  753. * @return
  754. * @author hejq
  755. * @date 2018-01-17 10:30
  756. */
  757. @Override
  758. public IPage<PublicInquiryItemInfo> findByPageInfo(final PageInfo info, final SearchFilter filter) {
  759. if (null != filter) {
  760. if (StringUtils.hasText(filter.getKeyword())) {
  761. SimpleExpression cmpCode = new SimpleExpression("cmpCode", filter.getKeyword(), CriterionExpression.Operator.LIKE, true);
  762. SimpleExpression brand = new SimpleExpression("inbrand", filter.getKeyword(), CriterionExpression.Operator.LIKE, true);
  763. SimpleExpression prodCmpCode = new SimpleExpression("product.cmpCode", filter.getKeyword(), CriterionExpression.Operator.LIKE, true);
  764. SimpleExpression prodBrand = new SimpleExpression("product.brand", filter.getKeyword(), CriterionExpression.Operator.LIKE, true);
  765. SimpleExpression code = new SimpleExpression("inquiry.code", filter.getKeyword(), CriterionExpression.Operator.LIKE, true);
  766. SimpleExpression title = new SimpleExpression("prodTitle", filter.getKeyword(), CriterionExpression.Operator.LIKE, true);
  767. SimpleExpression prodTitle = new SimpleExpression("product.title", filter.getKeyword(), CriterionExpression.Operator.LIKE, true);
  768. SimpleExpression[] simpleExpressions = new SimpleExpression[]{cmpCode, brand, prodCmpCode, prodBrand, code, title, prodTitle};
  769. LogicalExpression logical = new LogicalExpression(simpleExpressions, CriterionExpression.Operator.OR);
  770. info.expression(logical);
  771. }
  772. if (filter.getFromDate() != null) {
  773. info.expression(PredicateUtils.gte("offerTime", new Date(filter.getFromDate()), false));
  774. }
  775. if (filter.getEndDate() != null) {
  776. info.expression(PredicateUtils.lte("offerTime", new Date(filter.getEndDate()), false));
  777. }
  778. }
  779. Page<PublicInquiryItemInfo> itemInfoPage = itemInfoDao.findAll(new Specification<PublicInquiryItemInfo>() {
  780. public Predicate toPredicate(Root<PublicInquiryItemInfo> root, CriteriaQuery<?> query, CriteriaBuilder builder) {
  781. query.where(info.getPredicates(root, query, builder));
  782. return null;
  783. }
  784. }, info);
  785. if (!CollectionUtils.isEmpty(itemInfoPage.getContent())) {
  786. for (PublicInquiryItemInfo itemInfo : itemInfoPage) {
  787. String sql = "select at_path,at_name from attachs a left join public$inquiryitems$attach p on a.at_id = p.at_id " +
  788. "left join public$inquiryitems i on p.id_id = i.id_id where i.id_id = " + itemInfo.getId();
  789. List<Map<String, Object>> maps = jdbcTemplate.queryForList(sql);
  790. if (!CollectionUtils.isEmpty(maps)) {
  791. Map<String, Object> map = maps.get(0);
  792. itemInfo.setAttachUrl(map.get("at_path").toString());
  793. itemInfo.setAttachName(map.get("at_name").toString());
  794. }
  795. if (null == itemInfo.getProductId()) {
  796. Product product = new Product();
  797. product.setTitle(itemInfo.getProdTitle());
  798. product.setCmpCode(itemInfo.getCmpCode());
  799. product.setBrand(itemInfo.getInbrand());
  800. product.setSpec(itemInfo.getSpec());
  801. itemInfo.setProduct(product);
  802. }
  803. }
  804. }
  805. return IPageUtils.covert(itemInfoPage);
  806. }
  807. @Override
  808. public Page<PublicInquiryItemInfo> findListByPageInfo(final PageInfo info, SearchFilter filter) {
  809. return itemInfoDao.findAll(new Specification<PublicInquiryItemInfo>() {
  810. public Predicate toPredicate(Root<PublicInquiryItemInfo> root, CriteriaQuery<?> query, CriteriaBuilder builder) {
  811. query.where(info.getPredicates(root, query, builder));
  812. return null;
  813. }
  814. }, info);
  815. }
  816. /**
  817. * 查询公共询价列表信息
  818. *
  819. * @param info 分页参数
  820. * @param filter 过滤条件
  821. * @return
  822. */
  823. @Override
  824. public IPage<PurcInquiryItemInfo> findTodoByPageInfo(final PageInfo info, final SearchFilter filter) {
  825. Page<PurcInquiryItemInfo> orders = inquiryItemInfoDao.findAll(new Specification<PurcInquiryItemInfo>() {
  826. public Predicate toPredicate(Root<PurcInquiryItemInfo> root, CriteriaQuery<?> query, CriteriaBuilder builder) {
  827. if (null != filter) {
  828. if (filter.getFromDate() != null) {
  829. info.expression(PredicateUtils.gte("date", new Date(filter.getFromDate()), false));
  830. }
  831. if (filter.getEndDate() != null) {
  832. info.expression(PredicateUtils.lte("date", new Date(filter.getEndDate()), false));
  833. }
  834. if (!StringUtils.isEmpty(filter.getKeyword())) {
  835. SimpleExpression cmpCode = new SimpleExpression("cmpCode", filter.getKeyword(), CriterionExpression.Operator.LIKE, true);
  836. SimpleExpression brand = new SimpleExpression("inbrand", filter.getKeyword(), CriterionExpression.Operator.LIKE, true);
  837. SimpleExpression title = new SimpleExpression("prodTitle", filter.getKeyword(), CriterionExpression.Operator.LIKE, true);
  838. SimpleExpression prodCmpCode = new SimpleExpression("product.cmpCode", filter.getKeyword(), CriterionExpression.Operator.LIKE, true);
  839. SimpleExpression prodBrand = new SimpleExpression("product.brand", filter.getKeyword(), CriterionExpression.Operator.LIKE, true);
  840. SimpleExpression code = new SimpleExpression("inquiry.code", filter.getKeyword(), CriterionExpression.Operator.LIKE, true);
  841. SimpleExpression prodTitle = new SimpleExpression("product.title", filter.getKeyword(), CriterionExpression.Operator.LIKE, true);
  842. SimpleExpression[] simpleExpressions = new SimpleExpression[]{cmpCode, brand, prodCmpCode, prodBrand, code, title, prodTitle};
  843. LogicalExpression logical = new LogicalExpression(simpleExpressions, CriterionExpression.Operator.OR);
  844. info.expression(logical);
  845. Predicate p1 = builder.equal(root.get("inquiry").get("enterprise").get("enName"), filter.getKeyword());
  846. builder.or(p1);
  847. }
  848. }
  849. query.where(info.getPredicates(root, query, builder));
  850. return null;
  851. }
  852. }, info);
  853. return covert(orders, filter.getEnUU());
  854. }
  855. /**
  856. * 将数据库查询的数据进行封装处理
  857. *
  858. * @param orders 查询的数据信息
  859. * @return
  860. */
  861. private IPage<PurcInquiryItemInfo> covert(Page<PurcInquiryItemInfo> orders, Long enuu) {
  862. if (!CollectionUtils.isEmpty(orders.getContent()) && null != enuu) {
  863. for (PurcInquiryItemInfo itemInfo : orders.getContent()) {
  864. // 为了用户隐私,这个地方隐藏掉联系人电话
  865. itemInfo.setUserTel(null);
  866. PublicInquiryItem item = publicInquiryItemDao.findByVendUUAndSourceId(enuu, itemInfo.getId());
  867. itemInfo.setQuoted(Constant.NO);
  868. if (null != item) {
  869. itemInfo.setAgreed(item.getAgreed());
  870. itemInfo.setQuteId(item.getId());
  871. itemInfo.setQuoted(Constant.YES);
  872. }
  873. if (null == itemInfo.getProductId()) {
  874. Product product = new Product();
  875. product.setTitle(itemInfo.getProdTitle());
  876. product.setCmpCode(itemInfo.getCmpCode());
  877. product.setBrand(itemInfo.getInbrand());
  878. product.setSpec(itemInfo.getSpec());
  879. itemInfo.setProduct(product);
  880. }
  881. }
  882. }
  883. return IPageUtils.covert(orders);
  884. }
  885. /**
  886. * 根据传入条件封装查询条件
  887. *
  888. * @param pageInfo 分页参数
  889. * @param state 过滤条件
  890. * @return
  891. */
  892. @Override
  893. public PageInfo covert(PageInfo pageInfo, String state) {
  894. if (state.equals(OrderStatus.todo.name())) {
  895. pageInfo.filter("status", Status.NOT_REPLY.value());
  896. pageInfo.filter("overdue", Constant.NO);
  897. pageInfo.filter("invalid", Constant.NO);
  898. } else if (state.equals(OrderStatus.done.name())) {
  899. pageInfo.filter("overdue", Constant.NO);
  900. pageInfo.filter("status", Status.REPLIED.value());
  901. pageInfo.filter("invalid", Constant.NO);
  902. pageInfo.filter("decideStatus", Status.UNAUDIT.value());
  903. } else if (state.equals(OrderStatus.end.name())) {
  904. pageInfo.filter("overdue", Constant.YES);
  905. pageInfo.filter("invalid", Constant.NO);
  906. } else if (state.equals(OrderStatus.invalid.name())) {
  907. pageInfo.filter("overdue", Constant.YES);
  908. pageInfo.filter("invalid", Constant.YES);
  909. } else if (state.equals(OrderStatus.agreed.name())) {
  910. pageInfo.filter("agreed", Constant.YES);
  911. pageInfo.filter("status", Status.REPLIED.value());
  912. pageInfo.filter("invalid", Constant.NO);
  913. } else if (state.equals(OrderStatus.refused.name())) {
  914. pageInfo.filter("agreed", Constant.NO);
  915. pageInfo.filter("status", Status.REPLIED.value());
  916. pageInfo.filter("invalid", Constant.NO);
  917. }
  918. return pageInfo;
  919. }
  920. /**
  921. * 获取公共询价列表信息
  922. *
  923. * @param enuu 当前企业UU
  924. * @param size 大小
  925. * @return
  926. */
  927. @Override
  928. public List<InquiryMessage> getMessageList(Long enuu, Integer size) {
  929. if (size == 0 || size == null) {
  930. size = 10;
  931. }
  932. String sql = "select * from (select p.id_id id, p.id_prid productId, p.id_date as date, i.in_enuu enuu from purc$puinquiryitems p left join purc$puinquiry i on i.in_id = p.id_inid where i.in_isopen = 1";
  933. if (enuu != null) {
  934. sql = sql + " and i.in_enuu <> " + enuu ;
  935. }
  936. sql = sql + " and COALESCE(p.id_overdue, 0) <> 1 order by p.id_id desc) i limit " + size;
  937. List<PurcInquiryItem> items = jdbcTemplate.query(sql, new BeanPropertyRowMapper<PurcInquiryItem>(PurcInquiryItem.class));
  938. List<InquiryMessage> messages = new ArrayList<InquiryMessage>();
  939. if (!CollectionUtils.isEmpty(items)) {
  940. for (PurcInquiryItem item : items) {
  941. InquiryMessage message = new InquiryMessage();
  942. if (null != item.getEnuu()) {
  943. Enterprise enterprise = enterpriseDao.findOne(item.getEnuu());
  944. message.setEnName(enterprise.getEnName());
  945. }
  946. Product prod = productDao.findOne(item.getProductId());
  947. message.setPordName(prod.getTitle());
  948. item = purcInquiryItemDao.findOne(item.getId());
  949. message.setInid(item.getId());
  950. PublicInquiryItem publicInquiryItem = publicInquiryItemDao.findByVendUUAndSourceId(enuu, item.getId());
  951. if (null != publicInquiryItem) {
  952. message.setQuteId(publicInquiryItem.getId());
  953. }
  954. message.setLastest(isToday(item.getDate()));
  955. messages.add(message);
  956. }
  957. }
  958. return messages;
  959. }
  960. /**
  961. * 判断该条单据是否当天单据
  962. *
  963. * @param date 询价时间
  964. * @return
  965. */
  966. private boolean isToday(Date date) {
  967. SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
  968. String inDate = sdf.format(date);
  969. String nowDate = sdf.format(new Date());
  970. return inDate.equals(nowDate);
  971. }
  972. /**
  973. * 商城-采购排行榜
  974. * @return
  975. */
  976. @Override
  977. public List<Map<String, Object>> findCodeRankingList() {
  978. String sql = "select * from(SELECT sum(1) AS seekAmount, id_cmpcode FROM `purc$puinquiryitems` where id_cmpcode is not null group by id_cmpcode ) "
  979. + " a order by seekAmount desc limit 0,5";
  980. return jdbcTemplate.queryForList(sql);
  981. }
  982. /**
  983. * 通过明细id查询询价详情
  984. *
  985. * @param itemId 明细id
  986. * @return
  987. */
  988. @Override
  989. public PurcInquiryItemInfo findItemByItemId(Long itemId, Long enuu) {
  990. PurcInquiryItemInfo itemInfo = inquiryItemInfoDao.findOne(itemId);
  991. PublicInquiryItem item = publicInquiryItemDao.findByVendUUAndSourceId(enuu, itemInfo.getId());
  992. itemInfo.setQuoted(Constant.NO);
  993. if (null != item) {
  994. itemInfo.setAgreed(item.getAgreed());
  995. itemInfo.setQuteId(item.getId());
  996. itemInfo.setQuoted(Constant.YES);
  997. }
  998. if (null == itemInfo.getProductId()) {
  999. Product product = new Product();
  1000. product.setTitle(itemInfo.getProdTitle());
  1001. product.setCmpCode(itemInfo.getCmpCode());
  1002. product.setBrand(itemInfo.getInbrand());
  1003. product.setSpec(itemInfo.getSpec());
  1004. itemInfo.setProduct(product);
  1005. }
  1006. return itemInfo;
  1007. }
  1008. /**
  1009. * 通过id查询单个已转报价的信息
  1010. * @param id
  1011. * @return
  1012. */
  1013. @Override
  1014. public PublicInquiryItemInfo findOneInfo(Long id) {
  1015. return itemInfoDao.findOne(id);
  1016. }
  1017. }