Просмотр исходного кода

feat: 应付对账单新增功能: 1、 增加未对账供应商信息筛选; 2、 增加未对账单据查看;
优化未对账单据查询语句

hejq 7 лет назад
Родитель
Сommit
7cf742e87b

+ 3 - 0
src/main/java/com/uas/platform/b2b/controller/SaleApBillController.java

@@ -2,8 +2,11 @@ package com.uas.platform.b2b.controller;
 
 import com.alibaba.dubbo.common.utils.CollectionUtils;
 import com.alibaba.fastjson.JSONObject;
+import com.uas.platform.b2b.model.ApcheckKeyWord;
+import com.uas.platform.b2b.model.ErpProdIo;
 import com.uas.platform.b2b.model.PurchaseApBill;
 import com.uas.platform.b2b.model.SearchFilter;
+import com.uas.platform.b2b.model.Vendor;
 import com.uas.platform.b2b.search.SearchService;
 import com.uas.platform.b2b.service.PurchaseApBillService;
 import com.uas.platform.b2b.service.UserService;

+ 63 - 0
src/main/java/com/uas/platform/b2b/controller/SaleArCheckController.java

@@ -0,0 +1,63 @@
+package com.uas.platform.b2b.controller;
+
+import com.alibaba.fastjson.JSONObject;
+import com.uas.platform.b2b.model.ApcheckKeyWord;
+import com.uas.platform.b2b.model.ErpProdIo;
+import com.uas.platform.b2b.model.SearchFilter;
+import com.uas.platform.b2b.model.Vendor;
+import com.uas.platform.b2b.service.PurchaseApBillService;
+import com.uas.platform.b2b.support.UsageBufferedLogger;
+import com.uas.platform.core.logging.BufferedLoggerManager;
+import com.uas.platform.core.model.PageParams;
+import com.uas.search.b2b.model.SPage;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RequestMethod;
+import org.springframework.web.bind.annotation.RestController;
+
+/**
+ * 应付对账单
+ *
+ * @author hejq
+ * @date 2018-12-14 16:39
+ */
+@RequestMapping("/sale/arCheck")
+@RestController
+public class SaleArCheckController {
+
+    private final static UsageBufferedLogger logger = BufferedLoggerManager.getLogger(UsageBufferedLogger.class);
+
+    @Autowired
+    private PurchaseApBillService purchaseApBillService;
+
+    /**
+     * 应付对账单获取所有满足条件的供应商
+     *
+     * @param params 分页参数
+     * @param keyword 关键词
+     * @param checkDate 对账月份
+     * @param searchFilter 筛选条件
+     * @return 符合条件的供应商
+     */
+    @RequestMapping(value = "/vendor", method = RequestMethod.GET)
+    public SPage<Vendor> getVendors(PageParams params, String keyword, String checkDate, String searchFilter) {
+        logger.log("应付对账单", "获取供应商信息", "获取所有符合条件的供应商");
+        SearchFilter filter = JSONObject.parseObject(searchFilter, SearchFilter.class);
+        return purchaseApBillService.getVendorInfo(params, keyword, checkDate, filter.getFromDate(), filter.getEndDate());
+    }
+
+    /**
+     * 通过日期筛选,筛选出超出默认日期的单据
+     *
+     * @param fromDate 开始时间
+     * @param endDate 截止时间
+     * @param checkDate 对账月份
+     * @param searchKeyWord 搜索词
+     * @return List<ErpProdIo>
+     */
+    @RequestMapping(value = "/getAllByKeywords", method = RequestMethod.GET)
+    public ErpProdIo getAllApChecksByDate(Long fromDate, Long endDate, ApcheckKeyWord searchKeyWord, String checkDate) {
+        logger.log("应付对账单", "筛选对账数据", "筛选所有未对账数据");
+        return purchaseApBillService.findXlsApChecks(searchKeyWord, fromDate, endDate, checkDate);
+    }
+}

+ 13 - 0
src/main/java/com/uas/platform/b2b/model/ApcheckKeyWord.java

@@ -15,6 +15,11 @@ public class ApcheckKeyWord {
      */
     private String receiveName;
 
+    /**
+     * 供应商UU
+     */
+    private Long vendorUU;
+
     /**
      * 客户名称
      */
@@ -53,6 +58,14 @@ public class ApcheckKeyWord {
         this.receiveName = receiveName;
     }
 
+    public Long getVendorUU() {
+        return vendorUU;
+    }
+
+    public void setVendorUU(Long vendorUU) {
+        this.vendorUU = vendorUU;
+    }
+
     public String getSuuorname() {
         return suuorname;
     }

+ 51 - 0
src/main/java/com/uas/platform/b2b/model/DateFilter.java

@@ -0,0 +1,51 @@
+package com.uas.platform.b2b.model;
+
+/**
+ * 时间过滤条件
+ *
+ * @author hejq
+ * @date 2018-12-14 15:58
+ */
+public class DateFilter {
+
+    /**
+     * 起始时间
+     */
+    private String fromDate;
+
+    /**
+     * 截止时间
+     */
+    private String endDate;
+
+    public DateFilter() {
+
+    }
+
+    /**
+     * 赋值时间
+     *
+     * @param sqlFromDate 开始时间
+     * @param sqlEndDate 截止时间
+     */
+    public DateFilter(String sqlFromDate, String sqlEndDate) {
+        this.fromDate = sqlFromDate;
+        this.endDate = sqlEndDate;
+    }
+
+    public String getFromDate() {
+        return fromDate;
+    }
+
+    public void setFromDate(String fromDate) {
+        this.fromDate = fromDate;
+    }
+
+    public String getEndDate() {
+        return endDate;
+    }
+
+    public void setEndDate(String endDate) {
+        this.endDate = endDate;
+    }
+}

+ 13 - 0
src/main/java/com/uas/platform/b2b/model/ErpProdIo.java

@@ -28,6 +28,11 @@ public class ErpProdIo {
      */
     private List<TradeCount> totalCount;
 
+    /**
+     * 供应商名称
+     */
+    private String vendorName;
+
     public List<ErpProdIODetail> getDetails() {
         return details;
     }
@@ -51,4 +56,12 @@ public class ErpProdIo {
     public void setTotalCount(List<TradeCount> totalCount) {
         this.totalCount = totalCount;
     }
+
+    public String getVendorName() {
+        return vendorName;
+    }
+
+    public void setVendorName(String vendorName) {
+        this.vendorName = vendorName;
+    }
 }

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

@@ -1,6 +1,7 @@
 package com.uas.platform.b2b.service;
 
 import com.uas.platform.b2b.model.ApcheckKeyWord;
+import com.uas.platform.b2b.model.DateFilter;
 import com.uas.platform.b2b.model.ErpProdIo;
 
 import java.util.List;
@@ -24,5 +25,15 @@ public interface ErpProdIODetailService {
 	 * @return 符合条件的数据
 	 */
     ErpProdIo findXlsApChecks(List<Long> filter, ApcheckKeyWord keyWord, Long fromDate, Long endDate, String checkDate);
+
+    /**
+     * 初始化筛选时间
+     *
+     * @param fromDate 开始时间
+     * @param endDate 截止时间
+     * @param checkDate 筛选月份
+     * @return 过滤条件
+     */
+    DateFilter initFilter(Long fromDate, Long endDate, String checkDate);
 	
 }

+ 48 - 16
src/main/java/com/uas/platform/b2b/service/PurchaseApBillService.java

@@ -1,57 +1,67 @@
 package com.uas.platform.b2b.service;
 
 import com.uas.platform.b2b.erp.model.ProdInOutRefreshPrice;
+import com.uas.platform.b2b.model.ApcheckKeyWord;
+import com.uas.platform.b2b.model.ErpProdIo;
 import com.uas.platform.b2b.model.PurchaseApBill;
 import com.uas.platform.b2b.model.PurchaseApBillItem;
 import com.uas.platform.b2b.model.SearchFilter;
+import com.uas.platform.b2b.model.Vendor;
 import com.uas.platform.core.model.PageInfo;
+import com.uas.platform.core.model.PageParams;
+import com.uas.search.b2b.model.SPage;
 import org.springframework.data.domain.Page;
 
 import java.util.List;
 
+/**
+ * 应付对账单
+ *
+ * @author US50
+ */
 public interface PurchaseApBillService {
 
 	/**
 	 * 批量保存、修改客户应付票据单
 	 * 
-	 * @param changeItems
+	 * @param apBillItems
 	 * @return
 	 */
-	public void save(List<PurchaseApBillItem> apBillItems);
+    void save(List<PurchaseApBillItem> apBillItems);
 
 	/**
 	 * 获取需要上传(到卖方)的未上传应付票据
 	 * 
 	 * @return
 	 */
-	public List<PurchaseApBill> findNotUpload();
+    List<PurchaseApBill> findNotUpload();
 
 	/**
 	 * 上传好需要上传的客户不良品入库单后修改单据的上传状态
 	 * 
 	 * @param idArray
 	 */
-	public void onUploadSuccess(String[] idArray);
+    void onUploadSuccess(String[] idArray);
 	
 	/**
 	 * 批量反过账客户应付发票
 	 * 
-	 * @param changeItems
+	 * @param apBills
 	 * @return
 	 */
-	public void nonPosting(List<PurchaseApBill> apBills);
+    void nonPosting(List<PurchaseApBill> apBills);
 	
 	/**
 	 * 获取需要上传(到卖方)的已反过账的客户应发发票
 	 * @return
 	 */
-	public List<PurchaseApBill> getNonPosting();
+    List<PurchaseApBill> getNonPosting();
 
 	/**
 	 * 删除已上传(到卖方)的反过账客户应付发票
 	 * @param idArray
 	 */
-	public void onNonPostingUploadSuccess(String[] idArray);
+    void onNonPostingUploadSuccess(String[] idArray);
 
 	/**
 	 * 分页查找客户应付票据,包括明细
@@ -61,7 +71,7 @@ public interface PurchaseApBillService {
 	 *            查找关键字
 	 * @return
 	 */
-	public Page<PurchaseApBill> findAllByPageInfo(PageInfo pageInfo, String keyword, Long fromDate, Long endDate, SearchFilter filter);
+    Page<PurchaseApBill> findAllByPageInfo(PageInfo pageInfo, String keyword, Long fromDate, Long endDate, SearchFilter filter);
 
 	/**
 	 * 用不良品入库单ID查找客户应付票据
@@ -69,22 +79,44 @@ public interface PurchaseApBillService {
 	 * @param id
 	 * @return
 	 */
-	public PurchaseApBill findById(Long id);
+    PurchaseApBill findById(Long id);
 	
 	
 	/** 
-	 * @Description: 统计所有的应付发票记录 
+	 * 统计所有的应付发票记录
+     *
 	 * @date 2015年11月16日
 	 * @return Long
 	 */
-	public Long getAllCount();
-
-    Integer getApBillUnreadCount();
+    Long getAllCount();
 
 	/**
 	 * erp批量更新采购验收单的单价,平台需要批量更新关联的应付发票的单价
 	 *
-	 * @param acceptItems
+	 * @param prodInOuts
 	 */
-	public void refreshPrice(List<ProdInOutRefreshPrice> prodInOuts);
+    void refreshPrice(List<ProdInOutRefreshPrice> prodInOuts);
+
+    /**
+     * 应付对账单获取所有满足条件的供应商
+     *
+     * @param params 分页参数
+     * @param keyword 关键词
+     * @param checkDate 对账月份
+     * @param fromDate 开始时间
+     * @param endDate 截止时间
+     * @return 符合条件的供应商
+     */
+    SPage<Vendor> getVendorInfo(PageParams params, String keyword, String checkDate, Long fromDate, Long endDate);
+
+    /**
+     * 通过日期筛选,筛选出超出默认日期的单据
+     *
+     * @param fromDate 开始时间
+     * @param endDate 截止时间
+     * @param checkDate 对账月份
+     * @param searchKeyWord 搜索词
+     * @return List<ErpProdIo>
+     */
+    ErpProdIo findXlsApChecks(ApcheckKeyWord searchKeyWord, Long fromDate, Long endDate, String checkDate);
 }

+ 71 - 55
src/main/java/com/uas/platform/b2b/service/impl/ErpProdIODetailServiceImpl.java

@@ -7,8 +7,10 @@ import com.uas.platform.b2b.core.util.ThreadUtils;
 import com.uas.platform.b2b.dao.CommonDao;
 import com.uas.platform.b2b.dao.VendorDao;
 import com.uas.platform.b2b.model.ApcheckKeyWord;
+import com.uas.platform.b2b.model.DateFilter;
 import com.uas.platform.b2b.model.ErpProdIODetail;
 import com.uas.platform.b2b.model.ErpProdIo;
+import com.uas.platform.b2b.model.SearchFilter;
 import com.uas.platform.b2b.model.Vendor;
 import com.uas.platform.b2b.publicapi.model.TradeCount;
 import com.uas.platform.b2b.service.ErpProdIODetailService;
@@ -47,35 +49,9 @@ public class ErpProdIODetailServiceImpl implements ErpProdIODetailService {
 
 	@Override
 	public ErpProdIo findXlsApChecks(List<Long> filter, ApcheckKeyWord keyword, Long fromDate, Long endDate, String checkDate) {
+        DateFilter dateFilter = initFilter(fromDate, endDate, checkDate);
 		Long enUU = SystemSession.getUser().getEnterprise().getUu();
         StringBuffer distributes = new StringBuffer();
-        String sqlFromDate;
-        String sqlEndDate;
-        /*
-         * 1、 如果前端指定开始截止时间,直接使用
-         * 2、 如果前端未指定,采用选择月份,使用月份处理
-         * 3、 截止时间筛为指定月份加1,即下月一号,采用小于这天,能取到当月所有数据
-         */
-        final Integer oneDayMilliseconds = 86400000;
-        boolean onlyCheckDate = (null == fromDate || null == endDate) && null != checkDate;
-        if (null != fromDate && null != endDate ) {
-            sqlFromDate = DateFormatUtils.DATE_FORMAT.format(new Date(fromDate));
-            sqlEndDate = DateFormatUtils.DATE_FORMAT.format(new Date(endDate + oneDayMilliseconds));
-        } else if (onlyCheckDate) {
-            SimpleDateFormat format = new SimpleDateFormat("yyyy-MM");
-            Date date;
-            Date checkTime;
-            try {
-                date = DateUtils.dateAddMonth(format.parse(checkDate), 1);
-                checkTime = format.parse(checkDate);
-            } catch (ParseException e) {
-                throw new IllegalOperatorException("时间格式异常");
-            }
-            sqlFromDate = DateFormatUtils.DATE_FORMAT.format(checkTime);
-            sqlEndDate = DateFormatUtils.DATE_FORMAT.format(date);
-        } else {
-            throw new IllegalOperatorException("请选择对账时间");
-        }
         List<ErpProdIODetail> details = new ArrayList<>();
         if (null != filter) {
             filter.forEach(uu -> {
@@ -86,19 +62,19 @@ public class ErpProdIODetailServiceImpl implements ErpProdIODetailService {
             });
         }
 		// 货款调账
-		List<ErpProdIODetail> adjustments = getAdjustments(distributes, keyword, sqlFromDate, sqlEndDate, enUU);
+		List<ErpProdIODetail> adjustments = getAdjustments(distributes, keyword, dateFilter.getFromDate(), dateFilter.getEndDate(), enUU);
 		// 采购验收单
-        List<ErpProdIODetail> saleAccepts = getSaleAccepts(distributes, keyword, sqlFromDate, sqlEndDate, enUU);
+        List<ErpProdIODetail> saleAccepts = getSaleAccepts(distributes, keyword, dateFilter.getFromDate(), dateFilter.getEndDate(), enUU);
         // 采购验退单
-        List<ErpProdIODetail> saleReturns = getSaleReturns(distributes, keyword, sqlFromDate, sqlEndDate, enUU);
+        List<ErpProdIODetail> saleReturns = getSaleReturns(distributes, keyword, dateFilter.getFromDate(), dateFilter.getEndDate(), enUU);
         // 客户不良品入库单
-        List<ErpProdIODetail> badIns = getBadIns(distributes, keyword, sqlFromDate, sqlEndDate, enUU);
+        List<ErpProdIODetail> badIns = getBadIns(distributes, keyword, dateFilter.getFromDate(), dateFilter.getEndDate(), enUU);
         // 客户不良品出库单
-        List<ErpProdIODetail> badOuts = getBadOuts(distributes, keyword, sqlFromDate, sqlEndDate, enUU);
+        List<ErpProdIODetail> badOuts = getBadOuts(distributes, keyword, dateFilter.getFromDate(), dateFilter.getEndDate(), enUU);
         // 委外验收单
-        List<ErpProdIODetail> makeAccepts = getMakeAccepts(distributes, keyword, sqlFromDate, sqlEndDate, enUU);
+        List<ErpProdIODetail> makeAccepts = getMakeAccepts(distributes, keyword, dateFilter.getFromDate(), dateFilter.getEndDate(), enUU);
         // 委外验退单
-        List<ErpProdIODetail> makeReturns = getMakeReturns(distributes, keyword, sqlFromDate, sqlEndDate, enUU);
+        List<ErpProdIODetail> makeReturns = getMakeReturns(distributes, keyword, dateFilter.getFromDate(), dateFilter.getEndDate(), enUU);
         details.addAll(adjustments);
         details.addAll(saleAccepts);
         details.addAll(saleReturns);
@@ -128,6 +104,46 @@ public class ErpProdIODetailServiceImpl implements ErpProdIODetailService {
 		return erpProdIo;
 	}
 
+    /**
+     * 初始化筛选时间
+     *
+     * @param fromDate 开始时间
+     * @param endDate 截止时间
+     * @param checkDate 筛选月份
+     * @return 过滤条件
+     */
+    @Override
+    public DateFilter initFilter(Long fromDate, Long endDate, String checkDate) {
+        String sqlFromDate;
+        String sqlEndDate;
+        /*
+         * 1、 如果前端指定开始截止时间,直接使用
+         * 2、 如果前端未指定,采用选择月份,使用月份处理
+         * 3、 截止时间筛为指定月份加1,即下月一号,采用小于这天,能取到当月所有数据
+         */
+        final Integer oneDayMilliseconds = 86400000;
+        boolean onlyCheckDate = (null == fromDate || null == endDate) && null != checkDate;
+        if (null != fromDate && null != endDate ) {
+            sqlFromDate = DateFormatUtils.DATE_FORMAT.format(new Date(fromDate));
+            sqlEndDate = DateFormatUtils.DATE_FORMAT.format(new Date(endDate + oneDayMilliseconds));
+        } else if (onlyCheckDate) {
+            SimpleDateFormat format = new SimpleDateFormat("yyyy-MM");
+            Date date;
+            Date checkTime;
+            try {
+                date = DateUtils.dateAddMonth(format.parse(checkDate), 1);
+                checkTime = format.parse(checkDate);
+            } catch (ParseException e) {
+                throw new IllegalOperatorException("时间格式异常");
+            }
+            sqlFromDate = DateFormatUtils.DATE_FORMAT.format(checkTime);
+            sqlEndDate = DateFormatUtils.DATE_FORMAT.format(date);
+        } else {
+            throw new IllegalOperatorException("请选择对账时间");
+        }
+        return new DateFilter(sqlFromDate, sqlEndDate);
+    }
+
     /**
      * 获取待对账的委外验退单
      *
@@ -136,7 +152,7 @@ public class ErpProdIODetailServiceImpl implements ErpProdIODetailService {
      * @param fromDate 开始时间
      * @param endDate 截止时间
      * @param enUU 当前企业UU
-     * @return
+     * @return 委外验退单
      */
     private List<ErpProdIODetail> getMakeReturns(StringBuffer distributes, ApcheckKeyWord keyword, String fromDate, String endDate, Long enUU) {
 	    StringBuffer sql = new StringBuffer("select  mr_code as inoutno, mr_date as pidate, mr_rate as rate, mr_receivecode as receivecode, " +
@@ -172,10 +188,10 @@ public class ErpProdIODetailServiceImpl implements ErpProdIODetailService {
             sql.append("and mr_enuu in (").append(distributes).append(") ");
         }
         if (fromDate != null) {
-            sql.append("and DAYFORMDATE(mr_date) >= '").append(fromDate).append("' ");
+            sql.append("and mr_date >= '").append(fromDate).append("' ");
         }
         if (endDate != null) {
-            sql.append("and DAYFORMDATE(mr_date) < '").append(endDate).append("' ");
+            sql.append("and mr_date < '").append(endDate).append("' ");
         }
         return commonDao.query(sql.toString(), ErpProdIODetail.class);
     }
@@ -188,7 +204,7 @@ public class ErpProdIODetailServiceImpl implements ErpProdIODetailService {
      * @param fromDate 开始时间
      * @param endDate 截止时间
      * @param enUU 当前企业UU
-     * @return
+     * @return 委外验收单
      */
     private List<ErpProdIODetail> getMakeAccepts(StringBuffer distributes, ApcheckKeyWord keyword, String fromDate, String endDate, Long enUU) {
 	    StringBuffer sql = new StringBuffer("select  make$accept.ma_code as inoutno, make$accept.ma_date as pidate, make$accept.ma_rate as rate, " +
@@ -224,10 +240,10 @@ public class ErpProdIODetailServiceImpl implements ErpProdIODetailService {
             sql.append("and make$accept.ma_enuu in (").append(distributes).append(") ");
         }
         if (fromDate != null) {
-            sql.append("and DAYFORMDATE(make$accept.ma_date) >= '").append(fromDate).append("' ");
+            sql.append("and make$accept.ma_date >= '").append(fromDate).append("' ");
         }
         if (endDate != null) {
-            sql.append("and DAYFORMDATE(make$accept.ma_date) < '").append(endDate).append("' ");
+            sql.append("and make$accept.ma_date < '").append(endDate).append("' ");
         }
         return commonDao.query(sql.toString(), ErpProdIODetail.class);
     }
@@ -240,7 +256,7 @@ public class ErpProdIODetailServiceImpl implements ErpProdIODetailService {
      * @param fromDate 开始时间
      * @param endDate 截止时间
      * @param enUU 当前企业UU
-     * @return
+     * @return 客户不良品出库单
      */
     private List<ErpProdIODetail> getBadOuts(StringBuffer distributes, ApcheckKeyWord keyword, String fromDate, String endDate, Long enUU) {
 	    StringBuffer sql = new StringBuffer("select  po_code as inoutno, po_date as pidate, po_rate as rate, po_receivecode as receivecode, " +
@@ -276,10 +292,10 @@ public class ErpProdIODetailServiceImpl implements ErpProdIODetailService {
             sql.append("and po_enuu in (").append(distributes).append(") ");
         }
         if (fromDate != null) {
-            sql.append("and DAYFORMDATE(po_date) >= '").append(fromDate).append("' ");
+            sql.append("and po_date >= '").append(fromDate).append("' ");
         }
         if (endDate != null) {
-            sql.append("and DAYFORMDATE(po_date) < '").append(endDate).append("' ");
+            sql.append("and po_date < '").append(endDate).append("' ");
         }
         return commonDao.query(sql.toString(), ErpProdIODetail.class);
     }
@@ -292,7 +308,7 @@ public class ErpProdIODetailServiceImpl implements ErpProdIODetailService {
      * @param fromDate 开始时间
      * @param endDate 截止时间
      * @param enUU 当前企业UU
-     * @return
+     * @return 客户不良品入库单
      */
     private List<ErpProdIODetail> getBadIns(StringBuffer distributes, ApcheckKeyWord keyword, String fromDate, String endDate, Long enUU) {
         StringBuffer sql = new StringBuffer("select pb_code as inoutno, pb_date as pidate, pb_rate as rate, pb_receivecode as receivecode, " +
@@ -328,10 +344,10 @@ public class ErpProdIODetailServiceImpl implements ErpProdIODetailService {
             sql.append("and pb_enuu in (").append(distributes).append(") ");
         }
         if (fromDate != null) {
-            sql.append("and DAYFORMDATE(pb_date) >= '").append(fromDate).append("' ");
+            sql.append("and pb_date >= '").append(fromDate).append("' ");
         }
         if (endDate != null) {
-            sql.append("and DAYFORMDATE(pb_date) < '").append(endDate).append("' ");
+            sql.append("and pb_date < '").append(endDate).append("' ");
         }
         return commonDao.query(sql.toString(), ErpProdIODetail.class);
     }
@@ -344,7 +360,7 @@ public class ErpProdIODetailServiceImpl implements ErpProdIODetailService {
      * @param fromDate 开始时间
      * @param endDate 截止时间
      * @param enUU 当前企业UU
-     * @return
+     * @return 客户采购验退单信息
      */
     private List<ErpProdIODetail> getSaleReturns(StringBuffer distributes, ApcheckKeyWord keyword, String fromDate, String endDate, Long enUU) {
         StringBuffer sql = new StringBuffer("select purc$return.pr_code as inoutno, pr_date as pidate, pr_rate as rate, pr_receivecode as receivecode, " +
@@ -380,10 +396,10 @@ public class ErpProdIODetailServiceImpl implements ErpProdIODetailService {
             sql.append("and pr_enuu in (").append(distributes).append(") ");
         }
         if (fromDate != null) {
-            sql.append("and DAYFORMDATE(pr_date) >= '").append(fromDate).append("' ");
+            sql.append("and pr_date >= '").append(fromDate).append("' ");
         }
         if (endDate != null) {
-            sql.append("and DAYFORMDATE(pr_date) < '").append(endDate).append("' ");
+            sql.append("and pr_date < '").append(endDate).append("' ");
         }
         return commonDao.query(sql.toString(), ErpProdIODetail.class);
     }
@@ -396,7 +412,7 @@ public class ErpProdIODetailServiceImpl implements ErpProdIODetailService {
      * @param fromDate 开始时间
      * @param endDate 截止时间
      * @param enUU 当前企业UU
-     * @return
+     * @return 客户采购验收单信息
      */
     private List<ErpProdIODetail> getSaleAccepts(StringBuffer distributes, ApcheckKeyWord keyword, String fromDate, String endDate, Long enUU) {
         StringBuffer sql = new StringBuffer("select pa_code as inoutno, pa_date as pidate, pa_rate as rate, pa_receivecode as receivcode, " +
@@ -432,10 +448,10 @@ public class ErpProdIODetailServiceImpl implements ErpProdIODetailService {
             sql.append("and pa_enuu in (").append(distributes).append(") ");
         }
         if (fromDate != null) {
-            sql.append("and DAYFORMDATE(pa_date) >= '").append(fromDate).append("' ");
+            sql.append("and pa_date >= '").append(fromDate).append("' ");
         }
         if (endDate != null) {
-            sql.append("and DAYFORMDATE(pa_date) < '").append(endDate).append("' ");
+            sql.append("and pa_date < '").append(endDate).append("' ");
         }
         return commonDao.query(sql.toString(), ErpProdIODetail.class);
     }
@@ -448,7 +464,7 @@ public class ErpProdIODetailServiceImpl implements ErpProdIODetailService {
      * @param fromDate 开始时间
      * @param endDate 截止时间
      * @param enUU 当前企业UU
-     * @return
+     * @return 货款调账信息
      */
     private List<ErpProdIODetail> getAdjustments(StringBuffer distributes, ApcheckKeyWord keyword, String fromDate, String endDate, Long enUU) {
         StringBuffer sql = new StringBuffer("select aa_inoutno inoutno, aa_orderdate pidate, aa_rate rate, aa_receivecode receivecode, " +
@@ -479,10 +495,10 @@ public class ErpProdIODetailServiceImpl implements ErpProdIODetailService {
             sql.append("and aa_custuu in (").append(distributes).append(") ");
         }
         if (fromDate != null) {
-            sql.append("and DAYFORMDATE(aa_date) >= '").append(fromDate).append("' ");
+            sql.append("and aa_date >= '").append(fromDate).append("' ");
         }
         if (endDate != null) {
-            sql.append("and DAYFORMDATE(aa_date) < '").append(endDate).append("' ");
+            sql.append("and aa_date < '").append(endDate).append("' ");
         }
         return commonDao.query(sql.toString(), ErpProdIODetail.class);
     }

+ 484 - 9
src/main/java/com/uas/platform/b2b/service/impl/PurchaseApBillServiceImpl.java

@@ -1,25 +1,39 @@
 package com.uas.platform.b2b.service.impl;
 
+import com.alibaba.fastjson.JSON;
+import com.uas.platform.b2b.core.util.ThreadUtils;
 import com.uas.platform.b2b.dao.CommonDao;
-import com.uas.platform.b2b.dao.PagingReleaseCountDao;
 import com.uas.platform.b2b.dao.PurchaseApBillDao;
 import com.uas.platform.b2b.dao.PurchaseApBillItemDao;
+import com.uas.platform.b2b.dao.VendorDao;
 import com.uas.platform.b2b.erp.model.ProdInOutRefreshPrice;
 import com.uas.platform.b2b.erp.support.ErpBufferedLogger;
+import com.uas.platform.b2b.model.ApcheckKeyWord;
+import com.uas.platform.b2b.model.DateFilter;
+import com.uas.platform.b2b.model.ErpProdIODetail;
+import com.uas.platform.b2b.model.ErpProdIo;
 import com.uas.platform.b2b.model.Product;
 import com.uas.platform.b2b.model.PurchaseApBill;
 import com.uas.platform.b2b.model.PurchaseApBillItem;
 import com.uas.platform.b2b.model.SearchFilter;
+import com.uas.platform.b2b.model.Vendor;
 import com.uas.platform.b2b.ps.ProductUtils;
+import com.uas.platform.b2b.publicapi.model.TradeCount;
 import com.uas.platform.b2b.search.SearchService;
+import com.uas.platform.b2b.service.ErpProdIODetailService;
 import com.uas.platform.b2b.service.PurchaseApBillService;
+import com.uas.platform.b2b.service.PurchaseApCheckService;
+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.task.ApCheckTask;
 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.PageParams;
+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;
@@ -55,10 +69,16 @@ public class PurchaseApBillServiceImpl implements PurchaseApBillService {
 	private SearchService searchService;
 
 	@Autowired
-	private PagingReleaseCountDao pagingReleaseCountDao;
+	private CommonDao commonDao;
 
 	@Autowired
-	private CommonDao commonDao;
+    private PurchaseApCheckService purchaseApCheckService;
+
+	@Autowired
+    private VendorDao vendorDao;
+	
+	@Autowired
+    private ErpProdIODetailService erpProdIODetailService;
 
 	private final static ErpBufferedLogger logger = BufferedLoggerManager.getLogger(ErpBufferedLogger.class);
 
@@ -166,12 +186,6 @@ public class PurchaseApBillServiceImpl implements PurchaseApBillService {
 		return purchaseApBillDao.countByVendUU(SystemSession.getUser().getEnterprise().getUu());
 	}
 
-	@Override
-	public Integer getApBillUnreadCount() {
-		return pagingReleaseCountDao.getUnreadCount(SystemSession.getUser().getEnterprise().getUu(),
-				SystemSession.getUser().getUserUU(), "sale", "PURC$APBILL");
-	}
-
 	@Override
 	public void refreshPrice(List<ProdInOutRefreshPrice> prodInOuts) {
 		Long enuu = SystemSession.getUser().getEnterprise().getUu();
@@ -199,4 +213,465 @@ public class PurchaseApBillServiceImpl implements PurchaseApBillService {
 		}
 	}
 
+    /**
+     * 应付对账单获取所有满足条件的供应商
+     *
+     * @param params    分页参数
+     * @param keyword   关键词
+     * @param checkDate 对账月份
+     * @param fromDate  开始时间
+     * @param endDate   截止时间
+     * @return 符合条件的供应商
+     */
+    @Override
+    public SPage<Vendor> getVendorInfo(com.uas.platform.core.model.PageParams params, String keyword, String checkDate, Long fromDate, Long endDate) {
+        SPage<Vendor> vendorSPage = findVendorByPage(params, keyword);
+        final Long enUU = SystemSession.getUser().getEnterprise().getUu();
+        if (!org.springframework.util.CollectionUtils.isEmpty(vendorSPage.getContent())) {
+            vendorSPage.getContent().stream().filter(customer -> null != customer.getApcheck() && customer.getApcheck() == 1)
+                .forEach(customer -> {
+                    Long vendorUU = customer.getVendEnUU();
+                    if (!com.uas.ps.core.util.StringUtils.isEmpty(customer.getTotalCountString())) {
+                        List<TradeCount> tradeCounts = JSON.parseArray(customer.getTotalCountString(), TradeCount.class);
+                        customer.setTotalCount(tradeCounts);
+                    }
+                    // 本月应收
+                    List<TradeCount> thisMonthTrades = purchaseApCheckService.getThisMonthTrade(vendorUU, enUU, checkDate, fromDate, endDate);
+                    customer.setThisMonthCount(thisMonthTrades);
+                });
+        }
+        return vendorSPage;
+    }
+
+    /**
+     * 通过分页信息查询供应商信息
+     *
+     * @param params 分页参数
+     * @param keyword 搜索关键词
+     * @return 搜索结果
+     */
+    private SPage<Vendor> findVendorByPage(com.uas.platform.core.model.PageParams params, String keyword) {
+        PageInfo pageInfo = new PageInfo(params.getPage(), params.getCount());
+        org.springframework.data.domain.Sort sort = new org.springframework.data.domain.Sort( org.springframework.data.domain.Sort.Direction.DESC, "totalCountString");
+        pageInfo.setSort(sort);
+        /*
+         * 过滤条件
+         * 1、 当前企业为客户
+         * 2、 开启B2B对账
+         * 3、 需要对账价格不为空
+         */
+        pageInfo.filter("myEnUU", SystemSession.getUser().getEnterprise().getUu());
+        pageInfo.filter("apcheck", Constant.YES);
+        pageInfo.expression(PredicateUtils.ne("totalCountString", " ", true));
+        if (!com.uas.ps.core.util.StringUtils.isEmpty(keyword)) {
+            pageInfo.expression(PredicateUtils.like("vendorEnterprise.enName", keyword, true));
+        }
+        Page<Vendor> vendors = vendorDao.findAll((Root<Vendor> root, CriteriaQuery<?> query, CriteriaBuilder builder) ->
+            query.where(pageInfo.getPredicates(root, query, builder)).getRestriction(), pageInfo);
+        return SPageUtils.covertSPage(vendors);
+    }
+
+    /**
+     * 通过日期筛选,筛选出超出默认日期的单据
+     *
+     * @param searchKeyWord 搜索词
+     * @param fromDate      开始时间
+     * @param endDate       截止时间
+     * @param checkDate     对账月份
+     * @return List<ErpProdIo>
+     */
+    @Override
+    public ErpProdIo findXlsApChecks(ApcheckKeyWord searchKeyWord, Long fromDate, Long endDate, String checkDate) {
+        DateFilter dateFilter = erpProdIODetailService.initFilter(fromDate, endDate, checkDate);
+        Long enUU = SystemSession.getUser().getEnterprise().getUu();
+        // 货款调账
+        List<ErpProdIODetail> adjustments = getAdjustments(searchKeyWord, dateFilter.getFromDate(), dateFilter.getEndDate(), enUU);
+        // 采购验收单
+        List<ErpProdIODetail> saleAccepts = getSaleAccepts(searchKeyWord, dateFilter.getFromDate(), dateFilter.getEndDate(), enUU);
+        // 采购验退单
+        List<ErpProdIODetail> saleReturns = getSaleReturns(searchKeyWord, dateFilter.getFromDate(), dateFilter.getEndDate(), enUU);
+        // 客户不良品入库单
+        List<ErpProdIODetail> badIns = getBadIns(searchKeyWord, dateFilter.getFromDate(), dateFilter.getEndDate(), enUU);
+        // 客户不良品出库单
+        List<ErpProdIODetail> badOuts = getBadOuts(searchKeyWord, dateFilter.getFromDate(), dateFilter.getEndDate(), enUU);
+        // 委外验收单
+        List<ErpProdIODetail> makeAccepts = getMakeAccepts(searchKeyWord, dateFilter.getFromDate(), dateFilter.getEndDate(), enUU);
+        // 委外验退单
+        List<ErpProdIODetail> makeReturns = getMakeReturns(searchKeyWord, dateFilter.getFromDate(), dateFilter.getEndDate(), enUU);
+        List<ErpProdIODetail> details = new ArrayList<>();
+        details.addAll(adjustments);
+        details.addAll(saleAccepts);
+        details.addAll(saleReturns);
+        details.addAll(badIns);
+        details.addAll(badOuts);
+        details.addAll(makeAccepts);
+        details.addAll(makeReturns);
+        ErpProdIo erpProdIo = new ErpProdIo();
+        erpProdIo.setDetails(details);
+        // 应收总额
+        if (null != searchKeyWord.getVendorUU()) {
+            List<TradeCount> totalTrades = purchaseApCheckService.getDueTrade(searchKeyWord.getVendorUU(), enUU);
+            List<Vendor> vendors = vendorDao.findByMyEnUUAndVendUU(enUU, searchKeyWord.getVendorUU());
+            erpProdIo.setVendorName(vendors.get(0).getVendorEnterprise().getEnName());
+            if (!CollectionUtil.isEmpty(totalTrades)) {
+                erpProdIo.setTotalCount(totalTrades);
+                if (!CollectionUtil.isEmpty(vendors)) {
+                    String tradeString = JSON.toJSONString(totalTrades);
+                    ThreadUtils.task(()
+                        -> commonDao.getJdbcTemplate().update(String.format(ApCheckTask.UPDATE_COUNT_SQL, tradeString, vendors.get(0).getId()))
+                    );
+                }
+            }
+            // 本月应收
+            List<TradeCount> thisMonthTrades = purchaseApCheckService.getThisMonthTrade(searchKeyWord.getVendorUU(), enUU, checkDate, fromDate, endDate);
+            erpProdIo.setThisMonthCount(thisMonthTrades);
+        }
+        return erpProdIo;
+    }
+
+    /**
+     * 获取待对账的委外验退单
+     *
+     * @param keyword 搜索关键词
+     * @param fromDate 开始时间
+     * @param endDate 截止时间
+     * @param enUU 当前企业UU
+     * @return 委外验退单
+     */
+    private List<ErpProdIODetail> getMakeReturns(ApcheckKeyWord keyword, String fromDate, String endDate, Long enUU) {
+        StringBuffer sql = new StringBuffer("select  mr_code as inoutno, mr_date as pidate, mr_rate as rate, mr_receivecode as receivecode, " +
+            "mr_receivename as receivename, '客户委外验退单' as piclass, 'make$returnitem' as sourcetable, ma_code as ordercode, 0 as orderdetno, " +
+            "mri_number as detno,  (-(1) *  mri_qty ) as qty, mri_orderpice as orderprice, mr_currency as currency, mri_taxrate as taxrate, " +
+            "mri_whname as whname, mri_ycheckqty as ycheckqty, make$orders.pr_code as prodcode, make$orders.pr_spec as prodspec, " +
+            "make$orders.pr_title as prodtitle, make$orders.pr_unit as produnit, " +
+            "((-(1) *  mri_qty ) - coalesce(mri_ycheckqty, 0)) as thischeckqty, mr_enuu as custuu, ma_useruu custuseruu, mr_venduu as enuu, mri_id as sourceid, " +
+            "mr_sendcode as sendcode, ma_factory as pd_factory, en_name custname from make$return  " +
+            "join make$returnitem on mr_id =  mri_paid " +
+            "join make$orders on mri_odid = ma_id  " +
+            "left join sec$enterprises on mr_enuu = en_uu " +
+            " where mri_qty > abs(coalesce(mri_ycheckqty, 0)) and mr_enuu = ").append(enUU).append(" ");
+        if (!org.apache.axis.utils.StringUtils.isEmpty(keyword.getReceiveName())) {
+            sql.append("and mr_receivename = '").append(keyword.getReceiveName()).append("' ");
+        }
+        if (!org.apache.axis.utils.StringUtils.isEmpty(keyword.getFactory())) {
+            sql.append("and ma_factory = '").append(keyword.getFactory()).append("' ");
+        }
+        if (!org.apache.axis.utils.StringUtils.isEmpty(keyword.getProdSpec())) {
+            sql.append("and make$orders.pr_spec = '").append(keyword.getProdSpec()).append("' ");
+        }
+        if (!org.apache.axis.utils.StringUtils.isEmpty(keyword.getProdTitle())) {
+            sql.append("and make$orders.pr_title = '").append(keyword.getProdTitle()).append("' ");
+        }
+        if (null != keyword.getTaxRate()) {
+            sql.append("and mri_taxrate = '").append(keyword.getTaxRate()).append("' ");
+        }
+        if (!org.apache.axis.utils.StringUtils.isEmpty(keyword.getSuuorname())) {
+            sql.append("and en_name = '").append(keyword.getSuuorname()).append("' ");
+        }
+        if (fromDate != null) {
+            sql.append("and DAYFORMDATE(mr_date) >= '").append(fromDate).append("' ");
+        }
+        if (endDate != null) {
+            sql.append("and DAYFORMDATE(mr_date) < '").append(endDate).append("' ");
+        }
+        if (null != keyword.getVendorUU()) {
+            sql.append("and mr_venduu = ").append(keyword.getVendorUU());
+        }
+        return commonDao.query(sql.toString(), ErpProdIODetail.class);
+    }
+
+    /**
+     * 获取待对账的委外验收单
+     *
+     * @param keyword 搜索关键词
+     * @param fromDate 开始时间
+     * @param endDate 截止时间
+     * @param enUU 当前企业UU
+     * @return 委外验收单
+     */
+    private List<ErpProdIODetail> getMakeAccepts(ApcheckKeyWord keyword, String fromDate, String endDate, Long enUU) {
+        StringBuffer sql = new StringBuffer("select  make$accept.ma_code as inoutno, make$accept.ma_date as pidate, make$accept.ma_rate as rate, " +
+            "ma_receivecode as receivecode, ma_receivename as receivename, '客户委外验收单' as piclass, 'make$acceptitem' as sourcetable, " +
+            "make$orders.ma_code as ordercode, 0 as orderdetno, mai_number as detno, mai_qty as qty, mai_orderpice as orderprice, " +
+            "make$accept.ma_currency as currency, mai_taxrate as taxrate, mai_whname as whname, mai_ycheckqty as ycheckqty, " +
+            "make$orders.pr_code as prodcode, make$orders.pr_spec as prodspec, make$orders.pr_title as prodtitle, make$orders.pr_unit as produnit, " +
+            "(mai_qty - coalesce(mai_ycheckqty, 0)) as thischeckqty, make$accept.ma_enuu as custuu, make$orders.ma_useruu custuseruu, make$accept.ma_venduu as enuu, " +
+            "mai_id as sourceid, ma_sendcode as sendcode, ma_factory as factory, en_name custname from make$accept " +
+            "join make$acceptitem on make$accept.ma_id = mai_paid " +
+            "join make$orders on mai_odid = make$orders.ma_id " +
+            "left join sec$enterprises on make$accept.ma_enuu = en_uu " +
+            "where mai_qty > coalesce(mai_ycheckqty, 0) and make$accept.ma_enuu = ").append(enUU).append(" ");
+        if (!org.apache.axis.utils.StringUtils.isEmpty(keyword.getReceiveName())) {
+            sql.append("and ma_receivename = '").append(keyword.getReceiveName()).append("' ");
+        }
+        if (!org.apache.axis.utils.StringUtils.isEmpty(keyword.getFactory())) {
+            sql.append("and ma_factory = '").append(keyword.getFactory()).append("' ");
+        }
+        if (!org.apache.axis.utils.StringUtils.isEmpty(keyword.getProdSpec())) {
+            sql.append("and make$orders.pr_spec = '").append(keyword.getProdSpec()).append("' ");
+        }
+        if (!org.apache.axis.utils.StringUtils.isEmpty(keyword.getProdTitle())) {
+            sql.append("and make$orders.pr_title = '").append(keyword.getProdTitle()).append("' ");
+        }
+        if (null != keyword.getTaxRate()) {
+            sql.append("and mai_taxrate = '").append(keyword.getTaxRate()).append("' ");
+        }
+        if (!org.apache.axis.utils.StringUtils.isEmpty(keyword.getSuuorname())) {
+            sql.append("and en_name = '").append(keyword.getSuuorname()).append("' ");
+        }
+        if (fromDate != null) {
+            sql.append("and DAYFORMDATE(make$accept.ma_date) >= '").append(fromDate).append("' ");
+        }
+        if (endDate != null) {
+            sql.append("and DAYFORMDATE(make$accept.ma_date) < '").append(endDate).append("' ");
+        }
+        if (null != keyword.getVendorUU()) {
+            sql.append("and make$accept.ma_venduu = ").append(keyword.getVendorUU());
+        }
+        return commonDao.query(sql.toString(), ErpProdIODetail.class);
+    }
+
+    /**
+     * 获取待对账的客户不良品出库单
+     *
+     * @param keyword 搜索关键词
+     * @param fromDate 开始时间
+     * @param endDate 截止时间
+     * @param enUU 当前企业UU
+     * @return 客户不良品出库单
+     */
+    private List<ErpProdIODetail> getBadOuts(ApcheckKeyWord keyword, String fromDate, String endDate, Long enUU) {
+        StringBuffer sql = new StringBuffer("select  po_code as inoutno, po_date as pidate, po_rate as rate, po_receivecode as receivecode, " +
+            "po_receivename as receivename, '客户不良品出库单' as piclass, 'purc$badoutitem' as sourcetable, pu_code as pd_ordercode, " +
+            "purc$orderitems.pd_number as orderdetno, poi_number as detno, (-(1) * poi_qty ) as qty, 0 as pd_orderprice, po_currency as currency, " +
+            "poi_taxrate as taxrate, poi_whname as whname, poi_ycheckqty as ycheckqty, pr_code as prodcode, pr_spec as prodspec, pr_title as prodtitle, pr_unit as produnit, " +
+            "((-(1) * poi_qty ) - coalesce( poi_ycheckqty, 0)) as thischeckqty, po_enuu as custuu, pu_useruu custuseruu, po_venduu as enuu, poi_id as sourceid, " +
+            "po_sendcode as sendcode, purc$orderitems.pd_factory as factory, en_name custname from purc$badout " +
+            "join purc$badoutitem on po_id = poi_poid  " +
+            "left join purc$orderitems on poi_pdid = pd_id " +
+            "left join purc$orders on pu_id = pd_puid " +
+            "left join sec$enterprises on po_enuu = en_uu " +
+            "where poi_qty > abs(coalesce( poi_ycheckqty, 0)) and po_enuu = ").append(enUU).append(" ");
+        if (!org.apache.axis.utils.StringUtils.isEmpty(keyword.getReceiveName())) {
+            sql.append("and po_receivename = '").append(keyword.getReceiveName()).append("' ");
+        }
+        if (!org.apache.axis.utils.StringUtils.isEmpty(keyword.getFactory())) {
+            sql.append("and pd_factory = '").append(keyword.getFactory()).append("' ");
+        }
+        if (!org.apache.axis.utils.StringUtils.isEmpty(keyword.getProdSpec())) {
+            sql.append("and pr_spec = '").append(keyword.getProdSpec()).append("' ");
+        }
+        if (!org.apache.axis.utils.StringUtils.isEmpty(keyword.getProdTitle())) {
+            sql.append("and pr_title = '").append(keyword.getProdTitle()).append("' ");
+        }
+        if (null != keyword.getTaxRate()) {
+            sql.append("and poi_taxrate = '").append(keyword.getTaxRate()).append("' ");
+        }
+        if (!org.apache.axis.utils.StringUtils.isEmpty(keyword.getSuuorname())) {
+            sql.append("and en_name = '").append(keyword.getSuuorname()).append("' ");
+        }
+        if (fromDate != null) {
+            sql.append("and DAYFORMDATE(po_date) >= '").append(fromDate).append("' ");
+        }
+        if (endDate != null) {
+            sql.append("and DAYFORMDATE(po_date) < '").append(endDate).append("' ");
+        }
+        if (null != keyword.getVendorUU()) {
+            sql.append("and po_venduu = ").append(keyword.getVendorUU());
+        }
+        return commonDao.query(sql.toString(), ErpProdIODetail.class);
+    }
+
+    /**
+     * 获取待对账的客户不良品入库单
+     *
+     * @param keyword 搜索关键词
+     * @param fromDate 开始时间
+     * @param endDate 截止时间
+     * @param enUU 当前企业UU
+     * @return 客户不良品入库单
+     */
+    private List<ErpProdIODetail> getBadIns(ApcheckKeyWord keyword, String fromDate, String endDate, Long enUU) {
+        StringBuffer sql = new StringBuffer("select pb_code as inoutno, pb_date as pidate, pb_rate as rate, pb_receivecode as receivecode, " +
+            "pb_receivename as receivename, '客户不良品入库单' as piclass, 'purc$badinitem' as sourcetable, pu_code as ordercode, " +
+            "pd_number as orderdetno, pbi_number as detno, pbi_qty as qty, 0 as pd_orderprice, pb_currency as currency, pbi_taxrate as taxrate, " +
+            "pbi_whname as whname, pbi_ycheckqty as ycheckqty, pr_code as prodcode, pr_spec as prodspec, pr_title as prodtitle, pr_unit as produnit, " +
+            "(pbi_qty - coalesce(pbi_ycheckqty, 0)) as thischeckqty, pb_enuu as custuu, pu_useruu custuseruu, pb_venduu as enuu, pbi_id as sourceid, " +
+            "pb_sendcode as sendcode, pd_factory as factory, en_name custname from purc$badin " +
+            "join purc$badinitem on pb_id = pbi_pbid " +
+            "left join purc$orderitems on pbi_pdid = pd_id " +
+            "left join purc$orders on pu_id = pd_puid " +
+            "left join sec$enterprises on pb_enuu = en_uu " +
+            "where pbi_qty > abs(coalesce(pbi_ycheckqty, 0)) and pb_enuu = ").append(enUU).append(" ");
+        if (!org.apache.axis.utils.StringUtils.isEmpty(keyword.getReceiveName())) {
+            sql.append("and pb_receivename = '").append(keyword.getReceiveName()).append("' ");
+        }
+        if (!org.apache.axis.utils.StringUtils.isEmpty(keyword.getFactory())) {
+            sql.append("and pd_factory = '").append(keyword.getFactory()).append("' ");
+        }
+        if (!org.apache.axis.utils.StringUtils.isEmpty(keyword.getProdSpec())) {
+            sql.append("and pr_spec = '").append(keyword.getProdSpec()).append("' ");
+        }
+        if (!org.apache.axis.utils.StringUtils.isEmpty(keyword.getProdTitle())) {
+            sql.append("and pr_title = '").append(keyword.getProdTitle()).append("' ");
+        }
+        if (null != keyword.getTaxRate()) {
+            sql.append("and pbi_taxrate = '").append(keyword.getTaxRate()).append("' ");
+        }
+        if (!org.apache.axis.utils.StringUtils.isEmpty(keyword.getSuuorname())) {
+            sql.append("and en_name = '").append(keyword.getSuuorname()).append("' ");
+        }
+        if (fromDate != null) {
+            sql.append("and pb_date >= '").append(fromDate).append("' ");
+        }
+        if (endDate != null) {
+            sql.append("and pb_date < '").append(endDate).append("' ");
+        }
+        if (null != keyword.getVendorUU()) {
+            sql.append("and pb_venduu = ").append(keyword.getVendorUU());
+        }
+        return commonDao.query(sql.toString(), ErpProdIODetail.class);
+    }
+
+    /**
+     * 获取待对账的客户采购验退单信息
+     *
+     * @param keyword 搜索关键词
+     * @param fromDate 开始时间
+     * @param endDate 截止时间
+     * @param enUU 当前企业UU
+     * @return 客户采购验退单信息
+     */
+    private List<ErpProdIODetail> getSaleReturns(ApcheckKeyWord keyword, String fromDate, String endDate, Long enUU) {
+        StringBuffer sql = new StringBuffer("select purc$return.pr_code as inoutno, pr_date as pidate, pr_rate as rate, pr_receivecode as receivecode, " +
+            "pr_receivename as receivename, '客户采购验退单' as piclass, 'purc$returnitem' as sourcetable, pu_code as ordercode, pd_number as orderdetno, " +
+            "pri_number as detno, (-(1) * pri_qty ) as qty, pri_orderprice as orderprice, pr_currency as currency, pri_taxrate as taxrate, " +
+            "pri_whname as whname, purc$returnitem.pr_code as prodcode, purc$returnitem.pr_spec as prodspec, purc$returnitem.pr_title as prodtitle, purc$returnitem.pr_unit as produnit, " +
+            "pri_ycheckqty as ycheckqty, ((-(1) * pri_qty ) - coalesce(pri_ycheckqty, 0)) as thischeckqty, pr_enuu as custuu, pu_useruu custuseruu, pr_venduu as enuu, " +
+            "pri_id as sourceid, pr_sendcode as sendcode, pd_factory as factory, en_name custname from purc$return " +
+            "join purc$returnitem on pr_id = pri_prid " +
+            "left join purc$orderitems on pri_pdid = pd_id " +
+            "left join purc$orders on pu_id = pd_puid " +
+            "left join sec$enterprises on pr_enuu = en_uu " +
+            "where pri_qty > abs(coalesce(pri_ycheckqty, 0)) and pr_enuu = ").append(enUU).append(" ");
+        if (!org.apache.axis.utils.StringUtils.isEmpty(keyword.getReceiveName())) {
+            sql.append("and pr_receivename = '").append(keyword.getReceiveName()).append("' ");
+        }
+        if (!org.apache.axis.utils.StringUtils.isEmpty(keyword.getFactory())) {
+            sql.append("and pd_factory = '").append(keyword.getFactory()).append("' ");
+        }
+        if (!org.apache.axis.utils.StringUtils.isEmpty(keyword.getProdSpec())) {
+            sql.append("and purc$returnitem.pr_spec = '").append(keyword.getProdSpec()).append("' ");
+        }
+        if (!org.apache.axis.utils.StringUtils.isEmpty(keyword.getProdTitle())) {
+            sql.append("and purc$returnitem.pr_title = '").append(keyword.getProdTitle()).append("' ");
+        }
+        if (null != keyword.getTaxRate()) {
+            sql.append("and pri_taxrate = '").append(keyword.getTaxRate()).append("' ");
+        }
+        if (!org.apache.axis.utils.StringUtils.isEmpty(keyword.getSuuorname())) {
+            sql.append("and en_name = '").append(keyword.getSuuorname()).append("' ");
+        }
+        if (fromDate != null) {
+            sql.append("and pr_date >= '").append(fromDate).append("' ");
+        }
+        if (endDate != null) {
+            sql.append("and pr_date < '").append(endDate).append("' ");
+        }
+        if (null != keyword.getVendorUU()) {
+            sql.append("and pr_venduu = ").append(keyword.getVendorUU());
+        }
+        return commonDao.query(sql.toString(), ErpProdIODetail.class);
+    }
+
+    /**
+     * 获取待对账的客户采购验收单信息
+     *
+     * @param keyword 搜索关键词
+     * @param fromDate 开始时间
+     * @param endDate 截止时间
+     * @param enUU 当前企业UU
+     * @return 客户采购验收单信息
+     */
+    private List<ErpProdIODetail> getSaleAccepts(ApcheckKeyWord keyword, String fromDate, String endDate, Long enUU) {
+        StringBuffer sql = new StringBuffer("select pa_code as inoutno, pa_date as pidate, pa_rate as rate, pa_receivecode as receivcode, " +
+            "pa_receivename as receivename, '客户采购验收单' as piclass, 'purc$acceptitem' as sourcetable, pu_code as ordercode, " +
+            "pd_number as orderdetno, pai_number as detno, pai_qty as qty, pai_orderprice as orderprice, pa_currency as currency, " +
+            "pai_taxrate as taxrate,  pai_whname as whname, purc$acceptitem.pr_code as prodcode, purc$acceptitem.pr_spec as prodspec, purc$acceptitem.pr_unit as produnit, " +
+            "purc$acceptitem.pr_title as prodtitle, pai_ycheckqty as ycheckqty, (pai_qty - coalesce(pai_ycheckqty, 0)) as thischeckqty, " +
+            "pa_enuu as custuu, pu_useruu custuseruu, pa_venduu as enuu, pai_id as sourceid, pa_sendcode as sendcode, pd_factory as factory, en_name custname from purc$accept " +
+            "join purc$acceptitem on pai_paid = pa_id " +
+            "left join purc$orderitems on pai_pdid = pd_id " +
+            "left join purc$orders on purc$orders.pu_id = pd_puid " +
+            "left join sec$enterprises on pa_enuu = en_uu " +
+            "where pai_qty > coalesce(pai_ycheckqty, 0) and pa_enuu = ").append(enUU).append(" ");
+        if (!org.apache.axis.utils.StringUtils.isEmpty(keyword.getReceiveName())) {
+            sql.append("and pa_receivename = '").append(keyword.getReceiveName()).append("' ");
+        }
+        if (!org.apache.axis.utils.StringUtils.isEmpty(keyword.getFactory())) {
+            sql.append("and pd_factory = '").append(keyword.getFactory()).append("' ");
+        }
+        if (!org.apache.axis.utils.StringUtils.isEmpty(keyword.getProdSpec())) {
+            sql.append("and purc$acceptitem.pr_spec = '").append(keyword.getProdSpec()).append("' ");
+        }
+        if (!org.apache.axis.utils.StringUtils.isEmpty(keyword.getProdTitle())) {
+            sql.append("and purc$acceptitem.pr_title = '").append(keyword.getProdTitle()).append("' ");
+        }
+        if (null != keyword.getTaxRate()) {
+            sql.append("and pai_taxrate = '").append(keyword.getTaxRate()).append("' ");
+        }
+        if (!org.apache.axis.utils.StringUtils.isEmpty(keyword.getSuuorname())) {
+            sql.append("and en_name = '").append(keyword.getSuuorname()).append("' ");
+        }
+        if (fromDate != null) {
+            sql.append("and pa_date >= '").append(fromDate).append("' ");
+        }
+        if (endDate != null) {
+            sql.append("and pa_date < '").append(endDate).append("' ");
+        }
+        if (null != keyword.getVendorUU()) {
+            sql.append("and pa_venduu = ").append(keyword.getVendorUU());
+        }
+        return commonDao.query(sql.toString(), ErpProdIODetail.class);
+    }
+
+    /**
+     * 获取待对账的货款调账信息
+     *
+     * @param keyword 搜索关键词
+     * @param fromDate 开始时间
+     * @param endDate 截止时间
+     * @param enUU 当前企业UU
+     * @return 货款调账信息
+     */
+    private List<ErpProdIODetail> getAdjustments(ApcheckKeyWord keyword, String fromDate, String endDate, Long enUU) {
+        StringBuffer sql = new StringBuffer("select aa_inoutno inoutno, aa_orderdate pidate, aa_rate rate, aa_receivecode receivecode, " +
+            "aa_receivename receivename, '货款调账' as piclass, 'purc$apbilladjustment' as sourcetable, aa_ordercode ordercode, " +
+            "aa_orderdetno orderdetno, aa_detno detno, aa_prid prid, aa_prodcode prodcode, aa_prodspec prodspec, aa_prodtitle prodtitle, aa_produnit as produnit, " +
+            "aa_qty qty, aa_orderprice orderprice, aa_currency currency, aa_taxrate taxrate, aa_whname whname, aa_ycheckqty ycheckqty, " +
+            "(aa_qty - coalesce(aa_ycheckqty, 0)) as thischeckqty, aa_custuu custuu, aa_custuseruu custuseruu, aa_enuu enuu, aa_id sourceid, aa_sendcode sendcode, " +
+            "aa_factory factory, aa_custname custname from purc$apbilladjustment where coalesce(aa_thischeckqty, 0) <> 0 and aa_custuu = ").append(enUU).append(" ");
+        if (!org.apache.axis.utils.StringUtils.isEmpty(keyword.getFactory())) {
+            sql.append("and aa_factory = '").append(keyword.getFactory()).append("' ");
+        }
+        if (!org.apache.axis.utils.StringUtils.isEmpty(keyword.getProdSpec())) {
+            sql.append("and aa_prodspec = '").append(keyword.getProdSpec()).append("' ");
+        }
+        if (!org.apache.axis.utils.StringUtils.isEmpty(keyword.getProdTitle())) {
+            sql.append("and aa_prodtitle = '").append(keyword.getProdTitle()).append("' ");
+        }
+        if (null != keyword.getTaxRate()) {
+            sql.append("and aa_taxrate = '").append(keyword.getTaxRate()).append("' ");
+        }
+        if (fromDate != null) {
+            sql.append("and aa_date >= '").append(fromDate).append("' ");
+        }
+        if (endDate != null) {
+            sql.append("and aa_date < '").append(endDate).append("' ");
+        }
+        if (null != keyword.getVendorUU()) {
+            sql.append("and aa_enuu = ").append(keyword.getVendorUU());
+        }
+        return commonDao.query(sql.toString(), ErpProdIODetail.class);
+    }
 }

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

@@ -561,7 +561,7 @@ public class PurchaseApCheckServiceImpl implements PurchaseApCheckService {
          */
         pageInfo.filter("vendEnUU", SystemSession.getUser().getEnterprise().getUu());
         pageInfo.filter("apcheck", Constant.YES);
-        pageInfo.expression(PredicateUtils.ne("totalCountString", "", true));
+        pageInfo.expression(PredicateUtils.ne("totalCountString", " ", true));
         if (filter != null) {
             pageInfo.expression(PredicateUtils.in("myEnUU", filter.getDistribute(), true));
         }

+ 6 - 16
src/main/webapp/resources/js/index/app.js

@@ -9661,7 +9661,7 @@ define(['toaster', 'charts', 'ngTable', 'common/services', 'common/directives',
                     _fromDate = new Date(_fromDate).getTime()
                     pageParams.searchFilter.fromDate =  _fromDate
                     pageParams.searchFilter.endDate = _endDate
-                    FaApCheck.customer(BaseService.parseParams(pageParams), function (page) {
+                    FaApCheck.vendor(BaseService.parseParams(pageParams), function (page) {
                         $scope.loading = false;
                         page.content && page.content.forEach(function(list) {
                             var _l = []
@@ -9847,8 +9847,7 @@ define(['toaster', 'charts', 'ngTable', 'common/services', 'common/directives',
         $scope.goToMNs = function(item) {
             $scope.chooseItem = item;
             $scope.showNotCheck = true
-            $scope.suuorname = item.myEnterprise.enName
-            $scope.customerUU = item.myEnterprise.uu
+            $scope.vendorUU = item.vendorEnterprise.uu
             this.searchOrder()
         }
 
@@ -9896,16 +9895,9 @@ define(['toaster', 'charts', 'ngTable', 'common/services', 'common/directives',
                     prodTitle: $scope.prodTitle,
                     prodSpec: $scope.prodSpec,
                     taxRate: $scope.taxRate,
-                    suuorname: $scope.suuorname,
-                    customerUU: $scope.customerUU
+                    vendorUU: $scope.vendorUU
                 }
                 $scope.exportKeywords = encodeURIComponent($scope.searchKeyWord);
-                // $scope.fromDateXls = angular.copy($scope.condition.dateFrom ? $scope.condition.dateFrom.getTime() : null);//保存当前取值的起始日期
-                // $scope.endDateXls = angular.copy($scope.condition.dateTo ? $scope.condition.dateTo.getTime() : null);//保存当前取值的截止日期
-                // if (!$scope.suuorname) {
-                //     toaster.pop('warning', '提示', '请先选择客户');
-                //     document.getElementById('suuorname').focus();//光标默认在客户
-                // } else {
                 $scope.fromDate = $scope.apCheckCondition.dateFrom ? $scope.apCheckCondition.dateFrom.getTime() : null;
                 $scope.endDate = $scope.apCheckCondition.dateTo ? $scope.apCheckCondition.dateTo.getTime() : null;
                 $scope.loading = true;
@@ -9920,8 +9912,7 @@ define(['toaster', 'charts', 'ngTable', 'common/services', 'common/directives',
                         prodSpec: $scope.prodSpec,
                         taxRate: $scope.taxRate,
                         checkDate: $scope.thisMouth,
-                        suuorname: $scope.suuorname,
-                        customerUU: $scope.customerUU,
+                        vendorUU: $scope.vendorUU
                     }
                 } else {
                     _params = {
@@ -9931,11 +9922,10 @@ define(['toaster', 'charts', 'ngTable', 'common/services', 'common/directives',
                         prodSpec: $scope.prodSpec,
                         taxRate: $scope.taxRate,
                         checkDate: $scope.thisMouth,
-                        suuorname: $scope.suuorname,
-                        customerUU: $scope.customerUU,
+                        vendorUU: $scope.vendorUU
                     }
                 }
-                FaApCheck.getAllByKeywords(_params, function (data) {
+                FaApCheck.getAllArCheckByKeywords(_params, function (data) {
                     $scope.checkMain = data;
                     if (data.details.length > 0) {
                         angular.forEach(data.details, function (item) {

+ 10 - 1
src/main/webapp/resources/js/index/services/Fa.js

@@ -26,7 +26,8 @@ define([ 'ngResource'], function() {
 			getAllByKeywords: {
 				url: 'sale/apBillOut/getAllByKeywords',
 				method: 'GET',
-			},getDoneApCheckByKeywords: {
+			},
+            getDoneApCheckByKeywords: {
 				url: 'sale/apBillOut/getDoneByKeywords',
 				method: 'GET',
 				isArray: true
@@ -119,6 +120,10 @@ define([ 'ngResource'], function() {
             customer: {
                 url: 'sale/apCheck/customer',
                 method: 'GET'
+            },
+			vendor: {
+			    url: 'sale/arCheck/vendor',
+                method: 'GET'
             },
 			getAllCustomers: {
 				url: 'sale/apCheck/getAllCustomers',
@@ -129,6 +134,10 @@ define([ 'ngResource'], function() {
 				url: 'sale/apCheck/getAllByKeywords',
 				method: 'GET',
 			},
+            getAllArCheckByKeywords: {
+                url: 'sale/arCheck/getAllByKeywords',
+                method: 'GET',
+            },
 			saveApCheck: {
 				url : 'sale/apCheck/operation/save',
 				method: 'POST'