Browse Source

供应商差价修改

plf 3 years ago
parent
commit
4652e20331

+ 0 - 34
src/main/java/com/caimei/modules/hehe/service/HeHeNewOrderService.java

@@ -1,8 +1,5 @@
 package com.caimei.modules.hehe.service;
 
-import com.caimei.modules.bulkpurchase.dao.OrderInvoiceDao;
-import com.caimei.modules.bulkpurchase.service.OrderInvoiceService;
-import com.caimei.modules.hehe.dao.CmHeheUserDao;
 import com.caimei.modules.hehe.dao.HeHeNewOrderDao;
 import com.caimei.modules.order.dao.*;
 import com.caimei.modules.order.entity.*;
@@ -10,14 +7,9 @@ import com.caimei.modules.order.service.CmReceiptOrderRelationService;
 import com.caimei.modules.order.service.OrderUserInfoService;
 import com.caimei.modules.order.utils.NewOrderStatus;
 import com.caimei.modules.product.dao.CmPromotionDao;
-import com.caimei.modules.product.dao.ProductDao;
 import com.caimei.modules.product.entity.OrderProductLadderPrice;
 import com.caimei.modules.user.dao.CmUserDao;
-import com.caimei.modules.user.dao.NewCmClubDao;
-import com.caimei.modules.user.dao.NewCmShopDao;
 import com.caimei.modules.user.entity.CmUser;
-import com.caimei.modules.user.service.CmUserBalanceRecordService;
-import com.caimei.modules.user.service.CmUserService;
 import com.caimei.utils.AppKeys;
 import com.caimei.utils.AppUtils;
 import com.caimei.utils.SysConfig;
@@ -49,38 +41,14 @@ public class HeHeNewOrderService extends CrudService<HeHeNewOrderDao, NewOrder>
     @Resource
     private NewOrderProductDao newOrderProductDao;
     @Resource
-    private OrderInvoiceService orderInvoiceService;
-    @Resource
     private OrderUserInfoService orderUserInfoService;
     @Resource
     private NewShopOrderDao newShopOrderDao;
     @Resource
-    private NewCmClubDao newCmClubDao;
-    @Resource
-    private LogisticsBatchDao logisticsBatchDao;
-    @Resource
-    private LogisticsRecordDao logisticsRecordDao;
-    @Resource
-    private LogisticsInformationDao logisticsInformationDao;
-    @Resource
-    private OrderInvoiceDao orderInvoiceDao;
-    @Resource
-    private NewOrderConfigDao newOrderConfigDao;
-    @Resource
-    private ProductDao productDao;
-    @Resource
-    private NewCmShopDao newCmShopDao;
-    @Resource
     private CmUserDao cmUserDao;
     @Resource
-    private CmUserService cmUserService;
-    @Resource
-    private CmReturnedPurchaseProductDao cmReturnedPurchaseProductDao;
-    @Resource
     private CmDiscernReceiptDao cmDiscernReceiptDao;
     @Resource
-    private CmUserBalanceRecordService cmUserBalanceRecordService;
-    @Resource
     private CmReturnedPurchaseDao cmReturnedPurchaseDao;
     @Resource
     private CmPayShopRecordDao cmPayShopRecordDao;
@@ -90,8 +58,6 @@ public class HeHeNewOrderService extends CrudService<HeHeNewOrderDao, NewOrder>
     private CmReceiptOrderRelationService cmReceiptOrderRelationService;
     @Autowired
     private CmPromotionDao cmPromotionDao;
-    @Autowired
-    private CmHeheUserDao cmHeheUserDao;
 
     @Override
     public NewOrder get(String id) {

+ 4 - 55
src/main/java/com/caimei/modules/hehe/web/HeHeNewOrderController.java

@@ -2,34 +2,21 @@ package com.caimei.modules.hehe.web;
 
 import com.caimei.modules.bulkpurchase.entity.BpClause;
 import com.caimei.modules.bulkpurchase.service.BpClauseService;
-import com.caimei.modules.bulkpurchase.service.CmFinanceChargeService;
-import com.caimei.modules.bulkpurchase.service.PurchaseProductService;
 import com.caimei.modules.hehe.dao.CmHeheUserDao;
 import com.caimei.modules.hehe.entity.CmHeheUser;
-import com.caimei.modules.hehe.service.CmHeheUserService;
 import com.caimei.modules.hehe.service.HeHeNewOrderService;
 import com.caimei.modules.order.dao.CmDiscernReceiptDao;
 import com.caimei.modules.order.dao.CmReceiptOrderRelationDao;
 import com.caimei.modules.order.dao.CmReturnedPurchaseDao;
-import com.caimei.modules.order.dao.NewOrderProductDao;
 import com.caimei.modules.order.entity.*;
-import com.caimei.modules.order.service.*;
-import com.caimei.modules.product.dao.CmPromotionDao;
-import com.caimei.modules.product.dao.ProductDao;
-import com.caimei.modules.product.service.CmSecondHandDetailService;
-import com.caimei.modules.product.service.RepeatPurchasePriceHistoryService;
-import com.caimei.modules.product.service.RepeatPurchasePriceService;
-import com.caimei.modules.project.dao.ClubDao;
-import com.caimei.modules.user.dao.CmUserDao;
-import com.caimei.modules.user.service.CmMessageService;
-import com.caimei.modules.user.service.CmUserOrganizeService;
-import com.caimei.modules.user.service.CmUserService;
-import com.caimei.modules.user.service.NewCmShopService;
+import com.caimei.modules.order.service.CmDiscernReceiptService;
+import com.caimei.modules.order.service.CmReceiptOrderRelationService;
+import com.caimei.modules.order.service.CmReturnedPurchaseService;
+import com.caimei.modules.order.service.NewOrderConfigService;
 import com.thinkgem.jeesite.common.persistence.Page;
 import com.thinkgem.jeesite.common.utils.StringUtils;
 import com.thinkgem.jeesite.common.web.BaseController;
 import org.apache.commons.collections.CollectionUtils;
-import org.apache.shiro.authz.annotation.RequiresPermissions;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Controller;
 import org.springframework.ui.Model;
@@ -59,57 +46,19 @@ public class HeHeNewOrderController extends BaseController {
     @Resource
     private BpClauseService bpClauseService;
     @Resource
-    private NewOrderProductService newOrderProductService;
-    @Autowired
-    private NewReceiptListService newReceiptListService;
-    @Resource
-    private NewShopOrderService newShopOrderService;
-    @Resource
-    private CmFinanceChargeService cmFinanceChargeService;
-    @Resource
-    private OrderUserInfoService orderUserInfoService;
-    @Resource
-    private CmMessageService cmMessageService;
-    @Resource
-    private ClubDao clubDao;
-    @Autowired
-    private ProductDao productDao;
-    @Resource
-    private CmProductSnService cmProductSnService;
-    @Autowired
-    private NewOrderProductDao newOrderProductDao;
-    @Resource
     private CmReturnedPurchaseDao cmReturnedPurchaseDao;
     @Resource
-    private CmUserService cmUserService;
-    @Resource
-    private RepeatPurchasePriceService repeatPurchasePriceService;
-    @Resource
-    private NewCmShopService newCmShopService;
-    @Resource
-    private RepeatPurchasePriceHistoryService repeatPurchasePriceHistoryService;
-    @Resource
     private NewOrderConfigService newOrderConfigService;
     @Resource
     private CmDiscernReceiptService cmDiscernReceiptService;
     @Resource
-    private CmUserDao cmUserDao;
-    @Resource
     private CmReturnedPurchaseService cmReturnedPurchaseService;
     @Resource
     private CmReceiptOrderRelationDao cmReceiptOrderRelationDao;
     @Autowired
-    private CmUserOrganizeService cmUserOrganizeService;
-    @Autowired
-    private CmSecondHandDetailService cmSecondHandDetailService;
-    @Autowired
     private CmDiscernReceiptDao cmDiscernReceiptDao;
     @Autowired
     private CmReceiptOrderRelationService cmReceiptOrderRelationService;
-    @Resource
-    private CmPromotionDao cmPromotionDao;
-    @Autowired
-    private PurchaseProductService purchaseProductService;
 
     @ModelAttribute
     public NewOrder get(@RequestParam(required = false) String id) {

+ 143 - 0
src/main/java/com/caimei/modules/order/entity/ChangePayShopDifference.java

@@ -22,6 +22,11 @@ public class ChangePayShopDifference implements Serializable {
      */
     private Integer refundShopId;
 
+    /**
+     * 已付款少付,付款单id
+     */
+    private Integer payShopId;
+
     /**
      * 差价金额
      */
@@ -52,6 +57,41 @@ public class ChangePayShopDifference implements Serializable {
      */
     private Date updateTime;
 
+    /**
+     * 付款单名称
+     */
+    private String name;
+
+    /**
+     * 开户名
+     */
+    private String bankAccountName;
+
+    /**
+     * 账号
+     */
+    private String bankAccount;
+
+    /**
+     * 开户行
+     */
+    private String bankName;
+
+    /**
+     * 账号的类型 0公账, 1私账
+     */
+    private Integer bankType;
+
+    /**
+     * 欠款抵扣金额
+     */
+    private BigDecimal balancePayFee;
+
+    /**
+     * 转账支付
+     */
+    private BigDecimal transferPayFee;
+
     private String[] remarkImages;
 
     /**
@@ -84,6 +124,21 @@ public class ChangePayShopDifference implements Serializable {
      */
     private String systemName;
 
+    /**
+     * 供应商欠款金额
+     */
+    private BigDecimal rebateAmount;
+
+    /**
+     * 供应商可用余额
+     */
+    private BigDecimal ableRebateAmount;
+
+    /**
+     * (付款供应商)付款状态:1待付款、2部分付款、3已付款
+     */
+    private String payStatus;
+
     /**
      * 退款数据
      */
@@ -224,4 +279,92 @@ public class ChangePayShopDifference implements Serializable {
     public void setRefundShop(CmRefundShop refundShop) {
         this.refundShop = refundShop;
     }
+
+    public Integer getPayShopId() {
+        return payShopId;
+    }
+
+    public void setPayShopId(Integer payShopId) {
+        this.payShopId = payShopId;
+    }
+
+    public String getName() {
+        return name;
+    }
+
+    public void setName(String name) {
+        this.name = name;
+    }
+
+    public String getBankAccountName() {
+        return bankAccountName;
+    }
+
+    public void setBankAccountName(String bankAccountName) {
+        this.bankAccountName = bankAccountName;
+    }
+
+    public String getBankAccount() {
+        return bankAccount;
+    }
+
+    public void setBankAccount(String bankAccount) {
+        this.bankAccount = bankAccount;
+    }
+
+    public String getBankName() {
+        return bankName;
+    }
+
+    public void setBankName(String bankName) {
+        this.bankName = bankName;
+    }
+
+    public Integer getBankType() {
+        return bankType;
+    }
+
+    public void setBankType(Integer bankType) {
+        this.bankType = bankType;
+    }
+
+    public BigDecimal getBalancePayFee() {
+        return balancePayFee;
+    }
+
+    public void setBalancePayFee(BigDecimal balancePayFee) {
+        this.balancePayFee = balancePayFee;
+    }
+
+    public BigDecimal getTransferPayFee() {
+        return transferPayFee;
+    }
+
+    public void setTransferPayFee(BigDecimal transferPayFee) {
+        this.transferPayFee = transferPayFee;
+    }
+
+    public BigDecimal getRebateAmount() {
+        return rebateAmount;
+    }
+
+    public void setRebateAmount(BigDecimal rebateAmount) {
+        this.rebateAmount = rebateAmount;
+    }
+
+    public BigDecimal getAbleRebateAmount() {
+        return ableRebateAmount;
+    }
+
+    public void setAbleRebateAmount(BigDecimal ableRebateAmount) {
+        this.ableRebateAmount = ableRebateAmount;
+    }
+
+    public String getPayStatus() {
+        return payStatus;
+    }
+
+    public void setPayStatus(String payStatus) {
+        this.payStatus = payStatus;
+    }
 }

+ 89 - 20
src/main/java/com/caimei/modules/order/service/CmPayShopService.java

@@ -545,22 +545,9 @@ public class CmPayShopService extends CrudService<CmPayShopDao, CmPayShop> {
             cmPayShop.setPayTime(DateUtils.getDateTime());
             cmPayShop.setStatus("1");
             cmPayShopDao.update(cmPayShop);
-            if (cmPayShop.getBalancePayFee() != null && cmPayShop.getBalancePayFee() > 0D) {
-                //如果使用了余额付款 往余额记录表里面写入记录的cm_rebate_record
-                CmRebateRecord r = new CmRebateRecord();
-                r.setType("2");
-                r.setShopId(cmPayShop.getShopID());
-                r.setPayShopID(cmPayShop.getId());
-                r.setShopOrderId(StringUtil.join(records.stream().map(CmPayShopRecord::getShopOrderID).toArray(), ","));
-                r.setRebateAmount(cmPayShop.getBalancePayFee());
-                r.setOperatTime(DateUtils.formatDateTime(new Date()));
-                cmRebateRecordDao.insert(r);
-                //扣除供应商余额
-                newCmShopDao.updateRebateAmount(cmPayShop.getBalancePayFee(), Integer.valueOf(cmPayShop.getShopID()));
-            }
-        }else {
+        } else {
             //付第三方与付供应商差价
-            records.forEach(record->{
+            records.forEach(record -> {
                 record.setStatus("1");
                 record.setPayTime(DateUtils.formatDateTime(new Date()));
                 record.setPayType(cmPayShop.getPayType());
@@ -572,6 +559,19 @@ public class CmPayShopService extends CrudService<CmPayShopDao, CmPayShop> {
             cmPayShop.setStatus("1");
             cmPayShopDao.update(cmPayShop);
         }
+        if (cmPayShop.getBalancePayFee() != null && cmPayShop.getBalancePayFee() > 0D) {
+            //如果使用了余额付款 往余额记录表里面写入记录的cm_rebate_record
+            CmRebateRecord r = new CmRebateRecord();
+            r.setType("2");
+            r.setShopId(cmPayShop.getShopID());
+            r.setPayShopID(cmPayShop.getId());
+            r.setShopOrderId(StringUtil.join(records.stream().map(CmPayShopRecord::getShopOrderID).toArray(), ","));
+            r.setRebateAmount(cmPayShop.getBalancePayFee());
+            r.setOperatTime(DateUtils.formatDateTime(new Date()));
+            cmRebateRecordDao.insert(r);
+            //扣除供应商余额
+            newCmShopDao.updateRebateAmount(cmPayShop.getBalancePayFee(), Integer.valueOf(cmPayShop.getShopID()));
+        }
     }
 
     /**
@@ -614,6 +614,14 @@ public class CmPayShopService extends CrudService<CmPayShopDao, CmPayShop> {
                     cmPayShopDao.update(maxIdpayShop);
                 }
             }
+            if (cmPayShop.getPaymentType() == 2) {
+                //供应商差价付款
+                NewShopOrder shopOrder = newShopOrderDao.findByShopOrderID(shopOrderID);
+                if (shopOrder != null) {
+                    BigDecimal differencePrice = MathUtil.sub(shopOrder.getDifferencePrice(), cmPayShop.getTotalAmount());
+                    newShopOrderDao.updateByDifferencePrice(1, differencePrice, shopOrderID);
+                }
+            }
         }
         cmPayShop.setDelFlag("1");
         newShopOrderDao.outPaying(cmPayShop.getId());
@@ -795,7 +803,6 @@ public class CmPayShopService extends CrudService<CmPayShopDao, CmPayShop> {
         payShop.setWipePayment(0d);
         payShop.setApplicant(currentUser.getId());
         payShop.setApplyTime(time);
-        payShop.setPayTime(time);
         payShop.setStatus("0");
         payShop.setDelFlag("0");
         if (payShopOther.getPayShopId() == null) {
@@ -830,7 +837,16 @@ public class CmPayShopService extends CrudService<CmPayShopDao, CmPayShop> {
         NewShopOrder shopOrder = newShopOrderDao.findByShopOrderID(shopOrderId);
         BigDecimal waitPayShop = BigDecimal.ZERO;
         if (shopOrder != null) {
+            payShopDifference.setPayStatus(shopOrder.getPayStatus());
             waitPayShop = MathUtil.sub(shopOrder.getShouldPayShopAmount(), shopOrder.getPayedShopAmount());
+            NewCmShop shop = newCmShopDao.get(shopOrder.getShopID().toString());
+            payShopDifference.setBankAccount(shop.getBankAccount());
+            payShopDifference.setBankAccountName(shop.getBankAccountName());
+            payShopDifference.setBankName(shop.getBankName());
+            double ableRebateAmount = shop.getAbleRebateAmount() == null ? 0D : shop.getAbleRebateAmount();
+            payShopDifference.setAbleRebateAmount(BigDecimal.valueOf(ableRebateAmount));
+            double rebateAmount = shop.getRebateAmount() == null ? 0D : shop.getRebateAmount();
+            payShopDifference.setRebateAmount(BigDecimal.valueOf(rebateAmount));
         }
         payShopDifference.setWaitPayShop(waitPayShop);
         return payShopDifference;
@@ -838,6 +854,10 @@ public class CmPayShopService extends CrudService<CmPayShopDao, CmPayShop> {
 
     @Transactional(readOnly = false)
     public void saveDifferencePrice(ChangePayShopDifference payShopDifference) throws Exception {
+        User currentUser = UserUtils.getUser();
+        String time = DateUtils.getDateTime();
+        //补差价金额
+        BigDecimal differencePrice = payShopDifference.getDifferencePrice();
         String[] remarkImages = payShopDifference.getRemarkImages();
         if (remarkImages != null && remarkImages.length > 0) {
             StringBuilder remarkImage = new StringBuilder();
@@ -851,6 +871,55 @@ public class CmPayShopService extends CrudService<CmPayShopDao, CmPayShop> {
         }
         Integer shopOrderId = payShopDifference.getShopOrderId();
         NewShopOrder shopOrder = newShopOrderDao.findByShopOrderID(shopOrderId);
+        payShopDifference.setPayStatus(shopOrder.getPayStatus());
+        if ("3".equals(shopOrder.getPayStatus()) && 1 == payShopDifference.getType()) {
+            //已付款且少付情况下,保存付第三方付款记录
+            BigDecimal totalAmount = MathUtil.add(payShopDifference.getTransferPayFee(), payShopDifference.getBalancePayFee());
+            if (MathUtil.compare(totalAmount, differencePrice) != 0) {
+                throw new Exception("付款金额异常");
+            }
+            CmPayShop payShop = new CmPayShop();
+            payShop.setShopID(shopOrder.getShopID().toString());
+            payShop.setName(payShopDifference.getName());
+            payShop.setBankAccountName(payShopDifference.getBankAccountName());
+            payShop.setBankAccount(payShopDifference.getBankAccount());
+            payShop.setBankName(payShopDifference.getBankName());
+            payShop.setType(payShopDifference.getType().toString());
+            payShop.setTotalAmount(differencePrice.doubleValue());
+            if (MathUtil.compare(payShopDifference.getBalancePayFee(), 0) > 0) {
+                payShop.setBalancePayFee(payShopDifference.getBalancePayFee().doubleValue());
+            }
+            if (MathUtil.compare(payShopDifference.getTransferPayFee(), 0) > 0) {
+                payShop.setTransferPayFee(payShopDifference.getTransferPayFee().doubleValue());
+            }
+            payShop.setWipePayment(0d);
+            payShop.setApplicant(currentUser.getId());
+            payShop.setApplyTime(time);
+            payShop.setStatus("0");
+            payShop.setDelFlag("0");
+            cmPayShopDao.insert(payShop);
+
+            CmPayShopRecord payShopRecord = new CmPayShopRecord();
+            payShopRecord.setShopID(shopOrder.getShopID().toString());
+            payShopRecord.setShopOrderID(payShopDifference.getShopOrderId().toString());
+            payShopRecord.setShopOrderNo(shopOrder.getOrderNo());
+            payShopRecord.setPayAmount(differencePrice.doubleValue());
+            payShopRecord.setWipePayment(0d);
+            payShopRecord.setPaymentType(2);
+            payShopRecord.setPayShopID(payShop.getId());
+            payShopRecord.setStatus("0");
+            payShopRecord.setDelFlag("0");
+            cmPayShopRecordDao.insert(payShopRecord);
+            payShopDifference.setPayShopId(Integer.valueOf(payShop.getId()));
+
+            //使用欠款抵扣
+            if (MathUtil.compare(payShopDifference.getBalancePayFee(), 0) > 0) {
+                NewCmShop shop = newCmShopDao.get(shopOrder.getShopID().toString());
+                BigDecimal ableRebateAmount = MathUtil.sub(shop.getAbleRebateAmount(), payShopDifference.getBalancePayFee());
+                shop.setAbleRebateAmount(ableRebateAmount.doubleValue());
+                newCmShopDao.updateAbleRebateAmount(shop);
+            }
+        }
         //查询之前是否有差价退款过
         Integer refundShopId = cmRefundShopRecordDao.findByRefundType(shopOrderId);
         if (refundShopId != null && refundShopId > 0) {
@@ -861,8 +930,6 @@ public class CmPayShopService extends CrudService<CmPayShopDao, CmPayShop> {
 
         //待付供应商金额
         BigDecimal waitPayShop = MathUtil.sub(shopOrder.getShouldPayShopAmount(), shopOrder.getPayedShopAmount());
-        //补差价金额
-        BigDecimal differencePrice = payShopDifference.getDifferencePrice();
         if (payShopDifference.getType() == 2 && MathUtil.compare(differencePrice, waitPayShop) > 0) {
             //多付且差价大于待付金额,会发生供应商退款操作
             BigDecimal waitRefund = MathUtil.sub(differencePrice, waitPayShop);
@@ -881,8 +948,6 @@ public class CmPayShopService extends CrudService<CmPayShopDao, CmPayShop> {
             }
             if (MathUtil.compare(waitRefund, MathUtil.add(refundAmount, refundBalanceAmount)) == 0) {
                 CmRefundShop refundShop = new CmRefundShop();
-                String time = DateUtils.formatDateTime(new Date());
-                User currentUser = UserUtils.getUser();
                 refundShop.setShopID(shopOrder.getShopID().toString());
                 refundShop.setOperator(currentUser.getId());
                 refundShop.setOperatTime(time);
@@ -924,6 +989,10 @@ public class CmPayShopService extends CrudService<CmPayShopDao, CmPayShop> {
         }
         payShopDifference.setModifyUserId(Integer.parseInt(UserUtils.getUser().getId()));
         cmPayShopRecordDao.insertDifference(payShopDifference);
+        if ("3".equals(shopOrder.getPayStatus()) && 1 == payShopDifference.getType()) {
+            //多次少付供应商,应加上差价
+            differencePrice = MathUtil.add(shopOrder.getDifferencePrice(), differencePrice);
+        }
         newShopOrderDao.updateByDifferencePrice(payShopDifference.getType(), differencePrice, shopOrderId);
     }
 

+ 18 - 1
src/main/java/com/caimei/modules/order/service/NewShopOrderService.java

@@ -21,6 +21,7 @@ import org.springframework.stereotype.Service;
 import org.springframework.transaction.annotation.Transactional;
 
 import javax.annotation.Resource;
+import java.math.BigDecimal;
 import java.text.SimpleDateFormat;
 import java.util.*;
 import java.util.stream.Collectors;
@@ -71,6 +72,8 @@ public class NewShopOrderService extends CrudService<NewShopOrderDao, NewShopOrd
     private CmPromotionDao cmPromotionDao;
     @Resource
     private HeHeNewOrderDao heHeNewOrderDao;
+    @Resource
+    private CmPayShopDao cmPayShopDao;
 
 
     public List<NewShopOrder> findListByOrderID() {
@@ -593,7 +596,8 @@ public class NewShopOrderService extends CrudService<NewShopOrderDao, NewShopOrd
         List<ChangePayShopDifference> differenceList = cmPayShopRecordDao.findShopDifference(shopOrderId);
         if (differenceList != null && differenceList.size() > 0) {
             differenceList.forEach(difference -> {
-                if (difference.getType() == 2 && difference.getRefundShopId() > 0) {
+                if (difference.getType() == 2 && difference.getRefundShopId() != null) {
+                    //退款数据
                     CmRefundShop refundShop = cmRefundShopDao.findByRefundShopId(difference.getRefundShopId());
                     difference.setRefundShop(refundShop);
                 }
@@ -605,6 +609,19 @@ public class NewShopOrderService extends CrudService<NewShopOrderDao, NewShopOrd
                     String[] remarkImages = difference.getRemarkImage().split(",");
                     difference.setRemarkImages(remarkImages);
                 }
+                if (difference.getType() == 1 && difference.getPayShopId() != null) {
+                    //付款数据
+                    CmPayShop payShop = cmPayShopDao.get(difference.getPayShopId().toString());
+                    if (payShop != null) {
+                        difference.setBankType(Integer.valueOf(payShop.getType()));
+                        difference.setName(payShop.getName());
+                        difference.setBankAccount(payShop.getBankAccount());
+                        difference.setBankAccountName(payShop.getBankAccountName());
+                        difference.setBankName(payShop.getBankName());
+                        difference.setBalancePayFee(BigDecimal.valueOf(payShop.getBalancePayFee()));
+                        difference.setTransferPayFee(BigDecimal.valueOf(payShop.getTransferPayFee()));
+                    }
+                }
             });
         }
         return differenceList;

+ 4 - 0
src/main/java/com/caimei/modules/order/web/CmPayShopController.java

@@ -828,6 +828,10 @@ public class CmPayShopController extends BaseController {
             e.printStackTrace();
             addMessage(redirectAttributes, e.getMessage());
         }
+        if ("3".equals(payShopDifference.getPayStatus())) {
+            //去付款列表
+            return "redirect:" + Global.getAdminPath() + "/order/cmPayShop/";
+        }
         return "redirect:" + Global.getAdminPath() + "/shopOrder/payOrderList?operatingMode=1";
     }
 

+ 4 - 3
src/main/resources/mappings/modules/order/CmPayShopRecordMapper.xml

@@ -265,13 +265,13 @@
 		INSERT INTO `cm_change_pay_shop_difference` (
 		  `shopOrderId`, `modifyUserId`, `refundShopId`,
 		  `differencePrice`, `type`, `remark`,
-		  `remarkImage`, `updateTime`
+		  `remarkImage`, `updateTime`, payShopId
 		)
 		VALUES
 		  (
 			#{shopOrderId}, #{modifyUserId}, #{refundShopId},
 			#{differencePrice}, #{type}, #{remark},
-			#{remarkImage}, NOW()
+			#{remarkImage}, NOW(), #{payShopId}
 		  )
 	</insert>
 
@@ -280,6 +280,7 @@
 		  `id`,
 		  `shopOrderId`,
 		  `modifyUserId`,
+		  payShopId,
 		  `refundShopId`,
 		  `differencePrice`,
 		  `type`,
@@ -291,7 +292,7 @@
 		WHERE
 		  shopOrderId = #{shopOrderId}
 		ORDER BY
-		  updateTime
+		  updateTime DESC
 	</select>
 
 	<select id="findPayShopOtherFee" resultType="java.math.BigDecimal">

+ 81 - 13
src/main/webapp/WEB-INF/views/modules/order/differencePriceForm.jsp

@@ -205,20 +205,24 @@
                             return false;
                         }
                     }
-                    /*var shopPostFee = $("#shopPostFee").val();
-                    var brokerage = ${brokerage};
-                    if (brokerage < shopPostFee) {
-                        top.$.jBox.confirm("付第三方的值不合理,导致佣金为负,确认继续吗?", '提示', function (v, h, f) {
-                            if (v == true) {
-                                loading('正在提交,请稍等...');
-                                form.submit();
+                    if (type == 1 && ${payShopDifference.payStatus eq 3}){
+                        var payShopCheckbox = $('.payShop-checkbox:checked');
+                        var totalAmount = 0;
+                        payShopCheckbox.each(function () {
+                            if ($(this).val() == 1){
+                                totalAmount += Number($('input[name=transferPayFee]').val());
                             }
-                            return;
-                        }, {buttons: {'取消': false, '确定': true}});
-                    } else {*/
-                        loading('正在提交,请稍等...');
-                        form.submit();
-                    /*}*/
+                            if ($(this).val() == 2){
+                                totalAmount += Number($('input[name=balancePayFee]').val());
+                            }
+                        });
+                        if (totalAmount != differencePrice){
+                            alertx("转账支付金额与欠款抵扣金额之和不等于差价,不能提交");
+                            return false;
+                        }
+                    }
+                    loading('正在提交,请稍等...');
+                    form.submit();
                 },
                 errorContainer: "#messageBox",
                 errorPlacement: function(error, element) {
@@ -248,6 +252,12 @@
             <input type="radio" name="type" value="2" onclick="showInfo()">多付&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
             <img src="/static/images/info.jpg" style="height: 20px;width: 20px" onclick="alertx('“少付”指成本变高了,按旧成本付款的话相当于会少付供应商,但是线上支付的订单不能修改成本,所以通过补差价的方式来弥补;“多付”指成本变低了,按旧成本付款的话相当于会多付供应商,但是线上支付的订单不能修改成本,所以通过退差价的方式来弥补。')">
     </div>
+    <div class="control-group">
+        <label class="control-label"><font color='red'>*</font>付款单名称:</label>
+        <div class="controls">
+            <form:input path="name" htmlEscape="false" maxlength="100" class="input-xlarge required"/>
+        </div>
+    </div>
     <div class="control-group">
         <label class="control-label"><font color='red'>*</font>差价金额:</label>
         <div class="controls">
@@ -255,6 +265,46 @@
             <label>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(目前子订单待付金额为¥${payShopDifference.waitPayShop})</label>
         </div>
     </div>
+    <c:if test="${payShopDifference.payStatus eq 3}">
+        <div id="payShopShow">
+            <div class="control-group">
+                <label class="control-label"><font color='red'>*</font>付款方式:</label>
+                <input type="checkbox" class="payShop-checkbox" value="1" checked>转账支付
+            </div>
+            <div style="margin-left: 80px">
+                <div class="control-group">
+                    <label class="control-label"><font color='red'>*</font>转账金额:</label>
+                    <div class="controls">
+                        <input type="number" required name="transferPayFee" value="" onchange="changeShouldPay(this)"/>
+                    </div>
+                </div>
+                <div class="control-group">
+                    <label class="control-label"><font color='red'>*</font>开户名:</label>&nbsp;&nbsp;&nbsp;&nbsp;
+                    <form:input path="bankAccountName" htmlEscape="false" maxlength="100" class="input-xlarge required"/>&nbsp;&nbsp;&nbsp;&nbsp;
+                    <label><font color='red'>*</font>账号:</label>
+                    <form:input path="bankAccount" htmlEscape="false" maxlength="100" class="input-xlarge required"/>
+                </div>
+                <div class="control-group">
+                    <label class="control-label"><font color='red'>*</font>开户行:</label>&nbsp;&nbsp;&nbsp;&nbsp;
+                    <form:input path="bankName" htmlEscape="false" maxlength="100" class="input-xlarge required"/>&nbsp;&nbsp;&nbsp;&nbsp;
+                    <label><font color='red'>*</font>账户类型:</label>
+                    <form:select path="bankType" class="select-ele input-xlarge required">
+                        <form:option value="0" label="公账"/>
+                        <form:option value="1" label="私账"/>
+                    </form:select>
+                </div>
+            </div>
+            <div style="margin-left: 160px">
+                <div class="control-group">
+                    <input type="checkbox" class="payShop-checkbox" value="2">欠款抵扣
+                </div>
+                &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;总欠款:<span id="rebateAmount">${payShopDifference.rebateAmount}</span>,
+                可用抵扣欠款:<span id="ableRebateAmount">${payShopDifference.ableRebateAmount}</span>,
+                使用:<input type="number" value="${payShopDifference.balancePayFee}" name="balancePayFee" class="used-amount">,
+                剩余:<span id="remainingBalance">${payShopDifference.ableRebateAmount}</span>
+            </div>
+        </div><br>
+    </c:if>
     <div class="control-group" id="refundShow" hidden>
         <div class="refund-methods">
             <label class="control-label">接收退款方式:</label>
@@ -401,6 +451,22 @@
                 })
             },500);
         });
+
+        //使用余额<总余额
+        $('body').on('input propertychange','.used-amount',function() {
+            var thisEle = $(this),
+                thisVal = Number(thisEle.val()),
+                totalAmount = Number($('#differencePrice').val()),
+                ableRebateAmount = Number($('#ableRebateAmount').text());
+            if (totalAmount === 0){
+                alertx("请输入差价金额");
+                thisEle.val(0);
+            }else if (thisVal > ableRebateAmount || thisVal > totalAmount){
+                thisEle.val(0);
+            }else {
+                $('#remainingBalance').text(ableRebateAmount - thisVal);
+            }
+        });
     });
 
     /**
@@ -415,7 +481,9 @@
         var type = $("input[name='type']:checked").val();
         if (type == 1){
             $("#refundShow").hide();
+            $("#payShopShow").show();
         } else {
+            $("#payShopShow").hide();
             var differencePrice = $("#differencePrice").val();
             var waitPayShop = ${payShopDifference.waitPayShop};
             if (differencePrice > waitPayShop) {

+ 7 - 0
src/main/webapp/WEB-INF/views/modules/order/differencePriceRemark.jsp

@@ -113,6 +113,13 @@
             <div>
                 <ul>差价类型:${difference.type eq 1 ? "少付":"多付"}</ul>
                 <ul>差价金额:${difference.differencePrice}</ul>
+                <c:if test="${not empty difference.payShopId}">
+                    <ul>付款单名称:${difference.name}</ul>
+                    <ul>转账支付:${difference.transferPayFee}</ul>
+                    <ul>开户名:${difference.bankAccountName} <span style="margin-left: 100px">账号:${difference.bankAccount}</span></ul>
+                    <ul>开户行:${difference.bankName}  <span style="margin-left: 100px">账户类型:${difference.bankType eq 0 ? "公账":"私账"}</span></ul>
+                    <ul>欠款抵扣:${difference.balancePayFee}</ul>
+                </c:if>
                 <c:if test="${not empty difference.refundShop}">
                     <ul>接收退款方式:</ul>
                     <div style="margin-left: 100px">