Browse Source

feat: 应收对账和应付对账详情返回数据调整;数据库字段长度变更记录

hejq 7 years ago
parent
commit
e749b5388a

+ 4 - 0
db/ddl.sql

@@ -13,4 +13,8 @@
   add column todo_apchek_count VARCHAR(100) default '' comment '需要对账金额',
   add column update_time datetime comment '上一次更新时间';
 
+-- date: 2018-12-18 14:42
+-- author: hejq
+-- 更新purc$vendors 字段todo_apchek_count长度
+  alter table purc$vendors modify todo_apchek_count varchar(200);
 

+ 35 - 3
src/main/java/com/uas/platform/b2b/model/DateFilter.java

@@ -1,5 +1,7 @@
 package com.uas.platform.b2b.model;
 
+import java.util.Date;
+
 /**
  * 时间过滤条件
  *
@@ -18,6 +20,16 @@ public class DateFilter {
      */
     private String endDate;
 
+    /**
+     * 起始时间
+     */
+    private Date sqlFromDate;
+
+    /**
+     * 截止时间
+     */
+    private Date sqlEndDate;
+
     public DateFilter() {
 
     }
@@ -27,10 +39,14 @@ public class DateFilter {
      *
      * @param sqlFromDate 开始时间
      * @param sqlEndDate 截止时间
+     * @param fromDate 开始时间
+     * @param endDate 截止时间
      */
-    public DateFilter(String sqlFromDate, String sqlEndDate) {
-        this.fromDate = sqlFromDate;
-        this.endDate = sqlEndDate;
+    public DateFilter(String fromDate, String endDate, Date sqlFromDate, Date sqlEndDate) {
+        this.fromDate = fromDate;
+        this.endDate = endDate;
+        this.sqlFromDate = sqlFromDate;
+        this.sqlEndDate = sqlEndDate;
     }
 
     public String getFromDate() {
@@ -48,4 +64,20 @@ public class DateFilter {
     public void setEndDate(String endDate) {
         this.endDate = endDate;
     }
+
+    public Date getSqlFromDate() {
+        return sqlFromDate;
+    }
+
+    public void setSqlFromDate(Date sqlFromDate) {
+        this.sqlFromDate = sqlFromDate;
+    }
+
+    public Date getSqlEndDate() {
+        return sqlEndDate;
+    }
+
+    public void setSqlEndDate(Date sqlEndDate) {
+        this.sqlEndDate = sqlEndDate;
+    }
 }

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

@@ -1,5 +1,7 @@
 package com.uas.platform.b2b.model;
 
+import com.uas.platform.core.model.Constant;
+
 import javax.persistence.Entity;
 import javax.persistence.Id;
 import javax.persistence.NamedStoredProcedureQueries;
@@ -192,6 +194,54 @@ public class ErpProdIODetail implements Serializable {
      */
     private String whname;
 
+    /**
+     * 对账记录人
+     */
+    private String recorder;
+
+    /**
+     * 对账日期
+     */
+    private Date apCheckDate;
+
+    /**
+     * 是否已对账
+     */
+    private Short haveChecked;
+
+    public ErpProdIODetail() {}
+
+    /**
+     * 将已对账数据转成前台展示数据
+     *
+     * @param apCheck 对账单主表
+     * @param item 对账单名
+     */
+    public ErpProdIODetail(PurchaseApCheck apCheck, PurchaseApCheckItem item) {
+        this.haveChecked = Constant.YES;
+        this.apCheckDate = apCheck.getApDate();
+        this.custname = apCheck.getCustName();
+        this.custuu = apCheck.getCustUu();
+        this.currency = apCheck.getCurrency();
+        this.enuu = apCheck.getEnUu();
+        this.recorder = apCheck.getRecorder();
+        this.orderprice = item.getPrice();
+        this.nowmoney = item.getAmount();
+        this.custuseruu = item.getCustUserUU();
+        this.detno = item.getOrderDetno();
+        this.inoutno = item.getInoutno();
+        this.sourceid = item.getSourceId();
+        this.sendcode = item.getSendcode();
+        this.sourcetable = item.getSourceTable();
+        this.taxrate = item.getTaxrate();
+        this.prodcode = item.getProdCode();
+        this.prodspec = item.getProdSpec();
+        this.prodtitle = item.getProdTitle();
+        this.produnit = item.getProdUnit();
+        this.ordercode = item.getOrderCode();
+        this.qty = item.getCheckQty();
+    }
+
     @Id
     public String getId() {
         return id;
@@ -443,4 +493,28 @@ public class ErpProdIODetail implements Serializable {
     public void setWhname(String whname) {
         this.whname = whname;
     }
+
+    public String getRecorder() {
+        return recorder;
+    }
+
+    public void setRecorder(String recorder) {
+        this.recorder = recorder;
+    }
+
+    public Date getApCheckDate() {
+        return apCheckDate;
+    }
+
+    public void setApCheckDate(Date apCheckDate) {
+        this.apCheckDate = apCheckDate;
+    }
+
+    public Short getHaveChecked() {
+        return haveChecked;
+    }
+
+    public void setHaveChecked(Short haveChecked) {
+        this.haveChecked = haveChecked;
+    }
 }

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

@@ -26,9 +26,9 @@ public class ApCheckeAllCountSqls {
     /**
      * 客户采购验收单未对账金额查询语句
      */
-    public static final String SALE_ACCEPT_COUNT_SQL = "select coalesce(sum((pai_qty) * pai_orderprice), 0) as count, pa_currency as currency \n" +
+    public static final String SALE_ACCEPT_COUNT_SQL = "select coalesce(sum(pai_qty * pai_orderprice), 0) as count, pa_currency as currency \n" +
         "from purc$accept left join `purc$acceptitem` on pai_paid = pa_id " +
-        "where pa_venduu = ? and pa_enuu = ? pai_orderprice <> 0 " +
+        "where pa_venduu = ? and pa_enuu = ? and pai_orderprice <> 0 " +
         "group by pa_currency";
 
     /**

+ 21 - 1
src/main/java/com/uas/platform/b2b/service/ErpProdIODetailService.java

@@ -2,7 +2,9 @@ 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.ErpProdIODetail;
 import com.uas.platform.b2b.model.ErpProdIo;
+import com.uas.platform.b2b.model.PurchaseApCheck;
 
 import java.util.List;
 
@@ -35,5 +37,23 @@ public interface ErpProdIODetailService {
      * @return 过滤条件
      */
     DateFilter initFilter(Long fromDate, Long endDate, String checkDate);
-	
+
+    /**
+     * 通过相关条件查询生成的对账单
+     *
+     * @param vendUU 供应商UU
+     * @param customerUU 客户UU
+     * @param checkDate 对账月份
+     * @param fromDate 起始时间
+     * @param endDate 截止时间
+     * @return 处理后的对账单
+     */
+    List<PurchaseApCheck> findApCheckList(Long vendUU, Long customerUU, String checkDate, Long fromDate, Long endDate);
+
+    /**
+     * 将PurchaseApCheck 转成 ErpProdIODetail
+     * @param apCheckList 查询已对账数据
+     * @return 转换成ErpProdIODetail的数据
+     */
+    List<ErpProdIODetail> covertApCheckToErpIo(List<PurchaseApCheck> apCheckList);
 }

+ 67 - 9
src/main/java/com/uas/platform/b2b/service/impl/ErpProdIODetailServiceImpl.java

@@ -5,11 +5,13 @@ import com.uas.platform.b2b.core.util.DateFormatUtils;
 import com.uas.platform.b2b.core.util.DateUtils;
 import com.uas.platform.b2b.core.util.ThreadUtils;
 import com.uas.platform.b2b.dao.CommonDao;
+import com.uas.platform.b2b.dao.PurchaseApCheckDao;
 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.PurchaseApCheck;
 import com.uas.platform.b2b.model.Vendor;
 import com.uas.platform.b2b.publicapi.model.ApCheckAmount;
 import com.uas.platform.b2b.service.ErpProdIODetailService;
@@ -18,16 +20,22 @@ import com.uas.platform.b2b.support.CollectionUtil;
 import com.uas.platform.b2b.support.SystemSession;
 import com.uas.platform.b2b.task.ApCheckTask;
 import com.uas.platform.core.exception.IllegalOperatorException;
+import com.uas.platform.core.model.PageInfo;
+import com.uas.platform.core.persistence.criteria.PredicateUtils;
 import org.apache.axis.utils.StringUtils;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
 
+import javax.persistence.criteria.CriteriaBuilder;
+import javax.persistence.criteria.CriteriaQuery;
+import javax.persistence.criteria.Root;
 import java.text.ParseException;
 import java.text.SimpleDateFormat;
 import java.util.ArrayList;
 import java.util.Date;
 import java.util.List;
 
+
 /**
  * 对账单
  *
@@ -46,6 +54,9 @@ public class ErpProdIODetailServiceImpl implements ErpProdIODetailService {
 	@Autowired
     private VendorDao vendorDao;
 
+	@Autowired
+    private PurchaseApCheckDao apCheckDao;
+
 	@Override
 	public ErpProdIo findXlsApChecks(List<Long> filter, ApcheckKeyWord keyword, Long fromDate, Long endDate, String checkDate) {
         DateFilter dateFilter = initFilter(fromDate, endDate, checkDate);
@@ -100,9 +111,54 @@ public class ErpProdIODetailServiceImpl implements ErpProdIODetailService {
            List<ApCheckAmount> thisMonthTrades = apCheckService.getThisMonthTrade(enUU, keyword.getCustomerUU(), checkDate, fromDate, endDate);
            erpProdIo.setThisMonthCount(thisMonthTrades);
        }
+       // 查询已生成的对账单(需进行转换)
+        List<PurchaseApCheck> apCheckList = findApCheckList(enUU, keyword.getCustomerUU(), checkDate, fromDate, endDate);
+        List<ErpProdIODetail> detailList = covertApCheckToErpIo(apCheckList);
+        erpProdIo.getDetails().addAll(detailList);
 		return erpProdIo;
 	}
 
+    /**
+     * 通过相关条件查询生成的对账单
+     *
+     * @param vendUU 供应商UU
+     * @param customerUU 客户UU
+     * @param checkDate 对账月份
+     * @param fromDate 起始时间
+     * @param endDate 截止时间
+     */
+    @Override
+    public List<PurchaseApCheck> findApCheckList(Long vendUU, Long customerUU, String checkDate, Long fromDate, Long endDate) {
+        PageInfo pageInfo = new PageInfo();
+        pageInfo.filter("enUu", vendUU);
+        pageInfo.filter("custUu", customerUU);
+        DateFilter filter = initFilter(fromDate, endDate, checkDate);
+        if (filter.getSqlEndDate() != null) {
+            pageInfo.expression(PredicateUtils.gte("recordDate", filter.getSqlFromDate(), false));
+        }
+        if (filter.getSqlEndDate() != null) {
+            pageInfo.expression(PredicateUtils.lt("recordDate", filter.getSqlEndDate(), false));
+        }
+        return apCheckDao.findAll((Root<PurchaseApCheck> root, CriteriaQuery<?> query, CriteriaBuilder builder) ->
+            query.where(pageInfo.getPredicates(root, query, builder)).getRestriction());
+    }
+
+    /**
+     * 将PurchaseApCheck 转成 ErpProdIODetail
+     *
+     * @param apCheckList 查询已对账数据
+     * @return 转换成ErpProdIODetail的数据
+     */
+    @Override
+    public List<ErpProdIODetail> covertApCheckToErpIo(List<PurchaseApCheck> apCheckList) {
+        List<ErpProdIODetail> details = new ArrayList<>();
+        apCheckList.forEach(
+            apCheck -> apCheck.getItems().forEach(
+                item -> details.add(new ErpProdIODetail(apCheck, item)))
+        );
+        return details;
+    }
+
     /**
      * 初始化筛选时间
      *
@@ -115,6 +171,8 @@ public class ErpProdIODetailServiceImpl implements ErpProdIODetailService {
     public DateFilter initFilter(Long fromDate, Long endDate, String checkDate) {
         String sqlFromDate;
         String sqlEndDate;
+        Date beginDate;
+        Date toDate;
         /*
          * 1、 如果前端指定开始截止时间,直接使用
          * 2、 如果前端未指定,采用选择月份,使用月份处理
@@ -123,24 +181,24 @@ public class ErpProdIODetailServiceImpl implements ErpProdIODetailService {
         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));
+            beginDate = new Date(fromDate);
+            sqlFromDate = DateFormatUtils.DATE_FORMAT.format(beginDate);
+            toDate = new Date(endDate + oneDayMilliseconds);
+            sqlEndDate = DateFormatUtils.DATE_FORMAT.format(toDate);
         } 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);
+                toDate = DateUtils.dateAddMonth(format.parse(checkDate), 1);
+                beginDate = format.parse(checkDate);
             } catch (ParseException e) {
                 throw new IllegalOperatorException("时间格式异常");
             }
-            sqlFromDate = DateFormatUtils.DATE_FORMAT.format(checkTime);
-            sqlEndDate = DateFormatUtils.DATE_FORMAT.format(date);
+            sqlFromDate = DateFormatUtils.DATE_FORMAT.format(beginDate);
+            sqlEndDate = DateFormatUtils.DATE_FORMAT.format(toDate);
         } else {
             throw new IllegalOperatorException("请选择对账时间");
         }
-        return new DateFilter(sqlFromDate, sqlEndDate);
+        return new DateFilter(sqlFromDate, sqlEndDate, beginDate, toDate);
     }
 
     /**

+ 18 - 8
src/main/java/com/uas/platform/b2b/service/impl/PurchaseApBillServiceImpl.java

@@ -6,6 +6,7 @@ import com.uas.platform.b2b.core.util.ThreadUtils;
 import com.uas.platform.b2b.dao.CommonDao;
 import com.uas.platform.b2b.dao.PurchaseApBillDao;
 import com.uas.platform.b2b.dao.PurchaseApBillItemDao;
+import com.uas.platform.b2b.dao.PurchaseApCheckDao;
 import com.uas.platform.b2b.dao.VendorDao;
 import com.uas.platform.b2b.erp.model.ProdInOutRefreshPrice;
 import com.uas.platform.b2b.erp.support.ErpBufferedLogger;
@@ -16,17 +17,16 @@ 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.PurchaseApCheck;
 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.ApCheckAmount;
-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;
@@ -238,13 +238,19 @@ public class PurchaseApBillServiceImpl implements PurchaseApBillService {
                         List<ApCheckAmount> tradeCounts = JSON.parseArray(customer.getTotalCountString(), ApCheckAmount.class);
                         customer.setTotalCount(tradeCounts);
                     }
-                    // 本月应收
-                    List<ApCheckAmount> thisMonthTodoTrades = purchaseApCheckService.getThisMonthTodoTrade(vendorUU, enUU, checkDate, fromDate, endDate);
-                    customer.setThisMonthTodoCount(thisMonthTodoTrades);
-                    List<ApCheckAmount> thisMonthDoneTrades = purchaseApCheckService.getThisMonthDoneTrade(vendorUU, enUU, checkDate, fromDate, endDate);
-                    customer.setThisMonthDoneCount(thisMonthDoneTrades);
+                    // 本月应付(总额)
                     List<ApCheckAmount> thisMonthAllTrades = purchaseApCheckService.getThisMonthTrade(vendorUU, enUU, checkDate, fromDate, endDate);
                     customer.setThisMonthCount(thisMonthAllTrades);
+                    // 本月应付存在再进行分类查询
+                    if (!CollectionUtil.isEmpty(thisMonthAllTrades)) {
+                        // 本月应付(未付)
+                        List<ApCheckAmount> thisMonthTodoTrades = purchaseApCheckService.getThisMonthTodoTrade(vendorUU, enUU, checkDate, fromDate, endDate);
+                        customer.setThisMonthTodoCount(thisMonthTodoTrades);
+                        // 本月应付(已付)
+                        List<ApCheckAmount> thisMonthDoneTrades = purchaseApCheckService.getThisMonthDoneTrade(vendorUU, enUU, checkDate, fromDate, endDate);
+                        customer.setThisMonthDoneCount(thisMonthDoneTrades);
+                    }
+
                 });
             vendors.stream().filter(vendor -> null != vendor.getThisMonthCount());
             purchaseApCheckService.setVendorSPage(params, vendors, vendorSPage);
@@ -331,9 +337,13 @@ public class PurchaseApBillServiceImpl implements PurchaseApBillService {
                     );
                 }
             }
-            // 本月应
+            // 本月应
             List<ApCheckAmount> thisMonthTrades = purchaseApCheckService.getThisMonthTrade(searchKeyWord.getVendorUU(), enUU, checkDate, fromDate, endDate);
             erpProdIo.setThisMonthCount(thisMonthTrades);
+            // 查询已生成的对账单(需进行转换)
+            List<PurchaseApCheck> apCheckList = erpProdIODetailService.findApCheckList(searchKeyWord.getVendorUU(), enUU, checkDate, fromDate, endDate);
+            List<ErpProdIODetail> detailList = erpProdIODetailService.covertApCheckToErpIo(apCheckList);
+            erpProdIo.getDetails().addAll(detailList);
         }
         return erpProdIo;
     }

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

@@ -536,15 +536,18 @@ public class PurchaseApCheckServiceImpl implements PurchaseApCheckService {
                         List<ApCheckAmount> tradeCounts = JSON.parseArray(customer.getTotalCountString(), ApCheckAmount.class);
                         customer.setTotalCount(tradeCounts);
                     }
-                    // 本月应收(未收)
-                    List<ApCheckAmount> thisMonthTodoTrades = getThisMonthTodoTrade(enUU, customerUU, checkDate, fromDate, endDate);
-                    customer.setThisMonthTodoCount(thisMonthTodoTrades);
-                    // 本月应收(已收)
-                    List<ApCheckAmount> thisMonthDoneTrades = getThisMonthDoneTrade(enUU, customerUU, checkDate, fromDate, endDate);
-                    customer.setThisMonthDoneCount(thisMonthDoneTrades);
                     // 本月应收(总额)
                     List<ApCheckAmount> thisMonthTrades = getThisMonthTrade(enUU, customerUU, checkDate, fromDate, endDate);
                     customer.setThisMonthCount(thisMonthTrades);
+                    // 总额存在再进行其他查询
+                    if (!CollectionUtils.isEmpty(thisMonthTrades)) {
+                        // 本月应收(未收)
+                        List<ApCheckAmount> thisMonthTodoTrades = getThisMonthTodoTrade(enUU, customerUU, checkDate, fromDate, endDate);
+                        customer.setThisMonthTodoCount(thisMonthTodoTrades);
+                        // 本月应收(已收)
+                        List<ApCheckAmount> thisMonthDoneTrades = getThisMonthDoneTrade(enUU, customerUU, checkDate, fromDate, endDate);
+                        customer.setThisMonthDoneCount(thisMonthDoneTrades);
+                    }
                 });
             vendors.stream().filter(vendor -> null != vendor.getThisMonthCount());
             setVendorSPage(params, vendors, vendorSPage);
@@ -807,53 +810,6 @@ public class PurchaseApCheckServiceImpl implements PurchaseApCheckService {
                 totalTrades.addAll(trades);
             })
             .run();
-        Double rmbCount = totalTrades.stream().filter(tradeCount -> RMB.equals(tradeCount.getCurrency()))
-            .mapToDouble(ApCheckAmount::getCount).sum();
-        Double usdCount = totalTrades.stream().filter(tradeCount -> USD.equals(tradeCount.getCurrency()))
-            .mapToDouble(ApCheckAmount::getCount).sum();
-        Double hkdCount = totalTrades.stream().filter(tradeCount -> HKD.equals(tradeCount.getCurrency()))
-            .mapToDouble(ApCheckAmount::getCount).sum();
-        List<ApCheckAmount> resultCounts = new ArrayList<>();
-        if (rmbCount > 0) {
-            resultCounts.add(new ApCheckAmount(RMB, DecimalUtils.decimalPoint(rmbCount, 2)));
-        }
-        if (usdCount > 0) {
-            resultCounts.add(new ApCheckAmount(USD, DecimalUtils.decimalPoint(usdCount, 2)));
-        }
-        if (hkdCount > 0) {
-            resultCounts.add(new ApCheckAmount(HKD, DecimalUtils.decimalPoint(hkdCount, 2)));
-        }
-        return resultCounts;
-    }
-
-    /**
-     * 查询客户信息
-     *
-     * @param params 分页参数
-     * @param keyword 关键词
-     * @return 符合条件的客户
-     */
-    private SPage<Vendor> searchCustomerInfo(PageParams params, String keyword) {
-        com.uas.search.b2b.model.PageParams pageParams = searchService.convertPageParams(params, null);
-        List<Object> vendInfo = new ArrayList<>();
-        vendInfo.add(SystemSession.getUser().getEnterprise().getUu());
-        vendInfo.add(SystemSession.getUser().getEnterprise().getEnBussinessCode());
-        pageParams.getFilters().put("ve_vendenuu", new MultiValue(vendInfo, false));
-        pageParams.getFilters().put("ve_custswitch", Constant.YES);
-        List<Sort> sortList = new ArrayList<>();
-        SearchFilter filter = userService.distribute();
-        if (filter != null && filter.getDistribute() == null) {
-            return new SPage<>();
-        }
-        if (filter != null && !CollectionUtils.isEmpty(filter.getDistribute())) {
-            List<Object> list = new ArrayList<>();
-            for (Object object : filter.getDistribute()) {
-                list.add(object);
-            }
-            pageParams.getFilters().put("ve_myenuu", new MultiValue(list, true));
-        }
-        sortList.add(new Sort("ve_id", false, Sort.Type.INT, new Long(1)));
-        pageParams.getFilters().put(SearchConstants.SORT_KEY, sortList);
-        return searchService.searchCustCheckIds(keyword, pageParams);
+        return groupCountByCurrency(totalTrades);
     }
 }