Ver Fonte

处理代码合并异常问题

hejq há 7 anos atrás
pai
commit
dd757087d8

+ 8 - 1
src/main/java/com/uas/platform/b2b/dao/PurchaseOrderDao.java

@@ -3,12 +3,19 @@ package com.uas.platform.b2b.dao;
 import com.uas.platform.b2b.model.PurchaseOrder;
 import com.uas.platform.b2b.model.PurchaseOrder;
 import org.springframework.data.jpa.repository.JpaRepository;
 import org.springframework.data.jpa.repository.JpaRepository;
 import org.springframework.data.jpa.repository.JpaSpecificationExecutor;
 import org.springframework.data.jpa.repository.JpaSpecificationExecutor;
+import org.springframework.data.jpa.repository.Modifying;
 import org.springframework.data.jpa.repository.Query;
 import org.springframework.data.jpa.repository.Query;
 import org.springframework.data.repository.query.Param;
 import org.springframework.data.repository.query.Param;
 import org.springframework.stereotype.Repository;
 import org.springframework.stereotype.Repository;
 
 
+import javax.transaction.Transactional;
 import java.util.List;
 import java.util.List;
 
 
+/**
+ * 采购订单
+ *
+ * @author US50
+ */
 @Repository
 @Repository
 public interface PurchaseOrderDao extends JpaSpecificationExecutor<PurchaseOrder>, JpaRepository<PurchaseOrder, Long> {
 public interface PurchaseOrderDao extends JpaSpecificationExecutor<PurchaseOrder>, JpaRepository<PurchaseOrder, Long> {
 
 
@@ -93,7 +100,7 @@ public interface PurchaseOrderDao extends JpaSpecificationExecutor<PurchaseOrder
 	 * @param id id
 	 * @param id id
 	 */
 	 */
 	@Modifying
 	@Modifying
-	@Transactional
+	@Transactional(rollbackOn = Exception.class)
 	@Query("update PurchaseOrder set status = :status where id = :id")
 	@Query("update PurchaseOrder set status = :status where id = :id")
 	void updatePurchaseStatus(@Param("status") Short status, @Param("id") Long id);
 	void updatePurchaseStatus(@Param("status") Short status, @Param("id") Long id);
 }
 }

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

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

+ 91 - 56
src/main/java/com/uas/platform/b2b/service/PurchaseNoticeService.java

@@ -9,19 +9,24 @@ import org.springframework.data.domain.Page;
 import java.util.List;
 import java.util.List;
 import java.util.Map;
 import java.util.Map;
 
 
+/**
+ * 发货提醒
+ *
+ * @author US50
+ */
 public interface PurchaseNoticeService {
 public interface PurchaseNoticeService {
 	
 	
 	/**
 	/**
 	 * 转收料单
 	 * 转收料单
-	 * @param saleSendItems
+	 * @param verifies
 	 */
 	 */
-	public void onVerify(List<SaleSendItemVerify> verifies);
+	void onVerify(List<SaleSendItemVerify> verifies);
 
 
 	/**
 	/**
 	 * 反审核收料单
 	 * 反审核收料单
-	 * @param saleSendItems
+	 * @param verifies
 	 */
 	 */
-	public void unVerify(List<SaleSendItemVerify> verifies);
+	void unVerify(List<SaleSendItemVerify> verifies);
 
 
 	/**
 	/**
 	 * 批量保存、修改客户送货提醒
 	 * 批量保存、修改客户送货提醒
@@ -29,7 +34,7 @@ public interface PurchaseNoticeService {
 	 * @param notices
 	 * @param notices
 	 * @return
 	 * @return
 	 */
 	 */
-	public List<PurchaseNotice> save(List<PurchaseNotice> notices);
+	List<PurchaseNotice> save(List<PurchaseNotice> notices);
 
 
 	/**
 	/**
 	 * 批量结案客户送货提醒
 	 * 批量结案客户送货提醒
@@ -37,7 +42,7 @@ public interface PurchaseNoticeService {
 	 * @param notifies
 	 * @param notifies
 	 * @return
 	 * @return
 	 */
 	 */
-	public void end(List<PurchaseNotify> notifies);
+	void end(List<PurchaseNotify> notifies);
 
 
 	/**
 	/**
 	 * 分页查找送货提醒单
 	 * 分页查找送货提醒单
@@ -47,22 +52,14 @@ public interface PurchaseNoticeService {
 	 *            查找关键词
 	 *            查找关键词
 	 * @return
 	 * @return
 	 */
 	 */
-	public Page<PurchaseNotice> findAllByPageInfo(PageInfo pageInfo, String keyword, Long fromDate, Long endDate, SearchFilter filter);
+	Page<PurchaseNotice> findAllByPageInfo(PageInfo pageInfo, String keyword, Long fromDate, Long endDate, SearchFilter filter);
 
 
 	/**
 	/**
 	 * 根据发货单ID获取单个发货单
 	 * 根据发货单ID获取单个发货单
 	 * @param id
 	 * @param id
 	 * @return
 	 * @return
 	 */
 	 */
-	public SaleSendAll findSaleSendById(Long id);
-	
-	/**
-	 * 分页查找送货单
-	 * 
-	 * @param pageInfo
-	 * @return
-	 */
-	public Page<SaleSendAll> findSendsByPageInfo(PageInfo pageInfo, String keyword, Long fromDate, Long endDate, SearchFilter filter);
+	SaleSendAll findSaleSendById(Long id);
 
 
 	/**
 	/**
 	 * 分页查找送货提醒单
 	 * 分页查找送货提醒单
@@ -72,7 +69,7 @@ public interface PurchaseNoticeService {
 	 *            查找关键词
 	 *            查找关键词
 	 * @return
 	 * @return
 	 */
 	 */
-	public Page<PurchaseNotice> findDoneByPageInfo(PageInfo pageInfo, String keyword, Long fromDate, Long endDate);
+	Page<PurchaseNotice> findDoneByPageInfo(PageInfo pageInfo, String keyword, Long fromDate, Long endDate);
 
 
 	/**
 	/**
 	 * 用单据ID查找送货提醒单
 	 * 用单据ID查找送货提醒单
@@ -80,7 +77,7 @@ public interface PurchaseNoticeService {
 	 * @param id
 	 * @param id
 	 * @return
 	 * @return
 	 */
 	 */
-	public PurchaseNotice findById(Long id);
+	PurchaseNotice findById(Long id);
 
 
 	/**
 	/**
 	 * 用单据ID查找送货提醒单
 	 * 用单据ID查找送货提醒单
@@ -88,7 +85,7 @@ public interface PurchaseNoticeService {
 	 * @param ids
 	 * @param ids
 	 * @return
 	 * @return
 	 */
 	 */
-	public List<PurchaseNotice> findById(Long[] ids);
+	List<PurchaseNotice> findById(Long[] ids);
 
 
 	/**
 	/**
 	 * 针对送货提醒,填写数量单个发货
 	 * 针对送货提醒,填写数量单个发货
@@ -98,14 +95,14 @@ public interface PurchaseNoticeService {
 	 * @param send
 	 * @param send
 	 *            本次发货
 	 *            本次发货
 	 */
 	 */
-	public SaleSend send(Long noticeId, SaleSend send);
+	SaleSend send(Long noticeId, SaleSend send);
 
 
 	/**
 	/**
 	 * 批量发货
 	 * 批量发货
 	 * 
 	 * 
 	 * @param sendItems
 	 * @param sendItems
 	 */
 	 */
-	public void send(List<SaleSendItem> sendItems);
+	void send(List<SaleSendItem> sendItems);
 
 
 	/**
 	/**
 	 * 同一张发货单批量发货
 	 * 同一张发货单批量发货
@@ -113,7 +110,7 @@ public interface PurchaseNoticeService {
 	 * @param saleSend
 	 * @param saleSend
 	 * @return
 	 * @return
 	 */
 	 */
-	public SaleSend send(SaleSend saleSend);
+	SaleSend send(SaleSend saleSend);
 
 
 	/**
 	/**
 	 * 查找送货提醒单的发货记录
 	 * 查找送货提醒单的发货记录
@@ -121,105 +118,105 @@ public interface PurchaseNoticeService {
 	 * @param noticeId
 	 * @param noticeId
 	 * @return
 	 * @return
 	 */
 	 */
-	public List<SaleSendItem> findSendById(long noticeId);
+	List<SaleSendItem> findSendById(long noticeId);
 
 
 	/**
 	/**
 	 * 查找所有待上传到供应商ERP的送货提醒
 	 * 查找所有待上传到供应商ERP的送货提醒
 	 * 
 	 * 
 	 * @return
 	 * @return
 	 */
 	 */
-	public List<PurchaseNotice> findNotUploadNotice();
+	List<PurchaseNotice> findNotUploadNotice();
 
 
 	/**
 	/**
 	 * 平台的送货提醒传到供应商ERP之后,修改平台里面的送货提醒单的上传状态
 	 * 平台的送货提醒传到供应商ERP之后,修改平台里面的送货提醒单的上传状态
 	 * 
 	 * 
 	 * @param idArray
 	 * @param idArray
 	 */
 	 */
-	public void onNoticeDownSuccess(String[] idArray);
+	void onNoticeDownSuccess(String[] idArray);
 
 
 	/**
 	/**
 	 * 查找所有待上传到买家的发货单
 	 * 查找所有待上传到买家的发货单
 	 * 
 	 * 
 	 * @return
 	 * @return
 	 */
 	 */
-	public List<SaleSend> findNotUploadSend();
+	List<SaleSend> findNotUploadSend();
 
 
 	/**
 	/**
 	 * 查找所有待上传到卖家的发货单
 	 * 查找所有待上传到卖家的发货单
 	 * 
 	 * 
 	 * @return
 	 * @return
 	 */
 	 */
-	public List<SaleSend> findNotSendSend();
+	List<SaleSend> findNotSendSend();
 
 
 	/**
 	/**
 	 * 发货单成功传到买家ERP之后
 	 * 发货单成功传到买家ERP之后
 	 * 
 	 * 
 	 * @param idArray
 	 * @param idArray
 	 */
 	 */
-	public void onSendUploadSuccess(String[] idArray);
+	void onSendUploadSuccess(String[] idArray);
 
 
 	/**
 	/**
 	 * 发货单成功传到卖家ERP之后
 	 * 发货单成功传到卖家ERP之后
 	 * 
 	 * 
 	 * @param idArray
 	 * @param idArray
 	 */
 	 */
-	public void onSendDownSuccess(String[] idArray);
+	void onSendDownSuccess(String[] idArray);
 
 
 	/**
 	/**
 	 * 查找所有待上传到卖家的已结案送货提醒
 	 * 查找所有待上传到卖家的已结案送货提醒
 	 * 
 	 * 
 	 * @return
 	 * @return
 	 */
 	 */
-	public List<PurchaseNotice> findNotSendEnd();
+	List<PurchaseNotice> findNotSendEnd();
 
 
 	/**
 	/**
 	 * 已结案送货提醒单成功传到卖家ERP之后
 	 * 已结案送货提醒单成功传到卖家ERP之后
 	 * 
 	 * 
 	 * @param idArray
 	 * @param idArray
 	 */
 	 */
-	public void onEndDownSuccess(String[] idArray);
+	void onEndDownSuccess(String[] idArray);
 
 
 	/**
 	/**
 	 * 获取待发货的客户送货提醒单条数
 	 * 获取待发货的客户送货提醒单条数
 	 * 
 	 * 
 	 * @return
 	 * @return
 	 */
 	 */
-	public int getOnhandCount();
+	int getOnhandCount();
 
 
 	/**
 	/**
 	 * 买家修改收料通知的数量后,写回到平台
 	 * 买家修改收料通知的数量后,写回到平台
 	 * 
 	 * 
 	 * @param sendItems
 	 * @param sendItems
 	 */
 	 */
-	public void onSaleSendChange(List<SaleSendItem> sendItems);
+	void onSaleSendChange(List<SaleSendItem> sendItems);
 	
 	
 	/**
 	/**
 	 * 根据企业UU号查询待发货统计条数
 	 * 根据企业UU号查询待发货统计条数
 	 * @param enUU
 	 * @param enUU
 	 * @return
 	 * @return
 	 */
 	 */
-	public Long getTodoNoticeCountByEnUU(Long enUU);
+	Long getTodoNoticeCountByEnUU(Long enUU);
 	
 	
 	/**
 	/**
 	 * 根据企业UU号查询备货送货统计条数
 	 * 根据企业UU号查询备货送货统计条数
 	 * @param enUU
 	 * @param enUU
 	 * @return
 	 * @return
 	 */
 	 */
-	public Long getWatingNoticeCountByEnUU(Long enUU);
+	Long getWatingNoticeCountByEnUU(Long enUU);
 	
 	
 	/**
 	/**
 	 * 根据企业UU号查询已取消送货统计条数
 	 * 根据企业UU号查询已取消送货统计条数
 	 * @param enUU
 	 * @param enUU
 	 * @return
 	 * @return
 	 */
 	 */
-	public Long getEndNoticeCountByEnUU(Long enUU);
+	Long getEndNoticeCountByEnUU(Long enUU);
 	
 	
 	/**
 	/**
 	 * 根据企业UU号查询送货统计条数
 	 * 根据企业UU号查询送货统计条数
 	 * @param enUU
 	 * @param enUU
 	 * @return
 	 * @return
 	 */
 	 */
-	public Long getAllNoticeCountByEnUU(Long enUU);
+	Long getAllNoticeCountByEnUU(Long enUU);
 	
 	
 	/**
 	/**
 	 * 
 	 * 
@@ -228,7 +225,7 @@ public interface PurchaseNoticeService {
 	 * @param packageQty
 	 * @param packageQty
 	 * @param outBoxQty
 	 * @param outBoxQty
 	 */
 	 */
-	public void updateBarCode(Long id, Double packageQty,Double outBoxQty);
+	void updateBarCode(Long id, Double packageQty,Double outBoxQty);
 
 
 	/**
 	/**
 	 * 生成条码和箱号
 	 * 生成条码和箱号
@@ -236,7 +233,7 @@ public interface PurchaseNoticeService {
 	 * @param sendItem
 	 * @param sendItem
 	 * @param enUU
 	 * @param enUU
 	 */
 	 */
-	public void generateBarcodes(Long id, List<SaleSendItem> sendItem, Long enUU);
+	void generateBarcodes(Long id, List<SaleSendItem> sendItem, Long enUU);
     /**
     /**
      * 根据发货单明细ID获取需要打印的条码和箱号
      * 根据发货单明细ID获取需要打印的条码和箱号
      * @param lpsId
      * @param lpsId
@@ -244,7 +241,7 @@ public interface PurchaseNoticeService {
      * @param enUU
      * @param enUU
      * @return
      * @return
      */
      */
-	public List<Map<String,Object>> getPrintBarcodes(Long lpsId, List<SaleSendItem> sendItem, Long enUU);
+	List<Map<String,Object>> getPrintBarcodes(Long lpsId, List<SaleSendItem> sendItem, Long enUU);
 
 
 	/**
 	/**
 	 * 获取打印模板
 	 * 获取打印模板
@@ -252,7 +249,7 @@ public interface PurchaseNoticeService {
 	 * @param type
 	 * @param type
 	 * @return
 	 * @return
 	 */
 	 */
-	public List<BarLabelPrintSetting> getPrintTemplate(Long id, String type);
+	List<BarLabelPrintSetting> getPrintTemplate(Long id, String type);
 
 
 	/**
 	/**
 	 * 单个条码打印,获取打印数据
 	 * 单个条码打印,获取打印数据
@@ -260,31 +257,19 @@ public interface PurchaseNoticeService {
 	 * @param bsnId
 	 * @param bsnId
 	 * @return
 	 * @return
 	 */
 	 */
-	public List<Map<String,Object>> getSPrintBarcode(Long lpsId, Long bsnId);
+	List<Map<String,Object>> getSPrintBarcode(Long lpsId, Long bsnId);
 
 
 	/**
 	/**
 	 * 更新明细行条码打印状态
 	 * 更新明细行条码打印状态
 	 * @param ids
 	 * @param ids
 	 */
 	 */
-	public void updatePrintStatus(List<SaleSendItem> ids);
+	void updatePrintStatus(List<SaleSendItem> ids);
 	/**
 	/**
 	 * 获取当前用户作为供应商的客户发货通知数量
 	 * 获取当前用户作为供应商的客户发货通知数量
 	 * @return
 	 * @return
 	 */
 	 */
-	public Long getAllCount();
+	Long getAllCount();
 	
 	
-	/**
-	 * 获取发货单总数量
-	 * @return
-	 */
-	public Long getSaleSendCount();
-	
-	/**
-	 * 获取已收料发货单数量
-	 * @return
-	 */
-	public Long getSaleSendVerify();
-
 	/**
 	/**
 	 * 增加发货单打印次数
 	 * 增加发货单打印次数
 	 * @param id
 	 * @param id
@@ -292,14 +277,46 @@ public interface PurchaseNoticeService {
 	 */
 	 */
     void printCount(Long id);
     void printCount(Long id);
 
 
+    /**
+     * EDI查询未发货单据
+     *
+     * @param enUU
+     * @return
+     */
     List<SaleSend> findNotUploadSendEDI(Long enUU);
     List<SaleSend> findNotUploadSendEDI(Long enUU);
 
 
+    /**
+     * 设置已阅读
+     *
+     * @param category 表名
+     * @param sourceId id
+     */
 	void setReadByOrder(String category, Long[] sourceId);
 	void setReadByOrder(String category, Long[] sourceId);
 
 
+    /**
+     * 获取发货提醒数量
+     *
+     * @param category
+     * @return
+     */
     Map<String, Integer> getNoticeCount(String category);
     Map<String, Integer> getNoticeCount(String category);
 
 
+    /**
+     * 查询已发货的发货提醒
+     *
+     * @param pageInfo
+     * @param keyword
+     * @param filter
+     * @return
+     */
 	SPage<PurchaseNotice> findDoneNoticesByPageInfo(PageInfo pageInfo, String keyword, SearchFilter filter);
 	SPage<PurchaseNotice> findDoneNoticesByPageInfo(PageInfo pageInfo, String keyword, SearchFilter filter);
 
 
+    /**
+     * 设置阅读状态
+     *
+     * @param category
+     * @return
+     */
     Integer setReadByState(String category);
     Integer setReadByState(String category);
 
 
     /**
     /**
@@ -309,4 +326,22 @@ public interface PurchaseNoticeService {
      * @return
      * @return
      */
      */
     List<PurchaseNotice> findByIds(List<Long> ids);
     List<PurchaseNotice> findByIds(List<Long> ids);
+
+    /**
+     * 查询未阅读数量
+     *
+     * @param category 表名
+     * @return
+     */
+    List<Long> getUnreadIds(String category);
+
+    /**
+     * 查询发货提醒
+     *
+     * @param pageInfo 分页信息
+     * @param keyword 关键字
+     * @param filter 过滤条件
+     * @return
+     */
+    SPage<PurchaseNotice> findAllNoticesByPageInfo(PageInfo pageInfo, String keyword, SearchFilter filter);
 }
 }

+ 8 - 3
src/main/java/com/uas/platform/b2b/service/impl/MakeAcceptServiceImpl.java

@@ -5,12 +5,14 @@ import com.uas.platform.b2b.dao.MakeAcceptDao;
 import com.uas.platform.b2b.dao.MakeAcceptItemDao;
 import com.uas.platform.b2b.dao.MakeAcceptItemDao;
 import com.uas.platform.b2b.dao.MakeOrderDao;
 import com.uas.platform.b2b.dao.MakeOrderDao;
 import com.uas.platform.b2b.dao.PagingReleaseCountDao;
 import com.uas.platform.b2b.dao.PagingReleaseCountDao;
+import com.uas.platform.b2b.erp.model.OrderDetailPrice;
 import com.uas.platform.b2b.erp.model.ProdInOutRefreshPrice;
 import com.uas.platform.b2b.erp.model.ProdInOutRefreshPrice;
+import com.uas.platform.b2b.erp.service.MakeService;
 import com.uas.platform.b2b.event.MakeAcceptSaveReleaseEvent;
 import com.uas.platform.b2b.event.MakeAcceptSaveReleaseEvent;
 import com.uas.platform.b2b.model.MakeAccept;
 import com.uas.platform.b2b.model.MakeAccept;
 import com.uas.platform.b2b.model.MakeAcceptItem;
 import com.uas.platform.b2b.model.MakeAcceptItem;
 import com.uas.platform.b2b.model.MakeOrder;
 import com.uas.platform.b2b.model.MakeOrder;
-import com.uas.platform.b2b.search.SearchService;
+import com.uas.platform.b2b.model.OrderType;
 import com.uas.platform.b2b.service.MakeAcceptService;
 import com.uas.platform.b2b.service.MakeAcceptService;
 import com.uas.platform.b2b.support.SystemSession;
 import com.uas.platform.b2b.support.SystemSession;
 import com.uas.platform.core.model.Constant;
 import com.uas.platform.core.model.Constant;
@@ -31,6 +33,9 @@ import java.util.ArrayList;
 import java.util.Date;
 import java.util.Date;
 import java.util.List;
 import java.util.List;
 
 
+/**
+ * @author US50
+ */
 @Service
 @Service
 public class MakeAcceptServiceImpl implements MakeAcceptService {
 public class MakeAcceptServiceImpl implements MakeAcceptService {
 
 
@@ -44,10 +49,10 @@ public class MakeAcceptServiceImpl implements MakeAcceptService {
 	private MakeAcceptDao makeAcceptDao;
 	private MakeAcceptDao makeAcceptDao;
 
 
 	@Autowired
 	@Autowired
-	private SearchService searchService;
+	private PagingReleaseCountDao pagingReleaseCountDao;
 
 
 	@Autowired
 	@Autowired
-	private PagingReleaseCountDao pagingReleaseCountDao;
+	private MakeService makeService;
 
 
 	@Override
 	@Override
 	public void save(List<MakeAcceptItem> acceptItems) {
 	public void save(List<MakeAcceptItem> acceptItems) {

+ 9 - 0
src/main/java/com/uas/platform/b2b/service/impl/MakeReturnServiceImpl.java

@@ -3,6 +3,7 @@ package com.uas.platform.b2b.service.impl;
 import com.uas.platform.b2b.dao.MakeOrderDao;
 import com.uas.platform.b2b.dao.MakeOrderDao;
 import com.uas.platform.b2b.dao.MakeReturnDao;
 import com.uas.platform.b2b.dao.MakeReturnDao;
 import com.uas.platform.b2b.dao.MakeReturnItemDao;
 import com.uas.platform.b2b.dao.MakeReturnItemDao;
+import com.uas.platform.b2b.dao.PagingReleaseCountDao;
 import com.uas.platform.b2b.erp.model.OrderDetailPrice;
 import com.uas.platform.b2b.erp.model.OrderDetailPrice;
 import com.uas.platform.b2b.erp.model.ProdInOutRefreshPrice;
 import com.uas.platform.b2b.erp.model.ProdInOutRefreshPrice;
 import com.uas.platform.b2b.erp.service.MakeService;
 import com.uas.platform.b2b.erp.service.MakeService;
@@ -34,6 +35,11 @@ import java.util.ArrayList;
 import java.util.Date;
 import java.util.Date;
 import java.util.List;
 import java.util.List;
 
 
+/**
+ * 委外验退
+ *
+ * @author US50
+ */
 @Service
 @Service
 public class MakeReturnServiceImpl implements MakeReturnService {
 public class MakeReturnServiceImpl implements MakeReturnService {
 
 
@@ -52,6 +58,9 @@ public class MakeReturnServiceImpl implements MakeReturnService {
 	@Autowired
 	@Autowired
     private MakeService makeService;
     private MakeService makeService;
 
 
+	@Autowired
+	private PagingReleaseCountDao pagingReleaseCountDao;
+
 	@Override
 	@Override
 	public void save(List<MakeReturnItem> returnItems) {
 	public void save(List<MakeReturnItem> returnItems) {
 		returnItems = makeReturnItemDao.save(returnItems);
 		returnItems = makeReturnItemDao.save(returnItems);

+ 14 - 69
src/main/java/com/uas/platform/b2b/service/impl/ProductServiceImpl.java

@@ -1,21 +1,9 @@
 package com.uas.platform.b2b.service.impl;
 package com.uas.platform.b2b.service.impl;
 
 
-import com.uas.platform.b2b.dao.CommonDao;
-import com.uas.platform.b2b.dao.ProductDao;
-import com.uas.platform.b2b.dao.ProductMatchResultDao;
-import com.uas.platform.b2b.dao.ProductStatusDao;
-import com.uas.platform.b2b.dao.ProductStoreStatusDao;
-import com.uas.platform.b2b.dao.ProductUsersDao;
-import com.uas.platform.b2b.dao.UserOrderDao;
+import com.uas.platform.b2b.dao.*;
 import com.uas.platform.b2b.erp.model.ProductSaler;
 import com.uas.platform.b2b.erp.model.ProductSaler;
 import com.uas.platform.b2b.erp.support.ErpBufferedLogger;
 import com.uas.platform.b2b.erp.support.ErpBufferedLogger;
-import com.uas.platform.b2b.model.Component;
-import com.uas.platform.b2b.model.Product;
-import com.uas.platform.b2b.model.ProductMatchResult;
-import com.uas.platform.b2b.model.ProductStatus;
-import com.uas.platform.b2b.model.ProductStoreStatus;
-import com.uas.platform.b2b.model.ProductUsers;
-import com.uas.platform.b2b.model.UpdateType;
+import com.uas.platform.b2b.model.*;
 import com.uas.platform.b2b.ps.ProductUtils;
 import com.uas.platform.b2b.ps.ProductUtils;
 import com.uas.platform.b2b.search.SearchService;
 import com.uas.platform.b2b.search.SearchService;
 import com.uas.platform.b2b.service.ComponentService;
 import com.uas.platform.b2b.service.ComponentService;
@@ -30,12 +18,6 @@ import com.uas.platform.core.model.PageInfo;
 import com.uas.platform.core.model.Status;
 import com.uas.platform.core.model.Status;
 import com.uas.platform.core.persistence.criteria.PredicateUtils;
 import com.uas.platform.core.persistence.criteria.PredicateUtils;
 import com.uas.search.b2b.model.SPage;
 import com.uas.search.b2b.model.SPage;
-import java.util.ArrayList;
-import java.util.Date;
-import java.util.List;
-import javax.persistence.criteria.CriteriaBuilder;
-import javax.persistence.criteria.CriteriaQuery;
-import javax.persistence.criteria.Root;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.data.domain.Page;
 import org.springframework.data.domain.Page;
 import org.springframework.data.jpa.domain.Specification;
 import org.springframework.data.jpa.domain.Specification;
@@ -45,6 +27,14 @@ import org.springframework.ui.ModelMap;
 import org.springframework.util.CollectionUtils;
 import org.springframework.util.CollectionUtils;
 import org.springframework.util.StringUtils;
 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.util.ArrayList;
+import java.util.Date;
+import java.util.List;
+
 /**
 /**
  * 物料信息服务实现类
  * 物料信息服务实现类
  * @author US50
  * @author US50
@@ -263,7 +253,8 @@ public class ProductServiceImpl implements ProductService {
 		boolean flag = true;
 		boolean flag = true;
 		ProductStoreStatus status = productStoreStatusDao.findByEnuu(SystemSession.getUser().getEnterprise().getUu());
 		ProductStoreStatus status = productStoreStatusDao.findByEnuu(SystemSession.getUser().getEnterprise().getUu());
 		if (status != null) {
 		if (status != null) {
-			if (status.getStatus().equals(Status.RUNNING.value())) {// 有人正在操作这张单据,不能进行操作
+			// 有人正在操作这张单据,不能进行操作
+			if (status.getStatus().equals(Status.RUNNING.value())) {
 				map.put("error", "当前有人正在进行匹配操作,无法进行匹配");
 				map.put("error", "当前有人正在进行匹配操作,无法进行匹配");
 				flag = false;
 				flag = false;
 			} else {
 			} else {
@@ -272,24 +263,13 @@ public class ProductServiceImpl implements ProductService {
 			}
 			}
 		} else {
 		} else {
 			ProductStoreStatus stroestatus = new ProductStoreStatus();
 			ProductStoreStatus stroestatus = new ProductStoreStatus();
-			stroestatus.setDate(new Date());
+			stroestatus.setDate(new Date(System.currentTimeMillis()));
 			stroestatus.setEnuu(SystemSession.getUser().getEnterprise().getUu());
 			stroestatus.setEnuu(SystemSession.getUser().getEnterprise().getUu());
 			stroestatus.setUseruu(SystemSession.getUser().getUserUU());
 			stroestatus.setUseruu(SystemSession.getUser().getUserUU());
 			stroestatus.setStatus(Status.RUNNING.value());
 			stroestatus.setStatus(Status.RUNNING.value());
 			status = productStoreStatusDao.save(stroestatus);
 			status = productStoreStatusDao.save(stroestatus);
 		}
 		}
-		String num = null;
 		if (flag) {
 		if (flag) {
-//			if (matchtype.equals("sale")) {
-//				num = productDao.upateResultByEnuuForSale(SystemSession.getUser().getEnterprise().getUu());
-//				logger.log("产品匹配", "一键匹配了产品信息", "大小" + num);
-//			} else if (matchtype.equals("purc")) {
-//				num = productDao.upateResultByEnuuForPurc(SystemSession.getUser().getEnterprise().getUu());
-//				logger.log("物料匹配", "一键匹配了物料信息", "大小" + num);
-//			} else if (matchtype.equals("all")) {
-//				num = productDao.upateResultByEnuu(SystemSession.getUser().getEnterprise().getUu());
-//				logger.log("物料匹配", "一键匹配了产品(物料)信息", "大小" + num);
-//			}
             // 调用公共服务一键匹配
             // 调用公共服务一键匹配
             ProductUtils.matchAll(SystemSession.getUser().getEnterprise().getUu());
             ProductUtils.matchAll(SystemSession.getUser().getEnterprise().getUu());
             map.put("success", "一键匹配成功");
             map.put("success", "一键匹配成功");
@@ -350,19 +330,6 @@ public class ProductServiceImpl implements ProductService {
 		int size1 = idStrings.size();
 		int size1 = idStrings.size();
 		int size2 = 0;
 		int size2 = 0;
 		if (status) {
 		if (status) {
-//            List<Product> products = productDao.findByEnUUAndMatchstatus(
-//                    SystemSession.getUser().getEnterprise().getUu(),
-//                    Status.SUBMITTED.value());
-//            if (!CollectionUtils.isEmpty(products)) {
-//                for (Product porduct : products) {
-//                    if (porduct.getMatchresults().size() == 1) {
-//                        for (ProductMatchResult result : porduct.getMatchresults()) {
-//                            refreshproduct(result.getId());
-//                            size2 = size2 + 1;
-//                        }
-//                    }
-//                }
-//            }
 			String num = productDao.upateProductByEnuuAndType(SystemSession.getUser().getEnterprise().getUu(), type);
 			String num = productDao.upateProductByEnuuAndType(SystemSession.getUser().getEnterprise().getUu(), type);
 			if (num != null) {
 			if (num != null) {
 				size2 = Integer.valueOf(num);
 				size2 = Integer.valueOf(num);
@@ -489,33 +456,13 @@ public class ProductServiceImpl implements ProductService {
 		}, pageInfo);
 		}, pageInfo);
 	}
 	}
 
 
-	/*
-	 * @Override public ModelMap updateByEn() { ModelMap map = new ModelMap();
-	 * List<Product> products =
-	 * productDao.findByEnUUAndMatchstatus(SystemSession
-	 * .getUser().getEnterprise().getUu(), Status.SUBMITTED.value()); if
-	 * (!CollectionUtils.isEmpty(products)) { for (Product porduct : products) {
-	 * if (porduct.getMatchresults().size() == 1) { for (ProductMatchResult re :
-	 * porduct.getMatchresults()) { map = refreshproduct(re.getId()); } } } }
-	 * return map; }
-	 */
-
-//	@Override
-//	public List<Object[]> getProductCount(String category) {
-//		List<Long> ids = getUnreadIds(category);
-//		if (CollectionUtils.isEmpty(ids)){
-//			return new ArrayList<>();
-//		}
-//		return productDao.getUnreadCountEveryStatus(ids);
-//	}
-
 	@Override
 	@Override
 	public List<Long> getUnreadIds(String category) {
 	public List<Long> getUnreadIds(String category) {
 		return userOrderDao.getUnreadIds(SystemSession.getUser().getEnterprise().getUu(), SystemSession.getUser().getUserUU(), "products", category);
 		return userOrderDao.getUnreadIds(SystemSession.getUser().getEnterprise().getUu(), SystemSession.getUser().getUserUU(), "products", category);
 	}
 	}
 
 
 	@Override
 	@Override
-	@Transactional
+	@Transactional(rollbackFor = Exception.class)
 	public void setReadByOrder(String category, Long[] sourceIds) {
 	public void setReadByOrder(String category, Long[] sourceIds) {
         Long[] temp = sourceIds;
         Long[] temp = sourceIds;
         if (sourceIds == null || sourceIds.length == 0){
         if (sourceIds == null || sourceIds.length == 0){
@@ -575,7 +522,6 @@ public class ProductServiceImpl implements ProductService {
                     info.setPrid(product.getId());
                     info.setPrid(product.getId());
                     info.setUseruu(productSaler.getEm_uu());
                     info.setUseruu(productSaler.getEm_uu());
                     info.setErpid(productSaler.getPs_id());
                     info.setErpid(productSaler.getPs_id());
-//                    info = productUsersDao.save(info);
 					ProductUtils.updateProductUsersOne(info);
 					ProductUtils.updateProductUsersOne(info);
                     erpLogger.log("ERP个人物料信息同步", "关联物料id:" + product.getId(), 1);
                     erpLogger.log("ERP个人物料信息同步", "关联物料id:" + product.getId(), 1);
                 }
                 }
@@ -597,7 +543,6 @@ public class ProductServiceImpl implements ProductService {
             ProductUsers prod = productUsersDao.findByEnuuAndUseruuAndErpid(enuu, productSaler.getEm_uu(), productSaler.getPs_id());
             ProductUsers prod = productUsersDao.findByEnuuAndUseruuAndErpid(enuu, productSaler.getEm_uu(), productSaler.getPs_id());
             if (null != prod) {
             if (null != prod) {
 				ProductUtils.deleteProductUser(prod.getId());
 				ProductUtils.deleteProductUser(prod.getId());
-//                productUsersDao.delete(prod);
 				erpLogger.log("ERP删除个人物料信息同步", "关联物料id: " + prod.getPrid(), 1);
 				erpLogger.log("ERP删除个人物料信息同步", "关联物料id: " + prod.getPrid(), 1);
             }
             }
         }
         }

+ 103 - 27
src/main/java/com/uas/platform/b2b/service/impl/PurchaseInquiryServiceImpl.java

@@ -39,7 +39,6 @@ import org.springframework.data.domain.Page;
 import org.springframework.data.domain.Sort.Direction;
 import org.springframework.data.domain.Sort.Direction;
 import org.springframework.data.jpa.domain.Specification;
 import org.springframework.data.jpa.domain.Specification;
 import org.springframework.stereotype.Service;
 import org.springframework.stereotype.Service;
-import org.springframework.transaction.annotation.Transactional;
 import org.springframework.ui.ModelMap;
 import org.springframework.ui.ModelMap;
 import org.springframework.util.CollectionUtils;
 import org.springframework.util.CollectionUtils;
 import org.springframework.util.StringUtils;
 import org.springframework.util.StringUtils;
@@ -51,7 +50,9 @@ import javax.persistence.criteria.Root;
 import java.util.*;
 import java.util.*;
 import java.util.regex.Pattern;
 import java.util.regex.Pattern;
 
 
-
+/**
+ * @author US50
+ */
 @Service
 @Service
 public class PurchaseInquiryServiceImpl implements PurchaseInquiryService {
 public class PurchaseInquiryServiceImpl implements PurchaseInquiryService {
 
 
@@ -393,7 +394,6 @@ public class PurchaseInquiryServiceImpl implements PurchaseInquiryService {
 	}
 	}
 
 
 	@Override
 	@Override
-	@Transactional
 	public void reply(List<QuotationDown> downs) {
 	public void reply(List<QuotationDown> downs) {
 		for (QuotationDown down : downs) {
 		for (QuotationDown down : downs) {
 			PurchaseInquiryItem item = purchaseInquiryItemDao.findOne(down.getB2b_id_id());
 			PurchaseInquiryItem item = purchaseInquiryItemDao.findOne(down.getB2b_id_id());
@@ -485,7 +485,8 @@ public class PurchaseInquiryServiceImpl implements PurchaseInquiryService {
 		// 避免出现无附件的情况
 		// 避免出现无附件的情况
 		Set<Attach> attachSet = inquiryItem.getAttaches() != null ? inquiryItem.getAttaches() : new HashSet<Attach>();
 		Set<Attach> attachSet = inquiryItem.getAttaches() != null ? inquiryItem.getAttaches() : new HashSet<Attach>();
 		attachSet.add(attach);
 		attachSet.add(attach);
-	    if("reply".equals(method)) {
+		String REPLY_METHOD = "reply";
+	    if(REPLY_METHOD.equals(method)) {
 		    inquiryItem = reply(inquiryItem);
 		    inquiryItem = reply(inquiryItem);
 	    }
 	    }
 	    inquiryItem.setAttaches(attachSet);
 	    inquiryItem.setAttaches(attachSet);
@@ -495,7 +496,70 @@ public class PurchaseInquiryServiceImpl implements PurchaseInquiryService {
 		return map;
 		return map;
     }
     }
 
 
-    @Override
+	/**
+	 * 统计单据各个状态为阅读的数量
+	 *
+	 * @param category 分类(sale or purc)
+	 * @return 根据单据状态获取未读单据数量 Object[0]为数量,Object[1]为单据状态
+	 */
+	@Override
+	public Map<String, Integer> getInquiryCount(String category) {
+        List<Long> unreadIds = getUnreadIds(category);
+        Map<String, Integer> map = new HashMap<>();
+        if (CollectionUtils.isEmpty(unreadIds)){
+            return map;
+        }
+        // 已报价数量
+        Integer offerCount = 0;
+        // 未报价数量
+        Integer notOfferCount = 0;
+        if (unreadIds.size() > 1000) {
+            List<List<Long>> idsArray = SplitArray.splitAry(unreadIds, SplitArray.QUERY_MAX_NUMBER);
+            for (List<Long> ids : idsArray) {
+                // 超过100不再查询,页面显示99+,减少服务器负担
+                if (offerCount < 100) {
+                    offerCount = offerCount + purchaseInquiryItemDao.getOfferCount(ids);
+                }
+                if (notOfferCount < 100) {
+                    notOfferCount = notOfferCount + purchaseInquiryItemDao.getNotOfferCount(ids);
+                }
+                if (offerCount > 99 && notOfferCount > 99) {
+                    break;
+                }
+            }
+        } else {
+            offerCount = offerCount + purchaseInquiryItemDao.getOfferCount(unreadIds);
+            notOfferCount = notOfferCount + purchaseInquiryItemDao.getNotOfferCount(unreadIds);
+        }
+        map.put("replied", offerCount);
+        map.put("notReply", notOfferCount);
+        map.put("all", offerCount+notOfferCount);
+        return map;
+	}
+
+	/**
+	 * 设置订单已读
+	 *
+	 * @param category  分类(sale or purc)
+	 * @param sourceIds 单据id
+	 */
+	@Override
+	public void setReadByOrder(String category, Long[] sourceIds) {
+        userOrderDao.setReadStatus(SystemSession.getUser().getEnterprise().getUu(), SystemSession.getUser().getUserUU(), "v$purc$inquiryitems", category, (short) Status.READ.value(), sourceIds);
+	}
+
+	/**
+	 * 获得用户未阅读单据的id
+	 *
+	 * @param category 分类(sale or purc)
+	 * @return 单据id集合
+	 */
+	@Override
+	public List<Long> getUnreadIds(String category) {
+        return userOrderDao.getUnreadIds(SystemSession.getUser().getEnterprise().getUu(), SystemSession.getUser().getUserUU(), "v$purc$inquiryitems", category);
+	}
+
+	@Override
 	public void onReplyInvalidDownSuccess(String[] idArray) {
 	public void onReplyInvalidDownSuccess(String[] idArray) {
 		for (String id : idArray) {
 		for (String id : idArray) {
 			PurchaseInquiryItem item = purchaseInquiryItemDao.findOne(Long.parseLong(id));
 			PurchaseInquiryItem item = purchaseInquiryItemDao.findOne(Long.parseLong(id));
@@ -561,11 +625,9 @@ public class PurchaseInquiryServiceImpl implements PurchaseInquiryService {
      */
      */
     @Override
     @Override
     public void coverInquiryItemProdToUser(Long enUU) throws Exception {
     public void coverInquiryItemProdToUser(Long enUU) throws Exception {
-		long start = System.currentTimeMillis();
 		String importId = StringUtil.getRandomNumber(8);
 		String importId = StringUtil.getRandomNumber(8);
         int size = 1000;
         int size = 1000;
         int page = 1;
         int page = 1;
-		int i = 0;
         String countSql = "select count(1) from (select id_prid,id_venduu,id_venduseruu,count(1) as nums from purc$inquiryitems left join purc$inquiry on id_inid = in_id" +
         String countSql = "select count(1) from (select id_prid,id_venduu,id_venduseruu,count(1) as nums from purc$inquiryitems left join purc$inquiry on id_inid = in_id" +
 				"        where id_venduseruu is not null and id_status = 201 and in_enuu = " + enUU + " group by id_prid,id_venduseruu,id_venduu order by count(1) desc)";
 				"        where id_venduseruu is not null and id_status = 201 and in_enuu = " + enUU + " group by id_prid,id_venduseruu,id_venduu order by count(1) desc)";
         Integer count = commonDao.queryForObject(countSql, Integer.class);
         Integer count = commonDao.queryForObject(countSql, Integer.class);
@@ -580,7 +642,6 @@ public class PurchaseInquiryServiceImpl implements PurchaseInquiryService {
 			checkTempProducts(productTemps);
 			checkTempProducts(productTemps);
 			// 保存到公共库
 			// 保存到公共库
 			saveToDataCenter(productTemps);
 			saveToDataCenter(productTemps);
-			i += productTemps.size();
 		}
 		}
     }
     }
 
 
@@ -590,7 +651,6 @@ public class PurchaseInquiryServiceImpl implements PurchaseInquiryService {
 	 * @param temps
 	 * @param temps
 	 */
 	 */
 	private void checkTempProducts(List<ProductTemp> temps) {
 	private void checkTempProducts(List<ProductTemp> temps) {
-		long start = System.currentTimeMillis();
 		if (!CollectionUtils.isEmpty(temps)) {
 		if (!CollectionUtils.isEmpty(temps)) {
 			String importId = temps.get(0).getPr_import_id();
 			String importId = temps.get(0).getPr_import_id();
 			// 放入数据库
 			// 放入数据库
@@ -606,14 +666,12 @@ public class PurchaseInquiryServiceImpl implements PurchaseInquiryService {
 	 * 保存到公共库
 	 * 保存到公共库
 	 */
 	 */
 	private void saveToDataCenter(List<ProductTemp> temps) throws Exception {
 	private void saveToDataCenter(List<ProductTemp> temps) throws Exception {
-		long start = System.currentTimeMillis();
 		if (!CollectionUtils.isEmpty(temps)) {
 		if (!CollectionUtils.isEmpty(temps)) {
 			String importId = temps.get(0).getPr_import_id();
 			String importId = temps.get(0).getPr_import_id();
 			// 已匹配+未匹配到的物料
 			// 已匹配+未匹配到的物料
 			List<Product> products = productTempDao.getProducts(importId);
 			List<Product> products = productTempDao.getProducts(importId);
-			start = System.currentTimeMillis();
 			// 更新物料并插入个人物料
 			// 更新物料并插入个人物料
-			ModelMap map = ProductUtils.paginationUpdateAndAddToProductUser(products);
+			ProductUtils.paginationUpdateAndAddToProductUser(products);
 		}
 		}
 	}
 	}
 
 
@@ -728,13 +786,14 @@ public class PurchaseInquiryServiceImpl implements PurchaseInquiryService {
 	}
 	}
 
 
 	@Override
 	@Override
-	@Transactional
 	public PurchaseInquiryItem reply(PurchaseInquiryItem inquiryItem) {
 	public PurchaseInquiryItem reply(PurchaseInquiryItem inquiryItem) {
         PurchaseInquiryItem item = purchaseInquiryItemDao.findOne(inquiryItem.getId());
         PurchaseInquiryItem item = purchaseInquiryItemDao.findOne(inquiryItem.getId());
-		if (!item.isReplyable())
-			throw new IllegalStatusException("该询价单已经报价,不允许再次报价");
-		if ((item.getInquiry().getCheck() != null && item.getInquiry().getCheck() == Constant.YES) || (item.getAgreed() != null))
-			throw new IllegalOperatorException("报价失败,客户系统已经提交了该询价单");
+		if (!item.isReplyable()) {
+            throw new IllegalStatusException("该询价单已经报价,不允许再次报价");
+        }
+		if ((item.getInquiry().getCheck() != null && item.getInquiry().getCheck() == Constant.YES) || (item.getAgreed() != null)) {
+            throw new IllegalOperatorException("报价失败,客户系统已经提交了该询价单");
+        }
 		// 判断是回复报价还是修改报价
 		// 判断是回复报价还是修改报价
 		Short status = inquiryItem.getStatus();
 		Short status = inquiryItem.getStatus();
 		inquiryItem.setStatus((short) Status.REPLIED.value());
 		inquiryItem.setStatus((short) Status.REPLIED.value());
@@ -753,8 +812,9 @@ public class PurchaseInquiryServiceImpl implements PurchaseInquiryService {
 			XingePusher.pushByUserUU(userUU, "询价单回复", "单号:" + item.getInquiry().getCode() + ",第" + item.getNumber() + "行", "", "");
 			XingePusher.pushByUserUU(userUU, "询价单回复", "单号:" + item.getInquiry().getCode() + ",第" + item.getNumber() + "行", "", "");
 		}
 		}
 		PurchaseInquiryItem purchaseInquiryItem = purchaseInquiryItemDao.save(inquiryItem);
 		PurchaseInquiryItem purchaseInquiryItem = purchaseInquiryItemDao.save(inquiryItem);
-		// 产生消息
-		if ("B2B".equals(purchaseInquiryItem.getSourceApp())) { // b2b的询价单才产生消息,erp的询价单会在erp产生消息
+        // b2b的询价单才产生消息,erp的询价单会在erp产生消息
+        String SOURCE = "B2B";
+		if (SOURCE.equals(purchaseInquiryItem.getSourceApp())) {
 			List<PurchaseInquiryItem> inquiryItems = new ArrayList<>();
 			List<PurchaseInquiryItem> inquiryItems = new ArrayList<>();
 			// 判断是回复报价还是修改报价
 			// 判断是回复报价还是修改报价
 			inquiryItem.setStatus(status);
 			inquiryItem.setStatus(status);
@@ -830,7 +890,8 @@ public class PurchaseInquiryServiceImpl implements PurchaseInquiryService {
 			List<PurchaseInquiry> inquiries = purchaseInquiryDao.findByEnUUAndSourceId(SystemSession.getUser().getEnterprise().getUu(), sourceId);
 			List<PurchaseInquiry> inquiries = purchaseInquiryDao.findByEnUUAndSourceId(SystemSession.getUser().getEnterprise().getUu(), sourceId);
 			if (!CollectionUtils.isEmpty(inquiries)) {
 			if (!CollectionUtils.isEmpty(inquiries)) {
 				for (PurchaseInquiryItem inquiryItem : inquiries.get(0).getInquiryItems()) {
 				for (PurchaseInquiryItem inquiryItem : inquiries.get(0).getInquiryItems()) {
-					inquiryItem.setErpstatus(Constant.NO);  // 修改此字段触发索引
+					// 修改此字段触发索引
+					inquiryItem.setErpstatus(Constant.NO);
 					saveItems.add(inquiryItem);
 					saveItems.add(inquiryItem);
 				}
 				}
 			}
 			}
@@ -848,10 +909,12 @@ public class PurchaseInquiryServiceImpl implements PurchaseInquiryService {
 			List<PurchaseInquiry> inquiries = purchaseInquiryDao.findByEnUUAndSourceId(SystemSession.getUser().getEnterprise().getUu(), sourceId);
 			List<PurchaseInquiry> inquiries = purchaseInquiryDao.findByEnUUAndSourceId(SystemSession.getUser().getEnterprise().getUu(), sourceId);
 			if (!CollectionUtils.isEmpty(inquiries)) {
 			if (!CollectionUtils.isEmpty(inquiries)) {
 				PurchaseInquiry inquiry = inquiries.get(0);
 				PurchaseInquiry inquiry = inquiries.get(0);
-				inquiry.setCheck(Constant.NO);  // 反提交
+				// 反提交
+				inquiry.setCheck(Constant.NO);
 				saveInquiries.add(inquiry);
 				saveInquiries.add(inquiry);
 				for (PurchaseInquiryItem inquiryItem : inquiry.getInquiryItems()) {
 				for (PurchaseInquiryItem inquiryItem : inquiry.getInquiryItems()) {
-					inquiryItem.setErpstatus(Constant.YES);  // 修改此字段触发索引
+					// 修改此字段触发索引
+					inquiryItem.setErpstatus(Constant.YES);
 					saveItems.add(inquiryItem);
 					saveItems.add(inquiryItem);
 				}
 				}
 			}
 			}
@@ -903,7 +966,8 @@ public class PurchaseInquiryServiceImpl implements PurchaseInquiryService {
 					PurchaseInquiry purchaseInquiry = purchaseInquiries.get(0);
 					PurchaseInquiry purchaseInquiry = purchaseInquiries.get(0);
 					for (PurchaseInquiryItem item : purchaseInquiry.getInquiryItems()) {
 					for (PurchaseInquiryItem item : purchaseInquiry.getInquiryItems()) {
 						item.setStatus((short) Status.DISABLED.value());
 						item.setStatus((short) Status.DISABLED.value());
-						item.setInvalidStatus((short) Status.NOT_UPLOAD.value()); // 获取作废信息时,更新作废上传状态为 待上传
+						// 获取作废信息时,更新作废上传状态为 待上传
+						item.setInvalidStatus((short) Status.NOT_UPLOAD.value());
 						synchronized (newInquiryItems) {
 						synchronized (newInquiryItems) {
 							newInquiryItems.add(item);
 							newInquiryItems.add(item);
 						}
 						}
@@ -917,7 +981,19 @@ public class PurchaseInquiryServiceImpl implements PurchaseInquiryService {
 		ContextUtils.publishEvent(new PurchaseInquiryItemInvalidReleaseEvent(savedInquiryItems));
 		ContextUtils.publishEvent(new PurchaseInquiryItemInvalidReleaseEvent(savedInquiryItems));
 	}
 	}
 
 
-    /**
+	/**
+	 * 获取待处理的询价数量(供应商已报价,还未处理)
+	 *
+	 * @return
+	 */
+	@Override
+	public Long getPurcInquiryTodo() {
+        String sql = "select count(*) from purc$inquiryitems d left join v$purc$inquiry i on i.in_id = d.id_inid where i.in_enuu = "
+                + SystemSession.getUser().getEnterprise().getUu() + " and d.id_status = 200 and i.in_overdue = 0";
+        return commonDao.queryForObject(sql, Long.class);
+	}
+
+	/**
      * 根据询价单明细id返回询价单明细
      * 根据询价单明细id返回询价单明细
      *
      *
      * @param itemId 询价单明细id
      * @param itemId 询价单明细id
@@ -940,7 +1016,6 @@ public class PurchaseInquiryServiceImpl implements PurchaseInquiryService {
 	}
 	}
 
 
 	@Override
 	@Override
-	@Transactional
 	public Integer setReadByState(String category) {
 	public Integer setReadByState(String category) {
 		List<Long> unreadIds = getUnreadIds(category);
 		List<Long> unreadIds = getUnreadIds(category);
 		Integer deleteCount = 0;
 		Integer deleteCount = 0;
@@ -969,8 +1044,9 @@ public class PurchaseInquiryServiceImpl implements PurchaseInquiryService {
 
 
 	@Override
 	@Override
 	public void setReadStatus(Long id) {
 	public void setReadStatus(Long id) {
-		if(null != id)
-			purchaseInquiryItemDao.setReadStatus(id, SystemSession.getUser().getUserUU());
+		if(null != id) {
+            purchaseInquiryItemDao.setReadStatus(id, SystemSession.getUser().getUserUU());
+        }
 	}
 	}
 
 
 	/**
 	/**

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

@@ -13,6 +13,7 @@ import com.uas.platform.b2b.model.*;
 import com.uas.platform.b2b.ps.service.PersonalProductService;
 import com.uas.platform.b2b.ps.service.PersonalProductService;
 import com.uas.platform.b2b.search.SearchService;
 import com.uas.platform.b2b.search.SearchService;
 import com.uas.platform.b2b.service.PurchaseNoticeService;
 import com.uas.platform.b2b.service.PurchaseNoticeService;
+import com.uas.platform.b2b.support.SPageUtils;
 import com.uas.platform.b2b.support.SystemSession;
 import com.uas.platform.b2b.support.SystemSession;
 import com.uas.platform.b2b.support.UsageBufferedLogger;
 import com.uas.platform.b2b.support.UsageBufferedLogger;
 import com.uas.platform.b2b.support.XingePusher;
 import com.uas.platform.b2b.support.XingePusher;
@@ -22,14 +23,13 @@ import com.uas.platform.core.model.Constant;
 import com.uas.platform.core.model.PageInfo;
 import com.uas.platform.core.model.PageInfo;
 import com.uas.platform.core.model.Status;
 import com.uas.platform.core.model.Status;
 import com.uas.platform.core.persistence.criteria.PredicateUtils;
 import com.uas.platform.core.persistence.criteria.PredicateUtils;
-import com.uas.search.b2b.model.PageParams;
+import com.uas.search.b2b.model.SPage;
 import org.apache.commons.collections.CollectionUtils;
 import org.apache.commons.collections.CollectionUtils;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.data.domain.Page;
 import org.springframework.data.domain.Page;
 import org.springframework.data.jpa.domain.Specification;
 import org.springframework.data.jpa.domain.Specification;
 import org.springframework.stereotype.Service;
 import org.springframework.stereotype.Service;
 import org.springframework.transaction.annotation.Transactional;
 import org.springframework.transaction.annotation.Transactional;
-import org.springframework.ui.ModelMap;
 import org.springframework.util.StringUtils;
 import org.springframework.util.StringUtils;
 
 
 import javax.persistence.criteria.CriteriaBuilder;
 import javax.persistence.criteria.CriteriaBuilder;
@@ -40,6 +40,11 @@ import java.math.BigDecimal;
 import java.text.SimpleDateFormat;
 import java.text.SimpleDateFormat;
 import java.util.*;
 import java.util.*;
 
 
+/**
+ * 发货提醒
+ *
+ * @author US50
+ */
 @Service
 @Service
 public class PurchaseNoticeServiceImpl implements PurchaseNoticeService {
 public class PurchaseNoticeServiceImpl implements PurchaseNoticeService {
 
 
@@ -83,9 +88,6 @@ public class PurchaseNoticeServiceImpl implements PurchaseNoticeService {
 	@Autowired
 	@Autowired
 	private SearchService searchService;
 	private SearchService searchService;
 
 
-	@Autowired
-	private PagingReleaseCountDao pagingReleaseCountDao;
-
 	@Autowired
 	@Autowired
 	private DistributeDao distributeDao;
 	private DistributeDao distributeDao;
 
 
@@ -104,6 +106,11 @@ public class PurchaseNoticeServiceImpl implements PurchaseNoticeService {
 	@Autowired
 	@Autowired
     private PersonalProductService personalProductService;
     private PersonalProductService personalProductService;
 
 
+    /**
+     * 最多数量
+     */
+    final Integer MAX_SIZE = 1000;
+
 	@Override
 	@Override
 	public List<PurchaseNotice> save(List<PurchaseNotice> notices) {
 	public List<PurchaseNotice> save(List<PurchaseNotice> notices) {
 		notices = purchaseNoticeDao.save(notices);
 		notices = purchaseNoticeDao.save(notices);
@@ -369,7 +376,8 @@ public class PurchaseNoticeServiceImpl implements PurchaseNoticeService {
 			send.setCurrency(order.getCurrency());
 			send.setCurrency(order.getCurrency());
 			send.setBackStatus((short) Status.NOT_UPLOAD.value());
 			send.setBackStatus((short) Status.NOT_UPLOAD.value());
 			send.setSendStatus((short) Status.NOT_UPLOAD.value());
 			send.setSendStatus((short) Status.NOT_UPLOAD.value());
-			send.setVerifystatus(Constant.NO);// 未收料
+			// 未收料
+			send.setVerifystatus(Constant.NO);
 			send.setCustUU(notice.getEnUU());
 			send.setCustUU(notice.getEnUU());
 			send.setCustUserUU(order.getUserUU());
 			send.setCustUserUU(order.getUserUU());
 			send.setDate(new Date());
 			send.setDate(new Date());
@@ -419,7 +427,8 @@ public class PurchaseNoticeServiceImpl implements PurchaseNoticeService {
 			saleSend.setEnUU(SystemSession.getUser().getEnterprise().getUu());
 			saleSend.setEnUU(SystemSession.getUser().getEnterprise().getUu());
 			saleSend.setRecorder(SystemSession.getUser().getUserName());
 			saleSend.setRecorder(SystemSession.getUser().getUserName());
 			saleSend.setDate(new Date());
 			saleSend.setDate(new Date());
-			saleSend.setVerifystatus(Constant.NO);// 未收料
+            // 未收料
+			saleSend.setVerifystatus(Constant.NO);
 			short number = 0;
 			short number = 0;
 			List<SaleSendItem> sendItems = new ArrayList<SaleSendItem>();
 			List<SaleSendItem> sendItems = new ArrayList<SaleSendItem>();
 			for (SaleSendItem item : saleSend.getSendItems()) {
 			for (SaleSendItem item : saleSend.getSendItems()) {
@@ -436,7 +445,8 @@ public class PurchaseNoticeServiceImpl implements PurchaseNoticeService {
 							throw new IllegalOperatorException("累计发货数量将超出本次送货提醒的需求数!");
 							throw new IllegalOperatorException("累计发货数量将超出本次送货提醒的需求数!");
 						}
 						}
 						item.setNotice(notice);
 						item.setNotice(notice);
-						if (item.getNumber() == null || item.getNumber() == 0) {// 带了序号则不重设序号,不带这重设序号
+                        // 带了序号则不重设序号,不带这重设序号
+						if (item.getNumber() == null || item.getNumber() == 0) {
 							item.setNumber(++number);
 							item.setNumber(++number);
 						}
 						}
 						item.setOrderItem(notice.getOrderItem());
 						item.setOrderItem(notice.getOrderItem());
@@ -474,41 +484,6 @@ public class PurchaseNoticeServiceImpl implements PurchaseNoticeService {
 		}
 		}
 	}
 	}
 
 
-	@Override
-	public Page<SaleSendAll> findSendsByPageInfo(final PageInfo pageInfo, final String keyword, final Long fromDate,
-			final Long endDate, final SearchFilter filter) {
-		return saleSendAllDao.findAll(new Specification<SaleSendAll>() {
-			@Override
-			public Predicate toPredicate(Root<SaleSendAll> root, CriteriaQuery<?> query, CriteriaBuilder builder) {
-				if (filter != null) {
-					if (!CollectionUtils.isEmpty(filter.getDistribute())) {
-						pageInfo.expression(PredicateUtils.in("custUU", filter.getDistribute(), false));
-					}
-				}
-				if (StringUtils.hasText(keyword)) {
-					List<Object> lists = new ArrayList<>();
-					PageParams pageParams = new PageParams();
-					ModelMap map = new ModelMap();
-					map.put("pm_venduu", SystemSession.getUser().getEnterprise().getUu());
-					pageParams.setFilters(map);
-					for (SaleSendAll list : searchService.searchSaleSendIds(keyword, pageParams).getContent()) {
-						lists.add(list.getId());
-					}
-					pageInfo.expression(PredicateUtils.in("id", lists, false));
-				}
-				if (fromDate != null) {
-					pageInfo.expression(PredicateUtils.in("id", saleSendAllDao.findByFromDate(
-							SystemSession.getUser().getEnterprise().getUu(), new Date(fromDate)), false));
-				}
-				if (endDate != null) {
-					pageInfo.expression(PredicateUtils.in("id", saleSendAllDao
-							.findByEndDate(SystemSession.getUser().getEnterprise().getUu(), new Date(endDate)), false));
-				}
-				return query.where(pageInfo.getPredicates(root, query, builder)).getRestriction();
-			}
-		}, pageInfo);
-	}
-
 	@Override
 	@Override
 	public void onSaleSendChange(List<SaleSendItem> sendItems) {
 	public void onSaleSendChange(List<SaleSendItem> sendItems) {
 		List<Long> ids = new ArrayList<>();
 		List<Long> ids = new ArrayList<>();
@@ -622,13 +597,14 @@ public class PurchaseNoticeServiceImpl implements PurchaseNoticeService {
 	}
 	}
 
 
 	@Override
 	@Override
-	@Transactional
+	@Transactional(rollbackFor = Exception.class)
 	public void generateBarcodes(Long id, List<SaleSendItem> sendItem, Long enUU) {
 	public void generateBarcodes(Long id, List<SaleSendItem> sendItem, Long enUU) {
 		SaleSend saleSend = saleSendDao.findOne(id);
 		SaleSend saleSend = saleSendDao.findOne(id);
 		Long custUU = saleSend.getCustUU();
 		Long custUU = saleSend.getCustUU();
 		// 获取条码生成规则,判断规则是否审核,已审核,根据规则拼接
 		// 获取条码生成规则,判断规则是否审核,已审核,根据规则拼接
 		B2bCodeSet barcodeSet = b2bCodeSetDao.findByEnUUAndType(custUU, "BATCH");
 		B2bCodeSet barcodeSet = b2bCodeSetDao.findByEnUUAndType(custUU, "BATCH");
-		if (barcodeSet != null) {// 条码生成规则不为空,已审核
+        // 条码生成规则不为空,已审核
+		if (barcodeSet != null) {
 			if (!"AUDITED".equals(barcodeSet.getStatuscode())) {
 			if (!"AUDITED".equals(barcodeSet.getStatuscode())) {
 				throw new IllegalOperatorException("请先审核条码生成规则!");
 				throw new IllegalOperatorException("请先审核条码生成规则!");
 			}
 			}
@@ -640,7 +616,8 @@ public class PurchaseNoticeServiceImpl implements PurchaseNoticeService {
 		if (outboxSet == null) {
 		if (outboxSet == null) {
 			throw new IllegalOperatorException("请先维护外箱生成规则!");
 			throw new IllegalOperatorException("请先维护外箱生成规则!");
 		}
 		}
-		if (!"AUDITED".equals(outboxSet.getStatuscode())) {
+		String AUDITED_STATUS = "AUDITED";
+		if (!AUDITED_STATUS.equals(outboxSet.getStatuscode())) {
 			throw new IllegalOperatorException("请先审核外箱生成规则!");
 			throw new IllegalOperatorException("请先审核外箱生成规则!");
 		}
 		}
 		for (SaleSendItem item : sendItem) {
 		for (SaleSendItem item : sendItem) {
@@ -656,28 +633,31 @@ public class PurchaseNoticeServiceImpl implements PurchaseNoticeService {
 				}
 				}
 			}
 			}
 			barSendNotifyDao.deleteAllBySiid(item.getId());
 			barSendNotifyDao.deleteAllBySiid(item.getId());
-			// logger.log("发货单", "清除条码",
-			// "清除发货单:"+sitem.getSend().getCode()+",明细行序号:"+sitem.getNumber()+",所有条码!");
 			// 获取明细,最小包装数,外箱容量等信息
 			// 获取明细,最小包装数,外箱容量等信息
 			SaleSendItem sItem = saleSendItemDao.findOne(item.getId());
 			SaleSendItem sItem = saleSendItemDao.findOne(item.getId());
 			double pQty = sItem.getPackageQty(), bQty = sItem.getOutBoxQty(), qty = sItem.getQty();
 			double pQty = sItem.getPackageQty(), bQty = sItem.getOutBoxQty(), qty = sItem.getQty();
 			String bar_code, pr_code = sItem.getOrderItem().getProduct().getCode();
 			String bar_code, pr_code = sItem.getOrderItem().getProduct().getCode();
-			int aNum = (int) (qty / pQty);// 最小包装数件数
+            // 最小包装数件数
+			int aNum = (int) (qty / pQty);
 			double aqtyA = (new BigDecimal(Double.toString(qty))).subtract(new BigDecimal(Double.toString(aNum * pQty)))
 			double aqtyA = (new BigDecimal(Double.toString(qty))).subtract(new BigDecimal(Double.toString(aNum * pQty)))
 					.doubleValue(); // 小于最小包装数的
 					.doubleValue(); // 小于最小包装数的
-			String sourceId = String.valueOf(sItem.getOrderItem().getProduct().getSourceId());// ERP中对应的物料ID
+            // ERP中对应的物料ID
+			String sourceId = String.valueOf(sItem.getOrderItem().getProduct().getSourceId());
 			// 获取是否勾选了生成外箱
 			// 获取是否勾选了生成外箱
-			if (item.getIsOutboxChecked()) {// 勾选了生成外箱
+			if (item.getIsOutboxChecked()) {
 				// 判断外箱容量是否为最小包装数的整数倍
 				// 判断外箱容量是否为最小包装数的整数倍
 				String out_boxcode = null;
 				String out_boxcode = null;
 				Long pa_id = null;
 				Long pa_id = null;
-				int sumJ = (int) (bQty / pQty);// 每箱件数
+                // 每箱件数
+				int sumJ = (int) (bQty / pQty);
 				if (sumJ * pQty != bQty) {
 				if (sumJ * pQty != bQty) {
 					throw new IllegalOperatorException("序号:" + sItem.getNumber() + ",外箱容量不是最小包装数的整数倍!");
 					throw new IllegalOperatorException("序号:" + sItem.getNumber() + ",外箱容量不是最小包装数的整数倍!");
 				}
 				}
-				int bNum = (int) (qty / bQty); // 整数箱数
+                // 整数箱数
+				int bNum = (int) (qty / bQty);
+                // 零散数
 				double bqtyB = (new BigDecimal(Double.toString(qty)))
 				double bqtyB = (new BigDecimal(Double.toString(qty)))
-						.subtract(new BigDecimal(Double.toString(bNum * bQty))).doubleValue(); // 零散数
+						.subtract(new BigDecimal(Double.toString(bNum * bQty))).doubleValue();
 				if (aNum >= 1) {
 				if (aNum >= 1) {
 					for (int i = 0; i < aNum; i++) {
 					for (int i = 0; i < aNum; i++) {
 						if (i % sumJ == 0) {
 						if (i % sumJ == 0) {
@@ -734,7 +714,33 @@ public class PurchaseNoticeServiceImpl implements PurchaseNoticeService {
 		return number;
 		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) {
 	public String barcodeMethod(String pr_id, B2bCodeSet barcodeSet) {
 		StringBuffer code = new StringBuffer();
 		StringBuffer code = new StringBuffer();
 		String date = "0";
 		String date = "0";
@@ -743,33 +749,46 @@ public class PurchaseNoticeServiceImpl implements PurchaseNoticeService {
 		int lennum = barcodeSet.getLennum().intValue(), maxnum = barcodeSet.getMaxnum().intValue(),
 		int lennum = barcodeSet.getLennum().intValue(), maxnum = barcodeSet.getMaxnum().intValue(),
 				lenprid = barcodeSet.getLenprid().intValue();
 				lenprid = barcodeSet.getLenprid().intValue();
 		// 拼接
 		// 拼接
-		code.append(formPlat);// 平台标识
-		code.append(lpad(lenprid, pr_id));// PR_ID物料ID的长度
-		if ("YYMMDD".equals(dataStr)) {// 日期
+        // 平台标识
+		code.append(formPlat);
+        // PR_ID物料ID的长度
+		code.append(lpad(lenprid, pr_id));
+		if (YYMMDD_PATTERN.equals(dataStr)) {
 			SimpleDateFormat YMD = new SimpleDateFormat("yyMMdd");
 			SimpleDateFormat YMD = new SimpleDateFormat("yyMMdd");
 			date = YMD.format(new Date());
 			date = YMD.format(new Date());
-		} else if ("YYMM".equals(dataStr)) {
+		} else if (YYMM_PATTERN.equals(dataStr)) {
 			SimpleDateFormat YM = new SimpleDateFormat("yyMM");
 			SimpleDateFormat YM = new SimpleDateFormat("yyMM");
 			date = YM.format(new Date());
 			date = YM.format(new Date());
-		} else if ("MMDD".equals(dataStr)) {
+		} else if (MMDD_PATTERN.equals(dataStr)) {
 			SimpleDateFormat MD = new SimpleDateFormat("MMdd");
 			SimpleDateFormat MD = new SimpleDateFormat("MMdd");
 			date = MD.format(new Date());
 			date = MD.format(new Date());
 		}
 		}
-		code.append(date);// 日期
+		code.append(date);
 		barcodeSet.setMaxdate(date);
 		barcodeSet.setMaxdate(date);
-		if (!("").equals(maxdate) && null != maxdate && (!"0".equals(date))
-				&& (Integer.valueOf(maxdate) > Integer.valueOf(date))) {// 如果当前日期大于上次日期
-			code.append(lpad(lennum, "1"));// 流水重新开始
-			barcodeSet.setMaxnum((long) 2);// 流水号增加1
+        // 如果当前日期大于上次日期
+		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 {
 		} else {
-			code.append(lpad(lennum, String.valueOf(maxnum)));// 当前流水号
-			barcodeSet.setMaxnum((long) (maxnum + 1));// 流水号增加1
+            // 当前流水号
+			code.append(lpad(lennum, String.valueOf(maxnum)));
+            // 流水号增加1
+			barcodeSet.setMaxnum((long) (maxnum + 1));
 		}
 		}
 		b2bCodeSetDao.save(barcodeSet);
 		b2bCodeSetDao.save(barcodeSet);
 		return code.toString();
 		return code.toString();
 	}
 	}
 
 
-	// 生成外箱号
+    /**
+     * 生成外箱号
+     *
+     * @param pr_id
+     * @param barcodeSet
+     * @return
+     */
 	public String outboxMethod(String pr_id, B2bCodeSet barcodeSet) {
 	public String outboxMethod(String pr_id, B2bCodeSet barcodeSet) {
 		StringBuffer code = new StringBuffer();
 		StringBuffer code = new StringBuffer();
 		String date = "0";
 		String date = "0";
@@ -777,27 +796,34 @@ public class PurchaseNoticeServiceImpl implements PurchaseNoticeService {
 				maxdate = barcodeSet.getMaxdate();
 				maxdate = barcodeSet.getMaxdate();
 		int lennum = barcodeSet.getLennum().intValue(), maxnum = barcodeSet.getMaxnum().intValue(),
 		int lennum = barcodeSet.getLennum().intValue(), maxnum = barcodeSet.getMaxnum().intValue(),
 				lenprid = barcodeSet.getLenprid().intValue();
 				lenprid = barcodeSet.getLenprid().intValue();
-		code.append(formPlat);// 平台标识
-		code.append(lpad(lenprid, pr_id));// PR_ID物料ID的长度
-		if ("YYMMDD".equals(dataStr)) {
+        // 平台标识
+		code.append(formPlat);
+        // PR_ID物料ID的长度
+		code.append(lpad(lenprid, pr_id));
+		if (YYMMDD_PATTERN.equals(dataStr)) {
 			SimpleDateFormat YMD = new SimpleDateFormat("yyMMdd");
 			SimpleDateFormat YMD = new SimpleDateFormat("yyMMdd");
 			date = YMD.format(new Date());
 			date = YMD.format(new Date());
-		} else if ("YYMM".equals(dataStr)) {
+		} else if (YYMM_PATTERN.equals(dataStr)) {
 			SimpleDateFormat YM = new SimpleDateFormat("yyMM");
 			SimpleDateFormat YM = new SimpleDateFormat("yyMM");
 			date = YM.format(new Date());
 			date = YM.format(new Date());
-		} else if ("MMDD".equals(dataStr)) {
+		} else if (MMDD_PATTERN.equals(dataStr)) {
 			SimpleDateFormat MD = new SimpleDateFormat("MMdd");
 			SimpleDateFormat MD = new SimpleDateFormat("MMdd");
 			date = MD.format(new Date());
 			date = MD.format(new Date());
 		}
 		}
-		code.append(date);// 日期
+		code.append(date);
 		barcodeSet.setMaxdate(date);
 		barcodeSet.setMaxdate(date);
-		if (!("").equals(maxdate) && null != maxdate && (!"0".equals(date))
-				&& (Integer.valueOf(maxdate) > Integer.valueOf(date))) {// 如果当前日期大于上次日期
-			code.append(lpad(lennum, "1"));// 流水重新开始
-			barcodeSet.setMaxnum((long) 2);// 流水号增加1
+        // 如果当前日期大于上次日期
+		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 {
 		} else {
-			code.append(lpad(lennum, String.valueOf(maxnum)));// 当前流水号
-			barcodeSet.setMaxnum((long) (maxnum + 1));// 流水号增加1
+            // 当前流水号
+			code.append(lpad(lennum, String.valueOf(maxnum)));
+            // 流水号增加1
+			barcodeSet.setMaxnum((long) (maxnum + 1));
 		}
 		}
 		b2bCodeSetDao.save(barcodeSet);
 		b2bCodeSetDao.save(barcodeSet);
 		return code.toString();
 		return code.toString();
@@ -821,13 +847,15 @@ public class PurchaseNoticeServiceImpl implements PurchaseNoticeService {
 		barSendNotify.setSscode(sItem.getSend().getCode());
 		barSendNotify.setSscode(sItem.getSend().getCode());
 		barSendNotify.setSsid(sItem.getSend().getId());
 		barSendNotify.setSsid(sItem.getSend().getId());
 		barSendNotify.setVendcode(enUU);
 		barSendNotify.setVendcode(enUU);
-		barSendNotifyDao.save(barSendNotify); // 保存发货单明细中的条码
+        // 保存发货单明细中的条码
+		barSendNotifyDao.save(barSendNotify);
 
 
 		BarPackageDetail barPackageDetail = new BarPackageDetail();
 		BarPackageDetail barPackageDetail = new BarPackageDetail();
 		barPackageDetail.setBarcode(bar_code);
 		barPackageDetail.setBarcode(bar_code);
 		barPackageDetail.setBarpackage(barPackageDao.findOne(pa_id));
 		barPackageDetail.setBarpackage(barPackageDao.findOne(pa_id));
 		barPackageDetail.setInnerqty(qty);
 		barPackageDetail.setInnerqty(qty);
-		barPackageDetailDao.save(barPackageDetail);// 保存包装箱明细
+        // 保存包装箱明细
+		barPackageDetailDao.save(barPackageDetail);
 	}
 	}
 
 
 	/**
 	/**
@@ -854,7 +882,8 @@ public class PurchaseNoticeServiceImpl implements PurchaseNoticeService {
 		barSendNotify.setSscode(sItem.getSend().getCode());
 		barSendNotify.setSscode(sItem.getSend().getCode());
 		barSendNotify.setSsid(sItem.getSend().getId());
 		barSendNotify.setSsid(sItem.getSend().getId());
 		barSendNotify.setVendcode(enUU);
 		barSendNotify.setVendcode(enUU);
-		barSendNotifyDao.save(barSendNotify); // 保存发货单明细中的条码
+        // 保存发货单明细中的条码
+		barSendNotifyDao.save(barSendNotify);
 	}
 	}
 
 
 	@Override
 	@Override
@@ -900,7 +929,8 @@ public class PurchaseNoticeServiceImpl implements PurchaseNoticeService {
 		SaleSend saleSend = saleSendDao.findOne(id);
 		SaleSend saleSend = saleSendDao.findOne(id);
 		Long custUU = saleSend.getCustUU();
 		Long custUU = saleSend.getCustUU();
 		String caller;
 		String caller;
-		if ("Bar".equals(type)) {
+		String BAR_TYPE = "Bar";
+		if (BAR_TYPE.equals(type)) {
 			caller = "B2B!BarPrint";
 			caller = "B2B!BarPrint";
 		} else {
 		} else {
 			caller = "B2B!OutBoxPrint";
 			caller = "B2B!OutBoxPrint";
@@ -951,17 +981,6 @@ public class PurchaseNoticeServiceImpl implements PurchaseNoticeService {
 		saleSendItemDao.save(items);
 		saleSendItemDao.save(items);
 	}
 	}
 
 
-	@Override
-	public Long getSaleSendCount() {
-		return saleSendAllDao.findByVendUU(SystemSession.getUser().getEnterprise().getUu());
-	}
-
-	@Override
-	public Long getSaleSendVerify() {
-		return saleSendAllDao.findByVendUUAndVerifystatus(SystemSession.getUser().getEnterprise().getUu(),
-				Constant.YES);
-	}
-
     @Override
     @Override
     public void printCount(Long id) {
     public void printCount(Long id) {
         SaleSendAll send = saleSendAllDao.findOne(id);
         SaleSendAll send = saleSendAllDao.findOne(id);
@@ -973,18 +992,6 @@ public class PurchaseNoticeServiceImpl implements PurchaseNoticeService {
         saleSendAllDao.save(send);
         saleSendAllDao.save(send);
     }
     }
 
 
-	@Override
-	public Integer getNoticeUnreadCount() {
-		return pagingReleaseCountDao.getUnreadCount(SystemSession.getUser().getEnterprise().getUu(),
-				SystemSession.getUser().getUserUU(), "sale", "PURC$NOTICE");
-	}
-
-	@Override
-	public Integer getSendUnreadCount() {
-		return pagingReleaseCountDao.getUnreadCount(SystemSession.getUser().getEnterprise().getUu(),
-				SystemSession.getUser().getUserUU(), "purc", "SALE$SEND");
-	}
-
 	@Override
 	@Override
 	public Map<String, Integer> getNoticeCount(String category) {
 	public Map<String, Integer> getNoticeCount(String category) {
 		List<Long> unreadIds = getUnreadIds(category);
 		List<Long> unreadIds = getUnreadIds(category);
@@ -997,7 +1004,7 @@ public class PurchaseNoticeServiceImpl implements PurchaseNoticeService {
 			return map;
 			return map;
 		}
 		}
 		// 超过1000条需要拆分,不然会报错
 		// 超过1000条需要拆分,不然会报错
-		if (unreadIds.size() > 1000) {
+		if (unreadIds.size() > MAX_SIZE) {
 			List<List<Long>> idsArray = SplitArray.splitAry(unreadIds, SplitArray.QUERY_MAX_NUMBER);
 			List<List<Long>> idsArray = SplitArray.splitAry(unreadIds, SplitArray.QUERY_MAX_NUMBER);
 			for (List<Long> ids : idsArray) {
 			for (List<Long> ids : idsArray) {
 				// 超过100不再查询,页面显示99+,减少服务器负担
 				// 超过100不再查询,页面显示99+,减少服务器负担
@@ -1022,19 +1029,80 @@ public class PurchaseNoticeServiceImpl implements PurchaseNoticeService {
 		return map;
 		return map;
 	}
 	}
 
 
-	@Override
+    @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) {
 	public List<Long> getUnreadIds(String category) {
 		return userOrderDao.getUnreadIds(SystemSession.getUser().getEnterprise().getUu(), SystemSession.getUser().getUserUU(), "purc$notice", category);
 		return userOrderDao.getUnreadIds(SystemSession.getUser().getEnterprise().getUu(), SystemSession.getUser().getUserUU(), "purc$notice", category);
 	}
 	}
 
 
-	@Override
-	@Transactional
+    /**
+     * 查询发货提醒
+     *
+     * @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) {
 	public void setReadByOrder(String category, Long[] sourceId) {
 		userOrderDao.setReadStatus(SystemSession.getUser().getEnterprise().getUu(), SystemSession.getUser().getUserUU(), "purc$notice", category, (short) Status.READ.value(), sourceId);
 		userOrderDao.setReadStatus(SystemSession.getUser().getEnterprise().getUu(), SystemSession.getUser().getUserUU(), "purc$notice", category, (short) Status.READ.value(), sourceId);
 	}
 	}
 
 
 	@Override
 	@Override
-	@Transactional
+	@Transactional(rollbackFor = Exception.class)
 	public Integer setReadByState(String category) {
 	public Integer setReadByState(String category) {
 		List<Long> unreadIds = getUnreadIds(category);
 		List<Long> unreadIds = getUnreadIds(category);
 		Integer deleteCount = 0;
 		Integer deleteCount = 0;
@@ -1042,7 +1110,7 @@ public class PurchaseNoticeServiceImpl implements PurchaseNoticeService {
 			return deleteCount;
 			return deleteCount;
 		}
 		}
 		List<Long> repliedIds = null;
 		List<Long> repliedIds = null;
-		if (unreadIds.size() > 1000) {
+		if (unreadIds.size() > MAX_SIZE) {
 			List<List<Long>> idsArray = SplitArray.splitAry(unreadIds, SplitArray.QUERY_MAX_NUMBER);
 			List<List<Long>> idsArray = SplitArray.splitAry(unreadIds, SplitArray.QUERY_MAX_NUMBER);
 			for (List<Long> ids : idsArray) {
 			for (List<Long> ids : idsArray) {
 				repliedIds = purchaseNoticeDao.findRepliedId(ids);
 				repliedIds = purchaseNoticeDao.findRepliedId(ids);
@@ -1060,4 +1128,15 @@ public class PurchaseNoticeServiceImpl implements PurchaseNoticeService {
 		}
 		}
 		return deleteCount;
 		return deleteCount;
 	}
 	}
+
+    /**
+     * 通过ids查询发货信息
+     *
+     * @param ids
+     * @return
+     */
+    @Override
+    public List<PurchaseNotice> findByIds(List<Long> ids) {
+        return purchaseNoticeDao.findAll(ids);
+    }
 }
 }

+ 21 - 6
src/main/java/com/uas/platform/b2b/service/impl/PurchaseOrderServiceImpl.java

@@ -463,6 +463,17 @@ public class PurchaseOrderServiceImpl implements PurchaseOrderService {
 		}
 		}
 	}
 	}
 
 
+	/**
+	 * 获取待回复的客户采购单条数
+	 *
+	 * @return
+	 */
+	@Override
+	public int getOnhandCount() {
+		return purchaseOrderDao.getCountByVendUUAndStatus(SystemSession.getUser().getEnterprise().getUu(),
+				(short) Status.NOT_REPLY.value());
+	}
+
 	@Override
 	@Override
 	public void saveItems(List<PurchaseOrderItem> items) {
 	public void saveItems(List<PurchaseOrderItem> items) {
 		purchaseOrderItemDao.save(items);
 		purchaseOrderItemDao.save(items);
@@ -552,12 +563,15 @@ public class PurchaseOrderServiceImpl implements PurchaseOrderService {
 	@Override
 	@Override
 	public Page<PurchaseOrderEnd> findEndByPageInfo(final PageInfo pageInfo, SearchFilter filter) {
 	public Page<PurchaseOrderEnd> findEndByPageInfo(final PageInfo pageInfo, SearchFilter filter) {
 		if (filter != null) {
 		if (filter != null) {
-			if (filter.getFromDate() != null)
+			if (filter.getFromDate() != null) {
 				pageInfo.expression(PredicateUtils.gte("date", new Date(filter.getFromDate()), false));
 				pageInfo.expression(PredicateUtils.gte("date", new Date(filter.getFromDate()), false));
-			if (filter.getEndDate() != null)
+			}
+			if (filter.getEndDate() != null) {
 				pageInfo.expression(PredicateUtils.lte("date", new Date(filter.getEndDate()), false));
 				pageInfo.expression(PredicateUtils.lte("date", new Date(filter.getEndDate()), false));
-			if (!CollectionUtils.isEmpty(filter.getDistribute()))
+			}
+			if (!CollectionUtils.isEmpty(filter.getDistribute())) {
 				pageInfo.expression(PredicateUtils.in("enUU", filter.getDistribute(), false));
 				pageInfo.expression(PredicateUtils.in("enUU", filter.getDistribute(), false));
+			}
 		}
 		}
 		Page<PurchaseOrderEnd> pageOrders = purchaseOrderEndDao.findAll(new Specification<PurchaseOrderEnd>() {
 		Page<PurchaseOrderEnd> pageOrders = purchaseOrderEndDao.findAll(new Specification<PurchaseOrderEnd>() {
 			@Override
 			@Override
@@ -815,7 +829,7 @@ public class PurchaseOrderServiceImpl implements PurchaseOrderService {
 	}
 	}
 
 
 	@Override
 	@Override
-	@Transactional
+	@Transactional(rollbackFor = Exception.class)
 	public void setReadByOrder(String category, Long[] sourceIds) {
 	public void setReadByOrder(String category, Long[] sourceIds) {
 		userOrderDao.setReadStatus(SystemSession.getUser().getEnterprise().getUu(), SystemSession.getUser().getUserUU(), "purc$orders", category, (short) Status.READ.value(), sourceIds);
 		userOrderDao.setReadStatus(SystemSession.getUser().getEnterprise().getUu(), SystemSession.getUser().getUserUU(), "purc$orders", category, (short) Status.READ.value(), sourceIds);
 	}
 	}
@@ -839,7 +853,8 @@ public class PurchaseOrderServiceImpl implements PurchaseOrderService {
 		if (unreadIds.size() > 1000) {
 		if (unreadIds.size() > 1000) {
 			List<List<Long>> idsArray = SplitArray.splitAry(unreadIds, SplitArray.QUERY_MAX_NUMBER);
 			List<List<Long>> idsArray = SplitArray.splitAry(unreadIds, SplitArray.QUERY_MAX_NUMBER);
 			for (List<Long> ids : idsArray) {
 			for (List<Long> ids : idsArray) {
-				if (repliedCount < 100) {  // 超过100不再查询,页面显示99+,减少服务器负担
+				// 超过100不再查询,页面显示99+,减少服务器负担
+				if (repliedCount < 100) {
 					repliedCount = repliedCount + purchaseOrderDao.findRepliedId(ids).size();
 					repliedCount = repliedCount + purchaseOrderDao.findRepliedId(ids).size();
 				}
 				}
 				if (notReplyCount < 100) {
 				if (notReplyCount < 100) {
@@ -865,7 +880,7 @@ public class PurchaseOrderServiceImpl implements PurchaseOrderService {
     }
     }
 
 
 	@Override
 	@Override
-	@Transactional
+	@Transactional(rollbackFor = Exception.class)
 	public Integer setReadByState(String category) {
 	public Integer setReadByState(String category) {
 		List<Long> unreadIds = getUnreadIds(category);
 		List<Long> unreadIds = getUnreadIds(category);
 		Integer deleteCount = 0;
 		Integer deleteCount = 0;

+ 2 - 5
src/main/java/com/uas/platform/b2b/support/HttpUtils.java

@@ -3,10 +3,7 @@ package com.uas.platform.b2b.support;
 import com.alibaba.fastjson.JSONObject;
 import com.alibaba.fastjson.JSONObject;
 import com.uas.platform.core.util.serializer.FlexJsonUtils;
 import com.uas.platform.core.util.serializer.FlexJsonUtils;
 import org.apache.commons.io.IOUtils;
 import org.apache.commons.io.IOUtils;
-import org.apache.http.Consts;
-import org.apache.http.HttpEntity;
-import org.apache.http.HttpResponse;
-import org.apache.http.NameValuePair;
+import org.apache.http.*;
 import org.apache.http.client.ClientProtocolException;
 import org.apache.http.client.ClientProtocolException;
 import org.apache.http.client.entity.UrlEncodedFormEntity;
 import org.apache.http.client.entity.UrlEncodedFormEntity;
 import org.apache.http.client.methods.CloseableHttpResponse;
 import org.apache.http.client.methods.CloseableHttpResponse;
@@ -303,7 +300,7 @@ public class HttpUtils {
      *
      *
      * @param url
      * @param url
      *            请求地址
      *            请求地址
-     * @param multipartFile
+     * @param commonsMultipartFile
      *            附件路径
      *            附件路径
      * @param params
      * @param params
      *            参数
      *            参数