|
|
@@ -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);
|
|
|
}
|
|
|
|
|
|
/**
|