Explorar o código

DYLK全接口对接完成

Veronique %!s(int64=2) %!d(string=hai) anos
pai
achega
bd6f25da0b
Modificáronse 25 ficheiros con 1061 adicións e 177 borrados
  1. 4 0
      conf/esTemplate/orderaftersalebill.json
  2. 3 0
      conf/esTemplate/orderfinances.json
  3. 5 1
      conf/script/1000/orderApi/BE_Order_AcceptOrder_DYLK.groovy
  4. 192 0
      conf/script/1000/orderApi/BE_Order_BillConfirm_DYLK.groovy
  5. 4 0
      conf/script/1000/orderApi/BE_Order_CancelOrder_DYLK.groovy
  6. 4 0
      conf/script/1000/orderApi/BE_Order_CompleteOrder_DYLK.groovy
  7. 11 3
      conf/script/1000/orderApi/BE_Order_CreateOrder_DYLK.groovy
  8. 267 0
      conf/script/1000/orderApi/BE_Order_DeliveryChange_DYLK.groovy
  9. 226 0
      conf/script/1000/orderApi/BE_Order_PartRefund_DYLK.groovy
  10. 6 2
      conf/script/1000/orderApi/BE_Order_ProcessRefund_DYLK.groovy
  11. 4 0
      conf/script/1000/orderApi/BE_Order_RejectOrder_DYLK.groovy
  12. 4 1
      conf/script/1000/orderApi/BE_Order_UserRefundRequest_DYLK.groovy
  13. 179 0
      conf/script/1000/storeApi/BE_Store_BindStorePlatform_DYLK.groovy
  14. 0 148
      conf/script/1000/storeApi/BE_Store_BindStorePlatform_Douyin.groovy
  15. 1 1
      conf/script/1000/storeApi/BE_Store_GenerateStoreAuthUrl_Douyin.groovy
  16. 36 17
      conf/sqlroot/com/dderp/business/dao/OrderDao.dql
  17. 2 1
      conf/sqlroot/com/dderp/business/dao/StoreDao.dql
  18. 5 0
      conf/初始化业务表.sql
  19. 33 0
      ddBusiness/src/main/java/com/dderp/business/dao/OrderDao.java
  20. 4 2
      ddBusiness/src/main/java/com/dderp/business/dao/StoreDao.java
  21. 14 0
      ddBusiness/src/main/java/com/dderp/business/service/flycat/DouyinServiceImpl.java
  22. 1 1
      ddCommon/src/main/java/com/dderp/common/api/flycat/DouyinService.java
  23. 13 0
      ddCommon/src/main/java/com/dderp/common/entity/order/OrderAfterSaleBill.java
  24. 12 0
      ddCommon/src/main/java/com/dderp/common/entity/order/OrderFinances.java
  25. 31 0
      ddWebCore/src/main/java/com/dderp/webcore/servlet/OrderCallServlet.java

+ 4 - 0
conf/esTemplate/orderaftersalebill.json

@@ -87,6 +87,10 @@
         "type": "text",
         "index": "not_analyzed"
       },
+      "refundReasonMsgs": {
+        "type": "text",
+        "index": "not_analyzed"
+      },
       "productsRefundDetail": {
         "type": "text",
         "index": "not_analyzed"

+ 3 - 0
conf/esTemplate/orderfinances.json

@@ -25,6 +25,9 @@
       "customerPaid": {
         "type": "double"
       },
+      "customerRefunded": {
+        "type": "double"
+      },
       "platformServiceFee": {
         "type": "double"
       },

+ 5 - 1
conf/script/1000/orderApi/BE_Order_AcceptOrder_DYLK.groovy

@@ -103,6 +103,10 @@ class BE_Order_AcceptOrder_DYLK implements BusinessExecutor<InvokeCallParams, In
 
         StorePlatform storePlatform = storeService.getStorePlatformByInvokeInfo(platformStoreId, "DYLK", PlatformType.order.value, supplierCode)
         if (storePlatform == null) return RetResult.<InvokeCallResult> errorT().retinfo("订单来源平台未知!")
+        if (storePlatform.enableStatue == 0) {
+            logger.info("[" + storePlatform.platformName + "]门店[" + storePlatform.platformStoreId + "]已被禁用,消息已忽略")
+            return RetResult.<InvokeCallResult> errorT().retinfo("[" + storePlatform.platformName + "]门店[" + storePlatform.platformStoreId + "]已被禁用")
+        }
 
         RMap searchParams = new RMap();
         searchParams.set("incomePlatformId", storePlatform.id)
@@ -115,7 +119,7 @@ class BE_Order_AcceptOrder_DYLK implements BusinessExecutor<InvokeCallParams, In
         esOrder.setOrderStatus(BusinessOrderStatus.accept.value)
         BusinessOrder.update(esOrder, currentUser.id)
 
-        OrderStep orderStep = orderStepService.parseOrderStep(esOrder.id,  "[" + storePlatform.platformName + "]商家接单完成", storePlatform.platformCode, currentUser)
+        OrderStep orderStep = orderStepService.parseOrderStep(esOrder.id, "[" + storePlatform.platformName + "]商家接单完成", storePlatform.platformCode, currentUser)
 
 
         //持久化

+ 192 - 0
conf/script/1000/orderApi/BE_Order_BillConfirm_DYLK.groovy

@@ -0,0 +1,192 @@
+import com.dderp.business.dao.OrderDao
+import com.dderp.common.api.BusinessExecutor
+import com.dderp.common.api.StoreService
+import com.dderp.common.api.SupplierInitService
+import com.dderp.common.api.flycat.DouyinService
+import com.dderp.common.api.flycat.OrderSearchService
+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.ReadOrderOption
+import com.dderp.common.datas.flycat.PlatformType
+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.OrderAfterSaleBill
+import com.dderp.common.entity.order.OrderFinances
+import com.dderp.common.entity.order.OrderStep
+import com.dderp.common.entity.site.ERPTokenUser
+import com.dderp.common.entity.store.StorePlatform
+import com.dySweetFishPlugin.elasticsearch.ESClient
+import com.dySweetFishPlugin.sql.TableIdService
+import com.dySweetFishPlugin.sql.dao.TunaService
+import com.sweetfish.convert.json.JsonConvert
+import com.sweetfish.service.RetResult
+import groovy.json.JsonSlurper
+import org.apache.logging.log4j.LogManager
+import org.apache.logging.log4j.Logger
+import org.elasticsearch.action.bulk.BulkRequestBuilder
+import org.elasticsearch.action.bulk.BulkResponse
+import org.elasticsearch.action.index.IndexRequestBuilder
+import org.elasticsearch.action.support.WriteRequest
+import org.elasticsearch.action.update.UpdateRequestBuilder
+import org.elasticsearch.common.xcontent.XContentType
+import org.rex.RMap
+
+import javax.annotation.Resource
+import java.math.RoundingMode
+import java.time.LocalDateTime
+import java.time.ZoneOffset
+
+import static org.elasticsearch.common.xcontent.XContentFactory.jsonBuilder
+
+@SuppressWarnings("unused")
+class BE_Order_BillConfirm_DYLK implements BusinessExecutor<InvokeCallParams, InvokeCallResult> {
+
+    private final Logger logger = LogManager.getLogger(this.getClass().getSimpleName())
+
+    @Resource
+    private JsonConvert jsonConvert
+
+    @Resource
+    private TableIdService tableIdService
+
+    @Resource
+    private StoreService storeService
+
+    @Resource
+    private ESClient esClient
+
+    @Resource
+    private SupplierInitService supplierInitService
+
+    @Resource
+    private OrderStepService orderStepService
+
+    @Resource
+    private OrderService orderService
+
+    @Resource
+    private OrderSearchService orderSearchService
+
+    @Resource
+    private DouyinService douyinService
+
+    @Resource
+    private TunaService tunaService
+
+    private OrderDao orderDao
+
+    @Override
+    String scriptName() {
+        return "[抖音来客]订单账单确认"
+    }
+
+    @Override
+    ERPModule module() {
+        return ERPModule.ORDER_API
+    }
+
+    @Override
+    RetResult<InvokeCallParams> beforeExecute(InvokeCallParams source) {
+        return super.beforeExecute(source)
+    }
+
+    RetResult<InvokeCallResult> execute(InvokeCallParams source) {
+        //秒级时间戳,groovy里面不让用system
+        long currentTime = LocalDateTime.now().toEpochSecond(ZoneOffset.ofHours(8))
+        String dataSourceId = source.dataSourceId
+        long supplierCode = source.supplierCode
+        ERPTokenUser currentUser = source.currentUser
+
+        def jsonSlurper = new JsonSlurper()
+        def invokeOrder = jsonSlurper.parseText(source.params)
+        String incomePlatformOrderCode = invokeOrder["order"]["order_id"] as String
+        String platformStoreId = invokeOrder["poi_id"] as String
+
+        StorePlatform storePlatform = storeService.getStorePlatformByInvokeInfo(platformStoreId, "DYLK", PlatformType.order.value, supplierCode)
+        if (storePlatform == null) return RetResult.<InvokeCallResult> errorT().retinfo("订单来源平台未知!")
+        if (storePlatform.enableStatue == 0) {
+            logger.info("[" + storePlatform.platformName + "]门店[" + storePlatform.platformStoreId + "]已被禁用,消息已忽略")
+            return RetResult.<InvokeCallResult> errorT().retinfo("[" + storePlatform.platformName + "]门店[" + storePlatform.platformStoreId + "]已被禁用")
+        }
+
+        RMap searchParams = new RMap();
+        searchParams.set("incomePlatformId", storePlatform.id)
+        searchParams.set("incomePlatformOrderCode", incomePlatformOrderCode)
+
+        RetResult<List<BusinessOrder>> orderResult = orderSearchService.searchBusinessOrderList(searchParams, currentUser, dataSourceId, supplierCode, ReadOrderOption.ORDER_FINANCES)
+        if (!orderResult.isSuccess()) return RetResult.<InvokeCallResult> errorT().retinfo(orderResult.retinfo)
+
+        BusinessOrder esOrder = orderResult.result.get(0) //这么查只可能有一个
+        //todo 订单金额变化
+        if (invokeOrder["amount_change"]) {
+            esOrder.orderFinances.orderMoney = new BigDecimal(invokeOrder["amount_change"]["sale_price"] as int / 100).setScale(2, RoundingMode.CEILING)
+            esOrder.orderFinances.deliverFee = new BigDecimal(invokeOrder["amount_change"]["merchant_deliver_freight_fee"] as int / 100).setScale(2, RoundingMode.CEILING)
+            esOrder.orderFinances.storeDiscount = new BigDecimal(invokeOrder["amount_change"]["activities_fee_amount"] as int / 100).setScale(2, RoundingMode.CEILING)
+            esOrder.orderFinances.customerRefunded = new BigDecimal(invokeOrder["total_user_refund_amount"] as int / 100).setScale(2, RoundingMode.CEILING)
+            esOrder.orderFinances.platformServiceFee = new BigDecimal(invokeOrder["amount_change"]["commission_amount"] as int / 100).setScale(2, RoundingMode.CEILING)
+            esOrder.orderFinances.storeRealCollection = new BigDecimal(invokeOrder["amount_change"]["estimated_order_income"] as int / 100).setScale(2, RoundingMode.CEILING)
+        } else {
+            esOrder.orderFinances.orderMoney = new BigDecimal(invokeOrder["order"]["sale_price"] as int / 100).setScale(2, RoundingMode.CEILING)
+            esOrder.orderFinances.deliverFee = new BigDecimal(invokeOrder["order"]["merchant_deliver_freight_fee"] as int / 100).setScale(2, RoundingMode.CEILING)
+            esOrder.orderFinances.storeDiscount = new BigDecimal(invokeOrder["order"]["activities_fee_amount"] as int / 100).setScale(2, RoundingMode.CEILING)
+            esOrder.orderFinances.platformServiceFee = new BigDecimal(invokeOrder["order"]["commission_amount"] as int / 100).setScale(2, RoundingMode.CEILING)
+            esOrder.orderFinances.storeRealCollection = new BigDecimal(invokeOrder["order"]["estimated_order_income"] as int / 100).setScale(2, RoundingMode.CEILING)
+        }
+        OrderFinances.update(esOrder.orderFinances, currentUser.id)
+
+        OrderStep orderStep = orderStepService.parseOrderStep(esOrder.id, "订单账单确认",
+                "商品金额: " + new BigDecimal(invokeOrder["order"]["sale_price"] as int / 100).setScale(2, RoundingMode.CEILING) +
+                        " 商户预计收入: " + esOrder.orderFinances.storeRealCollection, currentUser)
+
+        //持久化
+        //订单主表
+        BulkRequestBuilder bulkRequest = esClient.getClient().prepareBulk().setRefreshPolicy(WriteRequest.RefreshPolicy.IMMEDIATE)
+
+        UpdateRequestBuilder orderFinancesRequest = esClient.getClient().prepareUpdate(
+                supplierInitService.getDateYearESIndex(supplierCode, ESKeys.ES_DELIVER_BUSINESS_ORDER_INDEX, 0),
+                ESKeys.ES_DELIVER_ORDER_FINANCES_TYPE,
+                String.valueOf(esOrder.orderFinances.getId()))
+                .setRouting(String.valueOf(esOrder.id))
+                .setDoc(jsonBuilder()
+                        .startObject()
+                        .field("orderMoney", esOrder.orderFinances.orderMoney)
+                        .field("deliverFee", esOrder.orderFinances.deliverFee)
+                        .field("storeDiscount", esOrder.orderFinances.storeDiscount)
+                        .field("customerRefunded", esOrder.orderFinances.customerRefunded)
+                        .field("platformServiceFee", esOrder.orderFinances.platformServiceFee)
+                        .field("storeRealCollection", esOrder.orderFinances.storeRealCollection)
+                        .field("updateBy", esOrder.orderFinances.getUpdateBy())
+                        .field("updateTimeLong", esOrder.orderFinances.getUpdateTimeLong())
+                        .endObject())
+        bulkRequest.add(orderFinancesRequest)
+
+        //订单脚印
+        IndexRequestBuilder orderStepRequest = esClient.getClient()
+                .prepareIndex(supplierInitService.getDateYearESIndex(supplierCode, ESKeys.ES_DELIVER_ORDER_STEP_INDEX, 0),
+                        ESKeys.ES_DELIVER_ORDER_STEP_TYPE)
+                .setId(String.valueOf(orderStep.id))
+                .setSource(jsonConvert.convertTo(orderStep), XContentType.JSON)
+        bulkRequest.add(orderStepRequest)
+
+
+        BulkResponse bulkResponse = bulkRequest.get();
+        orderDao = tunaService.generate(OrderDao.class)
+        if (bulkResponse.hasFailures()) {
+            logger.error("订单确认账单出错:" + bulkResponse.buildFailureMessage());
+            return RetResult.<InvokeCallResult> errorT().retinfo("订单确认账单出错:" + esOrder.orderName);
+        } else {
+            logger.info("订单确认账单成功");
+            //写数据库
+            orderDao.orderConfirmBill(esOrder.orderFinances,
+                    [orderStep],
+                    dataSourceId,
+                    String.valueOf(supplierCode))
+
+            return RetResult.<InvokeCallResult> successT()
+        }
+
+    }
+}

+ 4 - 0
conf/script/1000/orderApi/BE_Order_CancelOrder_DYLK.groovy

@@ -110,6 +110,10 @@ class BE_Order_CancelOrder_DYLK implements BusinessExecutor<InvokeCallParams, In
 
         StorePlatform storePlatform = storeService.getStorePlatformByInvokeInfo(platformStoreId, "DYLK", PlatformType.order.value, supplierCode)
         if (storePlatform == null) return RetResult.<InvokeCallResult> errorT().retinfo("订单来源平台未知!")
+        if (storePlatform.enableStatue == 0) {
+            logger.info("[" + storePlatform.platformName + "]门店[" + storePlatform.platformStoreId + "]已被禁用,消息已忽略")
+            return RetResult.<InvokeCallResult> errorT().retinfo("[" + storePlatform.platformName + "]门店[" + storePlatform.platformStoreId + "]已被禁用")
+        }
 
         RMap searchParams = new RMap();
         searchParams.set("incomePlatformId", storePlatform.id)

+ 4 - 0
conf/script/1000/orderApi/BE_Order_CompleteOrder_DYLK.groovy

@@ -104,6 +104,10 @@ class BE_Order_CompleteOrder_DYLK implements BusinessExecutor<InvokeCallParams,
 
         StorePlatform storePlatform = storeService.getStorePlatformByInvokeInfo(platformStoreId, "DYLK", PlatformType.order.value, supplierCode)
         if (storePlatform == null) return RetResult.<InvokeCallResult> errorT().retinfo("订单来源平台未知!")
+        if (storePlatform.enableStatue == 0) {
+            logger.info("[" + storePlatform.platformName + "]门店[" + storePlatform.platformStoreId + "]已被禁用,消息已忽略")
+            return RetResult.<InvokeCallResult> errorT().retinfo("[" + storePlatform.platformName + "]门店[" + storePlatform.platformStoreId + "]已被禁用")
+        }
 
         RMap searchParams = new RMap();
         searchParams.set("incomePlatformId", storePlatform.id)

+ 11 - 3
conf/script/1000/orderApi/BE_Order_CreateOrder_DYLK.groovy

@@ -86,13 +86,20 @@ class BE_Order_CreateOrder_DYLK implements BusinessExecutor<InvokeCallParams, In
         def jsonSlurper = new JsonSlurper()
         def invokeOrder = jsonSlurper.parseText(source.params)
 
+        StorePlatform storePlatform = storeService.getStorePlatformByInvokeInfo(invokeOrder["poi"]["poi_id"] as String,
+                "DYLK", PlatformType.order.value, supplierCode)
+        if (storePlatform == null) return RetResult.<InvokeCallResult> errorT().retinfo("订单来源平台未知!")
+        if (storePlatform.enableStatue == 0) {
+            logger.info("[" + storePlatform.platformName + "]门店[" + storePlatform.platformStoreId + "]已被禁用,消息已忽略")
+            return RetResult.<InvokeCallResult> errorT().retinfo("[" + storePlatform.platformName + "]门店[" + storePlatform.platformStoreId + "]已被禁用")
+        }
+
         BusinessOrder businessOrder = new BusinessOrder()
         businessOrder.setId(tableIdService.getTableIdMulti("deBusinessOrder.id", 1, dataSourceId, String.valueOf(supplierCode)))
         businessOrder.setOrderName(invokeOrder["merchant"]["account_name"] as String)
         businessOrder.setOrderCode(tableIdService.getTableCodeMulti("deBusinessOrder.code", dataSourceId, String.valueOf(supplierCode)))
         businessOrder.setOrderStatus(BusinessOrderStatus.init.value)
-        StorePlatform storePlatform = storeService.getStorePlatformByInvokeInfo(invokeOrder["poi"]["poi_id"] as String,
-                "DYLK", PlatformType.order.value, supplierCode)
+
         businessOrder.setIncomePlatformId(storePlatform.id)
         businessOrder.setIncomePlatformName(storePlatform.platformName)
         businessOrder.setIncomePlatformOrderCode(invokeOrder["order"]["order_id"] as String)
@@ -116,7 +123,7 @@ class BE_Order_CreateOrder_DYLK implements BusinessExecutor<InvokeCallParams, In
                 invokeOrder["receiver_info"]["receiver_name"]
         businessOrder.setDeliverAddressAll(address)
         //写入订单序号
-        long sequence = orderService.getOrderSequence(viewStoreInfo.storeInfo.id, storePlatform.idPlatformInfo, supplierCode)
+        long sequence = orderService.getOrderSequence(storeInfo.id, storePlatform.idPlatformInfo, supplierCode)
         businessOrder.setOrderSequence(sequence)
 
         //订单金额类信息
@@ -139,6 +146,7 @@ class BE_Order_CreateOrder_DYLK implements BusinessExecutor<InvokeCallParams, In
         orderDeliveryInfo.setDeliverDistract(invokeOrder["receiver_info"]["district"] as String)
         orderDeliveryInfo.setDeliverAddress(invokeOrder["receiver_info"]["location_address"] as String)
         orderDeliveryInfo.setGeoPoiLocation(new GeoPoiLocation(invokeOrder["receiver_info"]["lng"] as double, invokeOrder["receiver_info"]["lat"] as double))
+        orderDeliveryInfo.setGeoLocationSerial(jsonConvert.convertTo(orderDeliveryInfo.geoPoiLocation))
         orderDeliveryInfo.setReceiveMan(invokeOrder["receiver_info"]["receiver_name"] as String)
         orderDeliveryInfo.setContractPhone(invokeOrder["receiver_info"]["secret_number"] as String + "(" + invokeOrder["receiver_info"]["receiver_phone"] as String + ")")
         orderDeliveryInfo.setDeliverTimeliness(invokeOrder["order"]["is_book"] as int - 1) //抖音1表示即时单,2表示预订单

+ 267 - 0
conf/script/1000/orderApi/BE_Order_DeliveryChange_DYLK.groovy

@@ -0,0 +1,267 @@
+import com.dderp.business.dao.OrderDao
+import com.dderp.common.api.BusinessExecutor
+import com.dderp.common.api.StoreService
+import com.dderp.common.api.SupplierInitService
+import com.dderp.common.api.flycat.DouyinService
+import com.dderp.common.api.flycat.OrderSearchService
+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.ReadOrderOption
+import com.dderp.common.datas.flycat.BusinessOrderStatus
+import com.dderp.common.datas.flycat.PlatformType
+import com.dderp.common.entity.base.InvokeCallParams
+import com.dderp.common.entity.base.InvokeCallResult
+import com.dderp.common.entity.geo.GeoPoiLocation
+import com.dderp.common.entity.order.BusinessOrder
+import com.dderp.common.entity.order.OrderDeliveryInfo
+import com.dderp.common.entity.order.OrderStep
+import com.dderp.common.entity.site.ERPTokenUser
+import com.dderp.common.entity.store.StorePlatform
+import com.dySweetFishPlugin.elasticsearch.ESClient
+import com.dySweetFishPlugin.sql.TableIdService
+import com.dySweetFishPlugin.sql.dao.TunaService
+import com.sweetfish.convert.json.JsonConvert
+import com.sweetfish.service.RetResult
+import groovy.json.JsonSlurper
+import org.apache.logging.log4j.LogManager
+import org.apache.logging.log4j.Logger
+import org.elasticsearch.action.bulk.BulkRequestBuilder
+import org.elasticsearch.action.bulk.BulkResponse
+import org.elasticsearch.action.index.IndexRequestBuilder
+import org.elasticsearch.action.support.WriteRequest
+import org.elasticsearch.action.update.UpdateRequestBuilder
+import org.elasticsearch.common.xcontent.XContentType
+import org.rex.RMap
+
+import javax.annotation.Resource
+import java.math.RoundingMode
+import java.time.LocalDateTime
+import java.time.ZoneOffset
+
+import static org.elasticsearch.common.xcontent.XContentFactory.jsonBuilder
+
+@SuppressWarnings("unused")
+class BE_Order_DeliveryChange_DYLK implements BusinessExecutor<InvokeCallParams, InvokeCallResult> {
+
+    private final Logger logger = LogManager.getLogger(this.getClass().getSimpleName())
+
+    @Resource
+    private JsonConvert jsonConvert
+
+    @Resource
+    private TableIdService tableIdService
+
+    @Resource
+    private StoreService storeService
+
+    @Resource
+    private ESClient esClient
+
+    @Resource
+    private SupplierInitService supplierInitService
+
+    @Resource
+    private OrderStepService orderStepService
+
+    @Resource
+    private OrderService orderService
+
+    @Resource
+    private OrderSearchService orderSearchService
+
+    @Resource
+    private DouyinService douyinService
+
+    @Resource
+    private TunaService tunaService
+
+    private OrderDao orderDao
+
+    @Override
+    String scriptName() {
+        return "[抖音来客]订单配送信息修改"
+    }
+
+    @Override
+    ERPModule module() {
+        return ERPModule.ORDER_API
+    }
+
+    @Override
+    RetResult<InvokeCallParams> beforeExecute(InvokeCallParams source) {
+        return super.beforeExecute(source)
+    }
+
+    RetResult<InvokeCallResult> execute(InvokeCallParams source) {
+        //秒级时间戳,groovy里面不让用system
+        long currentTime = LocalDateTime.now().toEpochSecond(ZoneOffset.ofHours(8))
+        String dataSourceId = source.dataSourceId
+        long supplierCode = source.supplierCode
+        ERPTokenUser currentUser = source.currentUser
+
+        def jsonSlurper = new JsonSlurper()
+        def invokeOrder = jsonSlurper.parseText(source.params)
+        String incomePlatformOrderCode = invokeOrder["order_id"] as String
+        String platformStoreId = invokeOrder["poi_id"] as String
+        String platformAccountId = invokeOrder["account_id"] as String
+        ArrayList<Integer> options = invokeOrder["op_list"] as ArrayList
+
+        StorePlatform storePlatform = storeService.getStorePlatformByInvokeInfo(platformStoreId, "DYLK", PlatformType.order.value, supplierCode)
+        if (storePlatform == null) return RetResult.<InvokeCallResult> errorT().retinfo("订单来源平台未知!")
+        if (storePlatform.enableStatue == 0) {
+            logger.info("[" + storePlatform.platformName + "]门店[" + storePlatform.platformStoreId + "]已被禁用,消息已忽略")
+            return RetResult.<InvokeCallResult> errorT().retinfo("[" + storePlatform.platformName + "]门店[" + storePlatform.platformStoreId + "]已被禁用")
+        }
+
+        RMap searchParams = new RMap();
+        searchParams.set("incomePlatformId", storePlatform.id)
+        searchParams.set("incomePlatformOrderCode", incomePlatformOrderCode)
+
+        RetResult<List<BusinessOrder>> orderResult = orderSearchService.searchBusinessOrderList(searchParams, currentUser, dataSourceId, supplierCode, ReadOrderOption.ORDER_DELIVERY)
+        if (!orderResult.isSuccess()) return RetResult.<InvokeCallResult> errorT().retinfo(orderResult.retinfo)
+
+        BusinessOrder esOrder = orderResult.result.get(0) //这么查只可能有一个
+        OrderDeliveryInfo orderDeliveryInfo = esOrder.orderDeliveryInfo
+
+        //这里的逻辑是,抖音给了我订单配送信息改变的通知,然后我再次调用订单查询接口获取最新的订单信息
+        //不得不说略显傻B
+        def postBody = [
+                order_id  : incomePlatformOrderCode,
+                account_id: platformAccountId
+        ]
+        String responseStr = douyinService.getInvoker("/goodlife/v1/hermes/trade/order/query/", jsonConvert.convertTo(postBody))
+        def response = jsonSlurper.parseText(responseStr)
+
+        StringBuilder sb = new StringBuilder()
+        if (response["extra"]["error_code"] as Integer == 0) {
+            def dyOrder = (response["data"]["orders"] as ArrayList).get(0)
+
+            if (options.contains(1)) {
+                sb.append("收货人:" + orderDeliveryInfo.receiveMan + "->" + dyOrder["receiver_info"]["receiver_name"] as String)
+            }
+            if (options.contains(2)) {
+                sb.append("收货人电话:" + orderDeliveryInfo.contractPhone + "->" + dyOrder["receiver_info"]["secret_number"] as String + "(" + dyOrder["receiver_info"]["receiver_phone"] as String + ")")
+            }
+
+            String address = "[" + dyOrder["receiver_info"]["city"] + "]" + dyOrder["receiver_info"]["province"] +
+                    dyOrder["receiver_info"]["city"] +
+                    dyOrder["receiver_info"]["district"] +
+                    dyOrder["receiver_info"]["town"] +
+                    dyOrder["receiver_info"]["location_address"] +
+                    dyOrder["receiver_info"]["location_name"] + "-" +
+                    dyOrder["receiver_info"]["receiver_name"]
+
+            if (options.contains(3) ||
+                    options.contains(4) ||
+                    options.contains(5) ||
+                    options.contains(6) ||
+                    options.contains(7) ||
+                    options.contains(8) ||
+                    options.contains(9)) {
+                sb.append("收货地址:" + esOrder.deliverAddressAll + "->" + address)
+            }
+
+            //抖音传过来的格式为起始时间戳(单位秒)- 截止时间戳(单位秒),示例:1669370006-1669371206,目前先取起始时间
+            long suggestTimeLong = (dyOrder["order"]["sys_expect_time"] as String).split("-")[0] as long
+
+            orderDeliveryInfo.setDeliverProvince(dyOrder["receiver_info"]["province"] as String)
+            orderDeliveryInfo.setDeliverCity(dyOrder["receiver_info"]["city"] as String)
+            orderDeliveryInfo.setDeliverDistract(dyOrder["receiver_info"]["district"] as String)
+            orderDeliveryInfo.setDeliverAddress(dyOrder["receiver_info"]["location_address"] as String)
+            orderDeliveryInfo.setGeoPoiLocation(new GeoPoiLocation(dyOrder["receiver_info"]["lng"] as double, dyOrder["receiver_info"]["lat"] as double))
+            orderDeliveryInfo.setGeoLocationSerial(jsonConvert.convertTo(orderDeliveryInfo.geoPoiLocation))
+            orderDeliveryInfo.setReceiveMan(dyOrder["receiver_info"]["receiver_name"] as String)
+            orderDeliveryInfo.setContractPhone(dyOrder["receiver_info"]["secret_number"] as String + "(" + dyOrder["receiver_info"]["receiver_phone"] as String + ")")
+            orderDeliveryInfo.setDeliverTimeliness(dyOrder["order"]["is_book"] as int - 1) //抖音1表示即时单,2表示预订单
+            orderDeliveryInfo.setBookingDeliverTimeLong(suggestTimeLong * 1000)
+            orderDeliveryInfo.setBookingDeliverTime(new Date(orderDeliveryInfo.bookingDeliverTimeLong))
+            orderDeliveryInfo.setCustomerMemo(dyOrder["order"]["remark"] as String)
+
+            BigDecimal deliverFee = new BigDecimal((dyOrder["amount_info"]["freight_pay_amount"] as int) / 100).setScale(2, RoundingMode.CEILING)
+            esOrder.setDeliverFee(deliverFee)
+
+            esOrder.setDeliverAddressAll(address)
+
+        } else {
+            //todo 抖音侧调用失败,怎么处理?
+            logger.error("[抖音来客]获取订单信息接口调用失败:" + response["extra"]["description"] as String)
+            return RetResult.<InvokeCallResult> errorT().retinfo("[抖音来客]获取订单信息接口调用失败:" + response["extra"]["description"] as String)
+        }
+
+        OrderDeliveryInfo.update(orderDeliveryInfo, currentUser.id)
+        BusinessOrder.update(esOrder, currentUser.id)
+
+
+        OrderStep orderStep = orderStepService.parseOrderStep(esOrder.id, "订单修改信息",
+                sb.toString(), currentUser)
+
+
+        //持久化
+        //订单主表
+        BulkRequestBuilder bulkRequest = esClient.getClient().prepareBulk().setRefreshPolicy(WriteRequest.RefreshPolicy.IMMEDIATE)
+
+        UpdateRequestBuilder orderRequest = esClient.getClient().prepareUpdate(
+                supplierInitService.getDateYearESIndex(supplierCode, ESKeys.ES_DELIVER_BUSINESS_ORDER_INDEX, 0),
+                ESKeys.ES_DELIVER_BUSINESS_ORDER_TYPE,
+                String.valueOf(esOrder.getId()))
+                .setDoc(jsonBuilder()
+                        .startObject()
+                        .field("deliverFee", esOrder.deliverFee)
+                        .field("deliverAddressAll", esOrder.deliverAddressAll)
+                        .field("updateBy", esOrder.getUpdateBy())
+                        .field("updateTimeLong", esOrder.getUpdateTimeLong())
+                        .endObject())
+        bulkRequest.add(orderRequest)
+
+        //订单配送信息
+        UpdateRequestBuilder deliverRequest = esClient.getClient().prepareUpdate(
+                supplierInitService.getDateYearESIndex(supplierCode, ESKeys.ES_DELIVER_BUSINESS_ORDER_INDEX, 0),
+                ESKeys.ES_DELIVER_ORDER_DELIVERY_INFO_TYPE,
+                String.valueOf(orderDeliveryInfo.getId()))
+                .setRouting(String.valueOf(esOrder.id))
+                .setDoc(jsonBuilder()
+                        .startObject()
+                        .field("deliverProvince", orderDeliveryInfo.deliverProvince)
+                        .field("deliverCity", orderDeliveryInfo.deliverCity)
+                        .field("deliverDistract", orderDeliveryInfo.deliverDistract)
+                        .field("deliverAddress", orderDeliveryInfo.deliverAddress)
+                        .field("geoLocationSerial", orderDeliveryInfo.geoLocationSerial)
+                        .field("receiveMan", orderDeliveryInfo.receiveMan)
+                        .field("contractPhone", orderDeliveryInfo.contractPhone)
+                        .field("deliverTimeliness", orderDeliveryInfo.deliverTimeliness)
+                        .field("bookingDeliverTimeLong", orderDeliveryInfo.bookingDeliverTimeLong)
+                        .field("updateBy", orderDeliveryInfo.getUpdateBy())
+                        .field("updateTimeLong", orderDeliveryInfo.getUpdateTimeLong())
+                        .endObject())
+        bulkRequest.add(deliverRequest)
+
+        //订单脚印
+        IndexRequestBuilder orderStepRequest = esClient.getClient()
+                .prepareIndex(supplierInitService.getDateYearESIndex(supplierCode, ESKeys.ES_DELIVER_ORDER_STEP_INDEX, 0),
+                        ESKeys.ES_DELIVER_ORDER_STEP_TYPE)
+                .setId(String.valueOf(orderStep.id))
+                .setSource(jsonConvert.convertTo(orderStep), XContentType.JSON)
+        bulkRequest.add(orderStepRequest)
+
+
+        BulkResponse bulkResponse = bulkRequest.get();
+        orderDao = tunaService.generate(OrderDao.class)
+        if (bulkResponse.hasFailures()) {
+            logger.error("订单修改信息出错:" + bulkResponse.buildFailureMessage());
+            return RetResult.<InvokeCallResult> errorT().retinfo("订单修改信息出错:" + esOrder.orderName);
+        } else {
+            logger.info("订单修改信息成功");
+            //写数据库
+            orderDao.updateOrderDelivery(esOrder,
+                    orderDeliveryInfo,
+                    [orderStep],
+                    dataSourceId,
+                    String.valueOf(supplierCode))
+
+            return RetResult.<InvokeCallResult> successT()
+        }
+
+    }
+}

+ 226 - 0
conf/script/1000/orderApi/BE_Order_PartRefund_DYLK.groovy

@@ -0,0 +1,226 @@
+import com.dderp.business.dao.OrderDao
+import com.dderp.common.api.BusinessExecutor
+import com.dderp.common.api.StoreService
+import com.dderp.common.api.SupplierInitService
+import com.dderp.common.api.flycat.DouyinService
+import com.dderp.common.api.flycat.OrderSearchService
+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.ReadOrderOption
+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.OrderAfterSaleBill
+import com.dderp.common.entity.order.OrderFinances
+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
+import com.dySweetFishPlugin.elasticsearch.ESClient
+import com.dySweetFishPlugin.sql.TableIdService
+import com.dySweetFishPlugin.sql.dao.TunaService
+import com.sweetfish.convert.json.JsonConvert
+import com.sweetfish.service.RetResult
+import groovy.json.JsonSlurper
+import org.apache.logging.log4j.LogManager
+import org.apache.logging.log4j.Logger
+import org.elasticsearch.action.bulk.BulkRequestBuilder
+import org.elasticsearch.action.bulk.BulkResponse
+import org.elasticsearch.action.index.IndexRequestBuilder
+import org.elasticsearch.action.support.WriteRequest
+import org.elasticsearch.action.update.UpdateRequestBuilder
+import org.elasticsearch.common.xcontent.XContentType
+import org.rex.RMap
+
+import javax.annotation.Resource
+import java.math.RoundingMode
+import java.time.LocalDateTime
+import java.time.ZoneOffset
+
+import static org.elasticsearch.common.xcontent.XContentFactory.jsonBuilder
+
+@SuppressWarnings("unused")
+class BE_Order_PartRefund_DYLK implements BusinessExecutor<InvokeCallParams, InvokeCallResult> {
+
+    private final Logger logger = LogManager.getLogger(this.getClass().getSimpleName())
+
+    @Resource
+    private JsonConvert jsonConvert
+
+    @Resource
+    private TableIdService tableIdService
+
+    @Resource
+    private StoreService storeService
+
+    @Resource
+    private ESClient esClient
+
+    @Resource
+    private SupplierInitService supplierInitService
+
+    @Resource
+    private OrderStepService orderStepService
+
+    @Resource
+    private OrderService orderService
+
+    @Resource
+    private OrderSearchService orderSearchService
+
+    @Resource
+    private DouyinService douyinService
+
+    @Resource
+    private TunaService tunaService
+
+    private OrderDao orderDao
+
+    @Override
+    String scriptName() {
+        return "[抖音来客]订单部分退款完成"
+    }
+
+    @Override
+    ERPModule module() {
+        return ERPModule.ORDER_API
+    }
+
+    @Override
+    RetResult<InvokeCallParams> beforeExecute(InvokeCallParams source) {
+        return super.beforeExecute(source)
+    }
+
+    RetResult<InvokeCallResult> execute(InvokeCallParams source) {
+        //秒级时间戳,groovy里面不让用system
+        long currentTime = LocalDateTime.now().toEpochSecond(ZoneOffset.ofHours(8))
+        String dataSourceId = source.dataSourceId
+        long supplierCode = source.supplierCode
+        ERPTokenUser currentUser = source.currentUser
+
+        def jsonSlurper = new JsonSlurper()
+        def invokeOrder = jsonSlurper.parseText(source.params)
+        String incomePlatformOrderCode = invokeOrder["order_id"] as String
+        String platformStoreId = invokeOrder["poi_id"] as String
+
+        StorePlatform storePlatform = storeService.getStorePlatformByInvokeInfo(platformStoreId, "DYLK", PlatformType.order.value, supplierCode)
+        if (storePlatform == null) return RetResult.<InvokeCallResult> errorT().retinfo("订单来源平台未知!")
+        if (storePlatform.enableStatue == 0) {
+            logger.info("[" + storePlatform.platformName + "]门店[" + storePlatform.platformStoreId + "]已被禁用,消息已忽略")
+            return RetResult.<InvokeCallResult> errorT().retinfo("[" + storePlatform.platformName + "]门店[" + storePlatform.platformStoreId + "]已被禁用")
+        }
+
+        RMap searchParams = new RMap();
+        searchParams.set("incomePlatformId", storePlatform.id)
+        searchParams.set("incomePlatformOrderCode", incomePlatformOrderCode)
+
+        RetResult<List<BusinessOrder>> orderResult = orderSearchService.searchBusinessOrderList(searchParams, currentUser, dataSourceId, supplierCode, ReadOrderOption.ORDER_FINANCES)
+        if (!orderResult.isSuccess()) return RetResult.<InvokeCallResult> errorT().retinfo(orderResult.retinfo)
+
+        BusinessOrder esOrder = orderResult.result.get(0) //这么查只可能有一个
+        //构造订单售后单
+        OrderAfterSaleBill afterSaleBill = new OrderAfterSaleBill()
+
+        String refundReasonCodes = (invokeOrder["reasons"] as ArrayList).collect { it["code"] as String }.join(",")
+        String refundReasonMsg = (invokeOrder["reasons"] as ArrayList).collect { it["msg"] as String }.join(",")
+
+        afterSaleBill.setId(tableIdService.getTableIdMulti("deOrderAfterSaleBill.id", 1, dataSourceId, String.valueOf(supplierCode)))
+        afterSaleBill.setIdOrder(esOrder.id)
+        afterSaleBill.setIdStore(esOrder.idStore)
+        afterSaleBill.setBillCode(tableIdService.getTableCodeMulti("deOrderAfterSaleBill.code", dataSourceId, String.valueOf(supplierCode)))
+        afterSaleBill.setIdStorePlatform(storePlatform.id)
+        afterSaleBill.setOutPlatformStoreId(storePlatform.platformStoreId)
+        afterSaleBill.setPlatformCode(storePlatform.platformCode)
+        afterSaleBill.setPlatformType(storePlatform.platformType)
+        afterSaleBill.setPlatformName(storePlatform.platformName)
+        afterSaleBill.setOutAfterSaleId(invokeOrder["after_sale_id"] as String)
+        afterSaleBill.setRefundReasonCodes(refundReasonCodes)
+        afterSaleBill.setRefundReasonMsgs(refundReasonMsg)
+        afterSaleBill.setApplySource(invokeOrder["apply_source"] as String)
+        afterSaleBill.setFullRefunded(invokeOrder["is_full_refunded"] as boolean)
+        afterSaleBill.setUserRefundAmount(invokeOrder["user_refund_amount"] as int)
+        afterSaleBill.setTotalUserRefundAmount(invokeOrder["total_user_refund_amount"] as int)
+        afterSaleBill.setProdCountAfterRefund(invokeOrder["sku_type_num_after_refund"] as int)
+        afterSaleBill.setProductsRemainDetail(invokeOrder["products_after_refund"] as String)
+        afterSaleBill.setProductsRefundDetail(invokeOrder["products_refund"] as String)
+
+        OrderAfterSaleBill.create(afterSaleBill, currentUser.id)
+
+        //todo 订单金额变化
+        esOrder.orderFinances.orderMoney = new BigDecimal(invokeOrder["amount_change"]["sale_price"] as int / 100).setScale(2, RoundingMode.CEILING)
+        esOrder.orderFinances.deliverFee = new BigDecimal(invokeOrder["amount_change"]["merchant_deliver_freight_fee"] as int / 100).setScale(2, RoundingMode.CEILING)
+        esOrder.orderFinances.storeDiscount = new BigDecimal(invokeOrder["amount_change"]["activities_fee_amount"] as int / 100).setScale(2, RoundingMode.CEILING)
+        esOrder.orderFinances.customerRefunded = new BigDecimal(invokeOrder["total_user_refund_amount"] as int / 100).setScale(2, RoundingMode.CEILING)
+        esOrder.orderFinances.platformServiceFee = new BigDecimal(invokeOrder["amount_change"]["commission_amount"] as int / 100).setScale(2, RoundingMode.CEILING)
+        esOrder.orderFinances.storeRealCollection = new BigDecimal(invokeOrder["amount_change"]["estimated_order_income"] as int / 100).setScale(2, RoundingMode.CEILING)
+
+        OrderFinances.update(esOrder.orderFinances, currentUser.id)
+
+        OrderStep orderStep = orderStepService.parseOrderStep(esOrder.id, "订单已部分退款,原因:" + refundReasonMsg,
+                "退款金额: " + new BigDecimal(invokeOrder["user_refund_amount"] as int / 100).setScale(2, RoundingMode.CEILING) +
+                        " 商户预计收入: " + esOrder.orderFinances.storeRealCollection, currentUser)
+
+        //持久化
+        //订单主表
+        BulkRequestBuilder bulkRequest = esClient.getClient().prepareBulk().setRefreshPolicy(WriteRequest.RefreshPolicy.IMMEDIATE)
+
+        UpdateRequestBuilder orderFinancesRequest = esClient.getClient().prepareUpdate(
+                supplierInitService.getDateYearESIndex(supplierCode, ESKeys.ES_DELIVER_BUSINESS_ORDER_INDEX, 0),
+                ESKeys.ES_DELIVER_ORDER_FINANCES_TYPE,
+                String.valueOf(esOrder.orderFinances.getId()))
+                .setRouting(String.valueOf(esOrder.id))
+                .setDoc(jsonBuilder()
+                        .startObject()
+                        .field("orderMoney", esOrder.orderFinances.orderMoney)
+                        .field("deliverFee", esOrder.orderFinances.deliverFee)
+                        .field("storeDiscount", esOrder.orderFinances.storeDiscount)
+                        .field("customerRefunded", esOrder.orderFinances.customerRefunded)
+                        .field("platformServiceFee", esOrder.orderFinances.platformServiceFee)
+                        .field("storeRealCollection", esOrder.orderFinances.storeRealCollection)
+                        .field("updateBy", esOrder.orderFinances.getUpdateBy())
+                        .field("updateTimeLong", esOrder.orderFinances.getUpdateTimeLong())
+                        .endObject())
+        bulkRequest.add(orderFinancesRequest)
+
+        //订单售后单
+        IndexRequestBuilder afterSaleBillRequest = esClient.getClient()
+                .prepareIndex(supplierInitService.getDateYearESIndex(supplierCode, ESKeys.ES_DELIVER_BUSINESS_ORDER_INDEX, 0),
+                        ESKeys.ES_DELIVER_ORDER_AFTER_SALE_BILL_TYPE)
+                .setId(String.valueOf(afterSaleBill.id))
+                .setParent(String.valueOf(esOrder.id))
+                .setSource(jsonConvert.convertTo(afterSaleBill), XContentType.JSON)
+        bulkRequest.add(afterSaleBillRequest)
+
+        //订单脚印
+        IndexRequestBuilder orderStepRequest = esClient.getClient()
+                .prepareIndex(supplierInitService.getDateYearESIndex(supplierCode, ESKeys.ES_DELIVER_ORDER_STEP_INDEX, 0),
+                        ESKeys.ES_DELIVER_ORDER_STEP_TYPE)
+                .setId(String.valueOf(orderStep.id))
+                .setSource(jsonConvert.convertTo(orderStep), XContentType.JSON)
+        bulkRequest.add(orderStepRequest)
+
+
+        BulkResponse bulkResponse = bulkRequest.get();
+        orderDao = tunaService.generate(OrderDao.class)
+        if (bulkResponse.hasFailures()) {
+            logger.error("部分退款出错:" + bulkResponse.buildFailureMessage());
+            return RetResult.<InvokeCallResult> errorT().retinfo("部分退款出错:" + esOrder.orderName);
+        } else {
+            logger.info("部分退款成功");
+            //写数据库
+            orderDao.partRefundOrder(esOrder.orderFinances,
+                    afterSaleBill,
+                    [orderStep],
+                    dataSourceId,
+                    String.valueOf(supplierCode))
+
+            return RetResult.<InvokeCallResult> successT()
+        }
+
+    }
+}

+ 6 - 2
conf/script/1000/orderApi/BE_Order_ProcessRefund_DYLK.groovy

@@ -116,8 +116,12 @@ class BE_Order_ProcessRefund_DYLK implements BusinessExecutor<InvokeCallParams,
         String outAfterSaleId = invokeOrder["after_sale_id"] as String
         boolean pass = invokeOrder["pass"] as boolean
 
-//        StorePlatform storePlatform = storeService.getStorePlatformByInvokeInfo(platformStoreId, "DYLK", PlatformType.order.value, supplierCode)
-//        if (storePlatform == null) return RetResult.<InvokeCallResult> errorT().retinfo("订单来源平台未知!")
+        StorePlatform storePlatform = storeService.getStorePlatformByInvokeInfo(platformStoreId, "DYLK", PlatformType.order.value, supplierCode)
+        if (storePlatform == null) return RetResult.<InvokeCallResult> errorT().retinfo("订单来源平台未知!")
+        if (storePlatform.enableStatue == 0) {
+            logger.info("[" + storePlatform.platformName + "]门店[" + storePlatform.platformStoreId + "]已被禁用,消息已忽略")
+            return RetResult.<InvokeCallResult> errorT().retinfo("[" + storePlatform.platformName + "]门店[" + storePlatform.platformStoreId + "]已被禁用")
+        }
 //
 //        RMap searchParams = new RMap();
 //        searchParams.set("incomePlatformId", platformStoreId)

+ 4 - 0
conf/script/1000/orderApi/BE_Order_RejectOrder_DYLK.groovy

@@ -103,6 +103,10 @@ class BE_Order_RejectOrder_DYLK implements BusinessExecutor<InvokeCallParams, In
 
         StorePlatform storePlatform = storeService.getStorePlatformByInvokeInfo(platformStoreId, "DYLK", PlatformType.order.value, supplierCode)
         if (storePlatform == null) return RetResult.<InvokeCallResult> errorT().retinfo("订单来源平台未知!")
+        if (storePlatform.enableStatue == 0) {
+            logger.info("[" + storePlatform.platformName + "]门店[" + storePlatform.platformStoreId + "]已被禁用,消息已忽略")
+            return RetResult.<InvokeCallResult> errorT().retinfo("[" + storePlatform.platformName + "]门店[" + storePlatform.platformStoreId + "]已被禁用")
+        }
 
         RMap searchParams = new RMap();
         searchParams.set("incomePlatformId", storePlatform.id)

+ 4 - 1
conf/script/1000/orderApi/BE_Order_UserRefundRequest_DYLK.groovy

@@ -94,7 +94,6 @@ class BE_Order_UserRefundRequest_DYLK implements BusinessExecutor<InvokeCallPara
 
     RetResult<InvokeCallResult> execute(InvokeCallParams source) {
         //秒级时间戳,groovy里面不让用system
-        //todo 业务暂未实现,以下废代码
         long currentTime = LocalDateTime.now().toEpochSecond(ZoneOffset.ofHours(8))
         String dataSourceId = source.dataSourceId
         long supplierCode = source.supplierCode
@@ -107,6 +106,10 @@ class BE_Order_UserRefundRequest_DYLK implements BusinessExecutor<InvokeCallPara
 
         StorePlatform storePlatform = storeService.getStorePlatformByInvokeInfo(platformStoreId, "DYLK", PlatformType.order.value, supplierCode)
         if (storePlatform == null) return RetResult.<InvokeCallResult> errorT().retinfo("订单来源平台未知!")
+        if (storePlatform.enableStatue == 0) {
+            logger.info("[" + storePlatform.platformName + "]门店[" + storePlatform.platformStoreId + "]已被禁用,消息已忽略")
+            return RetResult.<InvokeCallResult> errorT().retinfo("[" + storePlatform.platformName + "]门店[" + storePlatform.platformStoreId + "]已被禁用")
+        }
 
         RMap searchParams = new RMap();
         searchParams.set("incomePlatformId", storePlatform.id)

+ 179 - 0
conf/script/1000/storeApi/BE_Store_BindStorePlatform_DYLK.groovy

@@ -0,0 +1,179 @@
+import com.dderp.business.dao.StoreDao
+import com.dderp.common.api.BusinessExecutor
+import com.dderp.common.api.NoSqlKeysService
+import com.dderp.common.api.PlatformService
+import com.dderp.common.api.StoreService
+import com.dderp.common.datas.ERPModule
+import com.dderp.common.datas.ESKeys
+import com.dderp.common.datas.flycat.PlatformType
+import com.dderp.common.entity.base.ProcessStringItem
+import com.dderp.common.entity.inquire.InquireMainInfo
+import com.dderp.common.entity.platform.PlatformInfo
+import com.dderp.common.entity.site.ERPTokenUser
+import com.dderp.common.entity.store.StoreInfo
+import com.dderp.common.entity.store.StorePlatform
+import com.dderp.common.entity.store.StorePlatformRequire
+import com.dderp.common.entity.store.ViewStoreInfo
+import com.dySweetFishPlugin.elasticsearch.ESClient
+import com.dySweetFishPlugin.sql.TableIdService
+import com.dySweetFishPlugin.sql.dao.TunaService
+import com.sweetfish.convert.json.JsonConvert
+import com.sweetfish.service.RetResult
+import groovy.json.JsonSlurper
+import org.apache.logging.log4j.LogManager
+import org.apache.logging.log4j.Logger
+import org.elasticsearch.action.bulk.BulkRequestBuilder
+import org.elasticsearch.action.bulk.BulkResponse
+import org.elasticsearch.action.support.WriteRequest
+import org.elasticsearch.action.update.UpdateRequestBuilder
+import org.elasticsearch.common.xcontent.XContentType
+
+import javax.annotation.Resource
+import java.time.LocalDateTime
+import java.time.ZoneOffset
+
+import static org.elasticsearch.common.xcontent.XContentFactory.jsonBuilder
+
+@SuppressWarnings("unused")
+class BE_Store_BindStorePlatform_DYLK implements BusinessExecutor<ProcessStringItem, StorePlatform> {
+
+    private final Logger logger = LogManager.getLogger(this.getClass().getSimpleName())
+
+    @Resource
+    private JsonConvert jsonConvert
+
+    @Resource
+    private TableIdService tableIdService
+
+    @Resource
+    private StoreService storeService
+
+    @Resource
+    private PlatformService platformService
+
+    @Resource
+    private ESClient esClient
+
+    @Resource
+    private NoSqlKeysService keysService
+
+    @Resource
+    private TunaService tunaService
+
+    private StoreDao storeDao
+
+    @Override
+    String scriptName() {
+        return "抖音来客授权并绑定门店"
+    }
+
+    @Override
+    ERPModule module() {
+        return ERPModule.STORE_API
+    }
+
+
+    RetResult<StorePlatform> execute(ProcessStringItem source) {
+        //秒级时间戳,groovy里面不让用system
+        long currentTime = LocalDateTime.now().toEpochSecond(ZoneOffset.ofHours(8))
+        String dataSourceId = source.dataSourceId
+        long supplierCode = source.supplierCode
+        ERPTokenUser currentUser = source.currentUser
+
+        def jsonSlurper = new JsonSlurper()
+        def invokeContent = jsonSlurper.parseText(source.itemValue)
+
+        long idStore = invokeContent["out_shop_id"] as Long
+        StoreInfo storeInfo = storeService.getStoreInfo(idStore, supplierCode, false, false, false)
+        if (storeInfo == null) return RetResult.<StorePlatform> errorT().retinfo("门店信息不存在")
+
+        PlatformInfo platformInfo = platformService.getPlatformInfoByCode("DYLK", true, supplierCode)
+        if (platformInfo == null) return RetResult.<StorePlatform> errorT().retinfo("系统档案内未找到[抖音来客]平台")
+
+        //查询之前绑定过这个门店没有
+        StorePlatform esStorePlatform = storeService.getStorePlatformByInvokeInfo(invokeContent["poi_id"] as String,
+                "DYLK", PlatformType.order.value, supplierCode)
+
+        if (esStorePlatform != null) {
+            //之前已绑定过,重新启用即可
+            logger.info("[" + platformInfo.platformName + "]门店已绑定过[" + invokeContent["poi_id"] as String + "],重新启用")
+
+            esStorePlatform.enableStatue = 1
+            StorePlatform.update(esStorePlatform, currentUser.id)
+            try {
+                esClient.getClient().prepareUpdate(keysService.getESKey(ESKeys.ES_DELIVER_STORE_INFO_INDEX, supplierCode), ESKeys.ES_DELIVER_STORE_PLATFORM_TYPE,
+                        String.valueOf(esStorePlatform.getId()))
+                        .setDoc(jsonBuilder()
+                                .startObject()
+                                .field("enableStatue", esStorePlatform.enableStatue)
+                                .field("updateBy", esStorePlatform.getUpdateBy())
+                                .field("updateTimeLong", esStorePlatform.getUpdateTimeLong())
+                                .endObject())
+                        .get()
+
+                storeDao = tunaService.generate(StoreDao.class)
+                storeDao.enableStorePlatform(esStorePlatform, dataSourceId, supplierCode)
+                return RetResult.successT()
+            } catch (IOException e) {
+                logger.error("绑定门店重新启用出错:" + e.getMessage(), e)
+                return RetResult.<StorePlatform> errorT().retcode(-1).retinfo("绑定门店重新启用出错:" + e.getMessage())
+            }
+        } else {
+            //之前未绑定过,需要新开
+            StorePlatform storePlatform = new StorePlatform()
+            storePlatform.setId(tableIdService.getTableIdMulti("tbStorePlatform.id", 1, dataSourceId, String.valueOf(supplierCode)))
+            storePlatform.setIdStore(idStore)
+            storePlatform.setPlatformStoreId(invokeContent["poi_id"] as String)
+            storePlatform.setIdPlatformInfo(platformInfo.id)
+            storePlatform.setPlatformName(platformInfo.platformName)
+            storePlatform.setPlatformCode(platformInfo.platformCode)
+            storePlatform.setPlatformType(platformInfo.platformType)
+            storePlatform.setEnableStatue(1)
+            StorePlatform.create(storePlatform, currentUser.id)
+
+            if (platformInfo.requireList.size() > 0) {
+                long requireId = tableIdService.getTableIdMulti("tbStorePlatformRequire.id", platformInfo.requireList.size(), dataSourceId, String.valueOf(supplierCode))
+                platformInfo.requireList.each { require ->
+                    StorePlatformRequire storePlatformRequire = new StorePlatformRequire()
+                    storePlatformRequire.setId(requireId)
+                    storePlatformRequire.setIdStore(storeInfo.id)
+                    storePlatformRequire.setIdPlatformRequire(require.id)
+                    storePlatformRequire.setIdStorePlatform(storePlatform.id)
+                    storePlatformRequire.setPlatformRequireCode(require.requireCode)
+                    storePlatformRequire.setPlatformRequireName(require.requireName)
+                    StorePlatformRequire.create(storePlatformRequire, currentUser.id)
+                }
+            }
+
+
+            BulkRequestBuilder bulkRequest = esClient.getClient().prepareBulk().setRefreshPolicy(WriteRequest.RefreshPolicy.IMMEDIATE);
+
+            bulkRequest.add(esClient.getClient().prepareIndex(
+                    keysService.getESKey(ESKeys.ES_DELIVER_STORE_INFO_INDEX, supplierCode), ESKeys.ES_DELIVER_STORE_PLATFORM_TYPE)
+                    .setId(String.valueOf(storePlatform.getId()))
+                    .setParent(String.valueOf(storePlatform.idStore))
+                    .setSource(jsonConvert.convertTo(storePlatform), XContentType.JSON))
+
+            storePlatform.getRequireList().forEach(x -> {
+                bulkRequest.add(esClient.getClient().prepareIndex(
+                        keysService.getESKey(ESKeys.ES_DELIVER_STORE_INFO_INDEX, supplierCode), ESKeys.ES_DELIVER_STORE_PLATFORM_REQUIRE_TYPE)
+                        .setId(String.valueOf(x.getId()))
+                        .setParent(String.valueOf(storePlatform.getId()))
+                        .setSource(jsonConvert.convertTo(x), XContentType.JSON))
+            });
+
+            BulkResponse bulkResponse = bulkRequest.get()
+
+            if (bulkResponse.hasFailures()) {
+                logger.error("门店开通平台出错:" + bulkResponse.buildFailureMessage())
+                return RetResult.<StorePlatform> errorT().retinfo("门店开通平台出错:" + storePlatform.getPlatformName())
+            } else {
+                logger.info("门店开通平台成功")
+                //写数据库
+                storeDao = tunaService.generate(StoreDao.class)
+                storeDao.addStorePlatform(storePlatform, storePlatform.getRequireList(), dataSourceId, supplierCode)
+                return RetResult.successT()
+            }
+        }
+    }
+}

+ 0 - 148
conf/script/1000/storeApi/BE_Store_BindStorePlatform_Douyin.groovy

@@ -1,148 +0,0 @@
-import com.dderp.business.dao.StoreDao
-import com.dderp.common.api.BusinessExecutor
-import com.dderp.common.api.NoSqlKeysService
-import com.dderp.common.api.PlatformService
-import com.dderp.common.api.StoreService
-import com.dderp.common.datas.ERPModule
-import com.dderp.common.datas.ESKeys
-import com.dderp.common.datas.flycat.PlatformType
-import com.dderp.common.entity.base.ProcessStringItem
-import com.dderp.common.entity.platform.PlatformInfo
-import com.dderp.common.entity.site.ERPTokenUser
-import com.dderp.common.entity.store.StoreInfo
-import com.dderp.common.entity.store.StorePlatform
-import com.dderp.common.entity.store.StorePlatformRequire
-import com.dySweetFishPlugin.elasticsearch.ESClient
-import com.dySweetFishPlugin.sql.TableIdService
-import com.dySweetFishPlugin.sql.dao.TunaService
-import com.sweetfish.convert.json.JsonConvert
-import com.sweetfish.service.RetResult
-import groovy.json.JsonSlurper
-import org.apache.logging.log4j.LogManager
-import org.apache.logging.log4j.Logger
-import org.elasticsearch.action.bulk.BulkRequestBuilder
-import org.elasticsearch.action.bulk.BulkResponse
-import org.elasticsearch.action.support.WriteRequest
-import org.elasticsearch.common.xcontent.XContentType
-
-import javax.annotation.Resource
-
-@SuppressWarnings("unused")
-class BE_Store_BindStorePlatform_Douyin implements BusinessExecutor<ProcessStringItem, StorePlatform> {
-
-    private final Logger logger = LogManager.getLogger(this.getClass().getSimpleName())
-
-    @Resource
-    private JsonConvert jsonConvert
-
-    @Resource
-    private TableIdService tableIdService
-
-    @Resource
-    private StoreService storeService
-
-    @Resource
-    private PlatformService platformService
-
-    @Resource
-    private ESClient esClient
-
-    @Resource
-    private NoSqlKeysService keysService
-
-    @Resource
-    private TunaService tunaService
-
-    private StoreDao storeDao
-
-    @Override
-    String scriptName() {
-        return "抖音来客授权并绑定门店"
-    }
-
-    @Override
-    ERPModule module() {
-        return ERPModule.STORE_API
-    }
-
-
-    RetResult<StorePlatform> execute(ProcessStringItem source) {
-        String dataSourceId = source.dataSourceId
-        long supplierCode = source.supplierCode
-        ERPTokenUser currentUser = source.currentUser
-
-        def jsonSlurper = new JsonSlurper()
-        def invokeContent = jsonSlurper.parseText(source.itemValue)
-
-        long idStore = invokeContent["out_shop_id"] as Long
-        StoreInfo storeInfo = storeService.getStoreInfo(idStore, supplierCode, false, false, false)
-        if (storeInfo == null) return RetResult.<StorePlatform> errorT().retinfo("门店信息不存在")
-
-        PlatformInfo platformInfo = platformService.getPlatformInfoByCode("DYLK", true, supplierCode)
-        if (platformInfo == null) return RetResult.<StorePlatform> errorT().retinfo("系统档案内未找到[抖音来客]平台")
-
-        //查询之前绑定过这个门店没有
-        StorePlatform esStorePlatform = storeService.getStorePlatformByInvokeInfo(invokeContent["poi_id"] as String,
-                "DYLK", PlatformType.order.value, supplierCode)
-
-        if (esStorePlatform != null) {
-            logger.error("[" + platformInfo.platformName + "]门店已绑定过[" + invokeContent["poi_id"] as String + "]");
-            return RetResult.<StorePlatform> errorT().retinfo("[" + platformInfo.platformName + "]门店已绑定过[" + invokeContent["poi_id"] as String + "]");
-        }
-
-        StorePlatform storePlatform = new StorePlatform()
-        storePlatform.setId(tableIdService.getTableIdMulti("tbStorePlatform.id", 1, dataSourceId, String.valueOf(supplierCode)))
-        storePlatform.setIdStore(idStore)
-        storePlatform.setPlatformStoreId(invokeContent["poi_id"] as String)
-        storePlatform.setIdPlatformInfo(platformInfo.id)
-        storePlatform.setPlatformName(platformInfo.platformName)
-        storePlatform.setPlatformCode(platformInfo.platformCode)
-        storePlatform.setPlatformType(platformInfo.platformType)
-        storePlatform.setEnableStatue(1)
-        StorePlatform.create(storePlatform, currentUser.id)
-
-        if (platformInfo.requireList.size() > 0) {
-            long requireId = tableIdService.getTableIdMulti("tbStorePlatformRequire.id", platformInfo.requireList.size(), dataSourceId, String.valueOf(supplierCode))
-            platformInfo.requireList.each { require ->
-                StorePlatformRequire storePlatformRequire = new StorePlatformRequire()
-                storePlatformRequire.setId(requireId)
-                storePlatformRequire.setIdStore(storeInfo.id)
-                storePlatformRequire.setIdPlatformRequire(require.id)
-                storePlatformRequire.setIdStorePlatform(storePlatform.id)
-                storePlatformRequire.setPlatformRequireCode(require.requireCode)
-                storePlatformRequire.setPlatformRequireName(require.requireName)
-                StorePlatformRequire.create(storePlatformRequire, currentUser.id)
-            }
-        }
-
-
-        BulkRequestBuilder bulkRequest = esClient.getClient().prepareBulk().setRefreshPolicy(WriteRequest.RefreshPolicy.IMMEDIATE)
-
-        bulkRequest.add(esClient.getClient().prepareIndex(
-                keysService.getESKey(ESKeys.ES_DELIVER_STORE_INFO_INDEX, supplierCode), ESKeys.ES_DELIVER_STORE_PLATFORM_TYPE)
-                .setParent(String.valueOf(storePlatform.idStore))
-                .setId(String.valueOf(storePlatform.getId()))
-                .setSource(source.getConvert("storePlatformWriteConvert").convertTo(storePlatform), XContentType.JSON))
-
-        storePlatform.getRequireList().forEach(x -> {
-            bulkRequest.add(esClient.getClient().prepareIndex(
-                    keysService.getESKey(ESKeys.ES_DELIVER_STORE_INFO_INDEX, supplierCode), ESKeys.ES_DELIVER_STORE_PLATFORM_REQUIRE_TYPE)
-                    .setId(String.valueOf(x.getId()))
-                    .setParent(String.valueOf(storePlatform.getId()))
-                    .setSource(jsonConvert.convertTo(x), XContentType.JSON))
-        });
-
-        BulkResponse bulkResponse = bulkRequest.get();
-
-        if (bulkResponse.hasFailures()) {
-            logger.error("门店开通平台出错:" + bulkResponse.buildFailureMessage());
-            return RetResult.<StorePlatform> errorT().retinfo("门店开通平台出错:" + storePlatform.getPlatformName());
-        } else {
-            logger.info("门店开通平台成功");
-            //写数据库
-            storeDao = tunaService.generate(StoreDao.class)
-            storeDao.addStorePlatform(storePlatform, storePlatform.getRequireList(), dataSourceId, supplierCode);
-            return RetResult.successT();
-        }
-    }
-}

+ 1 - 1
conf/script/1000/storeApi/BE_Store_GenerateStoreAuthUrl_Douyin.groovy

@@ -15,7 +15,7 @@ import java.time.LocalDateTime
 import java.time.ZoneOffset
 import java.util.stream.Collectors
 
-class BE_Store_GenerateStoreAuthUrl_Douyin implements BusinessExecutor<ProcessIdItem, ScriptStringResult> {
+class BE_Store_GenerateStoreAuthUrl_DYLK implements BusinessExecutor<ProcessIdItem, ScriptStringResult> {
 
     private final Logger logger = LogManager.getLogger(this.getClass().getSimpleName())
 

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

@@ -36,13 +36,15 @@ updateTime, updateTimeLong ) values ( #{id}, #{ordername}, #{ordercode}, #{order
 -- [addOrderFinances]
 insert into $table$ (id, idOrder, orderMoney, deliverFee,
 orderPlatformSubsidy, storeDiscount, customerPaid,
-platformServiceFee, storeRealCollection, omeServiceFee, createBy,
-createTime, createTimeLong, updateBy,
-updateTime, updateTimeLong ) values ( #{id}, #{idorder}, #{ordermoney}, #{deliverfee},
+customerRefunded, platformServiceFee, storeRealCollection,
+omeServiceFee, createBy, createTime,
+createTimeLong, updateBy, updateTime,
+updateTimeLong ) values ( #{id}, #{idorder}, #{ordermoney}, #{deliverfee},
 #{orderplatformsubsidy}, #{storediscount}, #{customerpaid},
-#{platformservicefee}, #{storerealcollection}, #{omeservicefee}, #{createby},
-#{createtime}, #{createtimelong}, #{updateby},
-#{updatetime}, #{updatetimelong} );
+#{customerrefunded}, #{platformservicefee}, #{storerealcollection},
+#{omeservicefee}, #{createby}, #{createtime},
+#{createtimelong}, #{updateby}, #{updatetime},
+#{updatetimelong} );
 
 -- [addOrderDeliveryInfo]
 insert into $table$ (id, idOrder, deliverProvince, deliverCity,
@@ -85,18 +87,18 @@ where id = #{id};
 insert into $table$ (id, idOrder, idStore, outPlatformStoreId,
 idStorePlatform, platformCode, platformType,
 platformName, outAfterSaleId, idRefundRequest,
-refundReasonCodes, applySource, billCode,
-userRefundAmount, totalUserRefundAmount, prodCountAfterRefund,
-productsRemainDetail, productsRefundDetail, createBy,
-createTime, createTimeLong, updateBy,
-updateTime, updateTimeLong ) values ( #{id}, #{idorder}, #{idstore}, #{outplatformstoreid},
+refundReasonCodes, refundReasonMsgs, applySource,
+billCode, userRefundAmount, totalUserRefundAmount,
+prodCountAfterRefund, productsRemainDetail, productsRefundDetail,
+createBy, createTime, createTimeLong,
+updateBy, updateTime, updateTimeLong ) values ( #{id}, #{idorder}, #{idstore}, #{outplatformstoreid},
 #{idstoreplatform}, #{platformcode}, #{platformtype},
 #{platformname}, #{outaftersaleid}, #{idrefundrequest},
-#{refundreasoncodes}, #{applysource}, #{billcode},
-#{userrefundamount}, #{totaluserrefundamount}, #{prodcountafterrefund},
-#{productsremaindetail}, #{productsrefunddetail}, #{createby},
-#{createtime}, #{createtimelong}, #{updateby},
-#{updatetime}, #{updatetimelong} );
+#{refundreasoncodes}, #{refundreasonmsgs}, #{applysource},
+#{billcode}, #{userrefundamount}, #{totaluserrefundamount},
+#{prodcountafterrefund}, #{productsremaindetail}, #{productsrefunddetail},
+#{createby}, #{createtime}, #{createtimelong},
+#{updateby}, #{updatetime}, #{updatetimelong} );
 
 -- [addOrderRefundRequest]
 insert into $table$ (id, idOrder, idStore, outPlatformStoreId,
@@ -119,4 +121,21 @@ updateTime, updateTimeLong ) values ( #{id}, #{idorder}, #{idstore}, #{outplatfo
 
 -- [updateOrderRefundRequest]
 update $table$ set requestStatus = #{requeststatus}, updateBy = #{updateby},updateTime = #{updatetime},updateTimeLong = #{updatetimelong}
-where id = #{id};
+where id = #{id};
+
+-- [updateOrderFinances]
+update $table$ set orderMoney = #{ordermoney},deliverFee = #{deliverfee},orderPlatformSubsidy = #{orderplatformsubsidy},
+storeDiscount = #{storediscount},customerRefunded = #{customerrefunded},platformServiceFee = #{platformservicefee},
+storeRealCollection = #{storerealcollection},omeServiceFee = #{omeservicefee},updateBy = #{updateby},updateTime = #{updatetime},updateTimeLong = #{updatetimelong}
+ where id = #{id};
+
+ -- [updateBusinessOrder]
+ update $table$ set deliverFee = #{deliverfee}, deliverAddressAll = #{deliveraddressall} ,
+ updateBy = #{updateby},updateTime = #{updatetime},updateTimeLong = #{updatetimelong}
+ where id = #{id};
+
+ -- [updateOrderDeliveryInfo]
+ update $table$ set deliverProvince = #{deliverprovince},deliverCity = #{delivercity},deliverDistract = #{deliverdistract},
+ deliverAddress = #{deliveraddress},geoLocationSerial = #{geolocationserial},receiveMan = #{receiveman},contractPhone = #{contractphone},
+ deliverTimeliness = #{delivertimeliness},bookingDeliverTime = #{bookingdelivertime},bookingDeliverTimeLong = #{bookingdelivertimelong},customerInvoiceInfo = #{customerinvoiceinfo},
+ updateBy = #{updateby},updateTime = #{updatetime},updateTimeLong = #{updatetimelong} where id = #{id};

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

@@ -182,6 +182,6 @@ updateBy = #{updateby},updateTime = #{updatetime},updateTimeLong = #{updatetimel
 -- [deleteStorePlatformRequireByIdStore]
 delete from $table$ where id = #{id};
 
- update $table$ set voidFlag = #{voidflag},updateBy = #{updateby},
+-- [enableStorePlatform]
+ update $table$ set enableStatue = #{enablestatue},updateBy = #{updateby},
  updateTime = #{updatetime},updateTimeLong = #{updatetimelong} where id = #{id};

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

@@ -406,3 +406,8 @@ ALTER TABLE `deorderaftersalebill1000_current`
     ADD COLUMN `idRefundRequest` bigint(20) NULL AFTER `outAfterSaleId`;
 
 
+ALTER TABLE `deorderfinances1000_current`
+    ADD COLUMN `customerRefunded` decimal(18, 4) NULL AFTER `customerPaid`;
+
+ALTER TABLE `deorderaftersalebill1000_current`
+    ADD COLUMN `refundReasonMsgs` varchar(500) NULL AFTER `refundReasonCodes`;

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

@@ -86,4 +86,37 @@ public interface OrderDao extends DaoRepository {
                            List<OrderAfterSaleBill> afterSaleBills, //这个地方用list是为了规避参数不能为null的情况
                            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 = "updateOrderFinances", table = "deOrderFinances", tableParam = 5, params = {1}, sort = 1)
+    @SqlId(clazz = OrderDao.class, sql = "addOrderAfterSaleBill", table = "deOrderAfterSaleBill", tableParam = 5, params = {2}, sort = 2)
+    @SqlId(clazz = OrderDao.class, sql = "addOrderStep", table = "deOrderStep", tableParam = 5, params = {3}, sort = 3)
+    int partRefundOrder(OrderFinances orderFinances,
+                           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 = "updateOrderFinances", table = "deOrderFinances", tableParam = 4, params = {1}, sort = 1)
+    @SqlId(clazz = OrderDao.class, sql = "addOrderStep", table = "deOrderStep", tableParam = 4, params = {2}, sort = 2)
+    int orderConfirmBill(OrderFinances orderFinances,
+                        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 = "updateBusinessOrder", table = "deBusinessOrder", tableParam = 5, params = {1}, sort = 1)
+    @SqlId(clazz = OrderDao.class, sql = "updateOrderDeliveryInfo", table = "deOrderDeliveryInfo", tableParam = 5, params = {1}, sort = 1)
+    @SqlId(clazz = OrderDao.class, sql = "addOrderStep", table = "deOrderStep", tableParam = 5, params = {3}, sort = 3)
+    int updateOrderDelivery(BusinessOrder businessOrder,
+                            OrderDeliveryInfo orderDeliveryInfo,
+                            List<OrderStep> stepList,
+                            @DatabaseShardingBy String dataSourceId, String tableKey);
+
+
 }

+ 4 - 2
ddBusiness/src/main/java/com/dderp/business/dao/StoreDao.java

@@ -103,6 +103,8 @@ public interface StoreDao extends DaoRepository {
     int addStorePlatform(StorePlatform storeInvoiceInfo, List<StorePlatformRequire> requireList,
                          @DatabaseShardingBy String dataSourceId, @TableShardingBy Long supplierCode);
 
+
+
     @Sharding(databaseShardingStrategy = SupplierDataBaseShardingStrategy.class, tableShardingStrategy = SupplierTableShardingStrategy.class)
     @DAOMethod(operator = OperatorType.UPDATE, owait = OperatorWait.ASNYC)
     @SqlId(clazz = StoreDao.class, sql = "updateStorePlatform", table = "tbStorePlatform", params = {1})
@@ -113,7 +115,7 @@ public interface StoreDao extends DaoRepository {
 
     @Sharding(databaseShardingStrategy = SupplierDataBaseShardingStrategy.class, tableShardingStrategy = SupplierTableShardingStrategy.class)
     @DAOMethod(operator = OperatorType.UPDATE, owait = OperatorWait.ASNYC)
-    @SqlId(clazz = StoreDao.class, sql = "voidStorePlatform", table = "tbStorePlatform", params = {1})
-    int voidStorePlatform(StorePlatform storePlatform, @DatabaseShardingBy String dataSourceId, @TableShardingBy Long supplierCode);
+    @SqlId(clazz = StoreDao.class, sql = "enableStorePlatform", table = "tbStorePlatform", params = {1})
+    int enableStorePlatform(StorePlatform storePlatform, @DatabaseShardingBy String dataSourceId, @TableShardingBy Long supplierCode);
     //endregion
 }

+ 14 - 0
ddBusiness/src/main/java/com/dderp/business/service/flycat/DouyinServiceImpl.java

@@ -164,4 +164,18 @@ public class DouyinServiceImpl extends BaseService implements DouyinService {
         }
     }
 
+    @Override
+    public String getInvoker(String subUrl, String body) {
+        Map<String, String> header = new HashMap<>();
+        header.put("access-token", getAccessToken());
+        header.put("log_id", String.valueOf(new Date().getTime()));
+        header.put("Content-Type", "application/json");
+
+        try {
+            return HttpTools.getHttpContentAsync(reqUrl + subUrl, header, body).get(20, TimeUnit.SECONDS);
+        } catch (InterruptedException | ExecutionException | TimeoutException e) {
+            logger.error("请求抖音来客接口[" + subUrl + "]失败", e);
+            return null;
+        }
+    }
 }

+ 1 - 1
ddCommon/src/main/java/com/dderp/common/api/flycat/DouyinService.java

@@ -8,6 +8,6 @@ import com.sweetfish.service.Service;
 public interface DouyinService extends Service {
     String postInvoker(String subUrl, String body);
 
-
+    String getInvoker(String subUrl, String body);
 
 }

+ 13 - 0
ddCommon/src/main/java/com/dderp/common/entity/order/OrderAfterSaleBill.java

@@ -55,6 +55,10 @@ public class OrderAfterSaleBill extends BaseEntity {
     @Comment("退款原因代码list")
     private String refundReasonCodes;
 
+    @Comment("退款原因msg")
+    @RColumn("refundreasonmsgs")
+    private String refundReasonMsgs;
+
     @RColumn("applysource")
     @Comment("售后申请来源")
     private String applySource;
@@ -238,6 +242,14 @@ public class OrderAfterSaleBill extends BaseEntity {
         this.idRefundRequest = idRefundRequest;
     }
 
+    public String getRefundReasonMsgs() {
+        return refundReasonMsgs;
+    }
+
+    public void setRefundReasonMsgs(String refundReasonMsgs) {
+        this.refundReasonMsgs = refundReasonMsgs;
+    }
+
     public static OrderAfterSaleBill buildFromRefundRequest(OrderRefundRequest refundRequest) {
         OrderAfterSaleBill afterSaleBill = new OrderAfterSaleBill();
         afterSaleBill.setIdRefundRequest(refundRequest.getId());
@@ -250,6 +262,7 @@ public class OrderAfterSaleBill extends BaseEntity {
         afterSaleBill.setPlatformName(refundRequest.getPlatformName());
         afterSaleBill.setOutAfterSaleId(refundRequest.getOutAfterSaleId());
         afterSaleBill.setRefundReasonCodes(refundRequest.getRefundReasonCodes());
+        afterSaleBill.setRefundReasonMsgs(refundRequest.getRefuseToRefundMemo());
         afterSaleBill.setApplySource("USER"); //退款申请目前都是用户发起的,所以写死USER
         afterSaleBill.setFullRefunded(true); //退款申请目前只支持整单退款,所以金额是整单金额
         afterSaleBill.setUserRefundAmount(refundRequest.getRefundFee());

+ 12 - 0
ddCommon/src/main/java/com/dderp/common/entity/order/OrderFinances.java

@@ -36,6 +36,10 @@ public class OrderFinances extends BaseEntity {
     @Comment("客户实付")
     private BigDecimal customerPaid;
 
+    @Comment("客户实退")
+    @RColumn("customerrefunded")
+    private BigDecimal customerRefunded;
+
     @RColumn("platformservicefee")
     @Comment("平台收取服务费")
     private BigDecimal platformServiceFee;
@@ -127,4 +131,12 @@ public class OrderFinances extends BaseEntity {
     public void setOmeServiceFee(BigDecimal omeServiceFee) {
         this.omeServiceFee = omeServiceFee;
     }
+
+    public BigDecimal getCustomerRefunded() {
+        return customerRefunded;
+    }
+
+    public void setCustomerRefunded(BigDecimal customerRefunded) {
+        this.customerRefunded = customerRefunded;
+    }
 }

+ 31 - 0
ddWebCore/src/main/java/com/dderp/webcore/servlet/OrderCallServlet.java

@@ -210,10 +210,41 @@ public class OrderCallServlet extends HttpServlet {
             }
             case "life_trade_part_refund_complete": {
                 //订单已部分退款消息
+                CompletableFuture.runAsync(() -> {
+                    InvokeCallParams callParams = new InvokeCallParams();
+                    callParams.setBusinessMethod("Order_PartRefund_DYLK");
+                    callParams.setParams(callBody.getContent());
+                    RetResult<InvokeCallResult> result = orderService.callOrder(callParams, currentUser, dataSourceId, supplierCode);
+                    if (result.isSuccess())
+                        logger.info("[抖音来客]部分退款成功");
+                    else logger.error("[抖音来客]部分退款失败:" + result.getRetinfo());
+                });
+                break;
+            }
+            case "life_takeout_bill_ledger_create": {
+                //订单确认账单消息
+                CompletableFuture.runAsync(() -> {
+                    InvokeCallParams callParams = new InvokeCallParams();
+                    callParams.setBusinessMethod("Order_BillConfirm_DYLK");
+                    callParams.setParams(callBody.getContent());
+                    RetResult<InvokeCallResult> result = orderService.callOrder(callParams, currentUser, dataSourceId, supplierCode);
+                    if (result.isSuccess())
+                        logger.info("[抖音来客]账单确认成功");
+                    else logger.error("[抖音来客]账单确认失败:" + result.getRetinfo());
+                });
                 break;
             }
             case "life_trade_takeout_order_modify": {
                 //订单修改消息,主要是修改配送信息
+                CompletableFuture.runAsync(() -> {
+                    InvokeCallParams callParams = new InvokeCallParams();
+                    callParams.setBusinessMethod("Order_DeliveryChange_DYLK");
+                    callParams.setParams(callBody.getContent());
+                    RetResult<InvokeCallResult> result = orderService.callOrder(callParams, currentUser, dataSourceId, supplierCode);
+                    if (result.isSuccess())
+                        logger.info("[抖音来客]订单配送信息修改成功");
+                    else logger.error("[抖音来客]订单配送信息修改失败:" + result.getRetinfo());
+                });
                 break;
             }
         }