劳务合同税率计算及应用 - Java 代码示例
public void modifyPayment(long orderId, int payType, String bankName, String remark, int payStatus) throws Exception {
try {
Order order = orderService.getOrder(orderId);
// 更新支付状态
if (payStatus != order.getPayStatus()) {
order.setPayStatus(payStatus);
// 添加历史
if (order.getPayStatus() == Order.ORDER_STATUS_PAY) {
this.addOrderHistory(orderId, Order.ORDER_STATUS_PAY, '支付成功');
} else if (order.getPayStatus() == Order.ORDER_STATUS_UNPAY) {
this.addOrderHistory(orderId, Order.ORDER_STATUS_UNPAY, '支付失败');
}
// 更新订单
orderService.modifyOrder(order);
}
// 如果是合同支付
// 并且支付状态是已支付
// 且支付金额大于0
// 则添加发票
if (Order.PAY_TYPE_CONTRACT == payType && order.getPayStatus() == Order.ORDER_STATUS_PAY && order.getAmount() > 0) {
// 生成发票号
String invoiceNumber = invoiceService.generateInvoiceNumber();
// 添加发票
List<Invoice> invoices = order.getInvoices();
if (invoices == null) {
invoices = new ArrayList<Invoice>();
}
for (int i = 0; i < order.getAmount(); i++) {
Invoice invoice = new Invoice();
invoice.setOrderId(orderId);
invoice.setInvoiceNumber(invoiceNumber);
invoice.setAmount(order.getAmount() / order.getAmount());
invoice.setAreaId(order.getAreaId());
// 查询税率
TaxRate taxRate = taxRateService.queryTaxRateByTypeAndArea(TaxRate.TYPE_CONTRACT,
getAreaId(invoice.getAreaId()));
// 如果没查到,取全国的
if (taxRate == null) {
taxRate = taxRateService.queryTaxRateByTypeAndArea(TaxRate.TYPE_CONTRACT,
TaxRate.AREA_NATIONAL);
}
if (taxRate != null) {
double rate = taxRate.getRate().doubleValue() / 100;
invoice.setTaxRate(taxRate.getRate());
invoice.setTaxAmount(MathExtend.multiply(invoice.getAmount(), rate,
MONEY_PRECISION));
totalTaxAmount = MathExtend.add(totalTaxAmount, invoice.getTaxAmount(),
MONEY_PRECISION);
}
}
// 添加发票
invoiceService.addInvoice(invoice);
totalAmount = MathExtend.add(totalAmount, invoice.getAmount(), MONEY_PRECISION);
if (totalAmount > 0) {
// 更新订单
orderService.modifyOrder(order);
// 更新支付
Payment payment = new Payment();
payment.setOrderId(orderId);
payment.setTotalAmount(totalAmount);
payment.setTaxAmount(totalTaxAmount);
payment.setAmount(MathExtend.subtract(totalAmount, totalTaxAmount, MONEY_PRECISION));
paymentService.modifyPayment(payment);
// 添加历史
this.addOrderHistory(orderId, Order.ORDER_STATUS_INVOICE,
'添加发票:' + invoice.getInvoiceNumber() + '');
}
}
// 如果是支付类型改变,记录历史
if (payType != order.getPayType()) {
String historyContent = '支付方式由'' +
if (Order.PAY_TYPE_CASH == payType) {
historyContent += '现金';
} else if (Order.PAY_TYPE_TRANSFER == payType) {
historyContent += '银行转账';
} else if (Order.PAY_TYPE_CONTRACT == payType) {
historyContent += '合同';
}
if (Order.PAY_TYPE_CASH == order.getPayType()) {
historyContent += ''改为'现金';
} else if (Order.PAY_TYPE_TRANSFER == order.getPayType()) {
historyContent += ''改为'银行转账';
} else if (Order.PAY_TYPE_CONTRACT == order.getPayType()) {
historyContent += ''改为'合同';
}
historyContent += ''';
this.addOrderHistory(orderId, Order.ORDER_STATUS_PAY, historyContent);
}
// 更新订单
order.setPayType(payType);
order.setBankName(bankName);
order.setRemark(remark);
orderService.modifyOrder(order);
// 添加历史
this.addOrderHistory(orderId, Order.ORDER_STATUS_PAY, '修改支付信息');
// 添加操作日志
operatorLogService.addOperatorLog(OperatorLog.TYPE_ORDER, getOperatorId(), '修改支付信息',
OperatorLog.LEVEL_INFO, '订单号:' + orderId + '');
// 支付状态改变,发送消息
if (payType != order.getPayType() || payStatus != order.getPayStatus()) {
// 发送消息
this.sendPaymentMessage(orderId, orderService.getOrder(orderId).getPayStatus());
}
// 更新订单的支付状态
this.updateOrderPayStatus(orderId);
} catch (Exception e) {
log.error('修改支付信息时发生异常:', e);
throw e;
}
}
public List<Order> listOrderByMemberId(long memberId) throws Exception {
try {
return orderService.listOrderByMemberId(memberId);
} catch (Exception e) {
log.error('根据会员编号查询订单时发生异常:', e);
throw e;
}
}
public List<Order> listOrderByMemberId(long memberId, int status) throws Exception {
try {
return orderService.listOrderByMemberId(memberId, status);
} catch (Exception e) {
log.error('根据会员编号查询订单时发生异常:', e);
throw e;
}
}
public List<Order> listOrderByMemberId(long memberId, Date startTime, Date endTime) throws Exception {
try {
return orderService.listOrderByMemberId(memberId, startTime, endTime);
} catch (Exception e) {
log.error('根据会员编号、开始时间、结束时间查询订单时发生异常:', e);
throw e;
}
}
原文地址: https://www.cveoy.top/t/topic/lgmE 著作权归作者所有。请勿转载和采集!