|
|
@@ -1,6 +1,8 @@
|
|
|
package com.uas.platform.b2b.service.impl;
|
|
|
|
|
|
import com.uas.platform.b2b.core.util.ContextUtils;
|
|
|
+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.EnterpriseDao;
|
|
|
@@ -20,6 +22,7 @@ import com.uas.platform.b2b.model.SearchFilter;
|
|
|
import com.uas.platform.b2b.model.SourceForApcheck;
|
|
|
import com.uas.platform.b2b.model.Vendor;
|
|
|
import com.uas.platform.b2b.model.util.UnCheckedCountSqls;
|
|
|
+import com.uas.platform.b2b.publicapi.model.TradeCount;
|
|
|
import com.uas.platform.b2b.search.SearchService;
|
|
|
import com.uas.platform.b2b.service.OrderRedDotService;
|
|
|
import com.uas.platform.b2b.service.PurchaseApCheckService;
|
|
|
@@ -48,6 +51,7 @@ import javax.persistence.criteria.CriteriaQuery;
|
|
|
import javax.persistence.criteria.Predicate;
|
|
|
import javax.persistence.criteria.Root;
|
|
|
import java.sql.SQLException;
|
|
|
+import java.text.ParseException;
|
|
|
import java.text.SimpleDateFormat;
|
|
|
import java.util.ArrayList;
|
|
|
import java.util.Date;
|
|
|
@@ -85,15 +89,27 @@ public class PurchaseApCheckServiceImpl implements PurchaseApCheckService {
|
|
|
@Autowired
|
|
|
private EnterpriseDao enterpriseDao;
|
|
|
|
|
|
- @Autowired
|
|
|
- private VendorService vendorService;
|
|
|
-
|
|
|
@Autowired
|
|
|
private SearchService searchService;
|
|
|
|
|
|
@Autowired
|
|
|
private UserService userService;
|
|
|
|
|
|
+ /**
|
|
|
+ * RMB
|
|
|
+ */
|
|
|
+ private final String RMB = "RMB";
|
|
|
+
|
|
|
+ /**
|
|
|
+ * 港币
|
|
|
+ */
|
|
|
+ private final String HKD = "HKD";
|
|
|
+
|
|
|
+ /**
|
|
|
+ * 美元
|
|
|
+ */
|
|
|
+ private final String USD = "USD";
|
|
|
+
|
|
|
@Override
|
|
|
public List<PurchaseApCheck> findNotUploadAPcheck() {
|
|
|
return purchaseApCheckDao.findByCustUuAndStatusAndCheckStatus(SystemSession.getUser().getEnterprise().getUu(),
|
|
|
@@ -492,39 +508,134 @@ public class PurchaseApCheckServiceImpl implements PurchaseApCheckService {
|
|
|
* @return 搜索结果
|
|
|
*/
|
|
|
@Override
|
|
|
- public SPage<Vendor> getCustomerInfo(PageParams params, String keyword) {
|
|
|
+ public SPage<Vendor> getCustomerInfo(PageParams params, String keyword, String checkDate) {
|
|
|
SPage<Vendor> vendorSPage = searchCustomerInfo(params, keyword);
|
|
|
final Long enUU = SystemSession.getUser().getEnterprise().getUu();
|
|
|
vendorSPage.getContent().stream().filter(customer -> null != customer.getApcheck() && customer.getApcheck() == 1)
|
|
|
.forEach(customer -> {
|
|
|
Long customerUU = customer.getMyEnUU();
|
|
|
- PurchaseApCheck apCheck = purchaseApCheckDao.findByCustomerUUAndEnUU(customerUU, enUU);
|
|
|
- if (null != apCheck) {
|
|
|
- customer.setLastCheckDate(apCheck.getRecordDate());
|
|
|
+ // 应收总额
|
|
|
+ List<TradeCount> totalTrades = getDueTrade(enUU, customerUU);
|
|
|
+ customer.setTotalCount(totalTrades);
|
|
|
+ // 本月应收
|
|
|
+ if (null != checkDate) {
|
|
|
+ List<TradeCount> thisMonthTrades = getThisMonthTrade(enUU, customerUU, checkDate);
|
|
|
+ customer.setThisMonthCount(thisMonthTrades);
|
|
|
}
|
|
|
- final Double[] adjustmentCount = {0D};
|
|
|
- final Double[] saleAcceptCount = {0D};
|
|
|
- final Double[] saleReturnCount = {0D};
|
|
|
- final Double[] makeAcceptCount = {0D};
|
|
|
- final Double[] makeReturnCount = {0D};
|
|
|
- ThreadUtils
|
|
|
- // 货款调账
|
|
|
- .task(() -> adjustmentCount[0] = commonDao.queryForObject(UnCheckedCountSqls.ADJUSTMENT_COUNT_SQL, Double.class, enUU, customerUU))
|
|
|
- // 采购验收
|
|
|
- .task(() -> saleAcceptCount[0] = commonDao.queryForObject(UnCheckedCountSqls.SALE_ACCEPT_COUNT_SQL, Double.class, enUU, customerUU))
|
|
|
- // 采购验退
|
|
|
- .task(() -> saleReturnCount[0] = commonDao.queryForObject(UnCheckedCountSqls.SALE_RETURN_COUNT_SQL, Double.class, enUU, customerUU))
|
|
|
- // 委外验收
|
|
|
- .task(() -> makeAcceptCount[0] = commonDao.queryForObject(UnCheckedCountSqls.MAKE_ACCEPT_COUNT_SQL, Double.class, enUU, customerUU))
|
|
|
- // 委外验退
|
|
|
- .task(() -> makeReturnCount[0] = commonDao.queryForObject(UnCheckedCountSqls.MAKE_RETURN_COUNT_SQL, Double.class, enUU, customerUU))
|
|
|
- .run();
|
|
|
- Double totalCount = adjustmentCount[0] + saleAcceptCount[0] + saleReturnCount[0] + makeAcceptCount[0] + makeReturnCount[0];
|
|
|
- customer.setUncheckedCount(totalCount);
|
|
|
});
|
|
|
return vendorSPage;
|
|
|
}
|
|
|
|
|
|
+ /**
|
|
|
+ * 获取指定月份应收金额
|
|
|
+ *
|
|
|
+ * @param enUU 企业UU
|
|
|
+ * @param customerUU 客户企业UU
|
|
|
+ * @param checkDate 筛选月份
|
|
|
+ * @return 统计结果
|
|
|
+ */
|
|
|
+ private List<TradeCount> getThisMonthTrade(Long enUU, Long customerUU, String checkDate) {
|
|
|
+ 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("时间格式异常");
|
|
|
+ }
|
|
|
+ String sqlFromDate = DateFormatUtils.DATE_FORMAT.format(checkTime);
|
|
|
+ String sqlEndDate = DateFormatUtils.DATE_FORMAT.format(date);
|
|
|
+ List<TradeCount> totalTrades = new ArrayList<>();
|
|
|
+ ThreadUtils
|
|
|
+ // 货款调账
|
|
|
+ .task(() -> {
|
|
|
+ List<TradeCount> trades = commonDao.query(UnCheckedCountSqls.THISMONTH_ADJUSTMENT_COUNT_SQL, TradeCount.class, enUU, customerUU, sqlFromDate, sqlEndDate);
|
|
|
+ totalTrades.addAll(trades);
|
|
|
+ })
|
|
|
+ // 采购验收
|
|
|
+ .task(() -> {
|
|
|
+ List<TradeCount> trades = commonDao.query(UnCheckedCountSqls.THISMONTH_SALE_ACCEPT_COUNT_SQL, TradeCount.class, enUU, customerUU, sqlFromDate, sqlEndDate);
|
|
|
+ totalTrades.addAll(trades);
|
|
|
+ })
|
|
|
+ // 采购验退
|
|
|
+ .task(() -> {
|
|
|
+ List<TradeCount> trades = commonDao.query(UnCheckedCountSqls.THISMONTH_SALE_RETURN_COUNT_SQL, TradeCount.class, enUU, customerUU, sqlFromDate, sqlEndDate);
|
|
|
+ totalTrades.addAll(trades);
|
|
|
+ })
|
|
|
+ // 委外验收
|
|
|
+ .task(() -> {
|
|
|
+ List<TradeCount> trades = commonDao.query(UnCheckedCountSqls.THISMONTH_MAKE_ACCEPT_COUNT_SQL, TradeCount.class, enUU, customerUU, sqlFromDate, sqlEndDate);
|
|
|
+ totalTrades.addAll(trades);
|
|
|
+ })
|
|
|
+ // 委外验退
|
|
|
+ .task(() -> {
|
|
|
+ List<TradeCount> trades = commonDao.query(UnCheckedCountSqls.THISMONTH_MAKE_RETURN_COUNT_SQL, TradeCount.class, enUU, customerUU, sqlFromDate, sqlEndDate);
|
|
|
+ totalTrades.addAll(trades);
|
|
|
+ })
|
|
|
+ .run();
|
|
|
+ Double rmbCount = totalTrades.stream().filter(tradeCount -> RMB.equals(tradeCount.getCurrency()) && null != tradeCount.getAmount())
|
|
|
+ .mapToDouble(trade -> trade.getAmount().doubleValue()).sum();
|
|
|
+ Double usdCount = totalTrades.stream().filter(tradeCount -> USD.equals(tradeCount.getCurrency()) && null != tradeCount.getAmount())
|
|
|
+ .mapToDouble(trade -> trade.getAmount().doubleValue()).sum();
|
|
|
+ Double hkdCount = totalTrades.stream().filter(tradeCount -> HKD.equals(tradeCount.getCurrency()) && null != tradeCount.getAmount())
|
|
|
+ .mapToDouble(trade -> trade.getAmount().doubleValue()).sum();
|
|
|
+ List<TradeCount> resultCounts = new ArrayList<>();
|
|
|
+ resultCounts.add(new TradeCount(RMB, rmbCount));
|
|
|
+ resultCounts.add(new TradeCount(USD, usdCount));
|
|
|
+ resultCounts.add(new TradeCount(HKD, hkdCount));
|
|
|
+ return resultCounts;
|
|
|
+ }
|
|
|
+
|
|
|
+ /**
|
|
|
+ * 获取总的应收金额
|
|
|
+ *
|
|
|
+ * @param enUU 企业UU
|
|
|
+ * @param customerUU 客户企业UU
|
|
|
+ * @return 统计结果
|
|
|
+ */
|
|
|
+ private List<TradeCount> getDueTrade(Long enUU, Long customerUU) {
|
|
|
+ List<TradeCount> totalTrades = new ArrayList<>();
|
|
|
+ ThreadUtils
|
|
|
+ // 货款调账
|
|
|
+ .task(() -> {
|
|
|
+ List<TradeCount> trades = commonDao.query(UnCheckedCountSqls.ADJUSTMENT_COUNT_SQL, TradeCount.class, enUU, customerUU);
|
|
|
+ totalTrades.addAll(trades);
|
|
|
+ })
|
|
|
+ // 采购验收
|
|
|
+ .task(() -> {
|
|
|
+ List<TradeCount> trades = commonDao.query(UnCheckedCountSqls.SALE_ACCEPT_COUNT_SQL, TradeCount.class, enUU, customerUU);
|
|
|
+ totalTrades.addAll(trades);
|
|
|
+ })
|
|
|
+ // 采购验退
|
|
|
+ .task(() -> {
|
|
|
+ List<TradeCount> trades = commonDao.query(UnCheckedCountSqls.SALE_RETURN_COUNT_SQL, TradeCount.class, enUU, customerUU);
|
|
|
+ totalTrades.addAll(trades);
|
|
|
+ })
|
|
|
+ // 委外验收
|
|
|
+ .task(() -> {
|
|
|
+ List<TradeCount> trades = commonDao.query(UnCheckedCountSqls.MAKE_ACCEPT_COUNT_SQL, TradeCount.class, enUU, customerUU);
|
|
|
+ totalTrades.addAll(trades);
|
|
|
+ })
|
|
|
+ // 委外验退
|
|
|
+ .task(() -> {
|
|
|
+ List<TradeCount> trades = commonDao.query(UnCheckedCountSqls.MAKE_RETURN_COUNT_SQL, TradeCount.class, enUU, customerUU);
|
|
|
+ totalTrades.addAll(trades);
|
|
|
+ })
|
|
|
+ .run();
|
|
|
+ Double rmbCount = totalTrades.stream().filter(tradeCount -> RMB.equals(tradeCount.getCurrency()) && null != tradeCount.getAmount())
|
|
|
+ .mapToDouble(trade -> trade.getAmount().doubleValue()).sum();
|
|
|
+ Double usdCount = totalTrades.stream().filter(tradeCount -> USD.equals(tradeCount.getCurrency()) && null != tradeCount.getAmount())
|
|
|
+ .mapToDouble(trade -> trade.getAmount().doubleValue()).sum();
|
|
|
+ Double hkdCount = totalTrades.stream().filter(tradeCount -> HKD.equals(tradeCount.getCurrency()) && null != tradeCount.getAmount())
|
|
|
+ .mapToDouble(trade -> trade.getAmount().doubleValue()).sum();
|
|
|
+ List<TradeCount> resultCounts = new ArrayList<>();
|
|
|
+ resultCounts.add(new TradeCount(RMB, rmbCount));
|
|
|
+ resultCounts.add(new TradeCount(USD, usdCount));
|
|
|
+ resultCounts.add(new TradeCount(HKD, hkdCount));
|
|
|
+ return resultCounts;
|
|
|
+ }
|
|
|
+
|
|
|
/**
|
|
|
* 查询客户信息
|
|
|
*
|