Przeglądaj źródła

新增对账方法更新

hejq 7 lat temu
rodzic
commit
da37a26815

+ 17 - 59
src/main/java/com/uas/platform/b2b/controller/SaleApCheckController.java

@@ -29,7 +29,6 @@ import com.uas.search.b2b.util.SearchConstants;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.http.HttpStatus;
 import org.springframework.http.ResponseEntity;
-import org.springframework.stereotype.Controller;
 import org.springframework.ui.ModelMap;
 import org.springframework.util.CollectionUtils;
 import org.springframework.util.StringUtils;
@@ -40,13 +39,14 @@ import java.text.SimpleDateFormat;
 import java.util.*;
 
 /**
- * 
  * 应收对账单
  *
+ * @author hejq
+ * @date 2018-07-26 10:48
  */
 
 @SuppressWarnings("deprecation")
-@Controller
+@RestController
 @RequestMapping("/sale/apCheck")
 public class SaleApCheckController {
 
@@ -73,7 +73,6 @@ public class SaleApCheckController {
 	 * @return
 	 */
 	@RequestMapping(value = "/printCount/permission", method = RequestMethod.POST)
-	@ResponseBody
 	public ModelMap printPermission() {
 		return new ModelMap("success", true);
 	}
@@ -85,7 +84,6 @@ public class SaleApCheckController {
 	 * @return
 	 */
 	@RequestMapping(value = "/printCount/{id}", method = RequestMethod.POST)
-	@ResponseBody
 	public ResponseEntity<String> printCount(@PathVariable("id") Long id) {
 		purchaseApCheckService.print(id);
 		logger.log("应付对账单", "打印应付对账单", id.toString());
@@ -97,7 +95,6 @@ public class SaleApCheckController {
 	 * 
 	 */
 	@RequestMapping("/operation/cancel")
-	@ResponseBody
 	public ModelMap cancelApcheck(Long id) {
 		boolean result = purchaseApCheckService.cancelApcheck(id);
 		ModelMap map = new ModelMap();
@@ -105,37 +102,12 @@ public class SaleApCheckController {
 		return map;
 	}
 
-	/**
-	 * 作为卖家,获取应收对账单(全部)
-	 * 
-	 * @return
-	 */
-	@RequestMapping(value = "/getAll", method = RequestMethod.GET)
-	@ResponseBody
-	public List<ErpProdIODetail> getAllApChecks() {
-		List<Long> distributes = null;
-		// 判断当前用户是否被客户分配
-		if (!SystemSession.getUser().isSys()) {
-			List<Vendor> vendors = userService.findChooseVendor(SystemSession.getUser().getUserUU());
-			distributes = new ArrayList<Long>();
-			if (!CollectionUtils.isEmpty(vendors)) {
-				for (Vendor v : vendors) {
-					distributes.add(v.getMyEnUU());
-				}
-			} else {
-				return null;
-			}
-		}
-		return erpProdIODetailService.findAllApChecks(distributes);
-	}
-
 	/**
 	 * 得到所有的供应商信息便于筛选
 	 * 
 	 * @return
 	 */
 	@RequestMapping(value = "/getAllCustomers", method = RequestMethod.GET)
-	@ResponseBody
 	public Set<Object> getAllApChecksCustomers() {
 		Set<Object> set = new HashSet<>();
 		// 判断当前用户是否被客户分配
@@ -151,13 +123,16 @@ public class SaleApCheckController {
 				isSys = true;
 			}
 		}
-		if (!SystemSession.getUser().isSys() && !isSys) { // 不是管理员,被分配客户时
+		// 不是管理员,被分配客户时
+		if (!SystemSession.getUser().isSys() && !isSys) {
 			List<Vendor> vendors = userService.findChooseVendor(SystemSession.getUser().getUserUU());
 			if (!CollectionUtils.isEmpty(vendors)) {
 				for (Vendor v : vendors) {
 					if (v.getApcheck() != null) {
-						if (v.getApcheck().equals(Constant.YES)) {// 只有开通了B2B对账的才筛选
-							set.add(v.getMyEnterprise().getEnName()); // 这里添加客户名称
+						// 只有开通了B2B对账的才筛选
+						if (v.getApcheck().equals(Constant.YES)) {
+							// 这里添加客户名称
+							set.add(v.getMyEnterprise().getEnName());
 						}
 					}
 				}
@@ -168,7 +143,8 @@ public class SaleApCheckController {
 			List<Vendor> vendors = vendorService.findMyCustomers();
 			for (Vendor vendor : vendors) {
 				if (vendor.getApcheck() != null) {
-					if (vendor.getApcheck().equals(Constant.YES)) {// 只有开通了B2B对账的才筛选
+					// 只有开通了B2B对账的才筛选
+					if (vendor.getApcheck().equals(Constant.YES)) {
 						set.add(vendor.getMyEnterprise().getEnName());
 					}
 				}
@@ -180,18 +156,17 @@ public class SaleApCheckController {
 	/**
 	 * 通过日期筛选,筛选出超出默认日期的单据
 	 * 
-	 * @param fromDate
-	 * @param endDate
+	 * @param fromDate 开始时间
+	 * @param endDate 截止时间
 	 * @return
 	 */
 	@RequestMapping(value = "/getAllByKeywords", method = RequestMethod.GET)
-	@ResponseBody
-	public List<ErpProdIODetail> getAllApchecksByDate(Long fromDate, Long endDate, String keyword) {
+	public List<ErpProdIODetail> getAllApchecksByDate(Long fromDate, Long endDate, ApcheckKeyWord searchKeyWord) {
 		List<Long> distributes = null;
 		// 判断当前用户是否被客户分配
 		if (!SystemSession.getUser().isSys()) {
 			List<Vendor> vendors = userService.findChooseVendor(SystemSession.getUser().getUserUU());
-			distributes = new ArrayList<Long>();
+			distributes = new ArrayList<>();
 			if (!CollectionUtils.isEmpty(vendors)) {
 				for (Vendor v : vendors) {
 					distributes.add(v.getMyEnUU());
@@ -200,13 +175,12 @@ public class SaleApCheckController {
 				return null;
 			}
 		}
-		return erpProdIODetailService.findXlsApChecks(distributes, keyword, fromDate, endDate);
+		return erpProdIODetailService.findXlsApChecks(distributes, searchKeyWord, fromDate, endDate);
 	}
 	/**
 	 * 保存生成的应收对账单主记录
 	 */
 	@RequestMapping(value = "/operation/save", method = RequestMethod.POST)
-	@ResponseBody
 	public ModelMap saveApCheck(@RequestBody String json) {
 		ModelMap map = new ModelMap();
 		List<String> alters = new ArrayList<String>();
@@ -240,7 +214,6 @@ public class SaleApCheckController {
 	 * 
 	 */
 	@RequestMapping(value = "/update", method = RequestMethod.POST)
-	@ResponseBody
 	public void updateYCheckQty(@RequestBody String json) {
 		List<HashMap<String, Object>> list = FlexJsonUtils.fromJsonArray(json, HashMap.class);
 		purchaseApCheckService.updateYCheckQty(list);
@@ -253,7 +226,6 @@ public class SaleApCheckController {
 	 * @return
 	 */
 	@RequestMapping(value = "/{id}/info", method = RequestMethod.GET)
-	@ResponseBody
 	public PurchaseApCheck getCreatedPurchaseApCheckById(@PathVariable("id") Long id) {
 		logger.log("应收对账单", "查看单个应收对账单", null, null, id);
 		return purchaseApCheckService.findById(id);
@@ -263,7 +235,6 @@ public class SaleApCheckController {
 	 * 删除最新生成未提交的应收对账单
 	 */
 	@RequestMapping(value = "/operation/deleteApCheck", method = RequestMethod.POST)
-	@ResponseBody
 	public void deleteApCheck(Long id) {
 		purchaseApCheckService.deleteApCheck(id);
 	}
@@ -272,7 +243,6 @@ public class SaleApCheckController {
 	 * 提交生成的应收对账单
 	 */
 	@RequestMapping(value = "/operation/updateStatus", method = RequestMethod.POST)
-	@ResponseBody
 	public ModelMap updateApCheckStatus(Long id) {
 		ModelMap map = new ModelMap();
 		map.put("result", purchaseApCheckService.updateApCheckStatus(id));
@@ -287,7 +257,6 @@ public class SaleApCheckController {
 	 * @return
 	 */
 	@RequestMapping(value = "/info/search", method = RequestMethod.GET)
-	@ResponseBody
 	public SPage<PurchaseApCheck> getPurchaseApChecks(PageParams params, String searchFilter) {
 		logger.log("应收对账单", "作为买家,获取全部应收对账单");
 		SearchFilter filter = JSONObject.parseObject(searchFilter, SearchFilter.class);
@@ -311,7 +280,6 @@ public class SaleApCheckController {
 	 * 作为卖家,获取应收对账单(未对账)
 	 */
 	@RequestMapping(value = "/info/search", params = RequestState.TODO, method = RequestMethod.GET)
-	@ResponseBody
 	public SPage<PurchaseApCheck> getTodoApChecks(PageParams params, String searchFilter) {
 		logger.log("应收对账单", "获取未对账应收对账单");
         SearchFilter filter = JSONObject.parseObject(searchFilter, SearchFilter.class);
@@ -337,7 +305,6 @@ public class SaleApCheckController {
 	 * 作为卖家,获取应收对账单(已确认)
 	 */
 	@RequestMapping(value = "/info/search", params = RequestState.DONE, method = RequestMethod.GET)
-	@ResponseBody
 	public SPage<PurchaseApCheck> getDoneApChecks(PageParams params, String searchFilter) {
 		logger.log("应收对账单", "获取已确认应收对账单");
         SearchFilter filter = JSONObject.parseObject(searchFilter, SearchFilter.class);
@@ -363,7 +330,6 @@ public class SaleApCheckController {
 	 * 作为卖家,获取应收对账单(不同意)
 	 */
 	@RequestMapping(value = "/info/search", params = RequestState.END, method = RequestMethod.GET)
-	@ResponseBody
 	public SPage<PurchaseApCheck> getEndApChecks(PageParams params, String searchFilter) {
 		logger.log("应收对账单", "获取不同意,已作废应收对账单");
         SearchFilter filter = JSONObject.parseObject(searchFilter, SearchFilter.class);
@@ -431,7 +397,6 @@ public class SaleApCheckController {
 	 */
 	@RequestMapping(value = "/xls/list", method = RequestMethod.GET)
 	public ModelAndView exportApCheck(String searchFilter) {
-		SearchFilter filter = FlexJsonUtils.fromJson(searchFilter, SearchFilter.class);
 		PageInfo pageInfo = new PageInfo(1, JxlsExcelView.MAX_SIZE, 0);
 		PageParams params = new PageParams(pageInfo);
 		SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy年MM月dd日");
@@ -473,7 +438,6 @@ public class SaleApCheckController {
 	 */
 	@RequestMapping(value = "/xls/list", params = RequestState.TODO, method = RequestMethod.GET)
 	public ModelAndView exportApCheckTodo(String searchFilter) {
-		SearchFilter filter = FlexJsonUtils.fromJson(searchFilter, SearchFilter.class);
 		PageInfo pageInfo = new PageInfo(1, JxlsExcelView.MAX_SIZE, 0);
         PageParams params = new PageParams(pageInfo);
 		SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy年MM月dd日");
@@ -494,7 +458,6 @@ public class SaleApCheckController {
 	 */
 	@RequestMapping(value = "/xls/list", params = RequestState.END, method = RequestMethod.GET)
 	public ModelAndView exportApChecks(String searchFilter) {
-		SearchFilter filter = FlexJsonUtils.fromJson(searchFilter, SearchFilter.class);
 		PageInfo pageInfo = new PageInfo(1, JxlsExcelView.MAX_SIZE, 0);
         PageParams params = new PageParams(pageInfo);
 		SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy年MM月dd日");
@@ -513,7 +476,6 @@ public class SaleApCheckController {
 	 * @return
 	 */
 	@RequestMapping(value = "/xls/permission", method = RequestMethod.GET)
-	@ResponseBody
 	public ModelMap exportPermission() {
 		return new ModelMap("success", true);
 	}
@@ -527,7 +489,7 @@ public class SaleApCheckController {
 	 * @return
 	 */
 	@RequestMapping(value = "/xls", method = RequestMethod.GET)
-	public ModelAndView export(String keyword, Long fromDate, Long endDate) {
+	public ModelAndView export(ApcheckKeyWord keyword, Long fromDate, Long endDate) {
 		List<Long> distributes = null;
 		// 判断当前用户是否被客户分配
 		if (!SystemSession.getUser().isSys()) {
@@ -555,7 +517,6 @@ public class SaleApCheckController {
 	 * @author wangmh
 	 */
 	@RequestMapping(value = "/setRead", method = RequestMethod.POST)
-	@ResponseBody
 	public void setReadByOrder(@RequestBody Long... sourceId) {
 		purchaseApCheckService.setReadByOrder("purc", sourceId);
 	}
@@ -565,7 +526,6 @@ public class SaleApCheckController {
 	 * @author wangmh
 	 */
 	@RequestMapping(value = "/getUnreadIds", method = RequestMethod.GET)
-	@ResponseBody
 	public ModelMap getUnreadIds() {
 		List<Long> list = purchaseApCheckService.getUnreadIds("purc");
 		return new ModelMap("content", list);
@@ -578,7 +538,6 @@ public class SaleApCheckController {
 	 * @author wangmh
 	 */
 	@RequestMapping(value = "/unread", method = RequestMethod.GET, headers = "Accept=application/json")
-	@ResponseBody
 	@ResponseStatus(value = HttpStatus.OK)
 	public ModelMap getOrderUnreadCount() {
 		final ModelMap modelMap = new ModelMap();
@@ -605,7 +564,6 @@ public class SaleApCheckController {
 	}
 
 	@RequestMapping(value = "/getBilled", method = RequestMethod.GET)
-	@ResponseBody
 	public Double getBilled(Long id) {
 		return purchaseApCheckService.getBilledByItemId(id);
 	}

+ 2 - 1
src/main/java/com/uas/platform/b2b/erp/service/impl/APCheckServiceImpl.java

@@ -34,7 +34,8 @@ public class APCheckServiceImpl implements APCheckService {
 		if (!CollectionUtils.isEmpty(apChecks)) {
 			for (APCheck apCheck : apChecks) {
 				PurchaseApCheck apcheckb2b = purchaseAPCheckDao.findOne(apCheck.getAc_b2bid());
-				if (null != apcheckb2b) {// 客户UU正确,否则不保存
+				// 客户UU正确,否则不保存
+				if (null != apcheckb2b) {
 					apcheckb2b.setCheckStatus(apCheck.getAc_confirmstatus());
 					apcheckb2b.setCustreply(apCheck.getAc_reason());
 					apcheckb2b.setReason(apCheck.getAc_reason());

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

@@ -0,0 +1,90 @@
+package com.uas.platform.b2b.model;
+
+import java.math.BigDecimal;
+
+/**
+ * 新增对账关键词
+ *
+ * @author hejq
+ * @date 2018-07-26 13:59
+ */
+public class ApcheckKeyWord {
+
+    /**
+     * 应付供应商
+     */
+    private String receiveName;
+
+    /**
+     * 客户名称
+     */
+    private String suuorname;
+
+    /**
+     * 送货工厂
+     */
+    private String factory;
+
+    /**
+     * 物料编号
+     */
+    private String prodTitle;
+
+    /**
+     * 物料规格
+     */
+    private String prodSpec;
+
+    /**
+     * 税率
+     */
+    private BigDecimal taxRate;
+
+    public String getReceiveName() {
+        return receiveName;
+    }
+
+    public void setReceiveName(String receiveName) {
+        this.receiveName = receiveName;
+    }
+
+    public String getSuuorname() {
+        return suuorname;
+    }
+
+    public void setSuuorname(String suuorname) {
+        this.suuorname = suuorname;
+    }
+
+    public String getFactory() {
+        return factory;
+    }
+
+    public void setFactory(String factory) {
+        this.factory = factory;
+    }
+
+    public String getProdTitle() {
+        return prodTitle;
+    }
+
+    public void setProdTitle(String prodTitle) {
+        this.prodTitle = prodTitle;
+    }
+
+    public String getProdSpec() {
+        return prodSpec;
+    }
+
+    public void setProdSpec(String prodSpec) {
+        this.prodSpec = prodSpec;
+    }
+
+    public BigDecimal getTaxRate() {
+        return taxRate;
+    }
+
+    public void setTaxRate(BigDecimal taxRate) {
+        this.taxRate = taxRate;
+    }
+}

+ 3 - 0
src/main/java/com/uas/platform/b2b/model/ErpProdIODetail.java

@@ -6,6 +6,9 @@ import java.util.Date;
 
 /**
  * 买家应付(卖家应收)对账单
+ * 
+ * @author hejq
+ * @date 2018-07-26 14:39
  */
 @Entity
 @NamedStoredProcedureQueries({

+ 16 - 9
src/main/java/com/uas/platform/b2b/service/ErpProdIODetailService.java

@@ -1,20 +1,27 @@
 package com.uas.platform.b2b.service;
 
-import java.util.List;
-
+import com.uas.platform.b2b.model.ApcheckKeyWord;
 import com.uas.platform.b2b.model.ErpProdIODetail;
 
+import java.util.List;
+
+/**
+ * 对账单
+ * 
+ * @author hejq
+ * @date 2018-07-26 15:55
+ */
 public interface ErpProdIODetailService {
 	
 	/**
-	 * 查找应收对账单,包括明细
-	 */
-	public List<ErpProdIODetail> findAllApChecks(List<Long> filter);
-	
-	/**
-	 * 带搜索条件xls导出
+	 * 待条件搜索需要对账的数据列表
+     *
+	 * @param filter 客户分配
+	 * @param keyWord 搜索词
+	 * @param fromDate 开始时间
+	 * @param endDate 截止时间
 	 * @return
 	 */
-	public List<ErpProdIODetail> findXlsApChecks(List<Long> filter,String keyword, Long fromDate, Long endDate);
+	List<ErpProdIODetail> findXlsApChecks(List<Long> filter, ApcheckKeyWord keyWord, Long fromDate, Long endDate);
 	
 }

+ 407 - 91
src/main/java/com/uas/platform/b2b/service/impl/ErpProdIODetailServiceImpl.java

@@ -1,113 +1,429 @@
 package com.uas.platform.b2b.service.impl;
 
 import com.uas.platform.b2b.dao.CommonDao;
-import com.uas.platform.b2b.model.ApcheckField;
+import com.uas.platform.b2b.model.ApcheckKeyWord;
 import com.uas.platform.b2b.model.ErpProdIODetail;
 import com.uas.platform.b2b.service.ErpProdIODetailService;
 import com.uas.platform.b2b.support.SystemSession;
 import org.apache.axis.utils.StringUtils;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
-import org.springframework.util.CollectionUtils;
 
-import javax.persistence.EntityManager;
-import javax.persistence.StoredProcedureQuery;
+import java.util.ArrayList;
 import java.util.Date;
 import java.util.List;
 
+/**
+ * 对账单
+ *
+ * @author hejq
+ * @date 2018-07-26 15:54
+ */
 @Service
 public class ErpProdIODetailServiceImpl implements ErpProdIODetailService {
 
 	@Autowired
 	private CommonDao commonDao;
 
-	@Autowired
-    private EntityManager entityManager;
-
-	public List<ErpProdIODetail> findAllApChecks(List<Long> filter) {
-		Long enUu = SystemSession.getUser().getEnterprise().getUu();
-		String sql = "select p.pi_inoutno inOutNo,p.pd_detno detno ,p.pi_class piClass, p.pd_ordercode orderCode, p.pd_orderdetno  orderDetno,"
-				+ " p.pd_prodcode prodCode,p.pr_spec prodSpec, p.pr_title prodTitle,p.pd_qty qty, p.pi_date piDate, p.pd_orderprice  orderPrice, p.pi_currency currency, p.pd_taxrate taxrate,p.whname whname, p.pd_ycheckqty yCheckQty,"
-				+ " p.pd_thischeckqty thisCheckQty, p.custuu custUu, p.custname custName, p.enuu enUu, p.sourceid sourceId, p.pi_sourcetable sourceTable, p.pi_rate rate, p.pi_receivecode receiveCode,"
-				+ " p.pi_receivename receiveName, p.pd_factory factory, p.sendcode sendcode from erp$prodiodetail p where enuu = ?";
-		// 查询近六个月的数据
-		sql = sql + " and p.pi_date between adddate(now(), interval -6 month) and now() ";
-		Object[] args = new Object[] { enUu };
-		if (!CollectionUtils.isEmpty(filter)) {
-			String[] str = new String[filter.size()];
-			Long[] lon = new Long[filter.size() + 1];
-			String s = "";
-			for (int i = 0; i < filter.size(); i++) {
-				if (i != filter.size() - 1) {
-					str[i] = "?,";
-				} else {
-					str[i] = "?";
-				}
-				lon[i + 1] = filter.get(i);
-				s = s + str[i];
-			}
-			sql = sql + " and custUu in (" + s + ")";
-			lon[0] = enUu;
-			args = lon;
-		}
-		sql = sql + " order by pi_date desc";
-		List<ErpProdIODetail> erpProdIODetails = commonDao.query(sql, args, ErpProdIODetail.class);
-		return erpProdIODetails;
-	}
-
 	@Override
-	public List<ErpProdIODetail> findXlsApChecks(List<Long> filter, String keyword, Long fromDate, Long endDate) {
-		Long enUu = SystemSession.getUser().getEnterprise().getUu();
-		String AND = " and ";
-		String equal = " = ";
-		String quotation = "'";
-        StringBuffer con = new StringBuffer(AND).append(ApcheckField._venduu).append(equal).append(enUu);
-        StringBuffer prod = new StringBuffer(" where 1=1 ");
-		if (!StringUtils.isEmpty(keyword)) {
-			// 物料名称和规格存在特殊符号,用|做分隔符
-			String[] strs = keyword.split("\\|");
-			if (strs.length >= 1) {
-                prod.append(AND).append(ApcheckField.en_name).append(equal).append(quotation).append(strs[0]).append(quotation);
-			}
-			if (strs.length >= 2) {
-				con.append(AND).append(ApcheckField._receivename).append(equal).append(quotation).append(strs[1]).append(quotation);
-			}
-			if (strs.length >= 3) {
-                con.append(AND).append(ApcheckField._factory).append(equal).append(quotation).append(strs[2]).append(quotation);
-			}
-			if (strs.length >= 4) {
-			    prod.append(AND).append(ApcheckField.pr_title).append(equal).append(quotation).append(strs[3]).append(quotation);
-			}
-			if (strs.length >= 5) {
-                prod.append(AND).append(ApcheckField.pr_spec).append(equal).append(quotation).append(strs[4]).append(quotation);
-			}
-		}
-		if (fromDate != null) {
-            con.append(AND).append(" DAYFORMDATE(_date) >= '").append(new java.sql.Date(new Date(fromDate).getTime())).append("' ");
-		}
-		if (endDate != null) {
-            con.append(AND).append(" DAYFORMDATE(_date) <= '").append(new java.sql.Date(new Date(endDate).getTime())).append("' ");
-		}
-		if (!CollectionUtils.isEmpty(filter)) {
-			String[] str = new String[filter.size()];
-			Long[] lon = new Long[filter.size() + 1];
-			String s = "";
-			for (int i = 0; i < filter.size(); i++) {
-				if (i != filter.size() - 1) {
-					str[i] = filter.get(i).toString() + ",";
-				} else {
-					str[i] = filter.get(i).toString();
-				}
-				lon[i + 1] = filter.get(i);
-				s = s + str[i];
-			}
-            con.append(AND).append(ApcheckField._enuu).append(" in (").append(s).append(") ");
-			lon[0] = enUu;
-		}
-        StoredProcedureQuery storedProcedureQuery = this.entityManager.createNamedStoredProcedureQuery("findAllApChecks");
-        storedProcedureQuery.setParameter("con", con.toString());
-        storedProcedureQuery.setParameter("prod", prod.append(" ").toString());
-        storedProcedureQuery.execute();
-        return storedProcedureQuery.getResultList();
+	public List<ErpProdIODetail> findXlsApChecks(List<Long> filter, ApcheckKeyWord keyword, Long fromDate, Long endDate) {
+		Long enUU = SystemSession.getUser().getEnterprise().getUu();
+        StringBuffer distributes = new StringBuffer();
+        List<ErpProdIODetail> details = new ArrayList<>();
+        if (null != filter) {
+            filter.forEach(uu -> {
+                if (distributes.length() > 0) {
+                    distributes.append(",");
+                }
+                distributes.append(uu);
+            });
+        }
+		// 货款调账
+		List<ErpProdIODetail> adjustments = getAdjustments(distributes, keyword, fromDate, endDate, enUU);
+		// 采购验收单
+        List<ErpProdIODetail> saleAccepts = getSaleAccepts(distributes, keyword, fromDate, endDate, enUU);
+        // 采购验退单
+        List<ErpProdIODetail> saleReturns = getSaleReturns(distributes, keyword, fromDate, endDate, enUU);
+        // 客户不良品入库单
+        List<ErpProdIODetail> badIns = getBadIns(distributes, keyword, fromDate, endDate, enUU);
+        // 客户不良品出库单
+        List<ErpProdIODetail> badOuts = getBadOuts(distributes, keyword, fromDate, endDate, enUU);
+        // 委外验收单
+        List<ErpProdIODetail> makeAccepts = getMakeAccepts(distributes, keyword, fromDate, endDate, enUU);
+        // 委外验退单
+        List<ErpProdIODetail> makeReturns = getMakeReturns(distributes, keyword, fromDate, endDate, enUU);
+        details.addAll(adjustments);
+        details.addAll(saleAccepts);
+        details.addAll(saleReturns);
+        details.addAll(badIns);
+        details.addAll(badOuts);
+        details.addAll(makeAccepts);
+        details.addAll(makeReturns);
+		return details;
 	}
+
+    /**
+     * 获取待对账的委外验退单
+     *
+     * @param distributes 客户分配
+     * @param keyword 搜索关键词
+     * @param fromDate 开始时间
+     * @param endDate 截止时间
+     * @param enUU 当前企业UU
+     * @return
+     */
+    private List<ErpProdIODetail> getMakeReturns(StringBuffer distributes, ApcheckKeyWord keyword, Long fromDate, Long 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, pr_code as prodcode, pr_spec as prodspec, pr_title as prodtitle, " +
+                "((-(1) *  mri_qty ) - coalesce(mri_ycheckqty, 0)) as thischeckqty, mr_enuu as custuu, 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_venduu = ").append(enUU).append(" ");
+        if (!StringUtils.isEmpty(keyword.getReceiveName())) {
+            sql.append("and mr_receivename = '").append(keyword.getReceiveName()).append("' ");
+        }
+        if (!StringUtils.isEmpty(keyword.getFactory())) {
+            sql.append("and ma_factory = '").append(keyword.getFactory()).append("' ");
+        }
+        if (!StringUtils.isEmpty(keyword.getProdSpec())) {
+            sql.append("and make$orders.pr_spec = '").append(keyword.getProdSpec()).append("' ");
+        }
+        if (!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 (!StringUtils.isEmpty(keyword.getSuuorname())) {
+            sql.append("and en_name = '").append(keyword.getSuuorname()).append("' ");
+        }
+        if (distributes.length() > 0) {
+            sql.append("and mr_enuu in (").append(distributes).append(") ");
+        }
+        if (fromDate != null) {
+            sql.append("and DAYFORMDATE(mr_date) >= '").append(new java.sql.Date(new Date(fromDate).getTime())).append("' ");
+        }
+        if (endDate != null) {
+            sql.append("and DAYFORMDATE(mr_date) <= '").append(new java.sql.Date(new Date(endDate).getTime())).append("' ");
+        }
+        List<ErpProdIODetail> makeReturns = commonDao.query(sql.toString(), ErpProdIODetail.class);
+        return makeReturns;
+    }
+
+    /**
+     * 获取待对账的委外验收单
+     *
+     * @param distributes 客户分配
+     * @param keyword 搜索关键词
+     * @param fromDate 开始时间
+     * @param endDate 截止时间
+     * @param enUU 当前企业UU
+     * @return
+     */
+    private List<ErpProdIODetail> getMakeAccepts(StringBuffer distributes, ApcheckKeyWord keyword, Long fromDate, Long 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, " +
+                "(mai_qty - coalesce(mai_ycheckqty, 0)) as thischeckqty, make$accept.ma_enuu as custuu, 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_venduu = ").append(enUU).append(" ");
+        if (!StringUtils.isEmpty(keyword.getReceiveName())) {
+            sql.append("and ma_receivename = '").append(keyword.getReceiveName()).append("' ");
+        }
+        if (!StringUtils.isEmpty(keyword.getFactory())) {
+            sql.append("and ma_factory = '").append(keyword.getFactory()).append("' ");
+        }
+        if (!StringUtils.isEmpty(keyword.getProdSpec())) {
+            sql.append("and make$orders.pr_spec = '").append(keyword.getProdSpec()).append("' ");
+        }
+        if (!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 (!StringUtils.isEmpty(keyword.getSuuorname())) {
+            sql.append("and en_name = '").append(keyword.getSuuorname()).append("' ");
+        }
+        if (distributes.length() > 0) {
+            sql.append("and make$accept.ma_enuu in (").append(distributes).append(") ");
+        }
+        if (fromDate != null) {
+            sql.append("and DAYFORMDATE(make$accept.ma_date) >= '").append(new java.sql.Date(new Date(fromDate).getTime())).append("' ");
+        }
+        if (endDate != null) {
+            sql.append("and DAYFORMDATE(make$accept.ma_date) <= '").append(new java.sql.Date(new Date(endDate).getTime())).append("' ");
+        }
+        List<ErpProdIODetail> makeAccepts = commonDao.query(sql.toString(), ErpProdIODetail.class);
+        return makeAccepts;
+    }
+
+    /**
+     * 获取待对账的客户不良品出库单
+     *
+     * @param distributes 客户分配
+     * @param keyword 搜索关键词
+     * @param fromDate 开始时间
+     * @param endDate 截止时间
+     * @param enUU 当前企业UU
+     * @return
+     */
+    private List<ErpProdIODetail> getBadOuts(StringBuffer distributes, ApcheckKeyWord keyword, Long fromDate, Long 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, " +
+                "((-(1) * poi_qty ) - coalesce( poi_ycheckqty, 0)) as thischeckqty, po_enuu as custuu, 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_venduu = ").append(enUU).append(" ");
+        if (!StringUtils.isEmpty(keyword.getReceiveName())) {
+            sql.append("and po_receivename = '").append(keyword.getReceiveName()).append("' ");
+        }
+        if (!StringUtils.isEmpty(keyword.getFactory())) {
+            sql.append("and pd_factory = '").append(keyword.getFactory()).append("' ");
+        }
+        if (!StringUtils.isEmpty(keyword.getProdSpec())) {
+            sql.append("and pr_spec = '").append(keyword.getProdSpec()).append("' ");
+        }
+        if (!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 (!StringUtils.isEmpty(keyword.getSuuorname())) {
+            sql.append("and en_name = '").append(keyword.getSuuorname()).append("' ");
+        }
+        if (distributes.length() > 0) {
+            sql.append("and po_enuu in (").append(distributes).append(") ");
+        }
+        if (fromDate != null) {
+            sql.append("and DAYFORMDATE(po_date) >= '").append(new java.sql.Date(new Date(fromDate).getTime())).append("' ");
+        }
+        if (endDate != null) {
+            sql.append("and DAYFORMDATE(po_date) <= '").append(new java.sql.Date(new Date(endDate).getTime())).append("' ");
+        }
+        List<ErpProdIODetail> badOuts = commonDao.query(sql.toString(), ErpProdIODetail.class);
+        return badOuts;
+    }
+
+    /**
+     * 获取待对账的客户不良品入库单
+     *
+     * @param distributes 客户分配
+     * @param keyword 搜索关键词
+     * @param fromDate 开始时间
+     * @param endDate 截止时间
+     * @param enUU 当前企业UU
+     * @return
+     */
+    private List<ErpProdIODetail> getBadIns(StringBuffer distributes, ApcheckKeyWord keyword, Long fromDate, Long 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, " +
+                "(pbi_qty - coalesce(pbi_ycheckqty, 0)) as thischeckqty, pb_enuu as custuu, 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_venduu = ").append(enUU).append(" ");
+        if (!StringUtils.isEmpty(keyword.getReceiveName())) {
+            sql.append("and pb_receivename = '").append(keyword.getReceiveName()).append("' ");
+        }
+        if (!StringUtils.isEmpty(keyword.getFactory())) {
+            sql.append("and pd_factory = '").append(keyword.getFactory()).append("' ");
+        }
+        if (!StringUtils.isEmpty(keyword.getProdSpec())) {
+            sql.append("and pr_spec = '").append(keyword.getProdSpec()).append("' ");
+        }
+        if (!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 (!StringUtils.isEmpty(keyword.getSuuorname())) {
+            sql.append("and en_name = '").append(keyword.getSuuorname()).append("' ");
+        }
+        if (distributes.length() > 0) {
+            sql.append("and pb_enuu in (").append(distributes).append(") ");
+        }
+        if (fromDate != null) {
+            sql.append("and DAYFORMDATE(pb_date) >= '").append(new java.sql.Date(new Date(fromDate).getTime())).append("' ");
+        }
+        if (endDate != null) {
+            sql.append("and DAYFORMDATE(pb_date) <= '").append(new java.sql.Date(new Date(endDate).getTime())).append("' ");
+        }
+        List<ErpProdIODetail> badIns = commonDao.query(sql.toString(), ErpProdIODetail.class);
+        return badIns;
+    }
+
+    /**
+     * 获取待对账的客户采购验退单信息
+     *
+     * @param distributes 客户分配
+     * @param keyword 搜索关键词
+     * @param fromDate 开始时间
+     * @param endDate 截止时间
+     * @param enUU 当前企业UU
+     * @return
+     */
+    private List<ErpProdIODetail> getSaleReturns(StringBuffer distributes, ApcheckKeyWord keyword, Long fromDate, Long 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 pi_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, " +
+                "pri_ycheckqty as ycheckqty, ((-(1) * pri_qty ) - coalesce(pri_ycheckqty, 0)) as thischeckqty, pr_enuu as custuu, 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_venduu = ").append(enUU).append(" ");
+        if (!StringUtils.isEmpty(keyword.getReceiveName())) {
+            sql.append("and pr_receivename = '").append(keyword.getReceiveName()).append("' ");
+        }
+        if (!StringUtils.isEmpty(keyword.getFactory())) {
+            sql.append("and pd_factory = '").append(keyword.getFactory()).append("' ");
+        }
+        if (!StringUtils.isEmpty(keyword.getProdSpec())) {
+            sql.append("and purc$returnitem.pr_spec = '").append(keyword.getProdSpec()).append("' ");
+        }
+        if (!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 (!StringUtils.isEmpty(keyword.getSuuorname())) {
+            sql.append("and en_name = '").append(keyword.getSuuorname()).append("' ");
+        }
+        if (distributes.length() > 0) {
+            sql.append("and pr_enuu in (").append(distributes).append(") ");
+        }
+        if (fromDate != null) {
+            sql.append("and DAYFORMDATE(pr_date) >= '").append(new java.sql.Date(new Date(fromDate).getTime())).append("' ");
+        }
+        if (endDate != null) {
+            sql.append("and DAYFORMDATE(pr_date) <= '").append(new java.sql.Date(new Date(endDate).getTime())).append("' ");
+        }
+        List<ErpProdIODetail> saleReturns = commonDao.query(sql.toString(), ErpProdIODetail.class);
+        return saleReturns;
+    }
+
+    /**
+     * 获取待对账的客户采购验收单信息
+     *
+     * @param distributes 客户分配
+     * @param keyword 搜索关键词
+     * @param fromDate 开始时间
+     * @param endDate 截止时间
+     * @param enUU 当前企业UU
+     * @return
+     */
+    private List<ErpProdIODetail> getSaleAccepts(StringBuffer distributes, ApcheckKeyWord keyword, Long fromDate, Long 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_title as prodtitle, pai_ycheckqty as ycheckqty, (pai_qty - coalesce(pai_ycheckqty, 0)) as thischeckqty, " +
+                "pa_enuu as custuu, 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_venduu = ").append(enUU).append(" ");
+        if (!StringUtils.isEmpty(keyword.getReceiveName())) {
+            sql.append("and pa_receivename = '").append(keyword.getReceiveName()).append("' ");
+        }
+        if (!StringUtils.isEmpty(keyword.getFactory())) {
+            sql.append("and pd_factory = '").append(keyword.getFactory()).append("' ");
+        }
+        if (!StringUtils.isEmpty(keyword.getProdSpec())) {
+            sql.append("and purc$acceptitem.pr_spec = '").append(keyword.getProdSpec()).append("' ");
+        }
+        if (!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 (!StringUtils.isEmpty(keyword.getSuuorname())) {
+            sql.append("and en_name = '").append(keyword.getSuuorname()).append("' ");
+        }
+        if (distributes.length() > 0) {
+            sql.append("and pa_enuu in (").append(distributes).append(") ");
+        }
+        if (fromDate != null) {
+            sql.append("and DAYFORMDATE(pa_date) >= '").append(new java.sql.Date(new Date(fromDate).getTime())).append("' ");
+        }
+        if (endDate != null) {
+            sql.append("and DAYFORMDATE(pa_date) <= '").append(new java.sql.Date(new Date(endDate).getTime())).append("' ");
+        }
+        List<ErpProdIODetail> saleAccepts = commonDao.query(sql.toString(), ErpProdIODetail.class);
+        return saleAccepts;
+    }
+
+    /**
+     * 获取待对账的货款调账信息
+     *
+     * @param distributes 客户分配
+     * @param keyword 搜索关键词
+     * @param fromDate 开始时间
+     * @param endDate 截止时间
+     * @param enUU 当前企业UU
+     * @return
+     */
+    private List<ErpProdIODetail> getAdjustments(StringBuffer distributes, ApcheckKeyWord keyword, Long fromDate, Long 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_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_enuu enuu, aa_id sourceid, aa_sendcode sendcode, " +
+                "aa_factory factory, aa_custname custname from purc$apbilladjustment where aa_enuu = ").append(enUU).append(" ");
+        if (!StringUtils.isEmpty(keyword.getReceiveName())) {
+            sql.append("and aa_receivename = '").append(keyword.getReceiveName()).append("' ");
+        }
+        if (!StringUtils.isEmpty(keyword.getFactory())) {
+            sql.append("and aa_factory = '").append(keyword.getFactory()).append("' ");
+        }
+        if (!StringUtils.isEmpty(keyword.getProdSpec())) {
+            sql.append("and aa_prodspec = '").append(keyword.getProdSpec()).append("' ");
+        }
+        if (!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 (!StringUtils.isEmpty(keyword.getSuuorname())) {
+            sql.append("and aa_custname = '").append(keyword.getSuuorname()).append("' ");
+        }
+        if (distributes.length() > 0) {
+            sql.append("and aa_custuu in (").append(distributes).append(") ");
+        }
+        if (fromDate != null) {
+            sql.append("and DAYFORMDATE(aa_date) >= '").append(new java.sql.Date(new Date(fromDate).getTime())).append("' ");
+        }
+        if (endDate != null) {
+            sql.append("and DAYFORMDATE(aa_date) <= '").append(new java.sql.Date(new Date(endDate).getTime())).append("' ");
+        }
+        List<ErpProdIODetail> adjustments = commonDao.query(sql.toString(), ErpProdIODetail.class);
+        return adjustments;
+    }
 }

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

@@ -24,6 +24,7 @@ import javax.persistence.criteria.CriteriaBuilder;
 import javax.persistence.criteria.CriteriaQuery;
 import javax.persistence.criteria.Predicate;
 import javax.persistence.criteria.Root;
+import java.sql.SQLException;
 import java.text.SimpleDateFormat;
 import java.util.*;
 
@@ -260,7 +261,7 @@ public class PurchaseApCheckServiceImpl implements PurchaseApCheckService {
 	}
 
 	@Override
-	@Transactional
+	@Transactional(rollbackFor = SQLException.class)
 	public PurchaseApCheck save(PurchaseApCheck purchaseApCheck) {
 		purchaseApCheck.setRecordDate(new Date());
 		Date d = new Date();
@@ -341,6 +342,7 @@ public class PurchaseApCheckServiceImpl implements PurchaseApCheckService {
             }
 		}
 		return purchaseApCheckDao.findAll(new Specification<PurchaseApCheck>() {
+			@Override
 			public Predicate toPredicate(Root<PurchaseApCheck> root, CriteriaQuery<?> query, CriteriaBuilder builder) {
 				query.where(pageInfo.getPredicates(root, query, builder));
 				return null;
@@ -348,57 +350,72 @@ public class PurchaseApCheckServiceImpl implements PurchaseApCheckService {
 		}, pageInfo);
 	}
 
+	@Override
 	public Page<PurchaseApCheckTodo> findTodoByPageInfo(final PageInfo pageInfo, final String keyword,
-			SearchFilter searchFilter) {
+														SearchFilter searchFilter) {
 		if (searchFilter != null) {
-			if (!CollectionUtils.isEmpty(searchFilter.getDistribute()))
+			if (!CollectionUtils.isEmpty(searchFilter.getDistribute())) {
 				pageInfo.expression(PredicateUtils.in("vendUU", searchFilter.getDistribute(), false));
-			if (searchFilter.getFromDate() != null)
+			}
+			if (searchFilter.getFromDate() != null) {
 				pageInfo.expression(PredicateUtils.gte("recordDate", new Date(searchFilter.getFromDate()), false));
-			if (searchFilter.getEndDate() != null)
+			}
+			if (searchFilter.getEndDate() != null) {
 				pageInfo.expression(PredicateUtils.lte("recordDate", new Date(searchFilter.getEndDate()), false));
+			}
 		}
 		return purchaseApCheckTodoDao.findAll(new Specification<PurchaseApCheckTodo>() {
+			@Override
 			public Predicate toPredicate(Root<PurchaseApCheckTodo> root, CriteriaQuery<?> query,
-					CriteriaBuilder builder) {
+										 CriteriaBuilder builder) {
 				query.where(pageInfo.getPredicates(root, query, builder));
 				return null;
 			}
 		}, pageInfo);
 	}
 
+	@Override
 	public Page<PurchaseApCheckDone> findDoneByPageInfo(final PageInfo pageInfo, final String keyword,
-			SearchFilter searchFilter) {
+														SearchFilter searchFilter) {
 		if (searchFilter != null) {
-			if (!CollectionUtils.isEmpty(searchFilter.getDistribute()))
+			if (!CollectionUtils.isEmpty(searchFilter.getDistribute())) {
 				pageInfo.expression(PredicateUtils.in("vendUU", searchFilter.getDistribute(), false));
-			if (searchFilter.getFromDate() != null)
+			}
+			if (searchFilter.getFromDate() != null) {
 				pageInfo.expression(PredicateUtils.gte("recordDate", new Date(searchFilter.getFromDate()), false));
-			if (searchFilter.getEndDate() != null)
+			}
+			if (searchFilter.getEndDate() != null) {
 				pageInfo.expression(PredicateUtils.lte("recordDate", new Date(searchFilter.getEndDate()), false));
+			}
 		}
 		return purchaseApCheckDoneDao.findAll(new Specification<PurchaseApCheckDone>() {
+			@Override
 			public Predicate toPredicate(Root<PurchaseApCheckDone> root, CriteriaQuery<?> query,
-					CriteriaBuilder builder) {
+										 CriteriaBuilder builder) {
 				query.where(pageInfo.getPredicates(root, query, builder));
 				return null;
 			}
 		}, pageInfo);
 	}
 
+	@Override
 	public Page<PurchaseApCheckEnd> findEndByPageInfo(final PageInfo pageInfo, final String keyword,
-			SearchFilter searchFilter) {
+													  SearchFilter searchFilter) {
 		if (searchFilter != null) {
-			if (!CollectionUtils.isEmpty(searchFilter.getDistribute()))
-				pageInfo.expression(PredicateUtils.in("vendUU", searchFilter.getDistribute(), false));
-			if (searchFilter.getFromDate() != null)
-				pageInfo.expression(PredicateUtils.gte("recordDate", new Date(searchFilter.getFromDate()), false));
-			if (searchFilter.getEndDate() != null)
-				pageInfo.expression(PredicateUtils.lte("recordDate", new Date(searchFilter.getEndDate()), false));
+			if (!CollectionUtils.isEmpty(searchFilter.getDistribute())) {
+                pageInfo.expression(PredicateUtils.in("vendUU", searchFilter.getDistribute(), false));
+            }
+			if (searchFilter.getFromDate() != null) {
+                pageInfo.expression(PredicateUtils.gte("recordDate", new Date(searchFilter.getFromDate()), false));
+            }
+			if (searchFilter.getEndDate() != null) {
+                pageInfo.expression(PredicateUtils.lte("recordDate", new Date(searchFilter.getEndDate()), false));
+            }
 		}
 		return purchaseApCheckEndDao.findAll(new Specification<PurchaseApCheckEnd>() {
-			public Predicate toPredicate(Root<PurchaseApCheckEnd> root, CriteriaQuery<?> query,
-					CriteriaBuilder builder) {
+			@Override
+            public Predicate toPredicate(Root<PurchaseApCheckEnd> root, CriteriaQuery<?> query,
+                                         CriteriaBuilder builder) {
 				query.where(pageInfo.getPredicates(root, query, builder));
 				return null;
 			}
@@ -489,7 +506,7 @@ public class PurchaseApCheckServiceImpl implements PurchaseApCheckService {
 	}
 
 	@Override
-	@Transactional
+	@Transactional(rollbackFor = SQLException.class)
 	public void setReadByOrder(String category, Long[] sourceId) {
 		userOrderDao.setReadStatus(SystemSession.getUser().getEnterprise().getUu(), SystemSession.getUser().getUserUU(), "purc$apcheck", category, (short) Status.READ.value(), sourceId);
 	}

+ 38 - 18
src/main/webapp/resources/js/index/app.js

@@ -10638,14 +10638,9 @@ define(['toaster', 'charts', 'ngTable', 'common/services', 'common/directives',
         }
 
         // 点击筛选根据条件选择数据
-        $scope.suuorname = '';
         // 默认本月
         $scope.sdateTo = new Date();
         $scope.sdateFrom = new Date($scope.sdateTo.getFullYear(), $scope.sdateTo.getMonth(), 1);
-        $scope.vuuorname = '';
-        $scope.factory = '';
-        $scope.prodtitle = '';
-        $scope.prodspec = '';
         $scope.condition.uuorname = '';
         $scope.condition.dateFrom = '';
         $scope.condition.dateTo = '';
@@ -10674,12 +10669,15 @@ define(['toaster', 'charts', 'ngTable', 'common/services', 'common/directives',
 
                 $scope.fromDate = $scope.condition.dateFrom ? $scope.condition.dateFrom.getTime() : null;
                 $scope.endDate = $scope.condition.dateTo ? $scope.condition.dateTo.getTime() : null;
-                $scope.keywordXls = angular.copy(($scope.condition.uuorname == null ? "" : $scope.condition.uuorname)
-                    + "|" + ($scope.condition.venduuorname == null ? "" : $scope.condition.venduuorname)
-                    + "|" + ($scope.condition.factory == null ? "" : $scope.condition.factory)
-                    + "|" + ($scope.condition.prodtitle == null ? "" : $scope.condition.prodtitle)
-                    + "|" + ($scope.condition.prodspec == null ? "" : $scope.condition.prodspec));//保存当前取值的关键词
-                $scope.exportKeywordXls = encodeURIComponent($scope.keywordXls);
+                $scope.searchKeyWord = {
+                    receiveName: $scope.receiveName,
+                    factory: $scope.factory,
+                    prodTitle: $scope.prodTitle,
+                    prodSpec: $scope.prodSpec,
+                    taxRate: $scope.taxRate,
+                    suuorname: $scope.suuorname
+                }
+                $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) {
@@ -10690,7 +10688,12 @@ define(['toaster', 'charts', 'ngTable', 'common/services', 'common/directives',
                     FaApCheck.getAllByKeywords({
                         fromDate: $scope.fromDate,
                         endDate: $scope.endDate,
-                        keyword: $scope.keywordXls
+                        receiveName: $scope.receiveName,
+                        factory: $scope.factory,
+                        prodTitle: $scope.prodTitle,
+                        prodSpec: $scope.prodSpec,
+                        taxRate: $scope.taxRate,
+                        suuorname: $scope.suuorname
                     }, function (data) {
                         if (data.length > 0) {
                             angular.forEach(data, function (item) {
@@ -10712,6 +10715,29 @@ define(['toaster', 'charts', 'ngTable', 'common/services', 'common/directives',
 
         }
 
+        $scope.exportApcheckList = function() {
+            var url = 'sale/apCheck/xls?fromDate=' + $scope.fromDate + '&endDate' + $scope.endDate;
+            if (angular.isDefined($scope.receiveName)) {
+                url = url + '&receiveName=' + $scope.receiveName;
+            }
+            if (angular.isDefined($scope.factory)) {
+                url = url + '&factory=' + $scope.factory;
+            }
+            if (angular.isDefined($scope.prodTitle)) {
+                url = url + '&prodTitle=' + $scope.prodTitle;
+            }
+            if (angular.isDefined($scope.prodSpec)) {
+                url = url + '&prodSpec=' + $scope.prodSpec;
+            }
+            if (angular.isDefined($scope.suuorname)) {
+                url = url + '&suuorname=' + $scope.suuorname;
+            }
+            if (angular.isDefined($scope.taxRate)) {
+                url = url + '&receiveName=' + $scope.taxRate;
+            }
+            window.location.href = url;
+        }
+
         /**
          * 点击勾选框,选中要转应收对账单的订单
          * */
@@ -10724,13 +10750,8 @@ define(['toaster', 'charts', 'ngTable', 'common/services', 'common/directives',
         $scope.checkAll = function () {
             $scope.totalMoney = 0;
             $scope.filteredData = $filter('filter')($scope.data, $scope.condition.prodtitle || $scope.condition.uuorname || $scope.condition.venduuorname || $scope.condition.prodspec || $scope.condition.factory);
-            var uuorname = $scope.suuorname;
-            var venduuorname = $scope.venduuorname;
             var dateFrom = $scope.condition.dateFrom;
             var dateTo = $scope.condition.dateTo;
-            var prodTitle = $scope.condition.prodtitle;
-            var prodSpec = $scope.condition.prodspec;
-            var factory = $scope.condition.factory;
             angular.forEach($scope.filteredData, function (item) {
                 if ((item.pidate >= dateFrom || dateFrom == '') && (item.pidate < dateTo || dateTo == '')) {
                     item.$selected = $scope.checkboxes.checked;
@@ -10740,7 +10761,6 @@ define(['toaster', 'charts', 'ngTable', 'common/services', 'common/directives',
         };
 
         //获取已选单据总金额
-        var total = true;
         $scope.getTotalMoney = function () {
             $scope.totalMoney = 0;
             angular.forEach($scope.data, function (check) {

+ 15 - 3
src/main/webapp/resources/tpl/index/fa/apCheckList.html

@@ -142,7 +142,7 @@
 					<div class="btn-group btn-group-sm">
 						<a class="btn btn-default" ng-click="searchOrder()" title="筛选"><i class="fa fa-search fa-fw btn-icon-left"></i>筛选</a>
 						<a class="btn btn-default" ng-click="createApCheck(check.$selected)" ng-disabled="!data || data.length==0"><i class="fa fa-check-circle-o fa-fw btn-icon-left"></i>对账</a>
-						<a class="btn btn-default" href="sale/apCheck/xls?keyword={{exportKeywordXls}}&fromDate={{fromDateXls}}&endDate={{endDateXls}}" title="导出Excel" ng-disabled="!data || data.length==0"><i class="fa fa-file-text fa-fw btn-icon-left"></i>导出</a>
+						<a class="btn btn-default" ng-click="exportApcheckList()" title="导出Excel" ng-disabled="!data || data.length==0"><i class="fa fa-file-text fa-fw btn-icon-left"></i>导出</a>
 					</div>
 				</div>
 			</div>
@@ -152,7 +152,7 @@
 				<div class="col-sm-4">
 					<div class="form-group form-group-sm has-feedback">
 						<input type="search" class="form-control input-sm"
-							ng-model="vuuorname" placeholder="可用应付供应商名称筛选" /><span
+							ng-model="receiveName" placeholder="可用应付供应商名称筛选" /><span
 							class="form-control-feedback text-simple"><i
 							class="fa fa-search"></i></span>
 					</div>
@@ -188,6 +188,18 @@
 					</div>
 				</div>
 			</div>
+			<div class="form-group form-group-sm form-group-inline"
+				 ng-show="condition.$open">
+				<label class="col-sm-2 control-label">税率:</label>
+				<div class="col-sm-4">
+					<div class="form-group form-group-sm has-feedback">
+						<input type="search" class="form-control input-sm"
+							   ng-model="taxRate" placeholder="请输入税率" /><span
+							class="form-control-feedback text-simple"><i
+							class="fa fa-search"></i></span>
+					</div>
+				</div>
+			</div>
 		</form>
 		<!-- 标签scroll-table用于表头滚动 -->
 		<div class="table-wrap" id="order-detail-list" scroll-table>
@@ -221,7 +233,7 @@
 			</div>
 			<div class="table-body-wrap">
 				<table class="table table-bordered">
-					<tr ng-repeat="check in data | filter:condition.factory | filter:condition.prodspec | filter:condition.prodtitle | filter:condition.uuorname | filter:condition.venduuorname | orderBy: 'pidate': reverse=true"
+					<tr ng-repeat="check in data"
 						ng-if="((condition.dateFrom == '') || ((condition.dateFrom !== '') && (condition.dateFrom <= check.pidate))) && ((condition.dateTo == '') || ((condition.dateTo !== '') && (condition.dateTo >= check.pidate)))"
 						class="thAlign" style="height: 40px;">
 						<td width="36" style="text-align: center;vertical-align: middle;"><input