Browse Source

Merge remote-tracking branch 'origin/master' into feature-huj-08

# Conflicts:
#	src/main/java/com/uas/platform/b2b/service/impl/PurchaseNoticeServiceImpl.java
Hu Jie 7 years ago
parent
commit
2dd2f35693
36 changed files with 1606 additions and 1525 deletions
  1. 6 1
      src/main/java/com/uas/platform/b2b/controller/SaleNoticeController.java
  2. 11 28
      src/main/java/com/uas/platform/b2b/controller/SaleOrderController.java
  3. 16 6
      src/main/java/com/uas/platform/b2b/dao/PurchaseNoticeDao.java
  4. 16 7
      src/main/java/com/uas/platform/b2b/dao/SaleSendItemDao.java
  5. 2 2
      src/main/java/com/uas/platform/b2b/erp/controller/NotExistOrderController.java
  6. 2 2
      src/main/java/com/uas/platform/b2b/erp/model/APCheck.java
  7. 37 31
      src/main/java/com/uas/platform/b2b/erp/service/impl/PurchaseNotifyServiceImpl.java
  8. 0 5
      src/main/java/com/uas/platform/b2b/model/Product.java
  9. 2 2
      src/main/java/com/uas/platform/b2b/model/PurchaseNotice.java
  10. 7 1
      src/main/java/com/uas/platform/b2b/model/PurchaseOrderAll.java
  11. 15 0
      src/main/java/com/uas/platform/b2b/ps/ProductUtils.java
  12. 11 0
      src/main/java/com/uas/platform/b2b/service/PurchaseNoticeService.java
  13. 26 84
      src/main/java/com/uas/platform/b2b/service/impl/PurcOrderServiceImpl.java
  14. 0 4
      src/main/java/com/uas/platform/b2b/service/impl/PurchaseAcceptServiceImpl.java
  15. 1238 1135
      src/main/java/com/uas/platform/b2b/service/impl/PurchaseNoticeServiceImpl.java
  16. 32 0
      src/main/java/com/uas/platform/b2b/support/DecimalUtils.java
  17. 45 0
      src/main/java/com/uas/platform/b2b/support/SearchUtils.java
  18. 17 68
      src/main/java/com/uas/platform/b2b/temporary/model/ProductInfo.java
  19. 0 76
      src/main/java/com/uas/platform/b2b/temporary/model/UpdateByBatchParameter.java
  20. 2 2
      src/main/resources/cloud/jdbc.properties
  21. 1 1
      src/main/resources/cloud/redis.properties
  22. 1 1
      src/main/resources/cloud/sys.properties
  23. 13 16
      src/main/webapp/WEB-INF/views/normal/index.html
  24. 4 4
      src/main/webapp/resources/css/index.css
  25. BIN
      src/main/webapp/resources/img/all/goInto.jpg
  26. BIN
      src/main/webapp/resources/img/all/newPointer.jpg
  27. 27 9
      src/main/webapp/resources/js/index/app.js
  28. 20 0
      src/main/webapp/resources/tpl/index/common/header.html
  29. 26 16
      src/main/webapp/resources/tpl/index/purc/addOrder.html
  30. 4 2
      src/main/webapp/resources/tpl/index/purc/deputyOrder_detail.html
  31. 3 2
      src/main/webapp/resources/tpl/index/purc/deputyOrder_new.html
  32. 3 1
      src/main/webapp/resources/tpl/index/purc/inquiryInfo_detail.html
  33. 1 1
      src/main/webapp/resources/tpl/index/purc/modal/purc_uplodaByBatch.html
  34. 0 8
      src/main/webapp/resources/tpl/index/sale/customer.html
  35. 18 2
      src/main/webapp/resources/tpl/index/sale/notice.html
  36. 0 8
      src/main/webapp/resources/tpl/index/sale/vendorPerformanceAssess.html

+ 6 - 1
src/main/java/com/uas/platform/b2b/controller/SaleNoticeController.java

@@ -35,6 +35,7 @@ import javax.servlet.http.HttpServletRequest;
 import java.io.UnsupportedEncodingException;
 import java.text.SimpleDateFormat;
 import java.util.ArrayList;
+import java.util.HashMap;
 import java.util.List;
 import java.util.Map;
 
@@ -207,7 +208,11 @@ public class SaleNoticeController {
 			}
 			pageParams.getFilters().put("pn_enuu", new MultiValue(list, true));
 		}
-		pageParams.getFilters().put("is_waiting", (short) Constant.YES);
+		pageParams.getFilters().put("is_waiting", Constant.YES);
+		// 排除已结案的数据
+		Map<String,Object> map = new HashMap<>(1);
+		map.put("pn_end", Constant.YES);
+        pageParams.setNotEqualFilters(map);
 		if (fromDate != null) {
 			pageParams.getFilters().put(SearchConstants.FROM_DATE_KEY, fromDate);
 		}

+ 11 - 28
src/main/java/com/uas/platform/b2b/controller/SaleOrderController.java

@@ -196,7 +196,7 @@ public class SaleOrderController {
 		List<Sort> sortList = new ArrayList<>();
 		sortList.add(new Sort("pu_id", false, Type.INT, 1L));
 		pageParams.getFilters().put(SearchConstants.SORT_KEY, sortList);
-		Map<String, Object> map = new HashMap<String, Object>();
+		Map<String, Object> map = new HashMap<String, Object>(1);
 		map.put("pu_status", (short) Status.UNAUDIT.value());
 		pageParams.setNotEqualFilters(map);
 		return searchService.searchPurchaseOrderIds(keyword, pageParams);
@@ -232,6 +232,8 @@ public class SaleOrderController {
 		pageParams.getFilters().put(SearchConstants.SORT_KEY, sortList);
 		pageParams.getFilters().put("pu_venduu", SystemSession.getUser().getEnterprise().getUu());
 		pageParams.getFilters().put("pu_status", Status.NOT_REPLY.value());
+        pageParams.getFilters().put(SearchConstants.SORT_KEY, sortList);
+        pageParams.getFilters().put("pu_end", Constant.NO);
 		return searchService.searchPurchaseTodoOrderIds(keyword, pageParams);
 	}
 
@@ -265,11 +267,8 @@ public class SaleOrderController {
 		pageParams.getFilters().put(SearchConstants.SORT_KEY, sortList);
 		pageParams.getFilters().put("pu_venduu", SystemSession.getUser().getEnterprise().getUu());
 		pageParams.getFilters().put("pu_reply", Constant.YES);
-		ModelMap map = new ModelMap();
-		// 过滤掉已结案状态的
-		map.put("pu_end", Constant.YES);
-		pageParams.setNotEqualFilters(map);
-		return searchService.searchPurchaseDoneOrderIds(keyword, pageParams);
+        pageParams.getFilters().put("pu_end", Constant.NO);
+        return searchService.searchPurchaseDoneOrderIds(keyword, pageParams);
 	}
 
 	/**
@@ -403,7 +402,8 @@ public class SaleOrderController {
 		pageParams.getFilters().put("pu_venduu", SystemSession.getUser().getEnterprise().getUu());
 		List<Object> list = new ArrayList<>();
 		list.add(Constant.YES);
-		list.add((short) 2); // 建索引时,将不处于已结案状态,但是货物全部交接完毕的单,end值设为了2
+        // 建索引时,将不处于已结案状态,但是货物全部交接完毕的单,end值设为了2
+		list.add((short) 2);
 		ModelMap map = new ModelMap();
 		map.put("pu_end", new MultiValue(list, true));
 		map.put("pu_status", (short) Status.UNAUDIT.value());
@@ -444,9 +444,6 @@ public class SaleOrderController {
 	@ResponseBody
 	public SPage<PurchaseOrderTodo> getTodoSaleOrders(PageParams params, String searchFilter) {
 		logger.log("客户采购单", "查看收到的客户采购单列表(待回复)");
-//		purchaseOrderAllDao.setDisplayStatus(SystemSession.getUser().getUserUU(),
-//				SystemSession.getUser().getEnterprise().getUu(), OrderType.sale.name());
-//		purchaseOrderTodoDao.updateStatusForSale(SystemSession.getUser().getEnterprise().getUu());
 		PageInfo pageInfo = new PageInfo(params);
 		pageInfo.filter("vendUU", SystemSession.getUser().getEnterprise().getUu());
 		SearchFilter filter = JSONObject.parseObject(searchFilter, SearchFilter.class);
@@ -470,9 +467,6 @@ public class SaleOrderController {
 	@ResponseBody
 	public SPage<PurchaseOrderDone> getDoneSaleOrders(PageParams params, String searchFilter) {
 		logger.log("客户采购单", "查看收到的客户采购单列表(已回复)");
-//		purchaseOrderAllDao.setDisplayStatus(SystemSession.getUser().getUserUU(),
-//				SystemSession.getUser().getEnterprise().getUu(), OrderType.sale.name());
-//		purchaseOrderDoneDao.updateStatusForSaleDone(SystemSession.getUser().getEnterprise().getUu());
 		PageInfo pageInfo = new PageInfo(params);
 		pageInfo.filter("vendUU", SystemSession.getUser().getEnterprise().getUu());
 		SearchFilter filter = JSONObject.parseObject(searchFilter, SearchFilter.class);
@@ -499,8 +493,6 @@ public class SaleOrderController {
 	@ResponseBody
 	public SPage<PurchaseOrderAll> getToAgreeSaleOrders(PageParams params, String searchFilter) {
 		logger.log("客户采购单", "查看收到的客户采购单列表(已结案)");
-//		purchaseOrderAllDao.setDisplayStatus(SystemSession.getUser().getUserUU(),
-//				SystemSession.getUser().getEnterprise().getUu(), OrderType.sale.name());
 		PageInfo pageInfo = new PageInfo(params);
 		pageInfo.filter("vendUU", SystemSession.getUser().getEnterprise().getUu());
 		pageInfo.filter("status", Status.WAITSELLERCOMFIRM.value());
@@ -526,8 +518,6 @@ public class SaleOrderController {
 	@ResponseBody
 	public SPage<PurchaseOrderEnd> getEndSaleOrders(PageParams params, String searchFilter) {
 		logger.log("客户采购单", "查看收到的客户采购单列表(已结案)");
-//		purchaseOrderAllDao.setDisplayStatus(SystemSession.getUser().getUserUU(),
-//				SystemSession.getUser().getEnterprise().getUu(), OrderType.sale.name());
 		PageInfo pageInfo = new PageInfo(params);
 		pageInfo.filter("vendUU", SystemSession.getUser().getEnterprise().getUu());
 		SearchFilter filter = JSONObject.parseObject(searchFilter, SearchFilter.class);
@@ -550,9 +540,6 @@ public class SaleOrderController {
 	@ResponseBody
 	public SPage<PurchaseOrderReceived> getReceivedOrders(PageParams params, String searchFilter) {
 		logger.log("客户采购单", "查看收到的客户采购订单列表(包括采购明细)(待交货)");
-//		purchaseOrderAllDao.setDisplayStatus(SystemSession.getUser().getUserUU(),
-//				SystemSession.getUser().getEnterprise().getUu(), OrderType.sale.name());
-//		purchaseOrderWaitingDao.updateStatusForSale(SystemSession.getUser().getEnterprise().getUu());
 		PageInfo pageInfo = new PageInfo(params);
 		pageInfo.filter("vendUU", SystemSession.getUser().getEnterprise().getUu());
 		SearchFilter filter = JSONObject.parseObject(searchFilter, SearchFilter.class);
@@ -575,9 +562,6 @@ public class SaleOrderController {
 	@ResponseBody
 	public SPage<PurchaseOrderWaiting> getWaitingOrders(PageParams params, String searchFilter) {
 		logger.log("客户采购单", "查看收到的客户采购订单列表(包括采购明细)(待交货)");
-//		purchaseOrderAllDao.setDisplayStatus(SystemSession.getUser().getUserUU(),
-//				SystemSession.getUser().getEnterprise().getUu(), OrderType.sale.name());
-//		purchaseOrderWaitingDao.updateStatusForSale(SystemSession.getUser().getEnterprise().getUu());
 		PageInfo pageInfo = new PageInfo(params);
 		pageInfo.filter("vendUU", SystemSession.getUser().getEnterprise().getUu());
 		SearchFilter filter = JSONObject.parseObject(searchFilter, SearchFilter.class);
@@ -938,9 +922,6 @@ public class SaleOrderController {
 	@ResponseBody
 	public SPage<PurchaseOrderTodo> getTodoPurcOrders(PageParams params, String searchFilter) {
 		logger.log("采购单", "查看采购订单列表(包括采购明细)(待回复)");
-//		purchaseOrderAllDao.setDisplayStatus(SystemSession.getUser().getUserUU(),
-//				SystemSession.getUser().getEnterprise().getUu(), OrderType.purc.getPhrase());
-//		purchaseOrderTodoDao.updateStatusForPurc(SystemSession.getUser().getEnterprise().getUu());
 		PageInfo pageInfo = new PageInfo(params);
 		pageInfo.filter("enUU", SystemSession.getUser().getEnterprise().getUu());
 		pageInfo.filter("status", Status.NOT_REPLY.value());
@@ -1053,7 +1034,8 @@ public class SaleOrderController {
 		sortList.add(new Sort("pu_id", false, Type.INT, new Long(1)));
 		pageParams.getFilters().put(SearchConstants.SORT_KEY, sortList);
 		pageParams.getFilters().put("pu_enuu", SystemSession.getUser().getEnterprise().getUu());
-		pageParams.getFilters().put("pu_status", Status.NOT_REPLY);
+		pageParams.getFilters().put("pu_status", Status.NOT_REPLY.value());
+        pageParams.getFilters().put("pu_end", Constant.NO);
 		return searchService.searchPurchaseTodoOrderIds(keyword, pageParams);
 	}
 
@@ -1075,7 +1057,8 @@ public class SaleOrderController {
 		pageParams.getFilters().put(SearchConstants.SORT_KEY, sortList);
 		pageParams.getFilters().put("pu_enuu", SystemSession.getUser().getEnterprise().getUu());
 		pageParams.getFilters().put("pu_reply", Constant.YES);
-		return searchService.searchPurchaseDoneOrderIds(keyword, pageParams);
+        pageParams.getFilters().put("pu_end", Constant.NO);
+        return searchService.searchPurchaseDoneOrderIds(keyword, pageParams);
 	}
 
 	/**

+ 16 - 6
src/main/java/com/uas/platform/b2b/dao/PurchaseNoticeDao.java

@@ -68,14 +68,15 @@ public interface PurchaseNoticeDao extends JpaSpecificationExecutor<PurchaseNoti
 	@Query("select count(n) from PurchaseNotice n where n.vendUU = :vendUU and n.status = :status and n.waiting = 0")
 	int getCountByVendUUAndStatus(@Param("vendUU") long vendUU, @Param("status") short status);
 
-	/**
-	 * 按发货单更新通知单的发货数
-	 * @param id 发货单id
-	 */
+    /**
+     * 按发货单更新通知单的发货数
+     * @param id 发货单id
+     * @param sendQty 已发货数量
+     */
 	@Modifying(clearAutomatically = true)
     @Transactional(rollbackFor = SQLException.class)
-	@Query("update PurchaseNotice n set n.endQty=(select sum(s.qty) from SaleSendItem s where s.notice=n) where n.id= :id")
-	void updateBySend(@Param("id") long id);
+	@Query("update PurchaseNotice n set n.endQty= :sendQty where n.id= :id")
+	void updateBySend(@Param("id") long id, @Param("sendQty") Double sendQty);
 	
 	/**
 	 * 根据截止日期获取(交货日期)
@@ -179,4 +180,13 @@ public interface PurchaseNoticeDao extends JpaSpecificationExecutor<PurchaseNoti
 	 */
 	@Query("select p.id from PurchaseNotice p where  p.date >= :date")
 	List<Long> findByDate( @Param("date") Date date);
+
+    /**
+     * 根据采购明细Id查询已发货的数量
+     *
+     * @param itemId 采购明细id
+     * @return
+     */
+    @Query("select sum(p.endQty) from PurchaseNotice p where p.orderItemId = :itemId")
+	Double getSendQtyByItemId(@Param("itemId") Long itemId);
 }

+ 16 - 7
src/main/java/com/uas/platform/b2b/dao/SaleSendItemDao.java

@@ -1,7 +1,6 @@
 package com.uas.platform.b2b.dao;
 
-import java.util.List;
-
+import com.uas.platform.b2b.model.SaleSendItem;
 import org.springframework.data.jpa.repository.JpaRepository;
 import org.springframework.data.jpa.repository.JpaSpecificationExecutor;
 import org.springframework.data.jpa.repository.Modifying;
@@ -10,10 +9,10 @@ import org.springframework.data.repository.query.Param;
 import org.springframework.stereotype.Repository;
 import org.springframework.transaction.annotation.Transactional;
 
-import com.uas.platform.b2b.model.SaleSendItem;
+import java.sql.SQLException;
+import java.util.List;
 
 @Repository
-@Transactional
 public interface SaleSendItemDao extends JpaSpecificationExecutor<SaleSendItem>, JpaRepository<SaleSendItem, Long> {
 
 	/**
@@ -40,6 +39,7 @@ public interface SaleSendItemDao extends JpaSpecificationExecutor<SaleSendItem>,
 	 */
 	@Modifying(clearAutomatically = true)
 	@Query("update SaleSendItem s set s.qty = :qty,s.replyRemark = :remark where s.id= :id")
+	@Transactional(rollbackFor = SQLException.class)
 	public void updateByReply(@Param("id") long id, @Param("qty") double qty, @Param("remark") String remark);
 	
 	/**
@@ -50,6 +50,7 @@ public interface SaleSendItemDao extends JpaSpecificationExecutor<SaleSendItem>,
 	@Modifying(clearAutomatically = true)
 	@Query(nativeQuery = true,
 		value = "update sale$senditem si set si_verifyqty = (select sum(siv_qty) from SALE$SENDITEMVERIFY siv where siv.SIV_SENDITEMID = si.SI_ID ), si_okqty = (select sum(siv_okqty) from SALE$SENDITEMVERIFY siv where siv.SIV_SENDITEMID = si.SI_ID ), si_notokqty = (select sum(siv_notokqty) from SALE$SENDITEMVERIFY siv where siv.SIV_SENDITEMID = si.SI_ID ) where si.si_id= :id")
+	@Transactional(rollbackFor = SQLException.class)
 	public void updateByVerify(@Param("id") long id);
 	
 	/**
@@ -76,8 +77,16 @@ public interface SaleSendItemDao extends JpaSpecificationExecutor<SaleSendItem>,
 	 */
 	@Modifying
 	@Query("update SaleSendItem s set s.packageQty = :packageQty,s.outBoxQty = :outBoxQty where s.id= :id")
-	public void updatePackageQty(@Param("id") long id, @Param("packageQty") Double packageQty, @Param("outBoxQty") Double outBoxQty);
-	
-	
+	@Transactional(rollbackFor = SQLException.class)
+	void updatePackageQty(@Param("id") long id, @Param("packageQty") Double packageQty, @Param("outBoxQty") Double outBoxQty);
+
+    /**
+     * 根据发货提醒id获取已发货数量
+     *
+     * @param noticeId 发货提醒id
+     * @return 该发货提醒已发货的数量
+     */
+	@Query("select sum(s.qty) from SaleSendItem s where s.noticeId= :noticeId")
+	Double getSendQtyByNoticeId(@Param("noticeId") Long noticeId);
 
 }

+ 2 - 2
src/main/java/com/uas/platform/b2b/erp/controller/NotExistOrderController.java

@@ -73,12 +73,12 @@ public class NotExistOrderController {
     }
 
     /**
-     * 获取平台不存在的单据信息,采购单明细
+     * 获取平台不存在的单据信息,委外单
      */
     @RequestMapping(value = "/makeMain", method = RequestMethod.GET)
     public List<NotExistOrders> findNotExistMakeMain() {
         List<NotExistOrders> orders = orderService.findByEnUUAndStatusAndType(SystemSession.getUser().getEnterprise().getUu(),
-                Status.NOT_UPLOAD.value(), OrderType.saleItem.name());
+                Status.NOT_UPLOAD.value(), OrderType.makeMain.name());
         logger.log("查询未上传订单", "查询未上传委外单", orders.size());
         return orders;
     }

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

@@ -2,6 +2,7 @@ package com.uas.platform.b2b.erp.model;
 
 import com.uas.platform.b2b.model.PurchaseApCheck;
 import com.uas.platform.b2b.model.PurchaseApCheckItem;
+import com.uas.platform.b2b.support.DecimalUtils;
 import org.springframework.util.CollectionUtils;
 
 import java.util.*;
@@ -172,9 +173,8 @@ public class APCheck{
 		this.ac_remark = apCheck.getRemark();
 		this.ac_commitdate = apCheck.getCommitDate();
 		this.ac_status = apCheck.getStatus();
-		this.ac_checkamount = apCheck.getCheckAmount();
+		this.ac_checkamount = DecimalUtils.decimalPoint(apCheck.getCheckAmount(), 2);
 		this.ac_currency = apCheck.getCurrency();
-//		this.ac_rate = apCheck.getTaxrate();
 		this.ac_rate = apCheck.getRate();
 		this.ac_paymentname = apCheck.getPayments();
 		this.ac_custuu = apCheck.getCustUu();

+ 37 - 31
src/main/java/com/uas/platform/b2b/erp/service/impl/PurchaseNotifyServiceImpl.java

@@ -1,13 +1,19 @@
 package com.uas.platform.b2b.erp.service.impl;
 
 import com.uas.platform.b2b.core.util.SqlDateFormdateUtils;
-import com.uas.platform.b2b.dao.*;
+import com.uas.platform.b2b.dao.PurchaseNoticeDao;
+import com.uas.platform.b2b.dao.PurchaseOrderItemDao;
+import com.uas.platform.b2b.dao.SaleSendItemDao;
+import com.uas.platform.b2b.dao.SaleSendItemVerifyDao;
 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.erp.service.PurchaseNotifyService;
-import com.uas.platform.b2b.model.*;
+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 com.uas.platform.b2b.support.SystemSession;
 import com.uas.platform.core.model.Status;
 import org.apache.commons.collections.CollectionUtils;
@@ -40,13 +46,11 @@ public class PurchaseNotifyServiceImpl implements PurchaseNotifyService {
 	@Autowired
 	private SaleSendItemVerifyDao saleSendItemVerifyDao;
     @Autowired
-    private CommunalLogDao communalLogDao;
-    @Autowired
     private JdbcTemplate jdbcTemplate;
 
 	@Override
 	public List<PurchaseNotice> convertPurchaseNotify(List<PurchaseNotify> notifies) {
-		List<PurchaseNotice> notices = new ArrayList<PurchaseNotice>();
+		List<PurchaseNotice> notices = new ArrayList<>();
 		for (PurchaseNotify notify : notifies) {
 			PurchaseNotice notice = notify.convert();
 			List<PurchaseNotice> existNotices = purchaseNoticeDao.findByEnUUAndSourceId(notice.getEnUU(),
@@ -83,23 +87,23 @@ public class PurchaseNotifyServiceImpl implements PurchaseNotifyService {
 				// 对卖家传输状态 // 待上传
 				existNotice.setSendStatus((short) Status.NOT_UPLOAD.value());
 				if (existNotice.getQty() != null && !existNotice.getQty().equals(notice.getQty())) {
-					if (existNotice.getEndQty() > notice.getQty()) {
-						// 已发货数大于新的需求数,修改平台上的需求数为已发货数,将已发货数量传回买家ERP修改发货提醒的数量
-						existNotice.setRemark(remark + dateString + "修改需求数量," + existNotice.getQty() + " -> "
-								+ existNotice.getEndQty());
+                    if (existNotice.getEndQty() > notice.getQty()) {
+                        // 已发货数大于新的需求数,修改平台上的需求数为已发货数,将已发货数量传回买家ERP修改发货提醒的数量
+                        existNotice.setRemark(remark + dateString + "修改需求数量," + existNotice.getQty() + " -> "
+                                + existNotice.getEndQty());
                         // 需求数量
-						existNotice.setQty(existNotice.getEndQty());
+                        existNotice.setQty(existNotice.getEndQty());
                         // 状态  已回复
-						existNotice.setStatus((short) Status.REPLIED.value());
-						notices.add(existNotice);
-					} else {
-						// 已发货数小于或等于新的需求数,修改平台上的需求数为新的需求数
-						existNotice.setRemark(
-								remark + dateString + "修改需求数量," + existNotice.getQty() + " -> " + notice.getQty());
-						existNotice.setQty(notice.getQty());
-						existNotice.setDelivery(notice.getDelivery());
-						notices.add(existNotice);
-					}
+                        existNotice.setStatus((short) Status.REPLIED.value());
+                        notices.add(existNotice);
+                    } else {
+                        // 已发货数小于或等于新的需求数,修改平台上的需求数为新的需求数
+                        existNotice.setRemark(
+                                remark + dateString + "修改需求数量," + existNotice.getQty() + " -> " + notice.getQty());
+                        existNotice.setQty(notice.getQty());
+                        existNotice.setDelivery(notice.getDelivery());
+                        notices.add(existNotice);
+                    }
 				} else {
 					String existDeliveryStr = "空";
 					String deliveryStr = "空";
@@ -111,7 +115,11 @@ public class PurchaseNotifyServiceImpl implements PurchaseNotifyService {
 					}
 					if (!existDeliveryStr.equals(deliveryStr)) {
 						existNotice.setRemark(remark + dateString + "修改交期," + existDeliveryStr + " -> " + deliveryStr);
-                        mergeWaitingStatus(existNotice.getId(), SqlDateFormdateUtils.DATE_FORMAT.format(notice.getDelivery()));
+                        Double ltinStock = 0.00;
+                        if (notice.getOrderItem() != null && notice.getOrderItem().getLtinstock() != null) {
+                            ltinStock = notice.getOrderItem().getLtinstock();
+                        }
+                        existNotice.setWaiting(getNoticeWaiting(SqlDateFormdateUtils.DATE_FORMAT.format(notice.getDelivery()), ltinStock));
 					}
 					existNotice.setDelivery(notice.getDelivery());
 					notices.add(existNotice);
@@ -122,20 +130,18 @@ public class PurchaseNotifyServiceImpl implements PurchaseNotifyService {
 	}
 
     /**
-     * 更新发货提醒备料状态
+     * 根据函数获取备料状态
      *
-     * @param noticeId 发货单id
-	 * @param deliveryStr 新的交货周期
+     * @param deliveryStr 格式化日期
+     * @param ltinStock 物料备料提前期
+     * @return
      */
-    private void mergeWaitingStatus(Long noticeId, String deliveryStr) {
-        String sql = "update purc$notice,purc$orderitems set is_waiting = PURC_NOTICE_WAIT_TO_SEND('" + deliveryStr + "', coalesce(pr_ltinstock, 0)) " +
-                "where pn_pdid = pd_id and pn_id = " + noticeId;
-        jdbcTemplate.execute(sql);
-        communalLogDao.save(new CommunalLog("更新发货提醒备料状态", "通过发货提醒更新备料状态", "发货单id: " + noticeId,
-                SystemSession.getUser().getEnterprise().getUu()));
+    private Short getNoticeWaiting(String deliveryStr, double ltinStock) {
+        String sql = String.format("select PURC_NOTICE_WAIT_TO_SEND('%s', %f)", deliveryStr, ltinStock);
+        Short waitStatus = jdbcTemplate.queryForObject(sql, Short.class);
+        return waitStatus;
     }
 
-
     /**
 	 * 将平台的发货提醒封装成ERP系统的发货提醒
 	 *

+ 0 - 5
src/main/java/com/uas/platform/b2b/model/Product.java

@@ -513,11 +513,6 @@ public class Product {
 		this.cmpUuId = cmpUuId;
 	}
 
-	@Override
-	public String toString() {
-		return "编号:" + getCode() + ",标题:" + getTitle() + ",规格型号:" + getSpec();
-	}
-
 	public String getSourceApp() {
 		return sourceApp;
 	}

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

@@ -85,7 +85,7 @@ public class PurchaseNotice implements Serializable {
 	/**
 	 * 客户采购单明细
 	 */
-	@OneToOne(cascade = {  }, fetch = FetchType.EAGER)
+	@OneToOne(fetch = FetchType.EAGER)
 	@JoinColumn(name = "pn_pdid", insertable = false, updatable = false)
 	private PurchaseOrderItem orderItem;
 
@@ -113,7 +113,7 @@ public class PurchaseNotice implements Serializable {
 	/**
 	 * 备货状态(1--是、0--否)
 	 */
-	@Column(name = "is_waiting", insertable = false, updatable = false)
+	@Column(name = "is_waiting")
 	private Short waiting;
 
 	/**

+ 7 - 1
src/main/java/com/uas/platform/b2b/model/PurchaseOrderAll.java

@@ -14,7 +14,13 @@ import java.util.Set;
  * @author yingp
  * 
  */
-@Table(name = "purc$orders", indexes = { @Index(name = "purc$orders_date", columnList = "pu_date"), @Index(name = "unique_enuu_code", columnList = "pu_enuu,pu_code", unique = true) })
+@Table(name = "purc$orders", indexes = {
+        @Index(name = "purc$orders_date", columnList = "pu_date"),
+        @Index(name = "unique_enuu_code", columnList = "pu_enuu,pu_code", unique = true),
+        @Index(name = "purc$orders_status_IDX", columnList = "pu_status"),
+        @Index(name = "purc$orders_end_IDX", columnList = "pu_end"),
+        @Index(name = "purc$orders_reply_IDX", columnList = "pu_reply"),
+        @Index(name = "purc$orders_venduu_IDX", columnList = "pu_venduu")})
 @Entity
 public class PurchaseOrderAll {
 

+ 15 - 0
src/main/java/com/uas/platform/b2b/ps/ProductUtils.java

@@ -10,6 +10,7 @@ import com.uas.platform.b2b.model.Product;
 import com.uas.platform.b2b.model.ProductInfo;
 import com.uas.platform.b2b.model.ProductUsers;
 import com.uas.platform.b2b.support.SysConf;
+import com.uas.platform.core.exception.IllegalOperatorException;
 import com.uas.platform.core.model.PageInfo;
 import com.uas.platform.core.util.HttpUtil;
 import com.uas.platform.core.util.HttpUtil.Response;
@@ -628,4 +629,18 @@ public class ProductUtils {
         return null;
     }
 
+    /**
+     * 针对导入的物料信息批量验证
+     *
+     * @param productList 导入物料信息
+     */
+    public static Map<String, Object> checkImportProductList(List<com.uas.platform.b2b.temporary.model.ProductInfo> productList) throws Exception {
+        String res = HttpUtil.doPost(PRODUCT_PUBLIC_SERVICE_URL + "/product/checkImportProductList", FlexJsonUtils.toJsonDeep(productList));
+        if (null != res) {
+            Map<String, Object> map = JSON.parseObject(res);
+            return map;
+        } else {
+            throw new IllegalOperatorException("物料导入失败");
+        }
+    }
 }

+ 11 - 0
src/main/java/com/uas/platform/b2b/service/PurchaseNoticeService.java

@@ -344,4 +344,15 @@ public interface PurchaseNoticeService {
      * @return
      */
     SPage<PurchaseNotice> findAllNoticesByPageInfo(PageInfo pageInfo, String keyword, SearchFilter filter);
+
+	/**
+	 * 按条件查询发货提醒
+	 *
+	 * @param pageInfo 分页信息,过滤条件
+	 * @param keyword 搜索词
+	 * @param filter 过滤条件
+	 * @param state 状态
+	 * @return SPage封装的数据
+	 */
+    SPage<PurchaseNotice> findNoticesByPageInfo(PageInfo pageInfo, String keyword, SearchFilter filter, String state);
 }

+ 26 - 84
src/main/java/com/uas/platform/b2b/service/impl/PurcOrderServiceImpl.java

@@ -25,6 +25,7 @@ import java.text.SimpleDateFormat;
 import java.util.ArrayList;
 import java.util.Date;
 import java.util.List;
+import java.util.Map;
 
 @Service
 public class PurcOrderServiceImpl implements PurcOrderService {
@@ -120,28 +121,27 @@ public class PurcOrderServiceImpl implements PurcOrderService {
 	@Override
 	public ModelMap releaseByWorkbook(Workbook workbook) throws Exception {
 		ModelMap modelMap = new ModelMap();
-		List<String> alters = new ArrayList<String>();
-		List<ProductInfo> productInfos = new ArrayList<ProductInfo>();
+		List<String> alters = new ArrayList<>();
+		List<ProductInfo> productInfos = new ArrayList<>();
 		Sheet sheet = workbook.getSheetAt(0);
 		int rowNum = sheet.getLastRowNum();
 		Row headerRow = sheet.getRow(0);
+		int valueNum = 3;
 		int total = 0;
-		int success = 0;
 		if (headerRow != null) {
-			for (int r = 3; r <= rowNum; r++) {
+			for (int r = valueNum; r <= rowNum; r++) {
 			    int line = r + 1;
                 Row row = sheet.getRow(r);
 				if (row != null) {
 				    int failure =  0;
 					total++;
-					Product product = new Product();
 					ProductInfo productInfo = new ProductInfo();
 
 					// 商品名称
 					if (row.getCell(0) != null && row.getCell(0).getCellType() != Cell.CELL_TYPE_BLANK) {
 						row.getCell(0).setCellType(Cell.CELL_TYPE_STRING);
 						try {
-							product.setTitle(row.getCell(0).getStringCellValue().trim());
+                            productInfo.setTitle(row.getCell(0).getStringCellValue().trim());
 						} catch (Exception e) {
                             alters.add("第" + line + "行第" + 1 + "列名称格式不正确;");
                             failure++;
@@ -155,7 +155,7 @@ public class PurcOrderServiceImpl implements PurcOrderService {
 					if (row.getCell(1) != null) {
 						row.getCell(1).setCellType(Cell.CELL_TYPE_STRING);
 						try {
-							product.setCode(row.getCell(1).getStringCellValue().trim());
+                            productInfo.setCode(row.getCell(1).getStringCellValue().trim());
 						} catch (Exception e) {
                             alters.add("第" + line + "行第" + 2 + "列编号格式不正确;");
                             failure++;
@@ -166,7 +166,7 @@ public class PurcOrderServiceImpl implements PurcOrderService {
 					if (row.getCell(2) != null && row.getCell(2).getCellType() != Cell.CELL_TYPE_BLANK) {
 						row.getCell(2).setCellType(Cell.CELL_TYPE_STRING);
 						try {
-							product.setSpec(row.getCell(2).getStringCellValue().trim());
+                            productInfo.setSpec(row.getCell(2).getStringCellValue().trim());
 						} catch (Exception e) {
                             alters.add("第" + line + "行第" + 3 + "规格型号格式不正确;");
                             failure++;
@@ -180,7 +180,7 @@ public class PurcOrderServiceImpl implements PurcOrderService {
 					if (row.getCell(3) != null) {
 						row.getCell(3).setCellType(Cell.CELL_TYPE_STRING);
 						try {
-							product.setCmpCode(row.getCell(3).getStringCellValue().trim());
+                            productInfo.setCmpCode(row.getCell(3).getStringCellValue().trim());
 						} catch (Exception e) {
                             alters.add("第" + line + "行第" + 4 + "列原厂型号格式不正确;");
                             failure++;
@@ -242,16 +242,29 @@ public class PurcOrderServiceImpl implements PurcOrderService {
 						productInfo.setRemark(row.getCell(8).getStringCellValue());
 					}
 					if (failure == 0) {
-					    // 录入数据符合要求,进行物料处理
-						List<ProductInfo> productInfoList = (List<ProductInfo>) musterdProduct(product, productInfo, success).get("productInfos");
-                        productInfos.addAll(productInfoList);
-                        success = (Integer) musterdProduct(product, productInfo, success).get("success");
+                        productInfo.setEnUU(SystemSession.getUser().getEnterprise().getUu());
+                        productInfo.setUserUU(SystemSession.getUser().getUserUU());
+                        productInfo.setSourceApp("B2B");
+                        productInfo.setIsSale(Constant.YES);
+                        //设置默认单位
+                        productInfo.setUnit("PCS");
+                        //为了同步商城数据标准,标准字段也赋值
+                        productInfo.setPcmpcode(productInfo.getCmpCode());
+                        productInfo.setPbranden(productInfo.getPbranden() == null ? productInfo.getBrand() : productInfo.getPbranden());
+                        // 新增数据时间
+                        productInfo.setErpDate(new Date(System.currentTimeMillis()));
+                        productInfo.setStandard(Constant.NO);
+                        productInfo.setIsPurchase(Constant.YES);
+                        productInfos.add(productInfo);
                     }
 				}
 			}
             if (alters.size() > 0) {
                 modelMap.put("alters", alters);
             } else {
+                Map<String, Object> map = ProductUtils.checkImportProductList(productInfos);
+                productInfos = (List<ProductInfo>) map.get("products");
+                Integer success = (Integer) map.get("success");
                 if (!CollectionUtils.isEmpty(productInfos)) {
                     modelMap.put("products", productInfos);
                 }
@@ -262,77 +275,6 @@ public class PurcOrderServiceImpl implements PurcOrderService {
 		return modelMap;
 	}
 
-    /**
-     * 输入数据符合要求,进行其他处理操作
-     *
-     * @param product
-     * @param productInfo
-     * @param success
-     * @return
-     */
-    private ModelMap musterdProduct(Product product, ProductInfo productInfo, int success) {
-        List<ProductInfo> productInfos = new ArrayList<>();
-        ModelMap map = new ModelMap();
-        product.setEnUU(SystemSession.getUser().getEnterprise().getUu());
-        product.setUserUU(SystemSession.getUser().getUserUU());
-        product.setSourceApp("B2B");
-        product.setIsSale(Constant.YES);
-        if (product.getTitle() != null) {
-            //设置默认单位
-            product.setUnit("PCS");
-            //为了同步商城数据标准,标准字段也赋值
-            product.setPcmpcode(product.getCmpCode());
-            product.setPbranden(product.getPbranden() == null ? product.getBrand() : product.getPbranden());
-            // 新增数据时间
-            product.setErpDate(new Date(System.currentTimeMillis()));
-            product.setStandard(Constant.NO);
-            product.setIsPurchase(Constant.YES);
-            // 如果物料不存在,则进行存储
-            if (product.getCode() != null) {
-                List<Product> prods = ProductUtils.findByEnUUAndCode(SystemSession.getUser().getEnterprise().getUu(), product.getCode());
-                if (CollectionUtils.isEmpty(prods)) {
-                    try {
-                        Long prId = ProductUtils.updateOne(product);
-                        product.setId(prId);
-                        success++;
-                    } catch (Exception e) {
-
-                    }
-                } else {
-                    product = prods.get(0);
-                    success++;
-                }
-            } else {// 物料编码不存在
-                List<Product> prods = ProductUtils.findByEnUUAndTitle(SystemSession.getUser().getEnterprise().getUu(), product.getTitle());
-                if (CollectionUtils.isEmpty(prods)) {
-                    //生成随机编码
-                    SimpleDateFormat sdf = new SimpleDateFormat("yymmddhhmm_sss");
-                    product.setCode("prod" + sdf.format(new Date()));
-                    try {
-                        Long prId = ProductUtils.updateOne(product);
-                        product.setId(prId);
-                        success++;
-                    } catch (Exception e) {
-
-                    }
-                } else {
-                    product = prods.get(0);
-                    success++;
-                }
-            }
-            productInfo.setId(product.getId());
-            productInfo.setTitle(product.getTitle());
-            productInfo.setCode(product.getCode());
-            productInfo.setSpec(product.getSpec());
-            productInfo.setPrice(productInfo.getRateprice());
-            productInfo.setTotalprice(productInfo.getPrice() * productInfo.getAmount());
-            productInfos.add(productInfo);
-        }
-        map.put("productInfos", productInfos);
-        map.put("success", success);
-        return map;
-    }
-
     @Override
 	public ModelMap copyorder(Long id) {
 		PurchaseOrderAll order = purchaseOrderAllDao.findOne(id);

+ 0 - 4
src/main/java/com/uas/platform/b2b/service/impl/PurchaseAcceptServiceImpl.java

@@ -1,11 +1,9 @@
 package com.uas.platform.b2b.service.impl;
 
-import com.uas.platform.b2b.core.util.ContextUtils;
 import com.uas.platform.b2b.dao.PurcAcceptItemDao;
 import com.uas.platform.b2b.dao.PurchaseAcceptDao;
 import com.uas.platform.b2b.dao.PurchaseAcceptItemDao;
 import com.uas.platform.b2b.dao.PurchaseOrderItemDao;
-import com.uas.platform.b2b.event.PurchaseAcceptSaveReleaseEvent;
 import com.uas.platform.b2b.model.*;
 import com.uas.platform.b2b.search.SearchService;
 import com.uas.platform.b2b.service.PurchaseAcceptService;
@@ -71,8 +69,6 @@ public class PurchaseAcceptServiceImpl implements PurchaseAcceptService {
 				}
 			}
 		}
-		// 产生消息
-		ContextUtils.publishEvent(new PurchaseAcceptSaveReleaseEvent(PurchaseAcceptItem.distinct(acceptItems)));
 	}
 
 	@Override

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

@@ -1,1135 +1,1238 @@
-package com.uas.platform.b2b.service.impl;
-
-import com.uas.platform.b2b.core.util.ContextUtils;
-import com.uas.platform.b2b.core.util.SplitArray;
-import com.uas.platform.b2b.core.util.ThreadTask;
-import com.uas.platform.b2b.dao.*;
-import com.uas.platform.b2b.erp.model.PurchaseNotify;
-import com.uas.platform.b2b.event.SaleSendAcceptReleaseEvent;
-import com.uas.platform.b2b.event.SaleSendRefuseReleaseEvent;
-import com.uas.platform.b2b.model.*;
-import com.uas.platform.b2b.ps.service.PersonalProductService;
-import com.uas.platform.b2b.search.SearchService;
-import com.uas.platform.b2b.service.PurchaseNoticeService;
-import com.uas.platform.b2b.support.CollectionUtil;
-import com.uas.platform.b2b.support.SPageUtils;
-import com.uas.platform.b2b.support.SystemSession;
-import com.uas.platform.b2b.support.UsageBufferedLogger;
-import com.uas.platform.core.exception.IllegalOperatorException;
-import com.uas.platform.core.logging.BufferedLoggerManager;
-import com.uas.platform.core.model.Constant;
-import com.uas.platform.core.model.PageInfo;
-import com.uas.platform.core.model.Status;
-import com.uas.platform.core.persistence.criteria.PredicateUtils;
-import com.uas.search.b2b.model.SPage;
-import org.apache.commons.collections.CollectionUtils;
-import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.data.domain.Page;
-import org.springframework.data.jpa.domain.Specification;
-import org.springframework.stereotype.Service;
-import org.springframework.transaction.annotation.Transactional;
-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.math.BigDecimal;
-import java.text.SimpleDateFormat;
-import java.util.*;
-
-/**
- * 发货提醒
- *
- * @author US50
- */
-@Service
-public class PurchaseNoticeServiceImpl implements PurchaseNoticeService {
-
-	private final static UsageBufferedLogger logger = BufferedLoggerManager.getLogger(UsageBufferedLogger.class);
-	@Autowired
-	private PurchaseNoticeDao purchaseNoticeDao;
-
-	@Autowired
-	private SaleSendDao saleSendDao;
-
-	@Autowired
-	private SaleSendItemDao saleSendItemDao;
-
-	@Autowired
-	private SaleSendAllDao saleSendAllDao;
-
-	@Autowired
-	private SaleSendItemVerifyDao saleSendItemVerifyDao;
-
-	@Autowired
-	private B2bCodeSetDao b2bCodeSetDao;
-
-	@Autowired
-	private BarPackageDao barPackageDao;
-
-	@Autowired
-	private BarSendNotifyDao barSendNotifyDao;
-
-	@Autowired
-	private BarPackageDetailDao barPackageDetailDao;
-
-	@Autowired
-	private CommonDao commonDao;
-
-	@Autowired
-	private BarLPSetingDao barLPSetingDao;
-
-	@Autowired
-	private SearchService searchService;
-
-	@Autowired
-	private DistributeDao distributeDao;
-
-	@Autowired
-	private  RoleDao roleDao;
-
-	@Autowired
-	private  UserOrderDao userOrderDao;
-
-	@Autowired
-	private  UserDao userDao;
-
-	@Autowired
-	private VendorDao vendorDao;
-
-	@Autowired
-    private PersonalProductService personalProductService;
-
-	@Autowired
-	private PurchaseNoticeEndDao noticeEndDao;
-
-	@Autowired
-	private EnterpriseDao enterpriseDao;
-
-    /**
-     * 最多数量
-     */
-    final Integer MAX_SIZE = 1000;
-
-	@Override
-	public List<PurchaseNotice> save(List<PurchaseNotice> notices) {
-		notices = purchaseNoticeDao.save(notices);
-		saveUserOrders(notices);
-		return notices;
-	}
-
-	private void saveUserOrders(final List<PurchaseNotice> notices) {
-
-		ThreadTask.getInstance().execute(new Runnable() {
-			@Override
-			public void run() {
-                /* 添加供应商的阅读记录*/
-				for(PurchaseNotice notice : notices) {
-					Set<Long> userUUs = new HashSet<>();
-					// 添加管理员
-					List<Role> roles = roleDao.findByEnUUAndIssys(notice.getVendUU(), Constant.YES);
-					if (!CollectionUtils.isEmpty(roles)) {
-						List<User> admins = userDao.findByRole(roles.get(0).getId());
-						for (User admin : admins) {
-							if (!userUUs.contains(admin.getUserUU())) {
-								userUUs.add(admin.getUserUU());
-							}
-						}
-					}
-					List<Vendor> vendors = vendorDao.findByMyEnUUAndVendUU(notice.getEnUU(), notice.getVendUU());
-					// 查找有权限的用户
-					if (!CollectionUtils.isEmpty(vendors)) {
-						Long vendorId = vendors.get(0).getId();
-						List<Distribute> distributes = distributeDao.findByVendorId(vendorId);
-						if (!CollectionUtils.isEmpty(distributes)) {
-							for (Distribute distribute : distributes) {
-								if (!userUUs.contains(distribute.getUserUU())) {
-									userUUs.add(distribute.getUserUU());
-								}
-							}
-						}
-					}
-					UserOrders userOrders;
-					List<UserOrders> list = new ArrayList<>();
-					for (Long userUU : userUUs) {
-						if (userUU == null) {
-							continue;
-						}
-						userOrders = new UserOrders(userUU, notice.getVendUU(), notice.getId(), "sale", "purc$notice");
-						list.add(userOrders);
-					}
-
-                    /* 添加采购员的阅读记录*/
-                    if (notice.getOrderItem().getOrder().getUserUU() != null) {
-                        userOrders = new UserOrders(notice.getOrderItem().getOrder().getUserUU(), notice.getEnUU(), notice.getId(), "purc", "purc$notice");
-						userOrders.setReadStatus((short) Status.READ.value());
-                        list.add(userOrders);
-                    }
-					userOrderDao.save(list);
-				}
-			}
-		});
-	}
-
-	@Override
-	public Page<PurchaseNotice> findAllByPageInfo(final PageInfo pageInfo, final String keyword, final Long fromDate,
-			final Long endDate, final SearchFilter filter) {
-		return purchaseNoticeDao.findAll(new Specification<PurchaseNotice>() {
-			@Override
-			public Predicate toPredicate(Root<PurchaseNotice> root, CriteriaQuery<?> query, CriteriaBuilder builder) {
-				if (filter != null) {
-					if (!CollectionUtils.isEmpty(filter.getDistribute())) {
-						pageInfo.expression(PredicateUtils.in("enUU", filter.getDistribute(), false));
-					}
-				}
-				if (StringUtils.hasText(keyword)) {
-					List<Object> lists = new ArrayList<>();
-					List<PurchaseNotice> listss = searchService.searchPurchaseNoticeIds(keyword, null).getContent();
-					for (PurchaseNotice list : listss) {
-						lists.add(list.getId());
-					}
-					pageInfo.expression(PredicateUtils.in("id", lists, false));
-				}
-				if (fromDate != null) {
-					pageInfo.expression(PredicateUtils.in("id", purchaseNoticeDao.findByFromDate(
-							SystemSession.getUser().getEnterprise().getUu(), new Date(fromDate)), false));
-				}
-				if (endDate != null) {
-					pageInfo.expression(PredicateUtils.in("id", purchaseNoticeDao
-							.findByEndDate(SystemSession.getUser().getEnterprise().getUu(), new Date(endDate)), false));
-				}
-				return query.where(pageInfo.getPredicates(root, query, builder)).getRestriction();
-			}
-		}, pageInfo);
-	}
-
-    @Override
-	public Page<PurchaseNotice> findDoneByPageInfo(final PageInfo pageInfo, final String keyword, final Long fromDate,
-			final Long endDate) {
-		return purchaseNoticeDao.findAll(new Specification<PurchaseNotice>() {
-			@Override
-			public Predicate toPredicate(Root<PurchaseNotice> root, CriteriaQuery<?> query, CriteriaBuilder builder) {
-				pageInfo.filter("status", Status.REPLIED.value());
-				pageInfo.expression(
-						PredicateUtils.or(PredicateUtils.isNull("end"), PredicateUtils.ne("end", Constant.YES, false)));
-				if (StringUtils.hasText(keyword)) {
-					List<Object> lists = new ArrayList<>();
-					List<PurchaseNotice> listss = searchService.searchPurchaseNoticeIds(keyword, null).getContent();
-					for (PurchaseNotice list : listss) {
-						lists.add(list.getId());
-					}
-					pageInfo.expression(PredicateUtils.in("id", lists, false));
-				}
-				if (fromDate != null) {
-					pageInfo.expression(PredicateUtils.in("id", purchaseNoticeDao.findByFromDate(
-							SystemSession.getUser().getEnterprise().getUu(), new Date(fromDate)), false));
-				}
-				if (endDate != null) {
-					pageInfo.expression(PredicateUtils.in("id", purchaseNoticeDao
-							.findByEndDate(SystemSession.getUser().getEnterprise().getUu(), new Date(endDate)), false));
-				}
-				return query.where(pageInfo.getPredicates(root, query, builder)).getRestriction();
-			}
-		}, pageInfo);
-	}
-
-	@Override
-	public PurchaseNotice findById(Long id) {
-		return purchaseNoticeDao.findOne(id);
-	}
-
-	@Override
-	public void send(List<SaleSendItem> sendItems) {
-		saleSendItemDao.save(sendItems);
-		for (SaleSendItem item : sendItems) {
-			if (item.getNoticeId() != null) {
-				purchaseNoticeDao.updateBySend(item.getNoticeId());
-				// 更新发货状态
-				updateNoticeStatus(item.getNoticeId());
-			}
-		}
-	}
-
-	@Override
-	public List<SaleSendItem> findSendById(long noticeId) {
-		return saleSendItemDao.findByNoticeId(noticeId);
-	}
-
-	@Override
-	public List<PurchaseNotice> findNotUploadNotice() {
-		return purchaseNoticeDao.findByVendUUAndSendStatus(SystemSession.getUser().getEnterprise().getUu(),
-				(short) Status.NOT_UPLOAD.value());
-	}
-
-	@Override
-	public void onNoticeDownSuccess(String[] idArray) {
-		for (String id : idArray) {
-			PurchaseNotice notice = purchaseNoticeDao.findOne(Long.parseLong(id));
-			if (notice != null) {
-				notice.setSendStatus((short) Status.DOWNLOADED.value());
-				purchaseNoticeDao.save(notice);
-			}
-		}
-	}
-
-	@Override
-	public List<SaleSend> findNotUploadSend() {
-		return saleSendDao.findByCustUUAndSendStatus(SystemSession.getUser().getEnterprise().getUu(),
-				(short) Status.NOT_UPLOAD.value());
-	}
-
-	@Override
-	public List<SaleSend> findNotUploadSendEDI(Long enUU) {
-		return saleSendDao.findByCustUUAndSendStatus(enUU,
-				(short) Status.NOT_UPLOAD.value());
-	}
-
-	@Override
-	public List<SaleSend> findNotSendSend() {
-		return saleSendDao.findByEnUUAndBackStatus(SystemSession.getUser().getEnterprise().getUu(),
-				(short) Status.NOT_UPLOAD.value());
-	}
-
-	@Override
-	public void onSendUploadSuccess(String[] idArray) {
-		for (String id : idArray) {
-			SaleSend send = saleSendDao.findOne(Long.parseLong(id));
-			if (send != null) {
-				send.setSendStatus((short) Status.DOWNLOADED.value());
-				saleSendDao.save(send);
-			}
-		}
-	}
-
-	@Override
-	public void onSendDownSuccess(String[] idArray) {
-		for (String id : idArray) {
-			SaleSend send = saleSendDao.findOne(Long.parseLong(id));
-			if (send != null) {
-				send.setBackStatus((short) Status.DOWNLOADED.value());
-				saleSendDao.save(send);
-			}
-		}
-	}
-
-	@Override
-	public void end(List<PurchaseNotify> notifies) {
-		long enUU = SystemSession.getUser().getEnterprise().getUu();
-		List<PurchaseNoticeEnd> noticeList = noticeEndDao.findByEnUUAndSourceIdList(enUU, CollectionUtil.getKeyCollection(notifies));
-		if (!CollectionUtils.isEmpty(noticeList)) {
-		    for (PurchaseNoticeEnd notice : noticeList) {
-                notice.setEnd(Constant.YES);
-                notice.setEndStatus((short) Status.NOT_UPLOAD.value());
-                notice.setErpDate(new Date(System.currentTimeMillis()));
-            }
-        }
-        noticeEndDao.save(noticeList);
-	}
-
-	@Override
-	public List<PurchaseNotice> findNotSendEnd() {
-		return purchaseNoticeDao.findByVendUUAndEndStatus(SystemSession.getUser().getEnterprise().getUu(),
-				(short) Status.NOT_UPLOAD.value());
-	}
-
-	@Override
-	public void onEndDownSuccess(String[] idArray) {
-		for (String id : idArray) {
-			PurchaseNoticeEnd noticeEnd = noticeEndDao.findOne(Long.parseLong(id));
-			if (noticeEnd != null) {
-                noticeEnd.setEndStatus((short) Status.DOWNLOADED.value());
-                noticeEndDao.save(noticeEnd);
-			}
-		}
-	}
-
-	@Override
-	public SaleSend send(Long noticeId, SaleSend send) {
-		PurchaseNotice notice = purchaseNoticeDao.findOne(noticeId);
-		List<SaleSend> sends = saleSendDao.findByUuid(send.getUuid());
-		//限制同一个供应商给同一个客户发货单号不可以重复,(避免一次发货产生多张单)
-		if (notice != null && CollectionUtils.isEmpty(sends)) {
-			if (notice.getEnd() != null && notice.getEnd() == Constant.YES) {
-				throw new IllegalOperatorException("客户已经取消了本次送货提醒,请刷新重试!");
-			}
-			double thisQty = 0;
-			for (SaleSendItem item : send.getSendItems()) {
-				thisQty += item.getQty();
-			}
-			double endQty = (notice.getEndQty() == null ? 0.0 : notice.getEndQty()) + thisQty;
-			if (endQty > notice.getQty()) {
-				throw new IllegalOperatorException("累计发货数量将超出本次送货提醒的需求数!");
-			}
-			PurchaseOrder order = notice.getOrderItem().getOrder();
-			send.setCurrency(order.getCurrency());
-			send.setBackStatus((short) Status.NOT_UPLOAD.value());
-			send.setSendStatus((short) Status.NOT_UPLOAD.value());
-			// 未收料
-			send.setVerifystatus(Constant.NO);
-			send.setCustUU(notice.getEnUU());
-			if (!StringUtils.isEmpty(notice.getOrderItem().getCustPurchaseCode())) {
-				send.setCustUserUU(enterpriseDao.findOne(notice.getEnUU()).getEnAdminuu());
-			} else {
-				send.setCustUserUU(order.getUserUU());
-			}
-			send.setDate(new Date());
-			send.setEnUU(SystemSession.getUser().getEnterprise().getUu());
-			send.setPayments(order.getPayments());
-			send.setRate(order.getRate());
-			send.setRecorder(SystemSession.getUser().getUserName());
-			short number = 0;
-			for (SaleSendItem item : send.getSendItems()) {
-				item.setNoticeId(noticeId);
-				item.setNotice(notice);
-				item.setNumber(++number);
-				item.setOrderItem(notice.getOrderItem());
-				item.setOrderItemId(notice.getOrderItem().getId());
-				item.setPrice(notice.getOrderItem().getPrice());
-				item.setSend(send);
-			}
-			List<SaleSendItem> sendItems = saleSendItemDao.save(send.getSendItems());
-			notice.setEndQty(endQty);
-			notice.setStatus((short) (endQty == notice.getQty() ? Status.REPLIED.value() : Status.NOT_REPLY.value()));
-			purchaseNoticeDao.save(notice);
-			if (!CollectionUtils.isEmpty(sendItems)) {
-				List<SaleSend> saleSends = new ArrayList<SaleSend>();
-				saleSends.add(sendItems.get(0).getSend());
-			}
-			// 我的产品库更新
-            personalProductService.covertPersonalProduct(notice.getOrderItem().getProductId(), "单个发货");
-			return sendItems.get(0).getSend();
-		} else {
-			throw new IllegalOperatorException("请对有效的送货提醒发货!");
-		}
-	}
-
-    @Override
-	public int getOnhandCount() {
-		return purchaseNoticeDao.getCountByVendUUAndStatus(SystemSession.getUser().getEnterprise().getUu(),
-				(short) Status.NOT_REPLY.value());
-	}
-
-	@Override
-	public SaleSend send(SaleSend saleSend) {
-		//限制同一个供应商给同一个客户发货单号不可以重复,(避免一次发货产生多张单),存在时不做处理
-		List<SaleSend> sendList = saleSendDao.findByUuid(saleSend.getUuid());
-		if (saleSend != null && CollectionUtils.isEmpty(sendList)) {
-			saleSend.setBackStatus((short) Status.NOT_UPLOAD.value());
-			saleSend.setSendStatus((short) Status.NOT_UPLOAD.value());
-			saleSend.setEnUU(SystemSession.getUser().getEnterprise().getUu());
-			saleSend.setRecorder(SystemSession.getUser().getUserName());
-			saleSend.setDate(new Date());
-            // 未收料
-			saleSend.setVerifystatus(Constant.NO);
-			short number = 0;
-			List<SaleSendItem> sendItems = new ArrayList<SaleSendItem>();
-			for (SaleSendItem item : saleSend.getSendItems()) {
-				PurchaseNotice notice = purchaseNoticeDao.findOne(item.getNoticeId());
-				if (notice != null) {
-					if (notice.getEnd() != null && notice.getEnd() == Constant.YES) {
-						String error = "货车中订单:" + notice.getOrderItem().getOrder().getCode() + "的物料号为"
-								+ notice.getOrderItem().getProduct().getCode() + "的发货通知被取消!";
-						throw new IllegalOperatorException(error);
-					} else {
-						double thisQty = item.getQty();
-						double endQty = (notice.getEndQty() == null ? 0.0 : notice.getEndQty()) + thisQty;
-						if (endQty > notice.getQty()) {
-							throw new IllegalOperatorException("累计发货数量将超出本次送货提醒的需求数!");
-						}
-						item.setNotice(notice);
-                        // 带了序号则不重设序号,不带这重设序号
-						if (item.getNumber() == null || item.getNumber() == 0) {
-							item.setNumber(++number);
-						}
-						item.setOrderItem(notice.getOrderItem());
-						item.setOrderItemId(notice.getOrderItemId());
-						saleSend.setRate(notice.getOrderItem().getOrder().getRate());
-						item.setSend(saleSend);
-						sendItems.add(item);
-					}
-				} else {
-					throw new IllegalOperatorException("参数错误,无效的客户送货提醒单!");
-				}
-
-			}
-			sendItems = saleSendItemDao.save(sendItems);
-			for (SaleSendItem sendItem : sendItems) {
-				PurchaseNotice notice = purchaseNoticeDao.findOne(sendItem.getNoticeId());
-				double endQty = (notice.getEndQty() == null ? 0.0 : notice.getEndQty()) + sendItem.getQty();
-				if (endQty > notice.getQty()) {
-					throw new IllegalOperatorException("累计发货数量将超出本次送货提醒的需求数!");
-				}
-				notice.setEndQty(endQty);
-				notice.setStatus(
-						(short) (endQty == notice.getQty() ? Status.REPLIED.value() : Status.NOT_REPLY.value()));
-				purchaseNoticeDao.save(notice);
-                // 转入我的物料库
-                personalProductService.covertPersonalProduct(notice.getOrderItem().getProductId(), "批量发货");
-			}
-			if (!CollectionUtils.isEmpty(sendItems)) {
-				List<SaleSend> saleSends = new ArrayList<SaleSend>();
-				saleSends.add(sendItems.get(0).getSend());
-			}
-			return sendItems.get(0).getSend();
-		} else {
-			throw new IllegalArgumentException();
-		}
-	}
-
-	@Override
-	public void onSaleSendChange(List<SaleSendItem> sendItems) {
-		List<Long> ids = new ArrayList<>();
-		for (SaleSendItem item : sendItems) {
-			saleSendItemDao.updateByReply(item.getId(), item.getQty(), item.getReplyRemark());
-			if (item.getNoticeId() != null) {
-				purchaseNoticeDao.updateBySend(item.getNoticeId());
-                updateNoticeStatus(item.getNoticeId());
-				ids.add(item.getNoticeId());
-			}
-		}
-		List<PurchaseNotice> notices = purchaseNoticeDao.findAll(ids);
-		// 买家拒收之后给卖家发消息
-		ContextUtils.publishEvent(new SaleSendRefuseReleaseEvent(SaleSendItem.distinct(sendItems)));
-	}
-
-    /**
-     * 更新发货提醒状态
-     *
-     * @param noticeId 发货提醒id
-     */
-    private void updateNoticeStatus(Long noticeId) {
-        PurchaseNotice notice = purchaseNoticeDao.findOne(noticeId);
-        if (notice.getEndQty() < notice.getQty() && notice.getStatus() == Status.REPLIED.value()) {
-            purchaseNoticeDao.updateStatus(notice.getId(), (short) Status.NOT_REPLY.value());
-        }
-    }
-
-    @Override
-	public List<PurchaseNotice> findById(Long[] ids) {
-		return purchaseNoticeDao.findUnEndByIds(ids);
-	}
-
-	@Override
-	public void onVerify(List<SaleSendItemVerify> verifies) {
-		verifies = saleSendItemVerifyDao.save(verifies);
-		List<SaleSendItem> saleSendItems = new ArrayList<>();
-		for (SaleSendItemVerify verify : verifies) {
-			saleSendItemDao.updateByVerify(verify.getSendItemId());
-			updateVerifyStatus(verify.getSendItemId());
-			SaleSendItem item = saleSendItemDao.findOne(verify.getSendItemId());
-			saleSendItems.add(item);
-		}
-		// 买家收料之后给卖家发消息
-		ContextUtils.publishEvent(new SaleSendAcceptReleaseEvent(SaleSendItem.distinct(saleSendItems)));
-	}
-
-	@Override
-	public void unVerify(List<SaleSendItemVerify> verifies) {
-		saleSendItemVerifyDao.delete(verifies);
-		for (SaleSendItemVerify verify : verifies) {
-			saleSendItemDao.updateByVerify(verify.getSendItemId());
-			updateVerifyStatus(verify.getSendItemId());
-		}
-	}
-
-	/**
-	 * 更新发货单的收料状态
-	 * 
-	 * @param sendItemId
-	 */
-	private void updateVerifyStatus(Long sendItemId) {
-		SaleSendItem sendItem = saleSendItemDao.findOne(sendItemId);
-		int totalCount = saleSendItemDao.getTotalCountBySendId(sendItem.getSend().getId());
-		int verifyCount = saleSendItemDao.getFullVerifyCountBySendId(sendItem.getSend().getId());
-		if (verifyCount == totalCount) {
-			sendItem.getSend().setVerifystatus(Constant.YES);
-		} else {
-			sendItem.getSend().setVerifystatus(Constant.NO);
-		}
-		saleSendItemDao.save(sendItem);
-	}
-
-	@Override
-	public SaleSendAll findSaleSendById(Long id) {
-		SaleSendAll send = saleSendAllDao.findOne(id);
-		if (send == null) {
-			throw new IllegalOperatorException("您查找的发货单不存在!");
-		}
-		return send;
-	}
-
-	@Override
-	public Long getAllCount() {
-		return purchaseNoticeDao.countByVendUU(SystemSession.getUser().getEnterprise().getUu());
-	}
-
-	@Override
-	public Long getAllNoticeCountByEnUU(Long enUU) {
-		return purchaseNoticeDao.getCountByEnUUAndStatus(enUU, (short) Status.REPLIED.value());
-	}
-
-	@Override
-	public Long getTodoNoticeCountByEnUU(Long enUU) {
-		return purchaseNoticeDao.getCountByEnUUAndStatus(enUU, (short) Status.NOT_REPLY.value());
-	}
-
-	@Override
-	public Long getWatingNoticeCountByEnUU(Long enUU) {
-		return purchaseNoticeDao.getWatingCountByEnUUAndStatus(enUU);
-	}
-
-	@Override
-	public Long getEndNoticeCountByEnUU(Long enUU) {
-		return purchaseNoticeDao.getEndCountByEnUUAndStatus(enUU);
-	}
-
-	@Override
-	public void updateBarCode(Long id, Double packageQty, Double outBoxQty) {
-		saleSendItemDao.updatePackageQty(id, packageQty, outBoxQty);
-	}
-
-	@Override
-	@Transactional(rollbackFor = Exception.class)
-	public void generateBarcodes(Long id, List<SaleSendItem> sendItem, Long enUU) {
-		SaleSend saleSend = saleSendDao.findOne(id);
-		Long custUU = saleSend.getCustUU();
-		// 获取条码生成规则,判断规则是否审核,已审核,根据规则拼接
-		B2bCodeSet barcodeSet = b2bCodeSetDao.findByEnUUAndType(custUU, "BATCH");
-        // 条码生成规则不为空,已审核
-		if (barcodeSet != null) {
-			if (!"AUDITED".equals(barcodeSet.getStatuscode())) {
-				throw new IllegalOperatorException("请先审核条码生成规则!");
-			}
-		} else {
-			throw new IllegalOperatorException("请先维护条码生成规则!");
-		}
-		// 是否维护包装箱生成规则
-		B2bCodeSet outboxSet = b2bCodeSetDao.findByEnUUAndType(custUU, "PACK");
-		if (outboxSet == null) {
-			throw new IllegalOperatorException("请先维护外箱生成规则!");
-		}
-		String AUDITED_STATUS = "AUDITED";
-		if (!AUDITED_STATUS.equals(outboxSet.getStatuscode())) {
-			throw new IllegalOperatorException("请先审核外箱生成规则!");
-		}
-		for (SaleSendItem item : sendItem) {
-			// 清空原有箱号,箱号明细,条码
-			List<BarSendNotify> bsNotify = barSendNotifyDao.findBySiid(item.getId());
-			for (BarSendNotify notify : bsNotify) {
-				if (notify.getOutboxid() != null) {
-					BarPackage barPackage = barPackageDao.findOne(notify.getOutboxid());
-					if (barPackage != null) {
-						barPackageDetailDao.delete(barPackage.getDetail());
-						barPackageDao.delete(barPackage);
-					}
-				}
-			}
-			barSendNotifyDao.deleteAllBySiid(item.getId());
-			// 获取明细,最小包装数,外箱容量等信息
-			SaleSendItem sItem = saleSendItemDao.findOne(item.getId());
-			double pQty = sItem.getPackageQty(), bQty = sItem.getOutBoxQty(), qty = sItem.getQty();
-			String bar_code, pr_code = sItem.getOrderItem().getProduct().getCode();
-            // 最小包装数件数
-			int aNum = (int) (qty / pQty);
-			double aqtyA = (new BigDecimal(Double.toString(qty))).subtract(new BigDecimal(Double.toString(aNum * pQty)))
-					.doubleValue(); // 小于最小包装数的
-            // ERP中对应的物料ID
-			String sourceId = String.valueOf(sItem.getOrderItem().getProduct().getSourceId());
-			// 获取是否勾选了生成外箱
-			if (item.getIsOutboxChecked()) {
-				// 判断外箱容量是否为最小包装数的整数倍
-				String out_boxcode = null;
-				Long pa_id = null;
-                // 每箱件数
-				int sumJ = (int) (bQty / pQty);
-				if (sumJ * pQty != bQty) {
-					throw new IllegalOperatorException("序号:" + sItem.getNumber() + ",外箱容量不是最小包装数的整数倍!");
-				}
-                // 整数箱数
-				int bNum = (int) (qty / bQty);
-                // 零散数
-				double bqtyB = (new BigDecimal(Double.toString(qty)))
-						.subtract(new BigDecimal(Double.toString(bNum * bQty))).doubleValue();
-				if (aNum >= 1) {
-					for (int i = 0; i < aNum; i++) {
-						if (i % sumJ == 0) {
-							BarPackage barPackage = new BarPackage();
-							out_boxcode = outboxMethod(sourceId, outboxSet);
-							barPackage.setCustUU(custUU);
-							barPackage.setEnUU(enUU);
-							barPackage.setOutboxcode(out_boxcode);
-							barPackage.setProdcode(pr_code);
-							barPackage.setLevel((long) 1);
-							barPackage.setPackdate(new Date());
-							barPackage.setSendStatus((short) Status.NOT_UPLOAD.value());
-							if (i >= aNum - sumJ && bqtyB > 0) {
-								barPackage.setPackageqty(aNum - sumJ);
-								barPackage.setTotalqty(bqtyB);
-							} else {
-								barPackage.setPackageqty(sumJ);
-								barPackage.setTotalqty(bQty);
-							}
-							barPackageDao.save(barPackage);
-							barPackage = barPackageDao.findByOutboxcodeAndEnUU(out_boxcode, enUU);
-							pa_id = barPackage.getId();
-						}
-						bar_code = barcodeMethod(sourceId, barcodeSet);
-						insertBarPd(pa_id, out_boxcode, pQty, bar_code, sItem, enUU);
-					}
-				}
-				if (aqtyA > 0) {
-					bar_code = barcodeMethod(sourceId, barcodeSet);
-					insertBarPd(pa_id, out_boxcode, aqtyA, bar_code, sItem, enUU);
-				}
-				logger.log("发货单", "生成条码和箱号",
-						"发货单:" + sItem.getSend().getCode() + ",明细行序号:" + sItem.getNumber() + ",生成条码和箱号!");
-			} else {
-				if (aNum >= 1) {
-					for (int i = 0; i < aNum; i++) {
-						insertBar(sItem, pQty, enUU, barcodeSet);
-					}
-				}
-				if (aqtyA > 0) {
-					insertBar(sItem, aqtyA, enUU, barcodeSet);
-				}
-				logger.log("发货单", "生成条码",
-						"发货单:" + sItem.getSend().getCode() + ",明细行序号:" + sItem.getNumber() + ",生成条码!");
-			}
-		}
-	}
-
-	private String lpad(int length, String number) {
-		while (number.length() < length) {
-			number = "0" + number;
-		}
-		number = number.substring(number.length() - length, number.length());
-		return number;
-	}
-
-    /**
-     *   YYMMDD 日期格式
-     */
-    final String YYMMDD_PATTERN = "YYMMDD";
-
-    /**
-     * YYMM日期格式
-     */
-    final String YYMM_PATTERN= "YYMM";
-
-    /**
-     * MMDD日期格式
-     */
-    final String MMDD_PATTERN = "MMDD";
-
-    /**
-     * 默认数量
-     */
-    final Integer NULL_COUNT = 0;
-
-    /**
-     * 生成条码号
-     *
-     * @param pr_id
-     * @param barcodeSet
-     * @return
-     */
-	public String barcodeMethod(String pr_id, B2bCodeSet barcodeSet) {
-		StringBuffer code = new StringBuffer();
-		String date = "0";
-		String formPlat = barcodeSet.getFromplat(), dataStr = barcodeSet.getDatestr(),
-				maxdate = barcodeSet.getMaxdate();
-		int lennum = barcodeSet.getLennum().intValue(), maxnum = barcodeSet.getMaxnum().intValue(),
-				lenprid = barcodeSet.getLenprid().intValue();
-		// 拼接
-        // 平台标识
-		code.append(formPlat);
-        // PR_ID物料ID的长度
-		code.append(lpad(lenprid, pr_id));
-		if (YYMMDD_PATTERN.equals(dataStr)) {
-			SimpleDateFormat YMD = new SimpleDateFormat("yyMMdd");
-			date = YMD.format(new Date());
-		} else if (YYMM_PATTERN.equals(dataStr)) {
-			SimpleDateFormat YM = new SimpleDateFormat("yyMM");
-			date = YM.format(new Date());
-		} else if (MMDD_PATTERN.equals(dataStr)) {
-			SimpleDateFormat MD = new SimpleDateFormat("MMdd");
-			date = MD.format(new Date());
-		}
-		code.append(date);
-		barcodeSet.setMaxdate(date);
-        // 如果当前日期大于上次日期
-		if (!("").equals(maxdate) && null != maxdate && (!NULL_COUNT.equals(date))
-				&& (Integer.valueOf(maxdate) > Integer.valueOf(date))) {
-            // 流水重新开始
-			code.append(lpad(lennum, "1"));
-            // 流水号增加1
-			barcodeSet.setMaxnum((long) 2);
-		} else {
-            // 当前流水号
-			code.append(lpad(lennum, String.valueOf(maxnum)));
-            // 流水号增加1
-			barcodeSet.setMaxnum((long) (maxnum + 1));
-		}
-		b2bCodeSetDao.save(barcodeSet);
-		return code.toString();
-	}
-
-    /**
-     * 生成外箱号
-     *
-     * @param pr_id
-     * @param barcodeSet
-     * @return
-     */
-	public String outboxMethod(String pr_id, B2bCodeSet barcodeSet) {
-		StringBuffer code = new StringBuffer();
-		String date = "0";
-		String formPlat = barcodeSet.getFromplat(), dataStr = barcodeSet.getDatestr(),
-				maxdate = barcodeSet.getMaxdate();
-		int lennum = barcodeSet.getLennum().intValue(), maxnum = barcodeSet.getMaxnum().intValue(),
-				lenprid = barcodeSet.getLenprid().intValue();
-        // 平台标识
-		code.append(formPlat);
-        // PR_ID物料ID的长度
-		code.append(lpad(lenprid, pr_id));
-		if (YYMMDD_PATTERN.equals(dataStr)) {
-			SimpleDateFormat YMD = new SimpleDateFormat("yyMMdd");
-			date = YMD.format(new Date());
-		} else if (YYMM_PATTERN.equals(dataStr)) {
-			SimpleDateFormat YM = new SimpleDateFormat("yyMM");
-			date = YM.format(new Date());
-		} else if (MMDD_PATTERN.equals(dataStr)) {
-			SimpleDateFormat MD = new SimpleDateFormat("MMdd");
-			date = MD.format(new Date());
-		}
-		code.append(date);
-		barcodeSet.setMaxdate(date);
-        // 如果当前日期大于上次日期
-		if (!("").equals(maxdate) && null != maxdate && (!NULL_COUNT.equals(date))
-				&& (Integer.valueOf(maxdate) > Integer.valueOf(date))) {
-            // 流水重新开始
-			code.append(lpad(lennum, "1"));
-            // 流水号增加1
-			barcodeSet.setMaxnum((long) 2);
-		} else {
-            // 当前流水号
-			code.append(lpad(lennum, String.valueOf(maxnum)));
-            // 流水号增加1
-			barcodeSet.setMaxnum((long) (maxnum + 1));
-		}
-		b2bCodeSetDao.save(barcodeSet);
-		return code.toString();
-	}
-
-	private void insertBarPd(Long pa_id, String out_boxcode, double qty, String bar_code, SaleSendItem sItem,
-			Long enUU) {
-		BarSendNotify barSendNotify = new BarSendNotify();
-		barSendNotify.setBarcode(bar_code);
-		barSendNotify.setOutboxcode(out_boxcode);
-		barSendNotify.setOutboxid(pa_id);
-		barSendNotify.setPrintstatus("0");
-		barSendNotify.setProdcode(sItem.getOrderItem().getProduct().getCode());
-		barSendNotify.setProdid(sItem.getOrderItem().getProduct().getSourceId());
-		barSendNotify.setQty(qty);
-		barSendNotify.setSendStatus((short) Status.NOT_UPLOAD.value());
-		SaleSendItemAll sendItem = new SaleSendItemAll();
-		sendItem.setId(sItem.getId());
-		barSendNotify.setSaleSendItem(sendItem);
-		barSendNotify.setSinumber(sItem.getNumber());
-		barSendNotify.setSscode(sItem.getSend().getCode());
-		barSendNotify.setSsid(sItem.getSend().getId());
-		barSendNotify.setVendcode(enUU);
-        // 保存发货单明细中的条码
-		barSendNotifyDao.save(barSendNotify);
-
-		BarPackageDetail barPackageDetail = new BarPackageDetail();
-		barPackageDetail.setBarcode(bar_code);
-		barPackageDetail.setBarpackage(barPackageDao.findOne(pa_id));
-		barPackageDetail.setInnerqty(qty);
-        // 保存包装箱明细
-		barPackageDetailDao.save(barPackageDetail);
-	}
-
-	/**
-	 * 发货单明细条码明细生成
-	 * 
-	 * @param sItem
-	 * @param qty
-	 * @param enUU
-	 * @param barcodeSet
-	 */
-	private void insertBar(SaleSendItem sItem, double qty, Long enUU, B2bCodeSet barcodeSet) {
-		BarSendNotify barSendNotify = new BarSendNotify();
-		String bar_code = barcodeMethod(String.valueOf(sItem.getOrderItem().getProductId()), barcodeSet);
-		barSendNotify.setBarcode(bar_code);
-		barSendNotify.setPrintstatus("0");
-		barSendNotify.setProdcode(sItem.getOrderItem().getProduct().getCode());
-		barSendNotify.setProdid(sItem.getOrderItem().getProduct().getSourceId());
-		barSendNotify.setQty(qty);
-		barSendNotify.setSendStatus((short) Status.NOT_UPLOAD.value());
-		SaleSendItemAll sendItem = new SaleSendItemAll();
-		sendItem.setId(sItem.getId());
-		barSendNotify.setSaleSendItem(sendItem);
-		barSendNotify.setSinumber(sItem.getNumber());
-		barSendNotify.setSscode(sItem.getSend().getCode());
-		barSendNotify.setSsid(sItem.getSend().getId());
-		barSendNotify.setVendcode(enUU);
-        // 保存发货单明细中的条码
-		barSendNotifyDao.save(barSendNotify);
-	}
-
-	@Override
-	public List<Map<String, Object>> getPrintBarcodes(Long lpsId, List<SaleSendItem> sendItem, Long enUU) {
-		List<Map<String, Object>> list2 = new ArrayList<Map<String, Object>>();
-		String va = "";
-		String regex = "\\{(?:[A-Za-z][A-Za-z0-9_]*)\\}";
-		BarLabelPrintSetting setting = barLPSetingDao.findOne(lpsId);
-		// 获取打印明细的设置参数
-		List<Map<String, Object>> parameter = commonDao.queryForList(
-				"select la_pagesize, lp_id,lp_valuetype,lp_encode,lp_name,lp_leftrate,lp_toprate,lp_width,lp_ifshownote,lp_font,lp_size,lp_notealignjustify,lp_height from bar$labelParameter left join bar$label on la_id=lp_laid where la_id="
-						+ setting.getLabel().getId());
-		for (SaleSendItem item : sendItem) {
-			List<BarSendNotify> bars = barSendNotifyDao.findBySiid(item.getId());
-			List<Map<String, Object>> list = new ArrayList<Map<String, Object>>();
-			for (BarSendNotify barcode : bars) {
-				List<Map<String, Object>> list1 = new ArrayList<Map<String, Object>>();
-				Map<String, Object> mp1 = new HashMap<String, Object>();
-				va = setting.getSql().replaceAll(regex, String.valueOf(barcode.getId()));
-				List<Map<String, Object>> listData = commonDao.queryForList(va);
-				for (Map<String, Object> mapD : listData) {
-					for (Map<String, Object> param : parameter) {
-						mp1 = param;
-						mp1.put("value", mapD.get(param.get("lp_name")));
-						list1.add(mp1);
-					}
-				}
-				Map<String, Object> mp = new HashMap<String, Object>();
-				mp.put("store", list1);
-				list.add(mp);
-			}
-			Map<String, Object> mp = new HashMap<String, Object>();
-			mp.put("si_id", item.getId());
-			mp.put("pagesize", parameter.get(0).get("la_pagesize"));
-			mp.put("data", list);
-			list2.add(mp);
-		}
-		return list2;
-	}
-
-	@Override
-	public List<BarLabelPrintSetting> getPrintTemplate(Long id, String type) {
-		SaleSend saleSend = saleSendDao.findOne(id);
-		Long custUU = saleSend.getCustUU();
-		String caller;
-		String BAR_TYPE = "Bar";
-		if (BAR_TYPE.equals(type)) {
-			caller = "B2B!BarPrint";
-		} else {
-			caller = "B2B!OutBoxPrint";
-		}
-		List<BarLabelPrintSetting> setting = barLPSetingDao.findByEnUUAndCaller(custUU, caller);
-		if (setting.size() > 0) {
-			return setting;
-		} else {
-			throw new IllegalOperatorException("未维护相关的打印模板!");
-		}
-	}
-
-	@Override
-	public List<Map<String, Object>> getSPrintBarcode(Long lpsId, Long bsnId) {
-		List<Map<String, Object>> list = new ArrayList<Map<String, Object>>();
-		String va = "";
-		String regex = "\\{(?:[A-Za-z][A-Za-z0-9_]*)\\}";
-		BarLabelPrintSetting setting = barLPSetingDao.findOne(lpsId);
-		// 获取打印明细的设置参数
-		List<Map<String, Object>> parameter = commonDao.queryForList(
-				"select la_pagesize, lp_id,lp_valuetype,lp_encode,lp_name,lp_leftrate,lp_toprate,lp_width,lp_ifshownote,lp_font,lp_size,lp_notealignjustify,lp_height from bar$labelParameter left join bar$label on la_id=lp_laid where la_id="
-						+ setting.getLabel().getId());
-		Map<String, Object> map = new HashMap<String, Object>();
-		va = setting.getSql().replaceAll(regex, String.valueOf(bsnId));
-		List<Map<String, Object>> listData = commonDao.queryForList(va);
-		for (Map<String, Object> mapD : listData) {
-			for (Map<String, Object> param : parameter) {
-				map = param;
-				map.put("value", mapD.get(param.get("lp_name")));
-				list.add(map);
-			}
-		}
-		return list;
-	}
-
-	@Override
-	public void updatePrintStatus(List<SaleSendItem> saleSendItems) {
-		List<SaleSendItem> items = new ArrayList<SaleSendItem>();
-		if (!CollectionUtils.isEmpty(saleSendItems)) {
-			for (SaleSendItem item : saleSendItems) {
-				item = saleSendItemDao.findOne(item.getId());
-				if (item != null) {
-					item.setBarPrintStatus((long) 1);
-					items.add(item);
-				}
-			}
-		}
-		saleSendItemDao.save(items);
-	}
-
-    @Override
-    public void printCount(Long id) {
-        SaleSendAll send = saleSendAllDao.findOne(id);
-        if (null == send.getPrint()) {
-        	send.setPrint((short) 1);
-		} else {
-			send.setPrint((short) (send.getPrint() + 1));
-		}
-        saleSendAllDao.save(send);
-    }
-
-	@Override
-	public Map<String, Integer> getNoticeCount(String category) {
-		List<Long> unreadIds = getUnreadIds(category);
-		Map<String, Integer> map = new HashMap<>(3);
-		// 已回复数量
-		Integer repliedCount = 0;
-		// 未回复数量
-		Integer notReplyCount = 0;
-		if (CollectionUtils.isEmpty(unreadIds)){
-			return map;
-		}
-		// 超过1000条需要拆分,不然会报错
-		if (unreadIds.size() > MAX_SIZE) {
-			List<List<Long>> idsArray = SplitArray.splitAry(unreadIds, SplitArray.QUERY_MAX_NUMBER);
-			for (List<Long> ids : idsArray) {
-				// 超过100不再查询,页面显示99+,减少服务器负担
-				if (repliedCount < 100) {
-					repliedCount = repliedCount + purchaseNoticeDao.findRepliedId(ids).size();
-				}
-				if (notReplyCount < 100) {
-					notReplyCount = notReplyCount + purchaseNoticeDao.findNotReplyId(ids).size();
-				}
-				// 当需要查询的数量大于99时停止循环,减少不必要的操作
-				if (notReplyCount > 99 && repliedCount > 99) {
-					break;
-				}
-			}
-		} else {
-			repliedCount = repliedCount + purchaseNoticeDao.findRepliedId(unreadIds).size();
-			notReplyCount = notReplyCount + purchaseNoticeDao.findNotReplyId(unreadIds).size();
-		}
-		map.put("replied", repliedCount);
-		map.put("notReply", notReplyCount);
-		map.put("all", repliedCount + notReplyCount);
-		return map;
-	}
-
-    @Override
-    public SPage<PurchaseNotice> findDoneNoticesByPageInfo(final PageInfo pageInfo, String keyword, final SearchFilter filter) {
-        Page<PurchaseNotice> notices = purchaseNoticeDao.findAll(new Specification<PurchaseNotice>() {
-            @Override
-            public Predicate toPredicate(Root<PurchaseNotice> root, CriteriaQuery<?> query, CriteriaBuilder builder) {
-                if (filter != null) {
-                    if (!CollectionUtils.isEmpty(filter.getDistribute())) {
-                        pageInfo.expression(PredicateUtils.in("enUU", filter.getDistribute(), false));
-                    }
-                    if (filter.getFromDate() != null) {
-                        pageInfo.expression(PredicateUtils.gte("date", new Date(filter.getFromDate()), false));
-                    }
-                    if (filter.getEndDate() != null) {
-                        pageInfo.expression(PredicateUtils.lte("date", new Date(filter.getEndDate()), false));
-                    }
-                }
-                pageInfo.expression(
-                        PredicateUtils.or(PredicateUtils.isNull("end"), PredicateUtils.ne("end", Constant.YES, false)));
-                return query.where(pageInfo.getPredicates(root, query, builder)).getRestriction();
-            }
-        }, pageInfo);
-        return SPageUtils.covertSPage(notices);
-    }
-
-    /**
-     * 查询未阅读数量
-     *
-     * @param category 表名
-     * @return
-     */
-    @Override
-	public List<Long> getUnreadIds(String category) {
-		return userOrderDao.getUnreadIds(SystemSession.getUser().getEnterprise().getUu(), SystemSession.getUser().getUserUU(), "purc$notice", category);
-	}
-
-    /**
-     * 查询发货提醒
-     *
-     * @param pageInfo 分页信息
-     * @param keyword  关键字
-     * @param filter   过滤条件
-     * @return
-     */
-    @Override
-    public SPage<PurchaseNotice> findAllNoticesByPageInfo(final PageInfo pageInfo, String keyword, final SearchFilter filter) {
-        Page<PurchaseNotice> notices = purchaseNoticeDao.findAll(new Specification<PurchaseNotice>() {
-            @Override
-            public Predicate toPredicate(Root<PurchaseNotice> root, CriteriaQuery<?> query, CriteriaBuilder builder) {
-                if (filter != null) {
-                    if (!CollectionUtils.isEmpty(filter.getDistribute())) {
-                        pageInfo.expression(PredicateUtils.in("enUU", filter.getDistribute(), false));
-                    }
-                    if (filter.getFromDate() != null) {
-                        pageInfo.expression(PredicateUtils.gte("date", new Date(filter.getFromDate()), false));
-                    }
-                    if (filter.getEndDate() != null) {
-                        pageInfo.expression(PredicateUtils.lte("date", new Date(filter.getEndDate()), false));
-                    }
-                }
-                pageInfo.expression(PredicateUtils.isNull("end"));
-                return query.where(pageInfo.getPredicates(root, query, builder)).getRestriction();
-            }
-        }, pageInfo);
-        return SPageUtils.covertSPage(notices);
-    }
-
-    @Override
-	@Transactional(rollbackFor = Exception.class)
-	public void setReadByOrder(String category, Long[] sourceId) {
-		userOrderDao.setReadStatus(SystemSession.getUser().getEnterprise().getUu(), SystemSession.getUser().getUserUU(), "purc$notice", category, (short) Status.READ.value(), sourceId);
-	}
-
-	@Override
-	@Transactional(rollbackFor = Exception.class)
-	public Integer setReadByState(String category) {
-		List<Long> unreadIds = getUnreadIds(category);
-		Integer deleteCount = 0;
-		if (CollectionUtils.isEmpty(unreadIds)){
-			return deleteCount;
-		}
-		List<Long> repliedIds = null;
-		if (unreadIds.size() > MAX_SIZE) {
-			List<List<Long>> idsArray = SplitArray.splitAry(unreadIds, SplitArray.QUERY_MAX_NUMBER);
-			for (List<Long> ids : idsArray) {
-				repliedIds = purchaseNoticeDao.findRepliedId(ids);
-				if (repliedIds.size() != 0) {
-					deleteCount = deleteCount + userOrderDao.delete(SystemSession.getUser().getEnterprise().getUu(),
-							SystemSession.getUser().getUserUU(), "purc$notice", category, repliedIds.toArray(new Long[repliedIds.size()]));
-				}
-			}
-		} else {
-			repliedIds = purchaseNoticeDao.findRepliedId(unreadIds);
-			if (repliedIds.size() != 0) {
-				deleteCount = deleteCount + userOrderDao.delete(SystemSession.getUser().getEnterprise().getUu(),
-						SystemSession.getUser().getUserUU(), "purc$notice", category, repliedIds.toArray(new Long[repliedIds.size()]));
-			}
-		}
-		return deleteCount;
-	}
-
-    /**
-     * 通过ids查询发货信息
-     *
-     * @param ids
-     * @return
-     */
-    @Override
-    public List<PurchaseNotice> findByIds(List<Long> ids) {
-        return purchaseNoticeDao.findAll(ids);
-    }
-}
+package com.uas.platform.b2b.service.impl;
+
+import com.uas.platform.b2b.core.util.ContextUtils;
+import com.uas.platform.b2b.core.util.SplitArray;
+import com.uas.platform.b2b.core.util.ThreadTask;
+import com.uas.platform.b2b.dao.*;
+import com.uas.platform.b2b.erp.model.PurchaseNotify;
+import com.uas.platform.b2b.event.SaleSendAcceptReleaseEvent;
+import com.uas.platform.b2b.model.*;
+import com.uas.platform.b2b.ps.service.PersonalProductService;
+import com.uas.platform.b2b.search.SearchService;
+import com.uas.platform.b2b.service.PurchaseNoticeService;
+import com.uas.platform.b2b.service.UserService;
+import com.uas.platform.b2b.support.*;
+import com.uas.platform.core.exception.IllegalOperatorException;
+import com.uas.platform.core.logging.BufferedLoggerManager;
+import com.uas.platform.core.model.Constant;
+import com.uas.platform.core.model.PageInfo;
+import com.uas.platform.core.model.Status;
+import com.uas.platform.core.persistence.criteria.PredicateUtils;
+import com.uas.search.b2b.model.SPage;
+import org.apache.commons.collections.CollectionUtils;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.data.domain.Page;
+import org.springframework.data.jpa.domain.Specification;
+import org.springframework.stereotype.Service;
+import org.springframework.transaction.annotation.Transactional;
+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.math.BigDecimal;
+import java.text.SimpleDateFormat;
+import java.util.*;
+
+/**
+ * 发货提醒
+ *
+ * @author US50
+ */
+@Service
+public class PurchaseNoticeServiceImpl implements PurchaseNoticeService {
+
+	private final static UsageBufferedLogger logger = BufferedLoggerManager.getLogger(UsageBufferedLogger.class);
+
+	@Autowired
+	private PurchaseNoticeDao purchaseNoticeDao;
+
+	@Autowired
+	private SaleSendDao saleSendDao;
+
+	@Autowired
+	private SaleSendItemDao saleSendItemDao;
+
+	@Autowired
+	private SaleSendAllDao saleSendAllDao;
+
+	@Autowired
+	private SaleSendItemVerifyDao saleSendItemVerifyDao;
+
+	@Autowired
+	private B2bCodeSetDao b2bCodeSetDao;
+
+	@Autowired
+	private BarPackageDao barPackageDao;
+
+	@Autowired
+	private BarSendNotifyDao barSendNotifyDao;
+
+	@Autowired
+	private BarPackageDetailDao barPackageDetailDao;
+
+	@Autowired
+	private CommonDao commonDao;
+
+	@Autowired
+	private BarLPSetingDao barLPSetingDao;
+
+	@Autowired
+	private SearchService searchService;
+
+	@Autowired
+	private DistributeDao distributeDao;
+
+	@Autowired
+	private  RoleDao roleDao;
+
+	@Autowired
+	private  UserOrderDao userOrderDao;
+
+	@Autowired
+	private  UserDao userDao;
+
+	@Autowired
+	private VendorDao vendorDao;
+
+	@Autowired
+    private PersonalProductService personalProductService;
+
+	@Autowired
+	private PurchaseNoticeEndDao noticeEndDao;
+
+	@Autowired
+	private EnterpriseDao enterpriseDao;
+
+	@Autowired
+    private UserService userService;
+
+    /**
+     * 最多数量
+     */
+    final Integer MAX_SIZE = 1000;
+
+	@Override
+	public List<PurchaseNotice> save(List<PurchaseNotice> notices) {
+		notices = purchaseNoticeDao.save(notices);
+		saveUserOrders(notices);
+		return notices;
+	}
+
+	private void saveUserOrders(final List<PurchaseNotice> notices) {
+
+		ThreadTask.getInstance().execute(new Runnable() {
+			@Override
+			public void run() {
+                /* 添加供应商的阅读记录*/
+				for(PurchaseNotice notice : notices) {
+					Set<Long> userUUs = new HashSet<>();
+					// 添加管理员
+					List<Role> roles = roleDao.findByEnUUAndIssys(notice.getVendUU(), Constant.YES);
+					if (!CollectionUtils.isEmpty(roles)) {
+						List<User> admins = userDao.findByRole(roles.get(0).getId());
+						for (User admin : admins) {
+							if (!userUUs.contains(admin.getUserUU())) {
+								userUUs.add(admin.getUserUU());
+							}
+						}
+					}
+					List<Vendor> vendors = vendorDao.findByMyEnUUAndVendUU(notice.getEnUU(), notice.getVendUU());
+					// 查找有权限的用户
+					if (!CollectionUtils.isEmpty(vendors)) {
+						Long vendorId = vendors.get(0).getId();
+						List<Distribute> distributes = distributeDao.findByVendorId(vendorId);
+						if (!CollectionUtils.isEmpty(distributes)) {
+							for (Distribute distribute : distributes) {
+								if (!userUUs.contains(distribute.getUserUU())) {
+									userUUs.add(distribute.getUserUU());
+								}
+							}
+						}
+					}
+					UserOrders userOrders;
+					List<UserOrders> list = new ArrayList<>();
+					for (Long userUU : userUUs) {
+						if (userUU == null) {
+							continue;
+						}
+						userOrders = new UserOrders(userUU, notice.getVendUU(), notice.getId(), "sale", "purc$notice");
+						list.add(userOrders);
+					}
+
+                    /* 添加采购员的阅读记录*/
+                    if (notice.getOrderItem().getOrder().getUserUU() != null) {
+                        userOrders = new UserOrders(notice.getOrderItem().getOrder().getUserUU(), notice.getEnUU(), notice.getId(), "purc", "purc$notice");
+						userOrders.setReadStatus((short) Status.READ.value());
+                        list.add(userOrders);
+                    }
+					userOrderDao.save(list);
+				}
+			}
+		});
+	}
+
+	@Override
+	public Page<PurchaseNotice> findAllByPageInfo(final PageInfo pageInfo, final String keyword, final Long fromDate,
+			final Long endDate, final SearchFilter filter) {
+		return purchaseNoticeDao.findAll(new Specification<PurchaseNotice>() {
+			@Override
+			public Predicate toPredicate(Root<PurchaseNotice> root, CriteriaQuery<?> query, CriteriaBuilder builder) {
+				if (filter != null) {
+					if (!CollectionUtils.isEmpty(filter.getDistribute())) {
+						pageInfo.expression(PredicateUtils.in("enUU", filter.getDistribute(), false));
+					}
+				}
+				if (StringUtils.hasText(keyword)) {
+					List<Object> lists = new ArrayList<>();
+					List<PurchaseNotice> listss = searchService.searchPurchaseNoticeIds(keyword, null).getContent();
+					for (PurchaseNotice list : listss) {
+						lists.add(list.getId());
+					}
+					pageInfo.expression(PredicateUtils.in("id", lists, false));
+				}
+				if (fromDate != null) {
+					pageInfo.expression(PredicateUtils.in("id", purchaseNoticeDao.findByFromDate(
+							SystemSession.getUser().getEnterprise().getUu(), new Date(fromDate)), false));
+				}
+				if (endDate != null) {
+					pageInfo.expression(PredicateUtils.in("id", purchaseNoticeDao
+							.findByEndDate(SystemSession.getUser().getEnterprise().getUu(), new Date(endDate)), false));
+				}
+				return query.where(pageInfo.getPredicates(root, query, builder)).getRestriction();
+			}
+		}, pageInfo);
+	}
+
+    @Override
+	public Page<PurchaseNotice> findDoneByPageInfo(final PageInfo pageInfo, final String keyword, final Long fromDate,
+			final Long endDate) {
+		return purchaseNoticeDao.findAll(new Specification<PurchaseNotice>() {
+			@Override
+			public Predicate toPredicate(Root<PurchaseNotice> root, CriteriaQuery<?> query, CriteriaBuilder builder) {
+				pageInfo.filter("status", Status.REPLIED.value());
+				pageInfo.expression(
+						PredicateUtils.or(PredicateUtils.isNull("end"), PredicateUtils.ne("end", Constant.YES, false)));
+				if (StringUtils.hasText(keyword)) {
+					List<Object> lists = new ArrayList<>();
+					List<PurchaseNotice> listss = searchService.searchPurchaseNoticeIds(keyword, null).getContent();
+					for (PurchaseNotice list : listss) {
+						lists.add(list.getId());
+					}
+					pageInfo.expression(PredicateUtils.in("id", lists, false));
+				}
+				if (fromDate != null) {
+					pageInfo.expression(PredicateUtils.in("id", purchaseNoticeDao.findByFromDate(
+							SystemSession.getUser().getEnterprise().getUu(), new Date(fromDate)), false));
+				}
+				if (endDate != null) {
+					pageInfo.expression(PredicateUtils.in("id", purchaseNoticeDao
+							.findByEndDate(SystemSession.getUser().getEnterprise().getUu(), new Date(endDate)), false));
+				}
+				return query.where(pageInfo.getPredicates(root, query, builder)).getRestriction();
+			}
+		}, pageInfo);
+	}
+
+	@Override
+	public PurchaseNotice findById(Long id) {
+		return purchaseNoticeDao.findOne(id);
+	}
+
+	@Override
+	public void send(List<SaleSendItem> sendItems) {
+		saleSendItemDao.save(sendItems);
+		for (SaleSendItem item : sendItems) {
+			if (item.getNoticeId() != null) {
+			    Double sendQty = saleSendItemDao.getSendQtyByNoticeId(item.getNoticeId());
+				purchaseNoticeDao.updateBySend(item.getNoticeId(), sendQty);
+                logger.log("更新发货提醒发货数量", "ERP主动收料通知单/上传发货单更新发货提醒已发货数量",
+                        "发货单: " + item.getNoticeId() + ",更新数量: " + sendQty);
+				// 更新发货状态
+				updateNoticeStatus(item.getNoticeId());
+			}
+		}
+	}
+
+	@Override
+	public List<SaleSendItem> findSendById(long noticeId) {
+		return saleSendItemDao.findByNoticeId(noticeId);
+	}
+
+	@Override
+	public List<PurchaseNotice> findNotUploadNotice() {
+		return purchaseNoticeDao.findByVendUUAndSendStatus(SystemSession.getUser().getEnterprise().getUu(),
+				(short) Status.NOT_UPLOAD.value());
+	}
+
+	@Override
+	public void onNoticeDownSuccess(String[] idArray) {
+		for (String id : idArray) {
+			PurchaseNotice notice = purchaseNoticeDao.findOne(Long.parseLong(id));
+			if (notice != null) {
+				notice.setSendStatus((short) Status.DOWNLOADED.value());
+				purchaseNoticeDao.save(notice);
+			}
+		}
+	}
+
+	@Override
+	public List<SaleSend> findNotUploadSend() {
+		return saleSendDao.findByCustUUAndSendStatus(SystemSession.getUser().getEnterprise().getUu(),
+				(short) Status.NOT_UPLOAD.value());
+	}
+
+	@Override
+	public List<SaleSend> findNotUploadSendEDI(Long enUU) {
+		return saleSendDao.findByCustUUAndSendStatus(enUU,
+				(short) Status.NOT_UPLOAD.value());
+	}
+
+	@Override
+	public List<SaleSend> findNotSendSend() {
+		return saleSendDao.findByEnUUAndBackStatus(SystemSession.getUser().getEnterprise().getUu(),
+				(short) Status.NOT_UPLOAD.value());
+	}
+
+	@Override
+	public void onSendUploadSuccess(String[] idArray) {
+		for (String id : idArray) {
+			SaleSend send = saleSendDao.findOne(Long.parseLong(id));
+			if (send != null) {
+				send.setSendStatus((short) Status.DOWNLOADED.value());
+				saleSendDao.save(send);
+			}
+		}
+	}
+
+	@Override
+	public void onSendDownSuccess(String[] idArray) {
+		for (String id : idArray) {
+			SaleSend send = saleSendDao.findOne(Long.parseLong(id));
+			if (send != null) {
+				send.setBackStatus((short) Status.DOWNLOADED.value());
+				saleSendDao.save(send);
+			}
+		}
+	}
+
+	@Override
+	public void end(List<PurchaseNotify> notifies) {
+		long enUU = SystemSession.getUser().getEnterprise().getUu();
+		List<PurchaseNoticeEnd> noticeList = noticeEndDao.findByEnUUAndSourceIdList(enUU, CollectionUtil.getKeyCollection(notifies));
+		if (!CollectionUtils.isEmpty(noticeList)) {
+		    for (PurchaseNoticeEnd notice : noticeList) {
+                notice.setEnd(Constant.YES);
+                notice.setEndStatus((short) Status.NOT_UPLOAD.value());
+                notice.setErpDate(new Date(System.currentTimeMillis()));
+            }
+        }
+        noticeEndDao.save(noticeList);
+	}
+
+	@Override
+	public List<PurchaseNotice> findNotSendEnd() {
+		return purchaseNoticeDao.findByVendUUAndEndStatus(SystemSession.getUser().getEnterprise().getUu(),
+				(short) Status.NOT_UPLOAD.value());
+	}
+
+	@Override
+	public void onEndDownSuccess(String[] idArray) {
+		for (String id : idArray) {
+			PurchaseNoticeEnd noticeEnd = noticeEndDao.findOne(Long.parseLong(id));
+			if (noticeEnd != null) {
+                noticeEnd.setEndStatus((short) Status.DOWNLOADED.value());
+                noticeEndDao.save(noticeEnd);
+			}
+		}
+	}
+
+	@Override
+	public SaleSend send(Long noticeId, SaleSend send) {
+		PurchaseNotice notice = purchaseNoticeDao.findOne(noticeId);
+		List<SaleSend> sends = saleSendDao.findByUuid(send.getUuid());
+		//限制同一个供应商给同一个客户发货单号不可以重复,(避免一次发货产生多张单)
+		if (notice != null && CollectionUtils.isEmpty(sends)) {
+			if (notice.getEnd() != null && notice.getEnd() == Constant.YES) {
+				throw new IllegalOperatorException("客户已经取消了本次送货提醒,请刷新重试!");
+			}
+			double thisQty = 0;
+			for (SaleSendItem item : send.getSendItems()) {
+				thisQty += item.getQty();
+			}
+			double endQty = (notice.getEndQty() == null ? 0.0 : notice.getEndQty()) + thisQty;
+			if (endQty > notice.getQty()) {
+				throw new IllegalOperatorException("累计发货数量将超出本次送货提醒的需求数!");
+			}
+			PurchaseOrder order = notice.getOrderItem().getOrder();
+			send.setCurrency(order.getCurrency());
+			send.setBackStatus((short) Status.NOT_UPLOAD.value());
+			send.setSendStatus((short) Status.NOT_UPLOAD.value());
+			// 未收料
+			send.setVerifystatus(Constant.NO);
+			send.setCustUU(notice.getEnUU());
+			if (!StringUtils.isEmpty(notice.getOrderItem().getCustPurchaseCode())) {
+				send.setCustUserUU(enterpriseDao.findOne(notice.getEnUU()).getEnAdminuu());
+			} else {
+				send.setCustUserUU(order.getUserUU());
+			}
+			send.setDate(new Date());
+			send.setEnUU(SystemSession.getUser().getEnterprise().getUu());
+			send.setPayments(order.getPayments());
+			send.setRate(order.getRate());
+			send.setRecorder(SystemSession.getUser().getUserName());
+			short number = 0;
+			for (SaleSendItem item : send.getSendItems()) {
+				item.setNoticeId(noticeId);
+				item.setNotice(notice);
+				item.setNumber(++number);
+				item.setOrderItem(notice.getOrderItem());
+				item.setOrderItemId(notice.getOrderItem().getId());
+				item.setPrice(notice.getOrderItem().getPrice());
+				item.setSend(send);
+			}
+			List<SaleSendItem> sendItems = saleSendItemDao.save(send.getSendItems());
+			notice.setEndQty(endQty);
+			notice.setStatus((short) (endQty == notice.getQty() ? Status.REPLIED.value() : Status.NOT_REPLY.value()));
+			purchaseNoticeDao.save(notice);
+			if (!CollectionUtils.isEmpty(sendItems)) {
+				List<SaleSend> saleSends = new ArrayList<SaleSend>();
+				saleSends.add(sendItems.get(0).getSend());
+			}
+			// 我的产品库更新
+            personalProductService.covertPersonalProduct(notice.getOrderItem().getProductId(), "单个发货");
+			return sendItems.get(0).getSend();
+		} else {
+			throw new IllegalOperatorException("请对有效的送货提醒发货!");
+		}
+	}
+
+    @Override
+	public int getOnhandCount() {
+		return purchaseNoticeDao.getCountByVendUUAndStatus(SystemSession.getUser().getEnterprise().getUu(),
+				(short) Status.NOT_REPLY.value());
+	}
+
+	@Override
+	public SaleSend send(SaleSend saleSend) {
+		//限制同一个供应商给同一个客户发货单号不可以重复,(避免一次发货产生多张单),存在时不做处理
+		List<SaleSend> sendList = saleSendDao.findByUuid(saleSend.getUuid());
+		if (saleSend != null && CollectionUtils.isEmpty(sendList)) {
+			saleSend.setBackStatus((short) Status.NOT_UPLOAD.value());
+			saleSend.setSendStatus((short) Status.NOT_UPLOAD.value());
+			saleSend.setEnUU(SystemSession.getUser().getEnterprise().getUu());
+			saleSend.setRecorder(SystemSession.getUser().getUserName());
+			saleSend.setDate(new Date());
+            // 未收料
+			saleSend.setVerifystatus(Constant.NO);
+			short number = 0;
+			List<SaleSendItem> sendItems = new ArrayList<SaleSendItem>();
+			for (SaleSendItem item : saleSend.getSendItems()) {
+				PurchaseNotice notice = purchaseNoticeDao.findOne(item.getNoticeId());
+				if (notice != null) {
+					if (notice.getEnd() != null && notice.getEnd() == Constant.YES) {
+						String error = "货车中订单:" + notice.getOrderItem().getOrder().getCode() + "的物料号为"
+								+ notice.getOrderItem().getProduct().getCode() + "的发货通知被取消!";
+						throw new IllegalOperatorException(error);
+					} else {
+						double thisQty = item.getQty();
+						double endQty = (notice.getEndQty() == null ? 0.0 : notice.getEndQty()) + thisQty;
+						if (endQty > notice.getQty()) {
+							throw new IllegalOperatorException("累计发货数量将超出本次送货提醒的需求数!");
+						}
+						item.setNotice(notice);
+                        // 带了序号则不重设序号,不带这重设序号
+						if (item.getNumber() == null || item.getNumber() == 0) {
+							item.setNumber(++number);
+						}
+						item.setOrderItem(notice.getOrderItem());
+						item.setOrderItemId(notice.getOrderItemId());
+						saleSend.setRate(notice.getOrderItem().getOrder().getRate());
+						item.setSend(saleSend);
+						sendItems.add(item);
+					}
+				} else {
+					throw new IllegalOperatorException("参数错误,无效的客户送货提醒单!");
+				}
+
+			}
+			sendItems = saleSendItemDao.save(sendItems);
+			for (SaleSendItem sendItem : sendItems) {
+				PurchaseNotice notice = purchaseNoticeDao.findOne(sendItem.getNoticeId());
+				double endQty = (notice.getEndQty() == null ? 0.0 : notice.getEndQty()) + sendItem.getQty();
+				if (endQty > notice.getQty()) {
+					throw new IllegalOperatorException("累计发货数量将超出本次送货提醒的需求数!");
+				}
+				notice.setEndQty(endQty);
+				notice.setStatus(
+						(short) (endQty == notice.getQty() ? Status.REPLIED.value() : Status.NOT_REPLY.value()));
+				purchaseNoticeDao.save(notice);
+                // 转入我的物料库
+                personalProductService.covertPersonalProduct(notice.getOrderItem().getProductId(), "批量发货");
+			}
+			if (!CollectionUtils.isEmpty(sendItems)) {
+				List<SaleSend> saleSends = new ArrayList<SaleSend>();
+				saleSends.add(sendItems.get(0).getSend());
+			}
+			return sendItems.get(0).getSend();
+		} else {
+			throw new IllegalArgumentException();
+		}
+	}
+
+	@Override
+	public void onSaleSendChange(List<SaleSendItem> sendItems) {
+		for (SaleSendItem item : sendItems) {
+			saleSendItemDao.updateByReply(item.getId(), item.getQty(), item.getReplyRemark());
+			if (item.getNoticeId() != null) {
+			    Double sendQty = saleSendItemDao.getSendQtyByNoticeId(item.getNoticeId());
+				purchaseNoticeDao.updateBySend(item.getNoticeId(), sendQty);
+                logger.log("更新发货提醒发货数量", "ERP上传收料通知的确认数量更新发货提醒已发货数量",
+                        "发货单: " + item.getNoticeId() + ",更新数量: " + sendQty);
+                updateNoticeStatus(item.getNoticeId());
+			}
+		}
+	}
+
+    /**
+     * 更新发货提醒状态
+     *
+     * @param noticeId 发货提醒id
+     */
+    private void updateNoticeStatus(Long noticeId) {
+        PurchaseNotice notice = purchaseNoticeDao.findOne(noticeId);
+        if (notice.getEndQty() < notice.getQty() && notice.getStatus() == Status.REPLIED.value()) {
+            purchaseNoticeDao.updateStatus(notice.getId(), (short) Status.NOT_REPLY.value());
+        }
+    }
+
+    @Override
+	public List<PurchaseNotice> findById(Long[] ids) {
+		return purchaseNoticeDao.findUnEndByIds(ids);
+	}
+
+	@Override
+	public void onVerify(List<SaleSendItemVerify> verifies) {
+		verifies = saleSendItemVerifyDao.save(verifies);
+		List<SaleSendItem> saleSendItems = new ArrayList<>();
+		for (SaleSendItemVerify verify : verifies) {
+			saleSendItemDao.updateByVerify(verify.getSendItemId());
+			updateVerifyStatus(verify.getSendItemId());
+			SaleSendItem item = saleSendItemDao.findOne(verify.getSendItemId());
+			saleSendItems.add(item);
+		}
+		// 买家收料之后给卖家发消息
+		ContextUtils.publishEvent(new SaleSendAcceptReleaseEvent(SaleSendItem.distinct(saleSendItems)));
+	}
+
+	@Override
+	public void unVerify(List<SaleSendItemVerify> verifies) {
+		saleSendItemVerifyDao.delete(verifies);
+		for (SaleSendItemVerify verify : verifies) {
+			saleSendItemDao.updateByVerify(verify.getSendItemId());
+			updateVerifyStatus(verify.getSendItemId());
+		}
+	}
+
+	/**
+	 * 更新发货单的收料状态
+	 * 
+	 * @param sendItemId
+	 */
+	private void updateVerifyStatus(Long sendItemId) {
+		SaleSendItem sendItem = saleSendItemDao.findOne(sendItemId);
+		int totalCount = saleSendItemDao.getTotalCountBySendId(sendItem.getSend().getId());
+		int verifyCount = saleSendItemDao.getFullVerifyCountBySendId(sendItem.getSend().getId());
+		if (verifyCount == totalCount) {
+			sendItem.getSend().setVerifystatus(Constant.YES);
+		} else {
+			sendItem.getSend().setVerifystatus(Constant.NO);
+		}
+		saleSendItemDao.save(sendItem);
+	}
+
+	@Override
+	public SaleSendAll findSaleSendById(Long id) {
+		SaleSendAll send = saleSendAllDao.findOne(id);
+		if (send == null) {
+			throw new IllegalOperatorException("您查找的发货单不存在!");
+		}
+		return send;
+	}
+
+	@Override
+	public Long getAllCount() {
+		return purchaseNoticeDao.countByVendUU(SystemSession.getUser().getEnterprise().getUu());
+	}
+
+	@Override
+	public Long getAllNoticeCountByEnUU(Long enUU) {
+		return purchaseNoticeDao.getCountByEnUUAndStatus(enUU, (short) Status.REPLIED.value());
+	}
+
+	@Override
+	public Long getTodoNoticeCountByEnUU(Long enUU) {
+		return purchaseNoticeDao.getCountByEnUUAndStatus(enUU, (short) Status.NOT_REPLY.value());
+	}
+
+	@Override
+	public Long getWatingNoticeCountByEnUU(Long enUU) {
+		return purchaseNoticeDao.getWatingCountByEnUUAndStatus(enUU);
+	}
+
+	@Override
+	public Long getEndNoticeCountByEnUU(Long enUU) {
+		return purchaseNoticeDao.getEndCountByEnUUAndStatus(enUU);
+	}
+
+	@Override
+	public void updateBarCode(Long id, Double packageQty, Double outBoxQty) {
+		saleSendItemDao.updatePackageQty(id, packageQty, outBoxQty);
+	}
+
+	@Override
+	@Transactional(rollbackFor = Exception.class)
+	public void generateBarcodes(Long id, List<SaleSendItem> sendItem, Long enUU) {
+		SaleSend saleSend = saleSendDao.findOne(id);
+		Long custUU = saleSend.getCustUU();
+		// 获取条码生成规则,判断规则是否审核,已审核,根据规则拼接
+		B2bCodeSet barcodeSet = b2bCodeSetDao.findByEnUUAndType(custUU, "BATCH");
+        // 条码生成规则不为空,已审核
+		if (barcodeSet != null) {
+			if (!"AUDITED".equals(barcodeSet.getStatuscode())) {
+				throw new IllegalOperatorException("请先审核条码生成规则!");
+			}
+		} else {
+			throw new IllegalOperatorException("请先维护条码生成规则!");
+		}
+		// 是否维护包装箱生成规则
+		B2bCodeSet outboxSet = b2bCodeSetDao.findByEnUUAndType(custUU, "PACK");
+		if (outboxSet == null) {
+			throw new IllegalOperatorException("请先维护外箱生成规则!");
+		}
+		String AUDITED_STATUS = "AUDITED";
+		if (!AUDITED_STATUS.equals(outboxSet.getStatuscode())) {
+			throw new IllegalOperatorException("请先审核外箱生成规则!");
+		}
+		for (SaleSendItem item : sendItem) {
+			// 清空原有箱号,箱号明细,条码
+			List<BarSendNotify> bsNotify = barSendNotifyDao.findBySiid(item.getId());
+			for (BarSendNotify notify : bsNotify) {
+				if (notify.getOutboxid() != null) {
+					BarPackage barPackage = barPackageDao.findOne(notify.getOutboxid());
+					if (barPackage != null) {
+						barPackageDetailDao.delete(barPackage.getDetail());
+						barPackageDao.delete(barPackage);
+					}
+				}
+			}
+			barSendNotifyDao.deleteAllBySiid(item.getId());
+			// 获取明细,最小包装数,外箱容量等信息
+			SaleSendItem sItem = saleSendItemDao.findOne(item.getId());
+			double pQty = sItem.getPackageQty(), bQty = sItem.getOutBoxQty(), qty = sItem.getQty();
+			String bar_code, pr_code = sItem.getOrderItem().getProduct().getCode();
+            // 最小包装数件数
+			int aNum = (int) (qty / pQty);
+			double aqtyA = (new BigDecimal(Double.toString(qty))).subtract(new BigDecimal(Double.toString(aNum * pQty)))
+					.doubleValue(); // 小于最小包装数的
+            // ERP中对应的物料ID
+			String sourceId = String.valueOf(sItem.getOrderItem().getProduct().getSourceId());
+			// 获取是否勾选了生成外箱
+			if (item.getIsOutboxChecked()) {
+				// 判断外箱容量是否为最小包装数的整数倍
+				String out_boxcode = null;
+				Long pa_id = null;
+                // 每箱件数
+				int sumJ = (int) (bQty / pQty);
+				if (sumJ * pQty != bQty) {
+					throw new IllegalOperatorException("序号:" + sItem.getNumber() + ",外箱容量不是最小包装数的整数倍!");
+				}
+                // 整数箱数
+				int bNum = (int) (qty / bQty);
+                // 零散数
+				double bqtyB = (new BigDecimal(Double.toString(qty)))
+						.subtract(new BigDecimal(Double.toString(bNum * bQty))).doubleValue();
+				if (aNum >= 1) {
+					for (int i = 0; i < aNum; i++) {
+						if (i % sumJ == 0) {
+							BarPackage barPackage = new BarPackage();
+							out_boxcode = outboxMethod(sourceId, outboxSet);
+							barPackage.setCustUU(custUU);
+							barPackage.setEnUU(enUU);
+							barPackage.setOutboxcode(out_boxcode);
+							barPackage.setProdcode(pr_code);
+							barPackage.setLevel((long) 1);
+							barPackage.setPackdate(new Date());
+							barPackage.setSendStatus((short) Status.NOT_UPLOAD.value());
+							if (i >= aNum - sumJ && bqtyB > 0) {
+								barPackage.setPackageqty(aNum - sumJ);
+								barPackage.setTotalqty(bqtyB);
+							} else {
+								barPackage.setPackageqty(sumJ);
+								barPackage.setTotalqty(bQty);
+							}
+							barPackageDao.save(barPackage);
+							barPackage = barPackageDao.findByOutboxcodeAndEnUU(out_boxcode, enUU);
+							pa_id = barPackage.getId();
+						}
+						bar_code = barcodeMethod(sourceId, barcodeSet);
+						insertBarPd(pa_id, out_boxcode, pQty, bar_code, sItem, enUU);
+					}
+				}
+				if (aqtyA > 0) {
+					bar_code = barcodeMethod(sourceId, barcodeSet);
+					insertBarPd(pa_id, out_boxcode, aqtyA, bar_code, sItem, enUU);
+				}
+				logger.log("发货单", "生成条码和箱号",
+						"发货单:" + sItem.getSend().getCode() + ",明细行序号:" + sItem.getNumber() + ",生成条码和箱号!");
+			} else {
+				if (aNum >= 1) {
+					for (int i = 0; i < aNum; i++) {
+						insertBar(sItem, pQty, enUU, barcodeSet);
+					}
+				}
+				if (aqtyA > 0) {
+					insertBar(sItem, aqtyA, enUU, barcodeSet);
+				}
+				logger.log("发货单", "生成条码",
+						"发货单:" + sItem.getSend().getCode() + ",明细行序号:" + sItem.getNumber() + ",生成条码!");
+			}
+		}
+	}
+
+	private String lpad(int length, String number) {
+		while (number.length() < length) {
+			number = "0" + number;
+		}
+		number = number.substring(number.length() - length, number.length());
+		return number;
+	}
+
+    /**
+     *   YYMMDD 日期格式
+     */
+    final String YYMMDD_PATTERN = "YYMMDD";
+
+    /**
+     * YYMM日期格式
+     */
+    final String YYMM_PATTERN= "YYMM";
+
+    /**
+     * MMDD日期格式
+     */
+    final String MMDD_PATTERN = "MMDD";
+
+    /**
+     * 默认数量
+     */
+    final Integer NULL_COUNT = 0;
+
+    /**
+     * 生成条码号
+     *
+     * @param pr_id
+     * @param barcodeSet
+     * @return
+     */
+	public String barcodeMethod(String pr_id, B2bCodeSet barcodeSet) {
+		StringBuffer code = new StringBuffer();
+		String date = "0";
+		String formPlat = barcodeSet.getFromplat(), dataStr = barcodeSet.getDatestr(),
+				maxdate = barcodeSet.getMaxdate();
+		int lennum = barcodeSet.getLennum().intValue(), maxnum = barcodeSet.getMaxnum().intValue(),
+				lenprid = barcodeSet.getLenprid().intValue();
+		// 拼接
+        // 平台标识
+		code.append(formPlat);
+        // PR_ID物料ID的长度
+		code.append(lpad(lenprid, pr_id));
+		if (YYMMDD_PATTERN.equals(dataStr)) {
+			SimpleDateFormat YMD = new SimpleDateFormat("yyMMdd");
+			date = YMD.format(new Date());
+		} else if (YYMM_PATTERN.equals(dataStr)) {
+			SimpleDateFormat YM = new SimpleDateFormat("yyMM");
+			date = YM.format(new Date());
+		} else if (MMDD_PATTERN.equals(dataStr)) {
+			SimpleDateFormat MD = new SimpleDateFormat("MMdd");
+			date = MD.format(new Date());
+		}
+		code.append(date);
+		barcodeSet.setMaxdate(date);
+        // 如果当前日期大于上次日期
+		if (!("").equals(maxdate) && null != maxdate && (!NULL_COUNT.equals(date))
+				&& (Integer.valueOf(maxdate) > Integer.valueOf(date))) {
+            // 流水重新开始
+			code.append(lpad(lennum, "1"));
+            // 流水号增加1
+			barcodeSet.setMaxnum((long) 2);
+		} else {
+            // 当前流水号
+			code.append(lpad(lennum, String.valueOf(maxnum)));
+            // 流水号增加1
+			barcodeSet.setMaxnum((long) (maxnum + 1));
+		}
+		b2bCodeSetDao.save(barcodeSet);
+		return code.toString();
+	}
+
+    /**
+     * 生成外箱号
+     *
+     * @param pr_id
+     * @param barcodeSet
+     * @return
+     */
+	public String outboxMethod(String pr_id, B2bCodeSet barcodeSet) {
+		StringBuffer code = new StringBuffer();
+		String date = "0";
+		String formPlat = barcodeSet.getFromplat(), dataStr = barcodeSet.getDatestr(),
+				maxdate = barcodeSet.getMaxdate();
+		int lennum = barcodeSet.getLennum().intValue(), maxnum = barcodeSet.getMaxnum().intValue(),
+				lenprid = barcodeSet.getLenprid().intValue();
+        // 平台标识
+		code.append(formPlat);
+        // PR_ID物料ID的长度
+		code.append(lpad(lenprid, pr_id));
+		if (YYMMDD_PATTERN.equals(dataStr)) {
+			SimpleDateFormat YMD = new SimpleDateFormat("yyMMdd");
+			date = YMD.format(new Date());
+		} else if (YYMM_PATTERN.equals(dataStr)) {
+			SimpleDateFormat YM = new SimpleDateFormat("yyMM");
+			date = YM.format(new Date());
+		} else if (MMDD_PATTERN.equals(dataStr)) {
+			SimpleDateFormat MD = new SimpleDateFormat("MMdd");
+			date = MD.format(new Date());
+		}
+		code.append(date);
+		barcodeSet.setMaxdate(date);
+        // 如果当前日期大于上次日期
+		if (!("").equals(maxdate) && null != maxdate && (!NULL_COUNT.equals(date))
+				&& (Integer.valueOf(maxdate) > Integer.valueOf(date))) {
+            // 流水重新开始
+			code.append(lpad(lennum, "1"));
+            // 流水号增加1
+			barcodeSet.setMaxnum((long) 2);
+		} else {
+            // 当前流水号
+			code.append(lpad(lennum, String.valueOf(maxnum)));
+            // 流水号增加1
+			barcodeSet.setMaxnum((long) (maxnum + 1));
+		}
+		b2bCodeSetDao.save(barcodeSet);
+		return code.toString();
+	}
+
+	private void insertBarPd(Long pa_id, String out_boxcode, double qty, String bar_code, SaleSendItem sItem,
+			Long enUU) {
+		BarSendNotify barSendNotify = new BarSendNotify();
+		barSendNotify.setBarcode(bar_code);
+		barSendNotify.setOutboxcode(out_boxcode);
+		barSendNotify.setOutboxid(pa_id);
+		barSendNotify.setPrintstatus("0");
+		barSendNotify.setProdcode(sItem.getOrderItem().getProduct().getCode());
+		barSendNotify.setProdid(sItem.getOrderItem().getProduct().getSourceId());
+		barSendNotify.setQty(qty);
+		barSendNotify.setSendStatus((short) Status.NOT_UPLOAD.value());
+		SaleSendItemAll sendItem = new SaleSendItemAll();
+		sendItem.setId(sItem.getId());
+		barSendNotify.setSaleSendItem(sendItem);
+		barSendNotify.setSinumber(sItem.getNumber());
+		barSendNotify.setSscode(sItem.getSend().getCode());
+		barSendNotify.setSsid(sItem.getSend().getId());
+		barSendNotify.setVendcode(enUU);
+        // 保存发货单明细中的条码
+		barSendNotifyDao.save(barSendNotify);
+
+		BarPackageDetail barPackageDetail = new BarPackageDetail();
+		barPackageDetail.setBarcode(bar_code);
+		barPackageDetail.setBarpackage(barPackageDao.findOne(pa_id));
+		barPackageDetail.setInnerqty(qty);
+        // 保存包装箱明细
+		barPackageDetailDao.save(barPackageDetail);
+	}
+
+	/**
+	 * 发货单明细条码明细生成
+	 * 
+	 * @param sItem
+	 * @param qty
+	 * @param enUU
+	 * @param barcodeSet
+	 */
+	private void insertBar(SaleSendItem sItem, double qty, Long enUU, B2bCodeSet barcodeSet) {
+		BarSendNotify barSendNotify = new BarSendNotify();
+		String bar_code = barcodeMethod(String.valueOf(sItem.getOrderItem().getProductId()), barcodeSet);
+		barSendNotify.setBarcode(bar_code);
+		barSendNotify.setPrintstatus("0");
+		barSendNotify.setProdcode(sItem.getOrderItem().getProduct().getCode());
+		barSendNotify.setProdid(sItem.getOrderItem().getProduct().getSourceId());
+		barSendNotify.setQty(qty);
+		barSendNotify.setSendStatus((short) Status.NOT_UPLOAD.value());
+		SaleSendItemAll sendItem = new SaleSendItemAll();
+		sendItem.setId(sItem.getId());
+		barSendNotify.setSaleSendItem(sendItem);
+		barSendNotify.setSinumber(sItem.getNumber());
+		barSendNotify.setSscode(sItem.getSend().getCode());
+		barSendNotify.setSsid(sItem.getSend().getId());
+		barSendNotify.setVendcode(enUU);
+        // 保存发货单明细中的条码
+		barSendNotifyDao.save(barSendNotify);
+	}
+
+	@Override
+	public List<Map<String, Object>> getPrintBarcodes(Long lpsId, List<SaleSendItem> sendItem, Long enUU) {
+		List<Map<String, Object>> list2 = new ArrayList<Map<String, Object>>();
+		String va = "";
+		String regex = "\\{(?:[A-Za-z][A-Za-z0-9_]*)\\}";
+		BarLabelPrintSetting setting = barLPSetingDao.findOne(lpsId);
+		// 获取打印明细的设置参数
+		List<Map<String, Object>> parameter = commonDao.queryForList(
+				"select la_pagesize, lp_id,lp_valuetype,lp_encode,lp_name,lp_leftrate,lp_toprate,lp_width,lp_ifshownote,lp_font,lp_size,lp_notealignjustify,lp_height from bar$labelParameter left join bar$label on la_id=lp_laid where la_id="
+						+ setting.getLabel().getId());
+		for (SaleSendItem item : sendItem) {
+			List<BarSendNotify> bars = barSendNotifyDao.findBySiid(item.getId());
+			List<Map<String, Object>> list = new ArrayList<Map<String, Object>>();
+			for (BarSendNotify barcode : bars) {
+				List<Map<String, Object>> list1 = new ArrayList<Map<String, Object>>();
+				Map<String, Object> mp1 = new HashMap<String, Object>();
+				va = setting.getSql().replaceAll(regex, String.valueOf(barcode.getId()));
+				List<Map<String, Object>> listData = commonDao.queryForList(va);
+				for (Map<String, Object> mapD : listData) {
+					for (Map<String, Object> param : parameter) {
+						mp1 = param;
+						mp1.put("value", mapD.get(param.get("lp_name")));
+						list1.add(mp1);
+					}
+				}
+				Map<String, Object> mp = new HashMap<String, Object>();
+				mp.put("store", list1);
+				list.add(mp);
+			}
+			Map<String, Object> mp = new HashMap<String, Object>();
+			mp.put("si_id", item.getId());
+			mp.put("pagesize", parameter.get(0).get("la_pagesize"));
+			mp.put("data", list);
+			list2.add(mp);
+		}
+		return list2;
+	}
+
+	@Override
+	public List<BarLabelPrintSetting> getPrintTemplate(Long id, String type) {
+		SaleSend saleSend = saleSendDao.findOne(id);
+		Long custUU = saleSend.getCustUU();
+		String caller;
+		String BAR_TYPE = "Bar";
+		if (BAR_TYPE.equals(type)) {
+			caller = "B2B!BarPrint";
+		} else {
+			caller = "B2B!OutBoxPrint";
+		}
+		List<BarLabelPrintSetting> setting = barLPSetingDao.findByEnUUAndCaller(custUU, caller);
+		if (setting.size() > 0) {
+			return setting;
+		} else {
+			throw new IllegalOperatorException("未维护相关的打印模板!");
+		}
+	}
+
+	@Override
+	public List<Map<String, Object>> getSPrintBarcode(Long lpsId, Long bsnId) {
+		List<Map<String, Object>> list = new ArrayList<Map<String, Object>>();
+		String va = "";
+		String regex = "\\{(?:[A-Za-z][A-Za-z0-9_]*)\\}";
+		BarLabelPrintSetting setting = barLPSetingDao.findOne(lpsId);
+		// 获取打印明细的设置参数
+		List<Map<String, Object>> parameter = commonDao.queryForList(
+				"select la_pagesize, lp_id,lp_valuetype,lp_encode,lp_name,lp_leftrate,lp_toprate,lp_width,lp_ifshownote,lp_font,lp_size,lp_notealignjustify,lp_height from bar$labelParameter left join bar$label on la_id=lp_laid where la_id="
+						+ setting.getLabel().getId());
+		Map<String, Object> map = new HashMap<String, Object>();
+		va = setting.getSql().replaceAll(regex, String.valueOf(bsnId));
+		List<Map<String, Object>> listData = commonDao.queryForList(va);
+		for (Map<String, Object> mapD : listData) {
+			for (Map<String, Object> param : parameter) {
+				map = param;
+				map.put("value", mapD.get(param.get("lp_name")));
+				list.add(map);
+			}
+		}
+		return list;
+	}
+
+	@Override
+	public void updatePrintStatus(List<SaleSendItem> saleSendItems) {
+		List<SaleSendItem> items = new ArrayList<SaleSendItem>();
+		if (!CollectionUtils.isEmpty(saleSendItems)) {
+			for (SaleSendItem item : saleSendItems) {
+				item = saleSendItemDao.findOne(item.getId());
+				if (item != null) {
+					item.setBarPrintStatus((long) 1);
+					items.add(item);
+				}
+			}
+		}
+		saleSendItemDao.save(items);
+	}
+
+    @Override
+    public void printCount(Long id) {
+        SaleSendAll send = saleSendAllDao.findOne(id);
+        if (null == send.getPrint()) {
+        	send.setPrint((short) 1);
+		} else {
+			send.setPrint((short) (send.getPrint() + 1));
+		}
+        saleSendAllDao.save(send);
+    }
+
+	@Override
+	public Map<String, Integer> getNoticeCount(String category) {
+		List<Long> unreadIds = getUnreadIds(category);
+		Map<String, Integer> map = new HashMap<>(3);
+		// 已回复数量
+		Integer repliedCount = 0;
+		// 未回复数量
+		Integer notReplyCount = 0;
+		if (CollectionUtils.isEmpty(unreadIds)){
+			return map;
+		}
+		// 超过1000条需要拆分,不然会报错
+		if (unreadIds.size() > MAX_SIZE) {
+			List<List<Long>> idsArray = SplitArray.splitAry(unreadIds, SplitArray.QUERY_MAX_NUMBER);
+			for (List<Long> ids : idsArray) {
+				// 超过100不再查询,页面显示99+,减少服务器负担
+				if (repliedCount < 100) {
+					repliedCount = repliedCount + purchaseNoticeDao.findRepliedId(ids).size();
+				}
+				if (notReplyCount < 100) {
+					notReplyCount = notReplyCount + purchaseNoticeDao.findNotReplyId(ids).size();
+				}
+				// 当需要查询的数量大于99时停止循环,减少不必要的操作
+				if (notReplyCount > 99 && repliedCount > 99) {
+					break;
+				}
+			}
+		} else {
+			repliedCount = repliedCount + purchaseNoticeDao.findRepliedId(unreadIds).size();
+			notReplyCount = notReplyCount + purchaseNoticeDao.findNotReplyId(unreadIds).size();
+		}
+		map.put("replied", repliedCount);
+		map.put("notReply", notReplyCount);
+		map.put("all", repliedCount + notReplyCount);
+		return map;
+	}
+
+    @Override
+    public SPage<PurchaseNotice> findDoneNoticesByPageInfo(final PageInfo pageInfo, String keyword, final SearchFilter filter) {
+        Page<PurchaseNotice> notices = purchaseNoticeDao.findAll(new Specification<PurchaseNotice>() {
+            @Override
+            public Predicate toPredicate(Root<PurchaseNotice> root, CriteriaQuery<?> query, CriteriaBuilder builder) {
+                if (filter != null) {
+                    if (!CollectionUtils.isEmpty(filter.getDistribute())) {
+                        pageInfo.expression(PredicateUtils.in("enUU", filter.getDistribute(), false));
+                    }
+                    if (filter.getFromDate() != null) {
+                        pageInfo.expression(PredicateUtils.gte("date", new Date(filter.getFromDate()), false));
+                    }
+                    if (filter.getEndDate() != null) {
+                        pageInfo.expression(PredicateUtils.lte("date", new Date(filter.getEndDate()), false));
+                    }
+                }
+                pageInfo.expression(
+                        PredicateUtils.or(PredicateUtils.isNull("end"), PredicateUtils.ne("end", Constant.YES, false)));
+                return query.where(pageInfo.getPredicates(root, query, builder)).getRestriction();
+            }
+        }, pageInfo);
+        return SPageUtils.covertSPage(notices);
+    }
+
+    /**
+     * 查询未阅读数量
+     *
+     * @param category 表名
+     * @return
+     */
+    @Override
+	public List<Long> getUnreadIds(String category) {
+		return userOrderDao.getUnreadIds(SystemSession.getUser().getEnterprise().getUu(), SystemSession.getUser().getUserUU(), "purc$notice", category);
+	}
+
+    /**
+     * 查询发货提醒
+     *
+     * @param pageInfo 分页信息
+     * @param keyword  关键字
+     * @param filter   过滤条件
+     * @return
+     */
+    @Override
+    public SPage<PurchaseNotice> findAllNoticesByPageInfo(final PageInfo pageInfo, String keyword, final SearchFilter filter) {
+		if (filter != null) {
+			if (!CollectionUtils.isEmpty(filter.getDistribute())) {
+				pageInfo.expression(PredicateUtils.in("enUU", filter.getDistribute(), false));
+			}
+			if (filter.getFromDate() != null) {
+				pageInfo.expression(PredicateUtils.gte("date", new Date(filter.getFromDate()), false));
+			}
+			if (filter.getEndDate() != null) {
+				pageInfo.expression(PredicateUtils.lte("date", new Date(filter.getEndDate()), false));
+			}
+		}
+		pageInfo.expression(PredicateUtils.isNull("end"));
+        Page<PurchaseNotice> notices = purchaseNoticeDao.findAll(new Specification<PurchaseNotice>() {
+            @Override
+            public Predicate toPredicate(Root<PurchaseNotice> root, CriteriaQuery<?> query, CriteriaBuilder builder) {
+                List<Predicate> predicatesList = new ArrayList<Predicate>();
+                if (!StringUtils.isEmpty(keyword)) {
+					Predicate custName = builder.like(root.get("orderItem").get("order").get("enterprise").get("enName"), "%" + keyword+ "%");
+                    if (keyword.matches(SearchUtils.UU_REGEXP)) {
+                        Predicate custUU = builder.like(root.get("orderItem").get("order").get("enterprise").get("uu"), "%" + keyword+ "%");
+                        builder.or(custUU);
+                    }
+					Predicate productCode = builder.like(root.get("orderItem").get("productCode"), "%" + keyword+ "%");
+                    Predicate productTitle = builder.like(root.get("orderItem").get("productTitle"), "%" + keyword+ "%");
+                    Predicate productSpec = builder.like(root.get("orderItem").get("productSpec"), "%" + keyword+ "%");
+                    Predicate orderCode = builder.like(root.get("orderItem").get("order").get("code"), "%" + keyword+ "%");
+                    predicatesList.add(builder.or(custName, productCode, productTitle, productSpec, orderCode));
+				}
+                Predicate[] predicates = pageInfo.getPredicates(root, query, builder);
+                Arrays.stream(predicates).forEach(predicate -> {
+                    predicatesList.add(predicate);
+                });
+                return builder.and(predicatesList.toArray(new Predicate[predicatesList.size()]));
+            }
+        }, pageInfo);
+        return SPageUtils.covertSPage(notices);
+    }
+
+    /**
+     * 按条件查询发货提醒
+     *
+     * @param pageInfo  分页信息,过滤条件
+     * @param keyword   搜索词
+     * @param filter    过滤条件
+     * @param state 状态
+     * @return SPage封装的数据
+     */
+    @Override
+    public SPage<PurchaseNotice> findNoticesByPageInfo(PageInfo pageInfo, String keyword, SearchFilter filter, String state) {
+        // 根据状态设置其他条件
+        setState(pageInfo, state, filter);
+        if (filter != null) {
+            if (!CollectionUtils.isEmpty(filter.getDistribute())) {
+                pageInfo.expression(PredicateUtils.in("enUU", filter.getDistribute(), false));
+            }
+            if (filter.getFromDate() != null) {
+                pageInfo.expression(PredicateUtils.gte("date", new Date(filter.getFromDate()), false));
+            }
+            if (filter.getEndDate() != null) {
+                pageInfo.expression(PredicateUtils.lte("date", new Date(filter.getEndDate()), false));
+            }
+        }
+        Page<PurchaseNotice> notices = purchaseNoticeDao.findAll(new Specification<PurchaseNotice>() {
+            @Override
+            public Predicate toPredicate(Root<PurchaseNotice> root, CriteriaQuery<?> query, CriteriaBuilder builder) {
+                List<Predicate> predicatesList = new ArrayList<Predicate>();
+                if (!StringUtils.isEmpty(keyword)) {
+                    Predicate custName = builder.like(root.get("orderItem").get("order").get("enterprise").get("enName"), "%" + keyword+ "%");
+                    if (keyword.matches(SearchUtils.UU_REGEXP)) {
+                        Predicate custUU = builder.like(root.get("orderItem").get("order").get("enterprise").get("uu"), "%" + keyword+ "%");
+                        builder.or(custUU);
+                    }
+                    Predicate productCode = builder.like(root.get("orderItem").get("productCode"), "%" + keyword+ "%");
+                    Predicate productTitle = builder.like(root.get("orderItem").get("productTitle"), "%" + keyword+ "%");
+                    Predicate productSpec = builder.like(root.get("orderItem").get("productSpec"), "%" + keyword+ "%");
+                    Predicate orderCode = builder.like(root.get("orderItem").get("order").get("code"), "%" + keyword+ "%");
+                    predicatesList.add(builder.or(custName, productCode, productTitle, productSpec, orderCode));
+                }
+                Predicate[] predicates = pageInfo.getPredicates(root, query, builder);
+                Arrays.stream(predicates).forEach(predicate -> {
+                    predicatesList.add(predicate);
+                });
+                return builder.and(predicatesList.toArray(new Predicate[predicatesList.size()]));
+            }
+        }, pageInfo);
+        return SPageUtils.covertSPage(notices);
+    }
+
+    /**
+     * 封装相关查询条件
+     *
+     * @param pageInfo 分页参数
+     * @param state 状态
+     *              <pre>
+     *              _todo : 待发货
+     *              done: 已发货
+     *              end: 已取消
+     *              </pre>
+     * @param filter 过滤条件
+     */
+    private void setState(PageInfo pageInfo, String state, SearchFilter filter) {
+        pageInfo.filter("vendUU", SystemSession.getUser().getEnterprise().getUu());
+        SearchFilter distribute = userService.distribute();
+        if (distribute != null && !CollectionUtils.isEmpty(distribute.getDistribute())) {
+            List<Object> list = new ArrayList<>();
+            list.addAll(distribute.getDistribute());
+            filter.setDistribute(list);
+        }
+        if (SearchUtils.TODO_STATE.equals(state)) {
+            pageInfo.expression(PredicateUtils.or(PredicateUtils.isNull("end"), PredicateUtils.eq("end", Constant.NO, false)));
+            pageInfo.filter("status", (short)Status.NOT_REPLY.value());
+            pageInfo.filter("waiting", Constant.NO);
+        } else if (SearchUtils.DONE_STATE.equals(state)) {
+            pageInfo.expression(PredicateUtils.or(PredicateUtils.isNull("end"), PredicateUtils.eq("end", Constant.NO, false)));
+            pageInfo.filter("status", (short)Status.REPLIED.value());
+        } else if (SearchUtils.END_STATE.equals(state)) {
+            pageInfo.filter("end", Constant.YES);
+        } else if (SearchUtils.WAITING_STATE.equals(state)) {
+            pageInfo.filter("waiting", Constant.YES);
+        }
+    }
+
+    @Override
+	@Transactional(rollbackFor = Exception.class)
+	public void setReadByOrder(String category, Long[] sourceId) {
+		userOrderDao.setReadStatus(SystemSession.getUser().getEnterprise().getUu(), SystemSession.getUser().getUserUU(), "purc$notice", category, (short) Status.READ.value(), sourceId);
+	}
+
+	@Override
+	@Transactional(rollbackFor = Exception.class)
+	public Integer setReadByState(String category) {
+		List<Long> unreadIds = getUnreadIds(category);
+		Integer deleteCount = 0;
+		if (CollectionUtils.isEmpty(unreadIds)){
+			return deleteCount;
+		}
+		List<Long> repliedIds = null;
+		if (unreadIds.size() > MAX_SIZE) {
+			List<List<Long>> idsArray = SplitArray.splitAry(unreadIds, SplitArray.QUERY_MAX_NUMBER);
+			for (List<Long> ids : idsArray) {
+				repliedIds = purchaseNoticeDao.findRepliedId(ids);
+				if (repliedIds.size() != 0) {
+					deleteCount = deleteCount + userOrderDao.delete(SystemSession.getUser().getEnterprise().getUu(),
+							SystemSession.getUser().getUserUU(), "purc$notice", category, repliedIds.toArray(new Long[repliedIds.size()]));
+				}
+			}
+		} else {
+			repliedIds = purchaseNoticeDao.findRepliedId(unreadIds);
+			if (repliedIds.size() != 0) {
+				deleteCount = deleteCount + userOrderDao.delete(SystemSession.getUser().getEnterprise().getUu(),
+						SystemSession.getUser().getUserUU(), "purc$notice", category, repliedIds.toArray(new Long[repliedIds.size()]));
+			}
+		}
+		return deleteCount;
+	}
+
+    /**
+     * 通过ids查询发货信息
+     *
+     * @param ids
+     * @return
+     */
+    @Override
+    public List<PurchaseNotice> findByIds(List<Long> ids) {
+        return purchaseNoticeDao.findAll(ids);
+    }
+}

+ 32 - 0
src/main/java/com/uas/platform/b2b/support/DecimalUtils.java

@@ -0,0 +1,32 @@
+package com.uas.platform.b2b.support;
+
+import java.text.DecimalFormat;
+
+/**
+ * 平台数据小数点处理方式
+ *
+ * @author hejq
+ * @date 2018-08-16 15:30
+ */
+public class DecimalUtils {
+
+    /**
+     * 小数分割
+     *      <pre>
+     *          默认会四舍五入
+     *      </pre>
+     * @param oldValue 原值
+     * @param digit 小数点
+     * @return 返回处理后的数据
+     */
+    public static Double decimalPoint(Double oldValue, Integer digit) {
+        if (null != oldValue) {
+            String str = "#.###############";
+            String digitStr = str.substring(0, (2 + digit));
+            DecimalFormat decimalFormat = new java.text.DecimalFormat(digitStr);
+            return Double.valueOf(decimalFormat.format(oldValue));
+        } else {
+            return 0.00;
+        }
+    }
+}

+ 45 - 0
src/main/java/com/uas/platform/b2b/support/SearchUtils.java

@@ -0,0 +1,45 @@
+package com.uas.platform.b2b.support;
+
+/**
+ * 搜索相关
+ *
+ * @author hejq
+ * @date 2018-08-13 18:54
+ */
+public class SearchUtils {
+
+    /**
+     * UU号正则表达式
+     */
+    public static final String UU_REGEXP = "^\\d{4,}$";
+
+    /**
+     * 数字正则表达式
+     */
+    public static final String NUM_REGEXP= "^[0-9]*$";
+
+    /**
+     * 待处理
+     */
+    public static final String TODO_STATE = "todo";
+
+    /**
+     * 全部
+     */
+    public static final String ALL_STATE = "all";
+
+    /**
+     * 已处理
+     */
+    public static final String DONE_STATE = "done";
+
+    /**
+     * 已结案,已取消
+     */
+    public static final String END_STATE = "end";
+
+    /**
+     * 待发货
+     */
+    public static final String WAITING_STATE = "waiting";
+}

+ 17 - 68
src/main/java/com/uas/platform/b2b/temporary/model/ProductInfo.java

@@ -1,5 +1,7 @@
 package com.uas.platform.b2b.temporary.model;
 
+import com.uas.platform.b2b.model.Product;
+
 import java.util.Date;
 
 /**
@@ -8,33 +10,18 @@ import java.util.Date;
  * @author hejq
  * @time 创建时间:2017年5月17日
  */
-public class ProductInfo {
-
-	/**
-	 * id
-	 */
-	private Long id;
-
-	/**
-	 * 商品信息标题
-	 */
-	private String title;
-
-	/**
-	 * 产品编号
-	 */
-	private String code;
-
-	/**
-	 * 产品规格
-	 */
-	private String spec;
+public class ProductInfo extends Product {
 
 	/**
 	 * 数量
 	 */
 	private Double amount;
 
+    /**
+     * 不含税单价
+     */
+    private Double unitPrice;
+
 	/**
 	 * 税率
 	 */
@@ -45,11 +32,6 @@ public class ProductInfo {
 	 */
 	private Double rateprice;
 
-	/**
-	 * 不含税单价
-	 */
-	private Double price;
-
 	/**
 	 * 不含税总额
 	 */
@@ -65,38 +47,6 @@ public class ProductInfo {
 	 */
 	private String remark;
 
-	public Long getId() {
-		return id;
-	}
-
-	public void setId(Long id) {
-		this.id = id;
-	}
-
-	public String getTitle() {
-		return title;
-	}
-
-	public void setTitle(String title) {
-		this.title = title;
-	}
-
-	public String getCode() {
-		return code;
-	}
-
-	public void setCode(String code) {
-		this.code = code;
-	}
-
-	public String getSpec() {
-		return spec;
-	}
-
-	public void setSpec(String spec) {
-		this.spec = spec;
-	}
-
 	public Double getAmount() {
 		return amount;
 	}
@@ -113,7 +63,15 @@ public class ProductInfo {
 		this.rate = rate;
 	}
 
-	public Double getRateprice() {
+    public Double getUnitPrice() {
+        return unitPrice;
+    }
+
+    public void setUnitPrice(Double unitPrice) {
+        this.unitPrice = unitPrice;
+    }
+
+    public Double getRateprice() {
 		return rateprice;
 	}
 
@@ -121,14 +79,6 @@ public class ProductInfo {
 		this.rateprice = rateprice;
 	}
 
-	public Double getPrice() {
-		return price;
-	}
-
-	public void setPrice(Double price) {
-		this.price = price;
-	}
-
 	public Double getTotalprice() {
 		return totalprice;
 	}
@@ -152,5 +102,4 @@ public class ProductInfo {
 	public void setRemark(String remark) {
 		this.remark = remark;
 	}
-
 }

+ 0 - 76
src/main/java/com/uas/platform/b2b/temporary/model/UpdateByBatchParameter.java

@@ -1,76 +0,0 @@
-package com.uas.platform.b2b.temporary.model;
-
-/**
- * 批量修改传递的参数设置
- * 
- * @author hejq
- * @time 创建时间:2017年6月9日
- */
-public class UpdateByBatchParameter {
-
-	/**
-	 * 修改的字段类型
-	 */
-	private String updatetype;
-
-	/**
-	 * 需要修改的来源类型(销售、采购、总物料)
-	 */
-	private String type;
-
-	/**
-	 * 标准类型(all:全部; standard:标准; nonstandard: 非标准)
-	 */
-	private String standard;
-
-	/**
-	 * 原值
-	 */
-	private String oldvalue;
-
-	/**
-	 * 新值
-	 */
-	private String newvalue;
-
-	public String getUpdatetype() {
-		return updatetype;
-	}
-
-	public void setUpdatetype(String updatetype) {
-		this.updatetype = updatetype;
-	}
-
-	public String getType() {
-		return type;
-	}
-
-	public void setType(String type) {
-		this.type = type;
-	}
-
-	public String getStandard() {
-		return standard;
-	}
-
-	public void setStandard(String standard) {
-		this.standard = standard;
-	}
-
-	public String getOldvalue() {
-		return oldvalue;
-	}
-
-	public void setOldvalue(String oldvalue) {
-		this.oldvalue = oldvalue;
-	}
-
-	public String getNewvalue() {
-		return newvalue;
-	}
-
-	public void setNewvalue(String newvalue) {
-		this.newvalue = newvalue;
-	}
-
-}

+ 2 - 2
src/main/resources/cloud/jdbc.properties

@@ -27,6 +27,6 @@ manage.jdbc.password=select!#%*(
 
 
 jdbc.driverClassName=com.mysql.jdbc.Driver
-jdbc.url=jdbc:mysql://10.10.100.18:3306/b2b_prod?characterEncoding=UTF-8&allowMultiQueries=true&rewriteBatchedStatements=true
+jdbc.url=jdbc:mysql://172.16.0.250:3306/b2b_prod?characterEncoding=UTF-8&allowMultiQueries=true&rewriteBatchedStatements=true
 jdbc.username=root
-jdbc.password=select
+jdbc.password=select111***

+ 1 - 1
src/main/resources/cloud/redis.properties

@@ -1,2 +1,2 @@
-redis.host=10.10.100.200
+redis.host=172.16.0.150
 redis.port=6379

+ 1 - 1
src/main/resources/cloud/sys.properties

@@ -20,4 +20,4 @@ inquiryServiceUrl=https://api-inquiry.usoftmall.com/
 messageServiceIp=http://message.ubtob.com/
 
 #search url
-searchUrl=http://10.10.100.179:8081
+searchUrl=http://172.16.0.6:8081

+ 13 - 16
src/main/webapp/WEB-INF/views/normal/index.html

@@ -53,9 +53,6 @@
 					<li><a ng-click="b2cLink('/')">商城首页</a></li>
 					<li ng-if="userInfo"><a ng-click="b2cLink('/user#/home')">买家中心</a></li>
 					<li><a ng-click="b2cLink('/vendor#/index')">卖家中心</a></li>
-					<!--<li ng-if="userInfo.enterprise && userInfo.enterprise.isVendor == 313"><a ng-click="b2cLink('/vendor#/index')">卖家中心</a></li>-->
-					<!--<li ng-if="userInfo && !userInfo.enterprise"><a ng-click="b2cLink('/personalMaterial')">卖家中心</a></li>-->
-					<!--<li ng-if="userInfo && userInfo.enterprise && userInfo.enterprise.isVendor != 313" ><a ng-click="b2cLink('/register-saler')">卖家中心</a></li>-->
 					<li ng-if="userInfo" ><a ng-click="b2cLink('/sso#/index')">帐户中心</a></li>
 					<li><a ng-click="b2cLink('/help/home')" target="_black">帮助中心</a></li>
 				</ul>
@@ -191,19 +188,19 @@
 	<!-- body End -->
 
  <!--金控广告 -->
-<!--<div ng-controller="AdController">-->
-	<!--<div class="jinkong_bottom" ng-show="bannerShow" ng-class="{'jinkong_animation': jingKongAnmiation}"></div>-->
-	<!--<div class="jinkong" ng-if="imgShow" ng-class="{'jinkong_animation': jingKongAnmiation}">-->
-		<!--<div class="container">-->
-			<!--<div class="img" ng-class="{'img_stater': imgAnmiation}">-->
-				<!--<span class="qcrode_close close" ng-click="closeClick()">×</span>-->
-				<!--<span class="close time" ng-if="!imgAnmiation">{{count}}s</span>-->
-				<!--<img src="static/img/jinkong/xiaoren.png" ng-class="{'animation_xr': imgAnmiation}">-->
-				<!--<img src="static/img/jinkong/qrcode.png">-->
-			<!--</div>-->
-		<!--</div>-->
-	<!--</div>-->
-<!--</div>-->
+<div ng-controller="AdController">
+	<div class="jinkong_bottom" ng-show="bannerShow" ng-class="{'jinkong_animation': jingKongAnmiation}"></div>
+	<div class="jinkong" ng-if="imgShow" ng-class="{'jinkong_animation': jingKongAnmiation}">
+		<div class="container">
+			<div class="img" ng-class="{'img_stater': imgAnmiation}">
+				<span class="qcrode_close close" ng-click="closeClick()">×</span>
+				<span class="close time" ng-if="!imgAnmiation">{{count}}s</span>
+				<img src="static/img/jinkong/xiaoren.png" ng-class="{'animation_xr': imgAnmiation}">
+				<img src="static/img/jinkong/qrcode.png">
+			</div>
+		</div>
+	</div>
+</div>
  <!-- -金控广告 -->
 
 <!-- footer Start -->

+ 4 - 4
src/main/webapp/resources/css/index.css

@@ -239,9 +239,9 @@ a.none:hover {
 }
 
 /*dropdown*/
-.dropdown-menu {
-	min-width: 100%;
-}
+/*.dropdown-menu {*/
+	/*min-width: 100%;*/
+/*}*/
 
 .dropdown>.dropdown-toggle {
 	border-style: solid;
@@ -1266,7 +1266,7 @@ img.new-animate{
 
 .body .container .right {
 	width: 973px;
-	float: left;
+	float: left;.dropdown-menu
 	font-size: 12px;
 	min-height: 90vh;
 	background:#fff;

BIN
src/main/webapp/resources/img/all/goInto.jpg


BIN
src/main/webapp/resources/img/all/newPointer.jpg


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

@@ -14421,7 +14421,7 @@ define(['toaster', 'charts', 'ngTable', 'common/services', 'common/directives',
                         unit: 'PCS',
                         spec: prod.spec,
                         qty: prod.amount,
-                        price: prod.price,
+                        price: prod.rateprice,
                         remark: prod.remark,
                         delivery: prod.date,
                         prid: prod.id,
@@ -14429,7 +14429,6 @@ define(['toaster', 'charts', 'ngTable', 'common/services', 'common/directives',
                         prodsource: 'purchaser'
                     });
                 })
-
             }, function () {
 
             });
@@ -14590,12 +14589,8 @@ define(['toaster', 'charts', 'ngTable', 'common/services', 'common/directives',
         };
 
         $scope.enSure = function () {
-            $modalInstance.close($scope.result.products);
-        }
-
-        // 点击确定时增加加载标志
-        $scope.addClass = function() {
             $scope.loading = true;
+            $modalInstance.close($scope.result.products);
         }
 
         $scope.cancel = function () {
@@ -16149,7 +16144,7 @@ define(['toaster', 'charts', 'ngTable', 'common/services', 'common/directives',
                         unit: 'PCS',
                         spec: prod.spec,
                         qty: prod.amount,
-                        price: prod.price,
+                        price: prod.rateprice,
                         remark: prod.remark,
                         delivery: prod.date,
                         prid: prod.id,
@@ -16773,6 +16768,7 @@ define(['toaster', 'charts', 'ngTable', 'common/services', 'common/directives',
             pickupdate: '我方自向贵公司支付货款之日起3个自然日内提货完毕',
             riskmethod: '甲方承担',
             taxpaymentmethod: '甲方承担',
+            deliverymethod: '供应商送货到付款采购方指定仓库',
             totalamount: 0,
             totalpayament: 0,
             orderamount: 0,
@@ -16820,6 +16816,15 @@ define(['toaster', 'charts', 'ngTable', 'common/services', 'common/directives',
             });
         }
 
+        // 设置付款企业信息
+        $scope.setPayComName = function() {
+            // 针对信扬客户,如果是RMB赋值默认值
+            if ($scope.deOrder.currency == 'RMB' && $scope.deOrder.deputyuu == 10044118) {
+                $scope.deOrder.paycomname = '深圳信扬国际经贸股份有限公司';
+                $scope.deOrder.paycomaddress= '深圳市前海深港合作区前湾一路1号A栋201室(入驻深圳市前海商务秘书有限公司)';
+            }
+        }
+
         // 查找付款企业
         $scope.dbfindPayCompany = function (deputyuu) {
             var modalInstance = $modal.open({
@@ -17304,6 +17309,15 @@ define(['toaster', 'charts', 'ngTable', 'common/services', 'common/directives',
             });
         }
 
+        // 设置付款企业信息
+        $scope.setPayComName = function() {
+            // 针对信扬客户,如果是RMB赋值默认值
+            if ($scope.deOrder.currency == 'RMB' && $scope.deOrder.deputyuu == 10044118) {
+                $scope.deOrder.paycomname = '深圳信扬国际经贸股份有限公司';
+                $scope.deOrder.paycomaddress= '深圳市前海深港合作区前湾一路1号A栋201室(入驻深圳市前海商务秘书有限公司)';
+            }
+        }
+
         // 查找付款企业
         $scope.dbfindPayCompany = function (deputyuu) {
             var modalInstance = $modal.open({
@@ -24215,7 +24229,11 @@ define(['toaster', 'charts', 'ngTable', 'common/services', 'common/directives',
 
         // 跳转到B2C
         $scope.b2cLink = function (url) {
-            window.location.href = $scope.toB2cLink + url;
+            if (url == '/help/home') {
+                window.open($scope.toB2cLink + url)
+            } else {
+                window.location.href = $scope.toB2cLink + url;
+            }
         };
         // 头部固定
         window.addEventListener('scroll', function () {

+ 20 - 0
src/main/webapp/resources/tpl/index/common/header.html

@@ -30,6 +30,14 @@
 		width: 111px; /*inline元素的宽度会受到别的元素的影响,如果不设置宽度,则会被ghost-center设置的伪元素挤到下方*/
 		/*margin-left: -5.5em;*/
 	}
+    #header .header-main > li.header-guid {
+        float: right;
+    }
+    #header .header-main > li.header-guid a{
+        display: inline-block;
+        float: left;
+        cursor: pointer;
+    }
 	#header .mall-logo {
 		line-height: 100px;
 	}
@@ -211,6 +219,18 @@
                             </div>
                         </div>
                     </li>
+                    <li class="header-guid">
+                        <div class="guid">
+                            <!--新手指南-->
+                            <a class="enter" ng-click="b2cLink('/help/home')" target="_blank">
+                                <img src="static/img/all/newPointer.jpg"/>
+                            </a>
+                            <!--立即入驻-->
+                            <a class="enter" ng-click="b2cLink('/vendor#/store/maintain')">
+                                <img src="static/img/all/goInto.jpg"/>
+                            </a>
+                        </div>
+                    </li>
                 </ul>
             </div>
         </header>

+ 26 - 16
src/main/webapp/resources/tpl/index/purc/addOrder.html

@@ -176,23 +176,29 @@
 						<b>税率(%)</b> <b>交货日期</b> <b>备注</b> <b class="wid02">&nbsp;</b>
 					</dt>
 					<dd ng-repeat="item in order.orderItems">
-						<b>{{$index + 1}}</b> <b class="wid01">
-							<p>{{item.code}}</p>
-							<p>{{item.title}}</p>
-							<p>{{item.spec}}</p>
-						</b> <b>{{item.unit||'-'}}</b> <b><input class="editable" type="text"
+						<b>{{$index + 1}}</b>
+                        <b class="wid01">
+							<p>{{::item.code}}</p>
+							<p>{{::item.title}}</p>
+							<p>{{::item.spec}}</p>
+						</b> <b>{{::item.unit||'-'}}</b>
+						<b><input class="editable" type="text"
 							ng-model="item.qty" placeholder="数量" style="cursor: pointer;"
 							required="true"
-							ng-pattern="/^(([0-9]+\.[0-9]{1,3})|([0-9]*[1-9][0-9]*\.[0-9]{1,3})|([0-9]*[1-9][0-9]*))$/" /></b>
+							ng-pattern="/^(([0-9]+\.[0-9]{1,3})|([0-9]*[1-9][0-9]*\.[0-9]{1,3})|([0-9]*[1-9][0-9]*))$/" />
+						</b>
 						<b><input class="editable" type="text" ng-model="item.price"
 							placeholder="单价" style="cursor: pointer;" required="true"
-							ng-pattern="/^(([0-9]+\.[0-9]{1,6})|([0-9]*[1-9][0-9]*\.[0-9]{1,6})|([0-9]*[1-9][0-9]*))$/" /></b>
-						<b ng-if="order.currency == 'RMB'"><input class="editable"
-							type="text" ng-model="item.taxrate" placeholder="税率"
-							style="cursor: pointer;" ng-pattern="/^[0-9][0-9]{0,1}$/" /></b> <b
-							ng-if="order.currency != 'RMB'"><input class="editable"
-							type="text" style="cursor: pointer;" value="0"
-							readonly="readonly" /></b> <b> <input ng-model="item.delivery"
+							ng-pattern="/^(([0-9]+\.[0-9]{1,6})|([0-9]*[1-9][0-9]*\.[0-9]{1,6})|([0-9]*[1-9][0-9]*))$/" />
+						</b>
+						<b ng-if="order.currency == 'RMB'">
+							<input class="editable" type="text" ng-model="item.taxrate" placeholder="税率"
+                                   style="cursor: pointer;" ng-pattern="/^[0-9][0-9]{0,1}$/" />
+						</b>
+						<b ng-if="order.currency != 'RMB'">
+                            <input class="editable" type="text" style="cursor: pointer;" value="0" readonly="readonly" />
+                        </b>
+                        <b> <input ng-model="item.delivery"
 							type="text" class="editable" placeholder="选择时间"
 							datepicker-popup="yyyy-MM-dd" is-open="item.$endDateOpen"
 							min-date="getMinDate()" ng-required="true" current-text="今天"
@@ -201,9 +207,13 @@
 							ng-focus="openDatePicker($event, item.$endDateOpen)"
 							readonly="readonly"
 							ng-click="openDatePicker($event, item.$endDateOpen, $index)">
-						</b> <b class="textMore"><input class="editable" type="text"
-							ng-model="item.remark" placeholder="备注" /></b> <b class="wid02"><a
-							ng-click="deleteProduct($index)"><i class="fa fa-close"></i></a></b>
+						</b>
+						<b class="textMore">
+                            <input class="editable" type="text" ng-model="item.remark" placeholder="备注" />
+                        </b>
+						<b class="wid02">
+							<a ng-click="deleteProduct($index)"><i class="fa fa-close"></i></a>
+						</b>
 					</dd>
 				</dl>
 				<div class="save" ng-if="order.orderItems[0].code != null">

+ 4 - 2
src/main/webapp/resources/tpl/index/purc/deputyOrder_detail.html

@@ -284,7 +284,8 @@
                             <div class="fr">
                                 <em><b>*</b>交易币别:</em>
                                <span> 
-	                               	<select name="" class="select" ng-model="deOrder.currency" ng-init="deOrder.currency = 'USD'" ng-disabled="!deOrder.$editing">
+	                               	<select name="" class="select" ng-model="deOrder.currency" ng-init="deOrder.currency = 'USD'"
+                                            ng-disabled="!deOrder.$editing" ng-change="setPayComName()">
 	                                    <option value="USD">USD</option>
 	                                    <option value="RMB">RMB</option>
 	                                    <option value="HKD">HKD</option>
@@ -495,7 +496,8 @@
                          <li>
                             <div class="fl">
                                 <em><b>*</b>付款公司: </em>
-                                <span><input type="text" class="input01" ng-model="deOrder.paycomname" ng-readonly="!deOrder.$editing" ng-click="dbfindPayCompany(deOrder.deputyuu)" ng-required="true"></span>
+                                <span ng-if="deOrder.currency !='RMB'"><input type="text" class="input01" ng-model="deOrder.paycomname" ng-click="dbfindPayCompany(deOrder.deputyuu)" ng-required="true" ng-readonly="!deOrder.$editing" ></span>
+                                <span ng-if="deOrder.currency =='RMB' && deOrder.deputyuu == 10044118"><input type="text" class="input01" ng-model="deOrder.paycomname" readonly></span>
                             </div>
                             <div class="fr">
                                 <em><b>*</b>付款公司地址:</em>

+ 3 - 2
src/main/webapp/resources/tpl/index/purc/deputyOrder_new.html

@@ -282,7 +282,7 @@
                             <div class="fr">
                                 <em><b>*</b>交易币别:</em>
                                <span> 
-	                               	<select name="" class="select" ng-model="deOrder.currency" ng-init="deOrder.currency = 'USD'">
+	                               	<select name="" class="select" ng-model="deOrder.currency" ng-init="deOrder.currency = 'USD'" ng-change="setPayComName()">
 	                                    <option value="USD">USD</option>
 	                                    <option value="RMB">RMB</option>
 	                                    <option value="HKD">HKD</option>
@@ -490,7 +490,8 @@
                          <li>
                             <div class="fl">
                                 <em><b>*</b>付款公司: </em>
-                                <span><input type="text" class="input01" ng-model="deOrder.paycomname" ng-click="dbfindPayCompany(deOrder.deputyuu)"></span>
+                                <span ng-if="deOrder.currency !='RMB'"><input type="text" class="input01" ng-model="deOrder.paycomname" ng-click="dbfindPayCompany(deOrder.deputyuu)"></span>
+                                <span ng-if="deOrder.currency =='RMB' && deOrder.deputyuu == 10044118"><input type="text" class="input01" ng-model="deOrder.paycomname" readonly></span>
                             </div>
                             <div class="fr">
                                 <em><b>*</b>付款公司地址:</em>

+ 3 - 1
src/main/webapp/resources/tpl/index/purc/inquiryInfo_detail.html

@@ -537,7 +537,9 @@ i, em {
                                         <em>{{inquiryItem.toDate|date: 'yyyy-MM-dd'}}</em>
                                     </span>
                                     <span ng-if="inquiryItem.status == 200" class="text-trans info">暂未报价</span>
-                                    <span ng-if="inquiryItem.status == 201 && inquiryItem.agreed == null"><a ng-click="accept(inquiryItem.id)">采纳</a><a ng-click="refuse(inquiryItem.id)">拒绝</a></span>
+                                    <span ng-if="inquiryItem.status == 201 && inquiryItem.agreed == null">
+                                        <em ng-click="accept(inquiryItem.id)" style="color: #05acd1">采纳</em> <em style="color: #05acd1" ng-click="refuse(inquiryItem.id)">拒绝</em>
+                                    </span>
 									<span ng-if="inquiryItem.status == 201 && inquiryItem.agreed == 1" class="text-trans success">已采纳</span>
 									<span ng-if="inquiryItem.status == 201 && inquiryItem.agreed == 0" class="text-trans error">未采纳</span>
 									<!--<span ng-if="inquiryItem.status == 201 && inquiryItem.agreed == null && inquiryItem.toDate < nowDate" class="text-trans text-light">已失效</span>-->

+ 1 - 1
src/main/webapp/resources/tpl/index/purc/modal/purc_uplodaByBatch.html

@@ -67,7 +67,7 @@
 </div>
 <div class="modal-footer Deputy">
 	<div class="text-center">
-		<button class="btn btn-success btn-sm" ng-click=" addClass(); enSure()" type="button">确定</button>
+		<button class="btn btn-success btn-sm" ng-click="enSure()" type="button">确定</button>
 		<button class="btn btn-danger btn-sm" ng-click="cancel()" type="button">取消</button>
 	</div>
 </div>

+ 0 - 8
src/main/webapp/resources/tpl/index/sale/customer.html

@@ -12,14 +12,6 @@
 #customer-tab tbody tr.header:hover{
 	border: none;
 }
-.pane .pane-header{
-	border-radius: 0px 0 0px 0px;
-	box-shadow: 0 0 3px #ccc;
-	background: linear-gradient(to top, #e7e7e7 0%,#ffffff 100%);
-	height: 40px;
-	font-size: 14px;
-	line-height: 40px;
-}
 .table>tbody+tbody{
 	border-top: none;
 }

+ 18 - 2
src/main/webapp/resources/tpl/index/sale/notice.html

@@ -54,6 +54,7 @@
     }
 
     .order-table .order-hd .order-sum {
+        position: relative;
         padding: 0 5px;
     }
 
@@ -101,7 +102,22 @@
         line-height: 1.5;
         border-radius: 3px;
     }
-
+    .order-table .order-hd .dropdown-toggle:hover + .order-snapshot {
+        display: block;
+    }
+    .order-table .order-hd .order-snapshot{
+        padding: 10px 15px;
+        display: none;
+        width: 250px;
+        position: absolute;
+        top: 32px;
+        left: 39px;
+        border: 1px solid rgba(0,0,0,0.15);
+        -webkit-box-shadow: 0 0 5px rgba(0,0,0,0.3);
+        -moz-box-shadow: 0 0 5px rgba(0,0,0,0.3);
+        -o-box-shadow: 0 0 5px rgba(0,0,0,0.3);
+        box-shadow: 0 0 5px rgba(0,0,0,0.3);
+    }
     .order-snapshot .title {
         border-top: 1px dashed #ddd;
     }
@@ -351,7 +367,7 @@
                     <span ng-bind="notice.orderItem.order.enterprise.enName"></span>
                 </div>
             </td>
-            <td class="text-right" colspan="2" class="order-sum"><a title="查看采购单详情"
+            <td class="text-right order-sum" colspan="2"><a title="查看采购单详情"
                     class="dropdown-toggle order-detail" ui-sref="sale.order_detail({id:notice.orderItem.order.id})" target="_self"> <span
                     class="text-num text-bold" ng-bind="::notice.orderItem.order.code" ng-click="setOrdersRead(notice.id)"></span>
                 第{{notice.orderItem.number}}行 <i class="fa fa-fw fa-angle-down"></i>

+ 0 - 8
src/main/webapp/resources/tpl/index/sale/vendorPerformanceAssess.html

@@ -12,14 +12,6 @@
 #customer-tab tbody tr.header:hover{
 	border: none;
 }
-.pane .pane-header{
-	border-radius: 0px 0 0px 0px;
-	box-shadow: 0 0 3px #ccc;
-	background: linear-gradient(to top, #e7e7e7 0%,#ffffff 100%);
-	height: 40px;
-	font-size: 14px;
-	line-height: 40px;
-}
 .table>tbody+tbody{
 	border-top: none;
 }