PublicInquiryServiceImpl.java 69 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495969798991001011021031041051061071081091101111121131141151161171181191201211221231241251261271281291301311321331341351361371381391401411421431441451461471481491501511521531541551561571581591601611621631641651661671681691701711721731741751761771781791801811821831841851861871881891901911921931941951961971981992002012022032042052062072082092102112122132142152162172182192202212222232242252262272282292302312322332342352362372382392402412422432442452462472482492502512522532542552562572582592602612622632642652662672682692702712722732742752762772782792802812822832842852862872882892902912922932942952962972982993003013023033043053063073083093103113123133143153163173183193203213223233243253263273283293303313323333343353363373383393403413423433443453463473483493503513523533543553563573583593603613623633643653663673683693703713723733743753763773783793803813823833843853863873883893903913923933943953963973983994004014024034044054064074084094104114124134144154164174184194204214224234244254264274284294304314324334344354364374384394404414424434444454464474484494504514524534544554564574584594604614624634644654664674684694704714724734744754764774784794804814824834844854864874884894904914924934944954964974984995005015025035045055065075085095105115125135145155165175185195205215225235245255265275285295305315325335345355365375385395405415425435445455465475485495505515525535545555565575585595605615625635645655665675685695705715725735745755765775785795805815825835845855865875885895905915925935945955965975985996006016026036046056066076086096106116126136146156166176186196206216226236246256266276286296306316326336346356366376386396406416426436446456466476486496506516526536546556566576586596606616626636646656666676686696706716726736746756766776786796806816826836846856866876886896906916926936946956966976986997007017027037047057067077087097107117127137147157167177187197207217227237247257267277287297307317327337347357367377387397407417427437447457467477487497507517527537547557567577587597607617627637647657667677687697707717727737747757767777787797807817827837847857867877887897907917927937947957967977987998008018028038048058068078088098108118128138148158168178188198208218228238248258268278288298308318328338348358368378388398408418428438448458468478488498508518528538548558568578588598608618628638648658668678688698708718728738748758768778788798808818828838848858868878888898908918928938948958968978988999009019029039049059069079089099109119129139149159169179189199209219229239249259269279289299309319329339349359369379389399409419429439449459469479489499509519529539549559569579589599609619629639649659669679689699709719729739749759769779789799809819829839849859869879889899909919929939949959969979989991000100110021003100410051006100710081009101010111012101310141015101610171018101910201021102210231024102510261027102810291030103110321033103410351036103710381039104010411042104310441045104610471048104910501051105210531054105510561057105810591060106110621063106410651066106710681069107010711072107310741075107610771078107910801081108210831084108510861087108810891090109110921093109410951096109710981099110011011102110311041105110611071108110911101111111211131114111511161117111811191120112111221123112411251126112711281129113011311132113311341135113611371138113911401141114211431144114511461147114811491150115111521153115411551156115711581159116011611162116311641165116611671168116911701171117211731174117511761177117811791180118111821183118411851186118711881189119011911192119311941195119611971198119912001201120212031204120512061207120812091210121112121213121412151216121712181219122012211222122312241225122612271228122912301231123212331234123512361237123812391240124112421243124412451246124712481249125012511252125312541255125612571258125912601261126212631264126512661267126812691270127112721273127412751276127712781279128012811282128312841285128612871288128912901291129212931294129512961297129812991300130113021303130413051306130713081309131013111312131313141315131613171318131913201321132213231324132513261327132813291330133113321333133413351336133713381339134013411342134313441345134613471348134913501351135213531354135513561357135813591360136113621363136413651366136713681369137013711372137313741375137613771378137913801381138213831384138513861387138813891390139113921393139413951396139713981399140014011402140314041405140614071408140914101411141214131414141514161417141814191420142114221423142414251426142714281429143014311432143314341435143614371438143914401441144214431444144514461447144814491450145114521453145414551456145714581459146014611462146314641465146614671468146914701471147214731474147514761477147814791480148114821483148414851486148714881489149014911492149314941495149614971498149915001501150215031504150515061507150815091510151115121513
  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.logging.BufferedLoggerManager;
  5. import com.uas.ps.core.util.ContextUtils;
  6. import com.uas.ps.entity.Product;
  7. import com.uas.ps.entity.ProductUsers;
  8. import com.uas.ps.entity.Status;
  9. import com.uas.ps.inquiry.AccessConfiguration;
  10. import com.uas.ps.inquiry.dao.*;
  11. import com.uas.ps.inquiry.domain.IPage;
  12. import com.uas.ps.inquiry.entity.*;
  13. import com.uas.ps.inquiry.exception.NotFoundException;
  14. import com.uas.ps.inquiry.model.*;
  15. import com.uas.ps.inquiry.page.PageInfo;
  16. import com.uas.ps.inquiry.page.SearchFilter;
  17. import com.uas.ps.inquiry.page.criteria.*;
  18. import com.uas.ps.inquiry.page.exception.IllegalOperatorException;
  19. import com.uas.ps.inquiry.service.PublicInquiryService;
  20. import com.uas.ps.inquiry.support.InquiryBufferedLogger;
  21. import com.uas.ps.inquiry.util.*;
  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.domain.Sort;
  27. import org.springframework.data.jpa.domain.Specification;
  28. import org.springframework.jdbc.core.BeanPropertyRowMapper;
  29. import org.springframework.jdbc.core.JdbcTemplate;
  30. import org.springframework.stereotype.Service;
  31. import org.springframework.ui.ModelMap;
  32. import org.springframework.util.CollectionUtils;
  33. import org.springframework.util.StringUtils;
  34. import javax.persistence.criteria.*;
  35. import java.text.SimpleDateFormat;
  36. import java.util.*;
  37. /**
  38. * 公共询价接口实现
  39. * <p>
  40. * Created by hejq on 2018-01-13.
  41. */
  42. @Service
  43. public class PublicInquiryServiceImpl implements PublicInquiryService {
  44. @Autowired
  45. private PublicInquiryDao publicInquiryDao;
  46. @Autowired
  47. private PurcInquiryDao purcInquiryDao;
  48. @Autowired
  49. private ProductDao productDao;
  50. @Autowired
  51. private PurcInquiryItemDao purcInquiryItemDao;
  52. @Autowired
  53. private JdbcTemplate jdbcTemplate;
  54. @Autowired
  55. private PublicInquiryReplyDao publicInquiryReplyDao;
  56. @Autowired
  57. private PurcInquiryItemInfoDao inquiryItemInfoDao;
  58. @Autowired
  59. private PublicInquiryItemInfoDao itemInfoDao;
  60. @Autowired
  61. private PublicInquiryItemDao publicInquiryItemDao;
  62. @Autowired
  63. private UserDao userDao;
  64. @Autowired
  65. private EnterpriseDao enterpriseDao;
  66. @Autowired
  67. private InquiryRemindDao remindDao;
  68. @Autowired
  69. private ProductReplaceDao productReplaceDao;
  70. @Autowired
  71. private InquiryEnRemindDao inquiryEnRemindDao;
  72. @Autowired
  73. private KindConcernDao kindConcernDao;
  74. private static final Logger log = Logger.getLogger(Logger.class);
  75. /**
  76. * 应用来源
  77. */
  78. private final String SOURCERAPP = "B2B";
  79. /**
  80. * 消息类型 (在B2B消息中拼接跳转单据详情url请求时需要)
  81. */
  82. private final String INQUIRY_TYPE = "公共询价";
  83. /**
  84. * 消息类型 (在B2B消息中拼接跳转单据详情url请求时需要)
  85. */
  86. private final String INQUIRY_TYPE_MALL = "MALL跳转买家已报价页面";
  87. /**
  88. * 消息类型 (在MALL消息中拼接求购询价待报价)
  89. */
  90. private final String INQUIRY_TYPE_SELLER_MALL = "MALL公共询价";
  91. /**
  92. * 消息类型,公共询价的采纳结果
  93. */
  94. private final String INQUIRY_DECIDE_TYPE = "公共询价采纳结果";
  95. /**
  96. * 消息类型,公共询价的采纳结果
  97. */
  98. private final String INQUIRY_DECIDE_TYPE_MALL = "商城公共询价采纳结果";
  99. /**
  100. * 询价种类
  101. */
  102. private final String INQUIRYKIND = "publicInquiry";
  103. /**
  104. * 消息推送邮件模板id
  105. */
  106. private final String MAIL_TEMP_ID = "d94e931b-b699-46d7-8bb2-94604a3352c0";
  107. /**
  108. * 消息推送短信模板id
  109. */
  110. private final String SMS_TEMP_ID = "6e094dcf-f2c7-462a-9686-b2d32d684a78";
  111. /**
  112. * 消息推送方式:邮件、短信、im
  113. */
  114. private final String SMS_TYPE = "MAIL_AND_SM_AND_IM";
  115. /**
  116. * 来源应用,ERP
  117. */
  118. private final String PRODUCERAPP = "ERP";
  119. /**
  120. * 消费类型: 多个,MULTI
  121. */
  122. private final String CUST_TYPE = "MULTI";
  123. /**
  124. * 接收应用
  125. */
  126. private final String CONSUMERAPP = "B2B";
  127. /**
  128. * 公共物料访问地址
  129. */
  130. private final String PS_PRODUCT_URL = ContextUtils.getBean(AccessConfiguration.class).getPsProductUrl();
  131. /**
  132. * 公共消息访问地址
  133. */
  134. private final String PS_MESSAGE_URL = ContextUtils.getBean(AccessConfiguration.class).getPsMessageUrl();
  135. /**
  136. * 商城链接
  137. */
  138. private final String USOFTMALL_URL = ContextUtils.getBean(AccessConfiguration.class).getMallUrl();
  139. /**
  140. * 日志
  141. */
  142. private final static InquiryBufferedLogger logger = BufferedLoggerManager.getLogger(InquiryBufferedLogger.class);
  143. /**
  144. * 保存公共询价信息
  145. *
  146. * @param inquiries erp传入公共询价的信息
  147. * @param enuu 询价企业UU号
  148. * @param address 询价企业地址
  149. */
  150. @Override
  151. public void save(List<BatchInquiry> inquiries, Long enuu, String address) throws NotFoundException {
  152. List<PurcInquiry> purcInquiries = covert(inquiries, enuu, address);
  153. if (!CollectionUtils.isEmpty(purcInquiries)) {
  154. for (PurcInquiry inquiry : purcInquiries) {
  155. // 判断单号是否已存在
  156. List<PurcInquiry> old = purcInquiryDao.findByCodeAndEnUU(inquiry.getCode(), enuu);
  157. List<PurcInquiryItem> items = new ArrayList<PurcInquiryItem>();
  158. if (CollectionUtils.isEmpty(old) && !CollectionUtils.isEmpty(inquiry.getInquiryItems())) {
  159. for (PurcInquiryItem item : inquiry.getInquiryItems()) {
  160. item.setInquiry(inquiry);
  161. items.add(item);
  162. }
  163. }
  164. try {
  165. items = purcInquiryItemDao.save(items);
  166. if (!CollectionUtils.isEmpty(items)) {
  167. final List<PurcInquiryItem> purcInquiryItems = items;
  168. ThreadUtils.task(new Runnable() {
  169. @Override
  170. public void run() {
  171. try {
  172. notifyMessage(purcInquiryItems, PRODUCERAPP);
  173. } catch (Exception e) {
  174. e.printStackTrace();
  175. }
  176. }
  177. }).run();
  178. }
  179. } catch (Exception e) {
  180. e.printStackTrace();
  181. }
  182. }
  183. }
  184. }
  185. /**
  186. * 消息推送
  187. *
  188. * @param inquiryItems 询价明细
  189. * @param sourceApp 消息来源应用
  190. */
  191. @Override
  192. public void notifyMessage(List<PurcInquiryItem> inquiryItems, String sourceApp) throws Exception {
  193. final String CONSUMERAPP = "MALL,B2B";
  194. for (PurcInquiryItem item : inquiryItems) {
  195. String cmpCode = null;
  196. if (item.getCmpCode() != null) {
  197. cmpCode = item.getCmpCode();
  198. } else if (null != item.getProductId()) {
  199. Product product = productDao.findOne(item.getProductId());
  200. cmpCode = product.getCmpCode();
  201. }
  202. if (null != cmpCode) {
  203. String url = PS_PRODUCT_URL + "/productuser/getProductUsersByEnUUAndCmpCode";
  204. JSONObject formData = new JSONObject();
  205. formData.put("enUU", item.getInquiry().getEnUU());
  206. formData.put("cmpCode", cmpCode);
  207. try {
  208. HttpUtil.Response res = HttpUtil.sendGetRequest(url, formData);
  209. if (res.getStatusCode() == 200) {
  210. List<ProductUsers> users = FlexJsonUtils.fromJsonArray(res.getResponseText(), ProductUsers.class);
  211. users = getProductReplaceByEnUUAndCmpCode(item.getInquiry().getRecorderUU(), cmpCode, users);
  212. if (!CollectionUtils.isEmpty(users)) {
  213. List<MessageModel> models = new ArrayList<MessageModel>();
  214. for (ProductUsers user : users) {
  215. User u = userDao.findOne(null != item.getInquiry().getRecorderUU() ? item.getInquiry().getRecorderUU() : 0L);
  216. Enterprise e = enterpriseDao.findOne(item.getInquiry().getEnUU());
  217. String cmp = cmpCode.length() > 10 ? cmpCode.substring(0, 10).concat("...") : cmpCode;
  218. String content = "发布关于“型号:" + cmp + "”的公共询价信息,邀请您参与报价。";
  219. MessageModel model = new MessageModel();
  220. if (null != e) {
  221. content = e.getEnName() + content;
  222. model.setName(e.getEnName());
  223. } else if (null != u) {
  224. content = u.getUserName() + content;
  225. model.setName(u.getUserName());
  226. }
  227. model.setCmpCode(cmpCode);
  228. model.setType(INQUIRY_TYPE);
  229. model.setType(INQUIRY_TYPE_SELLER_MALL);
  230. model.setProducerApp(sourceApp);
  231. model.setConsumerType(CUST_TYPE);
  232. model.setConsumerApp(CONSUMERAPP);
  233. model.setContent(content);
  234. model.setRemark(String.valueOf(item.getInquiry().getId()));
  235. model.setSourceId(item.getId());
  236. model.setReceiverEnuu(user.getEnuu());
  237. model.setReceiverUu(user.getUseruu());
  238. model.setSenderEnuu(item.getInquiry().getEnUU());
  239. if (null != item.getUserUU() || null != item.getInquiry().getRecorderUU()) {
  240. model.setSenderUu(item.getUserUU() != null ? item.getUserUU() : item.getInquiry().getRecorderUU());
  241. } else {
  242. Enterprise enterprise = enterpriseDao.findOne(item.getInquiry().getEnUU());
  243. model.setSenderUu(null != enterprise ? enterprise.getAdminUU() : 0L);
  244. }
  245. model.setSmsType("DONT_SEND");
  246. model.setMailTemplate(MAIL_TEMP_ID);
  247. model.setSmTemplate(SMS_TEMP_ID);
  248. models.add(model);
  249. logger.log("公共询价产生消息", "根据物料型号【" + cmpCode + "】查询接收人", "关联询价单明细【" + item.getId() + "】", user.getUseruu(), user.getEnuu(), InquirySource.ERP.name());
  250. }
  251. if (!CollectionUtils.isEmpty(models)) {
  252. sendMessage(models);
  253. // 正式环境才可发送微信消息
  254. if (USOFTMALL_URL.equals("https://www.usoftmall.com/")) {
  255. sendWechatMessage(models);
  256. }
  257. }
  258. }
  259. // 生成推荐信息
  260. remindInquiry(item, users);
  261. }
  262. } catch (Exception e) {
  263. String reason = e.getMessage().length() > 10 ? e.getMessage().substring(0, 1000).concat("") : e.getMessage();
  264. logger.log("公共询价产生消息", "根据物料型号【" + cmpCode + "】查询接收人失败,id" + item.getId(), reason, Constant.UU, Constant.UU, InquirySource.ERP.name());
  265. e.printStackTrace();
  266. }
  267. }
  268. }
  269. }
  270. private void sendWechatMessage(final List<MessageModel> models) {
  271. ThreadUtils.task(new Runnable() {
  272. @Override
  273. public void run() {
  274. try {
  275. log.info("发送微信消息实体" + JSON.toJSONString(models));
  276. String res = HttpUtil.doPost(USOFTMALL_URL + "/wx/sendTemplateMessage", FlexJsonUtils.toJsonDeep(models));
  277. log.info("微信消息请求发送日志" + res);
  278. } catch (Exception e) {
  279. e.printStackTrace();
  280. }
  281. }
  282. }).run();
  283. }
  284. /**
  285. * 根据企业UU和物料原厂型号cmpCode获取替代物料信息
  286. *
  287. * @param cmpCode 物料原厂型号
  288. * @return
  289. */
  290. public List<ProductUsers> getProductReplaceByEnUUAndCmpCode(final Long userUU, final String cmpCode, List<ProductUsers> productUsers) {
  291. List<ProductReplace> productReplacesList = productReplaceDao.findAll(new Specification<ProductReplace>() {
  292. @Override
  293. public Predicate toPredicate(Root<ProductReplace> root, CriteriaQuery<?> query, CriteriaBuilder cb) {
  294. final PredicateFactory<ProductReplace> factory = new PredicateFactory<>();
  295. factory.add(PredicateUtils.ne("userUU", userUU, false));
  296. factory.add(PredicateUtils.and(PredicateUtils.isNotNull("ptrCmpcode"), PredicateUtils.eq("ptrCmpcode", cmpCode, false)));
  297. query.where(factory.toPredicate(root, query, cb));
  298. return null;
  299. }
  300. });
  301. if (!CollectionUtils.isEmpty(productReplacesList)) {
  302. for (ProductReplace productReplace : productReplacesList) {
  303. ProductUsers user = new ProductUsers();
  304. user.setEnuu(productReplace.getEnuu());
  305. user.setUseruu(productReplace.getUserUU());
  306. productUsers.add(user);
  307. }
  308. }
  309. // 去掉同一企业下同一个人相同原厂型号的不同物料的记录,保证一个原厂型号只发一条
  310. List<ProductUsers> returnList = new ArrayList<>();
  311. Set<String> enUUAndUserUUs = new HashSet<>();
  312. for (ProductUsers user : productUsers) {
  313. String receiverInfo = user.getEnuu().toString() + user.getUseruu().toString();
  314. if (!enUUAndUserUUs.contains(receiverInfo)) {
  315. returnList.add(user);
  316. enUUAndUserUUs.add(receiverInfo);
  317. }
  318. }
  319. return returnList;
  320. }
  321. /**
  322. * 通过查询的个人物料相关联的信息,自动生成推荐的报价的数据
  323. *
  324. * @param item 报价明细
  325. * @param users 用户信息
  326. */
  327. private void remindInquiry(final PurcInquiryItem item, final List<ProductUsers> users) {
  328. ThreadUtils.task(new Runnable() {
  329. @Override
  330. public void run() {
  331. try {
  332. Map<Long, ProductUsers> productUsersMap = new HashMap<>();
  333. if (!CollectionUtils.isEmpty(users)) {
  334. for (ProductUsers u : users) {
  335. List<InquiryRemind> remindList = remindDao.findByVendUserUUAndVendUUAndItemId(u.getUseruu(), u.getEnuu(), item.getId());
  336. if (remindList.size() == 0 && item.getInquiry().getEnUU() != null) {
  337. productUsersMap.put(u.getEnuu(), u);
  338. Enterprise enterprise = enterpriseDao.findOne(item.getInquiry().getEnUU());
  339. InquiryRemind remind = new InquiryRemind();
  340. remind.setEnName(enterprise.getEnName());
  341. remind.setEnUU(item.getInquiry().getEnUU());
  342. remind.setUserName(item.getUserName());
  343. remind.setUserTel(item.getUserTel());
  344. remind.setCode(item.getInquiry().getCode());
  345. remind.setBrand(item.getInbrand());
  346. remind.setInbrand(item.getInbrand());
  347. remind.setCmpCode(item.getCmpCode());
  348. remind.setSpec(item.getSpec());
  349. remind.setProdTitle(item.getProdTitle());
  350. remind.setInid(item.getInquiry().getId());
  351. if (item.getProduct() != null) {
  352. remind.setBrand(item.getProduct().getBrand());
  353. remind.setCmpCode(item.getProduct().getCmpCode());
  354. remind.setSpec(item.getProduct().getSpec());
  355. remind.setProdTitle(item.getProduct().getTitle());
  356. }
  357. remind.setItemId(item.getId());
  358. remind.setNeedQty(item.getNeedquantity());
  359. remind.setReDate(item.getInquiry().getDate());
  360. remind.setEndDate(item.getInquiry().getEndDate());
  361. remind.setVendUU(u.getEnuu());
  362. remind.setVendUserUU(u.getUseruu());
  363. remind.setDate(new Date(System.currentTimeMillis()));
  364. remind.setStatus(Status.INPUTTING.value());
  365. remindDao.save(remind);
  366. }
  367. }
  368. }
  369. // 查询已关注类目中是否有当前类目
  370. String kind = item.getProdTitle();
  371. Set<Long> enuuSet = new HashSet<>();
  372. if (!StringUtils.isEmpty(kind)) {
  373. enuuSet = kindConcernDao.findByNameCn(kind);
  374. }
  375. String url = PS_PRODUCT_URL + "/product/businessOpportunity";
  376. JSONObject formData = new JSONObject();
  377. formData.put("enUU", item.getInquiry().getEnUU());
  378. formData.put("pCmpCode", item.getCmpCode());
  379. HttpUtil.Response res = HttpUtil.sendGetRequest(url, formData);
  380. if (res.getStatusCode() == 200) {
  381. Map<String, Object> result = FlexJsonUtils.fromJson(res.getResponseText());
  382. if (!StringUtils.isEmpty(result.get("enUUs"))) {
  383. List<Long> enuus = (List<Long>) result.get("enUUs");
  384. enuuSet.addAll(enuus);
  385. }
  386. if (!CollectionUtils.isEmpty(enuuSet)) {
  387. List<InquiryEnRemind> inquiryEnReminds = new ArrayList<>();
  388. for (Long enuu : enuuSet) {
  389. Enterprise enterprise = enterpriseDao.findOne(item.getInquiry().getEnUU());
  390. InquiryEnRemind remind = new InquiryEnRemind();
  391. remind.setEnName(enterprise.getEnName());
  392. remind.setEnUU(item.getInquiry().getEnUU());
  393. remind.setUserName(item.getUserName());
  394. remind.setUserTel(item.getUserTel());
  395. remind.setCode(item.getInquiry().getCode());
  396. remind.setBrand(item.getInbrand());
  397. remind.setInbrand(item.getInbrand());
  398. remind.setCmpCode(item.getCmpCode());
  399. remind.setSpec(item.getSpec());
  400. remind.setProdTitle(item.getProdTitle());
  401. remind.setInid(item.getInquiry().getId());
  402. if (item.getProduct() != null) {
  403. remind.setBrand(item.getProduct().getBrand());
  404. remind.setCmpCode(item.getProduct().getCmpCode());
  405. remind.setSpec(item.getProduct().getSpec());
  406. remind.setProdTitle(item.getProduct().getTitle());
  407. }
  408. remind.setItemId(item.getId());
  409. remind.setNeedQty(item.getNeedquantity());
  410. remind.setReDate(item.getInquiry().getDate());
  411. remind.setEndDate(item.getInquiry().getEndDate());
  412. remind.setVendUU(enuu);
  413. if (productUsersMap.containsKey(enuu)) {
  414. remind.setRemindStatus(1);
  415. } else {
  416. remind.setRemindStatus(0);
  417. }
  418. remind.setDate(new Date(System.currentTimeMillis()));
  419. remind.setStatus(Status.INPUTTING.value());
  420. inquiryEnReminds.add(remind);
  421. }
  422. if (!CollectionUtils.isEmpty(inquiryEnReminds)) {
  423. inquiryEnRemindDao.save(inquiryEnReminds);
  424. }
  425. }
  426. }
  427. } catch (Exception e) {
  428. e.printStackTrace();
  429. }
  430. }
  431. }).run();
  432. }
  433. /**
  434. * 通过id查询询价信息
  435. *
  436. * @param id 公共询价主表id
  437. * @return
  438. */
  439. @Override
  440. public PurcInquiry findInquiryById(Long id) {
  441. PurcInquiry inquiry = purcInquiryDao.findOne(id);
  442. if (!CollectionUtils.isEmpty(inquiry.getInquiryItems())) {
  443. for (PurcInquiryItem item : inquiry.getInquiryItems()) {
  444. if (null == item.getProductId()) {
  445. Product product = new Product();
  446. product.setTitle(item.getProdTitle());
  447. product.setCmpCode(item.getCmpCode());
  448. product.setBrand(item.getInbrand());
  449. product.setSpec(item.getSpec());
  450. item.setProduct(product);
  451. }
  452. }
  453. }
  454. return inquiry;
  455. }
  456. /**
  457. * 发送消息推送
  458. *
  459. * @param models 封装的消息信息
  460. */
  461. private void sendMessage(final List<MessageModel> models) {
  462. ThreadUtils.task(new Runnable() {
  463. @Override
  464. public void run() {
  465. try {
  466. log.info("发送消息实体" + JSON.toJSONString(models));
  467. String res = HttpUtil.doPost(PS_MESSAGE_URL + "/messages", FlexJsonUtils.toJsonDeep(models));
  468. log.info("消息请求发送日志" + res);
  469. } catch (Exception e) {
  470. e.printStackTrace();
  471. }
  472. }
  473. }).run();
  474. }
  475. /**
  476. * 将ERP传入的inquiry信息转成公共询价服务中心需要的信息
  477. *
  478. * @param inquiries 将ERP传入的inquiry信息
  479. * @param enuu 询价企业UU号
  480. * @param address 询价企业地址
  481. * @return
  482. */
  483. @Override
  484. public List<PurcInquiry> covert(List<BatchInquiry> inquiries, Long enuu, String address) throws NotFoundException {
  485. List<PurcInquiry> purcInquiries = new ArrayList<PurcInquiry>();
  486. if (!CollectionUtils.isEmpty(inquiries)) {
  487. for (BatchInquiry inquiry : inquiries) {
  488. List<PurcInquiry> old = purcInquiryDao.findByCodeAndEnUU(inquiry.getBi_code(), enuu);
  489. //先判断是否已经存在,不存在才进行存储
  490. if (CollectionUtils.isEmpty(old)) {
  491. PurcInquiry purcInquiry = inquiry.covert();
  492. purcInquiry.setEnUU(enuu);
  493. purcInquiry.setShip(address);
  494. Enterprise e = enterpriseDao.findOne(enuu);
  495. if (null != e) {
  496. purcInquiry.setEnName(e.getEnName());
  497. }
  498. Set<PurcInquiryItem> purcInquiryItems = new HashSet<PurcInquiryItem>();
  499. if (!CollectionUtils.isEmpty(inquiry.getInProducts())) {
  500. for (BatchInProduct batch : inquiry.getInProducts()) {
  501. PurcInquiryItem item = new PurcInquiryItem();
  502. List<Product> products = productDao.findByEnUUAndCode(enuu, batch.getBip_prodcode());
  503. if (!CollectionUtils.isEmpty(products)) {
  504. item.setProductId(products.get(0).getId());
  505. item.setCmpCode(products.get(0).getCmpCode());
  506. item.setInbrand(products.get(0).getBrand());
  507. item.setProdTitle(products.get(0).getTitle());
  508. item.setSpec(products.get(0).getSpec());
  509. } else {
  510. item.setCmpCode(batch.getPr_orispeccode());
  511. item.setInbrand(batch.getPr_brand());
  512. item.setProdTitle(batch.getPr_detail());
  513. item.setSpec(batch.getPr_spec());
  514. }
  515. item.setProdCode(batch.getBip_prodcode());
  516. item.setRemark(batch.getBip_remark());
  517. item.setNumber(batch.getBip_detno());
  518. item.setFromDate(new Date(System.currentTimeMillis()));
  519. item.setToDate(purcInquiry.getEndDate());
  520. item.setStatus((short) Status.NOT_REPLY.value());
  521. item.setIsOpen(Constant.YES);
  522. item.setSource("ERP");
  523. item.setSourceid(batch.getBip_id());
  524. item.setCurrency(batch.getBip_currency());
  525. item.setUserName(batch.getEm_name());
  526. item.setUserTel(batch.getBip_mobile());
  527. item.setUserCode(batch.getBip_buyercode());
  528. item.setOfferAmount(0);
  529. item.setEndDate(inquiry.getBi_enddate());
  530. item.setNeedquantity(batch.getYcgqty());
  531. if (null == item.getCmpCode() || item.getCmpCode().equals("无")) {
  532. item.setCmpCode(item.getSpec());
  533. }
  534. if (null != inquiry.getBi_date()) {
  535. item.setDate(inquiry.getBi_date());
  536. } else {
  537. item.setDate(new Date(System.currentTimeMillis()));
  538. }
  539. if (item.getCustCurrency() == null) {
  540. item.setCustCurrency("RMB");
  541. }
  542. purcInquiryItems.add(item);
  543. }
  544. }
  545. purcInquiry.setInquiryItems(purcInquiryItems);
  546. purcInquiries.add(purcInquiry);
  547. }
  548. }
  549. }
  550. return purcInquiries;
  551. }
  552. /**
  553. * erp提交审核时,公共询价服务中心单据禁用报价功能
  554. *
  555. * @param inquiries erp询价信息
  556. * @param enuu 询价企业UU号
  557. */
  558. @Override
  559. public void updateStatus(List<BatchInquiry> inquiries, Long enuu) {
  560. if (!CollectionUtils.isEmpty(inquiries)) {
  561. for (BatchInquiry inquiry : inquiries) {
  562. List<PurcInquiry> purcInquiryList = purcInquiryDao.findByCodeAndEnUU(inquiry.getBi_code(), enuu);
  563. for (PurcInquiry purcInquiry : purcInquiryList) {
  564. purcInquiryItemDao.updateStatus(purcInquiry.getId());
  565. }
  566. }
  567. }
  568. }
  569. /**
  570. * 查询供应商的报价信息
  571. *
  572. * @return
  573. */
  574. @Override
  575. public List<InquiryDetail> findNotUploadReply(Long enuu) {
  576. List<PublicInquiryItem> items = publicInquiryItemDao.findByEnUUAndBackStatus(enuu, (short) Status.NOT_UPLOAD.value());
  577. if (!CollectionUtils.isEmpty(items)) {
  578. // 防止下载过程中进行操作,这里设置一个下载中的状态
  579. Set<Long> ids = new HashSet<>();
  580. for (PublicInquiryItem item : items) {
  581. ids.add(item.getId());
  582. }
  583. if (ids.size() > 0) {
  584. publicInquiryItemDao.updateBackStatus(ids);
  585. }
  586. return convertPublicInquiryReply(items);
  587. }
  588. return new ArrayList<>();
  589. }
  590. /**
  591. * 将公共询价服务中心的公共询价转成ERP的对应的字段
  592. *
  593. * @param notUploadReply 未下载的供应商报价信息
  594. * @return
  595. * @author hejq
  596. * @date 2018-01-14 11:51
  597. */
  598. @Override
  599. public List<InquiryDetail> convertPublicInquiryReply(List<PublicInquiryItem> notUploadReply) {
  600. List<InquiryDetail> details = new ArrayList<InquiryDetail>();
  601. if (!CollectionUtils.isEmpty(notUploadReply)) {
  602. for (PublicInquiryItem item : notUploadReply) {
  603. details.add(new InquiryDetail(item));
  604. }
  605. }
  606. return details;
  607. }
  608. /**
  609. * 下载完成后更新公共询价服务中心询价单明细的下载状态
  610. *
  611. * @param idArray 询价单明细id
  612. * @author hejq
  613. * @date 2018-01-14 12:12
  614. */
  615. @Override
  616. public void onReplyUploadSuccess(String[] idArray) {
  617. for (String id : idArray) {
  618. PublicInquiryItem item = publicInquiryItemDao.findOne(Long.parseLong(id));
  619. if (item != null) {
  620. item.setBackStatus((short) Status.DOWNLOADED.value());
  621. item.setErpstatus(Constant.YES);
  622. publicInquiryItemDao.save(item);
  623. }
  624. }
  625. }
  626. /**
  627. * ERP提交公共询价单之后,更新平台状态,让公共询价服务中心询价单不能进行报价操作
  628. *
  629. * @param details 询价信息
  630. * @author hejq
  631. * @date 2018-01-14 12:20
  632. */
  633. @Override
  634. public void updateInquiryStatus(List<InquiryDetail> details, Long enuu) {
  635. if (!CollectionUtils.isEmpty(details)) {
  636. for (InquiryDetail detail : details) {
  637. // 更新为过期状态,不能进行报价处理
  638. String sql = "update purc$puInquiryItems set id_overdue = 1 where id_id = " +
  639. "(select id_sourceid from public$inquiryItems where id_id = " + detail.getB2b_id_id() + ")";
  640. jdbcTemplate.update(sql);
  641. // 更新已转报价的询价单明细状态
  642. jdbcTemplate.update("update public$inquiryItems set id_checked = 1 where id_id = " + detail.getB2b_id_id());
  643. }
  644. }
  645. }
  646. /**
  647. * ERP对报价信息的采纳状态上传到公共询价服务中心
  648. *
  649. * @param decides 采纳信息
  650. */
  651. @Override
  652. public void onReplyDecide(List<InquiryDecide> decides, Long enuu) {
  653. List<PublicInquiryItem> publicInquiryItems = convertInquiryDecide(decides);
  654. if (!CollectionUtils.isEmpty(publicInquiryItems)) {
  655. for (PublicInquiryItem inquiryItem : publicInquiryItems) {
  656. publicInquiryItemDao.updateDecideStatusByID(inquiryItem.getAgreed(), inquiryItem.getDecideStatus(), inquiryItem.getId());
  657. notifyDecide(inquiryItem, PRODUCERAPP);
  658. }
  659. }
  660. }
  661. /**
  662. * 针对供应商,客户对报价结果发送消息通知
  663. *
  664. * @param item 询价明细
  665. * @param sourceApp 应用来源
  666. */
  667. @Override
  668. public void notifyDecide(PublicInquiryItem item, String sourceApp) {
  669. final String SMS_TYPE = "IM"; //只推送消息
  670. List<MessageModel> models = new ArrayList<MessageModel>();
  671. User u = userDao.findOne(null != item.getInquiry().getRecorderUU() ? item.getInquiry().getRecorderUU() : 0L);
  672. Enterprise e = enterpriseDao.findOne(item.getInquiry().getEnUU());
  673. Product product = new Product();
  674. if (null != item.getProductId()) {
  675. product = productDao.findOne(item.getProductId());
  676. }
  677. String cmpCode = product.getCmpCode() != null ? product.getCmpCode() : item.getCmpCode();
  678. String content = item.getAgreed() == 1 ? "【已采纳】" : "【未采纳】";
  679. content = content + "您关于“" + cmpCode + "”的报价";
  680. if (null != e) {
  681. content = e.getEnName() + content;
  682. } else if (null != u) {
  683. content = u.getUserName() + content;
  684. } else if (null == e && null == u) {
  685. content = "您关于“" + cmpCode + "”的报价已被";
  686. String result = item.getAgreed() == 1 ? "【已采纳】" : "【拒绝】";
  687. content = content + result;
  688. }
  689. MessageModel model = new MessageModel();
  690. model.setType(INQUIRY_DECIDE_TYPE);
  691. model.setProducerApp(sourceApp);
  692. model.setConsumerType(CUST_TYPE);
  693. model.setConsumerApp(CONSUMERAPP);
  694. model.setContent(content);
  695. model.setRemark(String.valueOf(item.getInquiry().getId()));
  696. model.setSourceId(item.getId());
  697. model.setReceiverEnuu(item.getVendUU());
  698. model.setReceiverUu(item.getVendUserUU());
  699. model.setSenderEnuu(item.getInquiry().getEnUU());
  700. if (null != item.getUserUU() || null != item.getInquiry().getRecorderUU()) {
  701. model.setSenderUu(item.getUserUU() != null ? item.getUserUU() : item.getInquiry().getRecorderUU());
  702. } else {
  703. Enterprise enterprise = enterpriseDao.findOne(item.getInquiry().getEnUU());
  704. model.setSenderUu(null != enterprise ? enterprise.getAdminUU() : 0L);
  705. }
  706. model.setSmsType(SMS_TYPE);
  707. models.add(model);
  708. if (!CollectionUtils.isEmpty(models)) {
  709. sendMessage(models);
  710. }
  711. }
  712. /**
  713. * 将ERP的报价采纳信息转为公共询价服务中心需要的信息
  714. *
  715. * @param decides erp报价采纳信息
  716. * @author hejq
  717. * @date 2018-01-14 12:25
  718. */
  719. @Override
  720. public List<PublicInquiryItem> convertInquiryDecide(List<InquiryDecide> decides) {
  721. List<PublicInquiryItem> inquiryItems = new ArrayList<PublicInquiryItem>();
  722. if (!CollectionUtils.isEmpty(decides)) {
  723. for (InquiryDecide decide : decides) {
  724. PublicInquiryItem item = publicInquiryItemDao.findOne(decide.getB2b_id());
  725. if (null != item) {
  726. item.setAgreed(decide.getId_agreed());
  727. item.setDecideStatus((short) Status.NOT_UPLOAD.value());
  728. inquiryItems.add(item);
  729. }
  730. }
  731. }
  732. return inquiryItems;
  733. }
  734. /**
  735. * 买家ERP作废询价单后,修改公共询价服务中心里面的状态
  736. *
  737. * @param inquiries 询价信息
  738. * @param enuu 企业UU
  739. * @author hejq
  740. * @date 2018-01-14 12:28
  741. */
  742. @Override
  743. public void onReplyInvalid(List<Inquiry> inquiries, final Long enuu) {
  744. final List<PublicInquiryItem> newInquiryItems = new ArrayList<>();
  745. ThreadUtils.tasks(new IRunnable<Inquiry>() {
  746. @Override
  747. public void run(Inquiry inquiry) {
  748. List<PublicInquiry> purchaseInquiries = publicInquiryDao.findByEnUUAndCode(enuu, inquiry.getIn_code());
  749. if (!CollectionUtils.isEmpty(purchaseInquiries)) {
  750. PublicInquiry publicInquiry = purchaseInquiries.get(0);
  751. for (PublicInquiryItem item : publicInquiry.getInquiryItems()) {
  752. item.setStatus((short) Status.DISABLED.value());
  753. // 获取作废信息时,更新作废上传状态为 待上传
  754. item.setInvalidStatus((short) Status.NOT_UPLOAD.value());
  755. synchronized (newInquiryItems) {
  756. newInquiryItems.add(item);
  757. }
  758. }
  759. }
  760. }
  761. }, inquiries).run();
  762. }
  763. /**
  764. * 将公共询价列表转成需要报价的询价单,类型是公共询价
  765. *
  766. * @param id 询价明细id
  767. * @param enuu 报价企业UU
  768. * @param useruu 报价人uu
  769. * @return
  770. * @author hejq
  771. * @date 2018-01-14 14:46
  772. */
  773. @Override
  774. public ModelMap transtoInquiry(Long id, Long enuu, Long useruu) {
  775. ModelMap map = new ModelMap();
  776. PurcInquiryItem purcInquiryItem = purcInquiryItemDao.findOne(id);
  777. PurcInquiry purcInquiry = purcInquiryItem.getInquiry();
  778. // 先判断客户询价单是否存在这张单据
  779. PublicInquiry inquiry = publicInquiryDao.findBySourceIdAndSourceApp(purcInquiry.getId(), SOURCERAPP);
  780. if (null == inquiry) {// 新增
  781. PublicInquiry saleInquiry = new PublicInquiry();
  782. saleInquiry.setDate(new Date());
  783. saleInquiry.setCode(purcInquiry.getCode());
  784. saleInquiry.setEnUU(purcInquiry.getEnUU());
  785. saleInquiry.setRecorder(purcInquiry.getRecorder());
  786. saleInquiry.setRecorderUU(purcInquiry.getRecorderUU());
  787. saleInquiry.setAuditor(purcInquiry.getAuditor());
  788. saleInquiry.setSourceApp(SOURCERAPP);
  789. saleInquiry.setKind(INQUIRYKIND);
  790. saleInquiry.setSourceId(purcInquiry.getId());
  791. saleInquiry.setPriceType(purcInquiry.getPriceType());
  792. saleInquiry.setInvoice(purcInquiry.getInvoice());
  793. saleInquiry.setShip(purcInquiry.getShip());
  794. saleInquiry.setEndDate(purcInquiry.getEndDate());
  795. if (!CollectionUtils.isEmpty(purcInquiry.getAttachs())) {
  796. Set<com.uas.ps.inquiry.model.Attach> attachs = new HashSet<com.uas.ps.inquiry.model.Attach>();
  797. for (com.uas.ps.inquiry.model.Attach attach : purcInquiry.getAttachs()) {
  798. com.uas.ps.inquiry.model.Attach newAttach = new com.uas.ps.inquiry.model.Attach();
  799. newAttach.setDate(new Date());
  800. newAttach.setDescription(attach.getDescription());
  801. newAttach.setName(attach.getName());
  802. newAttach.setPath(attach.getPath());
  803. newAttach.setRelatedKey(attach.getRelatedKey());
  804. newAttach.setSize(attach.getSize());
  805. newAttach.setRelatedKey(attach.getRelatedKey());
  806. attachs.add(newAttach);
  807. }
  808. saleInquiry.setAttachs(attachs);
  809. }
  810. saleInquiry.setEnvironment(purcInquiry.getEnvironment());
  811. saleInquiry.setRemark(purcInquiry.getRemark());
  812. saleInquiry.setInquirytype(purcInquiry.getInquirytype());
  813. Set<PublicInquiryItem> items = new HashSet<PublicInquiryItem>();
  814. Short i = 0;
  815. if (null != purcInquiryItem) {
  816. PublicInquiryItem item = new PublicInquiryItem();
  817. Product product = productDao.findOne(purcInquiryItem.getProductId());
  818. item.setProductId(product.getId());
  819. item.setInquiry(saleInquiry);
  820. item.setNumber(i);
  821. item.setCurrency(purcInquiryItem.getCurrency());
  822. item.setFromDate(new Date());
  823. item.setToDate(purcInquiryItem.getToDate());
  824. item.setTaxrate(purcInquiryItem.getTaxrate());
  825. item.setRemark(purcInquiryItem.getRemark());
  826. item.setProductId(purcInquiryItem.getProductId());
  827. item.setStatus((short) Status.NOT_REPLY.value());
  828. item.setVendUU(enuu);
  829. item.setVendUserUU(useruu);
  830. item.setSource(purcInquiryItem.getSource());
  831. item.setCustLap(Constant.NO);
  832. item.setSendStatus((short) Status.NOT_UPLOAD.value());
  833. item.setSourceId(id);
  834. List<PublicInquiryReply> replies = new ArrayList<PublicInquiryReply>();
  835. PublicInquiryReply reply = new PublicInquiryReply();
  836. reply.setLapQty((double) 0);
  837. replies.add(reply);
  838. item.setReplies(replies);
  839. item.setNeedquantity(purcInquiryItem.getNeedquantity());
  840. item.setKind(INQUIRYKIND);
  841. item.setProdCode(purcInquiryItem.getProdCode());
  842. items.add(item);
  843. i++;
  844. }
  845. List<PublicInquiryItem> purcitems = publicInquiryItemDao.save(items);
  846. if (purcitems.get(0).getId() != null) {
  847. map.put("success", "转客户询价单成功");
  848. map.put("id", purcitems.get(0).getInquiry().getId());
  849. } else {
  850. map.put("success", "转客户询价单失败");
  851. }
  852. } else {// 插入
  853. PublicInquiryItem purcItem = publicInquiryItemDao.findByVendUUAndSourceId(enuu, id);
  854. if (purcItem != null) {
  855. map.put("info", "询价单已存在");
  856. map.put("inid", purcItem.getId());
  857. } else {
  858. if (!CollectionUtils.isEmpty(purcInquiry.getInquiryItems())) {
  859. if (null != purcInquiryItem) {
  860. // 涉及到级联存储及ERP转入单据的操作,用主表id存储存在问题,这里先用sql语句直接插入
  861. PublicInquiryItem item = new PublicInquiryItem();
  862. Product product = productDao.findOne(purcInquiryItem.getProductId());
  863. item.setProductId(product.getId());
  864. item.setNumber((short) (purcInquiry.getInquiryItems().size() + 1));
  865. item.setCurrency(purcInquiryItem.getCurrency());
  866. item.setFromDate(new Date());
  867. item.setToDate(purcInquiryItem.getToDate());
  868. item.setTaxrate(purcInquiryItem.getTaxrate());
  869. item.setRemark(purcInquiryItem.getRemark());
  870. item.setProductId(purcInquiryItem.getProductId());
  871. item.setVendUU(enuu);
  872. item.setVendUserUU(useruu);
  873. item.setSource(purcInquiryItem.getSource());
  874. item.setStatus((short) Status.NOT_REPLY.value());
  875. item.setCustLap(Constant.NO);
  876. item.setSendStatus((short) Status.NOT_UPLOAD.value());
  877. item.setSourceId(id);
  878. item.setProdCode(purcInquiryItem.getProdCode());
  879. item.setKind(INQUIRYKIND);
  880. item.setNeedquantity(purcInquiryItem.getNeedquantity());
  881. List<PublicInquiryReply> replies = new ArrayList<PublicInquiryReply>();
  882. List<PublicInquiryReply> purcReplies = new ArrayList<PublicInquiryReply>();
  883. PublicInquiryReply reply = new PublicInquiryReply();
  884. reply.setLapQty((double) 0);
  885. purcReplies.add(reply);
  886. purcReplies = publicInquiryReplyDao.save(purcReplies);
  887. replies.addAll(purcReplies);
  888. item.setReplies(replies);
  889. Long idid = jdbcTemplate.queryForObject("select public$inquiryitems_seq.nextval from dual", Long.class);
  890. try {
  891. jdbcTemplate.update(
  892. "insert into public$inquiryitems(id_id,id_number,id_currency,id_fromdate,id_todate,id_taxrate,id_prid,id_venduu,"
  893. + "id_venduseruu,id_sourceapp,id_status,id_custlap,id_sendstatus,id_sourceid,id_inid,id_kind) values (?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?)",
  894. idid, item.getNumber(), item.getCurrency(), item.getFromDate(), item.getToDate(),
  895. item.getTaxrate(), item.getProductId(), item.getVendUU(), item.getVendUserUU(),
  896. item.getSource(), item.getStatus(), item.getCustLap(), item.getSendStatus(),
  897. item.getSourceId(), inquiry.getId(), inquiry.getKind());
  898. } catch (DataAccessException e) {
  899. map.put("info", "转客户询价单失败");
  900. }
  901. item = publicInquiryItemDao.findOne(idid);
  902. //回复清单更新
  903. if (replies.size() > 0) {
  904. for (PublicInquiryReply reply1 : replies) {
  905. jdbcTemplate.update("update public$inquiryreply set ir_idid = " + idid + "where ir_id = " + reply1.getId());
  906. }
  907. }
  908. if (item != null) {
  909. map.put("success", "转客户询价单成功");
  910. map.put("id", item.getInquiry().getId());
  911. } else {
  912. map.put("info", "转客户询价单失败");
  913. }
  914. }
  915. }
  916. }
  917. }
  918. return map;
  919. }
  920. /**
  921. * 通过分页参数和过滤条件查询报价信息
  922. *
  923. * @param info 分页参数
  924. * @param filter 过滤条件
  925. * @return
  926. * @author hejq
  927. * @date 2018-01-17 10:30
  928. */
  929. @Override
  930. public IPage<PublicInquiryItemInfo> findByPageInfo(final PageInfo info, final SearchFilter filter) {
  931. Sort sort = new Sort(Sort.Direction.DESC, "date");
  932. if (info.getOffset() == 0) {
  933. info.setOffset(info.getPageSize() * (info.getPageNumber() - 1));
  934. }
  935. info.setSort(sort);
  936. if (null != filter) {
  937. if (StringUtils.hasText(filter.getKeyword())) {
  938. SimpleExpression cmpCode = new SimpleExpression("cmpCode", filter.getKeyword(), CriterionExpression.Operator.LIKE, true);
  939. SimpleExpression brand = new SimpleExpression("inbrand", filter.getKeyword(), CriterionExpression.Operator.LIKE, true);
  940. SimpleExpression code = new SimpleExpression("inquiry.code", filter.getKeyword(), CriterionExpression.Operator.LIKE, true);
  941. SimpleExpression title = new SimpleExpression("prodTitle", filter.getKeyword(), CriterionExpression.Operator.LIKE, true);
  942. SimpleExpression spec = new SimpleExpression("spec", filter.getKeyword(), CriterionExpression.Operator.LIKE, true);
  943. SimpleExpression inquiryEnName = new SimpleExpression("inquiry.enName", filter.getKeyword(), CriterionExpression.Operator.LIKE, true);
  944. SimpleExpression[] simpleExpressions = new SimpleExpression[]{cmpCode, brand, code, title, inquiryEnName, spec};
  945. LogicalExpression logical = new LogicalExpression(simpleExpressions, CriterionExpression.Operator.OR);
  946. info.expression(logical);
  947. }
  948. if (filter.getFromDate() != null) {
  949. info.expression(PredicateUtils.gte("offerTime", new Date(filter.getFromDate()), false));
  950. }
  951. if (filter.getEndDate() != null) {
  952. info.expression(PredicateUtils.lte("offerTime", new Date(filter.getEndDate()), false));
  953. }
  954. }
  955. Page<PublicInquiryItemInfo> itemInfoPage = itemInfoDao.findAll(new Specification<PublicInquiryItemInfo>() {
  956. public Predicate toPredicate(Root<PublicInquiryItemInfo> root, CriteriaQuery<?> query, CriteriaBuilder builder) {
  957. query.where(info.getPredicates(root, query, builder));
  958. return null;
  959. }
  960. }, info);
  961. if (!CollectionUtils.isEmpty(itemInfoPage.getContent())) {
  962. for (PublicInquiryItemInfo itemInfo : itemInfoPage) {
  963. String sql = "select at_path,at_name from attachs a left join public$inquiryitems$attach p on a.at_id = p.at_id " +
  964. "left join public$inquiryitems i on p.id_id = i.id_id where i.id_id = " + itemInfo.getId();
  965. List<Map<String, Object>> maps = jdbcTemplate.queryForList(sql);
  966. if (!CollectionUtils.isEmpty(maps)) {
  967. Map<String, Object> map = maps.get(0);
  968. itemInfo.setAttachUrl(map.get("at_path").toString());
  969. itemInfo.setAttachName(map.get("at_name").toString());
  970. }
  971. if (null == itemInfo.getProductId()) {
  972. Product product = new Product();
  973. product.setTitle(itemInfo.getProdTitle());
  974. product.setCmpCode(itemInfo.getCmpCode());
  975. product.setBrand(itemInfo.getInbrand());
  976. product.setSpec(itemInfo.getSpec());
  977. product.setCode(itemInfo.getProdCode());
  978. if (null == product.getCode()) {
  979. product.setCode(itemInfo.getCmpCode());
  980. }
  981. itemInfo.setProduct(product);
  982. }
  983. }
  984. }
  985. return IPageUtils.covert(itemInfoPage);
  986. }
  987. @Override
  988. public Page<PublicInquiryItemInfo> findListByPageInfo(final PageInfo info, SearchFilter filter) {
  989. Sort sort = new Sort(Sort.Direction.DESC, "date");
  990. if (info.getOffset() == 0) {
  991. info.setOffset(info.getPageSize() * (info.getPageNumber() - 1));
  992. }
  993. info.setSort(sort);
  994. return itemInfoDao.findAll(new Specification<PublicInquiryItemInfo>() {
  995. public Predicate toPredicate(Root<PublicInquiryItemInfo> root, CriteriaQuery<?> query, CriteriaBuilder builder) {
  996. query.where(info.getPredicates(root, query, builder));
  997. return null;
  998. }
  999. }, info);
  1000. }
  1001. /**
  1002. * 查询公共询价列表信息
  1003. *
  1004. * @param info 分页参数
  1005. * @param filter 过滤条件
  1006. * @return
  1007. */
  1008. @Override
  1009. public IPage<PurcInquiryItemInfo> findTodoByPageInfo(final PageInfo info, final SearchFilter filter) {
  1010. Sort sort = new Sort(Sort.Direction.DESC, "id", "date");
  1011. if (info.getOffset() == 0) {
  1012. info.setOffset(info.getPageSize() * (info.getPageNumber() - 1));
  1013. }
  1014. info.setSort(sort);
  1015. Page<PurcInquiryItemInfo> orders = inquiryItemInfoDao.findAll(new Specification<PurcInquiryItemInfo>() {
  1016. public Predicate toPredicate(Root<PurcInquiryItemInfo> root, CriteriaQuery<?> query, CriteriaBuilder builder) {
  1017. if (null != filter) {
  1018. if (filter.getFromDate() != null) {
  1019. info.expression(PredicateUtils.gte("date", new Date(filter.getFromDate()), false));
  1020. }
  1021. if (filter.getEndDate() != null) {
  1022. info.expression(PredicateUtils.lte("date", new Date(filter.getEndDate()), false));
  1023. }
  1024. if (!CollectionUtils.isEmpty(filter.getDistribute())) {
  1025. info.expression(PredicateUtils.in("inquiry.enUU", filter.getDistribute(), false));
  1026. }
  1027. if (!StringUtils.isEmpty(filter.getIsAll()) && filter.getIsAll() == 0 && !StringUtils.isEmpty(filter.getEnUU())) {
  1028. info.expression(PredicateUtils.ne("inquiry.enUU", filter.getEnUU(), false));
  1029. List<Long> ids = inquiryEnRemindDao.findIdsByVendUU(filter.getEnUU());
  1030. info.expression(PredicateUtils.notIn("id", ids, false));
  1031. }
  1032. if (!StringUtils.isEmpty(filter.getKeyword())) {
  1033. SimpleExpression cmpCode = new SimpleExpression("cmpCode", filter.getKeyword(), CriterionExpression.Operator.LIKE, true);
  1034. SimpleExpression brand = new SimpleExpression("inbrand", filter.getKeyword(), CriterionExpression.Operator.LIKE, true);
  1035. SimpleExpression title = new SimpleExpression("prodTitle", filter.getKeyword(), CriterionExpression.Operator.LIKE, true);
  1036. SimpleExpression spec = new SimpleExpression("spec", filter.getKeyword(), CriterionExpression.Operator.LIKE, true);
  1037. SimpleExpression code = new SimpleExpression("inquiry.code", filter.getKeyword(), CriterionExpression.Operator.LIKE, true);
  1038. SimpleExpression enName = new SimpleExpression("inquiry.enName", filter.getKeyword(), CriterionExpression.Operator.LIKE, true);
  1039. SimpleExpression[] simpleExpressions = null;
  1040. if (!StringUtils.isEmpty(filter.getIsLogin()) && filter.getIsLogin() == 0) {
  1041. simpleExpressions = new SimpleExpression[]{cmpCode, brand, code, title, spec};
  1042. } else {
  1043. simpleExpressions = new SimpleExpression[]{cmpCode, brand, code, title, enName, spec};
  1044. }
  1045. LogicalExpression logical = new LogicalExpression(simpleExpressions, CriterionExpression.Operator.OR);
  1046. info.expression(logical);
  1047. }
  1048. }
  1049. query.where(info.getPredicates(root, query, builder));
  1050. return null;
  1051. }
  1052. }, info);
  1053. // 将当前企业报价信息设置进去
  1054. // for (PurcInquiryItemInfo itemInfo : orders) {
  1055. // PublicInquiryItem item = publicInquiryItemDao.findByVendUUAndSourceId(filter.getEnUU(), itemInfo.getId());
  1056. // itemInfo.setQuotation(item);
  1057. // }
  1058. return covert(orders, filter.getEnUU());
  1059. }
  1060. /**
  1061. * 将数据库查询的数据进行封装处理
  1062. *
  1063. * @param orders 查询的数据信息
  1064. * @return
  1065. */
  1066. private IPage<PurcInquiryItemInfo> covert(Page<PurcInquiryItemInfo> orders, Long enuu) {
  1067. if (!CollectionUtils.isEmpty(orders.getContent()) && null != enuu) {
  1068. for (PurcInquiryItemInfo itemInfo : orders.getContent()) {
  1069. PublicInquiryItem item = publicInquiryItemDao.findByVendUUAndSourceId(enuu, itemInfo.getId());
  1070. itemInfo.setQuoted(Constant.NO);
  1071. if (null != item) {
  1072. itemInfo.setAgreed(item.getAgreed());
  1073. itemInfo.setQuteId(item.getId());
  1074. itemInfo.setQuoted(Constant.YES);
  1075. }
  1076. if (null == itemInfo.getProductId()) {
  1077. Product product = new Product();
  1078. product.setTitle(itemInfo.getProdTitle());
  1079. product.setCmpCode(itemInfo.getCmpCode());
  1080. product.setBrand(itemInfo.getInbrand());
  1081. product.setSpec(itemInfo.getSpec());
  1082. product.setCode(itemInfo.getProdCode());
  1083. if (null == product.getCode()) {
  1084. product.setCode(itemInfo.getCmpCode());
  1085. }
  1086. itemInfo.setProduct(product);
  1087. } else {
  1088. Product product = productDao.findOne(itemInfo.getProductId());
  1089. itemInfo.setProduct(product);
  1090. }
  1091. }
  1092. }
  1093. return IPageUtils.covert(orders);
  1094. }
  1095. /**
  1096. * 根据传入条件封装查询条件
  1097. *
  1098. * @param pageInfo 分页参数
  1099. * @param state 过滤条件
  1100. * @return
  1101. */
  1102. @Override
  1103. public PageInfo covert(PageInfo pageInfo, String state, Short overdue) {
  1104. Sort sort = new Sort(Sort.Direction.DESC, "date");
  1105. if (pageInfo.getOffset() == 0) {
  1106. pageInfo.setOffset(pageInfo.getPageSize() * (pageInfo.getPageNumber() - 1));
  1107. }
  1108. pageInfo.setSort(sort);
  1109. if (state.equals(OrderStatus.todo.name())) {
  1110. pageInfo.filter("status", Status.NOT_REPLY.value());
  1111. pageInfo.filter("overdue", Constant.NO);
  1112. pageInfo.filter("invalid", Constant.NO);
  1113. } else if (state.equals(OrderStatus.done.name())) {
  1114. if (StringUtils.isEmpty(overdue) || !overdue.equals(Constant.YES)) {
  1115. pageInfo.filter("overdue", Constant.NO);
  1116. }
  1117. pageInfo.filter("status", Status.REPLIED.value());
  1118. pageInfo.filter("invalid", Constant.NO);
  1119. pageInfo.filter("decideStatus", Status.UNAUDIT.value());
  1120. } else if (state.equals(OrderStatus.end.name())) {
  1121. pageInfo.filter("overdue", Constant.YES);
  1122. pageInfo.filter("invalid", Constant.NO);
  1123. } else if (state.equals(OrderStatus.invalid.name())) {
  1124. SimpleExpression overdue1 = new SimpleExpression("overdue", Constant.NO, CriterionExpression.Operator.NE, true);
  1125. SimpleExpression invalid = new SimpleExpression("invalid", Constant.NO, CriterionExpression.Operator.NE, true);
  1126. SimpleExpression[] simpleExpressions = new SimpleExpression[]{invalid, overdue1};
  1127. LogicalExpression logical = new LogicalExpression(simpleExpressions, CriterionExpression.Operator.OR);
  1128. pageInfo.expression(logical);
  1129. } else if (state.equals(OrderStatus.agreed.name())) {
  1130. pageInfo.filter("agreed", Constant.YES);
  1131. pageInfo.filter("status", Status.REPLIED.value());
  1132. pageInfo.filter("invalid", Constant.NO);
  1133. } else if (state.equals(OrderStatus.refused.name())) {
  1134. pageInfo.filter("agreed", Constant.NO);
  1135. pageInfo.filter("status", Status.REPLIED.value());
  1136. pageInfo.filter("invalid", Constant.NO);
  1137. }
  1138. return pageInfo;
  1139. }
  1140. /**
  1141. * 获取公共询价列表信息
  1142. *
  1143. * @param enuu 当前企业UU
  1144. * @param size 大小
  1145. * @return
  1146. */
  1147. @Override
  1148. public List<InquiryMessage> getMessageList(Long enuu, Integer size) {
  1149. if (size == 0 || size == null) {
  1150. size = 10;
  1151. }
  1152. String sql = "select * from (select p.id_id id, p.id_prodtitle prodTitle, 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 1=1";
  1153. if (enuu != null) {
  1154. sql = sql + " and i.in_enuu <> " + enuu;
  1155. }
  1156. sql = sql + " and COALESCE(p.id_overdue, 0) <> 1 order by p.id_id desc) i limit " + size;
  1157. List<PurcInquiryItem> items = jdbcTemplate.query(sql, new BeanPropertyRowMapper<PurcInquiryItem>(PurcInquiryItem.class));
  1158. List<InquiryMessage> messages = new ArrayList<InquiryMessage>();
  1159. if (!CollectionUtils.isEmpty(items)) {
  1160. for (PurcInquiryItem item : items) {
  1161. InquiryMessage message = new InquiryMessage();
  1162. if (null != item.getEnuu()) {
  1163. Enterprise enterprise = enterpriseDao.findOne(item.getEnuu());
  1164. message.setEnName(enterprise.getEnName());
  1165. }
  1166. item = purcInquiryItemDao.findOne(item.getId());
  1167. message.setPordName(item.getProdTitle());
  1168. message.setInid(item.getId());
  1169. PublicInquiryItem publicInquiryItem = publicInquiryItemDao.findByVendUUAndSourceId(enuu, item.getId());
  1170. if (null != publicInquiryItem) {
  1171. message.setQuteId(publicInquiryItem.getId());
  1172. }
  1173. message.setLastest(isToday(item.getDate()));
  1174. messages.add(message);
  1175. }
  1176. }
  1177. return messages;
  1178. }
  1179. /**
  1180. * 判断该条单据是否当天单据
  1181. *
  1182. * @param date 询价时间
  1183. * @return
  1184. */
  1185. private boolean isToday(Date date) {
  1186. SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
  1187. String inDate = sdf.format(date);
  1188. String nowDate = sdf.format(new Date());
  1189. return inDate.equals(nowDate);
  1190. }
  1191. /**
  1192. * 商城-采购排行榜
  1193. *
  1194. * @return
  1195. */
  1196. @Override
  1197. public List<Map<String, Object>> findCodeRankingList() {
  1198. String sql = "select * from(SELECT sum(1) AS seekAmount, id_cmpcode FROM `purc$puinquiryitems` where id_cmpcode is not null group by id_cmpcode ) "
  1199. + " a order by seekAmount desc limit 0,5";
  1200. return jdbcTemplate.queryForList(sql);
  1201. }
  1202. /**
  1203. * 通过明细id查询询价详情
  1204. *
  1205. * @param itemId 明细id
  1206. * @return
  1207. */
  1208. @Override
  1209. public PurcInquiryItemInfo findItemByItemId(Long itemId, Long enuu) {
  1210. PurcInquiryItemInfo itemInfo = inquiryItemInfoDao.findOne(itemId);
  1211. PublicInquiryItem item = publicInquiryItemDao.findByVendUUAndSourceId(enuu, itemInfo.getId());
  1212. itemInfo.setQuoted(Constant.NO);
  1213. if (null != item) {
  1214. itemInfo.setAgreed(item.getAgreed());
  1215. itemInfo.setQuteId(item.getId());
  1216. itemInfo.setQuoted(Constant.YES);
  1217. }
  1218. if (null == itemInfo.getProductId()) {
  1219. Product product = new Product();
  1220. product.setTitle(itemInfo.getProdTitle());
  1221. product.setCmpCode(itemInfo.getCmpCode());
  1222. product.setBrand(itemInfo.getInbrand());
  1223. product.setSpec(itemInfo.getSpec());
  1224. itemInfo.setProduct(product);
  1225. }
  1226. return itemInfo;
  1227. }
  1228. /**
  1229. * 通过id查询单个已转报价的信息
  1230. *
  1231. * @param id
  1232. * @return
  1233. */
  1234. @Override
  1235. public PublicInquiryItemInfo findOneInfo(Long id, Long enuu, Long useruu) {
  1236. PublicInquiryItemInfo itemInfo = itemInfoDao.findOne(id);
  1237. if (!itemInfo.getVendUU().equals(enuu)) {
  1238. throw new IllegalOperatorException("访问受限");
  1239. }
  1240. return itemInfo;
  1241. }
  1242. /**
  1243. * 将推荐信息转成UU互联需要的数据
  1244. *
  1245. * @param content 推荐信息
  1246. * @return
  1247. */
  1248. @Override
  1249. public List<PurcInquiryItemInfo> covertRemindToInquiry(List<InquiryRemind> content) {
  1250. List<PurcInquiryItemInfo> infoList = new ArrayList<>();
  1251. if (!CollectionUtils.isEmpty(content)) {
  1252. for (InquiryRemind remind : content) {
  1253. PurcInquiryItemInfo itemInfo = inquiryItemInfoDao.findOne(remind.getItemId());
  1254. if (null != itemInfo) {
  1255. Product product = new Product();
  1256. product.setTitle(itemInfo.getProdTitle());
  1257. product.setCmpCode(itemInfo.getCmpCode());
  1258. product.setCode(itemInfo.getCmpCode());
  1259. product.setBrand(itemInfo.getInbrand());
  1260. product.setSpec(itemInfo.getSpec());
  1261. itemInfo.setProduct(product);
  1262. if (remind.getStatus().equals(Status.NOTALLOW.value())) {
  1263. itemInfo.setAgreed(Constant.NO);
  1264. } else if (remind.getStatus().equals(Status.ALLOW.value())) {
  1265. itemInfo.setAgreed(Constant.YES);
  1266. }
  1267. itemInfo.setQuoted(Constant.NO);
  1268. if (remind.getStatus().equals(Status.SUBMITTED.value())) {
  1269. itemInfo.setQuoted(Constant.YES);
  1270. itemInfo.setQuteId(remind.getNewId());
  1271. }
  1272. if (itemInfo.getRemainingTime() <= 0) {
  1273. itemInfo.setOverdue(Constant.YES);
  1274. }
  1275. infoList.add(itemInfo);
  1276. }
  1277. }
  1278. }
  1279. return infoList;
  1280. }
  1281. /**
  1282. * 针对供应商,客户将拒绝理由发送信息给供应商
  1283. *
  1284. * @param item 询价明细
  1285. * @param sourceApp 应用来源
  1286. * @throws Exception
  1287. */
  1288. @Override
  1289. public Page<MessageModel> refuseMessage(PublicInquiryItem item, String sourceApp) {
  1290. if (null != item.getVendUU() && null != item.getVendUserUU()) {
  1291. final String SMS_TYPE = "SM"; //发送信息
  1292. final String CONSUMERAPP = "MALL";
  1293. List<MessageModel> models = new ArrayList<MessageModel>();
  1294. String Buyer = item.getInquiry().getEnName() == null ? item.getInquiry().getRecorder() : item.getInquiry().getEnName();
  1295. String cmpCode = item.getCmpCode();
  1296. String cmp = cmpCode.length() > 10 ? cmpCode.substring(0, 10).concat("...") : cmpCode;
  1297. String content = "因" + item.getRefusereason() + "," + Buyer + "【未采纳】您关于“型号:" + cmp + "”的报价。期待与您的下次合作!";
  1298. MessageModel model = new MessageModel();
  1299. model.setType(INQUIRY_DECIDE_TYPE_MALL);
  1300. model.setProducerApp(sourceApp);
  1301. model.setConsumerType(CUST_TYPE);
  1302. model.setConsumerApp(CONSUMERAPP);
  1303. model.setContent(content);
  1304. model.setRemark(String.valueOf(item.getInquiry().getId()));
  1305. model.setSourceId(item.getId());
  1306. model.setReceiverEnuu(item.getVendUU());
  1307. model.setReceiverUu(item.getVendUserUU());
  1308. model.setSenderEnuu(item.getInquiry().getEnUU());
  1309. if (null != item.getUserUU() || null != item.getInquiry().getRecorderUU()) {
  1310. model.setSenderUu(item.getUserUU() != null ? item.getUserUU() : item.getInquiry().getRecorderUU());
  1311. } else {
  1312. Enterprise enterprise = enterpriseDao.findOne(item.getInquiry().getEnUU());
  1313. model.setSenderUu(null != enterprise ? enterprise.getAdminUU() : 0L);
  1314. }
  1315. model.setSmsType(SMS_TYPE);
  1316. models.add(model);
  1317. if (!CollectionUtils.isEmpty(models)) {
  1318. sendMessage(models);
  1319. }
  1320. }
  1321. return null;
  1322. }
  1323. /**
  1324. * 针对供应商,把客户采纳报价的消息发送给供应商
  1325. *
  1326. * @param item 询价明细
  1327. * @param sourceApp 应用来源
  1328. * @throws Exception
  1329. */
  1330. @Override
  1331. public Page<MessageModel> adoptMessage(PublicInquiryItem item, String sourceApp) {
  1332. if (null != item.getVendUU() && null != item.getVendUserUU()) {
  1333. final String SMS_TYPE = "SM"; //发送信息
  1334. final String CONSUMERAPP = "MALL";
  1335. List<MessageModel> models = new ArrayList<MessageModel>();
  1336. String cmpCode = item.getCmpCode();
  1337. String cmp = cmpCode.length() > 10 ? cmpCode.substring(0, 10).concat("...") : cmpCode;
  1338. String content = item.getInquiry().getEnName() + "【已采纳】您关于'型号:'" + cmp + "的报价,期待与您的合作!";
  1339. MessageModel model = new MessageModel();
  1340. model.setType(INQUIRY_DECIDE_TYPE_MALL);
  1341. model.setProducerApp(sourceApp);
  1342. model.setConsumerType(CUST_TYPE);
  1343. model.setConsumerApp(CONSUMERAPP);
  1344. model.setContent(content);
  1345. model.setRemark(String.valueOf(item.getInquiry().getId()));
  1346. model.setSourceId(item.getId());
  1347. model.setReceiverEnuu(item.getVendUU());
  1348. model.setReceiverUu(item.getVendUserUU());
  1349. model.setSenderEnuu(item.getInquiry().getEnUU());
  1350. if (null != item.getUserUU() || null != item.getInquiry().getRecorderUU()) {
  1351. model.setSenderUu(item.getUserUU() != null ? item.getUserUU() : item.getInquiry().getRecorderUU());
  1352. } else {
  1353. Enterprise enterprise = enterpriseDao.findOne(item.getInquiry().getEnUU());
  1354. model.setSenderUu(null != enterprise ? enterprise.getAdminUU() : 0L);
  1355. }
  1356. model.setSmsType(SMS_TYPE);
  1357. models.add(model);
  1358. if (!CollectionUtils.isEmpty(models)) {
  1359. sendMessage(models);
  1360. }
  1361. }
  1362. return null;
  1363. }
  1364. @Override
  1365. public Page<MessageModel> ReceiveMessage(PublicInquiryItem item, String sourceApp) {
  1366. if (null != item.getVendUU() && null != item.getVendUserUU()) {
  1367. final String SMS_TYPE = "SM"; //发送信息
  1368. final String CONSUMERAPP = "MALL";
  1369. List<MessageModel> models = new ArrayList<MessageModel>();
  1370. String cmpCode = item.getCmpCode();
  1371. String cmp = cmpCode.length() > 10 ? cmpCode.substring(0, 10).concat("...") : cmpCode;
  1372. String content = "您收到了" + item.getVendName() + "关于“型号:" + cmp + "“的报价,马上去看一看吧!";
  1373. MessageModel model = new MessageModel();
  1374. model.setType(INQUIRY_TYPE_MALL);
  1375. model.setProducerApp(sourceApp);
  1376. model.setConsumerType(CUST_TYPE);
  1377. model.setConsumerApp(CONSUMERAPP);
  1378. model.setContent(content);
  1379. model.setRemark(String.valueOf(item.getInquiry().getId()));
  1380. model.setSourceId(item.getId());
  1381. model.setReceiverEnuu(item.getInquiry().getEnUU());
  1382. model.setReceiverUu(item.getInquiry().getRecorderUU());
  1383. model.setSenderEnuu(item.getVendUU());
  1384. if (null != item.getUserUU() || null != item.getInquiry().getRecorderUU()) {
  1385. model.setSenderUu(item.getUserUU() != null ? item.getUserUU() : item.getInquiry().getRecorderUU());
  1386. } else {
  1387. Enterprise enterprise = enterpriseDao.findOne(item.getInquiry().getEnUU());
  1388. model.setSenderUu(null != enterprise ? enterprise.getAdminUU() : 0L);
  1389. }
  1390. model.setSmsType(SMS_TYPE);
  1391. models.add(model);
  1392. if (!CollectionUtils.isEmpty(models)) {
  1393. sendMessage(models);
  1394. }
  1395. }
  1396. return null;
  1397. }
  1398. @Override
  1399. public ModelMap getPurcInquiryItemCount() {
  1400. ModelMap result = null;
  1401. try {
  1402. result = new ModelMap();
  1403. Long count = inquiryItemInfoDao.count();
  1404. result.put("count", count);
  1405. } catch (Exception e) {
  1406. e.printStackTrace();
  1407. }
  1408. return result;
  1409. }
  1410. /**
  1411. * 查询某年某月的询价明细总数
  1412. *
  1413. * @param month
  1414. * @return
  1415. */
  1416. public ModelMap countByMonth(Integer year, Integer month) {
  1417. ModelMap result = null;
  1418. try {
  1419. result = new ModelMap();
  1420. Long count = inquiryItemInfoDao.countByMonth(year, month);
  1421. result.put("count", count);
  1422. result.put("success", "true");
  1423. } catch (Exception e) {
  1424. result.put("message", e.getMessage());
  1425. result.put("success", false);
  1426. e.printStackTrace();
  1427. }
  1428. return result;
  1429. }
  1430. }