Browse Source

改价后同步重置分期明细价格

wangyc 8 years ago
parent
commit
28dcaf0c9e

+ 23 - 0
src/main/java/com/uas/platform/b2c/fa/payment/dao/InstallmentDetailDao.java

@@ -3,8 +3,14 @@ package com.uas.platform.b2c.fa.payment.dao;
 import com.uas.platform.b2c.fa.payment.model.InstallmentDetail;
 import org.springframework.data.jpa.repository.JpaRepository;
 import org.springframework.data.jpa.repository.JpaSpecificationExecutor;
+import org.springframework.data.jpa.repository.Modifying;
+import org.springframework.data.jpa.repository.Query;
+import org.springframework.data.repository.query.Param;
 import org.springframework.stereotype.Repository;
 
+import static org.apache.commons.jexl2.parser.ParserConstants.and;
+import static org.apache.zookeeper.ZooDefs.OpCode.delete;
+
 /**
  * 分期明细dao
  * @author wangyc
@@ -13,4 +19,21 @@ import org.springframework.stereotype.Repository;
  */
 @Repository
 public interface InstallmentDetailDao extends JpaSpecificationExecutor<InstallmentDetail>, JpaRepository<InstallmentDetail, Long>{
+
+    /**
+     * 通过分期信息id和序号获取分期明细信息
+     * @param installmentId
+     * @param detno
+     * @return
+     */
+    InstallmentDetail findByInstallmentIdAndDetno(Long installmentId, Short detno);
+
+    /**
+     * 根据分期信息id和序号删除序号大于该序号的分期明细
+     * @param installmentId
+     * @param detno
+     */
+    @Modifying
+    @Query(value = "delete from trade$installment_detail where insd_installmentid =:installmentId and insd_detno >:detno", nativeQuery = true)
+    void deleteGtDetno(@Param("installmentId") Long installmentId, @Param("detno") Short detno);
 }

+ 7 - 0
src/main/java/com/uas/platform/b2c/fa/payment/service/InstallmentService.java

@@ -47,4 +47,11 @@ public interface InstallmentService {
      * @return
      */
     String validationEnableInstallment(Long purchaseId);
+
+    /**
+     * 采购单改价后更新分期信息
+     * @param purchaseDetailId
+     * @return
+     */
+    Installment updateAfterModifyPurchasePrice(String purchaseDetailId);
 }

+ 49 - 1
src/main/java/com/uas/platform/b2c/fa/payment/service/impl/InstallmentServiceImpl.java

@@ -3,6 +3,7 @@ package com.uas.platform.b2c.fa.payment.service.impl;
 import com.uas.platform.b2c.core.constant.Status;
 import com.uas.platform.b2c.core.constant.Type;
 import com.uas.platform.b2c.core.support.SystemSession;
+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.dao.InstallmentStoreDao;
@@ -11,8 +12,10 @@ import com.uas.platform.b2c.fa.payment.service.BankInfoService;
 import com.uas.platform.b2c.fa.payment.service.InstallmentService;
 import com.uas.platform.b2c.trade.order.dao.OrderDao;
 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.model.Order;
 import com.uas.platform.b2c.trade.order.model.Purchase;
+import com.uas.platform.b2c.trade.order.model.PurchaseDetail;
 import com.uas.platform.core.exception.IllegalOperatorException;
 import org.apache.commons.collections.CollectionUtils;
 import org.springframework.beans.factory.annotation.Autowired;
@@ -42,14 +45,17 @@ public class InstallmentServiceImpl implements InstallmentService{
 
     private final InstallmentDetailDao installmentDetailDao;
 
+    private final PurchaseDetailDao purchaseDetailDao;
+
     @Autowired
-    public InstallmentServiceImpl(InstallmentStoreDao installmentStoreDao, PurchaseDao purchaseDao, OrderDao orderDao, InstallmentDao installmentDao, BankInfoService bankInfoService, InstallmentDetailDao installmentDetailDao) {
+    public InstallmentServiceImpl(InstallmentStoreDao installmentStoreDao, PurchaseDao purchaseDao, OrderDao orderDao, InstallmentDao installmentDao, BankInfoService bankInfoService, InstallmentDetailDao installmentDetailDao, PurchaseDetailDao purchaseDetailDao) {
         this.installmentStoreDao = installmentStoreDao;
         this.purchaseDao = purchaseDao;
         this.orderDao = orderDao;
         this.installmentDao = installmentDao;
         this.bankInfoService = bankInfoService;
         this.installmentDetailDao = installmentDetailDao;
+        this.purchaseDetailDao = purchaseDetailDao;
     }
 
     @Override
@@ -201,6 +207,48 @@ public class InstallmentServiceImpl implements InstallmentService{
         installmentDao.delete(installment.getId());
     }
 
+    @Override
+    public Installment updateAfterModifyPurchasePrice(String purchaseDetailId) {
+        PurchaseDetail purchaseDetail = purchaseDetailDao.findByDetailid(purchaseDetailId);
+        if (purchaseDetail == null)
+            throw new IllegalOperatorException("订单改价明细数据不存在,请重新确认订单信息");
+        Purchase purchase = purchaseDetail.getPurchase();
+
+        if (purchase != null && purchase.getInstallmentId() != null)
+            validationEnableInstallment(purchase.getId());
+
+        Installment installment = installmentDao.findByPurchaseId(purchase.getId());
+
+        Double total = purchase.getPrice();
+        Double installTotal = installment.getPrice();
+        Double dvalue = 0d;
+
+        if (NumberUtil.compare(total, installTotal) != 0) {
+            for (short i = 1; i < installment.getCount(); i++) {
+                InstallmentDetail installmentDetail = installmentDetailDao.findByInstallmentIdAndDetno(installment.getId(), i);
+                if (installmentDetail == null) {
+                    break;
+                }
+
+                dvalue = total - installmentDetail.getPrice();
+
+                if (dvalue <= 0) {
+                    installmentDetail.setPrice(total);
+                    installmentDetailDao.save(installmentDetail);
+                    installmentDetailDao.deleteGtDetno(installment.getId(), i);
+                    break;
+                } else {
+                    total = dvalue;
+                }
+            }
+        }
+
+        installment.setPrice(purchase.getPrice());
+        installment.setCount(installment.getInstallmentDetails().size());
+
+        return installmentDao.save(installment);
+    }
+
     @Override
     public String validationEnableInstallment(Long purchaseId) {
         validatePurchase(purchaseId);// 验证采购单、订单信息

+ 8 - 2
src/main/java/com/uas/platform/b2c/trade/order/service/impl/PurchaseServiceImpl.java

@@ -18,6 +18,7 @@ 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.payment.service.InstallmentService;
 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;
@@ -145,6 +146,8 @@ public class PurchaseServiceImpl implements PurchaseService {
 	private InstallmentDao installmentDao;
     @Autowired
     private InstallmentDetailDao installmentDetailDao;
+	@Autowired
+	private InstallmentService installmentService;
 
 	@Override
 	public Purchase save(Purchase purchase) {
@@ -1448,7 +1451,7 @@ public class PurchaseServiceImpl implements PurchaseService {
 			PurchaseDetail purchaseDetail = purchaseDetailDao.findByDetailid(purchaseModifyingHistory.getDetailid());
 			Purchase purchase = purchaseDetail.getPurchase();
 			if (purchase != null) {
-				if (purchase.getInstallmentId() != null) {
+				if (purchase.getInstallmentId() != null) {// 验证分期
 					Installment installment = installmentDao.findOne(purchase.getInstallmentId());
 					if (installment != null) {
 						if (com.uas.platform.b2c.core.constant.Status.TOBEPAID.value() != installment.getStatus()) {
@@ -1470,7 +1473,6 @@ public class PurchaseServiceImpl implements PurchaseService {
 			PurchaseDetail purchaseDetail = purchaseDetailDao.findByDetailid(purchaseDetailid);
 			Integer status = purchaseDetail.getStatus();
 			Integer dd = Status.TOBECONFIRMED.value();
-			System.out.println(!purchaseDetail.getStatus().equals(Status.TOBECONFIRMED.value()));
 			if(!purchaseDetail.getStatus().equals(Status.TOBECONFIRMED.value())){
 				throw new IllegalOperatorException("当前状态是:" + Status.valueOf(purchaseDetail.getStatus()).getPhrase() + ",不能修改采购单明细单价");
 			}
@@ -1558,6 +1560,10 @@ public class PurchaseServiceImpl implements PurchaseService {
 			history.setModifyingUnitPrice(modifyingUnitPrice);
 			purchaseModifyingHistoryDao.save(history);
 		}
+
+		if (CollectionUtils.isNotEmpty(list)) {
+			installmentService.updateAfterModifyPurchasePrice(list.get(0).getDetailid());
+		}
 		return "success";
 	}