Browse Source

fix: 作废应收对账单同步刷新未对账总额数据

hejq 7 years ago
parent
commit
6000137266

+ 1 - 3
src/main/java/com/uas/platform/b2b/controller/SaleApCheckController.java

@@ -121,9 +121,7 @@ public class SaleApCheckController {
 	public ModelMap cancelApCheck(Long id) {
 		boolean result = purchaseApCheckService.cancelApcheck(id);
 		logger.log("应收对账单", "作废应收对账单", result ? "成功" : "失败", "", id);
-		ModelMap map = new ModelMap();
-		map.put("result", result);
-		return map;
+		return new ModelMap("result", result);
 	}
 
 	/**

+ 18 - 0
src/main/java/com/uas/platform/b2b/service/PurchaseApCheckService.java

@@ -218,4 +218,22 @@ public interface PurchaseApCheckService {
      * @param endDate 截止时间
      */
     void countApCheck(Vendor customer, String checkDate, Long fromDate, Long endDate);
+
+    /**
+     * 通过供应UU和客户UU更新对账数据
+     * @param vendorUU 供应商UU
+     * @param customerUU 客户UU
+     * @param vendorId 供应商客户关系表id
+     */
+    void updateTodoApCheckCount(Long vendorUU, Long customerUU, Long vendorId);
+
+    /**
+     * 更细对账数据sql语句
+     *
+     * @param vendorUU 供应商UU
+     * @param customerUU 客户UU
+     * @param vendorId 供应商客户关系id
+     * @return sql
+     */
+    String updateApCheckCountSql(Long vendorUU, Long customerUU, Long vendorId);
 }

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

@@ -4,7 +4,9 @@ import com.alibaba.fastjson.JSON;
 import com.uas.platform.b2b.constant.StringConstant;
 import com.uas.platform.b2b.core.util.BoundedExecutor;
 import com.uas.platform.b2b.core.util.ContextUtils;
+import com.uas.platform.b2b.core.util.StringUtil;
 import com.uas.platform.b2b.dao.CommonDao;
+import com.uas.platform.b2b.dao.CommunalLogDao;
 import com.uas.platform.b2b.dao.EnterpriseDao;
 import com.uas.platform.b2b.dao.PurchaseApCheckDao;
 import com.uas.platform.b2b.dao.PurchaseApCheckDoneDao;
@@ -12,6 +14,7 @@ import com.uas.platform.b2b.dao.PurchaseApCheckItemDao;
 import com.uas.platform.b2b.dao.PurchaseApCheckTodoDao;
 import com.uas.platform.b2b.dao.VendorDao;
 import com.uas.platform.b2b.event.PurchaseApCheckReplyReleaseEvent;
+import com.uas.platform.b2b.model.CommunalLog;
 import com.uas.platform.b2b.model.DateFilter;
 import com.uas.platform.b2b.model.Enterprise;
 import com.uas.platform.b2b.model.OrderRedDotAll;
@@ -31,8 +34,10 @@ import com.uas.platform.b2b.service.ErpProdIODetailService;
 import com.uas.platform.b2b.service.OrderRedDotService;
 import com.uas.platform.b2b.service.PurchaseApCheckService;
 import com.uas.platform.b2b.service.UserService;
+import com.uas.platform.b2b.support.CollectionUtil;
 import com.uas.platform.b2b.support.DecimalUtils;
 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.Constant;
 import com.uas.platform.core.model.PageInfo;
@@ -81,6 +86,7 @@ public class PurchaseApCheckServiceImpl implements PurchaseApCheckService {
     private final EnterpriseDao enterpriseDao;
     private final UserService userService;
     private final VendorDao vendorDao;
+    private final CommunalLogDao communalLogDao;
     @Autowired
     private ErpProdIODetailService erpProdIODetailService;
 
@@ -105,7 +111,7 @@ public class PurchaseApCheckServiceImpl implements PurchaseApCheckService {
     public PurchaseApCheckServiceImpl(PurchaseApCheckDao purchaseApCheckDao, PurchaseApCheckTodoDao purchaseApCheckTodoDao,
                                       PurchaseApCheckDoneDao purchaseApCheckDoneDao, PurchaseApCheckItemDao purchaseApCheckItemDao,
                                       CommonDao commonDao, OrderRedDotService redDotService, EnterpriseDao enterpriseDao,
-                                      UserService userService, VendorDao vendorDao) {
+                                      UserService userService, VendorDao vendorDao, CommunalLogDao communalLogDao) {
         this.purchaseApCheckDao = purchaseApCheckDao;
         this.redDotService = redDotService;
         this.purchaseApCheckTodoDao = purchaseApCheckTodoDao;
@@ -115,6 +121,7 @@ public class PurchaseApCheckServiceImpl implements PurchaseApCheckService {
         this.enterpriseDao = enterpriseDao;
         this.userService = userService;
         this.vendorDao = vendorDao;
+        this.communalLogDao = communalLogDao;
         ExecutorService executorService = Executors.newCachedThreadPool();
         executor = new BoundedExecutor(executorService, 1600);
     }
@@ -211,11 +218,12 @@ public class PurchaseApCheckServiceImpl implements PurchaseApCheckService {
                         System.out.println("生成对账单批量更新来源数据失败: " + e.getMessage());
                         throw new IllegalOperatorException("保存失败!");
                     }
-                    return true;
                 }
 			}
 			check.setCheckStatus("已作废");
 			purchaseApCheckDao.save(check);
+			// 更新对账数据
+            updateTodoApCheckCount(check.getEnUu(), check.getCustUu(), null);
 			return true;
 		}
 		return false;
@@ -838,4 +846,69 @@ public class PurchaseApCheckServiceImpl implements PurchaseApCheckService {
         threadsSignal.await();
         return groupCountByCurrency(totalTrades);
     }
+
+    /**
+     * 通过供应UU和客户UU更新对账数据
+     *
+     * @param vendorUU   供应商UU
+     * @param customerUU 客户UU
+     * @param vendorId   供应商客户关系表id
+     */
+    @Override
+    public void updateTodoApCheckCount(Long vendorUU, Long customerUU, Long vendorId) {
+        String sql = updateApCheckCountSql(vendorUU, customerUU, vendorId);
+        if (!StringUtils.isEmpty(sql)) {
+            try {
+                commonDao.getJdbcTemplate().update(sql);
+            } catch (RuntimeException e) {
+                CommunalLog log = new CommunalLog();
+                log.setTitle("更新客户关系表对账数据--更新失败");
+                log.setMessage("id: " + vendorId);
+                log.setTime(System.currentTimeMillis());
+                communalLogDao.save(log);
+            }
+            CommunalLog log = new CommunalLog();
+            log.setTitle("作废应收对账单供应商关系对账数据");
+            log.setMessage("id: " + vendorId);
+            log.setTime(System.currentTimeMillis());
+            communalLogDao.save(log);
+        }
+    }
+
+    /**
+     * 更细对账数据sql语句
+     *
+     * @param vendorUU   供应商UU
+     * @param customerUU 客户UU
+     * @param vendorId   供应商客户关系id
+     * @return sql
+     */
+    @Override
+    public String updateApCheckCountSql(Long vendorUU, Long customerUU, Long vendorId) {
+        Vendor vendor = null;
+        if (null == vendorId) {
+            List<Vendor> vendors = vendorDao.findByMyEnUUAndVendUU(customerUU, vendorUU);
+            if (!CollectionUtils.isEmpty(vendors)) {
+                vendor = vendors.get(0);
+            }
+        } else {
+            vendor = vendorDao.findOne(vendorId);
+        }
+        if (null != vendor) {
+            List<ApCheckAmount> tradeCounts = null;
+            try {
+                tradeCounts = getDueTrade(vendor.getVendEnUU(), vendor.getMyEnUU());
+            } catch (InterruptedException e) {
+                e.printStackTrace();
+            }
+            String tradeString;
+            if (!CollectionUtil.isEmpty(tradeCounts)) {
+                tradeString = JSON.toJSONString(tradeCounts);
+            } else {
+                tradeString = "";
+            }
+            return String.format(ApCheckTask.UPDATE_COUNT_SQL, tradeString, vendor.getId());
+        }
+        return null;
+    }
 }

+ 15 - 20
src/main/java/com/uas/platform/b2b/task/ApCheckTask.java

@@ -1,6 +1,7 @@
 package com.uas.platform.b2b.task;
 
 import com.alibaba.fastjson.JSON;
+import com.uas.platform.b2b.core.util.StringUtil;
 import com.uas.platform.b2b.dao.CommonDao;
 import com.uas.platform.b2b.dao.CommunalLogDao;
 import com.uas.platform.b2b.erp.model.VendorInfo;
@@ -9,10 +10,14 @@ import com.uas.platform.b2b.publicapi.model.ApCheckAmount;
 import com.uas.platform.b2b.publicapi.model.TradeCount;
 import com.uas.platform.b2b.service.PurchaseApCheckService;
 import com.uas.platform.b2b.support.CollectionUtil;
+import com.uas.platform.core.exception.IllegalOperatorException;
+import com.uas.ps.core.util.StringUtils;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.scheduling.annotation.Scheduled;
 import org.springframework.stereotype.Component;
+import org.springframework.util.CollectionUtils;
 
+import java.util.ArrayList;
 import java.util.List;
 
 /**
@@ -51,32 +56,22 @@ public class ApCheckTask {
     public void updateCount() {
         List<VendorInfo> vendorList = commonDao.query(TODO_CUSTOMER_SQL, VendorInfo.class);
         if (!CollectionUtil.isEmpty(vendorList)) {
+            List<String> sqlList = new ArrayList<>();
             final int[] size = {0};
             vendorList.forEach(vendorInfo -> {
-                List<ApCheckAmount> tradeCounts = null;
-                try {
-                    tradeCounts = apCheckService.getDueTrade(vendorInfo.getVenduu(), vendorInfo.getCustuu());
-                } catch (InterruptedException e) {
-                    e.printStackTrace();
-                }
-                String tradeString;
-                if (!CollectionUtil.isEmpty(tradeCounts)) {
-                    tradeString = JSON.toJSONString(tradeCounts);
-                } else {
-                    tradeString = "";
+                String sql = apCheckService.updateApCheckCountSql(vendorInfo.getVenduu(), vendorInfo.getCustuu(), vendorInfo.getId());
+                if (!StringUtils.isEmpty(sql)) {
+                    sqlList.add(sql);
+                    size[0]++;
                 }
+            });
+            if (!CollectionUtils.isEmpty(sqlList)) {
                 try {
-                    String sql = String.format(UPDATE_COUNT_SQL, tradeString, vendorInfo.getId());
-                    commonDao.getJdbcTemplate().update(sql);
-                    size[0]++;
+                    commonDao.getJdbcTemplate().batchUpdate(sqlList.toArray(new String[sqlList.size()]));
                 } catch (RuntimeException e) {
-                    CommunalLog log = new CommunalLog();
-                    log.setTitle("更新客户关系表对账数据--更新失败");
-                    log.setMessage("id: " + vendorInfo.getId());
-                    log.setTime(System.currentTimeMillis());
-                    communalLogDao.save(log);
+                    throw new IllegalOperatorException("更新失败-> " + e.getMessage());
                 }
-            });
+            }
             CommunalLog log = new CommunalLog();
             log.setTitle("更新客户关系表对账数据");
             log.setMessage("最小id: " + vendorList.get(0).getId() + ";数量: " + size[0]);