Browse Source

Merge remote-tracking branch 'origin/feature_installment_v1' into feature_installment_v1

zengchao 8 years ago
parent
commit
5e72bb7a0f

+ 10 - 0
src/main/java/com/uas/platform/b2c/core/constant/Type.java

@@ -247,6 +247,16 @@ public enum Type {
 	 */
 	ENTERPRISING(1602, "ENTERPRISING"),
 
+	/**
+	 * 付款给平台
+	 */
+	PAIDTOPLATFORM(1603, "PAIDTOPLATFORM"),
+
+	/**
+	 * 付款给卖家
+	 */
+	PAIDTOVENDOR(1604, "PAIDTOVENDOR"),
+
 	/**
 	 * {@code 1666 企业入库 <b>企业入库</b>}
 	 */

+ 23 - 6
src/main/java/com/uas/platform/b2c/fa/payment/controller/InstallmentController.java

@@ -1,7 +1,11 @@
 package com.uas.platform.b2c.fa.payment.controller;
 
+import com.alibaba.fastjson.JSONObject;
+import com.uas.platform.b2c.core.utils.FastjsonUtils;
 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 org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.web.bind.annotation.*;
 
 /**
@@ -14,24 +18,37 @@ import org.springframework.web.bind.annotation.*;
 @RequestMapping(value = "/trade/installments")
 public class InstallmentController {
 
+    private final InstallmentService installmentService;
+
+    @Autowired
+    public InstallmentController(InstallmentService installmentService) {
+        this.installmentService = installmentService;
+    }
+
     /**
      * 新增分期信息
-     * @param installment 分期信息
+     * @param json 分期信息及采购单号
      * @return
      */
     @RequestMapping(method = RequestMethod.POST)
-    public Installment createInstallment(@RequestBody  Installment installment) {
-        return null;
+    public Installment createInstallment(@RequestBody String json) {
+        JSONObject jsonObject = FastjsonUtils.fromJson(json, JSONObject.class);
+        Installment installment = (Installment) jsonObject.get("installment");
+        Long purchaseId = jsonObject.getLong("purchaseId");
+        return installmentService.createInstallment(installment, purchaseId);
     }
 
     /**
      * 更新分期信息
-     * @param installment
+     * @param json 分期信息及采购单号
      * @return
      */
     @RequestMapping(method = RequestMethod.PUT)
-    public Installment updateInstallment(@RequestBody Installment installment) {
-        return null;
+    public Installment updateInstallment(@RequestBody String json) {
+        JSONObject jsonObject = FastjsonUtils.fromJson(json, JSONObject.class);
+        Installment installment = (Installment) jsonObject.get("installment");
+        Long purchaseId = jsonObject.getLong("purchaseId");
+        return installmentService.updateInstallment(installment, purchaseId);
     }
 
     /**

+ 13 - 0
src/main/java/com/uas/platform/b2c/fa/payment/dao/InstallmentDao.java

@@ -13,4 +13,17 @@ import org.springframework.stereotype.Repository;
  */
 @Repository
 public interface InstallmentDao extends JpaSpecificationExecutor<Installment>, JpaRepository<Installment, Long>{
+
+    /**
+     * 通过采购单id获取分期信息
+     * @param purchaseId
+     * @return
+     */
+    Installment findByPurchaseId(Long purchaseId);
+
+    /**
+     * 通过采购单id删除分期信息
+     * @param purchaseId
+     */
+    void deleteByPurchaseId(Long purchaseId);
 }

+ 10 - 1
src/main/java/com/uas/platform/b2c/fa/payment/dao/InstallmentStoreDao.java

@@ -6,10 +6,19 @@ import org.springframework.data.jpa.repository.JpaSpecificationExecutor;
 import org.springframework.stereotype.Repository;
 
 /**
- * Created by wangyc on 2017/9/7.
+ * 分期店铺权限dao
+ * @author wangyc
  *
  * @version 2017/9/7 11:24 wangyc
  */
 @Repository
 public interface InstallmentStoreDao extends JpaSpecificationExecutor<InstallmentStore>, JpaRepository<InstallmentStore, Long> {
+
+    /**
+     * 通过企业uu获取拥有分期权限店铺
+     * @param enuu 企业uu
+     * @param enable 是否启用
+     * @return
+     */
+    public InstallmentStore findByEnuuAndEnable(Long enuu, Short enable);
 }

+ 14 - 0
src/main/java/com/uas/platform/b2c/fa/payment/model/BankTransfer.java

@@ -31,6 +31,12 @@ public class BankTransfer {
 	@Column(name = "banktf_sn", unique = true)
 	private String banktranssn;
 
+	/**
+	 * 转账类型(转账给卖家,转账给平台)
+	 */
+	@Column(name = "banktf_type")
+	private String type;
+
 	/**
 	 * 状态 TOBEMADEOUTANINVOICE(512, "待开发票"), MADEOUTANINVOICE(513, "已开发票"),
 	 */
@@ -152,6 +158,14 @@ public class BankTransfer {
 		this.banktranssn = banktranssn;
 	}
 
+	public String getType() {
+		return type;
+	}
+
+	public void setType(String type) {
+		this.type = type;
+	}
+
 	public Long getCollectenuu() {
 		return collectenuu;
 	}

+ 17 - 3
src/main/java/com/uas/platform/b2c/fa/payment/model/Installment.java

@@ -31,6 +31,12 @@ public class Installment {
     @Column(name = "ins_orderid")
     private Long orderId;
 
+    /**
+     * 采购单id
+     */
+    @Column(name = "insss_purchaseid")
+    private Long purchaseId;
+
     /**
      * 卖家企业uu
      */
@@ -60,7 +66,7 @@ public class Installment {
      * 总期数
      */
     @Column(name = "ins_count")
-    private Short count;
+    private Integer count;
 
     /**
      * 分期明细
@@ -93,6 +99,14 @@ public class Installment {
         this.orderId = orderId;
     }
 
+    public Long getPurchaseId() {
+        return purchaseId;
+    }
+
+    public void setPurchaseId(Long purchaseId) {
+        this.purchaseId = purchaseId;
+    }
+
     public Long getSellerenuu() {
         return sellerenuu;
     }
@@ -125,11 +139,11 @@ public class Installment {
         this.currentNo = currentNo;
     }
 
-    public Short getCount() {
+    public Integer getCount() {
         return count;
     }
 
-    public void setCount(Short count) {
+    public void setCount(Integer count) {
         this.count = count;
     }
 

+ 3 - 3
src/main/java/com/uas/platform/b2c/fa/payment/model/InstallmentDetail.java

@@ -52,7 +52,7 @@ public class InstallmentDetail {
      * TOBEPAID(503, "待付款"),PAID(504, "已付款")
      */
     @Column(name = "insd_status")
-    private Short status;
+    private Integer status;
 
     /**
      * 本期截止日期
@@ -120,11 +120,11 @@ public class InstallmentDetail {
         this.detno = detno;
     }
 
-    public Short getStatus() {
+    public Integer getStatus() {
         return status;
     }
 
-    public void setStatus(Short status) {
+    public void setStatus(Integer status) {
         this.status = status;
     }
 

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

@@ -1,5 +1,7 @@
 package com.uas.platform.b2c.fa.payment.service;
 
+import com.uas.platform.b2c.fa.payment.model.Installment;
+
 /**
  * 分期支付service
  * @author wangyc
@@ -7,4 +9,27 @@ package com.uas.platform.b2c.fa.payment.service;
  * @version 2017/9/7 9:07 wangyc
  */
 public interface InstallmentService {
+
+    /**
+     * 新增分期信息
+     * @param installment 分期信息
+     * @param purchaseId 采购单id
+     * @return
+     */
+    Installment createInstallment(Installment installment, Long purchaseId);
+
+    /**
+     * 更新分期信息
+     * @param installment 分期信息
+     * @param purchaseId 采购单id
+     * @return
+     */
+    Installment updateInstallment(Installment installment, Long purchaseId);
+
+    /**
+     *
+     * @param installmentDetail
+     * @return
+     */
+//    Installment paidInstallment(InstallmentDetail installmentDetail);
 }

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

@@ -1,8 +1,24 @@
 package com.uas.platform.b2c.fa.payment.service.impl;
 
+import com.uas.platform.b2c.core.constant.Status;
+import com.uas.platform.b2c.core.support.SystemSession;
+import com.uas.platform.b2c.fa.payment.dao.InstallmentDao;
+import com.uas.platform.b2c.fa.payment.dao.InstallmentStoreDao;
+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.model.InstallmentStore;
 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.model.Order;
+import com.uas.platform.b2c.trade.order.model.Purchase;
+import com.uas.platform.core.exception.IllegalOperatorException;
+import org.apache.commons.collections.CollectionUtils;
+import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
 
+import java.util.List;
+
 /**
  * 分期支付service实现类
  * @author wangyc
@@ -11,4 +27,123 @@ import org.springframework.stereotype.Service;
  */
 @Service
 public class InstallmentServiceImpl implements InstallmentService{
+
+    private final InstallmentStoreDao installmentStoreDao;
+
+    private final PurchaseDao purchaseDao;
+
+    private final OrderDao orderDao;
+
+    private final InstallmentDao installmentDao;
+
+    @Autowired
+    public InstallmentServiceImpl(InstallmentStoreDao installmentStoreDao, PurchaseDao purchaseDao, OrderDao orderDao, InstallmentDao installmentDao) {
+        this.installmentStoreDao = installmentStoreDao;
+        this.purchaseDao = purchaseDao;
+        this.orderDao = orderDao;
+        this.installmentDao = installmentDao;
+    }
+
+    @Override
+    public Installment createInstallment(Installment installment, Long purchaseId) {
+        Purchase purchase = purchaseDao.findOne(purchaseId);
+        // 基础验证
+        if (purchase == null)
+            throw new IllegalOperatorException("此订单不存在,请重新确认信息");
+        if (!SystemSession.getUser().getEnterprise().getUu().equals(purchase.getSellerenuu()))
+            throw new IllegalOperatorException("此订单不属于当前企业,请重新确认信息");
+        if (Status.TOBECONFIRMED.value() != purchase.getStatus().intValue())
+            throw new IllegalOperatorException("此订单状态不为待付款,不可设置分期");
+
+        InstallmentStore installmentStore = installmentStoreDao.findByEnuuAndEnable(SystemSession.getUser().getEnterprise().getUu(), (short) 1);
+        if (installmentStore == null)
+            throw new IllegalOperatorException("当前企业没有设置分期功能权限,如有需要请联系客服");
+
+        List<InstallmentDetail> installmentDetails = installment.getInstallmentDetails();
+        if (CollectionUtils.isEmpty(installmentDetails))
+            throw new IllegalOperatorException("分期详情为空,请您设置分期详情");
+
+        for(InstallmentDetail installmentDetail : installmentDetails) {
+            installmentDetail.setStatus(Status.TOBEPAID.value());
+        }
+
+        // 设置分期基本信息
+        installment.setSellerenuu(SystemSession.getUser().getEnterprise().getUu());
+        installment.setStatus(Status.TOBEPAID.value());
+        installment.setCount(installmentDetails.size());
+        installment.setCurrentNo((short) 1);
+        installment.setOrderNum(purchase.getOrderid());
+        installment.setPurchaseId(purchaseId);
+
+        Order order = orderDao.findOrderByOrderid(purchase.getOrderid());
+        if (order == null)
+            throw new IllegalOperatorException("此订单不存在,请重新确认信息");
+
+        installment.setOrderId(order.getId());
+        installment.setPrice(purchase.getPrice());
+        installment.setInstallmentDetails(installmentDetails);
+
+        // 保存分期信息
+        installment = installmentDao.save(installment);
+
+        // 订单、采购单保存分期id
+        purchase.setInstallmentId(installment.getId());
+        order.setInstallmentId(installment.getId());
+
+        return installment;
+    }
+
+    @Override
+    public Installment updateInstallment(Installment installment, Long purchaseId) {
+        Purchase purchase = purchaseDao.findOne(purchaseId);
+        // 基础验证
+        if (purchase == null)
+            throw new IllegalOperatorException("此订单不存在,请重新确认信息");
+        if (!SystemSession.getUser().getEnterprise().getUu().equals(purchase.getSellerenuu()))
+            throw new IllegalOperatorException("此订单不属于当前企业,请重新确认信息");
+        if (Status.TOBECONFIRMED.value() != purchase.getStatus().intValue())
+            throw new IllegalOperatorException("此订单状态不为待付款,不可修改分期信息");
+
+        InstallmentStore installmentStore = installmentStoreDao.findByEnuuAndEnable(SystemSession.getUser().getEnterprise().getUu(), (short) 1);
+        if (installmentStore == null)
+            throw new IllegalOperatorException("当前企业没有设置分期功能权限,如有需要请联系客服");
+
+        List<InstallmentDetail> installmentDetails = installment.getInstallmentDetails();
+        if (CollectionUtils.isEmpty(installmentDetails))
+            throw new IllegalOperatorException("分期详情为空,请您设置分期详情");
+
+        Installment oldInstallment = installmentDao.findByPurchaseId(purchaseId);
+        if (oldInstallment == null)
+            throw new IllegalOperatorException("此订单分期信息不存在,请重新确认信息");
+        installmentDao.delete(oldInstallment.getId());
+
+        for(InstallmentDetail installmentDetail : installmentDetails) {
+            installmentDetail.setStatus(Status.TOBEPAID.value());
+        }
+
+        // 设置分期基本信息
+        installment.setSellerenuu(SystemSession.getUser().getEnterprise().getUu());
+        installment.setStatus(Status.TOBEPAID.value());
+        installment.setCount(installmentDetails.size());
+        installment.setCurrentNo((short) 1);
+        installment.setOrderNum(purchase.getOrderid());
+        installment.setPurchaseId(purchaseId);
+
+        Order order = orderDao.findOrderByOrderid(purchase.getOrderid());
+        if (order == null)
+            throw new IllegalOperatorException("此订单不存在,请重新确认信息");
+
+        installment.setOrderId(order.getId());
+        installment.setPrice(purchase.getPrice());
+        installment.setInstallmentDetails(installmentDetails);
+
+        // 保存分期信息
+        installment = installmentDao.save(installment);
+
+        // 订单、采购单保存分期id
+        purchase.setInstallmentId(installment.getId());
+        order.setInstallmentId(installment.getId());
+
+        return installment;
+    }
 }