From 6d3fb51a8a7989421f0e2a2b4568c881231df02c Mon Sep 17 00:00:00 2001 From: wangchaoxu Date: Tue, 5 Sep 2023 11:23:31 +0800 Subject: [PATCH 01/10] =?UTF-8?q?=E9=87=87=E8=B4=AD=E9=85=8D=E7=BD=AE?= =?UTF-8?q?=E7=9B=B8=E5=85=B3?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../java/com/ms/api/spi/order/SavePurchaseSettingService.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/ms-biz/src/main/java/com/ms/api/spi/order/SavePurchaseSettingService.java b/ms-biz/src/main/java/com/ms/api/spi/order/SavePurchaseSettingService.java index ccde1914..3e5654bc 100644 --- a/ms-biz/src/main/java/com/ms/api/spi/order/SavePurchaseSettingService.java +++ b/ms-biz/src/main/java/com/ms/api/spi/order/SavePurchaseSettingService.java @@ -209,7 +209,7 @@ public class SavePurchaseSettingService extends SPIBaseService implements Extens */ private boolean checkSignedAutoPayProtocal(Long shopId) throws Exception { Map params = new HashMap<>(); - params.put("userId", SecurityTool.encodeByAES(String.valueOf(shopId))); + params.put("shopId", SecurityTool.encodeByAES(String.valueOf(shopId))); params.put("platform", CommonConst.PLATFORM); String res = dsJsonRequestTemplate.execute("/order/getOrderPayProtocolPay", params); log.info(res); From 7eb7ca2a27818d526f82b3a298f94e7b3fa593f2 Mon Sep 17 00:00:00 2001 From: wangchaoxu Date: Tue, 5 Sep 2023 11:38:20 +0800 Subject: [PATCH 02/10] =?UTF-8?q?=E9=87=87=E8=B4=AD=E9=85=8D=E7=BD=AE?= =?UTF-8?q?=E7=9B=B8=E5=85=B3?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../java/com/ms/api/spi/order/SavePurchaseSettingService.java | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/ms-biz/src/main/java/com/ms/api/spi/order/SavePurchaseSettingService.java b/ms-biz/src/main/java/com/ms/api/spi/order/SavePurchaseSettingService.java index 3e5654bc..523d4e44 100644 --- a/ms-biz/src/main/java/com/ms/api/spi/order/SavePurchaseSettingService.java +++ b/ms-biz/src/main/java/com/ms/api/spi/order/SavePurchaseSettingService.java @@ -219,8 +219,8 @@ public class SavePurchaseSettingService extends SPIBaseService implements Extens log.error("自动扣款协议请求失败,原因:" + jsonObject.getString("reason")); throw new RuntimeException(jsonObject.getString("reason")); } else { - JSONArray paymentAgreements = jsonObject.getJSONObject("data").getJSONArray("paymentAgreements"); - for (Object paymentAgreement : paymentAgreements) { + JSONObject paymentAgreements = jsonObject.getJSONObject("data").getJSONObject("paymentAgreements"); + for (Object paymentAgreement : paymentAgreements.values()) { JSONObject obj = (JSONObject)paymentAgreement; String signedStatus = obj.getString("signedStatus"); if (signedStatus.equals("true")) { From 947fe3b4bb5e854edd53d33982f24e7d9d3f6abc Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?cxxxxxxx=E8=AF=A6?= <286460656@qq.com> Date: Tue, 5 Sep 2023 11:41:09 +0800 Subject: [PATCH 03/10] =?UTF-8?q?=E6=B5=8B=E8=AF=95=E6=8E=A5=E5=8F=A3?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- README.md | 2 +- .../main/java/com/ms/api/TestSpiService.java | 44 +++++++++---------- 2 files changed, 23 insertions(+), 23 deletions(-) diff --git a/README.md b/README.md index a63c1053..f443fffc 100644 --- a/README.md +++ b/README.md @@ -5,7 +5,7 @@ curl --location --request POST 'localhost:8080/base/cloud/spi' \ --data-raw '{ "appId":"7264840234423027259", "authId":"4463798", -"method":"getShopCloudHotProducts", +"method":"testSpi", "data":"{\"sourceChannelCode\":\"query_none_less\",\"pageSize\":20,\"pageNo\":1}" }' diff --git a/ms-biz/src/main/java/com/ms/api/TestSpiService.java b/ms-biz/src/main/java/com/ms/api/TestSpiService.java index 68396dbb..105682b3 100644 --- a/ms-biz/src/main/java/com/ms/api/TestSpiService.java +++ b/ms-biz/src/main/java/com/ms/api/TestSpiService.java @@ -1,47 +1,47 @@ package com.ms.api; +import com.alibaba.fastjson.JSON; +import com.alibaba.fastjson.JSONObject; import com.jinritemai.cloud.base.api.BaseRequest; import com.jinritemai.cloud.base.api.BaseResponse; import com.jinritemai.cloud.base.api.ExtensionService; import com.jinritemai.cloud.base.api.ExtensionServiceHandler; import com.ms.api.common.R; import com.ms.api.common.Ret; +import com.ms.api.common.SPIBaseService; import com.ms.api.dto.ItemDTO; +import com.ms.api.tool.DsJsonRequestTemplate; import lombok.extern.slf4j.Slf4j; +import org.springframework.beans.factory.annotation.Autowired; import java.io.BufferedReader; import java.io.IOException; import java.io.InputStream; import java.io.InputStreamReader; import java.util.HashMap; -import java.util.Map; @ExtensionService("testSpi") @Slf4j -public class TestSpiService implements ExtensionServiceHandler { - +public class TestSpiService extends SPIBaseService implements ExtensionServiceHandler { + @Autowired + private DsJsonRequestTemplate dsJsonRequestTemplate; @Override - public BaseResponse handle(BaseRequest req) { - - String resourceFileName = "/getProductCatTree.txt"; // 注意路径的开头是一个斜杠 - String lines = null; - try (InputStream is = InputStream.class.getResourceAsStream(resourceFileName); - BufferedReader reader = new BufferedReader(new InputStreamReader(is))) { - String line; - while ((line = reader.readLine()) != null) { - System.out.println(line); - log.info(line); - lines = lines + line; - } - } catch (IOException e) { - log.error(e.getMessage()); + public BaseResponse handle(BaseRequest req) { + initHandle(req); + getAuthCode(); + String res = null; + HashMap params = new HashMap<>(); + params.put("platformItemId", "1"); + params.put("sourceItemId", "33"); + params.put("authCode", authCode); + try { + res = dsJsonRequestTemplate.execute("/micro_move/add_platform_item_to_source_item_relation", params); + log.info("rrrr"+res); + } catch (Exception e) { e.printStackTrace(); + log.error(e.getMessage()); } - - Map result = new HashMap<>(); - result.put("line", lines); - - return R.ok(Ret.success(result)); + return R.ok(JSON.parseObject(res)); } } From 863ae17d64aa130777518c8801b17284bfb97220 Mon Sep 17 00:00:00 2001 From: wangchaoxu Date: Tue, 5 Sep 2023 13:27:29 +0800 Subject: [PATCH 04/10] =?UTF-8?q?=E6=B6=88=E6=81=AF=E6=8E=A8=E9=80=81?= =?UTF-8?q?=E5=9B=9E=E8=B0=83=E5=A4=84=E7=90=86?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- ms-biz/src/main/java/com/ms/api/common/R.java | 2 - .../com/ms/api/service/DoudianMsgService.java | 4 ++ .../service/impl/DoudianMsgServiceImpl.java | 37 ++++++++++++++++++- .../spi/callback/OpenMsgConsumerService.java | 26 ++++++++++++- 4 files changed, 64 insertions(+), 5 deletions(-) diff --git a/ms-biz/src/main/java/com/ms/api/common/R.java b/ms-biz/src/main/java/com/ms/api/common/R.java index 64aa4934..dd11082a 100644 --- a/ms-biz/src/main/java/com/ms/api/common/R.java +++ b/ms-biz/src/main/java/com/ms/api/common/R.java @@ -1,7 +1,5 @@ package com.ms.api.common; -import java.util.List; - import com.jinritemai.cloud.base.api.BaseResponse; public class R { diff --git a/ms-biz/src/main/java/com/ms/api/service/DoudianMsgService.java b/ms-biz/src/main/java/com/ms/api/service/DoudianMsgService.java index a3342d6e..6d741f72 100644 --- a/ms-biz/src/main/java/com/ms/api/service/DoudianMsgService.java +++ b/ms-biz/src/main/java/com/ms/api/service/DoudianMsgService.java @@ -2,6 +2,8 @@ package com.ms.api.service; import com.ms.dal.entity.DoudianMsg; +import java.util.List; + /** * */ @@ -18,4 +20,6 @@ public interface DoudianMsgService { int updateByPrimaryKeySelective(DoudianMsg record); int updateByPrimaryKey(DoudianMsg record); + + boolean addDoudianMsg(String msgBody); } diff --git a/ms-biz/src/main/java/com/ms/api/service/impl/DoudianMsgServiceImpl.java b/ms-biz/src/main/java/com/ms/api/service/impl/DoudianMsgServiceImpl.java index 67e81655..eade5e52 100644 --- a/ms-biz/src/main/java/com/ms/api/service/impl/DoudianMsgServiceImpl.java +++ b/ms-biz/src/main/java/com/ms/api/service/impl/DoudianMsgServiceImpl.java @@ -1,21 +1,30 @@ package com.ms.api.service.impl; -import com.ms.dal.entity.DoudianMsg; +import com.ms.api.consts.StatusConst; import com.ms.api.service.DoudianMsgService; +import com.ms.dal.entity.DoudianMsg; +import com.ms.dal.entity.DoudianMsgParseQueue; import com.ms.dal.mapper.DoudianMsgMapper; +import com.ms.dal.mapper.DoudianMsgParseQueueMapper; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; +import org.springframework.transaction.annotation.Transactional; + +import java.util.Date; /** * */ @Service -public class DoudianMsgServiceImpl implements DoudianMsgService{ +public class DoudianMsgServiceImpl implements DoudianMsgService { @Autowired private DoudianMsgMapper doudianMsgMapper; + @Autowired + private DoudianMsgParseQueueMapper doudianMsgParseQueueMapper; + @Override public int deleteByPrimaryKey(Long id) { return doudianMsgMapper.deleteByPrimaryKey(id); @@ -46,6 +55,30 @@ public class DoudianMsgServiceImpl implements DoudianMsgService{ return doudianMsgMapper.updateByPrimaryKey(record); } + @Transactional(rollbackFor = Exception.class) + @Override + public boolean addDoudianMsg(String msgBody) { + DoudianMsg doudianMsgData = new DoudianMsg(); + doudianMsgData.setMsgBody(msgBody); + doudianMsgData.setStatus(StatusConst.wait); + doudianMsgData.setGmtCreate(new Date()); + doudianMsgData.setGmtModified(new Date()); + doudianMsgMapper.insertSelective(doudianMsgData); + + DoudianMsgParseQueue doudianMsgParseQueueData = new DoudianMsgParseQueue(); + doudianMsgParseQueueData.setDoudianMsgId(doudianMsgData.getDoudianMsgId()); + doudianMsgParseQueueData.setLocked(0L); + doudianMsgParseQueueData.setGmtCreate(new Date()); + doudianMsgParseQueueData.setGmtModified(new Date()); + doudianMsgParseQueueMapper.insertSelective(doudianMsgParseQueueData); + + return true; + } + +// public boolean addDoudianFailMsg(String msgBody) { +// return true; +// } + } diff --git a/ms-biz/src/main/java/com/ms/api/spi/callback/OpenMsgConsumerService.java b/ms-biz/src/main/java/com/ms/api/spi/callback/OpenMsgConsumerService.java index 8a63e4cb..45431743 100644 --- a/ms-biz/src/main/java/com/ms/api/spi/callback/OpenMsgConsumerService.java +++ b/ms-biz/src/main/java/com/ms/api/spi/callback/OpenMsgConsumerService.java @@ -8,7 +8,9 @@ import com.jinritemai.cloud.base.api.ExtensionServiceHandler; import com.ms.api.common.R; import com.ms.api.common.SPIBaseService; import com.ms.api.dto.auth.PlatformAuthCallBackRequestDTO; +import com.ms.api.service.DoudianMsgService; import lombok.extern.slf4j.Slf4j; +import org.springframework.beans.factory.annotation.Autowired; import java.util.List; @@ -19,14 +21,36 @@ import java.util.List; @Slf4j public class OpenMsgConsumerService extends SPIBaseService implements ExtensionServiceHandler, Void> { + @Autowired + private DoudianMsgService doudianMsgService; + @Override public BaseResponse handle(BaseRequest> req) { initHandle(req); + // ----参数校验---- + List msgList = req.getData(); + if (msgList == null || msgList.size() == 0) { + R.ok(); + } + String msgBody = JSON.toJSONString(msgList); // ----逻辑校验---- // ----业务处理---- - return R.ok(); + boolean addRet = false; + try { + addRet = doudianMsgService.addDoudianMsg(msgBody); + } catch (Exception e) { + log.error(String.format("addDoudianMsg fail, exception: %s", e.getMessage())); + } + + if (!addRet) { + log.info(String.format("fail msgBody: %s", JSON.toJSONString(msgList))); + return BaseResponse.builder().success(false).code("1").build(); + } + + // 处理成功则返回 true code 0 + return BaseResponse.builder().success(true).code("0").build(); } } From 180163360b5ec394b9be08f06ee45e1e81762c2f Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?cxxxxxxx=E8=AF=A6?= <286460656@qq.com> Date: Tue, 5 Sep 2023 14:12:12 +0800 Subject: [PATCH 05/10] =?UTF-8?q?=E8=8E=B7=E5=8F=96=E6=A8=A1=E6=9D=BF?= =?UTF-8?q?=E5=88=97=E8=A1=A8?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- README.md | 2 +- .../GetFreightTemplateListRequestDTO.java | 22 ++++++++ .../main/java/com/ms/api/TestSpiService.java | 3 +- .../api/spi/move/GetFreightTemplateList.java | 51 +++++++++++++++++++ .../move/GetShopCloudHotProductsService.java | 4 -- .../spi/move/SaveBatchMoveTaskService.java | 1 + .../java/com/ms/api/util/DdRequestUtil.java | 21 ++++++++ 7 files changed, 98 insertions(+), 6 deletions(-) create mode 100644 ms-api/src/main/java/com/ms/api/dto/move/GetFreightTemplateListRequestDTO.java create mode 100644 ms-biz/src/main/java/com/ms/api/spi/move/GetFreightTemplateList.java diff --git a/README.md b/README.md index f443fffc..4eddc5c2 100644 --- a/README.md +++ b/README.md @@ -5,7 +5,7 @@ curl --location --request POST 'localhost:8080/base/cloud/spi' \ --data-raw '{ "appId":"7264840234423027259", "authId":"4463798", -"method":"testSpi", +"method":"getFreightTemplateList", "data":"{\"sourceChannelCode\":\"query_none_less\",\"pageSize\":20,\"pageNo\":1}" }' diff --git a/ms-api/src/main/java/com/ms/api/dto/move/GetFreightTemplateListRequestDTO.java b/ms-api/src/main/java/com/ms/api/dto/move/GetFreightTemplateListRequestDTO.java new file mode 100644 index 00000000..cb6bfdd0 --- /dev/null +++ b/ms-api/src/main/java/com/ms/api/dto/move/GetFreightTemplateListRequestDTO.java @@ -0,0 +1,22 @@ +package com.ms.api.dto.move; + +import lombok.Data; + +/* + * 获取店铺模板 请求参数 + */ +@Data +public class GetFreightTemplateListRequestDTO { + /** + * 运费模板名称,支持模糊搜索(例:模版1) + */ + private String name; + /** + * 分页参数 + */ + private String pageNo; + /** + * 分页参数 + */ + private String pageSize; +} diff --git a/ms-biz/src/main/java/com/ms/api/TestSpiService.java b/ms-biz/src/main/java/com/ms/api/TestSpiService.java index 105682b3..5b080065 100644 --- a/ms-biz/src/main/java/com/ms/api/TestSpiService.java +++ b/ms-biz/src/main/java/com/ms/api/TestSpiService.java @@ -11,6 +11,7 @@ import com.ms.api.common.Ret; import com.ms.api.common.SPIBaseService; import com.ms.api.dto.ItemDTO; import com.ms.api.tool.DsJsonRequestTemplate; +import com.ms.api.tool.SecurityTool; import lombok.extern.slf4j.Slf4j; import org.springframework.beans.factory.annotation.Autowired; @@ -32,7 +33,7 @@ public class TestSpiService extends SPIBaseService implements ExtensionServiceHa getAuthCode(); String res = null; HashMap params = new HashMap<>(); - params.put("platformItemId", "1"); + params.put("platformItemId", SecurityTool.encodeByAES("1")); params.put("sourceItemId", "33"); params.put("authCode", authCode); try { diff --git a/ms-biz/src/main/java/com/ms/api/spi/move/GetFreightTemplateList.java b/ms-biz/src/main/java/com/ms/api/spi/move/GetFreightTemplateList.java new file mode 100644 index 00000000..129f769e --- /dev/null +++ b/ms-biz/src/main/java/com/ms/api/spi/move/GetFreightTemplateList.java @@ -0,0 +1,51 @@ +package com.ms.api.spi.move; + +import com.doudian.open.api.freightTemplate_list.data.FreightTemplateListData; +import com.doudian.open.api.freightTemplate_list.param.FreightTemplateListParam; +import com.doudian.open.api.product_isv_getClueList.data.ProductIsvGetClueListData; +import com.doudian.open.api.product_isv_getClueList.param.ProductIsvGetClueListParam; +import com.jinritemai.cloud.base.api.BaseRequest; +import com.jinritemai.cloud.base.api.BaseResponse; +import com.jinritemai.cloud.base.api.ExtensionService; +import com.jinritemai.cloud.base.api.ExtensionServiceHandler; +import com.ms.api.common.R; +import com.ms.api.common.Ret; +import com.ms.api.common.SPIBaseService; +import com.ms.api.dto.move.GetFreightTemplateListRequestDTO; +import com.ms.api.dto.move.GetShopCloudHotProductsRequestDTO; +import com.ms.api.tool.DsJsonRequestTemplate; +import com.ms.api.util.DdRequestUtil; +import lombok.extern.slf4j.Slf4j; +import org.springframework.beans.factory.annotation.Autowired; + +import java.util.HashMap; +import java.util.Map; + +/** + * 获取店铺模板列表 + */ +@ExtensionService("getFreightTemplateList") +@Slf4j +public class GetFreightTemplateList extends SPIBaseService implements ExtensionServiceHandler { + @Override + public BaseResponse handle(BaseRequest req) { + initHandle(req); + // ----参数校验---- + GetFreightTemplateListRequestDTO fields = req.getData(); + + // ----逻辑校验---- + + // ----业务处理---- + FreightTemplateListParam param = new FreightTemplateListParam(); + param.setName(fields.getName()); + param.setPage(fields.getPageNo()); + param.setSize(fields.getPageSize()); + FreightTemplateListData data = DdRequestUtil.FreightTemplateListDataRequest(param); + Map result = new HashMap<>(); + result.put("data", data.getList()); + result.put("total", data.getCount()); + + // ----结果返回---- + return R.ok(Ret.success(result)); + } +} diff --git a/ms-biz/src/main/java/com/ms/api/spi/move/GetShopCloudHotProductsService.java b/ms-biz/src/main/java/com/ms/api/spi/move/GetShopCloudHotProductsService.java index 5ecf5227..8eaf0733 100644 --- a/ms-biz/src/main/java/com/ms/api/spi/move/GetShopCloudHotProductsService.java +++ b/ms-biz/src/main/java/com/ms/api/spi/move/GetShopCloudHotProductsService.java @@ -26,10 +26,6 @@ import java.util.Map; @ExtensionService("getShopCloudHotProducts") @Slf4j public class GetShopCloudHotProductsService extends SPIBaseService implements ExtensionServiceHandler { - - @Autowired - private DsJsonRequestTemplate dsJsonRequestTemplate; - @Override public BaseResponse handle(BaseRequest req) { initHandle(req); diff --git a/ms-biz/src/main/java/com/ms/api/spi/move/SaveBatchMoveTaskService.java b/ms-biz/src/main/java/com/ms/api/spi/move/SaveBatchMoveTaskService.java index 70aa9f38..e214cad7 100644 --- a/ms-biz/src/main/java/com/ms/api/spi/move/SaveBatchMoveTaskService.java +++ b/ms-biz/src/main/java/com/ms/api/spi/move/SaveBatchMoveTaskService.java @@ -1,5 +1,6 @@ package com.ms.api.spi.move; +import com.doudian.open.api.freightTemplate_list.FreightTemplateListRequest; import com.jinritemai.cloud.base.api.BaseRequest; import com.jinritemai.cloud.base.api.BaseResponse; import com.jinritemai.cloud.base.api.ExtensionService; diff --git a/ms-biz/src/main/java/com/ms/api/util/DdRequestUtil.java b/ms-biz/src/main/java/com/ms/api/util/DdRequestUtil.java index 6636cd9c..459cb101 100644 --- a/ms-biz/src/main/java/com/ms/api/util/DdRequestUtil.java +++ b/ms-biz/src/main/java/com/ms/api/util/DdRequestUtil.java @@ -8,6 +8,10 @@ import com.doudian.open.api.afterSale_Detail.AfterSaleDetailRequest; import com.doudian.open.api.afterSale_Detail.AfterSaleDetailResponse; import com.doudian.open.api.afterSale_Detail.data.AfterSaleDetailData; import com.doudian.open.api.afterSale_Detail.param.AfterSaleDetailParam; +import com.doudian.open.api.freightTemplate_list.FreightTemplateListRequest; +import com.doudian.open.api.freightTemplate_list.FreightTemplateListResponse; +import com.doudian.open.api.freightTemplate_list.data.FreightTemplateListData; +import com.doudian.open.api.freightTemplate_list.param.FreightTemplateListParam; import com.doudian.open.api.order_BatchSearchIndex.OrderBatchSearchIndexRequest; import com.doudian.open.api.order_BatchSearchIndex.OrderBatchSearchIndexResponse; import com.doudian.open.api.order_BatchSearchIndex.data.OrderBatchSearchIndexData; @@ -200,4 +204,21 @@ public class DdRequestUtil { } throw new RuntimeException(String.format("抖店请求错误:msg:%s,code:%s,subCode:%s,subMsg:%s,", response.getMsg(), response.getCode(), response.getSubCode(), response.getSubMsg())); } + + public static FreightTemplateListData FreightTemplateListDataRequest(FreightTemplateListParam param) { + String activeProfile= System.getenv("sys-deploy-env"); + if (!"Prod".equals(activeProfile)){ + AuthThreadLocalUtil.set(AppConst.TEST_SHOP_ID); + } + FreightTemplateListRequest request = new FreightTemplateListRequest(); + request.setParam(param); + log.info("=============Dd请求餐素:{}===================", JSONObject.toJSONString(param)); + FreightTemplateListResponse response = request.execute(); + log.info("=============Dd请求返回:{}===================", JSONObject.toJSONString(response)); + boolean success = CommonTool.checkDdApiRequestIsSuccess(response); + if (success && ObjectUtil.isNotEmpty(response.getData())) { + return response.getData(); + } + throw new RuntimeException(String.format("抖店请求错误:msg:%s,code:%s,subCode:%s,subMsg:%s,", response.getMsg(), response.getCode(), response.getSubCode(), response.getSubMsg())); + } } From da9d03c0b96d6e4e8aa8c423cc52ffe364485f96 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?cxxxxxxx=E8=AF=A6?= <286460656@qq.com> Date: Tue, 5 Sep 2023 14:27:29 +0800 Subject: [PATCH 06/10] =?UTF-8?q?=E8=8E=B7=E5=8F=96=E5=BA=97=E9=93=BA?= =?UTF-8?q?=E6=A8=A1=E6=9D=BF?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- README.md | 2 +- .../com/ms/api/dto/move/GetFreightTemplateListRequestDTO.java | 4 ++-- .../main/java/com/ms/api/spi/move/GetFreightTemplateList.java | 4 +--- 3 files changed, 4 insertions(+), 6 deletions(-) diff --git a/README.md b/README.md index 4eddc5c2..a81ce742 100644 --- a/README.md +++ b/README.md @@ -6,7 +6,7 @@ curl --location --request POST 'localhost:8080/base/cloud/spi' \ "appId":"7264840234423027259", "authId":"4463798", "method":"getFreightTemplateList", -"data":"{\"sourceChannelCode\":\"query_none_less\",\"pageSize\":20,\"pageNo\":1}" +"data":"{}" }' diff --git a/ms-api/src/main/java/com/ms/api/dto/move/GetFreightTemplateListRequestDTO.java b/ms-api/src/main/java/com/ms/api/dto/move/GetFreightTemplateListRequestDTO.java index cb6bfdd0..60800706 100644 --- a/ms-api/src/main/java/com/ms/api/dto/move/GetFreightTemplateListRequestDTO.java +++ b/ms-api/src/main/java/com/ms/api/dto/move/GetFreightTemplateListRequestDTO.java @@ -14,9 +14,9 @@ public class GetFreightTemplateListRequestDTO { /** * 分页参数 */ - private String pageNo; + private String page; /** * 分页参数 */ - private String pageSize; + private String size = "100"; } diff --git a/ms-biz/src/main/java/com/ms/api/spi/move/GetFreightTemplateList.java b/ms-biz/src/main/java/com/ms/api/spi/move/GetFreightTemplateList.java index 129f769e..9794fb3d 100644 --- a/ms-biz/src/main/java/com/ms/api/spi/move/GetFreightTemplateList.java +++ b/ms-biz/src/main/java/com/ms/api/spi/move/GetFreightTemplateList.java @@ -37,9 +37,7 @@ public class GetFreightTemplateList extends SPIBaseService implements ExtensionS // ----业务处理---- FreightTemplateListParam param = new FreightTemplateListParam(); - param.setName(fields.getName()); - param.setPage(fields.getPageNo()); - param.setSize(fields.getPageSize()); + param.setSize(fields.getSize()); FreightTemplateListData data = DdRequestUtil.FreightTemplateListDataRequest(param); Map result = new HashMap<>(); result.put("data", data.getList()); From 05370d4b7d3df5d5859e8548d8f729bbef99583e Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?cxxxxxxx=E8=AF=A6?= <286460656@qq.com> Date: Tue, 5 Sep 2023 14:57:05 +0800 Subject: [PATCH 07/10] =?UTF-8?q?=E5=95=86=E5=93=81=E6=90=9C=E7=B4=A2?= =?UTF-8?q?=E5=A2=9E=E5=8A=A0=E4=BA=8C=E7=BA=A7=E7=B1=BB=E7=9B=AE?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../api/dto/move/SearchChoicenessSourceItemRequestDTO.java | 5 +++++ .../ms/api/spi/move/SearchChoicenessSourceItemService.java | 1 + 2 files changed, 6 insertions(+) diff --git a/ms-api/src/main/java/com/ms/api/dto/move/SearchChoicenessSourceItemRequestDTO.java b/ms-api/src/main/java/com/ms/api/dto/move/SearchChoicenessSourceItemRequestDTO.java index cecb5361..4c71dadc 100644 --- a/ms-api/src/main/java/com/ms/api/dto/move/SearchChoicenessSourceItemRequestDTO.java +++ b/ms-api/src/main/java/com/ms/api/dto/move/SearchChoicenessSourceItemRequestDTO.java @@ -20,6 +20,11 @@ public class SearchChoicenessSourceItemRequestDTO { */ private Integer topCid; + /** + * 二级类目ID + */ + private Integer cid; + /** * 排序default/saleCntAsc/saleCntDesc/priceAsc/priceDesc */ diff --git a/ms-biz/src/main/java/com/ms/api/spi/move/SearchChoicenessSourceItemService.java b/ms-biz/src/main/java/com/ms/api/spi/move/SearchChoicenessSourceItemService.java index 024f3cf1..8d37605c 100644 --- a/ms-biz/src/main/java/com/ms/api/spi/move/SearchChoicenessSourceItemService.java +++ b/ms-biz/src/main/java/com/ms/api/spi/move/SearchChoicenessSourceItemService.java @@ -42,6 +42,7 @@ public class SearchChoicenessSourceItemService extends SPIBaseService implements HashMap params = new HashMap<>(); params.put("keyword",fields.getKeyword()); params.put("topCid",fields.getTopCid()); + params.put("cid",fields.getCid()); params.put("sort",fields.getSort()); params.put("ruleIds", fields.getRuleIds()); params.put("isHideMoved",fields.getIsHideMoved()); From e329d15bd418b66fce627168f8ff04d29100cf3b Mon Sep 17 00:00:00 2001 From: wangchaoxu Date: Tue, 5 Sep 2023 15:07:28 +0800 Subject: [PATCH 08/10] =?UTF-8?q?=E4=BC=A0=E6=BA=90=E7=A0=81?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- doc/move/service/class.QueueService.php | 201 ++++++++++++++++++++++++ 1 file changed, 201 insertions(+) create mode 100644 doc/move/service/class.QueueService.php diff --git a/doc/move/service/class.QueueService.php b/doc/move/service/class.QueueService.php new file mode 100644 index 00000000..269d2f2b --- /dev/null +++ b/doc/move/service/class.QueueService.php @@ -0,0 +1,201 @@ +queueDao = Zc::singleton('QueueDao'); + + $this->db = Zc::getDb(); + $this->solidRedis = RedisExt::factory('solidCache'); + } + + public function getQueueMsgList($queueName, $shopId) { + return $this->queueDao->getQueueMsgList($queueName, $shopId); + } + + public function getQueueMsg($queueName, $queueId) { + return $this->queueDao->getQueueMsg($queueName, $queueId); + } + + public function addQueueMsg($queueName, $shopId, $app, $accessToken) { + return $this->queueDao->addQueueMsg($queueName, $shopId, $app, $accessToken); + } + + public function lockQueueMsg($timerLockId, $filter) { + return $this->queueDao->lockQueueMsg($timerLockId, $filter); + } + + public function unlockTimeoutQueue($queueName, $expiredSeconds = 300, $status = null) { + return $this->queueDao->unlockTimeoutQueue($queueName, $expiredSeconds, $status); + } + + public function unlockTimeoutSolidRedisQueue($queueName, $heartbeatExpiredSeconds = 300, $status = null) { + $c1 = $this->queueDao->unlockSolidRedisDeadQueue($queueName, $heartbeatExpiredSeconds, $status); + $c2 = $this->queueDao->unlockSolidRedisSkipQueue($queueName, $status); + return $c1 + $c2; + } + + public function deleteQueueMsg($queueName, $row) { + return $this->queueDao->deleteQueueMsg($queueName, $row); + } + + public function lockPriorityQueue($timerLockId, $queueName, $filter) { + return $this->queueDao->lockPriorityQueue($timerLockId, $queueName, $filter); + } + + public function lockFifoQueue($timerLockId, $queueName, $filter) { + return $this->queueDao->lockFifoQueue($timerLockId, $queueName, $filter); + } + + public function lockVenderAvgQueue($timerLockId, $queueName, $filter) { + return $this->queueDao->lockVenderAvgQueue($timerLockId, $queueName, $filter); + } + + public function lockSolidRedisQueue($timerLockId, $queueName, $isAdminSelf) { + return $this->queueDao->lockSolidRedisQueue($timerLockId, $queueName, $isAdminSelf); + } + + public function batchLockSolidRedisQueue($timerLockId, $queueName, $isAdminSelf, $lockCount) { + return $this->queueDao->batchLockSolidRedisQueue($timerLockId, $queueName, $isAdminSelf, $lockCount); + } + + public function lockSolidRedisQueueByBufferId($timerLockId, $queueName, $isAdminSelf, $bufferPrimaryColumn) { + return $this->queueDao->lockSolidRedisQueueByBufferId($timerLockId, $queueName, $isAdminSelf, $bufferPrimaryColumn); + } + + public function allocBufferToQueueByShopAvg($bufferName, $queueName, $filter, $maxQueueCount = 300, $shopLimit = null) { + return $this->queueDao->allocBufferToQueueByShopAvg($bufferName, $queueName, $filter, $maxQueueCount, $shopLimit); + } + + public function moveBufferToSolidRedisQueue($bufferTableName, $queueTableName, $filter, $maxQueueCount = 2000) { + list($realDbId, $bufferTbl) = DbRoute::getDbAndTbl($bufferTableName); + list($realDbId, $queueTbl) = DbRoute::getDbAndTbl($queueTableName); + + $wheres = []; + if ($filter['gmtExec']) { + $wheres[] = $this->db->prepare('and (gmt_exec is null or gmt_exec <= %s)', $filter['gmtExec']); + } + if ($filter['includeShopIds']) { + $wheres[] = $this->db->prepare('AND shop_id IN %li', $filter['includeShopIds']); + } + + $queueCount = $this->db->useDbIdOnce($realDbId)->queryFirstField('select count(*) from %b', $queueTbl); + if ($queueCount > $maxQueueCount) { + return false; + } + + $needMoveQueueCount = $maxQueueCount - $queueCount; + $limit = 100; + $stopFilePath = Zc::C(ZcConfigConst::LogDir) . "stop_do_move_{$bufferTableName}_to_queue"; + $bufferPrimaryField = QueueConst::getQueueIdColumnName($bufferTbl); + $startBufferId = 0; + while (true) { + if (file_exists($stopFilePath)) { + break; + } + if ($needMoveQueueCount <= 0) { + break; + } + + $loopWheres = $wheres; + $loopWheres[] = $this->db->prepare('AND %l > %i', $bufferPrimaryField, $startBufferId); + $whereStr = implode(' ', $loopWheres); + + $loopLimit = $needMoveQueueCount > $limit ? $limit : $needMoveQueueCount; + $bufferList = $this->db->useDbIdOnce($realDbId)->query('select * from %b where 1=1 %l order by %l asc limit %i', $bufferTbl, $whereStr, $bufferPrimaryField, $loopLimit); + if (empty($bufferList)) { + break; + } + $deleteBufferIds = []; + $queueDatas = []; + foreach ($bufferList as $bufferData) { + $startBufferId = $bufferData[$bufferPrimaryField]; + if (!$filter['includeShopIds'] && CommonTool::isCurrAdminSelfShop($bufferData['shop_id'])) { + continue; + } + + $deleteBufferIds[] = $bufferData[$bufferPrimaryField]; + + $tmpBufferData = $bufferData; + unset($tmpBufferData['gmt_exec']); + unset($tmpBufferData[$bufferPrimaryField]); + $tmpBufferData['locked'] = 0; + $tmpBufferData['gmt_create'] = ZcDbEval::now(); + $tmpBufferData['gmt_modified'] = ZcDbEval::now(); + $queueDatas[] = $tmpBufferData; + } + + $oldErrorMode = $this->db->setErrorMode(ZcDb::ERROR_MODE_EXCEPTION); + $transStatus = $this->db->useDbIdOnce($realDbId)->startTransaction(); + try { + if ($queueDatas) { + $this->db->useDbIdOnce($realDbId)->insert($queueTbl, $queueDatas); + $startQueueId = $this->db->lastInsertId(); + } + + if ($deleteBufferIds) { + $this->db->useDbIdOnce($realDbId)->delete($bufferTbl, '%l IN %li', $bufferPrimaryField, $deleteBufferIds); + } + + $this->db->useDbIdOnce($realDbId)->commit($transStatus); + $this->db->setErrorMode($oldErrorMode); + } catch (Exception $e) { + $this->db->useDbIdOnce($realDbId)->rollback($transStatus); + $this->db->setErrorMode($oldErrorMode); + break; + } + + $selfQueueIds = $notSelfQueueIds = []; + if (!empty($startQueueId)) { + $queueCount = count($queueDatas); + $queueIdLoop = 0; + for ($queueId = $startQueueId; $queueId < ($queueCount + $startQueueId); $queueId ++) { + $loopQueueData = $queueDatas[$queueIdLoop]; + + if (CommonTool::isCurrAdminSelfShop($loopQueueData['shop_id'])) { + $selfQueueIds[] = $queueId; + } else { + $notSelfQueueIds[] = $queueId; + } + $queueIdLoop ++; + } + } + Zc::getLog('timer/common/move_buffer_to_queue/move_buffer')->info("loop startBufferId[{$startBufferId}]"); + if ($selfQueueIds) { + $queueRedisKey = RedisKeyConst::getQueueRedisKey($queueTbl, true); + $redisRet = $this->solidRedis->lPush($queueRedisKey, ...$selfQueueIds); + if (false === $redisRet) { + /** @var Exception $ex */ + $ex = $this->solidRedis->lastException(); + $reason = $ex ? $ex->getMessage() : "emptyEx"; + Zc::getLog('timer/common/move_buffer_to_queue/move_buffer')->info("addQueueIdsToSolidRedisQueue[$queueRedisKey] -> reason : " . $reason); + } + } + if ($notSelfQueueIds) { + $queueRedisKey = RedisKeyConst::getQueueRedisKey($queueTbl, false); + $redisRet = $this->solidRedis->lPush($queueRedisKey, ...$notSelfQueueIds); + if (false === $redisRet) { + /** @var Exception $ex */ + $ex = $this->solidRedis->lastException(); + $reason = $ex ? $ex->getMessage() : "emptyEx"; + Zc::getLog('timer/common/move_buffer_to_queue/move_buffer')->info("addQueueIdsToSolidRedisQueue[$queueRedisKey] -> reason : " . $reason); + } + } + + $needMoveQueueCount -= count($deleteBufferIds); + if ($needMoveQueueCount <= 0 || count($bufferList) < $limit) { + break; + } + } + return true; + } +} From 7bf8c5c4158b9ed4fa8ff8c671b8123a2261a4e8 Mon Sep 17 00:00:00 2001 From: wangchaoxu Date: Tue, 5 Sep 2023 15:10:16 +0800 Subject: [PATCH 09/10] =?UTF-8?q?=E4=BC=A0=E6=BA=90=E7=A0=81?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- doc/move/dao/class.QueueDao.php | 649 ++++++++++++++++++++++++++++++++ 1 file changed, 649 insertions(+) create mode 100644 doc/move/dao/class.QueueDao.php diff --git a/doc/move/dao/class.QueueDao.php b/doc/move/dao/class.QueueDao.php new file mode 100644 index 00000000..e33a6155 --- /dev/null +++ b/doc/move/dao/class.QueueDao.php @@ -0,0 +1,649 @@ +db = Zc::getDb(); + + $this->timerDao = Zc::singleton("TimerDao"); + + $this->reviveQueueLog = Zc::getLog('timer/check/revive_queue'); + + $this->solidRedis = RedisExt::factory('solidCache'); + } + + public function addQueueMsg($queueName, $shopId, $app, $accessToken, $priority = 100) { + $ret = $this->db->insert($queueName, array ( + 'shop_id' => $shopId, + 'app' => $app, + // 'access_token' => $accessToken, //为了安全起见,不再存这个段,在同步的时候实时取 + 'priority' => $priority, + 'locked' => 0, + 'gmt_create' => ZcDbEval::now(), + 'gmt_modified' => ZcDbEval::now() + )); + return ($ret === false) ? false : $this->db->lastInsertId(); + } + + public function getQueueMsg($queueName, $queueId) { + return $this->db->queryFirstRow('select * from %b where %b = %i', $queueName, QueueConst::getQueueIdColumnName($queueName), $queueId); + } + + public function unlockTimeoutQueue($queueName, $expiredSeconds = 300, $status = null) { + $deadTime = date('Y-m-d H:i:s', strtotime("-$expiredSeconds second")); + list($realDb, $realTbl) = DbRoute::getDbAndTbl($queueName); + $where = $this->db->prepare('WHERE locked > 0 AND gmt_last_heartbeat < %s', $deadTime); + if ($status) { + $where .= ' ' . $this->db->prepare('and `status` = %s', $status); + } + $queueList = $this->db->useDbIdOnce($realDb)->query('SELECT * FROM %b %l', $queueName, $where); + if (empty($queueList)) { + return 0; + } + + list($realTimerDb, $realTimerLockTbl) = DbRoute::getDbAndTbl('timer_lock'); + $queueIdColumnName = QueueConst::getQueueIdColumnName($queueName); + foreach ($queueList as $queue) { + $ar1 = $this->db->useDbIdOnce($realDb)->update($realTbl, array( + 'locked' => 0, + 'gmt_modified' => ZcDbEval::now() + ), '%b = %i', $queueIdColumnName, $queue[$queueIdColumnName]); + + $ar2 = $this->timerDao->deleteTimerLock($queue['locked'], $realTimerDb, '', $queue['hostname']); + + $this->reviveQueueLog->info('unlockQueue queue ' . ZcArrayHelper::sp($queue) . ", unlockedQueue $ar1, deleteTimerLock: $ar2"); + } + + return count($queueList); + } + + public function unlockSolidRedisDeadQueue($queueName, $expiredSeconds = 300, $status = null) { + $deadTime = date('Y-m-d H:i:s', strtotime("-$expiredSeconds second")); + list($realDb, $realTbl) = DbRoute::getDbAndTbl($queueName); + $where = $this->db->prepare('WHERE locked > 0 AND gmt_last_heartbeat < %s', $deadTime); + if ($status) { + $where .= ' ' . $this->db->prepare('and `status` = %s', $status); + } + $queueList = $this->db->useDbIdOnce($realDb)->query('SELECT * FROM %b %l', $realTbl, $where); + if (empty($queueList)) { + return 0; + } + + list($realTimerDb, $realTimerLockTbl) = DbRoute::getDbAndTbl('timer_lock'); + $queueIdColumnName = QueueConst::getQueueIdColumnName($queueName); + foreach ($queueList as $queue) { + $ar1 = $this->db->useDbIdOnce($realDb)->update($realTbl, array( + 'locked' => 0, + 'gmt_modified' => ZcDbEval::now() + ), '%b = %i', $queueIdColumnName, $queue[$queueIdColumnName]); + + $queueId = $queue[$queueIdColumnName]; + if ($queueId) { + $queueRedisKey = RedisKeyConst::getQueueRedisKey($queueName, CommonTool::isCurrAdminSelfShop($queue['shop_id'])); + + $this->solidRedis->lPush($queueRedisKey, $queueId); + } + + $ar2 = $this->timerDao->deleteTimerLock($queue['locked'], $realTimerDb, '', $queue['hostname']); + + $this->reviveQueueLog->info('unlockQueue queue ' . ZcArrayHelper::sp($queue) . ", unlockedQueue $ar1, deleteTimerLock: $ar2"); + } + return count($queueList); + } + + public function unlockSolidRedisSkipQueue($queueName, $status = null) { + $queueRedisKeySelf = RedisKeyConst::getQueueRedisKey($queueName, true); + $queueRedisKey = RedisKeyConst::getQueueRedisKey($queueName, false); + + $selfRedisIds = $this->solidRedis->lrange($queueRedisKeySelf, 0, -1) ?: []; + $redisIds = $this->solidRedis->lrange($queueRedisKey, 0, -1) ?: []; + + list($realDb, $realTbl) = DbRoute::getDbAndTbl($queueName); + $where = ''; + if ($status) { + $where = $this->db->prepare('AND `status` = %s', $status); + } + $queueIdColumnName = QueueConst::getQueueIdColumnName($queueName); + $startQueueId = 0; + $limit = 100; + $allQueueList = array(); + while (true) { + if ($startQueueId > 0) { + $queueIdWhere = $this->db->prepare('AND %b > %i', $queueIdColumnName, $startQueueId); + } + $queueList = $this->db->useDbIdOnce($realDb)->query('SELECT * FROM %b WHERE locked = 0 %l %l order by %b asc limit %i', $realTbl, $where, $queueIdWhere, $queueIdColumnName, $limit); + + if (empty($queueList)) { + break; + } + $startQueueId = end($queueList)[$queueIdColumnName]; + + $allQueueList = array_merge($allQueueList, $queueList); + if (count($queueList) < $limit) { + break; + } + } + if (empty($allQueueList)) { + return 0; + } + + $newSelfRedisIds = $this->solidRedis->lrange($queueRedisKeySelf, 0, -1) ?: []; + $newRedisIds = $this->solidRedis->lrange($queueRedisKey, 0, -1) ?: []; + + $selfRedisIds = array_unique(array_merge($selfRedisIds, $newSelfRedisIds)); + $redisIds = array_unique(array_merge($redisIds, $newRedisIds)); + + foreach ($allQueueList as $queue) { + $queueId = $queue[$queueIdColumnName]; + if ($queueId) { + if (in_array($queueId, $selfRedisIds) || in_array($queueId, $redisIds)) { + continue; + } + if (in_array($queue['shop_id'], CommonTool::adminSelfShopIds())) { + $this->solidRedis->lPush($queueRedisKeySelf, $queueId); + } else { + $this->solidRedis->lPush($queueRedisKey, $queueId); + } + } + } + return count($queueList); + } + + public function getQueueMsgList($queueName, $shopId) { + return $this->db->query('select * from %b where shop_id = %i order by gmt_modified asc', $queueName, $shopId); + } + + public function updateQueuePriority($queueName, $queueId, $priority) { + $ret = $this->db->update($queueName, array('priority' => $priority), '%b = %i', QueueConst::getQueueIdColumnName($queueName), $queueId); + return $ret; + } + + public function insertUpdateShopQueue($queueName, $shopId, $priority = 100) { + list($realDb, $realTbl) = DbRoute::getDbAndTbl($queueName); + $queueInfo = $this->db->useDbIdOnce($realDb)->queryFirstRow("select * FROM %b WHERE shop_id = %i", $realTbl, $shopId); + if (!$queueInfo) { + $insert = array ( + 'shop_id' => $shopId, + 'locked' => 0, + 'priority' => $priority, + 'gmt_create' => ZcDbEval::now(), + 'gmt_modified' => ZcDbEval::now() + ); + return $this->db->useDbIdOnce($realDb)->insert($realTbl, $insert); + } + if (($queueInfo['locked'] > 0) || ($queueInfo['priority'] <= $priority)) { + return true; + } + $update = array( + 'priority' => $priority, + 'gmt_modified' => ZcDbEval::now() + ); + + return $this->db->useDbIdOnce($realDb)->update($realTbl, $update, 'shop_id = %i', $shopId); + } + + public function deleteShopQueue($queueName, $shopId) { + list($realDb, $realTbl) = DbRoute::getDbAndTbl($queueName); + return $this->db->useDbIdOnce($realDb)->delete($realTbl, 'shop_id = %i',$shopId); + } + + public function lockQueueMsg($timerLockId, $filter) { + $queueName = $filter['queueName']; + $where = ''; + if ($queueName != QueueConst::titleKeywordRsyncQueue) { + if ($filter['includeShopIds']) { + $where = $this->db->prepare('and shop_id in %li', $filter['includeShopIds']); + } + if ($filter['excludeShopIds']) { + $where = $this->db->prepare('and shop_id not in %li', $filter['excludeShopIds']); + } + } + $row = $this->db->queryFirstRow("select * from %b where `locked` = 0 %l order by priority asc, gmt_modified asc", $queueName, $where); + if (empty($row)) { + return $row; + } + + // 乐观锁 + $primaryColumn = QueueConst::getQueueIdColumnName($queueName); + $queueId = $row[$primaryColumn]; + $affectRows = $this->db->update($queueName, array ( + 'locked' => $timerLockId, + 'gmt_last_heartbeat' => ZcDbEval::now(), + 'gmt_locked' => ZcDbEval::now(), + 'gmt_modified' => ZcDbEval::now() + ), "%b = %i and locked = 0", $primaryColumn, $queueId); + if ($affectRows == 1) { + $row['locked'] = $timerLockId; + $this->timerDao->addHeartbeat($timerLockId, $queueId, $queueName); + return $row; + } + return array (); + } + + public function lockQueueRandom($timerLockId, $queueName, $filter) { + $batchTypeWhere = ''; + $where = array(); + + if (!empty($filter['includeShopIds'])) { + $where[] = $this->db->prepare('and shop_id in %li', $filter['includeShopIds']); + } + if (!empty($filter['excludeShopIds'])) { + $where[] = $this->db->prepare('and shop_id not in %li', $filter['excludeShopIds']); + } + $whereString = implode(' ', $where); + + $shopIds = $this->db->queryFirstColumn("select distinct `shop_id` from %b where `locked` = 0 %l %l", $queueName, $whereString); + if (empty($shopIds)) { + return array(); + } + $shopId = $shopIds[array_rand($shopIds, 1)]; + + $queueMsg = $this->db->queryFirstRow('SELECT * FROM %b WHERE `shop_id` = %i AND locked = 0 %l', $queueName, $shopId); + if (empty($queueMsg)) { + return array(); + } + $primaryColumn = QueueConst::getQueueIdColumnName($queueName); + $queueId = $queueMsg[$primaryColumn]; + $affectRows = $this->db->update($queueName, array ( + 'locked' => $timerLockId, + 'gmt_locked' => ZcDbEval::now(), + 'gmt_modified' => ZcDbEval::now() + ), "%b = %i AND locked = 0", $primaryColumn, $queueId); + if ($affectRows == 1) { + $queueMsg['locked'] = $timerLockId; + $this->timerDao->addHeartbeat($timerLockId, $queueId, $queueName); + return $queueMsg; + } + return array (); + } + + public function deleteQueueMsg($queueName, $row) { + list($realDb, $realTbl) = DbRoute::getDbAndTbl($queueName); + $primaryColumn = QueueConst::getQueueIdColumnName($queueName); + return $this->db->useDbIdOnce($realDb)->delete($realTbl, '%b = %i', $primaryColumn, $row[$primaryColumn]); + } + + /** + * 根据 priority asc、queueId asc 来 lockQueue,支持根据includeVenderIds、excludeVenderIds、gmtExec来筛选 + * @param integer $timerLockId + * @param string $queueName + * @param array $filter + * @return array + */ + public function lockPriorityQueue($timerLockId, $queueName, $filter) { + list ($realDb, $realTbl) = DbRoute::getDbAndTbl($queueName); + $primaryColumn = QueueConst::getQueueIdColumnName($realTbl); + + $sortBy = $primaryColumn; + + $where = array(); + if ($filter['includeShopIds']) { + $where[] = $this->db->prepare('and shop_id in %li', $filter['includeShopIds']); + } + if ($filter['excludeShopIds']) { + $where[] = $this->db->prepare('and shop_id not in %li', $filter['excludeShopIds']); + } + if ($filter['gmtExec']) { + $where[] = $this->db->prepare('and (gmt_exec is null or gmt_exec <= %s)', date('Y-m-d H:i:s', strtotime($filter['gmtExec']))); + $sortBy = 'gmt_exec'; + } + $whereString = implode(' ', $where); + + $row = $this->db->useDbIdOnce($realDb)->queryFirstRow("select * from %b where `locked` = 0 %l order by priority asc, %b asc", $realTbl, $whereString, $sortBy); + if (empty($row)) { + return array(); + } + + // 乐观锁 + $queueId = $row[$primaryColumn]; + $affectRows = $this->db->useDbIdOnce($realDb)->update($realTbl, array ( + 'locked' => $timerLockId, + 'hostname' => gethostname(), + 'gmt_last_heartbeat' => ZcDbEval::now(), + 'gmt_locked' => ZcDbEval::now(), + 'gmt_modified' => ZcDbEval::now() + ), "%b = %i and locked = 0", $primaryColumn, $queueId); + if ($affectRows == 1) { + $row['locked'] = $timerLockId; + $this->timerDao->addHeartbeat($timerLockId, $queueId, $queueName); + return $row; + } + return array (); + } + + /** + * 根据 queueId asc 来 lockQueue,支持根据includeVenderIds、excludeVenderIds、gmtExec来筛选 + * @param integer $timerLockId + * @param string $queueName + * @param array $filter + * @return array + */ + public function lockFifoQueue($timerLockId, $queueName, $filter) { + list ($realDb, $realTbl) = DbRoute::getDbAndTbl($queueName); + $primaryColumn = QueueConst::getQueueIdColumnName($realTbl); + + $sortBy = $primaryColumn; + + $where = ''; + if ($filter['includeShopIds']) { + $where[] = $this->db->prepare('and shop_id in %li', $filter['includeShopIds']); + } + if ($filter['excludeShopIds']) { + $where[] = $this->db->prepare('and shop_id not in %li', $filter['excludeShopIds']); + } + if ($filter['gmtExec']) { + $where[] = $this->db->prepare('and (gmt_exec is null or gmt_exec <= %s)', date('Y-m-d H:i:s', strtotime($filter['gmtExec']))); + $sortBy = 'gmt_exec'; + } + $whereString = implode(' ', $where); + + $row = $this->db->useDbIdOnce($realDb)->queryFirstRow("select * from %b where `locked` = 0 %l order by %b asc", $realTbl, $whereString, $sortBy); + if (empty($row)) { + return array(); + } + + // 乐观锁 + $queueId = $row[$primaryColumn]; + $affectRows = $this->db->useDbIdOnce($realDb)->update($realTbl, array ( + 'locked' => $timerLockId, + 'hostname' => gethostname(), + 'gmt_last_heartbeat' => ZcDbEval::now(), + 'gmt_locked' => ZcDbEval::now(), + 'gmt_modified' => ZcDbEval::now() + ), "%b = %i and locked = 0", $primaryColumn, $queueId); + if ($affectRows == 1) { + $row['locked'] = $timerLockId; + $this->timerDao->addHeartbeat($timerLockId, $queueId, $queueName); + return $row; + } + return array (); + } + + /** + * 根据 venderId 平均 lockQueue,支持根据includeVenderIds、excludeVenderIds、gmtExec来筛选 + * @param integer $timerLockId + * @param string $queueName + * @param array $filter + * @return array + */ + public function lockVenderAvgQueue($timerLockId, $queueName, $filter) { + $where = array(); + + if (!empty($filter['includeShopIds'])) { + $where[] = $this->db->prepare('and shop_id in %li', $filter['includeShopIds']); + } + if (!empty($filter['excludeShopIds'])) { + $where[] = $this->db->prepare('and shop_id not in %li', $filter['excludeShopIds']); + } + if (!empty($filter['gmtExec'])) { + $where[] = $this->db->prepare('and (gmt_exec is null or gmt_exec <= %s)', date('Y-m-d H:i:s', strtotime($filter['gmtExec']))); + } + $whereString = implode(' ', $where); + + list($realDb, $realTbl) = DbRoute::getDbAndTbl($queueName); + $primaryColumn = QueueConst::getQueueIdColumnName($realTbl); + $shopIds = $this->db->useDbIdOnce($realDb)->queryFirstColumn("select distinct `shop_id` from %b where `locked` = 0 %l %l", $realTbl, $whereString); + if (empty($shopIds)) { + return array(); + } + $shopId = $shopIds[array_rand($shopIds, 1)]; + + $queueMsg = $this->db->useDbIdOnce($realDb)->queryFirstRow('SELECT * FROM %b WHERE `shop_id` = %i AND locked = 0 %l ORDER BY %l ASC', $realTbl, $shopId, $whereString, $primaryColumn); + if (empty($queueMsg)) { + return array(); + } + $queueId = $queueMsg[$primaryColumn]; + $affectRows = $this->db->useDbIdOnce($realDb)->update($queueName, array ( + 'locked' => $timerLockId, + 'hostname' => gethostname(), + 'gmt_last_heartbeat' => ZcDbEval::now(), + 'gmt_locked' => ZcDbEval::now(), + 'gmt_modified' => ZcDbEval::now() + ), "%b = %i AND locked = 0", $primaryColumn, $queueId); + if ($affectRows == 1) { + $queueMsg['locked'] = $timerLockId; + $this->timerDao->addHeartbeat($timerLockId, $queueId, $queueName); + return $queueMsg; + } + return array (); + } + + /** + * 根据 redis 中弹出的id来锁定queue + * @param integer $timerLockId + * @param string $queueName + * @param boolean $isAdminSelf + * @return array + */ + public function lockSolidRedisQueue($timerLockId, $queueName, $isAdminSelf) { + $queueRedisKey = RedisKeyConst::getQueueRedisKey($queueName, $isAdminSelf); + $queueId = $this->solidRedis->rPop($queueRedisKey); + if (empty($queueId)) { + return array(); + } + + list ($realDb, $realTbl) = DbRoute::getDbAndTbl($queueName); + $primaryColumn = QueueConst::getQueueIdColumnName($queueName); + + $row = $this->db->useDbIdOnce($realDb)->queryFirstRow("select * from %b where `locked` = 0 and %b = %i", $realTbl, $primaryColumn, $queueId); + if (empty($row)) { + return array(); + } + $queueId = $row[$primaryColumn]; + + $affectRows = $this->db->useDbIdOnce($realDb)->update($realTbl, array( + 'locked' => $timerLockId, + 'hostname' => gethostname(), + 'gmt_last_heartbeat' => ZcDbEval::now(), + 'gmt_locked' => ZcDbEval::now(), + 'gmt_modified' => ZcDbEval::now() + ), "%b = %i and locked = 0", $primaryColumn, $queueId); + if ($affectRows == 1) { + $row['locked'] = $timerLockId; + $this->timerDao->addHeartbeat($timerLockId, $queueId, $queueName); + return $row; + } + return array(); + } + + public function batchLockSolidRedisQueue($timerLockId, $queueName, $isAdminSelf, $lockCount) { + $queueRedisKey = RedisKeyConst::getQueueRedisKey($queueName, $isAdminSelf); + $queueIds = []; + for ($i = 0; $i < $lockCount; $i++) { + $queueId = $this->solidRedis->rPop($queueRedisKey); + if (!$queueId) { + break; + } + $queueIds[] = $queueId; + } + if (!$queueIds) { + return []; + } + list ($realDb, $realTbl) = DbRoute::getDbAndTbl($queueName); + $primaryColumn = QueueConst::getQueueIdColumnName($queueName); + + $rows = $this->db->useDbIdOnce($realDb)->query("select * from %b where `locked` = 0 and %b in %li", $realTbl, $primaryColumn, $queueIds); + if (empty($rows)) { + return []; + } + $findQueueIds = array_column($rows, $primaryColumn); + + $affectRows = $this->db->useDbIdOnce($realDb)->update($realTbl, array( + 'locked' => $timerLockId, + 'hostname' => gethostname(), + 'gmt_last_heartbeat' => ZcDbEval::now(), + 'gmt_locked' => ZcDbEval::now(), + 'gmt_modified' => ZcDbEval::now() + ), "%b in %li and locked = 0", $primaryColumn, $findQueueIds); + if (count($findQueueIds) == $affectRows) { + $rows = array_map(function ($row) use ($timerLockId) { + $row['locked'] = $timerLockId; + return $row; + }, $rows); + $this->timerDao->updateTimerLockHeartbeat($timerLockId, null); + return $rows; + } + Zc::getLog("timer/batch_lock_fail/{$queueName}")->info("find queueIds[" . implode(',', $findQueueIds) . "] lock affectRows[$affectRows]"); + return []; + } + + /** + * 根据 redis 中弹出的id来锁定queue + * @param integer $timerLockId + * @param string $queueName + * @param boolean $isAdminSelf + * @return array + */ + public function lockSolidRedisQueueByBufferId($timerLockId, $queueName, $isAdminSelf, $bufferPrimaryColumn) { + $queueRedisKey = RedisKeyConst::getQueueRedisKey($queueName, $isAdminSelf); + $bufferId = $this->solidRedis->rPop($queueRedisKey); + if (empty($bufferId)) { + return array(); + } + + list ($realDb, $realTbl) = DbRoute::getDbAndTbl($queueName); + $row = $this->db->useDbIdOnce($realDb)->queryFirstRow("select * from %b where `locked` = 0 and %b = %i", $realTbl, $bufferPrimaryColumn, $bufferId); + if (empty($row)) { + return array(); + } + $primaryColumn = QueueConst::getQueueIdColumnName($queueName); + $queueId = $row[$primaryColumn]; + + $affectRows = $this->db->useDbIdOnce($realDb)->update($realTbl, array( + 'locked' => $timerLockId, + 'hostname' => gethostname(), + 'gmt_last_heartbeat' => ZcDbEval::now(), + 'gmt_locked' => ZcDbEval::now(), + 'gmt_modified' => ZcDbEval::now() + ), "%b = %i and locked = 0", $primaryColumn, $queueId); + if ($affectRows == 1) { + $row['locked'] = $timerLockId; + $this->timerDao->addHeartbeat($timerLockId, $queueId, $queueName); + return $row; + } + return array(); + } + + public function addMonitorRedisLockErrorLog($queueName, $timerLockId, $primaryKeyId, $sql, $reason) { + list($logDbId, $realLogTbl) = DbRoute::getDbAndTbl(TblConst::redis_lock_error_log); + + return $this->db->useDbIdOnce($logDbId)->insert($realLogTbl, array( + 'queue_name' => $queueName, + 'timer_lock_id' => $timerLockId, + 'primary_key_id' => $primaryKeyId, + 'sql' => $sql, + 'reason' => $reason, + 'hostname' => gethostname(), + 'gmt_create' => ZcDbEval::now(), + 'gmt_modified' => ZcDbEval::now() + )); + } + + public function allocBufferToQueueByShopAvg($bufferName, $queueName, $filter, $maxQueueCount = 300, $shopLimit = null) { + $allowMoveCnt = $maxQueueCount - $this->getQueueCnt($queueName, $filter); + if ($allowMoveCnt < 1) { + return array(); + } + $shopIdAndCntMap = $this->getShopIdAndBufferCntMap($bufferName, $filter); + if (is_numeric($shopLimit)) { + $shopIdAndCntMap = $this->rebuildShopIdAndCntMapByShopLimit($shopIdAndCntMap, $queueName, $shopLimit); + } + + return $this->allotShopMoveBufferCnt($shopIdAndCntMap, $allowMoveCnt); + } + + private function getQueueCnt($queueName, $filter) { + list($realDb, $realTbl) = DbRoute::getDbAndTbl($queueName); + $whereStr = $this->getFilterShopIdWhere($filter['includeShopIds'], $filter['excludeShopIds']); + return $this->db->useDbIdOnce($realDb)->queryFirstField("SELECT COUNT(*) FROM %b WHERE %l", $realTbl, $whereStr); + } + + private function getShopIdAndBufferCntMap($bufferName, $filter) { + list($realDb, $realTbl) = DbRoute::getDbAndTbl($bufferName); + $whereStr = $this->getFilterShopIdWhere($filter['includeShopIds'], $filter['excludeShopIds'], $filter['gmtExec']); + $bufferList = $this->db->useDbIdOnce($realDb)->query("SELECT shop_id, COUNT(*) AS cnt FROM %b WHERE %l GROUP BY shop_id", $realTbl, $whereStr); + return ZcArrayHelper::mapNameValue($bufferList, 'shop_id', 'cnt'); + } + + public function getFilterShopIdWhere($includeShopIds, $excludeShopIds, $gmtExec = null) { + $extraWhere = ''; + if ($gmtExec) { + $extraWhere = ' ' . $this->db->prepare('and gmt_exec <= %s', date('Y-m-d H:i:s', strtotime($gmtExec))); + } + + if (!empty($includeShopIds)) { + return $this->db->prepare('shop_id IN %li', $includeShopIds) . $extraWhere; + } + + if (!empty($excludeShopIds)) { + return $this->db->prepare('shop_id not in %li', $excludeShopIds) . $extraWhere; + } + + return '1 = 1' . $extraWhere; + } + + private function rebuildShopIdAndCntMapByShopLimit($shopIdAndCntMap, $queueName, $shopLimit) { + if (empty($shopIdAndCntMap) || !is_numeric($shopLimit)) { + return $shopIdAndCntMap; + } + + list($realDb, $realTbl) = DbRoute::getDbAndTbl($queueName); + $queueStatList = $this->db->useDbIdOnce($realDb)->query("SELECT shop_id, COUNT(*) AS cnt FROM %b GROUP BY shop_id", $realTbl); + $shopIdAndQueueCntMap = ZcArrayHelper::mapNameValue($queueStatList, 'shop_id', 'cnt'); + + foreach ($shopIdAndCntMap as $shopId => $cnt) { + $shopAllowMoveMaxCnt = $shopLimit - $shopIdAndQueueCntMap[$shopId]; + $shopAllowMoveCnt = min(array($cnt, $shopAllowMoveMaxCnt)); + + if ($shopAllowMoveCnt < 1) { + unset($shopIdAndCntMap[$shopId]); + continue; + } + + $shopIdAndCntMap[$shopId] = $shopAllowMoveCnt; + } + + return $shopIdAndCntMap; + } + + private function allotShopMoveBufferCnt($shopIdAndCntMap, $allowMoveCnt){ + $shopIdAndMoveCntMap = array(); + $waitSelectShopIds = array_keys($shopIdAndCntMap); + shuffle($waitSelectShopIds); + + do { + if (empty($waitSelectShopIds) || ($allowMoveCnt < 1)) { + break; + } + + foreach ($waitSelectShopIds as $index => $mallId) { + if ($allowMoveCnt < 1) { + break; + } + + $waitMoveCnt = $shopIdAndCntMap[$mallId]; + if ($waitMoveCnt < 1) { + unset($waitSelectShopIds[$index]); + continue; + } + + $shopIdAndMoveCntMap[$mallId]++; + $shopIdAndCntMap[$mallId]--; + $allowMoveCnt--; + } + } while(true); + + return $shopIdAndMoveCntMap; + } +} From cea5061172336a4f2eef728d1a5a99508cdf67d2 Mon Sep 17 00:00:00 2001 From: daixiaogang <2510234660@qq.com> Date: Tue, 5 Sep 2023 15:41:42 +0800 Subject: [PATCH 10/10] =?UTF-8?q?purchase=5Forder=5Fcustom=20purchase=5For?= =?UTF-8?q?der=5Fds=5Fencrypt=20=E4=BB=A3=E7=A0=81=E7=94=9F=E6=88=90=20?= =?UTF-8?q?=E8=AE=A2=E5=8D=95=E5=AE=9A=E6=97=B6=E9=83=A8=E5=88=86?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../java/com/ms/api/consts/QueueConst.java | 27 ++++ .../api/service/OpOrderRsyncQueueService.java | 4 + .../service/PurchaseOrderCustomService.java | 21 +++ .../PurchaseOrderDsEncryptService.java | 21 +++ .../java/com/ms/api/service/QueueService.java | 4 + .../impl/OpOrderRsyncQueueServiceImpl.java | 37 ++++- .../impl/PurchaseOrderCustomServiceImpl.java | 53 +++++++ .../PurchaseOrderDsEncryptServiceImpl.java | 53 +++++++ .../ms/api/service/impl/QueueServiceImpl.java | 30 ++++ .../com/ms/api/task/RsyncOpTaskService.java | 126 +++++++++++++++ .../ms/dal/entity/PurchaseOrderCustom.java | 70 +++++++++ .../ms/dal/entity/PurchaseOrderDsEncrypt.java | 64 ++++++++ .../dal/mapper/OpOrderRsyncQueueMapper.java | 2 + .../dal/mapper/PurchaseOrderCustomMapper.java | 26 ++++ .../mapper/PurchaseOrderDsEncryptMapper.java | 26 ++++ .../java/com/ms/dal/mapper/QueueMapper.java | 8 + .../mapper/OpOrderRsyncQueueMapper.xml | 3 + .../mapper/PurchaseOrderCustomMapper.xml | 144 ++++++++++++++++++ .../mapper/PurchaseOrderDsEncryptMapper.xml | 137 +++++++++++++++++ .../src/main/resources/mapper/QueueMapper.xml | 8 + 20 files changed, 861 insertions(+), 3 deletions(-) create mode 100644 ms-biz/src/main/java/com/ms/api/consts/QueueConst.java create mode 100644 ms-biz/src/main/java/com/ms/api/service/PurchaseOrderCustomService.java create mode 100644 ms-biz/src/main/java/com/ms/api/service/PurchaseOrderDsEncryptService.java create mode 100644 ms-biz/src/main/java/com/ms/api/service/QueueService.java create mode 100644 ms-biz/src/main/java/com/ms/api/service/impl/PurchaseOrderCustomServiceImpl.java create mode 100644 ms-biz/src/main/java/com/ms/api/service/impl/PurchaseOrderDsEncryptServiceImpl.java create mode 100644 ms-biz/src/main/java/com/ms/api/service/impl/QueueServiceImpl.java create mode 100644 ms-biz/src/main/java/com/ms/api/task/RsyncOpTaskService.java create mode 100644 ms-dal/src/main/java/com/ms/dal/entity/PurchaseOrderCustom.java create mode 100644 ms-dal/src/main/java/com/ms/dal/entity/PurchaseOrderDsEncrypt.java create mode 100644 ms-dal/src/main/java/com/ms/dal/mapper/PurchaseOrderCustomMapper.java create mode 100644 ms-dal/src/main/java/com/ms/dal/mapper/PurchaseOrderDsEncryptMapper.java create mode 100644 ms-dal/src/main/java/com/ms/dal/mapper/QueueMapper.java create mode 100644 ms-dal/src/main/resources/mapper/PurchaseOrderCustomMapper.xml create mode 100644 ms-dal/src/main/resources/mapper/PurchaseOrderDsEncryptMapper.xml create mode 100644 ms-dal/src/main/resources/mapper/QueueMapper.xml diff --git a/ms-biz/src/main/java/com/ms/api/consts/QueueConst.java b/ms-biz/src/main/java/com/ms/api/consts/QueueConst.java new file mode 100644 index 00000000..c58ed01a --- /dev/null +++ b/ms-biz/src/main/java/com/ms/api/consts/QueueConst.java @@ -0,0 +1,27 @@ +package com.ms.api.consts; +public class QueueConst { + + public static final String orderCareRsyncQueue = "order_care_rsync_queue"; + public static final String orderFullRsyncQueue = "order_full_rsync_queue"; + public static final String orderQuickRsyncQueue = "order_quick_rsync_queue"; + + public static final String wareQuickRsyncQueue = "ware_quick_rsync_queue"; + public static final String wareFullRsyncQueue = "ware_full_rsync_queue"; + + public static final String crmMemberFullRsyncQueue = "crm_member_full_rsync_queue"; + public static final String crmMemberQuickRsyncQueue = "crm_member_quick_rsync_queue"; + + public static final String titleKeywordRsyncQueue = "title_keyword_rsync_queue"; + + public static final String statusProcessing = "processing"; + public static final String statusWait = "wait"; + public static final String statusFinish = "finish"; + + public static final Integer maxMoveImportTaskQueueCount = 1000; + public static final Integer maxMoveImportTaskQueueCountSelf = 50; + + public static String getQueueIdColumnName(String queueName) { + return queueName.concat("_id"); + } + +} diff --git a/ms-biz/src/main/java/com/ms/api/service/OpOrderRsyncQueueService.java b/ms-biz/src/main/java/com/ms/api/service/OpOrderRsyncQueueService.java index 28b4cb60..a1dcd612 100644 --- a/ms-biz/src/main/java/com/ms/api/service/OpOrderRsyncQueueService.java +++ b/ms-biz/src/main/java/com/ms/api/service/OpOrderRsyncQueueService.java @@ -1,5 +1,7 @@ package com.ms.api.service; +import java.util.List; + import com.ms.dal.entity.OpOrderRsyncQueue; /** @@ -18,4 +20,6 @@ public interface OpOrderRsyncQueueService { int updateByPrimaryKeySelective(OpOrderRsyncQueue record); int updateByPrimaryKey(OpOrderRsyncQueue record); + + OpOrderRsyncQueue lockSolidRedisQueue(Long timerLockId, boolean isAdminSelf); } diff --git a/ms-biz/src/main/java/com/ms/api/service/PurchaseOrderCustomService.java b/ms-biz/src/main/java/com/ms/api/service/PurchaseOrderCustomService.java new file mode 100644 index 00000000..0433658d --- /dev/null +++ b/ms-biz/src/main/java/com/ms/api/service/PurchaseOrderCustomService.java @@ -0,0 +1,21 @@ +package com.ms.api.service; + +import com.ms.dal.entity.PurchaseOrderCustom; + +/** + * + */ +public interface PurchaseOrderCustomService { + + int deleteByPrimaryKey(Long id); + + int insert(PurchaseOrderCustom record); + + int insertSelective(PurchaseOrderCustom record); + + PurchaseOrderCustom selectByPrimaryKey(Long id); + + int updateByPrimaryKeySelective(PurchaseOrderCustom record); + + int updateByPrimaryKey(PurchaseOrderCustom record); +} diff --git a/ms-biz/src/main/java/com/ms/api/service/PurchaseOrderDsEncryptService.java b/ms-biz/src/main/java/com/ms/api/service/PurchaseOrderDsEncryptService.java new file mode 100644 index 00000000..ab8402ec --- /dev/null +++ b/ms-biz/src/main/java/com/ms/api/service/PurchaseOrderDsEncryptService.java @@ -0,0 +1,21 @@ +package com.ms.api.service; + +import com.ms.dal.entity.PurchaseOrderDsEncrypt; + +/** + * + */ +public interface PurchaseOrderDsEncryptService { + + int deleteByPrimaryKey(Long id); + + int insert(PurchaseOrderDsEncrypt record); + + int insertSelective(PurchaseOrderDsEncrypt record); + + PurchaseOrderDsEncrypt selectByPrimaryKey(Long id); + + int updateByPrimaryKeySelective(PurchaseOrderDsEncrypt record); + + int updateByPrimaryKey(PurchaseOrderDsEncrypt record); +} diff --git a/ms-biz/src/main/java/com/ms/api/service/QueueService.java b/ms-biz/src/main/java/com/ms/api/service/QueueService.java new file mode 100644 index 00000000..423276be --- /dev/null +++ b/ms-biz/src/main/java/com/ms/api/service/QueueService.java @@ -0,0 +1,4 @@ +package com.ms.api.service; + +public interface QueueService { +} diff --git a/ms-biz/src/main/java/com/ms/api/service/impl/OpOrderRsyncQueueServiceImpl.java b/ms-biz/src/main/java/com/ms/api/service/impl/OpOrderRsyncQueueServiceImpl.java index ad7138b7..528e507d 100644 --- a/ms-biz/src/main/java/com/ms/api/service/impl/OpOrderRsyncQueueServiceImpl.java +++ b/ms-biz/src/main/java/com/ms/api/service/impl/OpOrderRsyncQueueServiceImpl.java @@ -1,20 +1,27 @@ package com.ms.api.service.impl; -import com.ms.dal.entity.OpOrderRsyncQueue; +import java.util.Date; + +import cn.hutool.core.util.ObjectUtil; +import cn.hutool.core.util.StrUtil; +import com.ms.api.consts.RedisKeyConst; import com.ms.api.service.OpOrderRsyncQueueService; +import com.ms.dal.entity.OpOrderRsyncQueue; import com.ms.dal.mapper.OpOrderRsyncQueueMapper; import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.data.redis.core.RedisTemplate; import org.springframework.stereotype.Service; - /** * */ @Service -public class OpOrderRsyncQueueServiceImpl implements OpOrderRsyncQueueService{ +public class OpOrderRsyncQueueServiceImpl implements OpOrderRsyncQueueService { @Autowired private OpOrderRsyncQueueMapper opOrderRsyncQueueMapper; + @Autowired + private RedisTemplate redisTemplate; @Override public int deleteByPrimaryKey(Long id) { @@ -46,6 +53,30 @@ public class OpOrderRsyncQueueServiceImpl implements OpOrderRsyncQueueService{ return opOrderRsyncQueueMapper.updateByPrimaryKey(record); } + @Override + public OpOrderRsyncQueue lockSolidRedisQueue(Long timerLockId, boolean isAdminSelf) { + String queueRedisKey = RedisKeyConst.getQueueRedisKey("op_order_rsync_queue", isAdminSelf); + String queueIdRedis = redisTemplate.opsForList().rightPop(queueRedisKey); + if (StrUtil.isBlank(queueIdRedis)) { + return null; + } + OpOrderRsyncQueue row = opOrderRsyncQueueMapper.queryFirstRowByQueueId(queueIdRedis); + if (ObjectUtil.isEmpty(row)) { + return null; + } + Date date = new Date(); + row.setLocked(timerLockId); + row.setHostname(""); + row.setGmtLastHeartbeat(date); + row.setGmtModified(date); + row.setGmtLocked(date); + int affectRows = opOrderRsyncQueueMapper.updateByPrimaryKey(row); + if (affectRows == 1) { + return row; + } + return null; + } + } diff --git a/ms-biz/src/main/java/com/ms/api/service/impl/PurchaseOrderCustomServiceImpl.java b/ms-biz/src/main/java/com/ms/api/service/impl/PurchaseOrderCustomServiceImpl.java new file mode 100644 index 00000000..1a0f41b4 --- /dev/null +++ b/ms-biz/src/main/java/com/ms/api/service/impl/PurchaseOrderCustomServiceImpl.java @@ -0,0 +1,53 @@ +package com.ms.api.service.impl; + +import com.ms.dal.entity.PurchaseOrderCustom; +import com.ms.api.service.PurchaseOrderCustomService; +import com.ms.dal.mapper.PurchaseOrderCustomMapper; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Service; + + +/** + * + */ +@Service +public class PurchaseOrderCustomServiceImpl implements PurchaseOrderCustomService{ + + @Autowired + private PurchaseOrderCustomMapper purchaseOrderCustomMapper; + + @Override + public int deleteByPrimaryKey(Long id) { + return purchaseOrderCustomMapper.deleteByPrimaryKey(id); + } + + @Override + public int insert(PurchaseOrderCustom record) { + return purchaseOrderCustomMapper.insert(record); + } + + @Override + public int insertSelective(PurchaseOrderCustom record) { + return purchaseOrderCustomMapper.insertSelective(record); + } + + @Override + public PurchaseOrderCustom selectByPrimaryKey(Long id) { + return purchaseOrderCustomMapper.selectByPrimaryKey(id); + } + + @Override + public int updateByPrimaryKeySelective(PurchaseOrderCustom record) { + return purchaseOrderCustomMapper.updateByPrimaryKeySelective(record); + } + + @Override + public int updateByPrimaryKey(PurchaseOrderCustom record) { + return purchaseOrderCustomMapper.updateByPrimaryKey(record); + } + +} + + + + diff --git a/ms-biz/src/main/java/com/ms/api/service/impl/PurchaseOrderDsEncryptServiceImpl.java b/ms-biz/src/main/java/com/ms/api/service/impl/PurchaseOrderDsEncryptServiceImpl.java new file mode 100644 index 00000000..246a0b04 --- /dev/null +++ b/ms-biz/src/main/java/com/ms/api/service/impl/PurchaseOrderDsEncryptServiceImpl.java @@ -0,0 +1,53 @@ +package com.ms.api.service.impl; + +import com.ms.dal.entity.PurchaseOrderDsEncrypt; +import com.ms.api.service.PurchaseOrderDsEncryptService; +import com.ms.dal.mapper.PurchaseOrderDsEncryptMapper; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Service; + + +/** + * + */ +@Service +public class PurchaseOrderDsEncryptServiceImpl implements PurchaseOrderDsEncryptService{ + + @Autowired + private PurchaseOrderDsEncryptMapper purchaseOrderDsEncryptMapper; + + @Override + public int deleteByPrimaryKey(Long id) { + return purchaseOrderDsEncryptMapper.deleteByPrimaryKey(id); + } + + @Override + public int insert(PurchaseOrderDsEncrypt record) { + return purchaseOrderDsEncryptMapper.insert(record); + } + + @Override + public int insertSelective(PurchaseOrderDsEncrypt record) { + return purchaseOrderDsEncryptMapper.insertSelective(record); + } + + @Override + public PurchaseOrderDsEncrypt selectByPrimaryKey(Long id) { + return purchaseOrderDsEncryptMapper.selectByPrimaryKey(id); + } + + @Override + public int updateByPrimaryKeySelective(PurchaseOrderDsEncrypt record) { + return purchaseOrderDsEncryptMapper.updateByPrimaryKeySelective(record); + } + + @Override + public int updateByPrimaryKey(PurchaseOrderDsEncrypt record) { + return purchaseOrderDsEncryptMapper.updateByPrimaryKey(record); + } + +} + + + + diff --git a/ms-biz/src/main/java/com/ms/api/service/impl/QueueServiceImpl.java b/ms-biz/src/main/java/com/ms/api/service/impl/QueueServiceImpl.java new file mode 100644 index 00000000..4d6310f9 --- /dev/null +++ b/ms-biz/src/main/java/com/ms/api/service/impl/QueueServiceImpl.java @@ -0,0 +1,30 @@ +package com.ms.api.service.impl; + +import cn.hutool.core.util.StrUtil; +import com.ms.api.consts.QueueConst; +import com.ms.api.consts.RedisKeyConst; +import com.ms.api.service.QueueService; +import com.ms.dal.mapper.QueueMapper; +import lombok.AllArgsConstructor; +import org.springframework.data.redis.core.RedisTemplate; +import org.springframework.stereotype.Service; + +@Service +@AllArgsConstructor +public class QueueServiceImpl implements QueueService { + + private final RedisTemplate redisTemplate; + + private final QueueMapper queueMapper; + +// public void lockSolidRedisQueue(Integer timerLockId, String queueName, boolean isAdminSelf) { +// String queueRedisKey = RedisKeyConst.getQueueRedisKey(queueName, isAdminSelf); +// String queueId = redisTemplate.opsForList().rightPop(queueRedisKey); +// if (StrUtil.isBlank(queueId)) { +// return; +// } +// String primaryColumn = QueueConst.getQueueIdColumnName(queueName); +// queueMapper.queryFirstRow("select * from %b where `locked` = 0 and %b = %i"); +// +// } +} diff --git a/ms-biz/src/main/java/com/ms/api/task/RsyncOpTaskService.java b/ms-biz/src/main/java/com/ms/api/task/RsyncOpTaskService.java new file mode 100644 index 00000000..a01d0b72 --- /dev/null +++ b/ms-biz/src/main/java/com/ms/api/task/RsyncOpTaskService.java @@ -0,0 +1,126 @@ +package com.ms.api.task; + +import java.util.ArrayList; +import java.util.Arrays; +import java.util.Date; +import java.util.HashMap; +import java.util.List; +import java.util.Map; +import java.util.Objects; +import java.util.concurrent.Executor; +import java.util.stream.Collectors; +import javax.annotation.Resource; + +import cn.hutool.core.util.StrUtil; +import com.ms.api.common.StrObjMap; +import com.ms.api.common.TaskBaseService; +import com.ms.api.consts.RedisKeyConst; +import com.ms.api.service.MoveProductPublishQueueService; +import com.ms.api.service.OpOrderRsyncQueueService; +import com.ms.api.tool.CommonTool; +import com.ms.dal.entity.MoveProductPublishBuffer; +import com.ms.dal.entity.MoveProductPublishQueue; +import com.ms.dal.entity.MoveShopConfig; +import com.ms.dal.entity.OpOrderRsyncQueue; +import com.ms.dal.mapper.OpOrderRsyncQueueMapper; +import lombok.extern.slf4j.Slf4j; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.context.annotation.Bean; +import org.springframework.context.annotation.Configuration; +import org.springframework.stereotype.Component; + +/** + * 将move_product_publish_buffer中的数据 + * 移到move_product_publish_queue中的操作 + */ +@Configuration +@Component +@Slf4j +public class RsyncOpTaskService extends TaskBaseService { + + private static final String TASK_NAME = "RsyncOp"; + + @Autowired + private OpOrderRsyncQueueService opOrderRsyncQueueService; + + + /** + * 同时开启任务处理数量 + */ + @Override + public int getCorePoolSiz() { + return 3; + } + + /** + * 任务管理器名称 + */ + @Override + public String getTaskExecutorName() { + return "rsyncOpTaskPool"; + } + + @Bean(name = "rsyncOpTaskPool") + @Override + public Executor getAsyncExecutor() { + return super.getAsyncExecutor(); + } + + @Resource(name = "rsyncOpTaskPool") + protected Executor taskPool; + + @Override + protected Executor getTaskPool() { + return taskPool; + } + + @Override + public void runTask() { + super.runTask(); + } + + /** + * 获取任务 + */ + @Override + public Object getTask() { + return getBuffer(500); + } + + /** + * 处理任务 + * + * @param params + * @return + */ + @Override + public Object processTask(Object params) { + Map selectMap = (Map) params; + log.info("start moveProductPublishBufferToQueue"); + Map bufferCountMap = bufferToQueue(selectMap); + log.info("end moveProductPublishBufferToQueue ret: " + bufferCountMap.toString()); + return bufferCountMap; + } + + private Map bufferToQueue(Map selectMap) { + return new HashMap(); + } + + /** + * 清理任务 + * + * @param params + */ + @Override + public void clearTask(Object params) { + } + private Map getBuffer(int maxQueueCount) { + log.info("handle {}",TASK_NAME); + return new HashMap<>(); + } + + private void lockRsyncOpQueue(Long timerLockId){ + opOrderRsyncQueueService.lockSolidRedisQueue(timerLockId,false); + } + +} diff --git a/ms-dal/src/main/java/com/ms/dal/entity/PurchaseOrderCustom.java b/ms-dal/src/main/java/com/ms/dal/entity/PurchaseOrderCustom.java new file mode 100644 index 00000000..958f292b --- /dev/null +++ b/ms-dal/src/main/java/com/ms/dal/entity/PurchaseOrderCustom.java @@ -0,0 +1,70 @@ +package com.ms.dal.entity; + +import java.io.Serializable; +import java.math.BigDecimal; +import java.util.Date; +import lombok.Data; + +/** + * + * @TableName purchase_order_custom + */ +@Data +public class PurchaseOrderCustom implements Serializable { + /** + * + */ + private Long purchaseOrderCustomId; + + /** + * + */ + private Long purchaseOrderId; + + /** + * + */ + private Long shopId; + + /** + * + */ + private BigDecimal customPurchaseOrderPayment; + + /** + * + */ + private String customPurchaseOrderBuyer; + + /** + * + */ + private String customPurchaseOrderSeller; + + /** + * + */ + private Long operateShopId; + + /** + * + */ + private String operateIp; + + /** + * + */ + private String lastPayFailReason; + + /** + * + */ + private Date gmtCreate; + + /** + * + */ + private Date gmtModified; + + private static final long serialVersionUID = 1L; +} \ No newline at end of file diff --git a/ms-dal/src/main/java/com/ms/dal/entity/PurchaseOrderDsEncrypt.java b/ms-dal/src/main/java/com/ms/dal/entity/PurchaseOrderDsEncrypt.java new file mode 100644 index 00000000..32b6a8e4 --- /dev/null +++ b/ms-dal/src/main/java/com/ms/dal/entity/PurchaseOrderDsEncrypt.java @@ -0,0 +1,64 @@ +package com.ms.dal.entity; + +import java.io.Serializable; +import java.util.Date; +import lombok.Data; + +/** + * + * @TableName purchase_order_ds_encrypt + */ +@Data +public class PurchaseOrderDsEncrypt implements Serializable { + /** + * + */ + private Long purchaseOrderDsEncryptId; + + /** + * + */ + private Long shopId; + + /** + * + */ + private String orderId; + + /** + * + */ + private String purchaseOrderSn; + + /** + * + */ + private Boolean isSupportEncryptOrder; + + /** + * + */ + private Byte isEncryptOrder; + + /** + * + */ + private String result; + + /** + * + */ + private String reason; + + /** + * + */ + private Date gmtCreate; + + /** + * + */ + private Date gmtModified; + + private static final long serialVersionUID = 1L; +} \ No newline at end of file diff --git a/ms-dal/src/main/java/com/ms/dal/mapper/OpOrderRsyncQueueMapper.java b/ms-dal/src/main/java/com/ms/dal/mapper/OpOrderRsyncQueueMapper.java index 8c8461ed..6719c732 100644 --- a/ms-dal/src/main/java/com/ms/dal/mapper/OpOrderRsyncQueueMapper.java +++ b/ms-dal/src/main/java/com/ms/dal/mapper/OpOrderRsyncQueueMapper.java @@ -27,4 +27,6 @@ public interface OpOrderRsyncQueueMapper { List getByShopId(@Param("shopIds") List shopid); int insertUpdate(OpOrderRsyncQueue queueInfo); + + OpOrderRsyncQueue queryFirstRowByQueueId(@Param("queueId") String queueId); } diff --git a/ms-dal/src/main/java/com/ms/dal/mapper/PurchaseOrderCustomMapper.java b/ms-dal/src/main/java/com/ms/dal/mapper/PurchaseOrderCustomMapper.java new file mode 100644 index 00000000..3a2f12bd --- /dev/null +++ b/ms-dal/src/main/java/com/ms/dal/mapper/PurchaseOrderCustomMapper.java @@ -0,0 +1,26 @@ +package com.ms.dal.mapper; + +import com.ms.dal.entity.PurchaseOrderCustom; +import org.apache.ibatis.annotations.Mapper; + +/** + * @Entity com.ms.dal.entity.PurchaseOrderCustom + */ +@Mapper +public interface PurchaseOrderCustomMapper { + + int deleteByPrimaryKey(Long id); + + int insert(PurchaseOrderCustom record); + + int insertOrUpdate(PurchaseOrderCustom record); + + int insertSelective(PurchaseOrderCustom record); + + PurchaseOrderCustom selectByPrimaryKey(Long id); + + int updateByPrimaryKeySelective(PurchaseOrderCustom record); + + int updateByPrimaryKey(PurchaseOrderCustom record); + +} diff --git a/ms-dal/src/main/java/com/ms/dal/mapper/PurchaseOrderDsEncryptMapper.java b/ms-dal/src/main/java/com/ms/dal/mapper/PurchaseOrderDsEncryptMapper.java new file mode 100644 index 00000000..2f753c0d --- /dev/null +++ b/ms-dal/src/main/java/com/ms/dal/mapper/PurchaseOrderDsEncryptMapper.java @@ -0,0 +1,26 @@ +package com.ms.dal.mapper; + +import com.ms.dal.entity.PurchaseOrderDsEncrypt; +import org.apache.ibatis.annotations.Mapper; + +/** + * @Entity com.ms.dal.entity.PurchaseOrderDsEncrypt + */ +@Mapper +public interface PurchaseOrderDsEncryptMapper { + + int deleteByPrimaryKey(Long id); + + int insert(PurchaseOrderDsEncrypt record); + + int insertOrUpdate(PurchaseOrderDsEncrypt record); + + int insertSelective(PurchaseOrderDsEncrypt record); + + PurchaseOrderDsEncrypt selectByPrimaryKey(Long id); + + int updateByPrimaryKeySelective(PurchaseOrderDsEncrypt record); + + int updateByPrimaryKey(PurchaseOrderDsEncrypt record); + +} diff --git a/ms-dal/src/main/java/com/ms/dal/mapper/QueueMapper.java b/ms-dal/src/main/java/com/ms/dal/mapper/QueueMapper.java new file mode 100644 index 00000000..0df9566e --- /dev/null +++ b/ms-dal/src/main/java/com/ms/dal/mapper/QueueMapper.java @@ -0,0 +1,8 @@ +package com.ms.dal.mapper; + +import org.apache.ibatis.annotations.Mapper; + +@Mapper +public interface QueueMapper { + +} diff --git a/ms-dal/src/main/resources/mapper/OpOrderRsyncQueueMapper.xml b/ms-dal/src/main/resources/mapper/OpOrderRsyncQueueMapper.xml index 9db03b89..7cbfdd42 100644 --- a/ms-dal/src/main/resources/mapper/OpOrderRsyncQueueMapper.xml +++ b/ms-dal/src/main/resources/mapper/OpOrderRsyncQueueMapper.xml @@ -51,6 +51,9 @@ + delete from op_order_rsync_queue diff --git a/ms-dal/src/main/resources/mapper/PurchaseOrderCustomMapper.xml b/ms-dal/src/main/resources/mapper/PurchaseOrderCustomMapper.xml new file mode 100644 index 00000000..00a66803 --- /dev/null +++ b/ms-dal/src/main/resources/mapper/PurchaseOrderCustomMapper.xml @@ -0,0 +1,144 @@ + + + + + + + + + + + + + + + + + + + + purchase_order_custom_id,purchase_order_id,shop_id, + custom_purchase_order_payment,custom_purchase_order_buyer,custom_purchase_order_seller, + operate_shop_id,operate_ip,last_pay_fail_reason, + gmt_create,gmt_modified + + + + + + delete from purchase_order_custom + where purchase_order_custom_id = #{purchaseOrderCustomId,jdbcType=BIGINT} + + + insert into purchase_order_custom + ( purchase_order_custom_id,purchase_order_id,shop_id + ,custom_purchase_order_payment,custom_purchase_order_buyer,custom_purchase_order_seller + ,operate_shop_id,operate_ip,last_pay_fail_reason + ,gmt_create,gmt_modified) + values (#{purchaseOrderCustomId,jdbcType=BIGINT},#{purchaseOrderId,jdbcType=BIGINT},#{shopId,jdbcType=BIGINT} + ,#{customPurchaseOrderPayment,jdbcType=DECIMAL},#{customPurchaseOrderBuyer,jdbcType=VARCHAR},#{customPurchaseOrderSeller,jdbcType=VARCHAR} + ,#{operateShopId,jdbcType=BIGINT},#{operateIp,jdbcType=VARCHAR},#{lastPayFailReason,jdbcType=VARCHAR} + ,#{gmtCreate,jdbcType=TIMESTAMP},#{gmtModified,jdbcType=TIMESTAMP}) + + + insert into purchase_order_custom + ( purchase_order_custom_id,purchase_order_id,shop_id + ,custom_purchase_order_payment,custom_purchase_order_buyer,custom_purchase_order_seller + ,operate_shop_id,operate_ip,last_pay_fail_reason + ,gmt_create,gmt_modified) + values (#{purchaseOrderCustomId,jdbcType=BIGINT},#{purchaseOrderId,jdbcType=BIGINT},#{shopId,jdbcType=BIGINT} + ,#{customPurchaseOrderPayment,jdbcType=DECIMAL},#{customPurchaseOrderBuyer,jdbcType=VARCHAR},#{customPurchaseOrderSeller,jdbcType=VARCHAR} + ,#{operateShopId,jdbcType=BIGINT},#{operateIp,jdbcType=VARCHAR},#{lastPayFailReason,jdbcType=VARCHAR} + ,#{gmtCreate,jdbcType=TIMESTAMP},#{gmtModified,jdbcType=TIMESTAMP}) + ON DUPLICATE KEY UPDATE + purchase_order_id = #{purchaseOrderId,jdbcType=BIGINT}, shop_id = #{shopId,jdbcType=BIGINT}, custom_purchase_order_payment = #{customPurchaseOrderPayment,jdbcType=DECIMAL}, custom_purchase_order_buyer = #{customPurchaseOrderBuyer,jdbcType=VARCHAR}, custom_purchase_order_seller = #{customPurchaseOrderSeller,jdbcType=VARCHAR}, operate_shop_id = #{operateShopId,jdbcType=BIGINT}, operate_ip = #{operateIp,jdbcType=VARCHAR}, last_pay_fail_reason = #{lastPayFailReason,jdbcType=VARCHAR}, gmt_create = #{gmtCreate,jdbcType=TIMESTAMP}, gmt_modified = #{gmtModified,jdbcType=TIMESTAMP} + + + insert into purchase_order_custom + + purchase_order_custom_id, + purchase_order_id, + shop_id, + custom_purchase_order_payment, + custom_purchase_order_buyer, + custom_purchase_order_seller, + operate_shop_id, + operate_ip, + last_pay_fail_reason, + gmt_create, + gmt_modified, + + + #{purchaseOrderCustomId,jdbcType=BIGINT}, + #{purchaseOrderId,jdbcType=BIGINT}, + #{shopId,jdbcType=BIGINT}, + #{customPurchaseOrderPayment,jdbcType=DECIMAL}, + #{customPurchaseOrderBuyer,jdbcType=VARCHAR}, + #{customPurchaseOrderSeller,jdbcType=VARCHAR}, + #{operateShopId,jdbcType=BIGINT}, + #{operateIp,jdbcType=VARCHAR}, + #{lastPayFailReason,jdbcType=VARCHAR}, + #{gmtCreate,jdbcType=TIMESTAMP}, + #{gmtModified,jdbcType=TIMESTAMP}, + + + + update purchase_order_custom + + + purchase_order_id = #{purchaseOrderId,jdbcType=BIGINT}, + + + shop_id = #{shopId,jdbcType=BIGINT}, + + + custom_purchase_order_payment = #{customPurchaseOrderPayment,jdbcType=DECIMAL}, + + + custom_purchase_order_buyer = #{customPurchaseOrderBuyer,jdbcType=VARCHAR}, + + + custom_purchase_order_seller = #{customPurchaseOrderSeller,jdbcType=VARCHAR}, + + + operate_shop_id = #{operateShopId,jdbcType=BIGINT}, + + + operate_ip = #{operateIp,jdbcType=VARCHAR}, + + + last_pay_fail_reason = #{lastPayFailReason,jdbcType=VARCHAR}, + + + gmt_create = #{gmtCreate,jdbcType=TIMESTAMP}, + + + gmt_modified = #{gmtModified,jdbcType=TIMESTAMP}, + + + where purchase_order_custom_id = #{purchaseOrderCustomId,jdbcType=BIGINT} + + + update purchase_order_custom + set + purchase_order_id = #{purchaseOrderId,jdbcType=BIGINT}, + shop_id = #{shopId,jdbcType=BIGINT}, + custom_purchase_order_payment = #{customPurchaseOrderPayment,jdbcType=DECIMAL}, + custom_purchase_order_buyer = #{customPurchaseOrderBuyer,jdbcType=VARCHAR}, + custom_purchase_order_seller = #{customPurchaseOrderSeller,jdbcType=VARCHAR}, + operate_shop_id = #{operateShopId,jdbcType=BIGINT}, + operate_ip = #{operateIp,jdbcType=VARCHAR}, + last_pay_fail_reason = #{lastPayFailReason,jdbcType=VARCHAR}, + gmt_create = #{gmtCreate,jdbcType=TIMESTAMP}, + gmt_modified = #{gmtModified,jdbcType=TIMESTAMP} + where purchase_order_custom_id = #{purchaseOrderCustomId,jdbcType=BIGINT} + + diff --git a/ms-dal/src/main/resources/mapper/PurchaseOrderDsEncryptMapper.xml b/ms-dal/src/main/resources/mapper/PurchaseOrderDsEncryptMapper.xml new file mode 100644 index 00000000..3086f4bd --- /dev/null +++ b/ms-dal/src/main/resources/mapper/PurchaseOrderDsEncryptMapper.xml @@ -0,0 +1,137 @@ + + + + + + + + + + + + + + + + + + + purchase_order_ds_encrypt_id,shop_id,order_id, + purchase_order_sn,is_support_encrypt_order,is_encrypt_order, + result,reason,gmt_create, + gmt_modified + + + + + + delete from purchase_order_ds_encrypt + where purchase_order_ds_encrypt_id = #{purchaseOrderDsEncryptId,jdbcType=BIGINT} + + + insert into purchase_order_ds_encrypt + ( purchase_order_ds_encrypt_id,shop_id,order_id + ,purchase_order_sn,is_support_encrypt_order,is_encrypt_order + ,result,reason,gmt_create + ,gmt_modified) + values (#{purchaseOrderDsEncryptId,jdbcType=BIGINT},#{shopId,jdbcType=BIGINT},#{orderId,jdbcType=VARCHAR} + ,#{purchaseOrderSn,jdbcType=VARCHAR},#{isSupportEncryptOrder,jdbcType=BOOLEAN},#{isEncryptOrder,jdbcType=TINYINT} + ,#{result,jdbcType=VARCHAR},#{reason,jdbcType=VARCHAR},#{gmtCreate,jdbcType=TIMESTAMP} + ,#{gmtModified,jdbcType=TIMESTAMP}) + + + insert into purchase_order_ds_encrypt + ( purchase_order_ds_encrypt_id,shop_id,order_id + ,purchase_order_sn,is_support_encrypt_order,is_encrypt_order + ,result,reason,gmt_create + ,gmt_modified) + values (#{purchaseOrderDsEncryptId,jdbcType=BIGINT},#{shopId,jdbcType=BIGINT},#{orderId,jdbcType=VARCHAR} + ,#{purchaseOrderSn,jdbcType=VARCHAR},#{isSupportEncryptOrder,jdbcType=BOOLEAN},#{isEncryptOrder,jdbcType=TINYINT} + ,#{result,jdbcType=VARCHAR},#{reason,jdbcType=VARCHAR},#{gmtCreate,jdbcType=TIMESTAMP} + ,#{gmtModified,jdbcType=TIMESTAMP}) + ON DUPLICATE KEY UPDATE + shop_id = #{shopId,jdbcType=BIGINT}, order_id = #{orderId,jdbcType=VARCHAR}, purchase_order_sn = #{purchaseOrderSn,jdbcType=VARCHAR}, is_support_encrypt_order = #{isSupportEncryptOrder,jdbcType=BOOLEAN}, is_encrypt_order = #{isEncryptOrder,jdbcType=TINYINT}, result = #{result,jdbcType=VARCHAR}, reason = #{reason,jdbcType=VARCHAR}, gmt_create = #{gmtCreate,jdbcType=TIMESTAMP}, gmt_modified = #{gmtModified,jdbcType=TIMESTAMP} + + + insert into purchase_order_ds_encrypt + + purchase_order_ds_encrypt_id, + shop_id, + order_id, + purchase_order_sn, + is_support_encrypt_order, + is_encrypt_order, + result, + reason, + gmt_create, + gmt_modified, + + + #{purchaseOrderDsEncryptId,jdbcType=BIGINT}, + #{shopId,jdbcType=BIGINT}, + #{orderId,jdbcType=VARCHAR}, + #{purchaseOrderSn,jdbcType=VARCHAR}, + #{isSupportEncryptOrder,jdbcType=BOOLEAN}, + #{isEncryptOrder,jdbcType=TINYINT}, + #{result,jdbcType=VARCHAR}, + #{reason,jdbcType=VARCHAR}, + #{gmtCreate,jdbcType=TIMESTAMP}, + #{gmtModified,jdbcType=TIMESTAMP}, + + + + update purchase_order_ds_encrypt + + + shop_id = #{shopId,jdbcType=BIGINT}, + + + order_id = #{orderId,jdbcType=VARCHAR}, + + + purchase_order_sn = #{purchaseOrderSn,jdbcType=VARCHAR}, + + + is_support_encrypt_order = #{isSupportEncryptOrder,jdbcType=BOOLEAN}, + + + is_encrypt_order = #{isEncryptOrder,jdbcType=TINYINT}, + + + result = #{result,jdbcType=VARCHAR}, + + + reason = #{reason,jdbcType=VARCHAR}, + + + gmt_create = #{gmtCreate,jdbcType=TIMESTAMP}, + + + gmt_modified = #{gmtModified,jdbcType=TIMESTAMP}, + + + where purchase_order_ds_encrypt_id = #{purchaseOrderDsEncryptId,jdbcType=BIGINT} + + + update purchase_order_ds_encrypt + set + shop_id = #{shopId,jdbcType=BIGINT}, + order_id = #{orderId,jdbcType=VARCHAR}, + purchase_order_sn = #{purchaseOrderSn,jdbcType=VARCHAR}, + is_support_encrypt_order = #{isSupportEncryptOrder,jdbcType=BOOLEAN}, + is_encrypt_order = #{isEncryptOrder,jdbcType=TINYINT}, + result = #{result,jdbcType=VARCHAR}, + reason = #{reason,jdbcType=VARCHAR}, + gmt_create = #{gmtCreate,jdbcType=TIMESTAMP}, + gmt_modified = #{gmtModified,jdbcType=TIMESTAMP} + where purchase_order_ds_encrypt_id = #{purchaseOrderDsEncryptId,jdbcType=BIGINT} + + diff --git a/ms-dal/src/main/resources/mapper/QueueMapper.xml b/ms-dal/src/main/resources/mapper/QueueMapper.xml new file mode 100644 index 00000000..9efd4ad3 --- /dev/null +++ b/ms-dal/src/main/resources/mapper/QueueMapper.xml @@ -0,0 +1,8 @@ + + + + + +