|
|
@@ -15,7 +15,9 @@ import com.uas.platform.b2c.core.support.log.TradeBufferedLogger;
|
|
|
import com.uas.platform.b2c.core.utils.FastjsonUtils;
|
|
|
import com.uas.platform.b2c.core.utils.NumberUtil;
|
|
|
import com.uas.platform.b2c.fa.payment.dao.InstallmentDao;
|
|
|
+import com.uas.platform.b2c.fa.payment.dao.InstallmentDetailDao;
|
|
|
import com.uas.platform.b2c.fa.payment.model.Installment;
|
|
|
+import com.uas.platform.b2c.fa.payment.model.InstallmentDetail;
|
|
|
import com.uas.platform.b2c.fa.settlement.dao.BillDao;
|
|
|
import com.uas.platform.b2c.fa.settlement.dao.BillInfoDao;
|
|
|
import com.uas.platform.b2c.fa.settlement.model.Bill;
|
|
|
@@ -33,16 +35,8 @@ import com.uas.platform.b2c.prod.product.common.service.CreateNumberService;
|
|
|
import com.uas.platform.b2c.prod.store.dao.StoreInDao;
|
|
|
import com.uas.platform.b2c.prod.store.model.StoreIn;
|
|
|
import com.uas.platform.b2c.trade.aftersale.model.AfterSaleStatus;
|
|
|
-import com.uas.platform.b2c.trade.order.dao.OrderDao;
|
|
|
-import com.uas.platform.b2c.trade.order.dao.OrderDetailDao;
|
|
|
-import com.uas.platform.b2c.trade.order.dao.PurchaseDao;
|
|
|
-import com.uas.platform.b2c.trade.order.dao.PurchaseDetailDao;
|
|
|
-import com.uas.platform.b2c.trade.order.dao.PurchaseModifyingHistoryDao;
|
|
|
-import com.uas.platform.b2c.trade.order.model.Order;
|
|
|
-import com.uas.platform.b2c.trade.order.model.OrderDetail;
|
|
|
-import com.uas.platform.b2c.trade.order.model.Purchase;
|
|
|
-import com.uas.platform.b2c.trade.order.model.PurchaseDetail;
|
|
|
-import com.uas.platform.b2c.trade.order.model.PurchaseModifyingHistory;
|
|
|
+import com.uas.platform.b2c.trade.order.dao.*;
|
|
|
+import com.uas.platform.b2c.trade.order.model.*;
|
|
|
import com.uas.platform.b2c.trade.order.service.OrderService;
|
|
|
import com.uas.platform.b2c.trade.order.service.PurchaseDetailService;
|
|
|
import com.uas.platform.b2c.trade.order.service.PurchaseService;
|
|
|
@@ -76,15 +70,7 @@ import javax.persistence.criteria.CriteriaQuery;
|
|
|
import javax.persistence.criteria.Predicate;
|
|
|
import javax.persistence.criteria.Root;
|
|
|
import java.text.SimpleDateFormat;
|
|
|
-import java.util.ArrayList;
|
|
|
-import java.util.Date;
|
|
|
-import java.util.HashMap;
|
|
|
-import java.util.HashSet;
|
|
|
-import java.util.Iterator;
|
|
|
-import java.util.List;
|
|
|
-import java.util.Map;
|
|
|
-import java.util.Objects;
|
|
|
-import java.util.Set;
|
|
|
+import java.util.*;
|
|
|
|
|
|
import static com.uas.platform.b2c.trade.util.Preconditions.checkArgument;
|
|
|
import static com.uas.platform.b2c.trade.util.Preconditions.checkNotNull;
|
|
|
@@ -157,6 +143,8 @@ public class PurchaseServiceImpl implements PurchaseService {
|
|
|
private LogisticsDao logisticsDao;
|
|
|
@Autowired
|
|
|
private InstallmentDao installmentDao;
|
|
|
+ @Autowired
|
|
|
+ private InstallmentDetailDao installmentDetailDao;
|
|
|
|
|
|
@Override
|
|
|
public Purchase save(Purchase purchase) {
|
|
|
@@ -616,19 +604,126 @@ public class PurchaseServiceImpl implements PurchaseService {
|
|
|
}
|
|
|
|
|
|
@Override
|
|
|
- public Purchase ensurePaid(Long id) {
|
|
|
- // TODO 这里需要前台加入录用银行转账信息
|
|
|
+ public Purchase ensurePaid(Long id, Long installmentDetailId) {
|
|
|
Purchase purchase = purchaseDao.findOne(id);
|
|
|
- if (!purchase.getStatus().equals(Status.TOBEPAID.value())) {
|
|
|
- throw new IllegalAccessError("采购单不为待付款状态,不能确认付款");
|
|
|
- }
|
|
|
- Long uu = SystemSession.getUser().getUserUU();
|
|
|
- // 关联卖家出货单改为已收款
|
|
|
- InvoiceFPurchase iFpurchase = invoiceFPurchaseDao.findByInvoiceid(purchase.getInid());
|
|
|
- iFpurchase.setStatusMoneyreceived(uu);
|
|
|
- purchase.setPaid(uu);
|
|
|
- invoiceFPurchaseDao.save(iFpurchase);
|
|
|
- return purchaseDao.save(purchase);
|
|
|
+ if (purchase == null)
|
|
|
+ throw new IllegalOperatorException("此订单不存在,请重新确认订单信息");
|
|
|
+ Order order = orderDao.findByOrderid(purchase.getOrderid());
|
|
|
+ if (order == null)
|
|
|
+ throw new IllegalOperatorException("此订单不存在,请重新确认订单信息");
|
|
|
+
|
|
|
+ // 分期付款目前只支持直接付款给卖家
|
|
|
+ if (order.getInstallmentId() == null)
|
|
|
+ throw new IllegalOperatorException("此订单为向平台付款,您不可确认收款,请重新确认订单信息");
|
|
|
+
|
|
|
+ if (order.getStatus().intValue() != Status.PAID.value()
|
|
|
+ && order.getStatus().intValue() != Status.TOBEPAID.value()) {
|
|
|
+ throw new IllegalOperatorException(
|
|
|
+ "订单" + order.getOrderid() + "的状态是" + Status.valueOf(order.getStatus()).getPhrase() + ",不能确认收款");
|
|
|
+ }
|
|
|
+
|
|
|
+ InstallmentDetail installmentDetail = installmentDetailDao.findOne(installmentDetailId);
|
|
|
+
|
|
|
+ if (installmentDetail == null)
|
|
|
+ throw new IllegalOperatorException("对应分期信息不存在,请重新确认分期信息");
|
|
|
+ Installment installment = installmentDetail.getInstallment();
|
|
|
+ if (!installment.getId().equals(purchase.getInstallmentId()))
|
|
|
+ throw new IllegalOperatorException("此订单与此分期信息不符,请重新确认订单信息");
|
|
|
+ if (com.uas.platform.b2c.core.constant.Status.PAID.value() != installment.getStatus().intValue())
|
|
|
+ throw new IllegalOperatorException("此订单分期不为待确认付款状态,请重新确认分期信息");
|
|
|
+ if (!installment.getCurrentNo().equals(installmentDetail.getDetno()))
|
|
|
+ throw new IllegalOperatorException("此次付款分期与应付分期信息不符,请重新确认分期信息");
|
|
|
+ if (com.uas.platform.b2c.core.constant.Status.PAID.value() != installmentDetail.getStatus().intValue())
|
|
|
+ throw new IllegalOperatorException("此次分期不为待确认付款状态,请重新确认分期信息");
|
|
|
+
|
|
|
+ installmentDetail.setStatus(com.uas.platform.b2c.core.constant.Status.MONEYRECEIVED.value());
|
|
|
+ installmentDetail.setEnsureDate(new Date());
|
|
|
+
|
|
|
+ Boolean isReceived = false;
|
|
|
+ if (installmentDetail.getDetno().equals(installment.getCount())) {
|
|
|
+ installment.setStatus(com.uas.platform.b2c.core.constant.Status.MONEYRECEIVED.value());
|
|
|
+ isReceived = true;
|
|
|
+ } else {
|
|
|
+ installment.setCurrentNo((short) (installment.getCurrentNo() + 1));
|
|
|
+ }
|
|
|
+
|
|
|
+ Long userUU = SystemSession.getUser().getUserUU();
|
|
|
+
|
|
|
+ order.setPaytype(Type.Payment_CompanyTransfer_Code.value());
|
|
|
+ Set<OrderDetail> orderDetails = order.getOrderDetails();
|
|
|
+ for (OrderDetail orderDetail : orderDetails) {
|
|
|
+ Goods goods = goodsDao.findByBatchCode(orderDetail.getBatchCode());
|
|
|
+ // 更新改订单涉及批次的上次更新时间,以延长批次有效期
|
|
|
+ if (goods != null) {
|
|
|
+ if (goods.getSourceId() == null) {
|
|
|
+ goodsService.updateAvailableDays(goods, GoodsHistory.OperateType.OrderPaied, userUU);
|
|
|
+ }
|
|
|
+ }
|
|
|
+ // 修改明细的状态,设置为等待卖家同意
|
|
|
+ if ((orderDetail.getStatus().intValue() == Status.PAID.value()) || (orderDetail.getStatus().intValue() == Status.TOBEPAID.value())) {
|
|
|
+ if (isReceived) {
|
|
|
+ orderDetail.setStatusMonecyReceviced(userUU);
|
|
|
+ } else {
|
|
|
+ orderDetail.setStatusToBePaidAgain(userUU);
|
|
|
+ }
|
|
|
+ } else if ((orderDetail.getStatus().intValue() != Status.UNAVAILABLE_DISAGREE.value()) && (orderDetail.getStatus().intValue() != Status.TOBEREFUNDED.value())
|
|
|
+ && (orderDetail.getStatus().intValue() != Status.UNAVAILABLE_PERSONAL.value())) {
|
|
|
+ throw new IllegalOperatorException("当前的订单存在明细行状态不正常:" + orderDetail.getDetailid() + " 状态是"
|
|
|
+ + Status.valueOf(orderDetail.getStatus()).getPhrase());
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ // 设置为等待卖家同意
|
|
|
+ if (isReceived) {
|
|
|
+ order.setStatusMonecyReceviced(userUU);
|
|
|
+ } else {
|
|
|
+ order.setStatusToBePaidAgain(userUU);
|
|
|
+ }
|
|
|
+
|
|
|
+ order.setPaytime(new Date());
|
|
|
+ Order newOrder = orderDao.save(order);
|
|
|
+
|
|
|
+ ArrayList<Integer> statusList = new ArrayList<>();
|
|
|
+ Collections.addAll(statusList, Status.TOBECONFIRMED.value(), Status.PAID.value());
|
|
|
+
|
|
|
+ if (statusList.contains(purchase.getStatus())) {
|
|
|
+ if (isReceived) {
|
|
|
+ purchase.setStatusComfirmed(userUU);
|
|
|
+ } else {
|
|
|
+ purchase.setStatusToBePaidAgain(userUU);
|
|
|
+ }
|
|
|
+
|
|
|
+ // 设置明细的状态
|
|
|
+ Set<PurchaseDetail> purchaseDetails = purchase.getPurchaseDetails();
|
|
|
+ for (PurchaseDetail purchaseDetail : purchaseDetails) {
|
|
|
+ if (statusList.contains(purchaseDetail.getStatus())) {
|
|
|
+ if (isReceived) {
|
|
|
+ purchaseDetail.setStatusComfirmed(userUU);
|
|
|
+ } else {
|
|
|
+ purchaseDetail.setStatusToBePaidAgain(userUU);
|
|
|
+ }
|
|
|
+ } else if ((purchaseDetail.getStatus().intValue() != Status.UNAVAILABLE_DISAGREE.value())
|
|
|
+ && (purchaseDetail.getStatus().intValue() != Status.UNAVAILABLE_PERSONAL.value())) {
|
|
|
+ throw new IllegalOperatorException("存在采购单明细状态异常:" + purchaseDetail.getDetailid() + ", 状态是:"
|
|
|
+ + Status.valueOf(purchaseDetail.getStatus()).getPhrase());
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ purchase.setSendstatus(Status.NOT_UPLOAD.value());
|
|
|
+ purchaseDao.save(purchase);
|
|
|
+ //发送短信,异常不作处理
|
|
|
+ try {
|
|
|
+ orderService.sendMessage(purchase);
|
|
|
+ }catch (RuntimeException e){}
|
|
|
+ } else if ((purchase.getStatus().intValue() != Status.UNAVAILABLE_DISAGREE.value())
|
|
|
+ && (purchase.getStatus().intValue() != Status.UNAVAILABLE_PERSONAL.value())) { // 采购单不在用户取消状态
|
|
|
+ throw new IllegalOperatorException("采购单" + purchase.getPurchaseid() + ", 状态是"
|
|
|
+ + Status.valueOf(purchase.getStatus()).getPhrase() + ",是异常状态");
|
|
|
+ }
|
|
|
+
|
|
|
+ installmentDetailDao.save(installmentDetail);
|
|
|
+ installmentDao.save(installment);
|
|
|
+ return purchase;
|
|
|
}
|
|
|
|
|
|
@Override
|
|
|
@@ -1071,6 +1166,19 @@ public class PurchaseServiceImpl implements PurchaseService {
|
|
|
setExceptionStatus(pageInfo, exceptionType);
|
|
|
|
|
|
Page<Purchase> purchasePage = getPurchaseByStatus(pageInfo, null, status, isProof);
|
|
|
+
|
|
|
+ //卖家中心--订单中心 增加分期付款信息
|
|
|
+ for (Purchase purchase : purchasePage) {
|
|
|
+ Long installmentId = purchase.getInstallmentId();
|
|
|
+ if (installmentId != null) {
|
|
|
+ Installment installment = installmentDao.findOne(installmentId);
|
|
|
+ if (installment == null) {
|
|
|
+ throw new IllegalOperatorException("订单:" + purchase.getPurchaseid() + "分期信息有误,请重新确认或联系客服");
|
|
|
+ }
|
|
|
+ purchase.setInstallment(installment);
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
modelMap.put("totalElements", purchasePage.getTotalElements());
|
|
|
modelMap.put("totalPages", purchasePage.getTotalPages());
|
|
|
modelMap.put("content", purchasePage.getContent());
|
|
|
@@ -1209,6 +1317,15 @@ public class PurchaseServiceImpl implements PurchaseService {
|
|
|
return new ResultMap(CodeType.NO_INFO, "采购单编号不能为空");
|
|
|
}
|
|
|
Purchase purchase = purchaseDao.findByPurchaseid(purchaseId);
|
|
|
+ //卖家中心--采购单详情页 增加分期付款信息
|
|
|
+ Long installmentId = purchase.getInstallmentId();
|
|
|
+ if (installmentId != null) {
|
|
|
+ Installment installment = installmentDao.findOne(installmentId);
|
|
|
+ if (installment == null) {
|
|
|
+ throw new IllegalOperatorException("订单:" + purchase.getPurchaseid() + "分期信息有误,请重新确认或联系客服");
|
|
|
+ }
|
|
|
+ purchase.setInstallment(installment);
|
|
|
+ }
|
|
|
Long enUU = SystemSession.getUser().getEnterprise().getUu();
|
|
|
if (!Objects.equals(enUU, purchase.getSellerenuu())) {
|
|
|
return new ResultMap(CodeType.NOT_PERMIT, "非法获取操作");
|