Browse Source

Merge remote-tracking branch 'origin/master'

hangb 7 years ago
parent
commit
183e5c91b8
20 changed files with 393 additions and 138 deletions
  1. 12 0
      pom.xml
  2. 1 4
      src/main/java/com/uas/platform/b2b/controller/InvitationRecordController.java
  3. 12 0
      src/main/java/com/uas/platform/b2b/controller/SaleInquiryController.java
  4. 8 0
      src/main/java/com/uas/platform/b2b/dao/ProductDao.java
  5. 3 14
      src/main/java/com/uas/platform/b2b/erp/controller/PurchaseNotifyController.java
  6. 7 4
      src/main/java/com/uas/platform/b2b/erp/service/PurchaseNotifyService.java
  7. 7 10
      src/main/java/com/uas/platform/b2b/erp/service/impl/PurchaseNotifyServiceImpl.java
  8. 2 2
      src/main/java/com/uas/platform/b2b/model/PurchaseNotice.java
  9. 8 0
      src/main/java/com/uas/platform/b2b/service/PurchaseInquiryService.java
  10. 20 33
      src/main/java/com/uas/platform/b2b/service/impl/BaseInfoServiceImpl.java
  11. 39 7
      src/main/java/com/uas/platform/b2b/service/impl/PurchaseInquiryServiceImpl.java
  12. 1 1
      src/main/java/com/uas/platform/b2b/service/impl/PurchaseNoticeServiceImpl.java
  13. 29 19
      src/main/java/com/uas/platform/b2b/temporary/model/UserSpaceDetail.java
  14. 2 2
      src/main/java/com/uas/platform/b2b/v2/controller/UserController.java
  15. 3 0
      src/main/resources/META-INF/persistence.xml
  16. 50 27
      src/main/webapp/resources/js/index/app.js
  17. 9 1
      src/main/webapp/resources/js/index/services/Purc.js
  18. 11 14
      src/main/webapp/resources/tpl/index/search/search_result.html
  19. 39 0
      src/test/java/com/uas/platform/b2b/BaseJunitTest.java
  20. 130 0
      src/test/java/com/uas/platform/b2b/purc/PurchaseNotify.java

+ 12 - 0
pom.xml

@@ -47,6 +47,12 @@
         </profile>
     </profiles>
     <dependencies>
+        <dependency>
+            <groupId>javax.servlet</groupId>
+            <artifactId>javax.servlet-api</artifactId>
+            <version>3.0.1</version>
+            <scope>test</scope>
+        </dependency>
         <dependency>
             <groupId>javax.servlet</groupId>
             <artifactId>servlet-api</artifactId>
@@ -94,6 +100,12 @@
             <groupId>org.springframework.data</groupId>
             <artifactId>spring-data-jpa</artifactId>
         </dependency>
+        <dependency>
+            <groupId>org.springframework</groupId>
+            <artifactId>spring-test</artifactId>
+            <version>4.1.6.RELEASE</version>
+            <scope>test</scope>
+        </dependency>
         <!-- -->
         <dependency>
             <groupId>commons-fileupload</groupId>

+ 1 - 4
src/main/java/com/uas/platform/b2b/controller/InvitationRecordController.java

@@ -25,9 +25,7 @@ import org.springframework.web.bind.annotation.RequestMapping;
 import org.springframework.web.bind.annotation.RequestMethod;
 import org.springframework.web.bind.annotation.RestController;
 
-import java.text.SimpleDateFormat;
 import java.util.ArrayList;
-import java.util.Date;
 import java.util.List;
 
 @RestController
@@ -155,9 +153,8 @@ public class InvitationRecordController {
 	@RequestMapping(value = "/inviteUrl", method = RequestMethod.GET)
 	private ModelMap setenterprise() {
         String url = ContextUtils.getBean(SysConf.class).getRegisterUrl();
-        SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
         url = url + "?inviteUserUU=" + SystemSession.getUser().getUserUU() + "&inviteSpaceUU="
-                + SystemSession.getUser().getEnterprise().getUu() + "&invitationTime=" + sdf.format(new Date()) + "&source=B2B";
+                + SystemSession.getUser().getEnterprise().getUu() + "&invitationTime=" + System.currentTimeMillis() + "&source=B2B";
         logger.log("邀请注册", "获取邀请链接", url);
 		return new ModelMap("url", url);
 	}

+ 12 - 0
src/main/java/com/uas/platform/b2b/controller/SaleInquiryController.java

@@ -888,4 +888,16 @@ public class SaleInquiryController {
         modelMap.putAll(map);
 		return modelMap;
 	}
+
+    /**
+     * 通过物料id查询该条物料最新的采纳价格
+     *
+     * @param prid 物料id
+     * @return
+     */
+	@RequestMapping(value = "/recentPrice/{prId}", method = RequestMethod.GET)
+    @ResponseBody
+    public ModelMap getRecentPrice(@PathVariable("prId") Long prid) {
+        return purchaseInquiryService.getRecentPrice(prid);
+    }
 }

+ 8 - 0
src/main/java/com/uas/platform/b2b/dao/ProductDao.java

@@ -232,4 +232,12 @@ public interface ProductDao extends JpaSpecificationExecutor<Product>, JpaReposi
 	 * @return
 	 */
 	Long countByEnUU(Long enUU);
+
+	/**
+	 * 通过
+	 * @param enUU
+	 * @param cmpCode
+	 * @return
+	 */
+	List<Product> findByEnUUAndCmpCode(Long enUU, String cmpCode);
 }

+ 3 - 14
src/main/java/com/uas/platform/b2b/erp/controller/PurchaseNotifyController.java

@@ -55,23 +55,12 @@ public class PurchaseNotifyController {
 	 */
 	@RequestMapping(method = RequestMethod.POST)
 	@ResponseBody
-	public List<PurchaseNotify> saveNotifies(@RequestParam("data") String data) throws UnsupportedEncodingException {
-		List<PurchaseNotify> modifiedNotifies = new ArrayList<PurchaseNotify>();
+	public void saveNotifies(@RequestParam("data") String data) throws UnsupportedEncodingException {
 		String jsonStr = URLDecoder.decode(data, "UTF-8");
 		List<PurchaseNotify> notifies = FlexJsonUtils.fromJsonArray(jsonStr, PurchaseNotify.class);
-		List<List<PurchaseNotice>> lists = purchaseNotifyService.convertPurchaseNotify(notifies);
-		purchaseNoticeService.save(lists.get(0));
-		List<PurchaseNotice> oppNotices = lists.get(1);
-		if (!CollectionUtils.isEmpty(oppNotices)) {
-			for (PurchaseNotice notice : oppNotices) {
-				PurchaseNotify notify = new PurchaseNotify();
-				notify.setPn_id(notice.getSourceId());
-				notify.setPn_qty(notice.getQty());
-				modifiedNotifies.add(notify);
-			}
-		}
+		List<PurchaseNotice> lists = purchaseNotifyService.convertPurchaseNotify(notifies);
+		purchaseNoticeService.save(lists);
 		logger.log("送货提醒", "上传送货提醒", notifies.size());
-		return modifiedNotifies;
 	}
 
 	/**

+ 7 - 4
src/main/java/com/uas/platform/b2b/erp/service/PurchaseNotifyService.java

@@ -1,13 +1,16 @@
 package com.uas.platform.b2b.erp.service;
 
-import java.util.List;
-
-import com.uas.platform.b2b.erp.model.*;
+import com.uas.platform.b2b.erp.model.AcceptNotify;
+import com.uas.platform.b2b.erp.model.AcceptNotifyConfirm;
+import com.uas.platform.b2b.erp.model.AcceptNotifyVerify;
+import com.uas.platform.b2b.erp.model.PurchaseNotify;
 import com.uas.platform.b2b.model.PurchaseNotice;
 import com.uas.platform.b2b.model.SaleSend;
 import com.uas.platform.b2b.model.SaleSendItem;
 import com.uas.platform.b2b.model.SaleSendItemVerify;
 
+import java.util.List;
+
 public interface PurchaseNotifyService {
 
 	/**
@@ -16,7 +19,7 @@ public interface PurchaseNotifyService {
 	 * @param notifies
 	 * @return
 	 */
-	List<List<PurchaseNotice>> convertPurchaseNotify(List<PurchaseNotify> notifies);
+	List<PurchaseNotice> convertPurchaseNotify(List<PurchaseNotify> notifies);
 
 	/**
 	 * 将平台的发货单,转为买家ERP的收料通知单

+ 7 - 10
src/main/java/com/uas/platform/b2b/erp/service/impl/PurchaseNotifyServiceImpl.java

@@ -36,20 +36,17 @@ public class PurchaseNotifyServiceImpl implements PurchaseNotifyService {
 	private SaleSendItemVerifyDao saleSendItemVerifyDao;
 
 	@Override
-	public List<List<PurchaseNotice>> convertPurchaseNotify(List<PurchaseNotify> notifies) {
-		List<List<PurchaseNotice>> allNotices = new ArrayList<List<PurchaseNotice>>();
+	public List<PurchaseNotice> convertPurchaseNotify(List<PurchaseNotify> notifies) {
 		List<PurchaseNotice> notices = new ArrayList<PurchaseNotice>();
 		for (PurchaseNotify notify : notifies) {
 			PurchaseNotice notice = notify.convert();
 			List<PurchaseNotice> existNotices = purchaseNoticeDao.findByEnUUAndSourceId(notice.getEnUU(),
 					notice.getSourceId());
 			if (CollectionUtils.isEmpty(existNotices)) {// sourceId不存在新增保存
-				List<PurchaseOrderItem> orderItems = purchaseOrderItemDao.findByEnUUAndOrderCodeAndNumber(
-						notice.getEnUU(), notice.getOrderItem().getOrder().getCode(),
-						notice.getOrderItem().getNumber());
-				if (!CollectionUtils.isEmpty(orderItems)) {
-				    notice.setOrderItem(orderItems.get(0));
-					notice.setOrderItemId(orderItems.get(0).getId());
+				List<Long> idList = purchaseOrderItemDao.findIdByEnUUAndOrderCodeAndNumber(notice.getEnUU(),
+                        notice.getOrderItem().getOrder().getCode(), notice.getOrderItem().getNumber());
+				if (!CollectionUtils.isEmpty(idList)) {
+					notice.setOrderItemId(idList.get(0));
 					notices.add(notice);
 				}
 			} else {// 对现有的单据,修改
@@ -76,6 +73,7 @@ public class PurchaseNotifyServiceImpl implements PurchaseNotifyService {
 						existNotice.setQty(notice.getQty());// 需求数量
 						existNotice.setDelivery(notice.getDelivery());// 交期
 						notices.add(existNotice);
+
 					}
 				} else {
 					String existDeliveryStr = "空";
@@ -94,8 +92,7 @@ public class PurchaseNotifyServiceImpl implements PurchaseNotifyService {
 				}
 			}
 		}
-		allNotices.add(notices);
-		return allNotices;
+		return notices;
 	}
 
 

+ 2 - 2
src/main/java/com/uas/platform/b2b/model/PurchaseNotice.java

@@ -83,8 +83,8 @@ public class PurchaseNotice implements Serializable {
 	/**
 	 * 客户采购单明细
 	 */
-	@OneToOne(cascade = { CascadeType.REFRESH })
-	@JoinColumn(name = "pn_pdid", insertable = false, updatable = false, nullable = false)
+	@OneToOne(cascade = { CascadeType.ALL }, fetch = FetchType.EAGER)
+	@JoinColumn(name = "pn_pdid", insertable = false, updatable = false)
 	private PurchaseOrderItem orderItem;
 
 	@Column(name = "pn_pdid")

+ 8 - 0
src/main/java/com/uas/platform/b2b/service/PurchaseInquiryService.java

@@ -304,4 +304,12 @@ public interface PurchaseInquiryService {
     void coverInquiryItemProdToUser(Long enUU) throws Exception;
 
     void saveList(List<PurchaseInquiryItemTemp> purchaseInquiryItemTemps);
+
+	/**
+	 * 根据供应商物料id获取最新采纳的价格信息
+	 *
+	 * @param prid 供应商物料id
+	 * @return
+	 */
+	ModelMap getRecentPrice(Long prid);
 }

+ 20 - 33
src/main/java/com/uas/platform/b2b/service/impl/BaseInfoServiceImpl.java

@@ -503,46 +503,33 @@ public class BaseInfoServiceImpl implements BaseInfoService {
 
 	@Override
 	public SPage<UserSpaceDetail> getUserSpaceDetails(com.uas.search.b2b.model.PageParams  params, String keyword) throws Exception {
-
-//		SPage<UserSpaceView> details = searchService.searchUserSpaceDetailCheckIds(keyword,
-//				pageParams);
 		Page<UserSpaceView> details = AccountUtils.getUserSpacesByKeyword(keyword, params.getPage(), params.getSize());
-				SPage<UserSpaceDetail> userSpaceDetails = new SPage<UserSpaceDetail>();
+		SPage<UserSpaceDetail> userSpaceDetails = new SPage<UserSpaceDetail>();
 		List<UserSpaceDetail> spaceDetails = new ArrayList<UserSpaceDetail>();
-
 		if (!CollectionUtils.isEmpty(details.getContent())) {
+			Long enUU = SystemSession.getUser().getEnterprise().getUu();
 			for (UserSpaceView detail : details.getContent()) {
-				UserSpaceDetail spacetDetail = new UserSpaceDetail();
-				if (null != detail.getBusinessCode() && !"None".equals(detail.getBusinessCode())) {
-					List<Enterprise> enterprises = enterpriseDao.findByEnBussinessCodeAndEnName(detail.getBusinessCode(), detail.getSpaceName());
-					// 根据营业执照和企业名找到唯一企业时,才设置
-					if (enterprises.size() == 1) {
-						spacetDetail.setUu(enterprises.get(0).getUu());
-					}
+				UserSpaceDetail spaceDetail = new UserSpaceDetail();
+				BeanUtils.copyProperties(detail, spaceDetail);
+				spaceDetail.setUu(detail.getSpaceUU());
+				spaceDetail.setAddress(detail.getRegAddress());
+				spaceDetail.setName(detail.getSpaceName());
+                spaceDetail.setCurrent(Constant.NO);
+				if (spaceDetail.getUu().equals(enUU)) {
+					spaceDetail.setCurrent(Constant.YES);
 				}
-				BeanUtils.copyProperties(detail, spacetDetail);
-				RequestStatus request = AccountUtils.getStatusByCustUidAndVendUid(spacetDetail.getBusinessCode(),
-						SystemSession.getUser().getEnterprise().getEnBussinessCode());
-				if (request != null) {
-					spacetDetail.setRequestStatus(request.getStatusCode());
-					spacetDetail.setMethod(request.getMethod());
-				}
-				if (spacetDetail.getBusinessCode() != null) {
-					if (spacetDetail.getBusinessCode()
-						.equals(SystemSession.getUser().getEnterprise().getEnBussinessCode())) {
-					spacetDetail.setCurrent(Constant.YES);
-					}
+				if (null != detail.getAdmin()) {
+					spaceDetail.setAdminEmail(detail.getAdmin().getEmail());
+					spaceDetail.setAdminName(detail.getAdmin().getVipName());
+					spaceDetail.setAdminTel(detail.getAdmin().getMobile());
 				}
-                spacetDetail.setAddress(detail.getRegAddress());
-				spacetDetail.setName(detail.getSpaceName());
-				spacetDetail.setBusinessCode(detail.getBusinessCode());
-				spacetDetail.setBusinessCodeImage(detail.getBusinessCodeImage());
-                spaceDetails.add(spacetDetail);
-                if (null != detail.getAdmin()) {
-					spacetDetail.setAdminEmail(detail.getAdmin().getEmail());
-					spacetDetail.setAdminName(detail.getAdmin().getVipName());
-					spacetDetail.setAdminTel(detail.getAdmin().getMobile());
+				if (!spaceDetail.getCurrent().equals(Constant.YES)) {
+					List<Vendor> vendorList = vendorDao.findByMyEnUUAndVendUU(enUU, spaceDetail.getUu());
+					spaceDetail.setIsVendor(CollectionUtils.isEmpty(vendorList) ? Constant.NO : Constant.YES);
+					List<Vendor> customerList = vendorDao.findByMyEnUUAndVendUU(spaceDetail.getUu(), enUU);
+					spaceDetail.setIsCustomer(CollectionUtils.isEmpty(customerList) ? Constant.NO : Constant.YES);
 				}
+                spaceDetails.add(spaceDetail);
 			}
 			userSpaceDetails.setContent(spaceDetails);
 			userSpaceDetails.setTotalElement(details.getTotalElements());

+ 39 - 7
src/main/java/com/uas/platform/b2b/service/impl/PurchaseInquiryServiceImpl.java

@@ -1,5 +1,6 @@
 package com.uas.platform.b2b.service.impl;
 
+import com.google.common.collect.Lists;
 import com.uas.message.mail.service.MailService;
 import com.uas.platform.b2b.core.util.*;
 import com.uas.platform.b2b.dao.*;
@@ -18,6 +19,7 @@ import com.uas.platform.b2b.search.SearchService;
 import com.uas.platform.b2b.service.AttachService;
 import com.uas.platform.b2b.service.PurchaseInquiryService;
 import com.uas.platform.b2b.support.MessageConf;
+import com.uas.platform.b2b.support.SPageUtils;
 import com.uas.platform.b2b.support.SystemSession;
 import com.uas.platform.b2b.support.XingePusher;
 import com.uas.platform.b2b.temporary.model.InquiryMessage;
@@ -172,6 +174,42 @@ public class PurchaseInquiryServiceImpl implements PurchaseInquiryService {
 		}
     }
 
+	/**
+	 * 根据供应商物料id获取最新采纳的价格信息
+	 *
+	 * @param prid 供应商物料id
+	 * @return
+	 */
+	@Override
+	public ModelMap getRecentPrice(Long prid) {
+		// 先找到对应的当前企业的物料信息
+		Product originProduct = productDao.findOne(prid);
+		if (null != originProduct && null != originProduct.getCode()) {
+		    Long enUU = SystemSession.getUser().getEnterprise().getUu();
+			List<Product> productList = productDao.findByEnUUAndCode(enUU, originProduct.getCode());
+			if (!CollectionUtils.isEmpty(productList)) {
+                PageInfo pageInfo = new PageInfo(1, 1);
+                pageInfo.filter("inquiry.enUU", enUU);
+                pageInfo.filter("productId", productList.get(0).getId());
+                pageInfo.filter("agreed", Constant.YES);
+                pageInfo.setSort(new org.springframework.data.domain.Sort(org.springframework.data.domain.Sort.Direction.DESC, "id"));
+                SPage<PurchaseInquiryItem> itemSPage = findByPageInfo(pageInfo, null, null);
+                if (!CollectionUtils.isEmpty(itemSPage.getContent())) {
+                	ModelMap map = new ModelMap();
+					PurchaseInquiryItem item = itemSPage.getContent().get(0);
+                    Set<PurchaseInquiryReply> replySet = item.getReplies();
+                    List<PurchaseInquiryReply> replyList = Lists.newArrayList(replySet);
+                    PurchaseInquiryReply reply = replyList.get(0);
+                    map.put("taxRate", item.getTaxrate());
+                    map.put("qty", item.getMinOrderQty());
+                    map.put("price", reply.getPrice());
+                    return map;
+                }
+            }
+		}
+		return null;
+	}
+
 	/**
 	 * 保存至用户单据表
 	 *
@@ -587,7 +625,6 @@ public class PurchaseInquiryServiceImpl implements PurchaseInquiryService {
     @Override
 	public SPage<PurchaseInquiryItem> findByPageInfo(final PageInfo pageInfo, final String keyword,
 			final SearchFilter filter) {
-		SPage<PurchaseInquiryItem> items = new SPage<PurchaseInquiryItem>();
 		Page<PurchaseInquiryItem> inquiryitems = purchaseInquiryItemDao
 				.findAll(new Specification<PurchaseInquiryItem>() {
 			public Predicate toPredicate(Root<PurchaseInquiryItem> root, CriteriaQuery<?> query, CriteriaBuilder builder) {
@@ -613,12 +650,7 @@ public class PurchaseInquiryServiceImpl implements PurchaseInquiryService {
 				return query.where(pageInfo.getPredicates(root, query, builder)).getRestriction();
 			}
 		}, pageInfo);
-		items.setContent(inquiryitems.getContent());
-		items.setPage(inquiryitems.getNumber());
-		items.setSize(inquiryitems.getSize());
-		items.setTotalElement(inquiryitems.getTotalElements());
-		items.setTotalPage(inquiryitems.getTotalPages());
-		return items;
+		return SPageUtils.covertSPage(inquiryitems);
 	}
 
 	@Override

+ 1 - 1
src/main/java/com/uas/platform/b2b/service/impl/PurchaseNoticeServiceImpl.java

@@ -574,7 +574,7 @@ public class PurchaseNoticeServiceImpl implements PurchaseNoticeService {
 			if (item.getNoticeId() != null) {
 				purchaseNoticeDao.updateBySend(item.getNoticeId());
                 PurchaseNotice notice = purchaseNoticeDao.findOne(item.getNoticeId());
-                if (notice.getEndQty() < notice.getQty() && notice.getStatus().equals(Status.REPLIED.value())) {
+                if (notice.getEndQty() < notice.getQty() && notice.getStatus() == Status.REPLIED.value()) {
                     purchaseNoticeDao.updateStatus(item.getNoticeId(), Status.NOT_REPLY.value());
                 }
 				ids.add(item.getNoticeId());

+ 29 - 19
src/main/java/com/uas/platform/b2b/temporary/model/UserSpaceDetail.java

@@ -2,9 +2,6 @@ package com.uas.platform.b2b.temporary.model;
 
 import java.io.Serializable;
 
-import org.hibernate.validator.constraints.Length;
-import org.hibernate.validator.constraints.NotEmpty;
-
 /**
  * 详细企业资料
  * 
@@ -26,10 +23,8 @@ public class UserSpaceDetail implements Serializable {
 
 	private String name;
 
-	@NotEmpty(message = "{us.shortName.null}")
 	private String shortName;
 
-	@Length(max = 50, message = "{us.businessCode.length.illegal}")
 	private String businessCode;
 
 	private String businessCodeImage;
@@ -53,30 +48,19 @@ public class UserSpaceDetail implements Serializable {
 	private String contactEmail;
 	private String profession;
 	private String tags;
-
 	private Long uu;
-
-	@NotEmpty(message = "{us.admin.name.null}")
 	private String adminName;
-
 	private String adminTel;
-
-	@NotEmpty(message = "{us.admin.email.null}")
 	private String adminEmail;
-
 	private Integer status;
-
 	private Integer approveStatus;
-
 	private String applyApps;
-
 	private String errMsg;
-
 	private String logoImage;
-
 	private Integer requestStatus;
-
 	private Integer method;
+	private Short isVendor;
+	private Short isCustomer;
 
 	/**
 	 * 是否是当前企业
@@ -446,7 +430,7 @@ public class UserSpaceDetail implements Serializable {
 	 * 1: 主动发出 <br>
 	 * 0: 对方发出
 	 * 
-	 * @param method
+	 * @param
 	 */
 	public Integer getMethod() {
 		return method;
@@ -511,4 +495,30 @@ public class UserSpaceDetail implements Serializable {
 	public void setUu(Long uu) {
 		this.uu = uu;
 	}
+
+    /**
+     * 是否是供应商
+     *
+     * @return
+     */
+    public Short getIsVendor() {
+        return isVendor;
+    }
+
+    public void setIsVendor(Short isVendor) {
+        this.isVendor = isVendor;
+    }
+
+    /**
+     * 是否是客户
+     *
+     * @return
+     */
+    public Short getIsCustomer() {
+        return isCustomer;
+    }
+
+    public void setIsCustomer(Short isCustomer) {
+        this.isCustomer = isCustomer;
+    }
 }

+ 2 - 2
src/main/java/com/uas/platform/b2b/v2/controller/UserController.java

@@ -3,14 +3,14 @@ package com.uas.platform.b2b.v2.controller;
 import com.uas.platform.b2b.model.User;
 import com.uas.sso.entity.UserView;
 import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.stereotype.Controller;
 import org.springframework.web.bind.annotation.RequestMapping;
 import org.springframework.web.bind.annotation.RequestMethod;
 import org.springframework.web.bind.annotation.ResponseBody;
 
 import com.uas.platform.b2b.v2.service.UserService;
+import org.springframework.web.bind.annotation.RestController;
 
-@Controller("v2.UserController")
+@RestController("v2.UserController")
 @RequestMapping(value = "/public/user")
 public class UserController {
 

+ 3 - 0
src/main/resources/META-INF/persistence.xml

@@ -28,6 +28,9 @@
 			<!-- <property name="hibernate.transaction.jta.platform"
 				value="org.hibernate.service.jta.platform.internal.JBossAppServerJtaPlatform" /> -->
 			<property name="jboss.as.jpa.managed" value="false" />
+			<property name="eclipselink.jdbc.cache-statements" value="true" />
+			<property name="eclipselink.jdbc.batch-writing" value="JDBC" />
+			<property name="eclipselink.jdbc.batch-writing.size" value="10000" />
 		</properties>
 	</persistence-unit>
 </persistence>

+ 50 - 27
src/main/webapp/resources/js/index/app.js

@@ -14394,7 +14394,8 @@ define(['toaster', 'charts', 'ngTable', 'common/services', 'common/directives',
     /**
      * 新增采购单
      */
-    app.controller('PurcNewOrderCtrl', ['$scope', '$modal', 'toaster', '$filter', 'addtoCart', '$rootScope', 'VendorInfo', 'ngTableParams', 'BaseService', 'Product', 'newPurcOrder', 'cartOperation', 'ShipAddress', 'Vendor', '$http', '$window', 'token', function ($scope, $modal, toaster, $filter, addtoCart, $rootScope, VendorInfo, ngTableParams, BaseService, Product, newPurcOrder, cartOperation, ShipAddress, Vendor, $http, $window, token) {
+    app.controller('PurcNewOrderCtrl', ['$scope', '$modal', 'toaster', '$filter', 'addtoCart', '$rootScope', 'VendorInfo', 'ngTableParams', 'BaseService', 'Product', 'newPurcOrder', 'cartOperation', 'ShipAddress', 'Vendor', '$http', '$window', 'token', 'recentPrice',
+        function ($scope, $modal, toaster, $filter, addtoCart, $rootScope, VendorInfo, ngTableParams, BaseService, Product, newPurcOrder, cartOperation, ShipAddress, Vendor, $http, $window, token, recentPrice) {
         BaseService.scrollBackToTop();
         // 每次进入时先清除掉rootScope下的venduu
         $rootScope.venduu = null;
@@ -14608,19 +14609,29 @@ define(['toaster', 'charts', 'ngTable', 'common/services', 'common/directives',
 
         // 选择
         $scope.check = function (data) {
-            $scope.order.orderItems.push({
-                code: data.code,
-                title: data.title,
-                spec: data.spec,
-                unit: data.unit,
-                qty: null,
-                price: null,
-                remark: null,
-                delivery: null,
-                prid: data.id,
-                taxrate: $scope.order.rate,
-                prodsource: 'seller'
-            });
+            var price = null;
+            var qty = null;
+            var taxRate = null;
+            if (data.id) {
+                recentPrice.agreed({prId: data.id}, {}, function(response) {
+                    price = response.price;
+                    qty = response.qty;
+                    taxRate = response.taxRate;
+                    $scope.order.orderItems.push({
+                        code: data.code,
+                        title: data.title,
+                        spec: data.spec,
+                        unit: data.unit,
+                        qty: qty,
+                        price: price,
+                        remark: null,
+                        delivery: null,
+                        prid: data.id,
+                        taxrate: taxRate,
+                        prodsource: 'seller',
+                    });
+                });
+            }
         };
 
         // 导入商品信息
@@ -16136,7 +16147,8 @@ define(['toaster', 'charts', 'ngTable', 'common/services', 'common/directives',
     /**
      * 购物车详情
      */
-    app.controller('CartDetailController', ['$scope', 'cartOperation', '$stateParams', 'toaster', '$timeout', 'BaseService', 'ngTableParams', '$filter', 'Product', 'Vendor', 'ShipAddress', '$modal', 'newPurcOrder', 'addtoCart', '$http', 'token', function ($scope, cartOperation, $stateParams, toaster, $timeout, BaseService, ngTableParams, $filter, Product, Vendor, ShipAddress, $modal, newPurcOrder, addtoCart, $http, token) {
+    app.controller('CartDetailController', ['$scope', 'cartOperation', '$stateParams', 'toaster', '$timeout', 'BaseService', 'ngTableParams', '$filter', 'Product', 'Vendor', 'ShipAddress', '$modal', 'newPurcOrder', 'addtoCart', '$http', 'token', 'recentPrice',
+        function ($scope, cartOperation, $stateParams, toaster, $timeout, BaseService, ngTableParams, $filter, Product, Vendor, ShipAddress, $modal, newPurcOrder, addtoCart, $http, token, recentPrice) {
         BaseService.scrollBackToTop();
         $scope.loading = true;
         var loadData = function () {
@@ -16254,18 +16266,29 @@ define(['toaster', 'charts', 'ngTable', 'common/services', 'common/directives',
 
         // 选择
         $scope.check = function (data) {
-            $scope.order.orderItems.push({
-                code: data.code,
-                title: data.title,
-                spec: data.spec,
-                unit: data.unit,
-                qty: null,
-                price: null,
-                remark: null,
-                delivery: null,
-                prid: data.id,
-                rate: $scope.order.rate
-            });
+            var price = null;
+            var qty = null;
+            var taxRate = null;
+            if (data.id) {
+                recentPrice.agreed({prId: data.id}, {}, function(response) {
+                    price = response.price;
+                    qty = response.qty;
+                    taxRate = response.taxRate;
+                    $scope.order.orderItems.push({
+                        code: data.code,
+                        title: data.title,
+                        spec: data.spec,
+                        unit: data.unit,
+                        qty: qty,
+                        price: price,
+                        remark: null,
+                        delivery: null,
+                        prid: data.id,
+                        taxrate: taxRate,
+                        prodsource: 'seller',
+                    });
+                });
+            }
         };
 
         // 导入商品信息

+ 9 - 1
src/main/webapp/resources/js/index/services/Purc.js

@@ -1719,5 +1719,13 @@ define([ 'ngResource'], function() {
                 }
 			}
 		});
-	}]);
+	}]).factory('recentPrice', ['$resource', function($resource) {
+        return $resource('sale/inquiry', {}, {
+            // 获取最新的已采纳的价信息
+            agreed: {
+                url: 'sale/inquiry/recentPrice/:prId',
+                method: 'GET'
+            }
+        });
+    }]);
 });

+ 11 - 14
src/main/webapp/resources/tpl/index/search/search_result.html

@@ -273,17 +273,16 @@
 			<tr class="enterprise-hd" ng-dblclick="enterprise.$collapsed=!enterprise.$collapsed">
 				<td width="" class="" colspan=3>
 					<span  ng-bind-html="enterprise.name| getkey:tip"></span>
-					<img src="static/img/logo/youruanrenzheng.png" id="logo" ng-if="enterprise.status == 313">
+					<img src="static/img/logo/youruanrenzheng.png" id="logo" ng-if="enterprise.uu != null">
 				</td>
 				<td width="200" class="text-center">
 				</td>
-				<td width="220" class="text-center text-muted" ng-if="enterprise.status == 313">
-					<span ng-if="enterprise.requestStatus==null||enterprise.requestStatus==310">当前企业还不是您的合作伙伴</span>
-					<span ng-if="enterprise.requestStatus==311 && enterprise.method==0">已收到申请</span>
-					<span ng-if="enterprise.requestStatus==311 && enterprise.method==1">已发出申请</span>
-					<span ng-if="enterprise.requestStatus==313">合作伙伴</span>
+				<td width="220" class="text-center text-muted" ng-if="enterprise.uu != null">
+					<span ng-if="enterprise.isVendor == 1 && enterprise.isCustomer == 0">供应商</span>
+					<span ng-if="enterprise.isCustomer == 1 && enterprise.isVendor == 0">客户</span>
+					<span ng-if="enterprise.isCustomer == 1 && enterprise.isVendor == 1">供应商/客户</span>
 				</td>
-				<td width="220" class="text-center text-muted" ng-if="enterprise.status != 313">
+				<td width="220" class="text-center text-muted" ng-if="enterprise.uu == null">
 					<span>当前企业不是优软云用户</span>
 				</td>
 			</tr>
@@ -305,14 +304,12 @@
 				<td class="text-center ">
 
 				</td>
-				<td class="pull-right" ng-if="enterprise.status == 313">
-					<a class="btn btn-primary" ng-click="addPartner(enterprise.name,enterprise.businessCode)" ng-if="enterprise.requestStatus==null||enterprise.requestStatus==310">立即添加</a>
-					<a class="btn btn-info" ng-if="enterprise.requestStatus==311 && enterprise.method==0" ng-click="view(enterprise.name)">立即处理</a>
-					<a class="btn btn-info" ng-if="enterprise.requestStatus==311 && enterprise.method==1" ng-click="view(enterprise.name)">立即查看</a>
-					<a  class="btn btn-info" ng-if="enterprise.status == 313" href="#/purc/purcinquiry/{{enterprise.businessCode}}" class="btn01">立即询价</a><br/>
-					<a class="btn btn-info" ng-if="enterprise.requestStatus==313" ng-click="PurcByEn(enterprise.businessCode)">立即购买</a>
+				<td class="pull-right" ng-if="enterprise.uu != null">
+					<a class="btn btn-primary" ng-if="enterprise.isVendor == 0 && enterprise.isVendor == 0" ng-click="addPartner(enterprise.name,enterprise.businessCode)">立即添加</a>
+					<a class="btn btn-info" ng-if="enterprise.isVendor == 1" href="#/purc/purcinquiry/{{enterprise.businessCode}}" class="btn01">立即询价</a><br/>
+					<a class="btn btn-info" ng-if="enterprise.isVendor == 1" ng-click="PurcByEn(enterprise.businessCode)">立即购买</a>
 				</td>
-				<td class="pull-right" ng-if="enterprise.status != 313">
+				<td class="pull-right" ng-if="enterprise.uu == null">
 					<a class="btn btn-primary" ng-click="invite(enterprise.name)">立即邀请</a>
 				</td>
 			</tr>

+ 39 - 0
src/test/java/com/uas/platform/b2b/BaseJunitTest.java

@@ -0,0 +1,39 @@
+package com.uas.platform.b2b;
+
+import org.junit.Before;
+import org.junit.runner.RunWith;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.test.context.ContextConfiguration;
+import org.springframework.test.context.junit4.SpringJUnit4ClassRunner;
+import org.springframework.test.context.transaction.TransactionConfiguration;
+import org.springframework.test.context.web.WebAppConfiguration;
+import org.springframework.test.web.servlet.MockMvc;
+import org.springframework.test.web.servlet.setup.MockMvcBuilders;
+import org.springframework.transaction.annotation.Transactional;
+import org.springframework.web.context.WebApplicationContext;
+
+/**
+ * Spring MVC 测试基类,所有测试类继承自这个类就可以直接写单元测试
+ * @author stg
+ * @date 2017年11月8日16:48:18
+ */
+@RunWith(SpringJUnit4ClassRunner.class)
+@ContextConfiguration("classpath:spring/*.xml")
+@WebAppConfiguration("")
+@Transactional
+@TransactionConfiguration(defaultRollback = true)
+public class BaseJunitTest {
+
+    @Autowired
+    protected WebApplicationContext wac;
+
+    protected MockMvc mockMvc;
+
+    /**
+     * 前置防范,配置MVCMock
+     */
+    @Before
+    public void setup() {
+        this.mockMvc = MockMvcBuilders.webAppContextSetup(this.wac).build();
+    }
+}

+ 130 - 0
src/test/java/com/uas/platform/b2b/purc/PurchaseNotify.java

@@ -0,0 +1,130 @@
+package com.uas.platform.b2b.purc;
+
+import com.uas.platform.b2b.BaseJunitTest;
+import com.uas.platform.b2b.dao.PurchaseNoticeDao;
+import com.uas.platform.b2b.dao.PurchaseOrderItemDao;
+import com.uas.platform.b2b.model.PurchaseNotice;
+import com.uas.platform.b2b.model.PurchaseOrderItem;
+import org.junit.Test;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.test.context.transaction.TransactionConfiguration;
+import org.springframework.transaction.annotation.Transactional;
+
+import javax.persistence.EntityManager;
+import javax.persistence.EntityManagerFactory;
+import javax.persistence.EntityTransaction;
+import javax.persistence.PersistenceContext;
+import java.util.ArrayList;
+import java.util.Date;
+import java.util.Iterator;
+import java.util.List;
+
+public class PurchaseNotify extends BaseJunitTest {
+
+    @Autowired
+    private PurchaseOrderItemDao purchaseOrderItemDao;
+
+    @Autowired
+    private PurchaseNoticeDao purchaseNoticeDao;
+
+    @Autowired
+    private EntityManagerFactory entityManagerFactory;
+
+    @PersistenceContext
+    protected EntityManager em;
+
+    @Transactional
+    public void batchInsert(List list) {
+        for(int i = 0; i < list.size(); i++) {
+            em.persist(list.get(i));
+            if(i % 30== 0) {
+                em.flush();
+                em.clear();
+            }
+        }
+    }
+
+    @Test
+    public void testFindTime() {
+        Long orderItemId = 37053424L;
+//        String orderCode = "B2BYBMP180100104";
+//        Long enuu = 10041166L;
+//        Short number = 1;
+
+        String orderCode = "130000443-73";
+        Long enuu = 10006098L;
+        Short number = 2;
+        long time1 = System.currentTimeMillis();
+        List<Long> orderItemIds = purchaseOrderItemDao.findIdByEnUUAndOrderCodeAndNumber(enuu, orderCode, number);
+        long time2 = System.currentTimeMillis();
+        List<PurchaseOrderItem> orderItems = purchaseOrderItemDao.findByEnUUAndOrderCodeAndNumber(enuu, orderCode, number);
+        long time3 = System.currentTimeMillis();
+        System.out.println("time1: " + (time2 - time1) + " , time2: " + (time3 - time2));
+    }
+
+    @Test
+    public void testSaveTime() {
+        String orderCode = "130000443-73";
+        Long enuu = 10006098L;
+        Short number = 2;
+        List<PurchaseNotice> purchaseNotices = new ArrayList<>();
+        for (int i = 0; i < 100; i ++) {
+            purchaseNotices.add(createNotice());
+        }
+
+        List<PurchaseNotice> purchaseNotices2 = new ArrayList<>();
+        for (int i = 0; i < 100; i ++) {
+            purchaseNotices2.add(createNotice());
+        }
+        long time1 = System.currentTimeMillis();
+        batchInsert(purchaseNotices);
+        long time2 = System.currentTimeMillis();
+        purchaseNoticeDao.save(purchaseNotices2);
+        long time3 = System.currentTimeMillis();
+        System.out.println("time1: " + (time2 - time1) + " , time2: " + (time3 - time2));
+    }
+
+    private void persistByEntityManager(Iterable<?> entities) {
+        EntityManager entityManager = null;
+        EntityTransaction transaction = null;
+
+        try {
+            entityManager = entityManagerFactory.createEntityManager();
+            transaction = entityManager.getTransaction();
+            transaction.begin();
+
+            Iterator iterator = entities.iterator();
+            while(iterator.hasNext()){
+                entityManager.persist(iterator.next());
+            }
+            transaction.commit();
+        } catch (RuntimeException e) {
+            if ( transaction != null &&
+                    transaction.isActive()) {
+                transaction.rollback();
+            }
+            throw e;
+        } finally {
+            if (entityManager != null) {
+                entityManager.close();
+            }
+        }
+
+    }
+
+    private PurchaseNotice createNotice() {
+        PurchaseNotice notice = new PurchaseNotice();
+        notice.setQty((double) 1);
+        notice.setDelivery(new Date());
+        notice.setStatus((short) 201);
+        notice.setSendStatus((short) 201);
+        notice.setEndQty((double) 0);
+        notice.setDate(new Date());
+        notice.setEnUU(10041166L);
+        notice.setErpDate(new Date());
+        notice.setVendUU(10030994L);
+        notice.setOrderItemId(37120085L);
+        return notice;
+    }
+
+}