|
|
|
@ -3,6 +3,8 @@ package cc.hiver.mall.bill.service.impl; |
|
|
|
import cc.hiver.core.common.utils.StringUtils; |
|
|
|
import cc.hiver.mall.bill.service.BillService; |
|
|
|
import cc.hiver.mall.bill.vo.*; |
|
|
|
import cc.hiver.mall.debt.entity.Debt; |
|
|
|
import cc.hiver.mall.debt.service.DebtService; |
|
|
|
import cc.hiver.mall.entity.Customer; |
|
|
|
import cc.hiver.mall.entity.ReturnDetail; |
|
|
|
import cc.hiver.mall.entity.SaleDetail; |
|
|
|
@ -13,6 +15,7 @@ import org.springframework.beans.factory.annotation.Autowired; |
|
|
|
import org.springframework.stereotype.Service; |
|
|
|
|
|
|
|
import java.math.BigDecimal; |
|
|
|
import java.text.ParseException; |
|
|
|
import java.util.*; |
|
|
|
|
|
|
|
@Service |
|
|
|
@ -36,6 +39,9 @@ public class BillServiceImpl implements BillService { |
|
|
|
@Autowired |
|
|
|
private DealingsRecordService dealingsRecordService; |
|
|
|
|
|
|
|
@Autowired |
|
|
|
private DebtService debtService; |
|
|
|
|
|
|
|
/** |
|
|
|
* 获取客户对账单 |
|
|
|
* |
|
|
|
@ -64,34 +70,66 @@ public class BillServiceImpl implements BillService { |
|
|
|
if (saleArrearsVo != null) { |
|
|
|
customerBillDataVo.setArrears(saleArrearsVo.getArrears()); |
|
|
|
customerBillDataVo.setTotalSale(saleArrearsVo.getTotalSale()); |
|
|
|
}else{ |
|
|
|
customerBillDataVo.setArrears(BigDecimal.ZERO); |
|
|
|
customerBillDataVo.setTotalSale(BigDecimal.ZERO); |
|
|
|
} |
|
|
|
|
|
|
|
// 获取退货总金额
|
|
|
|
final ArrearsVo returnSaleArrearsVo = returnSaleService.getTotalReturn(customerBillQueryVo); |
|
|
|
if (returnSaleArrearsVo != null) { |
|
|
|
customerBillDataVo.setTotalReturn(returnSaleArrearsVo.getTotalReturn()); |
|
|
|
}else{ |
|
|
|
customerBillDataVo.setTotalReturn(BigDecimal.ZERO); |
|
|
|
} |
|
|
|
// 根据客户id及日期范围对账单明细
|
|
|
|
final Page<CustomerBillSaleVo> dealingRecordPage = dealingsRecordService.getDealingsRecordPageByUserId(customerBillQueryVo); |
|
|
|
final List<CustomerBillSaleVo> records = dealingRecordPage.getRecords(); |
|
|
|
|
|
|
|
|
|
|
|
// 获取saleId,去查询销售单的商品明细,及退货单的商品明细
|
|
|
|
final List<String> saleIdList = new ArrayList<>(); |
|
|
|
for (int i = 0; i < records.size(); i++) { |
|
|
|
if(StringUtils.isNotEmpty(records.get(i).getSaleId())){ |
|
|
|
saleIdList.add(records.get(i).getSaleId()); |
|
|
|
} |
|
|
|
// 根据时间升序查询的,这里获取第一个的初期欠款当做本次查询的初期欠款
|
|
|
|
if (i == 0) { |
|
|
|
final BigDecimal lastDebtAmount = records.get(0).getLastDebtAmount(); |
|
|
|
customerBillDataVo.setInitialArrears(lastDebtAmount); |
|
|
|
if(records.isEmpty()){ |
|
|
|
//未开单,查询客户欠款,作为初期欠款和期末欠款
|
|
|
|
final Debt debt = debtService.selectByUserId(customerBillQueryVo.getShopId(),customerBillQueryVo.getCustomerId()); |
|
|
|
// 要查新客户的创建时间,根据用户的创建时间来判断;
|
|
|
|
// 如果查询时间小于创建时间,那么初期欠款和期末欠款应该为0
|
|
|
|
// 如果查询的时间大于创建时间,那么初期欠款和期末欠款应该为客户欠款
|
|
|
|
if(debt != null){ |
|
|
|
final Date createTime = debt.getCreateTime(); |
|
|
|
final String endDate = customerBillQueryVo.getEndDate(); |
|
|
|
final Date enddate; |
|
|
|
try { |
|
|
|
enddate = DateUtil.COMMON.getTextDate(endDate); |
|
|
|
} catch (ParseException e) { |
|
|
|
throw new RuntimeException(e); |
|
|
|
} |
|
|
|
// 以为现在创建客户就创建了欠款信息,那么就按照欠款信息的创建时间作为标识
|
|
|
|
if(createTime.after(enddate)){ |
|
|
|
customerBillDataVo.setInitialArrears(BigDecimal.ZERO); |
|
|
|
customerBillDataVo.setEndArrears(BigDecimal.ZERO); |
|
|
|
}else{ |
|
|
|
customerBillDataVo.setInitialArrears(debt.getAmountOwed()); |
|
|
|
customerBillDataVo.setEndArrears(debt.getAmountOwed()); |
|
|
|
} |
|
|
|
|
|
|
|
} |
|
|
|
// 获取最后一个的剩余欠款当做本次查询的剩余欠款
|
|
|
|
if (i == records.size() - 1) { |
|
|
|
customerBillDataVo.setEndArrears(records.get(i).getBalanceDue()); |
|
|
|
}else{ |
|
|
|
for (int i = 0; i < records.size(); i++) { |
|
|
|
if(StringUtils.isNotEmpty(records.get(i).getSaleId())){ |
|
|
|
saleIdList.add(records.get(i).getSaleId()); |
|
|
|
} |
|
|
|
// 根据时间升序查询的,这里获取第一个的初期欠款当做本次查询的初期欠款
|
|
|
|
if (i == 0) { |
|
|
|
final BigDecimal lastDebtAmount = records.get(0).getLastDebtAmount(); |
|
|
|
customerBillDataVo.setInitialArrears(lastDebtAmount); |
|
|
|
} |
|
|
|
// 获取最后一个的剩余欠款当做本次查询的剩余欠款
|
|
|
|
if (i == records.size() - 1) { |
|
|
|
customerBillDataVo.setEndArrears(records.get(i).getBalanceDue()); |
|
|
|
} |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
if (!saleIdList.isEmpty()) { |
|
|
|
// 获取销售单明细
|
|
|
|
final List<SaleDetail> saleDetailList = saleDetailService.getSaleDetails(saleIdList); |
|
|
|
|