Explorar o código

退款申请bugfix

zhijiezhao %!s(int64=2) %!d(string=hai) anos
pai
achega
938cf868eb

+ 24 - 9
src/main/java/com/caimei/modules/bulkpurchase/web/CmRefundsProductController.java

@@ -160,6 +160,9 @@ public class CmRefundsProductController extends BaseController {
             if (StringUtils.isNotEmpty(cmReturnedPurchase.getId())) {
                 cmReturnedPurchase = cmReturnedPurchaseDao.get(cmReturnedPurchase.getId());//编辑重置数据
             }
+            if (2 == cmReturnedPurchase.getRefundType()) {
+                cmReturnedPurchase.setFreeRefundFee(cmReturnedPurchase.getRefundFee());
+            }
             NewOrder newOrder = newOrderService.getNewOrder(cmReturnedPurchase);
 
             //统计订单已支付金额
@@ -272,7 +275,16 @@ public class CmRefundsProductController extends BaseController {
 
             //是否可以线上退回
             boolean returnOnline = false;
-            if (cmDiscernReceipt != null && "1".equals(cmDiscernReceipt.getPayWay())) {
+            String status = "";
+            if (null != cmReturnedPurchase.getOnlineShopOrderId()) {
+                //1未结算2部分结算3已结算
+                status = cmReturnedPurchaseDao.findShopOrderSettleStatus(cmReturnedPurchase.getOnlineShopOrderId());
+            }
+            Integer count = cmReturnedPurchaseDao.findRefundType(cmReturnedPurchase.getOrderID());
+            if(count > 0){
+                cmReturnedPurchase.setRefundType(3);
+            }
+            if (cmDiscernReceipt != null && "1".equals(cmDiscernReceipt.getPayWay()) && "1".equals(status)) {
                 returnOnline = true;
             }
             Integer lastReceiptDetailId = cmDiscernReceiptDao.findOrderLastReceiptDetailId(newOrder.getOrderID().toString());
@@ -411,11 +423,14 @@ public class CmRefundsProductController extends BaseController {
                 double refundOnlineFee = refundFee - newOrder.getBalancePayFee();
                 cmReturnedPurchase.setRefundOnlineFee(refundOnlineFee);
                 cmReturnedPurchase.setRefundBalanceFee(newOrder.getBalancePayFee());
-                //查找线上订单已支付金额,申请退款金额不能大于此金额
-                Double onlinePay=cmReturnedPurchaseDao.findOnlinePay(shopOrderId);
-                if(cmReturnedPurchase.getFreeRefundFee()>onlinePay){
-                    model.addAttribute("errorMsg", "退款金额不能大于已付金额");
-                    return applyRefound(cmReturnedPurchase, request, response, model);
+                if (2 == cmReturnedPurchase.getRefundType()) {
+                    //查找线上订单已支付金额,申请退款金额不能大于此金额
+                    Double onlinePay = cmReturnedPurchaseDao.findOnlinePay(shopOrderId);
+                    if (cmReturnedPurchase.getFreeRefundFee() > onlinePay) {
+                        model.addAttribute("errorMsg", "退款金额不能大于已付金额");
+                        cmReturnedPurchase.setOnlineShopOrderId(shopOrderId);
+                        return applyRefound(cmReturnedPurchase, request, response, model);
+                    }
                 }
             } else if ("1".equals(cmReturnedPurchase.getReturnedWay()) && cmReturnedPurchase.getRefundBalanceFee() == 0d) {
                 //线上支付,全部退余额
@@ -432,14 +447,14 @@ public class CmRefundsProductController extends BaseController {
             }
 
             //判断退款金额和打款金额是否一致
-            if(1==cmReturnedPurchase.getRefundType()){
+            if (1 == cmReturnedPurchase.getRefundType()) {
                 double v = totalRefundFee - refundFee;
                 if (v > 0.1 || v < -0.1) {
                     model.addAttribute("errorMsg", "各退款方式的金额之和不等于退款总金额,请重新计算后再提交申请");
                     return applyRefound(cmReturnedPurchase, request, response, model);
                 }
-            }else if (2 == cmReturnedPurchase.getRefundType()){
-                if(!(cmReturnedPurchase.getReturnedWay()).contains("2")){
+            } else if (2 == cmReturnedPurchase.getRefundType()) {
+                if (!(cmReturnedPurchase.getReturnedWay()).contains("2")) {
                     double v = totalRefundFee - cmReturnedPurchase.getFreeRefundFee();
                     if (v > 0.1 || v < -0.1) {
                         model.addAttribute("errorMsg", "各退款方式的金额之和不等于退款总金额,请重新计算后再提交申请");

+ 4 - 0
src/main/java/com/caimei/modules/order/dao/CmReturnedPurchaseDao.java

@@ -45,4 +45,8 @@ public interface CmReturnedPurchaseDao extends CrudDao<CmReturnedPurchase> {
     Double findPayAmount(String orderRequestNo);
 
     Double findOnlinePay(Integer shopOrderId);
+
+    String findShopOrderSettleStatus(Integer onlineShopOrderId);
+
+    Integer findRefundType(Integer orderID);
 }

+ 56 - 0
src/main/java/com/caimei/modules/order/entity/CmReturnedPurchase.java

@@ -506,4 +506,60 @@ public class CmReturnedPurchase extends DataEntity<CmReturnedPurchase> {
     public void setEndTime(String endTime) {
         this.endTime = endTime;
     }
+
+    @Override
+    public String toString() {
+        return "CmReturnedPurchase{" +
+                "returnedNo='" + returnedNo + '\'' +
+                ", orderID=" + orderID +
+                ", organizeID=" + organizeID +
+                ", orderNo='" + orderNo + '\'' +
+                ", userName='" + userName + '\'' +
+                ", userID=" + userID +
+                ", status='" + status + '\'' +
+                ", returnedWay='" + returnedWay + '\'' +
+                ", payType='" + payType + '\'' +
+                ", operatingOrderStatus='" + operatingOrderStatus + '\'' +
+                ", returnedPurchaseFee=" + returnedPurchaseFee +
+                ", refundFee=" + refundFee +
+                ", freeRefundFee=" + freeRefundFee +
+                ", image1='" + image1 + '\'' +
+                ", image2='" + image2 + '\'' +
+                ", image3='" + image3 + '\'' +
+                ", image4='" + image4 + '\'' +
+                ", image5='" + image5 + '\'' +
+                ", reviewImage1='" + reviewImage1 + '\'' +
+                ", reviewImage2='" + reviewImage2 + '\'' +
+                ", reviewImage3='" + reviewImage3 + '\'' +
+                ", reviewImage4='" + reviewImage4 + '\'' +
+                ", reviewImage5='" + reviewImage5 + '\'' +
+                ", reviewRemarks='" + reviewRemarks + '\'' +
+                ", returnTime='" + returnTime + '\'' +
+                ", confirmReturnTime='" + confirmReturnTime + '\'' +
+                ", beginReturnTime=" + beginReturnTime +
+                ", endReturnTime=" + endReturnTime +
+                ", beginConfirmReturnTime=" + beginConfirmReturnTime +
+                ", endConfirmReturnTime=" + endConfirmReturnTime +
+                ", cmReturnedPurchaseProductList=" + cmReturnedPurchaseProductList +
+                ", shopOrderReturnedList=" + shopOrderReturnedList +
+                ", productList=" + productList +
+                ", bankAccountName='" + bankAccountName + '\'' +
+                ", bankAccountNo='" + bankAccountNo + '\'' +
+                ", openBank='" + openBank + '\'' +
+                ", bankAccountType='" + bankAccountType + '\'' +
+                ", refundBalanceFee=" + refundBalanceFee +
+                ", refundOnlineFee=" + refundOnlineFee +
+                ", refundOfflineFee=" + refundOfflineFee +
+                ", applicationUserID=" + applicationUserID +
+                ", reviewUserID=" + reviewUserID +
+                ", applicationUserName='" + applicationUserName + '\'' +
+                ", reviewUserName='" + reviewUserName + '\'' +
+                ", name='" + name + '\'' +
+                ", orderType=" + orderType +
+                ", refundType=" + refundType +
+                ", beginTime='" + beginTime + '\'' +
+                ", endTime='" + endTime + '\'' +
+                ", onlineShopOrderId=" + onlineShopOrderId +
+                '}';
+    }
 }

+ 85 - 91
src/main/java/com/caimei/modules/order/service/CmReturnedPurchaseService.java

@@ -177,7 +177,7 @@ public class CmReturnedPurchaseService extends CrudService<CmReturnedPurchaseDao
         if (num <= 0) {
             return "请填写退货/取消数量";
         }
-        if(2==cmReturnedPurchase.getRefundType()){
+        if (2 == cmReturnedPurchase.getRefundType()) {
             cmReturnedPurchase.setRefundFee(cmReturnedPurchase.getFreeRefundFee());
             cmReturnedPurchase.setReturnedPurchaseFee(cmReturnedPurchase.getFreeRefundFee());
         }
@@ -234,30 +234,32 @@ public class CmReturnedPurchaseService extends CrudService<CmReturnedPurchaseDao
                 }
             }
         }
-        if (newOrder.getPromotionFullReduction() != null) {
-            //减去促销满减金额
-            returnedPurchaseFee = returnedPurchaseFee - newOrder.getPromotionFullReduction();
-        }
-        if (newOrder.getCouponAmount() > 0) {
-            //减去优惠券金额
-            returnedPurchaseFee = MathUtil.sub(returnedPurchaseFee, newOrder.getCouponAmount()).doubleValue();
-        }
-        cmReturnedPurchase.setReturnedPurchaseFee(returnedPurchaseFee);
-        refundFee += getRefundFee(newOrder, cmReturnedPurchase, freightNum);
-        //充值或缴纳订金订单
-        if (rechargeGoods) {
-            CmUser user = cmUserDao.get(newOrder.getUserID().toString());
-            if (user != null && user.getAbleUserMoney() != null && user.getAbleUserMoney() < refundFee) {
-                refundFee = user.getAbleUserMoney();
+        if (1 == cmReturnedPurchase.getRefundType()) {
+            if (newOrder.getPromotionFullReduction() != null) {
+                //减去促销满减金额
+                returnedPurchaseFee = returnedPurchaseFee - newOrder.getPromotionFullReduction();
             }
-            cmReturnedPurchase.setReturnedPurchaseFee(refundFee);
-            if (user != null) {
-                //冻结余额
-                user.setAbleUserMoney(user.getAbleUserMoney() - refundFee);
-                cmUserDao.updateMoney(user);
+            if (newOrder.getCouponAmount() > 0) {
+                //减去优惠券金额
+                returnedPurchaseFee = MathUtil.sub(returnedPurchaseFee, newOrder.getCouponAmount()).doubleValue();
+            }
+            cmReturnedPurchase.setReturnedPurchaseFee(returnedPurchaseFee);
+            refundFee += getRefundFee(newOrder, cmReturnedPurchase, freightNum);
+            //充值或缴纳订金订单
+            if (rechargeGoods) {
+                CmUser user = cmUserDao.get(newOrder.getUserID().toString());
+                if (user != null && user.getAbleUserMoney() != null && user.getAbleUserMoney() < refundFee) {
+                    refundFee = user.getAbleUserMoney();
+                }
+                cmReturnedPurchase.setReturnedPurchaseFee(refundFee);
+                if (user != null) {
+                    //冻结余额
+                    user.setAbleUserMoney(user.getAbleUserMoney() - refundFee);
+                    cmUserDao.updateMoney(user);
+                }
             }
+            cmReturnedPurchase.setRefundFee(refundFee);
         }
-        cmReturnedPurchase.setRefundFee(refundFee);
         cmReturnedPurchaseDao.update(cmReturnedPurchase);
         return null;
     }
@@ -758,19 +760,18 @@ public class CmReturnedPurchaseService extends CrudService<CmReturnedPurchaseDao
      *
      * @param shopOrderIds
      */
-    public void theOnlineRefund(List<Integer> shopOrderIds, Double refundOnlineFee) {
+    public void theOnlineRefund(List<Integer> shopOrderIds, Double refundOnlineFee) throws Exception {
         List<CmReceiptOrderRelation> relationList = cmReceiptOrderRelationDao.findByShopOrderIds(shopOrderIds);
         if (null != relationList && relationList.size() > 0) {
             for (CmReceiptOrderRelation orderRelation : relationList) {
                 //cdr表payway为1纯线上收款
                 if ("1".equals(orderRelation.getPayWay())) {
                     String value = "";
-                    refundOnlineFee = MathUtil.sub(refundOnlineFee, Double.parseDouble(orderRelation.getAssociateAmount())).doubleValue();
-                    if (refundOnlineFee > 0) {
+                    double chargeFee = MathUtil.sub(refundOnlineFee, Double.parseDouble(orderRelation.getAssociateAmount())).doubleValue();
+                    if (chargeFee > 0) {
                         //要退的钱大于本次交易金额
                         value = orderRelation.getAssociateAmount();
-                    }
-                    if (refundOnlineFee < 0) {
+                    }else{
                         value = refundOnlineFee.toString();
                     }
                     //不同产品区分
@@ -795,9 +796,9 @@ public class CmReturnedPurchaseService extends CrudService<CmReturnedPurchaseDao
                             Double payAmount = cmReturnedPurchaseDao.findPayAmount(orderRelation.getOrderRequestNo());
                             Double charge = 0d;
                             //个人0.2%企业10
-                            if("12".equals(orderRelation.getPayType())){
+                            if ("12".equals(orderRelation.getPayType())) {
                                 charge = MathUtil.mul(payAmount, 0.002, 2).doubleValue();
-                            }else{
+                            } else {
                                 charge = 10d;
                             }
                             //0.1%手续费,转回金额*99.9%=payAmount
@@ -910,7 +911,7 @@ public class CmReturnedPurchaseService extends CrudService<CmReturnedPurchaseDao
         }
     }
 
-    public void onlinePay(String orderRequestNo, String money, Integer shopOrderId) {
+    public void onlinePay(String orderRequestNo, String money, Integer shopOrderId) throws Exception {
         AppPayRefundOrderVo orderVo = new AppPayRefundOrderVo();
         orderVo.setP1_bizType("AppPayRefund");
         String splitCode = cmReturnedPurchaseDao.findSplitCode(shopOrderId);
@@ -922,47 +923,43 @@ public class CmReturnedPurchaseService extends CrudService<CmReturnedPurchaseDao
         orderVo.setP4_refundOrderId("TK" + tk + orderRequestNo);
         //退款金额
         orderVo.setP5_amount(money);
-        try {
-            Map<String, String> map = MyBeanUtils.convertBean(orderVo, new LinkedHashMap());
-            String oriMessage = MyBeanUtils.getSignedByPresetParameter(map, AppPayRefundOrderVo.NEED_SIGN_PARAMS);
-            oriMessage += Constant.SAOMA;
-            String sign = Disguiser.disguiseMD5(oriMessage.trim());
-            logger.info("签名串:" + sign);
-            map.put("sign", sign);
-            logger.info("发送参数:" + map);
-            Map<String, Object> resultMap = HttpClientService.getHttpResp(map, Constant.REQUEST_URL);
-            logger.info("响应结果:" + resultMap);
-            if ((Integer) resultMap.get("statusCode") == HttpStatus.SC_OK) {
-                String resultMsg = (String) resultMap.get("response");
-                AppPayRefundOrderResponseVo orderResponseVo = JSONObject.parseObject(resultMsg, AppPayRefundOrderResponseVo.class);
-                String assemblyRespOriSign = MyBeanUtils.getSignedByPresetParameter(orderResponseVo, AppPayRefundOrderResponseVo.NEED_SIGN_PARAMS);
-                assemblyRespOriSign += Constant.SAOMA;
-                logger.info("组装返回结果签名串:" + assemblyRespOriSign);
-                String responseSign = orderResponseVo.getSign();
-                logger.info("响应签名:" + responseSign);
-                String checkSign = Disguiser.disguiseMD5(assemblyRespOriSign.trim());
-                if (checkSign.equals(responseSign)) {
-                    if ("0001".equals(orderResponseVo.getRt2_retCode())) {
-                        CmRefundRecord cmRefundRecord = new CmRefundRecord();
-                        cmRefundRecord.setRefundAmount(Double.parseDouble(money));
-                        cmRefundRecord.setOrderRequestNo(orderRequestNo);
-                        cmRefundRecord.setShopOrderId(shopOrderId);
-                        cmReturnedPurchaseDao.insertCmRefundRecord(cmRefundRecord);
-                        logger.info("第三方退款成功>>>>>>>shopOrderId>>>" + shopOrderId);
-                    } else {
-                        logger.error("退款失败========================" + orderResponseVo.getRt5_orderId() + "-" + orderResponseVo.getRt3_retMsg());
-                        throw new Exception("第三方退款失败!");
-                    }
+        Map<String, String> map = MyBeanUtils.convertBean(orderVo, new LinkedHashMap());
+        String oriMessage = MyBeanUtils.getSignedByPresetParameter(map, AppPayRefundOrderVo.NEED_SIGN_PARAMS);
+        oriMessage += Constant.SAOMA;
+        String sign = Disguiser.disguiseMD5(oriMessage.trim());
+        logger.info("签名串:" + sign);
+        map.put("sign", sign);
+        logger.info("发送参数:" + map);
+        Map<String, Object> resultMap = HttpClientService.getHttpResp(map, Constant.REQUEST_URL);
+        logger.info("响应结果:" + resultMap);
+        if ((Integer) resultMap.get("statusCode") == HttpStatus.SC_OK) {
+            String resultMsg = (String) resultMap.get("response");
+            AppPayRefundOrderResponseVo orderResponseVo = JSONObject.parseObject(resultMsg, AppPayRefundOrderResponseVo.class);
+            String assemblyRespOriSign = MyBeanUtils.getSignedByPresetParameter(orderResponseVo, AppPayRefundOrderResponseVo.NEED_SIGN_PARAMS);
+            assemblyRespOriSign += Constant.SAOMA;
+            logger.info("组装返回结果签名串:" + assemblyRespOriSign);
+            String responseSign = orderResponseVo.getSign();
+            logger.info("响应签名:" + responseSign);
+            String checkSign = Disguiser.disguiseMD5(assemblyRespOriSign.trim());
+            if (checkSign.equals(responseSign)) {
+                if ("0001".equals(orderResponseVo.getRt2_retCode())) {
+                    CmRefundRecord cmRefundRecord = new CmRefundRecord();
+                    cmRefundRecord.setRefundAmount(Double.parseDouble(money));
+                    cmRefundRecord.setOrderRequestNo(orderRequestNo);
+                    cmRefundRecord.setShopOrderId(shopOrderId);
+                    cmReturnedPurchaseDao.insertCmRefundRecord(cmRefundRecord);
+                    logger.info("第三方退款成功>>>>>>>shopOrderId>>>" + shopOrderId);
                 } else {
-                    logger.error("退款验签失败");
-                    throw new Exception("第三方退款验签失败!");
+                    logger.error("退款失败========================" + orderResponseVo.getRt5_orderId() + "-" + orderResponseVo.getRt3_retMsg());
+                    throw new Exception("第三方退款失败!");
                 }
             } else {
-                logger.error("退款请求失败");
-                throw new Exception("第三方退款请求失败!");
+                logger.error("退款验签失败");
+                throw new Exception("第三方退款验签失败!");
             }
-        } catch (Exception e) {
-            e.printStackTrace();
+        } else {
+            logger.error("退款请求失败");
+            throw new Exception("第三方退款请求失败!");
         }
     }
 
@@ -970,7 +967,7 @@ public class CmReturnedPurchaseService extends CrudService<CmReturnedPurchaseDao
     //1.本方法内转账手续费等待到账再发起退款请求
     //2.异步
     //3.回调
-    void unionRefund(String orderRequestNo, String money, Integer shopOrderId) {
+    void unionRefund(String orderRequestNo, String money, Integer shopOrderId) throws Exception {
         Map<String, String> sPara = new HashMap<String, String>();
         sPara.put("P1_bizType", "OnlineRefund");
         sPara.put("P2_orderId", orderRequestNo);
@@ -985,34 +982,31 @@ public class CmReturnedPurchaseService extends CrudService<CmReturnedPurchaseDao
                 append(money).append("&").append("TK" + orderRequestNo).append("&").append("无").append("&").append("&").append(Constant.WANGYIN);
         String sign = Disguiser.disguiseMD5(sb.toString());
         sPara.put("sign", sign);
-        try {
-            OnlineRefundData on = postForm(sPara, Constant.YL, sign, OnlineRefundData.class);
-            JSONObject jsonObject = JSONObject.parseObject(JSONObject.toJSONString(on), JSONObject.class);
-            if (!"0000".equals(on.getRt2_retCode())) {
-                logger.info("退款失败:" + on.toString());
-                throw new Exception("退款失败");
+        OnlineRefundData on = postForm(sPara, Constant.YL, sign, OnlineRefundData.class);
+        JSONObject jsonObject = JSONObject.parseObject(JSONObject.toJSONString(on), JSONObject.class);
+        if (!"0000".equals(on.getRt2_retCode())) {
+            logger.info("退款失败:" + on.toString());
+            throw new Exception("退款失败");
+        } else {
+            String assemblyRespOriSign = MyBeanUtils.getSignedByPresetParameter(on, OnlineRefundData.NEED_SIGN_PARAMS);
+            logger.info("组装返回结果签名串:" + assemblyRespOriSign);
+            assemblyRespOriSign += Constant.SPLIT + Constant.WANGYIN;
+            String checkSign = Disguiser.disguiseMD5(assemblyRespOriSign.trim());
+            if (!checkSign.equals(on.getSign())) {
+                logger.error("验签失败========================" + on.getRt3_retMsg());
+                throw new Exception("第三方退款失败!");
             } else {
-                String assemblyRespOriSign = MyBeanUtils.getSignedByPresetParameter(on, OnlineRefundData.NEED_SIGN_PARAMS);
-                logger.info("组装返回结果签名串:" + assemblyRespOriSign);
-                assemblyRespOriSign += Constant.SPLIT + Constant.WANGYIN;
-                String checkSign = Disguiser.disguiseMD5(assemblyRespOriSign.trim());
-                if (!checkSign.equals(on.getSign())) {
-                    logger.error("验签失败========================" + on.getRt3_retMsg());
-                    throw new Exception("第三方退款失败!");
-                } else {
-                    CmRefundRecord cmRefundRecord = new CmRefundRecord();
-                    cmRefundRecord.setRefundAmount(Double.parseDouble(money));
-                    cmRefundRecord.setOrderRequestNo(orderRequestNo);
-                    cmRefundRecord.setShopOrderId(shopOrderId);
-                    cmReturnedPurchaseDao.insertCmRefundRecord(cmRefundRecord);
-                    logger.info("第三方退款成功");
-                }
+                CmRefundRecord cmRefundRecord = new CmRefundRecord();
+                cmRefundRecord.setRefundAmount(Double.parseDouble(money));
+                cmRefundRecord.setOrderRequestNo(orderRequestNo);
+                cmRefundRecord.setShopOrderId(shopOrderId);
+                cmReturnedPurchaseDao.insertCmRefundRecord(cmRefundRecord);
+                logger.info("第三方退款成功");
             }
-        } catch (Exception e) {
-            e.printStackTrace();
         }
     }
 
+
     public <T> T postForm(Map<String, String> params, String url, String sign, Class<T> clazz) {
         FormBody.Builder builder = new FormBody.Builder();
         for (Map.Entry<String, String> entry : params.entrySet()) {

+ 0 - 1
src/main/java/com/caimei/modules/order/service/NewOrderService.java

@@ -1364,7 +1364,6 @@ public class NewOrderService extends CrudService<NewOrderDao, NewOrder> {
             if(null!=cmReturnedPurchase.getOnlineShopOrderId()&&0<cmReturnedPurchase.getOnlineShopOrderId()){
                  shopOrders = newShopOrderDao.findListByShopOrderId(cmReturnedPurchase.getOnlineShopOrderId());
             }
-            logger.info("shopOrders》》》》》" + shopOrders.toString());
             if (CollectionUtils.isNotEmpty(shopOrders)) {
                 for (NewShopOrder shopOrder : shopOrders) {
                     //获取退货退款记录

+ 10 - 1
src/main/resources/mappings/modules/order/CmReturnedPurchaseMapper.xml

@@ -41,7 +41,7 @@
 		c.userName as "userName",
 		c.name as "name",
 		c.userOrganizeID as "userOrganizeId",
-		a.refundType as "refundType"
+		ifnull(a.refundType,1) as "refundType"
 	</sql>
 
 	<sql id="cmReturnedPurchaseJoins">
@@ -449,4 +449,13 @@
 		LEFT JOIN cm_receipt_order_relation cror ON cror.receiptID=cdr.Id
 		WHERE shopOrderId=#{shopOrderId}
 	</select>
+	<select id="findShopOrderSettleStatus" resultType="java.lang.String">
+		select settleStatus from cm_shop_order where shopOrderID = #{onlineShopOrderId}
+	</select>
+	<select id="findRefundType" resultType="java.lang.Integer">
+		SELECT COUNT(*) FROM cm_returned_purchase
+		WHERE orderId=#{orderID}
+		  AND delflag = 0
+		  AND refundtype=2
+	</select>
 </mapper>

+ 63 - 19
src/main/webapp/WEB-INF/views/modules/bulkpurchase/applyRefoundForm.jsp

@@ -70,8 +70,6 @@
                             }
                         }
                         if(checked1){
-
-                        if (checked1) {
                             var refundBalanceFee = $('#refundBalanceFee').val();
                             if( refundBalanceFee == null || refundBalanceFee == ""){
                                 alertx("请填写账户余额退款数");
@@ -270,12 +268,21 @@
             <td><b>退款编号:</b>
                 ${empty returnedNo?'':(returnedNo)}
             </td>
+            <c:if test="${cmReturnedPurchase.refundType eq 1 or cmReturnedPurchase.refundType eq 2}">
             <td><b>退款模式:</b>
                 <form:select path="refundType" class="input-medium" id="refundType" onchange="changeType()">
                     <form:option value="1">按商品金额退款</form:option>
                     <form:option value="2">自定义金额退款</form:option>
                 </form:select>
             </td>
+            </c:if>
+            <c:if test="${cmReturnedPurchase.refundType eq 3}">
+                <td><b>退款模式:</b>
+                    <form:select path="refundType" class="input-medium" id="refundType" onchange="changeType()">
+                        <form:option value="2">自定义金额退款</form:option>
+                    </form:select>
+                </td>
+            </c:if>
             <td><b>申请时间:</b>
                     ${returnTime}
             </td>
@@ -287,7 +294,7 @@
                 <from:input id="freeRefundFee" path="freeRefundFee" onkeyup="num(this)"   placeholder="¥0.00" value="${empty cmReturnedPurchase.freeRefundFee?'':(cmReturnedPurchase.freeRefundFee)}"></from:input>
             </td>
             </c:if>
-            <c:if test="${cmReturnedPurchase.refundType eq 2}">
+            <c:if test="${cmReturnedPurchase.refundType eq 2 or cmReturnedPurchase.refundType eq 3}">
                 <td id="spt" hidden><b>申请金额:</b>
                     <span class="refundFee"><fmt:formatNumber value="${empty cmReturnedPurchase.refundFee?'0.00':(cmReturnedPurchase.refundFee)}" pattern="#0.00"/></span>元
                 </td>
@@ -828,10 +835,37 @@
     function changeType(){
         var refundType =  $("#refundType").val();
         if(1==refundType){
+            var orderStatus = $("#orderStatus").val();
+            var isBuFenFaHuo = $("#isBuFenFaHuo").val();
+            if(isBuFenFaHuo == "true"){
+                $(".shopOrderInput").attr("readonly",true);
+                /*$(".shopOrderInput1").attr("readonly",false);*///设置邮费的可修改
+            };
+
+            //有促销商品订单不可修改
+            if (${isPromotions}){
+                $(".shopOrderInput").attr("readonly",true);
+            }
+
+            //线上全部付款订单不可修改
+            if (${order.receiptStatus == 3 && cmDiscernReceipt.payWay eq 1}){
+                $(".shopOrderInput").attr("readonly",true);
+            }
+
+            // 有优惠不可修改,只能全退
+            if (${order.discountAmount > 0 and order.onlinePayFlag eq 0}){
+                $(".shopOrderInput").attr("readonly",true);
+            }
+
+            //充值订单不可修改
+            if (${order.rechargeGoods != null && (order.rechargeGoods eq 1 || order.rechargeGoods eq 2)}){
+                $(".shopOrderInput").attr("readonly",true);
+            }
             $("#zdy").hide();
             $("#spt").show();
         }
-        if(2==refundType){
+        if(2==refundType || 3==refundType) {
+            $("input[readonly='readonly']").removeProp("readonly");
             $("#spt").hide();
             $("#zdy").show();
         }
@@ -855,6 +889,7 @@
     $(function () {
         var orderStatus = $("#orderStatus").val();
         var isBuFenFaHuo = $("#isBuFenFaHuo").val();
+        var refundType =  $("#refundType").val();
         if(isBuFenFaHuo == "true"){
             $(".shopOrderInput").attr("readonly",true);
             /*$(".shopOrderInput1").attr("readonly",false);*///设置邮费的可修改
@@ -885,6 +920,10 @@
             $(".shopOrderInput").attr("readonly",true);
         }
 
+        if(2==refundType || 3==refundType){
+            $("input[readonly='readonly']").removeProp("readonly");
+        }
+
         if (${order.rechargeGoods != null && order.rechargeGoods eq 1 && ableUserMoney eq 0}){
             alertx("本订单为缴纳订金订单,机构的余额为¥0.00,不能进行退款", function(){
                 window.location.href = "${ctx}/order/orderList";
@@ -1096,28 +1135,33 @@
     }
 
     function setApplicationReturnedNum(a,b){
+        var refundType =  $("#refundType").val();
         var num = $("#applicationReturnedNum"+a+b).val();
         var max = Number($("#shipped"+a+b).html()  - $("#returning"+a+b).html() - $("#returned"+a+b).html());
-        if(num > max){
-            alertx("退货数量不能大于已发货数量(之前已退不算)!");
-            $("#applicationReturnedNum"+a+b).val(0)
-        }
-        if (num !== max && ${returnOnline}){
-            alertx("退货数量只能等于已发货数量(之前已退不算)!");
-            $("#applicationReturnedNum"+a+b).val(0)
+        if(1==refundType){
+            if(num > max){
+                alertx("退货数量不能大于已发货数量(之前已退不算)!");
+                $("#applicationReturnedNum"+a+b).val(0)
+            }
+            if (num !== max && ${returnOnline}){
+                alertx("退货数量只能等于已发货数量(之前已退不算)!");
+                $("#applicationReturnedNum"+a+b).val(0)
+            }
         }
-
     };
     function setApplicationCancelNum(a,b){
+        var refundType =  $("#refundType").val();
         var num = $("#applicationCancelNum"+a+b).val();
         var max = Number($("#toBeShipped"+a+b).html());
-        if(num > max){
-            alertx("取消数量不能大于待发数量,请重新填写!");
-            $("#applicationCancelNum"+a+b).val(0)
-        }
-        if (num !== max && ${returnOnline}){
-            alertx("取消数量只能等于待发数量,请重新填写!");
-            $("#applicationCancelNum"+a+b).val(0)
+        if(1==refundType){
+            if(num > max){
+                alertx("取消数量不能大于待发数量,请重新填写!");
+                $("#applicationCancelNum"+a+b).val(0)
+            }
+            if (num !== max && ${returnOnline}){
+                alertx("取消数量只能等于待发数量,请重新填写!");
+                $("#applicationCancelNum"+a+b).val(0)
+            }
         }
     };
 </script>

+ 3 - 0
src/main/webapp/WEB-INF/views/modules/bulkpurchase/orderConfirmReturnRecord.jsp

@@ -140,6 +140,9 @@
             <td><b>退款编号:</b>
                     ${empty cmReturnedPurchase.returnedNo?'':(cmReturnedPurchase.returnedNo)}
             </td>
+            <td><b>退款模式:</b>
+                    ${cmReturnedPurchase.refundType eq 1?'按商品退回':'自定义金额退款'}
+            </td>
             <td><b>申请时间:</b>
                     ${cmReturnedPurchase.returnTime}
             </td>

+ 2 - 2
src/main/webapp/WEB-INF/views/modules/order/orderDetail.jsp

@@ -678,7 +678,7 @@
                                 </c:if>
                                 <c:if test="${order.toAudit ne 1}">
                                     <c:if test="${order.applyReturnedPurchaseFlag eq 1}">
-                                        <a href="${ctx}/bulkpurchase/cmRefundsProduct/applyRefound.rpc?orderID=${order.orderID}"
+                                        <a href="${ctx}/bulkpurchase/cmRefundsProduct/applyRefound.rpc?orderID=${order.orderID}&refundType=1"
                                            <c:if test="${order.status == 21 || order.status == 22 || order.status == 23}">onclick="return confirmx('部分收款的订单、申请退款只能申请全部退款!', this.href)"
                                         </c:if>
                                         >申请退款</a>
@@ -789,7 +789,7 @@
                             </c:if>
                             <c:if test="${order.toAudit ne 1}">
                                 <c:if test="${order.applyReturnedPurchaseFlag eq 1}">
-                                    <a href="${ctx}/bulkpurchase/cmRefundsProduct/applyRefound.rpc?orderID=${order.orderID}&onlineShopOrderId=${shopOrder.shopOrderID}"
+                                    <a href="${ctx}/bulkpurchase/cmRefundsProduct/applyRefound.rpc?orderID=${order.orderID}&onlineShopOrderId=${shopOrder.shopOrderID}&refundType=1"
                                        <c:if test="${order.status == 21 || order.status == 22 || order.status == 23}">onclick="return confirmx('部分收款的订单、申请退款只能申请全部退款!', this.href)"
                                     </c:if>
                                     >申请退款</a>