package com.uas.ps.inquiry.service.impl; import com.alibaba.fastjson.JSONObject; import com.uas.ps.core.util.ContextUtils; import com.uas.ps.entity.Product; import com.uas.ps.entity.ProductUsers; import com.uas.ps.entity.Status; import com.uas.ps.inquiry.AccessConfiguration; import com.uas.ps.inquiry.dao.*; import com.uas.ps.inquiry.domain.IPage; import com.uas.ps.inquiry.entity.*; import com.uas.ps.inquiry.exception.NotFoundException; import com.uas.ps.inquiry.model.*; import com.uas.ps.inquiry.page.PageInfo; import com.uas.ps.inquiry.page.SearchFilter; import com.uas.ps.inquiry.page.criteria.*; import com.uas.ps.inquiry.page.exception.IllegalOperatorException; import com.uas.ps.inquiry.service.PublicInquiryService; import com.uas.ps.inquiry.util.*; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.dao.DataAccessException; import org.springframework.data.domain.Page; import org.springframework.data.domain.Sort; import org.springframework.data.jpa.domain.Specification; import org.springframework.http.HttpStatus; import org.springframework.jdbc.core.BeanPropertyRowMapper; import org.springframework.jdbc.core.JdbcTemplate; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; import org.springframework.ui.ModelMap; import org.springframework.util.CollectionUtils; import org.springframework.util.StringUtils; import javax.persistence.criteria.CriteriaBuilder; import javax.persistence.criteria.CriteriaQuery; import javax.persistence.criteria.Predicate; import javax.persistence.criteria.Root; import java.text.SimpleDateFormat; import java.util.*; /** * 公共询价接口实现 *

* Created by hejq on 2018-01-13. */ @Service @Transactional public class PublicInquiryServiceImpl implements PublicInquiryService { @Autowired private PublicInquiryDao publicInquiryDao; @Autowired private PurcInquiryDao purcInquiryDao; @Autowired private ProductDao productDao; @Autowired private PurcInquiryItemDao purcInquiryItemDao; @Autowired private JdbcTemplate jdbcTemplate; @Autowired private PublicInquiryReplyDao publicInquiryReplyDao; @Autowired private PurcInquiryItemInfoDao inquiryItemInfoDao; @Autowired private PublicInquiryItemInfoDao itemInfoDao; @Autowired private PublicInquiryItemDao publicInquiryItemDao; @Autowired private UserDao userDao; @Autowired private EnterpriseDao enterpriseDao; @Autowired private InquiryRemindDao remindDao; @Autowired private ProductReplaceDao productReplaceDao; @Autowired private InquiryEnRemindDao inquiryEnRemindDao; @Autowired private KindConcernDao kindConcernDao; @Autowired private InquiryDataDao inquiryDataDao; /** * 应用来源 */ private final String SOURCERAPP = "B2B"; /** * 接收应用(以","拼接应用名称) */ private final String CONSUMERAPP = "MALL,B2B"; /** * 消息类型 (在B2B消息中拼接跳转单据详情url请求时需要) */ private final String INQUIRY_TYPE = "公共询价"; /** * 消息类型 (在B2B消息中拼接跳转单据详情url请求时需要) */ private final String INQUIRY_TYPE_MALL = "MALL跳转买家已报价页面"; /** * 消息类型 (在MALL消息中拼接求购询价待报价) */ private final String INQUIRY_TYPE_SELLER_MALL = "MALL公共询价"; /** * 消息类型,公共询价的采纳结果 */ private final String INQUIRY_DECIDE_TYPE = "公共询价采纳结果"; /** * 消息类型,公共询价的采纳结果 */ private final String INQUIRY_DECIDE_TYPE_MALL = "商城公共询价采纳结果"; /** * 询价种类 */ private final String INQUIRYKIND = "publicInquiry"; /** * 消息推送邮件模板id */ private final String MAIL_TEMP_ID = "d94e931b-b699-46d7-8bb2-94604a3352c0"; /** * 消息推送短信模板id */ private final String SMS_TEMP_ID = "6e094dcf-f2c7-462a-9686-b2d32d684a78"; /** * 消息推送方式:邮件、短信、im */ private final String SMS_TYPE = "MAIL_AND_SM_AND_IM"; /** * 来源应用,ERP */ private final String PRODUCERAPP = "ERP"; /** * 消费类型: 多个,MULTI */ private final String CUST_TYPE = "MULTI"; /** * 公共物料访问地址 */ private final String PS_PRODUCT_URL = ContextUtils.getBean(AccessConfiguration.class).getPsProductUrl(); /** * 公共消息访问地址 */ private final String PS_MESSAGE_URL = ContextUtils.getBean(AccessConfiguration.class).getPsMessageUrl(); /** * 商城链接 */ private final String USOFTMALL_URL = ContextUtils.getBean(AccessConfiguration.class).getMallUrl(); /** * 日志 */ private static final Logger log = LoggerFactory.getLogger(PublicInquiryServiceImpl.class); /** * 保存公共询价信息 * * @param inquiries erp传入公共询价的信息 * @param enuu 询价企业UU号 * @param address 询价企业地址 */ @Override public void save(List inquiries, Long enuu, String address) throws NotFoundException { List purcInquiries = covert(inquiries, enuu, address); if (!CollectionUtils.isEmpty(purcInquiries)) { for (PurcInquiry inquiry : purcInquiries) { // 判断单号是否已存在 List old = purcInquiryDao.findByCodeAndEnUU(inquiry.getCode(), enuu); List items = new ArrayList(); if (CollectionUtils.isEmpty(old) && !CollectionUtils.isEmpty(inquiry.getInquiryItems())) { for (PurcInquiryItem item : inquiry.getInquiryItems()) { item.setInquiry(inquiry); item.setValid(1); items.add(item); } } try { items = purcInquiryItemDao.save(items); if (!CollectionUtils.isEmpty(items)) { final List purcInquiryItems = items; ThreadUtils.task(new Runnable() { @Override public void run() { try { notifyMessage(purcInquiryItems, PRODUCERAPP); } catch (Exception e) { e.printStackTrace(); } } }); } } catch (Exception e) { e.printStackTrace(); } } } } /** * 消息推送 * * @param inquiryItems 询价明细 * @param sourceApp 消息来源应用 */ @Override public void notifyMessage(List inquiryItems, String sourceApp) throws Exception { for (PurcInquiryItem item : inquiryItems) { String cmpCode = null; if (item.getCmpCode() != null) { cmpCode = item.getCmpCode(); } else if (null != item.getProductId()) { Product product = productDao.findOne(item.getProductId()); cmpCode = product.getCmpCode(); } if (null != cmpCode) { String url = PS_PRODUCT_URL + "/productuser/getProductUsersByEnUUAndCmpCode"; JSONObject formData = new JSONObject(); formData.put("enUU", item.getInquiry().getEnUU()); formData.put("cmpCode", cmpCode); try { long start = System.currentTimeMillis(); HttpUtil.Response res = HttpUtil.sendGetRequest(url, formData); log.info("/productuser/getProductUsersByEnUUAndCmpCode,耗时:{}", (System.currentTimeMillis() - start)); if (res.getStatusCode() == 200) { List users = FlexJsonUtils.fromJsonArray(res.getResponseText(), ProductUsers.class); users = getProductReplaceByEnUUAndCmpCode(item.getInquiry().getRecorderUU(), cmpCode, users); if (!CollectionUtils.isEmpty(users)) { List models = new ArrayList(); User buyerUser = userDao.findOne(null != item.getInquiry().getRecorderUU() ? item.getInquiry().getRecorderUU() : 0L); Enterprise buyerEnterprise = enterpriseDao.findOne(item.getInquiry().getEnUU()); for (ProductUsers user : users) { String cmp = cmpCode.length() > 10 ? cmpCode.substring(0, 10).concat("...") : cmpCode; String content = "发布关于“型号:" + cmp + "”的公共询价信息,邀请您参与报价。"; MessageModel model = new MessageModel(); if (null != buyerEnterprise) { content = buyerEnterprise.getEnName() + content; model.setBuyerName(buyerEnterprise.getEnName()); } else if (null != buyerUser) { content = buyerUser.getUserName() + content; model.setBuyerName(buyerUser.getUserName()); } // 询价方信息 if (null != item.getUserUU() || null != item.getInquiry().getRecorderUU()) { model.setSenderUu(item.getUserUU() != null ? item.getUserUU() : item.getInquiry().getRecorderUU()); } else { model.setSenderUu(null != buyerEnterprise ? buyerEnterprise.getAdminUU() : 0L); } model.setSenderEnuu(item.getInquiry().getEnUU()); model.setCmpCode(cmpCode); model.setType(INQUIRY_TYPE); model.setType(INQUIRY_TYPE_SELLER_MALL); model.setProducerApp(sourceApp); model.setConsumerType(CUST_TYPE); model.setConsumerApp(CONSUMERAPP); model.setContent(content); model.setRemark(String.valueOf(item.getInquiry().getId())); model.setSourceId(item.getId()); // 供应商信息 Enterprise vendEnterprise = enterpriseDao.findOne(user.getEnuu()); if (vendEnterprise != null) { model.setVendName(vendEnterprise.getEnName()); } model.setReceiverEnuu(user.getEnuu()); model.setReceiverUu(user.getUseruu()); model.setSmsType("DONT_SEND"); model.setMailTemplate(MAIL_TEMP_ID); model.setSmTemplate(SMS_TEMP_ID); models.add(model); // log.info("公共询价产生消息", "根据物料型号【{}】查询接收人,关联询价单明细【{}】,UserUU:{},Enuu:{},报价的应用来源:{}", cmpCode, item.getId(), user.getUseruu(), user.getEnuu(), InquirySource.ERP.name()); } if (!CollectionUtils.isEmpty(models)) { sendMessage(models); sendWechatMessage(models); } } // 生成推荐信息 remindInquiry(item, users); } } catch (Exception e) { String reason = e.getMessage().length() > 10 ? e.getMessage().substring(0, 1000).concat("") : e.getMessage(); log.info("公共询价产生消息,根据物料型号【{}】查询接收人失败,id:{},原因:{}, Constant:{}, 报价的应用来源:{}", cmpCode, item.getId(), reason, Constant.UU, InquirySource.ERP.name()); e.printStackTrace(); } } } } /** * 微信消息发送 * @param models */ private void sendWechatMessage(final List models) { ThreadUtils.task(new Runnable() { @Override public void run() { try { long start = System.currentTimeMillis(); log.info("发送微信消息"); String res = HttpUtil.doPost(USOFTMALL_URL + "/wx/sendTemplateMessage", FlexJsonUtils.toJsonDeep(models)); log.info("微信消息请求发送日志, {}", res); log.info("微信消息请求发送,数量:{}, 耗时:{}", models.size(), (System.currentTimeMillis() - start)); } catch (Exception e) { e.printStackTrace(); } } }); } /** * 根据企业UU和物料原厂型号cmpCode获取替代物料信息 * * @param cmpCode 物料原厂型号 * @return */ public List getProductReplaceByEnUUAndCmpCode(final Long userUU, final String cmpCode, List productUsers) { List productReplacesList = productReplaceDao.findAll(new Specification() { @Override public Predicate toPredicate(Root root, CriteriaQuery query, CriteriaBuilder cb) { final PredicateFactory factory = new PredicateFactory<>(); factory.add(PredicateUtils.ne("userUU", userUU, false)); factory.add(PredicateUtils.and(PredicateUtils.isNotNull("ptrCmpcode"), PredicateUtils.eq("ptrCmpcode", cmpCode, false))); query.where(factory.toPredicate(root, query, cb)); return null; } }); if (!CollectionUtils.isEmpty(productReplacesList)) { for (ProductReplace productReplace : productReplacesList) { ProductUsers user = new ProductUsers(); user.setEnuu(productReplace.getEnuu()); user.setUseruu(productReplace.getUserUU()); productUsers.add(user); } } // 去掉同一企业下同一个人相同原厂型号的不同物料的记录,保证一个原厂型号只发一条 List returnList = new ArrayList<>(); Set enUUAndUserUUs = new HashSet<>(); for (ProductUsers user : productUsers) { String receiverInfo = user.getEnuu().toString() + user.getUseruu().toString(); if (!enUUAndUserUUs.contains(receiverInfo)) { returnList.add(user); enUUAndUserUUs.add(receiverInfo); } } return returnList; } /** * 通过查询的个人物料相关联的信息,自动生成推荐的报价的数据 * * @param item 报价明细 * @param users 用户信息 */ private void remindInquiry(final PurcInquiryItem item, final List users) { ThreadUtils.task(new Runnable() { @Override public void run() { try { Map productUsersMap = new HashMap<>(); Enterprise enterprise = enterpriseDao.findOne(item.getInquiry().getEnUU()); if (!CollectionUtils.isEmpty(users)) { List inquiryReminds = new ArrayList<>(); for (ProductUsers u : users) { List remindList = remindDao.findByVendUserUUAndVendUUAndItemId(u.getUseruu(), u.getEnuu(), item.getId()); if (remindList.size() == 0 && item.getInquiry().getEnUU() != null) { productUsersMap.put(u.getEnuu(), u); InquiryRemind remind = new InquiryRemind(); remind.setEnName(enterprise.getEnName()); remind.setEnUU(item.getInquiry().getEnUU()); remind.setUserName(item.getUserName()); remind.setUserTel(item.getUserTel()); remind.setCode(item.getInquiry().getCode()); remind.setBrand(item.getInbrand()); remind.setInbrand(item.getInbrand()); remind.setCmpCode(item.getCmpCode()); remind.setSpec(item.getSpec()); remind.setProdTitle(item.getProdTitle()); remind.setInid(item.getInquiry().getId()); if (item.getProduct() != null) { remind.setBrand(item.getProduct().getBrand()); remind.setCmpCode(item.getProduct().getCmpCode()); remind.setSpec(item.getProduct().getSpec()); remind.setProdTitle(item.getProduct().getTitle()); } remind.setItemId(item.getId()); remind.setNeedQty(item.getNeedquantity()); remind.setReDate(item.getInquiry().getDate()); remind.setEndDate(item.getInquiry().getEndDate()); remind.setVendUU(u.getEnuu()); remind.setVendUserUU(u.getUseruu()); remind.setDate(new Date(System.currentTimeMillis())); remind.setStatus(Status.INPUTTING.value()); inquiryReminds.add(remind); } } if (!CollectionUtils.isEmpty(inquiryReminds)) { remindDao.save(inquiryReminds); } } // 查询已关注类目中是否有当前类目 String kind = item.getProdTitle(); Set enuuSet = new HashSet<>(); if (!StringUtils.isEmpty(kind)) { enuuSet = kindConcernDao.findByNameCnAndNeEnuu(kind, item.getInquiry().getEnUU()); } String url = PS_PRODUCT_URL + "/product/businessOpportunity"; JSONObject formData = new JSONObject(); formData.put("enUU", item.getInquiry().getEnUU()); formData.put("pCmpCode", item.getCmpCode()); long start = System.currentTimeMillis(); HttpUtil.Response res = HttpUtil.sendGetRequest(url, formData); log.info("/product/businessOpportunity , 型号:{}, 耗时:{}", item.getCmpCode(), (System.currentTimeMillis() - start)); if (res.getStatusCode() == HttpStatus.OK.value()) { Map result = FlexJsonUtils.fromJson(res.getResponseText()); if (!StringUtils.isEmpty(result.get("enUUs"))) { List enuus = (List) result.get("enUUs"); enuuSet.addAll(enuus); } if (!CollectionUtils.isEmpty(enuuSet)) { List inquiryEnReminds = new ArrayList<>(); for (Long enuu : enuuSet) { InquiryEnRemind remind = new InquiryEnRemind(); remind.setEnName(enterprise.getEnName()); remind.setEnUU(item.getInquiry().getEnUU()); remind.setUserName(item.getUserName()); remind.setUserTel(item.getUserTel()); remind.setCode(item.getInquiry().getCode()); remind.setBrand(item.getInbrand()); remind.setInbrand(item.getInbrand()); remind.setCmpCode(item.getCmpCode()); remind.setSpec(item.getSpec()); remind.setProdTitle(item.getProdTitle()); remind.setInid(item.getInquiry().getId()); if (item.getProduct() != null) { remind.setBrand(item.getProduct().getBrand()); remind.setCmpCode(item.getProduct().getCmpCode()); remind.setSpec(item.getProduct().getSpec()); remind.setProdTitle(item.getProduct().getTitle()); } remind.setItemId(item.getId()); remind.setNeedQty(item.getNeedquantity()); remind.setReDate(item.getInquiry().getDate()); remind.setEndDate(item.getInquiry().getEndDate()); remind.setVendUU(enuu); if (productUsersMap.containsKey(enuu)) { remind.setRemindStatus(1); } else { remind.setRemindStatus(0); } remind.setDate(new Date(System.currentTimeMillis())); remind.setStatus(Status.INPUTTING.value()); inquiryEnReminds.add(remind); } if (!CollectionUtils.isEmpty(inquiryEnReminds)) { inquiryEnRemindDao.save(inquiryEnReminds); } } } } catch (Exception e) { e.printStackTrace(); } } }); } /** * 通过id查询询价信息 * * @param id 公共询价主表id * @return */ @Override public PurcInquiry findInquiryById(Long id) { PurcInquiry inquiry = purcInquiryDao.findOne(id); if (!CollectionUtils.isEmpty(inquiry.getInquiryItems())) { for (PurcInquiryItem item : inquiry.getInquiryItems()) { if (null == item.getProductId()) { Product product = new Product(); product.setTitle(item.getProdTitle()); product.setCmpCode(item.getCmpCode()); product.setBrand(item.getInbrand()); product.setSpec(item.getSpec()); item.setProduct(product); } } } return inquiry; } /** * 发送消息推送 * * @param models 封装的消息信息 */ private void sendMessage(final List models) { ThreadUtils.task(new Runnable() { @Override public void run() { try { long start = System.currentTimeMillis(); log.info("发送消息"); String res = HttpUtil.doPost(PS_MESSAGE_URL + "/messages", FlexJsonUtils.toJsonDeep(models)); log.info("消息请求发送"); log.info("/messages , 条数:{},耗时:{}", models.size(), (System.currentTimeMillis() - start)); } catch (Exception e) { e.printStackTrace(); } } }); } /** * 将ERP传入的inquiry信息转成公共询价服务中心需要的信息 * * @param inquiries 将ERP传入的inquiry信息 * @param enuu 询价企业UU号 * @param address 询价企业地址 * @return */ @Override public List covert(List inquiries, Long enuu, String address) throws NotFoundException { List purcInquiries = new ArrayList(); if (!CollectionUtils.isEmpty(inquiries)) { for (BatchInquiry inquiry : inquiries) { List old = purcInquiryDao.findByCodeAndEnUU(inquiry.getBi_code(), enuu); //先判断是否已经存在,不存在才进行存储 if (CollectionUtils.isEmpty(old)) { PurcInquiry purcInquiry = inquiry.covert(); purcInquiry.setEnUU(enuu); purcInquiry.setShip(address); Enterprise e = enterpriseDao.findOne(enuu); if (null != e) { purcInquiry.setEnName(e.getEnName()); } Set purcInquiryItems = new HashSet(); if (!CollectionUtils.isEmpty(inquiry.getInProducts())) { for (BatchInProduct batch : inquiry.getInProducts()) { PurcInquiryItem item = new PurcInquiryItem(); List products = productDao.findByEnUUAndCode(enuu, batch.getBip_prodcode()); if (!CollectionUtils.isEmpty(products)) { item.setProductId(products.get(0).getId()); item.setCmpCode(products.get(0).getCmpCode()); item.setInbrand(products.get(0).getBrand()); item.setProdTitle(products.get(0).getTitle()); item.setSpec(products.get(0).getSpec()); } else { item.setCmpCode(batch.getPr_orispeccode()); item.setInbrand(batch.getPr_brand()); item.setProdTitle(batch.getPr_detail()); item.setSpec(batch.getPr_spec()); } item.setProdCode(batch.getBip_prodcode()); item.setRemark(batch.getBip_remark()); item.setNumber(batch.getBip_detno()); item.setFromDate(new Date(System.currentTimeMillis())); item.setToDate(purcInquiry.getEndDate()); item.setStatus((short) Status.NOT_REPLY.value()); item.setIsOpen(Constant.YES); item.setSource("ERP"); item.setSourceid(batch.getBip_id()); item.setCurrency(batch.getBip_currency()); item.setUserName(batch.getEm_name()); item.setUserTel(batch.getBip_mobile()); item.setUserCode(batch.getBip_buyercode()); item.setOfferAmount(0); item.setEndDate(inquiry.getBi_enddate()); item.setNeedquantity(batch.getYcgqty()); if (null == item.getCmpCode() || item.getCmpCode().equals("无")) { item.setCmpCode(item.getSpec()); } if (null != inquiry.getBi_date()) { item.setDate(inquiry.getBi_date()); } else { item.setDate(new Date(System.currentTimeMillis())); } if (item.getCustCurrency() == null) { item.setCustCurrency("RMB"); } purcInquiryItems.add(item); } } purcInquiry.setInquiryItems(purcInquiryItems); purcInquiries.add(purcInquiry); } } } return purcInquiries; } /** * erp提交审核时,公共询价服务中心单据禁用报价功能 * * @param inquiries erp询价信息 * @param enuu 询价企业UU号 */ @Override public void updateStatus(List inquiries, Long enuu) { if (!CollectionUtils.isEmpty(inquiries)) { for (BatchInquiry inquiry : inquiries) { List purcInquiryList = purcInquiryDao.findByCodeAndEnUU(inquiry.getBi_code(), enuu); for (PurcInquiry purcInquiry : purcInquiryList) { purcInquiryItemDao.updateStatus(purcInquiry.getId()); } } } } /** * 查询供应商的报价信息 * * @return */ @Override public List findNotUploadReply(Long enuu) { List items = publicInquiryItemDao.findByEnUUAndBackStatus(enuu, (short) Status.NOT_UPLOAD.value()); if (!CollectionUtils.isEmpty(items)) { // 防止下载过程中进行操作,这里设置一个下载中的状态 Set ids = new HashSet<>(); for (PublicInquiryItem item : items) { ids.add(item.getId()); } if (ids.size() > 0) { publicInquiryItemDao.updateBackStatus(ids); } return convertPublicInquiryReply(items); } return new ArrayList<>(); } /** * 查找报价的单据,上传到卖家UAS * * @param enUU 企业UU * @return */ @Override public List findNotUploadToUas(Long enUU) { return publicInquiryItemDao.findByVendUUAndReplySendStatus(enUU, (short) Status.NOT_UPLOAD.value()); } /** * UAS获取商城账套下企业商机 * * @param vendUU 报价企业UU * @return 待下载的企业商机 * @author dongbw */ @Override public List findNotUploadEnRemind(Long vendUU) { return inquiryEnRemindDao.findNotUploadEnRemind(vendUU); } /** * UAS获取商城账套下企业商机之后 回调 修改状态 * * @param idArray 报价单明细id list * @param vendUU 报价企业UU */ @Override public void downEnRemindSuccess(String[] idArray, Long vendUU) { List items = new ArrayList<>(); for (String id : idArray) { InquiryEnRemind item = inquiryEnRemindDao.findOne(Long.parseLong(id)); if (item != null && vendUU.equals(item.getVendUU())) { item.setErpDownStatus((short) Status.DOWNLOADED.value()); items.add(item); } } if (!CollectionUtils.isEmpty(items)) { inquiryEnRemindDao.save(items); } } /** * 获取当前月和上个月询价单数量 * * @return 数量map */ @Override public ModelMap getCountOfLastAndThisMonth() { Calendar now = Calendar.getInstance(); Integer year = now.get(Calendar.YEAR); Integer month = now.get(Calendar.MONTH) + 1; ModelMap result = new ModelMap(); try { Long current = inquiryItemInfoDao.countByMonth(year, month); result.put("current", current); if (month == 1) { year = year - 1; month = 12; } else { month = month - 1; } Long last = inquiryItemInfoDao.countByMonth(year, month); result.put("last", last); result.put("success", "true"); } catch (Exception e) { result.put("message", e.getMessage()); result.put("success", false); e.printStackTrace(); } return result; } /** * 查询单条bom询价单的报价情况 * * @param inquiry 询价单 * @return 询价单 */ @Override public PurcInquiry getQuotedDetail(PurcInquiry inquiry) { List itemIds = new ArrayList<>(); for (PurcInquiryItem item : inquiry.getInquiryItems()) { itemIds.add(item.getId()); } Long[] itemIdArray = new Long[inquiry.getInquiryItems().size()]; Integer quotedAmount = publicInquiryItemDao.getQuotedAmountBySourceId(itemIds.toArray(itemIdArray)); Integer replaceQuotedAmount =publicInquiryItemDao.getReplaceQuotedAmountBySourceId(itemIds.toArray(itemIdArray)); inquiry.setQuotedAmount(quotedAmount); inquiry.setReplaceQuotedAmount(replaceQuotedAmount); return inquiry; } /** * 根据id设置询价单明细有效状态 * * @param id 询价单明细id purcInquiryItem * @param valid 1有效 0 无效 * @return */ @Override public ModelMap deleteItems(Long id, Integer valid) { ModelMap map = new ModelMap(); if (null == id || null == valid) { map.put("success", false); map.put("message", "传入参数为空"); return map; } PurcInquiryItem item = purcInquiryItemDao.findOne(id); if (null != item) { item.setValid(valid); try { purcInquiryItemDao.save(item); if (valid == 0) { List enReminds = inquiryEnRemindDao.findByItemId(id); List reminds = remindDao.findByItemId(id); if (!CollectionUtils.isEmpty(enReminds)) { inquiryEnRemindDao.delete(enReminds); } if (!CollectionUtils.isEmpty(reminds)) { remindDao.delete(reminds); } } map.put("success", true); } catch (Exception e) { map.put("success", false); map.put("message", e.getMessage()); } } else { map.put("success", false); map.put("message", "未找到对应询价单明细记录"); } return map; } /** * 将公共询价服务中心的公共询价转成ERP的对应的字段 * * @param notUploadReply 未下载的供应商报价信息 * @return * @author hejq * @date 2018-01-14 11:51 */ @Override public List convertPublicInquiryReply(List notUploadReply) { List details = new ArrayList(); if (!CollectionUtils.isEmpty(notUploadReply)) { for (PublicInquiryItem item : notUploadReply) { details.add(new InquiryDetail(item)); } } return details; } /** * 下载完成后更新公共询价服务中心询价单明细的下载状态 * * @param idArray 询价单明细id * @author hejq * @date 2018-01-14 12:12 */ @Override public void onReplyUploadSuccess(String[] idArray) { List items = new ArrayList<>(); for (String id : idArray) { PublicInquiryItem item = publicInquiryItemDao.findOne(Long.parseLong(id)); if (item != null) { item.setBackStatus((short) Status.DOWNLOADED.value()); item.setErpstatus(Constant.YES); items.add(item); } } if (!CollectionUtils.isEmpty(items)) { publicInquiryItemDao.save(items); } } /** * 下载完成后更新公共询价服务中心询价单明细的下载状态 * * @param idArray 询价单明细id * @author hejq * @date 2018-01-14 12:12 */ @Override public void onReplyDownLoadSuccess(String[] idArray) { List items = new ArrayList<>(); for (String id : idArray) { PublicInquiryItem item = publicInquiryItemDao.findOne(Long.parseLong(id)); if (item != null) { item.setReplySendStatus((short) Status.DOWNLOADED.value()); items.add(item); } } if (!CollectionUtils.isEmpty(items)) { publicInquiryItemDao.save(items); } } /** * ERP提交公共询价单之后,更新平台状态,让公共询价服务中心询价单不能进行报价操作 * * @param details 询价信息 * @author hejq * @date 2018-01-14 12:20 */ @Override public void updateInquiryStatus(List details, Long enuu) { if (!CollectionUtils.isEmpty(details)) { for (InquiryDetail detail : details) { // 更新为过期状态,不能进行报价处理 String sql = "update purc$puInquiryItems set id_overdue = 1 where id_id = " + "(select id_sourceid from public$inquiryItems where id_id = " + detail.getB2b_id_id() + ")"; jdbcTemplate.update(sql); // 更新已转报价的询价单明细状态 jdbcTemplate.update("update public$inquiryItems set id_checked = 1 where id_id = " + detail.getB2b_id_id()); } } } /** * ERP对报价信息的采纳状态上传到公共询价服务中心 * * @param decides 采纳信息 */ @Override public void onReplyDecide(List decides, Long enuu) { List publicInquiryItems = convertInquiryDecide(decides); if (!CollectionUtils.isEmpty(publicInquiryItems)) { for (PublicInquiryItem inquiryItem : publicInquiryItems) { publicInquiryItemDao.updateDecideStatusByID(inquiryItem.getAgreed(), inquiryItem.getDecideStatus(), inquiryItem.getId()); notifyDecide(inquiryItem, PRODUCERAPP); } } } /** * 针对供应商,客户对报价结果发送消息通知 * * @param item 询价明细 * @param sourceApp 应用来源 */ @Override public void notifyDecide(PublicInquiryItem item, String sourceApp) { final String SMS_TYPE = "IM"; //只推送消息 List models = new ArrayList(); User u = userDao.findOne(null != item.getInquiry().getRecorderUU() ? item.getInquiry().getRecorderUU() : 0L); Enterprise e = enterpriseDao.findOne(item.getInquiry().getEnUU()); Product product = new Product(); if (null != item.getProductId()) { product = productDao.findOne(item.getProductId()); } String cmpCode = product.getCmpCode() != null ? product.getCmpCode() : item.getCmpCode(); String content = item.getAgreed() == 1 ? "【已采纳】" : "【未采纳】"; content = content + "您关于“" + cmpCode + "”的报价"; if (null != e) { content = e.getEnName() + content; } else if (null != u) { content = u.getUserName() + content; } else if (null == e && null == u) { content = "您关于“" + cmpCode + "”的报价已被"; String result = item.getAgreed() == 1 ? "【已采纳】" : "【拒绝】"; content = content + result; } MessageModel model = new MessageModel(); model.setType(INQUIRY_DECIDE_TYPE); model.setProducerApp(sourceApp); model.setConsumerType(CUST_TYPE); model.setConsumerApp(CONSUMERAPP); model.setContent(content); model.setRemark(String.valueOf(item.getInquiry().getId())); model.setSourceId(item.getId()); model.setReceiverEnuu(item.getVendUU()); model.setReceiverUu(item.getVendUserUU()); model.setSenderEnuu(item.getInquiry().getEnUU()); if (null != item.getUserUU() || null != item.getInquiry().getRecorderUU()) { model.setSenderUu(item.getUserUU() != null ? item.getUserUU() : item.getInquiry().getRecorderUU()); } else { Enterprise enterprise = enterpriseDao.findOne(item.getInquiry().getEnUU()); model.setSenderUu(null != enterprise ? enterprise.getAdminUU() : 0L); } model.setSmsType(SMS_TYPE); models.add(model); if (!CollectionUtils.isEmpty(models)) { sendMessage(models); } } /** * 将ERP的报价采纳信息转为公共询价服务中心需要的信息 * * @param decides erp报价采纳信息 * @author hejq * @date 2018-01-14 12:25 */ @Override public List convertInquiryDecide(List decides) { List inquiryItems = new ArrayList(); if (!CollectionUtils.isEmpty(decides)) { for (InquiryDecide decide : decides) { PublicInquiryItem item = publicInquiryItemDao.findOne(decide.getB2b_id()); if (null != item) { item.setAgreed(decide.getId_agreed()); item.setDecideStatus((short) Status.NOT_UPLOAD.value()); inquiryItems.add(item); } } } return inquiryItems; } /** * 买家ERP作废询价单后,修改公共询价服务中心里面的状态 * * @param inquiries 询价信息 * @param enuu 企业UU * @author hejq * @date 2018-01-14 12:28 */ @Override public void onReplyInvalid(List inquiries, final Long enuu) { final List newInquiryItems = new ArrayList<>(); for (final Inquiry inquiry : inquiries) { ThreadUtils.task(new Runnable() { @Override public void run() { List purchaseInquiries = publicInquiryDao.findByEnUUAndCode(enuu, inquiry.getIn_code()); if (!CollectionUtils.isEmpty(purchaseInquiries)) { PublicInquiry publicInquiry = purchaseInquiries.get(0); for (PublicInquiryItem item : publicInquiry.getInquiryItems()) { item.setStatus((short) Status.DISABLED.value()); // 获取作废信息时,更新作废上传状态为 待上传 item.setInvalidStatus((short) Status.NOT_UPLOAD.value()); synchronized (newInquiryItems) { newInquiryItems.add(item); } } } } }); } } /** * 将公共询价列表转成需要报价的询价单,类型是公共询价 * * @param id 询价明细id * @param enuu 报价企业UU * @param useruu 报价人uu * @return * @author hejq * @date 2018-01-14 14:46 */ @Override public ModelMap transtoInquiry(Long id, Long enuu, Long useruu) { ModelMap map = new ModelMap(); PurcInquiryItem purcInquiryItem = purcInquiryItemDao.findOne(id); PurcInquiry purcInquiry = purcInquiryItem.getInquiry(); // 先判断客户询价单是否存在这张单据 PublicInquiry inquiry = publicInquiryDao.findBySourceIdAndSourceApp(purcInquiry.getId(), SOURCERAPP); if (null == inquiry) {// 新增 PublicInquiry saleInquiry = new PublicInquiry(); saleInquiry.setDate(new Date()); saleInquiry.setCode(purcInquiry.getCode()); saleInquiry.setEnUU(purcInquiry.getEnUU()); saleInquiry.setRecorder(purcInquiry.getRecorder()); saleInquiry.setRecorderUU(purcInquiry.getRecorderUU()); saleInquiry.setAuditor(purcInquiry.getAuditor()); saleInquiry.setSourceApp(SOURCERAPP); saleInquiry.setKind(INQUIRYKIND); saleInquiry.setSourceId(purcInquiry.getId()); saleInquiry.setPriceType(purcInquiry.getPriceType()); saleInquiry.setInvoice(purcInquiry.getInvoice()); saleInquiry.setShip(purcInquiry.getShip()); saleInquiry.setEndDate(purcInquiry.getEndDate()); if (!CollectionUtils.isEmpty(purcInquiry.getAttachs())) { Set attachs = new HashSet(); for (com.uas.ps.inquiry.model.Attach attach : purcInquiry.getAttachs()) { com.uas.ps.inquiry.model.Attach newAttach = new com.uas.ps.inquiry.model.Attach(); newAttach.setDate(new Date()); newAttach.setDescription(attach.getDescription()); newAttach.setName(attach.getName()); newAttach.setPath(attach.getPath()); newAttach.setRelatedKey(attach.getRelatedKey()); newAttach.setSize(attach.getSize()); newAttach.setRelatedKey(attach.getRelatedKey()); attachs.add(newAttach); } saleInquiry.setAttachs(attachs); } saleInquiry.setEnvironment(purcInquiry.getEnvironment()); saleInquiry.setRemark(purcInquiry.getRemark()); saleInquiry.setInquirytype(purcInquiry.getInquirytype()); Set items = new HashSet(); Short i = 0; if (null != purcInquiryItem) { PublicInquiryItem item = new PublicInquiryItem(); Product product = productDao.findOne(purcInquiryItem.getProductId()); item.setProductId(product.getId()); item.setInquiry(saleInquiry); item.setNumber(i); item.setCurrency(purcInquiryItem.getCurrency()); item.setFromDate(new Date()); item.setToDate(purcInquiryItem.getToDate()); item.setTaxrate(purcInquiryItem.getTaxrate()); item.setRemark(purcInquiryItem.getRemark()); item.setProductId(purcInquiryItem.getProductId()); item.setStatus((short) Status.NOT_REPLY.value()); item.setVendUU(enuu); item.setVendUserUU(useruu); item.setSource(purcInquiryItem.getSource()); item.setCustLap(Constant.NO); item.setSendStatus((short) Status.NOT_UPLOAD.value()); item.setSourceId(id); List replies = new ArrayList(); PublicInquiryReply reply = new PublicInquiryReply(); reply.setLapQty((double) 0); replies.add(reply); item.setReplies(replies); item.setNeedquantity(purcInquiryItem.getNeedquantity()); item.setKind(INQUIRYKIND); item.setProdCode(purcInquiryItem.getProdCode()); items.add(item); i++; } List purcitems = publicInquiryItemDao.save(items); if (purcitems.get(0).getId() != null) { map.put("success", "转客户询价单成功"); map.put("id", purcitems.get(0).getInquiry().getId()); } else { map.put("success", "转客户询价单失败"); } } else {// 插入 PublicInquiryItem purcItem = publicInquiryItemDao.findByVendUUAndSourceId(enuu, id); if (purcItem != null) { map.put("info", "询价单已存在"); map.put("inid", purcItem.getId()); } else { if (!CollectionUtils.isEmpty(purcInquiry.getInquiryItems())) { if (null != purcInquiryItem) { // 涉及到级联存储及ERP转入单据的操作,用主表id存储存在问题,这里先用sql语句直接插入 PublicInquiryItem item = new PublicInquiryItem(); Product product = productDao.findOne(purcInquiryItem.getProductId()); item.setProductId(product.getId()); item.setNumber((short) (purcInquiry.getInquiryItems().size() + 1)); item.setCurrency(purcInquiryItem.getCurrency()); item.setFromDate(new Date()); item.setToDate(purcInquiryItem.getToDate()); item.setTaxrate(purcInquiryItem.getTaxrate()); item.setRemark(purcInquiryItem.getRemark()); item.setProductId(purcInquiryItem.getProductId()); item.setVendUU(enuu); item.setVendUserUU(useruu); item.setSource(purcInquiryItem.getSource()); item.setStatus((short) Status.NOT_REPLY.value()); item.setCustLap(Constant.NO); item.setSendStatus((short) Status.NOT_UPLOAD.value()); item.setSourceId(id); item.setProdCode(purcInquiryItem.getProdCode()); item.setKind(INQUIRYKIND); item.setNeedquantity(purcInquiryItem.getNeedquantity()); List replies = new ArrayList(); List purcReplies = new ArrayList(); PublicInquiryReply reply = new PublicInquiryReply(); reply.setLapQty((double) 0); purcReplies.add(reply); purcReplies = publicInquiryReplyDao.save(purcReplies); replies.addAll(purcReplies); item.setReplies(replies); Long idid = jdbcTemplate.queryForObject("select public$inquiryitems_seq.nextval from dual", Long.class); try { jdbcTemplate.update( "insert into public$inquiryitems(id_id,id_number,id_currency,id_fromdate,id_todate,id_taxrate,id_prid,id_venduu," + "id_venduseruu,id_sourceapp,id_status,id_custlap,id_sendstatus,id_sourceid,id_inid,id_kind) values (?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?)", idid, item.getNumber(), item.getCurrency(), item.getFromDate(), item.getToDate(), item.getTaxrate(), item.getProductId(), item.getVendUU(), item.getVendUserUU(), item.getSource(), item.getStatus(), item.getCustLap(), item.getSendStatus(), item.getSourceId(), inquiry.getId(), inquiry.getKind()); } catch (DataAccessException e) { map.put("info", "转客户询价单失败"); } item = publicInquiryItemDao.findOne(idid); //回复清单更新 if (replies.size() > 0) { for (PublicInquiryReply reply1 : replies) { jdbcTemplate.update("update public$inquiryreply set ir_idid = " + idid + "where ir_id = " + reply1.getId()); } } if (item != null) { map.put("success", "转客户询价单成功"); map.put("id", item.getInquiry().getId()); } else { map.put("info", "转客户询价单失败"); } } } } } return map; } /** * 通过分页参数和过滤条件查询报价信息 * * @param info 分页参数 * @param filter 过滤条件 * @return * @author hejq * @date 2018-01-17 10:30 */ @Override public IPage findByPageInfo(final PageInfo info, final SearchFilter filter) { Sort sort = new Sort(Sort.Direction.DESC, "date"); if (info.getOffset() == 0) { info.setOffset(info.getPageSize() * (info.getPageNumber() - 1)); } info.setSort(sort); if (null != filter) { if (filter.getFromDate() != null) { info.expression(PredicateUtils.gte("offerTime", new Date(filter.getFromDate()), false)); } if (filter.getEndDate() != null) { info.expression(PredicateUtils.lte("offerTime", new Date(filter.getEndDate()), false)); } // 此处的 fromDelivery 作为发布时间过滤 if (filter.getFromDelivery() != null) { info.expression(PredicateUtils.gte("date", new Date(filter.getFromDelivery()), false)); } if (filter.getEndDelivery() != null) { info.expression(PredicateUtils.lte("date", new Date(filter.getEndDelivery()), false)); } if (filter.getUserUU() != null) { info.expression(PredicateUtils.eq("vendUserUU", filter.getUserUU(), false)); } if (StringUtils.hasText(filter.getKeyword())) { SimpleExpression cmpCode = new SimpleExpression("cmpCode", filter.getKeyword(), CriterionExpression.Operator.LIKE, true); SimpleExpression brand = new SimpleExpression("inbrand", filter.getKeyword(), CriterionExpression.Operator.LIKE, true); SimpleExpression code = new SimpleExpression("inquiry.code", filter.getKeyword(), CriterionExpression.Operator.LIKE, true); SimpleExpression title = new SimpleExpression("prodTitle", filter.getKeyword(), CriterionExpression.Operator.LIKE, true); SimpleExpression spec = new SimpleExpression("spec", filter.getKeyword(), CriterionExpression.Operator.LIKE, true); SimpleExpression inquiryEnName = new SimpleExpression("inquiry.enName", filter.getKeyword(), CriterionExpression.Operator.LIKE, true); SimpleExpression[] simpleExpressions = new SimpleExpression[]{cmpCode, brand, code, title, inquiryEnName, spec}; LogicalExpression logical = new LogicalExpression(simpleExpressions, CriterionExpression.Operator.OR); info.expression(logical); } } Page itemInfoPage = itemInfoDao.findAll(new Specification() { @Override public Predicate toPredicate(Root root, CriteriaQuery query, CriteriaBuilder builder) { query.where(info.getPredicates(root, query, builder)); return null; } }, info); if (!CollectionUtils.isEmpty(itemInfoPage.getContent())) { for (PublicInquiryItemInfo itemInfo : itemInfoPage) { String sql = "select at_path,at_name from attachs a left join public$inquiryitems$attach p on a.at_id = p.at_id " + "left join public$inquiryitems i on p.id_id = i.id_id where i.id_id = " + itemInfo.getId(); List> maps = jdbcTemplate.queryForList(sql); if (!CollectionUtils.isEmpty(maps)) { Map map = maps.get(0); itemInfo.setAttachUrl(map.get("at_path").toString()); itemInfo.setAttachName(map.get("at_name").toString()); } if (null == itemInfo.getProductId()) { Product product = new Product(); product.setTitle(itemInfo.getProdTitle()); product.setCmpCode(itemInfo.getCmpCode()); product.setBrand(itemInfo.getInbrand()); product.setSpec(itemInfo.getSpec()); product.setCode(itemInfo.getProdCode()); if (null == product.getCode()) { product.setCode(itemInfo.getCmpCode()); } itemInfo.setProduct(product); } } } return IPageUtils.covert(itemInfoPage); } @Override public Page findListByPageInfo(final PageInfo info, SearchFilter filter) { Sort sort = new Sort(Sort.Direction.DESC, "date"); if (info.getOffset() == 0) { info.setOffset(info.getPageSize() * (info.getPageNumber() - 1)); } info.setSort(sort); return itemInfoDao.findAll(new Specification() { @Override public Predicate toPredicate(Root root, CriteriaQuery query, CriteriaBuilder builder) { query.where(info.getPredicates(root, query, builder)); return null; } }, info); } /** * 查询公共询价列表信息 * * @param info 分页参数 * @param filter 过滤条件 * @return */ @Override public IPage findTodoByPageInfo(final PageInfo info, final SearchFilter filter) { Sort sort = new Sort(Sort.Direction.DESC, "id", "date"); if (info.getOffset() == 0) { info.setOffset(info.getPageSize() * (info.getPageNumber() - 1)); } info.setSort(sort); Long enUU = null; if (null != filter) { if (filter.getFromDate() != null) { info.expression(PredicateUtils.gte("date", new Date(filter.getFromDate()), false)); } if (filter.getEndDate() != null) { info.expression(PredicateUtils.lte("date", new Date(filter.getEndDate()), false)); } if (!CollectionUtils.isEmpty(filter.getDistribute())) { info.expression(PredicateUtils.in("inquiry.enUU", filter.getDistribute(), false)); } // 将当前uu设置 enUU = filter.getEnUU(); if (!StringUtils.isEmpty(filter.getIsAll()) && filter.getIsAll() == 0 && !StringUtils.isEmpty(filter.getEnUU())) { info.expression(PredicateUtils.ne("inquiry.enUU", filter.getEnUU(), false)); } if (!StringUtils.isEmpty(filter.getKeyword())) { SimpleExpression cmpCode = new SimpleExpression("cmpCode", filter.getKeyword(), CriterionExpression.Operator.LIKE, true); SimpleExpression brand = new SimpleExpression("inbrand", filter.getKeyword(), CriterionExpression.Operator.LIKE, true); SimpleExpression title = new SimpleExpression("prodTitle", filter.getKeyword(), CriterionExpression.Operator.LIKE, true); SimpleExpression[] simpleExpressions = new SimpleExpression[]{cmpCode, brand, title}; LogicalExpression logical = new LogicalExpression(simpleExpressions, CriterionExpression.Operator.OR); info.expression(logical); } } Page orders = inquiryItemInfoDao.findAll(new Specification() { @Override public Predicate toPredicate(Root root, CriteriaQuery query, CriteriaBuilder builder) { query.where(info.getPredicates(root, query, builder)); return null; } }, info); // 将当前企业报价信息设置进去 if (null != filter && !StringUtils.isEmpty(enUU)) { for (PurcInquiryItemInfo itemInfo : orders) { PublicInquiryItem item = publicInquiryItemDao.findByVendUUAndSourceId(filter.getEnUU(), itemInfo.getId()); List inquiryEnRemind = inquiryEnRemindDao.findByItemIdAndVendUU(itemInfo.getId(), filter.getEnUU()); if (!CollectionUtils.isEmpty(inquiryEnRemind) && inquiryEnRemind.size() > 0) { itemInfo.setAllotStatus((short) 1); } else { itemInfo.setAllotStatus((short) 0); } itemInfo.setQuotation(item); } } return covert(orders, enUU); } /** * 将数据库查询的数据进行封装处理 * * @param orders 查询的数据信息 * @return */ private IPage covert(Page orders, Long enuu) { if (!CollectionUtils.isEmpty(orders.getContent()) && null != enuu) { for (PurcInquiryItemInfo itemInfo : orders.getContent()) { PublicInquiryItem item = publicInquiryItemDao.findByVendUUAndSourceId(enuu, itemInfo.getId()); itemInfo.setQuoted(Constant.NO); if (null != item) { itemInfo.setAgreed(item.getAgreed()); itemInfo.setQuteId(item.getId()); itemInfo.setQuoted(Constant.YES); } if (null == itemInfo.getProductId()) { Product product = new Product(); product.setTitle(itemInfo.getProdTitle()); product.setCmpCode(itemInfo.getCmpCode()); product.setBrand(itemInfo.getInbrand()); product.setSpec(itemInfo.getSpec()); product.setCode(itemInfo.getProdCode()); if (null == product.getCode()) { product.setCode(itemInfo.getCmpCode()); } itemInfo.setProduct(product); } else { Product product = productDao.findOne(itemInfo.getProductId()); itemInfo.setProduct(product); } } } return IPageUtils.covert(orders); } /** * 根据传入条件封装查询条件 * * @param pageInfo 分页参数 * @param state 过滤条件 * @return */ @Override public PageInfo covert(PageInfo pageInfo, String state, Short overdue) { Sort sort = new Sort(Sort.Direction.DESC, "date"); if (pageInfo.getOffset() == 0) { pageInfo.setOffset(pageInfo.getPageSize() * (pageInfo.getPageNumber() - 1)); } pageInfo.setSort(sort); if (state.equals(OrderStatus.todo.name())) { pageInfo.filter("status", Status.NOT_REPLY.value()); pageInfo.filter("overdue", Constant.NO); } else if (state.equals(OrderStatus.done.name())) { if (StringUtils.isEmpty(overdue) || !overdue.equals(Constant.YES)) { pageInfo.filter("overdue", Constant.NO); } pageInfo.filter("status", Status.REPLIED.value()); pageInfo.filter("decideStatus", Status.UNAUDIT.value()); } else if (state.equals(OrderStatus.end.name())) { pageInfo.filter("overdue", Constant.YES); } else if (state.equals(OrderStatus.invalid.name())) { SimpleExpression overdue1 = new SimpleExpression("overdue", Constant.NO, CriterionExpression.Operator.NE, true); SimpleExpression invalid = new SimpleExpression("invalid", Constant.NO, CriterionExpression.Operator.NE, true); SimpleExpression[] simpleExpressions = new SimpleExpression[]{invalid, overdue1}; LogicalExpression logical = new LogicalExpression(simpleExpressions, CriterionExpression.Operator.OR); pageInfo.expression(logical); } else if (state.equals(OrderStatus.agreed.name())) { pageInfo.filter("agreed", Constant.YES); pageInfo.filter("status", Status.REPLIED.value()); } else if (state.equals(OrderStatus.refused.name())) { pageInfo.filter("agreed", Constant.NO); pageInfo.filter("status", Status.REPLIED.value()); } return pageInfo; } /** * 获取公共询价列表信息 * * @param enuu 当前企业UU * @param size 大小 * @return */ @Override public List getMessageList(Long enuu, Integer size) { if (size == 0 || size == null) { size = 10; } 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"; if (enuu != null) { sql = sql + " and i.in_enuu <> " + enuu; } sql = sql + " and COALESCE(p.id_overdue, 0) <> 1 order by p.id_id desc) i limit " + size; List items = jdbcTemplate.query(sql, new BeanPropertyRowMapper(PurcInquiryItem.class)); List messages = new ArrayList(); if (!CollectionUtils.isEmpty(items)) { for (PurcInquiryItem item : items) { InquiryMessage message = new InquiryMessage(); if (null != item.getEnuu()) { Enterprise enterprise = enterpriseDao.findOne(item.getEnuu()); message.setEnName(enterprise.getEnName()); } item = purcInquiryItemDao.findOne(item.getId()); message.setPordName(item.getProdTitle()); message.setInid(item.getId()); PublicInquiryItem publicInquiryItem = publicInquiryItemDao.findByVendUUAndSourceId(enuu, item.getId()); if (null != publicInquiryItem) { message.setQuteId(publicInquiryItem.getId()); } message.setLastest(isToday(item.getDate())); messages.add(message); } } return messages; } /** * 判断该条单据是否当天单据 * * @param date 询价时间 * @return */ private boolean isToday(Date date) { SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd"); String inDate = sdf.format(date); String nowDate = sdf.format(new Date()); return inDate.equals(nowDate); } /** * 商城-采购排行榜 * * @return */ @Override public List> findCodeRankingList() { String name = "采购排行榜"; InquiryData inquiryData = inquiryDataDao.findByName(name); List> result = FlexJsonUtils.fromJsonArray(inquiryData.getData(), HashMap.class); return result; } /** * 通过明细id查询询价详情 * * @param itemId 明细id * @return */ @Override public PurcInquiryItemInfo findItemByItemId(Long itemId, Long enuu) { PurcInquiryItemInfo itemInfo = inquiryItemInfoDao.findOne(itemId); PublicInquiryItem item = publicInquiryItemDao.findByVendUUAndSourceId(enuu, itemInfo.getId()); itemInfo.setQuoted(Constant.NO); if (null != item) { itemInfo.setAgreed(item.getAgreed()); itemInfo.setQuteId(item.getId()); itemInfo.setQuoted(Constant.YES); } if (null == itemInfo.getProductId()) { Product product = new Product(); product.setTitle(itemInfo.getProdTitle()); product.setCmpCode(itemInfo.getCmpCode()); product.setBrand(itemInfo.getInbrand()); product.setSpec(itemInfo.getSpec()); itemInfo.setProduct(product); } return itemInfo; } /** * 通过id查询单个已转报价的信息 * * @param id * @return */ @Override public PublicInquiryItemInfo findOneInfo(Long id, Long enuu, Long useruu) { PublicInquiryItemInfo itemInfo = itemInfoDao.findOne(id); if (!itemInfo.getVendUU().equals(enuu)) { throw new IllegalOperatorException("访问受限"); } return itemInfo; } /** * 将推荐信息转成UU互联需要的数据 * * @param content 推荐信息 * @return */ @Override public List covertRemindToInquiry(List content) { List infoList = new ArrayList<>(); if (!CollectionUtils.isEmpty(content)) { for (InquiryRemind remind : content) { PurcInquiryItemInfo itemInfo = inquiryItemInfoDao.findOne(remind.getItemId()); if (null != itemInfo) { Product product = new Product(); product.setTitle(itemInfo.getProdTitle()); product.setCmpCode(itemInfo.getCmpCode()); product.setCode(itemInfo.getCmpCode()); product.setBrand(itemInfo.getInbrand()); product.setSpec(itemInfo.getSpec()); itemInfo.setProduct(product); if (remind.getStatus().equals(Status.NOTALLOW.value())) { itemInfo.setAgreed(Constant.NO); } else if (remind.getStatus().equals(Status.ALLOW.value())) { itemInfo.setAgreed(Constant.YES); } itemInfo.setQuoted(Constant.NO); if (remind.getStatus().equals(Status.SUBMITTED.value())) { itemInfo.setQuoted(Constant.YES); itemInfo.setQuteId(remind.getNewId()); } if (null != itemInfo.getRemainingTime() && itemInfo.getRemainingTime() <= 0) { itemInfo.setOverdue(Constant.YES); } infoList.add(itemInfo); } } } return infoList; } /** * 针对供应商,客户将拒绝理由发送信息给供应商 * * @param item 询价明细 * @param sourceApp 应用来源 * @throws Exception */ @Override public Page refuseMessage(PublicInquiryItem item, String sourceApp) { if (null != item.getVendUU() && null != item.getVendUserUU()) { final String SMS_TYPE = "SM"; //发送信息 List models = new ArrayList(); String Buyer = item.getInquiry().getEnName() == null ? item.getInquiry().getRecorder() : item.getInquiry().getEnName(); String cmpCode = item.getCmpCode(); String cmp = cmpCode.length() > 10 ? cmpCode.substring(0, 10).concat("...") : cmpCode; String content = "因" + item.getRefusereason() + "," + Buyer + "【未采纳】您关于“型号:" + cmp + "”的报价。期待与您的下次合作!"; MessageModel model = new MessageModel(); model.setType(INQUIRY_DECIDE_TYPE_MALL); model.setProducerApp(sourceApp); model.setConsumerType(CUST_TYPE); model.setConsumerApp(CONSUMERAPP); model.setContent(content); model.setRemark(String.valueOf(item.getInquiry().getId())); model.setSourceId(item.getId()); model.setReceiverEnuu(item.getVendUU()); model.setReceiverUu(item.getVendUserUU()); model.setSenderEnuu(item.getInquiry().getEnUU()); if (null != item.getUserUU() || null != item.getInquiry().getRecorderUU()) { model.setSenderUu(item.getUserUU() != null ? item.getUserUU() : item.getInquiry().getRecorderUU()); } else { Enterprise enterprise = enterpriseDao.findOne(item.getInquiry().getEnUU()); model.setSenderUu(null != enterprise ? enterprise.getAdminUU() : 0L); } model.setSmsType(SMS_TYPE); models.add(model); if (!CollectionUtils.isEmpty(models)) { sendMessage(models); } } return null; } /** * 针对供应商,把客户采纳报价的消息发送给供应商 * * @param item 询价明细 * @param sourceApp 应用来源 * @throws Exception */ @Override public Page adoptMessage(PublicInquiryItem item, String sourceApp) { if (null != item.getVendUU() && null != item.getVendUserUU()) { final String SMS_TYPE = "SM"; //发送信息 List models = new ArrayList(); String cmpCode = item.getCmpCode(); String cmp = cmpCode.length() > 10 ? cmpCode.substring(0, 10).concat("...") : cmpCode; String content = item.getInquiry().getEnName() + "【已采纳】您关于'型号:'" + cmp + "的报价,期待与您的合作!"; MessageModel model = new MessageModel(); model.setType(INQUIRY_DECIDE_TYPE_MALL); model.setProducerApp(sourceApp); model.setConsumerType(CUST_TYPE); model.setConsumerApp(CONSUMERAPP); model.setContent(content); model.setRemark(String.valueOf(item.getInquiry().getId())); model.setSourceId(item.getId()); model.setReceiverEnuu(item.getVendUU()); model.setReceiverUu(item.getVendUserUU()); model.setSenderEnuu(item.getInquiry().getEnUU()); if (null != item.getUserUU() || null != item.getInquiry().getRecorderUU()) { model.setSenderUu(item.getUserUU() != null ? item.getUserUU() : item.getInquiry().getRecorderUU()); } else { Enterprise enterprise = enterpriseDao.findOne(item.getInquiry().getEnUU()); model.setSenderUu(null != enterprise ? enterprise.getAdminUU() : 0L); } model.setSmsType(SMS_TYPE); models.add(model); if (!CollectionUtils.isEmpty(models)) { sendMessage(models); } } return null; } @Override public Page ReceiveMessage(PublicInquiryItem item, String sourceApp) { if (null != item.getVendUU() && null != item.getVendUserUU() && !StringUtils.isEmpty(item.getCmpCode())) { final String SMS_TYPE = "SM"; //发送信息 List models = new ArrayList(); String cmpCode = item.getCmpCode(); String cmp = cmpCode.length() > 10 ? cmpCode.substring(0, 10).concat("...") : cmpCode; String content = "您收到了" + item.getVendName() + "关于“型号:" + cmp + "“的报价,马上去看一看吧!"; MessageModel model = new MessageModel(); model.setType(INQUIRY_TYPE_MALL); model.setProducerApp(sourceApp); model.setConsumerType(CUST_TYPE); model.setConsumerApp(CONSUMERAPP); model.setContent(content); model.setRemark(String.valueOf(item.getInquiry().getId())); model.setSourceId(item.getId()); model.setReceiverEnuu(item.getInquiry().getEnUU()); model.setReceiverUu(item.getInquiry().getRecorderUU()); model.setSenderEnuu(item.getVendUU()); if (null != item.getUserUU() || null != item.getInquiry().getRecorderUU()) { model.setSenderUu(item.getUserUU() != null ? item.getUserUU() : item.getInquiry().getRecorderUU()); } else { Enterprise enterprise = enterpriseDao.findOne(item.getInquiry().getEnUU()); model.setSenderUu(null != enterprise ? enterprise.getAdminUU() : 0L); } model.setSmsType(SMS_TYPE); models.add(model); if (!CollectionUtils.isEmpty(models)) { sendMessage(models); } } return null; } @Override public ModelMap getPurcInquiryItemCount() { ModelMap result = null; try { result = new ModelMap(); Long count = inquiryItemInfoDao.count(); result.put("count", count); } catch (Exception e) { e.printStackTrace(); } return result; } /** * 查询某年某月的询价明细总数 * * @param month * @return */ @Override public ModelMap countByMonth(Integer year, Integer month) { ModelMap result = null; try { result = new ModelMap(); Long count = inquiryItemInfoDao.countByMonth(year, month); result.put("count", count); result.put("success", "true"); } catch (Exception e) { result.put("message", e.getMessage()); result.put("success", false); e.printStackTrace(); } return result; } /** * 根据年份和月份字符串获取条数 * * @param year 年份 * @param months 月份字符串 6,7,8 * @return map */ @Override public List countByMonths(Integer year, String months) { List results = new ArrayList<>(); try { String[] monthArray = months.split(","); for (String month : monthArray) { ModelMap result = new ModelMap(); Long count = inquiryItemInfoDao.countByMonth(year, Integer.valueOf(month)); result.put("count", count); result.put("success", "true"); result.put("month", Integer.valueOf(month)); results.add(result); } } catch (Exception e) { ModelMap result = new ModelMap(); result.put("message", e.getMessage()); result.put("success", false); results.add(result); e.printStackTrace(); } return results; } /** * 根据enUU获取 * * @param enUU 报价企业UU * @return */ @Override public List findDecideNotUploadReply(Long enUU) { String sql = "select id_id id, id_sourceid sourceId, id_agreed agreed, id_refusereason refusereason, id_status status from public$inquiryitems " + "where id_venduu = " + enUU + " and id_decidedownstatus = " + Status.NOT_UPLOAD.value() + " limit 200"; return jdbcTemplate.query(sql, new BeanPropertyRowMapper<>(PublicInquiryItem.class)); } /** * 已被采纳或拒绝的报价单明细 上传买方UAS之后,回调 * * @param ids 报价单明细ids * @param enUU 报价企业UU * @return */ @Override public ModelMap downloadDecideBack(List ids, Long enUU) { List items = publicInquiryItemDao.findAll(ids); List saveList = new ArrayList<>(); ModelMap map = new ModelMap(); for (PublicInquiryItem item : items) { if (enUU.equals(item.getVendUU())) { item.setDecideDownStatus((short) Status.DOWNLOADED.value()); saveList.add(item); } } publicInquiryItemDao.save(saveList); map.put("success", true); return map; } @Override public ModelMap getInquiryCountData(String startDate, String endDate) { ModelMap result = new ModelMap(); if (StringUtils.isEmpty(startDate) && StringUtils.isEmpty(endDate)) { throw new IllegalOperatorException("缺失参数"); } // 查询询价数 Integer inquiryAmount = purcInquiryItemDao.countInquiryAmount(startDate, endDate); result.put("inquiryAmount", inquiryAmount); // 查询询价用户数 Integer inquiryUserAmount = purcInquiryItemDao.countInquiryUserAmount(startDate, endDate); result.put("inquiryUserAmount", inquiryUserAmount); // 查询报价用户 Integer offerAmount = publicInquiryItemDao.countOfferAmount(startDate, endDate); result.put("offerAmount", offerAmount); // 查询报价数 Integer offerEnAmount = publicInquiryItemDao.countOfferEnAmount(startDate, endDate); result.put("offerEnAmount", offerEnAmount); result.put("success", true); return result; } }