Procházet zdrojové kódy

用户申请退款

Veronique před 2 roky
rodič
revize
81a3054a59

+ 4 - 0
conf/esTemplate/orderaftersalebill.json

@@ -80,6 +80,10 @@
         "type": "text",
         "index": "not_analyzed"
       },
+      "refundReasonCodes": {
+        "type": "text",
+        "index": "not_analyzed"
+      },
       "productsRefundDetail": {
         "type": "text",
         "index": "not_analyzed"

+ 11 - 1
conf/esTemplate/orderrefundrequest.json

@@ -36,7 +36,13 @@
       },
       "outAfterSaleId": {
         "type": "text",
-        "index": "not_analyzed"
+        "index": "analyzed",
+        "analyzer": "codefull_analyzer",
+        "fields": {
+          "raw": {
+            "type": "keyword"
+          }
+        }
       },
       "requestStatus": {
         "type": "integer"
@@ -57,6 +63,10 @@
       "refundProdCount": {
         "type": "integer"
       },
+      "refundReasonCodes": {
+        "type": "text",
+        "index": "not_analyzed"
+      },
       "refundProductsDetail": {
         "type": "text",
         "index": "not_analyzed"

+ 2 - 2
conf/script/1000/init/Init_16_BusinessOrder.groovy

@@ -22,9 +22,9 @@ static def createRunnable(ESClient esClient, RedisService redisService, Supplier
                 ESKeys.INDEX_CONFIG,
                 Utility.ofMap(ESKeys.ES_DELIVER_ORDER_STEP_TYPE, "orderStep.json"))
 
-        esClient.checkIndexEx(supplierService.getDateYearESIndex(supplierCode, ESKeys.ES_DELIVER_REFUND_ORDER_REQUEST_INDEX, 0),
+        esClient.checkIndexEx(supplierService.getDateYearESIndex(supplierCode, ESKeys.ES_DELIVER_ORDER_REFUND_REQUEST_INDEX, 0),
                 ESKeys.INDEX_CONFIG,
-                Utility.ofMap(ESKeys.ES_DELIVER_REFUND_ORDER_REQUEST_TYPE, "orderrefundrequest.json"))
+                Utility.ofMap(ESKeys.ES_DELIVER_ORDER_REFUND_REQUEST_TYPE, "orderrefundrequest.json"))
 
     } as Runnable
 }

+ 2 - 1
conf/script/1000/orderApi/BE_Order_CancelOrder_DYLK.groovy

@@ -10,6 +10,7 @@ import com.dderp.common.datas.ERPModule
 import com.dderp.common.datas.ESKeys
 import com.dderp.common.datas.ReadOrderOption
 import com.dderp.common.datas.flycat.PlatformType
+import com.dderp.common.datas.flycat.VoidFlagStatus
 import com.dderp.common.entity.base.InvokeCallParams
 import com.dderp.common.entity.base.InvokeCallResult
 import com.dderp.common.entity.order.BusinessOrder
@@ -121,7 +122,7 @@ class BE_Order_CancelOrder_DYLK implements BusinessExecutor<InvokeCallParams, In
         BusinessOrder esOrder = orderResult.result.get(0) //这么查只可能有一个
         OrderFinances orderFinances = esOrder.orderFinances
 
-        esOrder.setVoidFlagIn(100)
+        esOrder.setVoidFlagIn(VoidFlagStatus.invalid.value)
         BusinessOrder.update(esOrder, currentUser.id)
 
         OrderStep orderStep = orderStepService.parseOrderStep(esOrder.id,

+ 2 - 1
conf/script/1000/orderApi/BE_Order_RejectOrder_DYLK.groovy

@@ -11,6 +11,7 @@ import com.dderp.common.datas.flycat.BusinessOrderStatus
 import com.dderp.common.datas.ERPModule
 import com.dderp.common.datas.ESKeys
 import com.dderp.common.datas.flycat.PlatformType
+import com.dderp.common.datas.flycat.VoidFlagStatus
 import com.dderp.common.entity.base.InvokeCallParams
 import com.dderp.common.entity.base.InvokeCallResult
 import com.dderp.common.entity.order.BusinessOrder
@@ -120,7 +121,7 @@ class BE_Order_RejectOrder_DYLK implements BusinessExecutor<InvokeCallParams, In
 
         //todo 目前不知道商户拒单是个什么逻辑,暂且认为等同于订单取消
 //        esOrder.setOrderStatus(BusinessOrderStatus.accept.value)
-        esOrder.setVoidFlagIn(100)
+        esOrder.setVoidFlagIn(VoidFlagStatus.invalid.value)
         BusinessOrder.update(esOrder, currentUser.id)
 
         OrderStep orderStep = orderStepService.parseOrderStep(esOrder.id,

+ 45 - 11
conf/script/1000/orderApi/BE_Order_UserRefundRequest_DYLK.groovy

@@ -8,11 +8,13 @@ import com.dderp.common.api.flycat.OrderService
 import com.dderp.common.api.flycat.OrderStepService
 import com.dderp.common.datas.ERPModule
 import com.dderp.common.datas.ESKeys
-import com.dderp.common.datas.flycat.BusinessOrderStatus
 import com.dderp.common.datas.flycat.PlatformType
+import com.dderp.common.datas.flycat.RefundRequestStatus
+import com.dderp.common.datas.flycat.VoidFlagStatus
 import com.dderp.common.entity.base.InvokeCallParams
 import com.dderp.common.entity.base.InvokeCallResult
 import com.dderp.common.entity.order.BusinessOrder
+import com.dderp.common.entity.order.OrderRefundRequest
 import com.dderp.common.entity.order.OrderStep
 import com.dderp.common.entity.site.ERPTokenUser
 import com.dderp.common.entity.store.StorePlatform
@@ -107,18 +109,40 @@ class BE_Order_UserRefundRequest_DYLK implements BusinessExecutor<InvokeCallPara
         if (storePlatform == null) return RetResult.<InvokeCallResult> errorT().retinfo("订单来源平台未知!")
 
         RMap searchParams = new RMap();
-        searchParams.set("incomePlatformId", platformStoreId)
+        searchParams.set("incomePlatformId", storePlatform.id)
         searchParams.set("incomePlatformOrderCode", incomePlatformOrderCode)
 
         RetResult<List<BusinessOrder>> orderResult = orderSearchService.searchBusinessOrderList(searchParams, currentUser, dataSourceId, supplierCode, null)
         if (!orderResult.isSuccess()) return RetResult.<InvokeCallResult> errorT().retinfo(orderResult.retinfo)
 
         BusinessOrder esOrder = orderResult.result.get(0) //这么查只可能有一个
-        esOrder.setOrderStatus(BusinessOrderStatus.accept.value)
+        //构造订单退款申请
+        OrderRefundRequest refundRequest = new OrderRefundRequest()
+        refundRequest.setId(tableIdService.getTableIdMulti("deOrderRefundRequest.id", 1, dataSourceId, String.valueOf(supplierCode)))
+        refundRequest.setIdOrder(esOrder.id)
+        refundRequest.setIdStore(esOrder.idStore)
+        refundRequest.setIdStorePlatform(storePlatform.id)
+        refundRequest.setOutPlatformStoreId(storePlatform.platformStoreId)
+        refundRequest.setPlatformCode(storePlatform.platformCode)
+        refundRequest.setPlatformType(storePlatform.platformType)
+        refundRequest.setPlatformName(storePlatform.platformName)
+        refundRequest.setOutAfterSaleId(invokeOrder["after_sale_id"] as String)
+        refundRequest.setRequestStatus(RefundRequestStatus.init.value)
+        refundRequest.setRefundReasonCodes(invokeOrder["refund_reason"]["reason_code"] as ArrayList)
+        refundRequest.setUserRefundMemo(invokeOrder["refund_reason"]["desc"] as String)
+        refundRequest.setRefundType(invokeOrder["refund_type"] as int)
+        refundRequest.setDeliveryFee(invokeOrder["delivery_fee"] as int)
+        refundRequest.setRefundFee(invokeOrder["refund_fee"] as int)
+        refundRequest.setRefundProdCount(invokeOrder["refund_count"] as int)
+        refundRequest.setRefundProductsDetail(invokeOrder["product_detail"] as String)
+
+        OrderRefundRequest.create(refundRequest, currentUser.id)
+
+        esOrder.setVoidFlagIn(VoidFlagStatus.requestRefund.value)
         BusinessOrder.update(esOrder, currentUser.id)
 
-        OrderStep orderStep = orderStepService.parseOrderStep(esOrder.id, "[" + storePlatform.platformName + "]商家接单完成", storePlatform.platformCode, currentUser)
-
+        OrderStep orderStep = orderStepService.parseOrderStep(esOrder.id, "用户申请退款,原因:" + refundRequest.userRefundMemo,
+                storePlatform.platformCode, currentUser)
 
         //持久化
         //订单主表
@@ -130,11 +154,20 @@ class BE_Order_UserRefundRequest_DYLK implements BusinessExecutor<InvokeCallPara
                 String.valueOf(esOrder.getId()))
                 .setDoc(jsonBuilder()
                         .startObject()
-                        .field("orderStatus", esOrder.orderStatus)
+                        .field("voidFlagIn", esOrder.voidFlagIn)
                         .field("updateBy", esOrder.getUpdateBy())
                         .field("updateTimeLong", esOrder.getUpdateTimeLong())
                         .endObject())
         bulkRequest.add(orderRequest)
+
+        //订单退款申请
+        IndexRequestBuilder refundQueryRequest = esClient.getClient()
+                .prepareIndex(supplierInitService.getDateYearESIndex(supplierCode, ESKeys.ES_DELIVER_ORDER_REFUND_REQUEST_INDEX, 0),
+                        ESKeys.ES_DELIVER_ORDER_REFUND_REQUEST_TYPE)
+                .setId(String.valueOf(refundRequest.id))
+                .setSource(jsonConvert.convertTo(refundRequest), XContentType.JSON)
+        bulkRequest.add(refundQueryRequest)
+
         //订单脚印
         IndexRequestBuilder orderStepRequest = esClient.getClient()
                 .prepareIndex(supplierInitService.getDateYearESIndex(supplierCode, ESKeys.ES_DELIVER_ORDER_STEP_INDEX, 0),
@@ -147,17 +180,18 @@ class BE_Order_UserRefundRequest_DYLK implements BusinessExecutor<InvokeCallPara
         BulkResponse bulkResponse = bulkRequest.get();
         orderDao = tunaService.generate(OrderDao.class)
         if (bulkResponse.hasFailures()) {
-            logger.error("商户接单出错:" + bulkResponse.buildFailureMessage());
-            return RetResult.<InvokeCallResult> errorT().retinfo("商户接单出错:" + esOrder.orderName);
+            logger.error("客户申请退款出错:" + bulkResponse.buildFailureMessage());
+            return RetResult.<InvokeCallResult> errorT().retinfo("客户申请退款出错:" + esOrder.orderName);
         } else {
-            logger.info("商户接单成功");
+            logger.info("客户申请退款成功");
             //写数据库
-            orderDao.acceptBusinessOrder(esOrder,
+            orderDao.requestRefundOrder(esOrder,
+                    refundRequest,
                     [orderStep],
                     dataSourceId,
                     String.valueOf(supplierCode))
 
-            return RetResult.<InvokeCallResult> successT().result(InvokeCallResult.success().data(jsonConvert.convertTo(esOrder)))
+            return RetResult.<InvokeCallResult> successT()
         }
 
     }

+ 2 - 2
conf/sqlroot/com/dderp/business/dao/OrderDao.dql

@@ -86,12 +86,12 @@ insert into $table$ (id, idOrder, idStore, outPlatformStoreId,
 idStorePlatform, platformCode, platformType,
 platformName, outAfterSaleId, applySource,
 billCode, userRefundAmount, totalUserRefundAmount,
-prodCountAfterRefund, productsRemainDetail, productsRefundDetail,
+prodCountAfterRefund, productsRemainDetail, productsRefundDetail, refundReasonCodes,
 createBy, createTime, createTimeLong,
 updateBy, updateTime, updateTimeLong ) values ( #{id}, #{idorder}, #{idstore}, #{outplatformstoreid},
 #{idstoreplatform}, #{platformcode}, #{platformtype},
 #{platformname}, #{outaftersaleid}, #{applysource},
 #{billcode}, #{userrefundamount}, #{totaluserrefundamount},
-#{prodcountafterrefund}, #{productsremaindetail}, #{productsrefunddetail},
+#{prodcountafterrefund}, #{productsremaindetail}, #{productsrefunddetail}, #{refundreasoncodes},
 #{createby}, #{createtime}, #{createtimelong},
 #{updateby}, #{updatetime}, #{updatetimelong} );

+ 6 - 0
conf/初始化业务表.sql

@@ -388,6 +388,12 @@ ALTER TABLE `tbstoreinfo1000`
     ADD COLUMN `loginAccount` varchar(20) NULL AFTER `enableInvoice`,
     ADD COLUMN `loginPass` varchar(200) NULL AFTER `loginAccount`;
 
+ALTER TABLE `deorderrefundrequest1000_current`
+    ADD COLUMN `refundReasonCodes` varchar(100) NULL AFTER `requestStatus`;
+
+ALTER TABLE `deorderaftersalebill1000_current`
+    ADD COLUMN `refundReasonCodes` varchar(100) NULL AFTER `billCode`;
+
 
 
 

+ 10 - 0
ddBusiness/src/main/java/com/dderp/business/dao/OrderDao.java

@@ -66,4 +66,14 @@ public interface OrderDao extends DaoRepository {
                             OrderAfterSaleBill afterSaleBill,
                             List<OrderStep> stepList,
                             @DatabaseShardingBy String dataSourceId, String tableKey);
+
+    @Sharding(databaseShardingStrategy = SupplierDataBaseShardingStrategy.class, tableShardingStrategy = OrderTableShardingStrategy.class)
+    @DAOMethod(operator = OperatorType.UPDATE, owait = OperatorWait.ASNYC)
+    @SqlId(clazz = OrderDao.class, sql = "voidBusinessOrderIn", table = "deBusinessOrder", tableParam = 5, params = {1}, sort = 1)
+    @SqlId(clazz = OrderDao.class, sql = "addOrderRefundRequest", table = "deOrderRefundRequest", tableParam = 5, params = {2}, sort = 2)
+    @SqlId(clazz = OrderDao.class, sql = "addOrderStep", table = "deOrderStep", tableParam = 5, params = {3}, sort = 3)
+    int requestRefundOrder(BusinessOrder businessOrder,
+                           OrderRefundRequest refundRequest,
+                           List<OrderStep> stepList,
+                           @DatabaseShardingBy String dataSourceId, String tableKey);
 }

+ 2 - 2
ddCommon/src/main/java/com/dderp/common/datas/ESKeys.java

@@ -233,7 +233,7 @@ public class ESKeys {
 
 
     //region 订单退款申请
-    public static final String ES_DELIVER_REFUND_ORDER_REQUEST_INDEX = "es.refundorderrequest.index";
-    public static final String ES_DELIVER_REFUND_ORDER_REQUEST_TYPE = "info";
+    public static final String ES_DELIVER_ORDER_REFUND_REQUEST_INDEX = "es.refundorderrequest.index";
+    public static final String ES_DELIVER_ORDER_REFUND_REQUEST_TYPE = "info";
     //endregion
 }

+ 45 - 0
ddCommon/src/main/java/com/dderp/common/datas/flycat/VoidFlagStatus.java

@@ -0,0 +1,45 @@
+package com.dderp.common.datas.flycat;
+
+/**
+ * 平台类别
+ */
+@SuppressWarnings("unused")
+public enum VoidFlagStatus {
+
+    normal("正常", 0),
+
+    requestRefund("用户申请退款",10),
+
+    invalid("已作废", 100);
+
+    private String name;
+    private int value;
+
+    VoidFlagStatus(String name, int value) {
+        this.name = name;
+        this.value = value;
+    }
+
+    public String getName() {
+        return name;
+    }
+
+    public void setName(String name) {
+        this.name = name;
+    }
+
+    public int getValue() {
+        return value;
+    }
+
+    public void setValue(int value) {
+        this.value = value;
+    }
+
+    public static String getName(int value) {
+        for (VoidFlagStatus p : VoidFlagStatus.values()) {
+            if (p.getValue() == value) return p.getName();
+        }
+        return null;
+    }
+}

+ 6 - 3
ddCommon/src/main/java/com/dderp/common/entity/order/OrderAfterSaleBill.java

@@ -47,8 +47,9 @@ public class OrderAfterSaleBill extends BaseEntity {
     @Comment("绑定的该平台系统中的售后单号")
     private String outAfterSaleId;
 
+    @RColumn("refundreasoncodes")
     @Comment("退款原因代码list")
-    private List<Integer> refundReasonCodes = new ArrayList<>();
+    private String refundReasonCodes;
 
     @RColumn("applysource")
     @Comment("售后申请来源")
@@ -153,11 +154,11 @@ public class OrderAfterSaleBill extends BaseEntity {
         this.outAfterSaleId = outAfterSaleId;
     }
 
-    public List<Integer> getRefundReasonCodes() {
+    public String getRefundReasonCodes() {
         return refundReasonCodes;
     }
 
-    public void setRefundReasonCodes(List<Integer> refundReasonCodes) {
+    public void setRefundReasonCodes(String refundReasonCodes) {
         this.refundReasonCodes = refundReasonCodes;
     }
 
@@ -224,4 +225,6 @@ public class OrderAfterSaleBill extends BaseEntity {
     public void setBillCode(String billCode) {
         this.billCode = billCode;
     }
+
+
 }

+ 4 - 3
ddCommon/src/main/java/com/dderp/common/entity/order/OrderRefundRequest.java

@@ -51,8 +51,9 @@ public class OrderRefundRequest extends BaseEntity {
     @RColumn("requeststatus")
     private int requestStatus;
 
+    @RColumn("refundreasoncodes")
     @Comment("退款原因代码list")
-    private List<Integer> refundReasonCodes = new ArrayList<>();
+    private String refundReasonCodes;
 
     @Comment("用户申请时填写的备注信息")
     @RColumn("userrefundmemo")
@@ -159,11 +160,11 @@ public class OrderRefundRequest extends BaseEntity {
         this.requestStatus = requestStatus;
     }
 
-    public List<Integer> getRefundReasonCodes() {
+    public String getRefundReasonCodes() {
         return refundReasonCodes;
     }
 
-    public void setRefundReasonCodes(List<Integer> refundReasonCodes) {
+    public void setRefundReasonCodes(String refundReasonCodes) {
         this.refundReasonCodes = refundReasonCodes;
     }