diff --git a/yudao-framework/yudao-spring-boot-starter-mq/pom.xml b/yudao-framework/yudao-spring-boot-starter-mq/pom.xml
index c8972f16b2..e07cf31aa7 100644
--- a/yudao-framework/yudao-spring-boot-starter-mq/pom.xml
+++ b/yudao-framework/yudao-spring-boot-starter-mq/pom.xml
@@ -31,7 +31,8 @@
org.springframework.amqp
spring-rabbit
- true
+
+
org.apache.rocketmq
diff --git a/yudao-module-haoka/yudao-module-haoka-biz/pom.xml b/yudao-module-haoka/yudao-module-haoka-biz/pom.xml
index 4dcf160a92..57c04ed663 100644
--- a/yudao-module-haoka/yudao-module-haoka-biz/pom.xml
+++ b/yudao-module-haoka/yudao-module-haoka-biz/pom.xml
@@ -93,5 +93,10 @@
io.github.openfeign
feign-slf4j
+
+
+ cn.iocoder.boot
+ yudao-spring-boot-starter-mq
+
diff --git a/yudao-module-haoka/yudao-module-haoka-biz/src/main/java/cn/iocoder/yudao/module/haoka/controller/admin/orderCatch/OrderCatchController.java b/yudao-module-haoka/yudao-module-haoka-biz/src/main/java/cn/iocoder/yudao/module/haoka/controller/admin/orderCatch/OrderCatchController.java
index 3464add343..21e91d22c5 100644
--- a/yudao-module-haoka/yudao-module-haoka-biz/src/main/java/cn/iocoder/yudao/module/haoka/controller/admin/orderCatch/OrderCatchController.java
+++ b/yudao-module-haoka/yudao-module-haoka-biz/src/main/java/cn/iocoder/yudao/module/haoka/controller/admin/orderCatch/OrderCatchController.java
@@ -4,6 +4,7 @@ package cn.iocoder.yudao.module.haoka.controller.admin.orderCatch;
import cn.iocoder.yudao.framework.tenant.core.context.TenantContextHolder;
import cn.iocoder.yudao.module.haoka.controller.admin.orderCatch.po.Message;
import cn.iocoder.yudao.module.haoka.service.orderCatch.OrderCatchService;
+import cn.iocoder.yudao.module.haoka.service.orderCatch.OrderMessageProducer;
import io.swagger.v3.oas.annotations.Operation;
import io.swagger.v3.oas.annotations.tags.Tag;
import jakarta.annotation.Resource;
@@ -24,13 +25,15 @@ public class OrderCatchController {
@Resource
private OrderCatchService orderCatchService;
-
+ @Resource
+ OrderMessageProducer orderMessageProducer;
@PermitAll
@RequestMapping("/catch")
@Operation(summary = "抓取订单")
public String catchOrders(@Valid @RequestBody List messages) {
// 异步处理订单数据
- execCatchOrders(messages);
+// execCatchOrders(messages);
+ orderMessageProducer.sendSmsSendMessage(messages);
// 立即返回推送所需的响应数据
return "{\"code\":0,\"msg\":\"success\"}";
}
diff --git a/yudao-module-haoka/yudao-module-haoka-biz/src/main/java/cn/iocoder/yudao/module/haoka/controller/admin/orderCatch/po/DouDianOrderMessage.java b/yudao-module-haoka/yudao-module-haoka-biz/src/main/java/cn/iocoder/yudao/module/haoka/controller/admin/orderCatch/po/DouDianOrderMessage.java
new file mode 100644
index 0000000000..3205ee4e00
--- /dev/null
+++ b/yudao-module-haoka/yudao-module-haoka-biz/src/main/java/cn/iocoder/yudao/module/haoka/controller/admin/orderCatch/po/DouDianOrderMessage.java
@@ -0,0 +1,21 @@
+package cn.iocoder.yudao.module.haoka.controller.admin.orderCatch.po;
+
+import lombok.Data;
+
+import java.io.Serializable;
+import java.util.List;
+
+/**
+ * 抖音订单mq消息
+ */
+@Data
+public class DouDianOrderMessage implements Serializable {
+ /**
+ * 队列名称
+ */
+ public static final String QUEUE = "SEND_DOUDIAN_ORDER_MESSAGE_QUEUE";
+ /**
+ * 消息内容
+ */
+ private List messages;
+}
diff --git a/yudao-module-haoka/yudao-module-haoka-biz/src/main/java/cn/iocoder/yudao/module/haoka/controller/admin/orderCatch/po/Message.java b/yudao-module-haoka/yudao-module-haoka-biz/src/main/java/cn/iocoder/yudao/module/haoka/controller/admin/orderCatch/po/Message.java
index e63f8cd00a..a5ca16f121 100644
--- a/yudao-module-haoka/yudao-module-haoka-biz/src/main/java/cn/iocoder/yudao/module/haoka/controller/admin/orderCatch/po/Message.java
+++ b/yudao-module-haoka/yudao-module-haoka-biz/src/main/java/cn/iocoder/yudao/module/haoka/controller/admin/orderCatch/po/Message.java
@@ -2,7 +2,9 @@ package cn.iocoder.yudao.module.haoka.controller.admin.orderCatch.po;
import com.fasterxml.jackson.annotation.JsonProperty;
-public class Message {
+import java.io.Serializable;
+
+public class Message implements Serializable {
@JsonProperty("tag")
private String tag;
diff --git a/yudao-module-haoka/yudao-module-haoka-biz/src/main/java/cn/iocoder/yudao/module/haoka/controller/admin/orders/vo/OrdersPageReqVO.java b/yudao-module-haoka/yudao-module-haoka-biz/src/main/java/cn/iocoder/yudao/module/haoka/controller/admin/orders/vo/OrdersPageReqVO.java
index d4c4416006..b9cae35af6 100644
--- a/yudao-module-haoka/yudao-module-haoka-biz/src/main/java/cn/iocoder/yudao/module/haoka/controller/admin/orders/vo/OrdersPageReqVO.java
+++ b/yudao-module-haoka/yudao-module-haoka-biz/src/main/java/cn/iocoder/yudao/module/haoka/controller/admin/orders/vo/OrdersPageReqVO.java
@@ -65,8 +65,8 @@ public class OrdersPageReqVO extends PageParam {
@Schema(description = "激活状态", example = "2")
private String activeStatus;
- @Schema(description = "ICCID", example = "3384")
- private String iccid;
+ @Schema(description = "购买号码", example = "3384")
+ private String planMobile;
@Schema(description = "外部订单编号", example = "3091")
private String realSourceId;
diff --git a/yudao-module-haoka/yudao-module-haoka-biz/src/main/java/cn/iocoder/yudao/module/haoka/controller/admin/orders/vo/OrdersRespVO.java b/yudao-module-haoka/yudao-module-haoka-biz/src/main/java/cn/iocoder/yudao/module/haoka/controller/admin/orders/vo/OrdersRespVO.java
index 6831406d19..ce2bf5a4c7 100644
--- a/yudao-module-haoka/yudao-module-haoka-biz/src/main/java/cn/iocoder/yudao/module/haoka/controller/admin/orders/vo/OrdersRespVO.java
+++ b/yudao-module-haoka/yudao-module-haoka-biz/src/main/java/cn/iocoder/yudao/module/haoka/controller/admin/orders/vo/OrdersRespVO.java
@@ -2,6 +2,8 @@ package cn.iocoder.yudao.module.haoka.controller.admin.orders.vo;
import io.swagger.v3.oas.annotations.media.Schema;
import lombok.*;
+
+import java.math.BigDecimal;
import java.util.*;
import org.springframework.format.annotation.DateTimeFormat;
import java.time.LocalDateTime;
@@ -324,4 +326,14 @@ public class OrdersRespVO {
*/
@Schema(description = "销售归属名称")
private String salesAttributionName;
+ /*
+ * 订单金额
+ */
+ @Schema(description = "订单金额")
+ private BigDecimal orderAmount;
+ /**
+ * 支付金额
+ */
+ @Schema(description = "支付金额")
+ private BigDecimal payAmount;
}
diff --git a/yudao-module-haoka/yudao-module-haoka-biz/src/main/java/cn/iocoder/yudao/module/haoka/dal/dataobject/orders/OrdersDO.java b/yudao-module-haoka/yudao-module-haoka-biz/src/main/java/cn/iocoder/yudao/module/haoka/dal/dataobject/orders/OrdersDO.java
index 3744a7cd3d..793908cbfe 100644
--- a/yudao-module-haoka/yudao-module-haoka-biz/src/main/java/cn/iocoder/yudao/module/haoka/dal/dataobject/orders/OrdersDO.java
+++ b/yudao-module-haoka/yudao-module-haoka-biz/src/main/java/cn/iocoder/yudao/module/haoka/dal/dataobject/orders/OrdersDO.java
@@ -3,6 +3,7 @@ package cn.iocoder.yudao.module.haoka.dal.dataobject.orders;
import io.swagger.v3.oas.annotations.media.Schema;
import lombok.*;
+import java.math.BigDecimal;
import java.util.*;
import java.time.LocalDateTime;
import java.time.LocalDateTime;
@@ -350,5 +351,13 @@ public class OrdersDO extends BaseDO {
* 销售归属名称
*/
private String salesAttributionName;
+ /*
+ * 订单金额
+ */
+ private BigDecimal orderAmount;
+ /**
+ * 支付金额
+ */
+ private BigDecimal payAmount;
}
diff --git a/yudao-module-haoka/yudao-module-haoka-biz/src/main/java/cn/iocoder/yudao/module/haoka/dal/mysql/orders/OrdersMapper.java b/yudao-module-haoka/yudao-module-haoka-biz/src/main/java/cn/iocoder/yudao/module/haoka/dal/mysql/orders/OrdersMapper.java
index ed97061708..a93f6b9504 100644
--- a/yudao-module-haoka/yudao-module-haoka-biz/src/main/java/cn/iocoder/yudao/module/haoka/dal/mysql/orders/OrdersMapper.java
+++ b/yudao-module-haoka/yudao-module-haoka-biz/src/main/java/cn/iocoder/yudao/module/haoka/dal/mysql/orders/OrdersMapper.java
@@ -36,7 +36,7 @@ public interface OrdersMapper extends BaseMapperX {
.betweenIfPresent(OrdersDO::getStatusUpdatedAt, reqVO.getStatusUpdatedAt())
.eqIfPresent(OrdersDO::getRefundStatus, reqVO.getRefundStatus())
.eqIfPresent(OrdersDO::getActiveStatus, reqVO.getActiveStatus())
- .eqIfPresent(OrdersDO::getIccid, reqVO.getIccid())
+ .eqIfPresent(OrdersDO::getPlanMobile, reqVO.getPlanMobile())
.eqIfPresent(OrdersDO::getIsUrgent, reqVO.getIsUrgent())
.eqIfPresent(OrdersDO::getRealSourceId, reqVO.getRealSourceId())
.eqIfPresent(OrdersDO::getAddressMobile, reqVO.getAddressMobile())
diff --git a/yudao-module-haoka/yudao-module-haoka-biz/src/main/java/cn/iocoder/yudao/module/haoka/service/orderCatch/DouDianOrderCatchServiceImpl.java b/yudao-module-haoka/yudao-module-haoka-biz/src/main/java/cn/iocoder/yudao/module/haoka/service/orderCatch/DouDianOrderCatchServiceImpl.java
index fdf7d64156..fa39394928 100644
--- a/yudao-module-haoka/yudao-module-haoka-biz/src/main/java/cn/iocoder/yudao/module/haoka/service/orderCatch/DouDianOrderCatchServiceImpl.java
+++ b/yudao-module-haoka/yudao-module-haoka-biz/src/main/java/cn/iocoder/yudao/module/haoka/service/orderCatch/DouDianOrderCatchServiceImpl.java
@@ -12,20 +12,36 @@ import cn.iocoder.yudao.module.haoka.dal.mysql.onsaleproduct.OnSaleProductMapper
import cn.iocoder.yudao.module.haoka.dal.mysql.orders.OrdersMapper;
import cn.iocoder.yudao.module.haoka.service.onsaleproduct.OnSaleProductService;
import cn.iocoder.yudao.module.haoka.service.orders.OrdersService;
-import cn.iocoder.yudao.module.haoka.service.ordersynclog.OrderSyncLogService;
import cn.iocoder.yudao.module.haoka.utils.GroupListUtil;
+import cn.iocoder.yudao.module.haoka.utils.ConvertUtil;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
+import com.doudian.open.api.order_addOrderRemark.OrderAddOrderRemarkRequest;
+import com.doudian.open.api.order_addOrderRemark.OrderAddOrderRemarkResponse;
+import com.doudian.open.api.order_addOrderRemark.param.OrderAddOrderRemarkParam;
import com.doudian.open.api.order_batchDecrypt.OrderBatchDecryptRequest;
import com.doudian.open.api.order_batchDecrypt.OrderBatchDecryptResponse;
import com.doudian.open.api.order_batchDecrypt.data.DecryptInfosItem;
import com.doudian.open.api.order_batchDecrypt.data.OrderBatchDecryptData;
import com.doudian.open.api.order_batchDecrypt.param.CipherInfosItem;
import com.doudian.open.api.order_batchDecrypt.param.OrderBatchDecryptParam;
+import com.doudian.open.api.order_logisticsAdd.OrderLogisticsAddRequest;
+import com.doudian.open.api.order_logisticsAdd.OrderLogisticsAddResponse;
+import com.doudian.open.api.order_logisticsAdd.param.OrderLogisticsAddParam;
+import com.doudian.open.api.order_logisticsCompanyList.OrderLogisticsCompanyListRequest;
+import com.doudian.open.api.order_logisticsCompanyList.OrderLogisticsCompanyListResponse;
+import com.doudian.open.api.order_logisticsCompanyList.data.DataItem;
+import com.doudian.open.api.order_logisticsCompanyList.param.OrderLogisticsCompanyListParam;
import com.doudian.open.api.order_orderDetail.OrderOrderDetailRequest;
import com.doudian.open.api.order_orderDetail.OrderOrderDetailResponse;
import com.doudian.open.api.order_orderDetail.data.OrderOrderDetailData;
import com.doudian.open.api.order_orderDetail.data.ShopOrderDetail;
import com.doudian.open.api.order_orderDetail.param.OrderOrderDetailParam;
+import com.doudian.open.api.order_queryLogisticsCompanyList.OrderQueryLogisticsCompanyListRequest;
+import com.doudian.open.api.order_queryLogisticsCompanyList.OrderQueryLogisticsCompanyListResponse;
+import com.doudian.open.api.order_queryLogisticsCompanyList.param.OrderQueryLogisticsCompanyListParam;
+import com.doudian.open.api.order_review.OrderReviewRequest;
+import com.doudian.open.api.order_review.OrderReviewResponse;
+import com.doudian.open.api.order_review.param.OrderReviewParam;
import com.doudian.open.api.order_searchList.OrderSearchListRequest;
import com.doudian.open.api.order_searchList.OrderSearchListResponse;
import com.doudian.open.api.order_searchList.data.*;
@@ -49,6 +65,9 @@ import lombok.extern.slf4j.Slf4j;
import org.apache.commons.lang3.StringUtils;
import org.springframework.stereotype.Service;
import org.springframework.validation.annotation.Validated;
+
+import java.math.BigDecimal;
+import java.time.LocalDateTime;
import java.util.ArrayList;
import java.util.List;
import java.util.regex.Matcher;
@@ -107,6 +126,7 @@ public class DouDianOrderCatchServiceImpl implements OrderCatchService {
if(CollectionUtil.isNotEmpty(ordersDOS)){
OrdersDO ordersDO = ordersDOS.get(0);
ordersDO.setRefundStatus("200");
+ ordersDO.setStatusUpdatedAt(LocalDateTime.now());
ordersMapper.updateById(ordersDO);
}
} else if("201".equals(tag)) {
@@ -118,6 +138,7 @@ public class DouDianOrderCatchServiceImpl implements OrderCatchService {
if(CollectionUtil.isNotEmpty(ordersDOS)){
OrdersDO ordersDO = ordersDOS.get(0);
ordersDO.setRefundStatus("300");
+ ordersDO.setStatusUpdatedAt(LocalDateTime.now());
ordersMapper.updateById(ordersDO);
}
} else if("202".equals(tag)) {
@@ -129,6 +150,7 @@ public class DouDianOrderCatchServiceImpl implements OrderCatchService {
if(CollectionUtil.isNotEmpty(ordersDOS)){
OrdersDO ordersDO = ordersDOS.get(0);
ordersDO.setRefundStatus("300");
+ ordersDO.setStatusUpdatedAt(LocalDateTime.now());
ordersMapper.updateById(ordersDO);
}
} else if("101".equals(tag)) {
@@ -149,6 +171,7 @@ public class DouDianOrderCatchServiceImpl implements OrderCatchService {
if(CollectionUtil.isNotEmpty(ordersDOS)){
OrdersDO ordersDO = ordersDOS.get(0);
ordersDO.setRefundStatus("300");
+ ordersDO.setStatusUpdatedAt(LocalDateTime.now());
ordersMapper.updateById(ordersDO);
}
} else if("110".equals(tag)) {
@@ -179,6 +202,9 @@ public class DouDianOrderCatchServiceImpl implements OrderCatchService {
// 店铺信息
Long shopId = order.getShopId();
String shopName = order.getShopName();
+ //下单时间信息
+ Long createTime = order.getCreateTime();
+ Long updateTime = order.getUpdateTime();
// 物流信息
List logisticsInfo = order.getLogisticsInfo();
/**
@@ -242,6 +268,7 @@ public class DouDianOrderCatchServiceImpl implements OrderCatchService {
ordersDO.setSuperiorProductConfigId(onSaleProductPreOrder.getSuperiorProductConfigRespVO().getId());
ordersDO.setSuperiorApiId(onSaleProductPreOrder.getSuperiorApiRespVO().getId());
ordersDO.setProductSku(onSaleProductPreOrder.getParentProduct().getSku());
+ ordersDO.setSupplierProductName(onSaleProductDO.getName());
}
}
// 在售商品
@@ -277,8 +304,6 @@ public class DouDianOrderCatchServiceImpl implements OrderCatchService {
}
ordersDO.setRefundStatus(String.valueOf(HaokaOrderRefundStatus));
// 获取计划手机号
- String productName = skuOrderListItem.getProductName();
- ordersDO.setSupplierProductName(productName);
for (com.doudian.open.api.order_orderDetail.data.SpecItem specItem : skuOrderListItem.getSpec()) {
String value = specItem.getValue();
String planMobile = getPlanMobile(value);
@@ -292,6 +317,8 @@ public class DouDianOrderCatchServiceImpl implements OrderCatchService {
// 更新订单
OrdersDO ordersDO1 = ordersDOS.get(0);
ordersDO.setId(ordersDO1.getId());
+ // 时间戳转成时间
+ ordersDO.setStatusUpdatedAt(ConvertUtil.timestampToLocalDateTime(updateTime));
ordersMapper.updateById(ordersDO);
}else {
// 新增订单
@@ -327,6 +354,18 @@ public class DouDianOrderCatchServiceImpl implements OrderCatchService {
// 详细地址
// ordersDO.setAddress(detail);
ordersDO.setEncryptAddress(encryptDetail);
+ // 取时间
+ ordersDO.setOrderedAt(ConvertUtil.timestampToLocalDateTime(createTime));
+ ordersDO.setStatusUpdatedAt(ConvertUtil.timestampToLocalDateTime(updateTime));
+ // 取价格
+ Long orderAmount = skuOrderListItem.getOrderAmount();
+ Long payAmount = skuOrderListItem.getPayAmount();
+ BigDecimal orderAmount1 = ConvertUtil.convertFenToYuan(orderAmount);
+ BigDecimal payAmount1 = ConvertUtil.convertFenToYuan(payAmount);
+ ordersDO.setOrderAmount(orderAmount1);
+ ordersDO.setPayAmount(payAmount1);
+ // 渠道 抖音
+ ordersDO.setSource(SYNC_TYPE);
orderList.add(ordersDO);
}
@@ -339,7 +378,12 @@ public class DouDianOrderCatchServiceImpl implements OrderCatchService {
for (OrdersDO ordersDO : orderList) {
OrdersSaveReqVO ordersSaveReqVO = new OrdersSaveReqVO();
BeanUtils.copyProperties(ordersDO,ordersSaveReqVO);
+ ordersSaveReqVO.setSellerMemo("《已抓单》");
ordersService.createOrders(ordersSaveReqVO);
+ OrderAddOrderRemarkParam param = new OrderAddOrderRemarkParam();
+ param.setOrderId(ordersDO.getUpstreamOrderId());
+ param.setRemark("《已抓单》");
+ addOrderRemark(param);
}
// ordersMapper.insertBatch(orderList);
@@ -368,6 +412,8 @@ public class DouDianOrderCatchServiceImpl implements OrderCatchService {
// String orderId = order.getOrderId();
// 买家备注
String buyerWords = order.getBuyerWords();
+ Long createTime = order.getCreateTime();
+ Long updateTime = order.getUpdateTime();
// 店铺id
Long shopId = order.getShopId();
// 店铺名称
@@ -422,6 +468,7 @@ public class DouDianOrderCatchServiceImpl implements OrderCatchService {
ordersDO.setSuperiorProductConfigId(onSaleProductPreOrder.getSuperiorProductConfigRespVO().getId());
ordersDO.setSuperiorApiId(onSaleProductPreOrder.getSuperiorApiRespVO().getId());
ordersDO.setProductSku(onSaleProductPreOrder.getParentProduct().getSku());
+ ordersDO.setSupplierProductName(onSaleProductDO.getName());
}
}
// 在售商品
@@ -457,8 +504,6 @@ public class DouDianOrderCatchServiceImpl implements OrderCatchService {
ordersDO.setRefundStatus(String.valueOf(HaokaOrderRefundStatus));
ordersDO.setStatusName(skuOrderListItem.getOrderStatusDesc());
// 获取计划手机号
- String productName = skuOrderListItem.getProductName();
- ordersDO.setSupplierProductName(productName);
for (SpecItem specItem : skuOrderListItem.getSpec()) {
String value = specItem.getValue();
String planMobile = getPlanMobile(value);
@@ -472,6 +517,7 @@ public class DouDianOrderCatchServiceImpl implements OrderCatchService {
// 更新订单
OrdersDO ordersDO1 = ordersDOS.get(0);
ordersDO.setId(ordersDO1.getId());
+ ordersDO.setStatusUpdatedAt(LocalDateTime.now());
ordersMapper.updateById(ordersDO);
}else {
// 新增订单
@@ -506,6 +552,18 @@ public class DouDianOrderCatchServiceImpl implements OrderCatchService {
// 详细地址
// ordersDO.setAddress(detail);
ordersDO.setEncryptAddress(encryptDetail);
+ // 取时间
+ ordersDO.setOrderedAt(ConvertUtil.timestampToLocalDateTime(createTime));
+ ordersDO.setStatusUpdatedAt(ConvertUtil.timestampToLocalDateTime(updateTime));
+ // 取价格
+ Long orderAmount = skuOrderListItem.getOrderAmount();
+ Long payAmount = skuOrderListItem.getPayAmount();
+ BigDecimal orderAmount1 = ConvertUtil.convertFenToYuan(orderAmount);
+ BigDecimal payAmount1 = ConvertUtil.convertFenToYuan(payAmount);
+ ordersDO.setOrderAmount(orderAmount1);
+ ordersDO.setPayAmount(payAmount1);
+ // 渠道 抖音
+ ordersDO.setSource(SYNC_TYPE);
orderList.add(ordersDO);
}
@@ -520,7 +578,12 @@ public class DouDianOrderCatchServiceImpl implements OrderCatchService {
for (OrdersDO ordersDO : orderList) {
OrdersSaveReqVO ordersSaveReqVO = new OrdersSaveReqVO();
BeanUtils.copyProperties(ordersDO,ordersSaveReqVO);
+ ordersSaveReqVO.setSellerMemo("《已抓单》");
ordersService.createOrders(ordersSaveReqVO);
+ OrderAddOrderRemarkParam param = new OrderAddOrderRemarkParam();
+ param.setOrderId(ordersDO.getUpstreamOrderId());
+ param.setRemark("《已抓单》");
+ addOrderRemark(param);
}
// ordersMapper.insertBatch(orderList);
}
@@ -692,5 +755,95 @@ public class DouDianOrderCatchServiceImpl implements OrderCatchService {
System.out.println(response);
}
+ /**
+ * 给订单返回备注
+ */
+ public void addOrderRemark(OrderAddOrderRemarkParam param){
+ OrderAddOrderRemarkRequest request = new OrderAddOrderRemarkRequest();
+// OrderAddOrderRemarkParam param = request.getParam();
+// param.setOrderId("6496679971677798670");
+// param.setRemark("这是具体的备注内容");
+// param.setIsAddStar("true");
+// param.setStar("2");
+ request.setParam(param);
+ GlobalConfig.initAppKey(SYNC_APP_KEY);
+ GlobalConfig.initAppSecret(SYNC_APP_SECRET);
+//入参为code
+ AccessToken accessToken= AccessTokenBuilder.build(SYNC_SHOP_ID);
+ OrderAddOrderRemarkResponse response = request.execute(accessToken);
+ if("10000".equals(response.getCode())){
+// 加入备注成功
+ log.error("加入备注成功,{}",response.getMsg());
+ }else {
+// 加入备注失败
+ log.error("加入备注失败,{}",response.getMsg());
+ }
+ }
+
+ /**
+ * 订单审核
+ * @param rejectCode
+ * @param objectId
+ */
+ public void reviewOrder(Long rejectCode,String objectId){
+ try {
+ OrderReviewRequest request = new OrderReviewRequest();
+ OrderReviewParam param = request.getParam();
+ param.setTaskType(3001L);
+ param.setRejectCode(rejectCode);
+ param.setObjectId(objectId);
+ request.setParam(param);
+ GlobalConfig.initAppKey(SYNC_APP_KEY);
+ GlobalConfig.initAppSecret(SYNC_APP_SECRET);
+//入参为code
+ AccessToken accessToken= AccessTokenBuilder.build(SYNC_SHOP_ID);
+ OrderReviewResponse response = request.execute(accessToken);
+ } catch (Exception e) {
+ log.error("订单审核失败,{}",e.getMessage());
+ }
+ }
+
+ /**
+ *获取快递公司列表
+ */
+ public static List logisticsCompanyList(){
+ OrderLogisticsCompanyListRequest request = new OrderLogisticsCompanyListRequest();
+ GlobalConfig.initAppKey(SYNC_APP_KEY);
+ GlobalConfig.initAppSecret(SYNC_APP_SECRET);
+//入参为code
+ AccessToken accessToken= AccessTokenBuilder.build(SYNC_SHOP_ID);
+ OrderLogisticsCompanyListResponse response = request.execute(accessToken);
+ String code = response.getCode();
+ if("10000".equals(code)){
+ return response.getData();
+ }
+ return null;
+ }
+ /**
+ * 订单发货
+ * @param OrderId 订单id
+ * @param company 快递公司
+ * @param companyCode 快递公司编码
+ * @param logisticsCode 物流单号
+ */
+ public void logisticsAdd(String OrderId,String company,String companyCode,String logisticsCode){
+ try {
+ OrderLogisticsAddRequest request = new OrderLogisticsAddRequest();
+ OrderLogisticsAddParam param = request.getParam();
+ param.setOrderId(OrderId);
+ param.setCompany(company);
+ param.setCompanyCode(companyCode);
+ param.setLogisticsCode(logisticsCode);
+ param.setIsRefundReject(false);
+ param.setIsRejectRefund(false);
+ GlobalConfig.initAppKey(SYNC_APP_KEY);
+ GlobalConfig.initAppSecret(SYNC_APP_SECRET);
+//入参为code
+ AccessToken accessToken= AccessTokenBuilder.build(SYNC_SHOP_ID);
+ OrderLogisticsAddResponse response = request.execute(accessToken);
+ } catch (Exception e) {
+ log.error("订单发货失败,{}",e.getMessage());
+ }
+ }
}
diff --git a/yudao-module-haoka/yudao-module-haoka-biz/src/main/java/cn/iocoder/yudao/module/haoka/service/orderCatch/OrderMessageConsumer.java b/yudao-module-haoka/yudao-module-haoka-biz/src/main/java/cn/iocoder/yudao/module/haoka/service/orderCatch/OrderMessageConsumer.java
new file mode 100644
index 0000000000..f8fed81370
--- /dev/null
+++ b/yudao-module-haoka/yudao-module-haoka-biz/src/main/java/cn/iocoder/yudao/module/haoka/service/orderCatch/OrderMessageConsumer.java
@@ -0,0 +1,41 @@
+package cn.iocoder.yudao.module.haoka.service.orderCatch;
+
+import cn.iocoder.yudao.framework.tenant.core.context.TenantContextHolder;
+import cn.iocoder.yudao.module.haoka.controller.admin.orderCatch.po.DouDianOrderMessage;
+import com.doudian.open.utils.JsonUtil;
+import jakarta.annotation.Resource;
+import lombok.extern.slf4j.Slf4j;
+import org.springframework.amqp.rabbit.annotation.Queue;
+import org.springframework.amqp.rabbit.annotation.RabbitListener;
+import org.springframework.amqp.support.AmqpHeaders;
+import org.springframework.messaging.handler.annotation.Header;
+import org.springframework.stereotype.Component;
+
+import com.rabbitmq.client.Channel;
+
+@Component
+@RabbitListener(queuesToDeclare = { @Queue(value = DouDianOrderMessage.QUEUE,durable = "true", autoDelete = "false") }, ackMode = "MANUAL")
+@Slf4j
+public class OrderMessageConsumer {
+ @Resource
+ private OrderCatchService orderCatchService;
+
+ @RabbitListener(queuesToDeclare = { @Queue(value = DouDianOrderMessage.QUEUE,durable = "true", autoDelete = "false") }, ackMode = "MANUAL")
+ public void onMessage(DouDianOrderMessage message, Channel channel, @Header(AmqpHeaders.DELIVERY_TAG) long deliveryTag) {
+ try {
+ log.info("[onMessage][消息内容({})]", JsonUtil.toJson(message));
+ TenantContextHolder.setTenantId(162L);
+ orderCatchService.catchOrders(message.getMessages());
+ // 手动确认消息
+ channel.basicAck(deliveryTag, false);
+ } catch (Exception e) {
+ try {
+ // 处理失败,拒绝消息
+ channel.basicNack(deliveryTag, false, true);
+ } catch (Exception ex) {
+ log.error("消息确认失败", ex);
+ }
+ log.error("消息处理失败", e);
+ }
+ }
+}
\ No newline at end of file
diff --git a/yudao-module-haoka/yudao-module-haoka-biz/src/main/java/cn/iocoder/yudao/module/haoka/service/orderCatch/OrderMessageProducer.java b/yudao-module-haoka/yudao-module-haoka-biz/src/main/java/cn/iocoder/yudao/module/haoka/service/orderCatch/OrderMessageProducer.java
new file mode 100644
index 0000000000..98929b6618
--- /dev/null
+++ b/yudao-module-haoka/yudao-module-haoka-biz/src/main/java/cn/iocoder/yudao/module/haoka/service/orderCatch/OrderMessageProducer.java
@@ -0,0 +1,32 @@
+package cn.iocoder.yudao.module.haoka.service.orderCatch;
+
+import cn.iocoder.yudao.module.haoka.controller.admin.orderCatch.po.DouDianOrderMessage;
+import cn.iocoder.yudao.module.haoka.controller.admin.orderCatch.po.Message;
+import jakarta.annotation.Resource;
+import lombok.extern.slf4j.Slf4j;
+import org.springframework.amqp.rabbit.connection.CorrelationData;
+import org.springframework.amqp.rabbit.core.RabbitTemplate;
+import org.springframework.stereotype.Component;
+
+import java.util.List;
+import java.util.UUID;
+
+@Slf4j
+@Component
+public class OrderMessageProducer {
+ @Resource
+ private RabbitTemplate rabbitTemplate;
+
+ /**
+ * 发送 {@link DouDianOrderMessage} 消息
+ *
+ * @param messages 消息内容
+ */
+ public void sendSmsSendMessage(List messages) {
+ DouDianOrderMessage message = new DouDianOrderMessage();
+ message.setMessages(messages);
+ // 为消息添加唯一ID
+ CorrelationData correlationData = new CorrelationData(UUID.randomUUID().toString());
+ rabbitTemplate.convertAndSend(DouDianOrderMessage.QUEUE, message, correlationData);
+ }
+}
\ No newline at end of file
diff --git a/yudao-module-haoka/yudao-module-haoka-biz/src/main/java/cn/iocoder/yudao/module/haoka/service/orders/OrdersServiceImpl.java b/yudao-module-haoka/yudao-module-haoka-biz/src/main/java/cn/iocoder/yudao/module/haoka/service/orders/OrdersServiceImpl.java
index 56ff99322e..3fc6eab03d 100644
--- a/yudao-module-haoka/yudao-module-haoka-biz/src/main/java/cn/iocoder/yudao/module/haoka/service/orders/OrdersServiceImpl.java
+++ b/yudao-module-haoka/yudao-module-haoka-biz/src/main/java/cn/iocoder/yudao/module/haoka/service/orders/OrdersServiceImpl.java
@@ -3,29 +3,37 @@ package cn.iocoder.yudao.module.haoka.service.orders;
import cn.hutool.core.collection.CollectionUtil;
import cn.hutool.core.util.ObjectUtil;
import cn.iocoder.yudao.module.haoka.api.ApiFrom;
+import cn.iocoder.yudao.module.haoka.api.liantong.util.StringUtils;
import cn.iocoder.yudao.module.haoka.controller.admin.onsaleproduct.vo.OnSaleProductPreOrderRespVO;
import cn.iocoder.yudao.module.haoka.controller.admin.orderoperatelog.vo.OrderOperateLogSaveReqVO;
import cn.iocoder.yudao.module.haoka.controller.admin.product.vo.HaoKaProductRespVO;
import cn.iocoder.yudao.module.haoka.controller.admin.product.vo.ProductLimitAreaRespVO;
import cn.iocoder.yudao.module.haoka.controller.admin.product.vo.ProductLimitCardRespVO;
import cn.iocoder.yudao.module.haoka.controller.admin.product.vo.ProductLimitRespVO;
+import cn.iocoder.yudao.module.haoka.dal.dataobject.blacklist.BlackListDO;
import cn.iocoder.yudao.module.haoka.service.api.models.ApiDealResp;
import cn.iocoder.yudao.module.haoka.service.api.ApiDealStrategyService;
import cn.iocoder.yudao.module.haoka.service.api.models.OrderApiCreateParam;
import cn.iocoder.yudao.module.haoka.service.api.models.OrderApiCreateResp;
+import cn.iocoder.yudao.module.haoka.service.blacklist.BlackListService;
import cn.iocoder.yudao.module.haoka.service.onsaleproduct.OnSaleProductService;
+import cn.iocoder.yudao.module.haoka.service.orderCatch.DouDianOrderCatchServiceImpl;
import cn.iocoder.yudao.module.haoka.service.orderoperatelog.OrderOperateLogService;
import cn.iocoder.yudao.module.haoka.service.product.ProductLimitService;
import cn.iocoder.yudao.module.haoka.service.smstask.SmsTaskService;
import cn.iocoder.yudao.module.haoka.utils.IdCardAgeCalculator;
import cn.iocoder.yudao.module.haoka.utils.SnowflakeId;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import com.doudian.open.api.order_addOrderRemark.param.OrderAddOrderRemarkParam;
import com.google.common.collect.Lists;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Qualifier;
+import org.springframework.scheduling.annotation.Async;
import org.springframework.stereotype.Service;
import jakarta.annotation.Resource;
import org.springframework.transaction.annotation.Transactional;
+import org.springframework.transaction.support.TransactionSynchronizationAdapter;
+import org.springframework.transaction.support.TransactionSynchronizationManager;
import org.springframework.validation.annotation.Validated;
import cn.iocoder.yudao.module.haoka.controller.admin.orders.vo.*;
@@ -37,6 +45,8 @@ import cn.iocoder.yudao.module.haoka.dal.mysql.orders.OrdersMapper;
import java.util.ArrayList;
import java.util.List;
+import java.util.Objects;
+import java.util.Set;
import java.util.stream.Collectors;
import static cn.iocoder.yudao.framework.common.exception.util.ServiceExceptionUtil.exception;
@@ -66,6 +76,9 @@ public class OrdersServiceImpl extends ServiceImpl imple
@Resource
private OrderOperateLogService orderOperateLogService;
+ @Resource
+ private BlackListService blackListService;
+
/**
* 重新提交订单
*
@@ -97,9 +110,14 @@ public class OrdersServiceImpl extends ServiceImpl imple
logSaveReqVO.setMsgType("0");
logSaveReqVO.setMsgSource("0");
orderOperateLogService.createOrderOperateLog(logSaveReqVO);
- return createOrder(ordersDO);
+ return createOrderToOperators(ordersDO);
}
+ /**
+ * 在号卡系统创建订单
+ * @param createReqVO 创建信息
+ * @return
+ */
// 19547688 -> 电信 19547688 湖南电信,:号码+号码ID
@Override
@@ -139,10 +157,35 @@ public class OrdersServiceImpl extends ServiceImpl imple
ordersDO.getAddressMobile(),
ordersDO
);
+ // 异步判断是否自动提交审核订单
+ TransactionSynchronizationManager.registerSynchronization(new TransactionSynchronizationAdapter() {
+ @Override
+ public void afterCommit() {
+ //异步操作
+ asyncSubmitAuditOrders(ordersDO);
+ }
+ });
// 返回
return orders.getId();
}
+ /**
+ * 异步判断是否自动提交审核订单
+ * @param ordersDO
+ */
+ @Async
+ public void asyncSubmitAuditOrders(OrdersDO ordersDO){
+ // 是否自动生产
+ Integer autoType = ordersDO.getAutoType();
+ if(2 == autoType){
+ // 自动生产 调用提交初审
+ OrdersSaveReqVO ordersSaveReqVO = new OrdersSaveReqVO();
+ ordersSaveReqVO.setId(ordersDO.getId());
+ ordersSaveReqVO.setStatus(120L);
+ this.updateOrders(ordersSaveReqVO);
+ }
+ }
+
@Override
public void updateOrders(OrdersSaveReqVO updateReqVO) {
// 校验存在
@@ -152,7 +195,11 @@ public class OrdersServiceImpl extends ServiceImpl imple
throw exception(ORDERS_NOT_EXISTS);
}
OrdersDO updateObj = BeanUtils.toBean(updateReqVO, OrdersDO.class);
- if ("120".equals(String.valueOf(updateReqVO.getStatus()))) {
+ // 是否审核通过
+ boolean canAudit = true;
+ // 是否提交初审
+ boolean submit = "120".equals(String.valueOf(updateReqVO.getStatus()));
+ if (submit) {
// 提交初审时判断限制条件
OnSaleProductPreOrderRespVO onSaleProductPreOrder = onSaleProductService.getOnSaleProductPreOrder(oldOrderDo.getOnSaleProductId());
ProductLimitRespVO productLimit = productLimitService.getProductLimit(onSaleProductPreOrder.getParentProduct().getHaokaProductLimitId());
@@ -174,6 +221,9 @@ public class OrdersServiceImpl extends ServiceImpl imple
logSaveReqVO.setMsgSource("0");
orderOperateLogService.createOrderOperateLog(logSaveReqVO);
updateObj.setStatus(-451L);
+ updateObj.setReason(oldOrderDo.getReason() + "\n"+ "提交初审:年龄限制校验不通过");
+ // 初审不通过
+ canAudit = false;
}
List productLimitCardRespVO = productLimit.getProductLimitCardRespVO();
if (ObjectUtil.isNotEmpty(productLimitCardRespVO)) {
@@ -188,6 +238,9 @@ public class OrdersServiceImpl extends ServiceImpl imple
logSaveReqVO.setMsgSource("0");
orderOperateLogService.createOrderOperateLog(logSaveReqVO);
updateObj.setStatus(-451L);
+ // 初审不通过
+ updateObj.setReason(oldOrderDo.getReason() + "\n"+ "提交初审:身份证号码限制校验不通过");
+ canAudit = false;
break;
}
}
@@ -213,6 +266,9 @@ public class OrdersServiceImpl extends ServiceImpl imple
logSaveReqVO.setMsgType("1");
logSaveReqVO.setMsgSource("0");
orderOperateLogService.createOrderOperateLog(logSaveReqVO);
+ // 初审不通过
+ updateObj.setReason(oldOrderDo.getReason() + "\n"+ "提交初审:敏感地区待审核");
+ canAudit = false;
}
List notAllowedAreaCode = productLimitAreaVos
@@ -229,14 +285,74 @@ public class OrdersServiceImpl extends ServiceImpl imple
logSaveReqVO.setMsgType("1");
logSaveReqVO.setMsgSource("0");
orderOperateLogService.createOrderOperateLog(logSaveReqVO);
+ // 初审不通过
+ updateObj.setReason(oldOrderDo.getReason() + "\n"+ "提交初审:敏感地区待审核");
+ canAudit = false;
}
}
+ // 黑名单判断
+ List list = blackListService.list();
+ boolean blacklisted = isBlacklisted(list, oldOrderDo.getAddressMobile(), idCardNum);
+ if(blacklisted){
+ updateObj.setStatus(-451L);
+ OrderOperateLogSaveReqVO logSaveReqVO = new OrderOperateLogSaveReqVO();
+ logSaveReqVO.setOrderId(updateObj.getId());
+ logSaveReqVO.setMsg("提交初审:该订单身份证号码或手机号在系统黑名单中");
+ logSaveReqVO.setMsgType("1");
+ logSaveReqVO.setMsgSource("0");
+ orderOperateLogService.createOrderOperateLog(logSaveReqVO);
+ // 初审不通过
+ updateObj.setReason(oldOrderDo.getReason() + "\n"+ "提交初审:该订单身份证号码或手机号在系统黑名单中");
+ canAudit = false;
+ }
}
this.updateOrderById(updateObj);
+ // 异步处理 审核成功是否自动进单
+ Integer autoType = oldOrderDo.getAutoType();
+ // 联合条件: 自动生产 && 审核通过 && 提交初审
+ if(2 == autoType && canAudit && submit){
+ TransactionSynchronizationManager.registerSynchronization(new TransactionSynchronizationAdapter() {
+ @Override
+ public void afterCommit() {
+ //异步操作
+ OrdersSaveReqVO ordersSaveReqVO = new OrdersSaveReqVO();
+ ordersSaveReqVO.setId(updateObj.getId());
+ auditOrders(ordersSaveReqVO);
+ }
+ });
+ }
}
-
+
+ /**
+ * 判断手机号和身份证是否在黑名单中
+ * @param list
+ * @param phoneNumber
+ * @param idcard
+ * @return
+ */
+ public static boolean isBlacklisted(List list, String phoneNumber, String idcard) {
+ if(CollectionUtil.isEmpty(list)){
+ return false;
+ }
+ Set phoneSet = list.stream()
+ .map(BlackListDO::getAddressPhone)
+ .filter(Objects::nonNull)
+ .collect(Collectors.toSet());
+
+ Set idcardSet = list.stream()
+ .map(BlackListDO::getPersonIdCard)
+ .filter(Objects::nonNull)
+ .collect(Collectors.toSet());
+
+ boolean isPhoneBlacklisted = phoneSet.contains(phoneNumber);
+ boolean isIdcardBlacklisted = idcardSet.contains(idcard);
+ // 如果手机号或身份证号在黑名单中,返回 true
+ return isPhoneBlacklisted || isIdcardBlacklisted;
+ }
+
+
private void updateOrderById(OrdersDO updateObj){
OrdersDO oldOrderDo = ordersMapper.selectById(updateObj.getId());
if (oldOrderDo == null) {
@@ -248,6 +364,30 @@ public class OrdersServiceImpl extends ServiceImpl imple
updateObj.setSuperiorProductConfigId(oldOrderDo.getSuperiorProductConfigId());
updateObj.setSuperiorApiId(oldOrderDo.getSuperiorApiId());
ordersMapper.updateById(updateObj);
+ // 抖音订单判断备注更新
+ if("2".equals(oldOrderDo.getSource())){
+ String sellerMemo = oldOrderDo.getSellerMemo();
+ String sellerMemo1 = updateObj.getSellerMemo();
+ if(StringUtils.isNotBlank(sellerMemo) && StringUtils.isNotBlank(sellerMemo1) && !sellerMemo.equals(sellerMemo1)){
+ OrderAddOrderRemarkParam param = new OrderAddOrderRemarkParam();
+ param.setOrderId(oldOrderDo.getUpstreamOrderId());
+ param.setRemark(sellerMemo1);
+ Long flag = updateObj.getFlag();
+ if(null != flag){
+ param.setIsAddStar("true");
+ param.setStar(String.valueOf(flag));
+ }
+ DouDianOrderCatchServiceImpl douDianOrderCatchService = new DouDianOrderCatchServiceImpl();
+ douDianOrderCatchService.addOrderRemark(param);
+ }
+// 抖音判断发货
+ String trackingNumber = updateObj.getTrackingNumber();
+ if(StringUtils.isNotBlank(trackingNumber)){
+ Long trackingCompanyId = updateObj.getTrackingCompanyId();
+ DouDianOrderCatchServiceImpl douDianOrderCatchService = new DouDianOrderCatchServiceImpl();
+ douDianOrderCatchService.logisticsAdd(updateObj.getRealSourceId(),"","",trackingNumber);
+ }
+ }
// 状态变化:发送短信提醒
if (updateObj.getStatus() != null && updateObj.getStatus().equals(oldOrderDo.getStatus())) {
@@ -291,7 +431,7 @@ public class OrdersServiceImpl extends ServiceImpl imple
logSaveReqVO.setMsgType("0");
logSaveReqVO.setMsgSource("1");
orderOperateLogService.createOrderOperateLog(logSaveReqVO);
- createOrder(updateObj);
+ createOrderToOperators(updateObj);
} else {
// 手动生产
updateObj.setStatus(450L);
@@ -299,8 +439,20 @@ public class OrdersServiceImpl extends ServiceImpl imple
}
}
-
-
+ // 如果是抖音订单 则需要调用抖音接口 返回审核结果
+ String source = ordersOld.getSource();
+ if("2".equals(source)){
+ if(status != null && status == 450L){
+ //审核通过
+ DouDianOrderCatchServiceImpl douDianOrderCatchService = new DouDianOrderCatchServiceImpl();
+ douDianOrderCatchService.reviewOrder(0L,updateObj.getRealSourceId());
+ }
+ if(status != null && status == -450L){
+ //审核不通过
+ DouDianOrderCatchServiceImpl douDianOrderCatchService = new DouDianOrderCatchServiceImpl();
+ douDianOrderCatchService.reviewOrder(200005L,updateObj.getRealSourceId());
+ }
+ }
// 状态变化:发送短信提醒
if (updateObj.getStatus() != null && !updateObj.getStatus().equals(ordersOld.getStatus())) {
smsTaskService.sendSMS(
@@ -325,7 +477,7 @@ public class OrdersServiceImpl extends ServiceImpl imple
public void submitOrders(OrdersSaveReqVO updateReqVO) {
// OrdersDO updateObj = BeanUtils.toBean(updateReqVO, OrdersDO.class);
OrdersDO ordersDO = ordersMapper.selectById(updateReqVO.getId());
- createOrder(ordersDO);
+ createOrderToOperators(ordersDO);
}
@Override
@@ -354,11 +506,11 @@ public class OrdersServiceImpl extends ServiceImpl imple
}
/**
- * 调用运营商产生订单
+ * 调用运营商产生订单(在运营商侧创建订单)
*
* @param ordersDO
*/
- private OrdersDO createOrder(OrdersDO ordersDO) {
+ private OrdersDO createOrderToOperators(OrdersDO ordersDO) {
// 向上游提交订单
OrderApiCreateParam param = new OrderApiCreateParam();
BeanUtils.copyProperties(ordersDO, param);
diff --git a/yudao-module-haoka/yudao-module-haoka-biz/src/main/java/cn/iocoder/yudao/module/haoka/utils/ConvertUtil.java b/yudao-module-haoka/yudao-module-haoka-biz/src/main/java/cn/iocoder/yudao/module/haoka/utils/ConvertUtil.java
new file mode 100644
index 0000000000..380298be9d
--- /dev/null
+++ b/yudao-module-haoka/yudao-module-haoka-biz/src/main/java/cn/iocoder/yudao/module/haoka/utils/ConvertUtil.java
@@ -0,0 +1,34 @@
+package cn.iocoder.yudao.module.haoka.utils;
+
+import java.math.BigDecimal;
+import java.time.Instant;
+import java.time.LocalDateTime;
+import java.time.ZoneId;
+
+/**
+ * 时间戳转时间工具类
+ * @author xiongxiong
+ */
+public class ConvertUtil {
+
+ public static LocalDateTime timestampToLocalDateTime(Long timestampInSeconds) {
+ // 转换为 LocalDateTime(指定时区)
+ return timestampToLocalDateTimeByZoneId(timestampInSeconds, ZoneId.of("Asia/Shanghai"));
+ }
+
+ public static LocalDateTime timestampToLocalDateTimeByZoneId(Long timestampInSeconds, ZoneId zoneId) {
+ // 将时间戳从秒转换为毫秒
+ Long timestampInMilliseconds = timestampInSeconds * 1000;
+
+ // 将时间戳转换为 Instant
+ Instant instant = Instant.ofEpochMilli(timestampInMilliseconds);
+
+ // 转换为 LocalDateTime(指定时区)
+ return instant.atZone(zoneId).toLocalDateTime();
+ }
+
+ public static BigDecimal convertFenToYuan(long amountInFen) {
+ // 使用 BigDecimal 确保精度
+ return new BigDecimal(amountInFen).divide(new BigDecimal(100));
+ }
+}
diff --git a/yudao-module-haoka/yudao-module-haoka-biz/src/test/java/cn/iocoder/yudao/module/haoka/service/orderCatch/DouDianOrderCatchServiceImplTest.java b/yudao-module-haoka/yudao-module-haoka-biz/src/test/java/cn/iocoder/yudao/module/haoka/service/orderCatch/DouDianOrderCatchServiceImplTest.java
index 62afc95aa5..edda24a816 100644
--- a/yudao-module-haoka/yudao-module-haoka-biz/src/test/java/cn/iocoder/yudao/module/haoka/service/orderCatch/DouDianOrderCatchServiceImplTest.java
+++ b/yudao-module-haoka/yudao-module-haoka-biz/src/test/java/cn/iocoder/yudao/module/haoka/service/orderCatch/DouDianOrderCatchServiceImplTest.java
@@ -5,6 +5,7 @@ import cn.iocoder.yudao.module.haoka.controller.admin.orderCatch.po.Message;
import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.JSONArray;
import com.alibaba.fastjson.JSONObject;
+import com.doudian.open.api.order_logisticsCompanyList.data.DataItem;
import com.doudian.open.api.order_orderDetail.data.OrderOrderDetailData;
import com.doudian.open.gson.Gson;
import com.doudian.open.msg.refund_RefundCreated.param.RefundRefundCreatedParam;
@@ -51,5 +52,15 @@ String orderString = "[{\"tag\":\"xxx\",\"msgId\":\"0443477XXXXXXX48874::xxx:161
}
}
+ @Test
+ public void logisticsCompanyList() {
+ // 创建 DouDianOrderCatchServiceImpl 对象
+ DouDianOrderCatchServiceImpl service = new DouDianOrderCatchServiceImpl();
+
+ List dataItems = orderCatchService.logisticsCompanyList();
+ System.out.println(dataItems);
+
+ }
+
}
diff --git a/yudao-module-haoka/yudao-module-haoka-biz/src/test/java/cn/iocoder/yudao/module/haoka/service/orders/OrdersServiceImplTest.java b/yudao-module-haoka/yudao-module-haoka-biz/src/test/java/cn/iocoder/yudao/module/haoka/service/orders/OrdersServiceImplTest.java
index b1534c361b..a6038181f4 100644
--- a/yudao-module-haoka/yudao-module-haoka-biz/src/test/java/cn/iocoder/yudao/module/haoka/service/orders/OrdersServiceImplTest.java
+++ b/yudao-module-haoka/yudao-module-haoka-biz/src/test/java/cn/iocoder/yudao/module/haoka/service/orders/OrdersServiceImplTest.java
@@ -194,7 +194,6 @@ public class OrdersServiceImplTest extends BaseDbUnitTest {
reqVO.setStatusUpdatedAt(buildBetweenTime(2023, 2, 1, 2023, 2, 28));
reqVO.setRefundStatus(null);
reqVO.setActiveStatus(null);
- reqVO.setIccid(null);
reqVO.setRealSourceId(null);
reqVO.setAddressMobile(null);
reqVO.setTrackingNumber(null);
diff --git a/yudao-server/src/main/resources/application-local.yaml b/yudao-server/src/main/resources/application-local.yaml
index 2659fa72a5..eb99d8dc42 100644
--- a/yudao-server/src/main/resources/application-local.yaml
+++ b/yudao-server/src/main/resources/application-local.yaml
@@ -115,10 +115,24 @@ rocketmq:
spring:
# RabbitMQ 配置项,对应 RabbitProperties 配置类
rabbitmq:
- host: 127.0.0.1 # RabbitMQ 服务的地址
+ host: forz.fun # RabbitMQ 服务的地址
port: 5672 # RabbitMQ 服务的端口
- username: rabbit # RabbitMQ 服务的账号
- password: rabbit # RabbitMQ 服务的密码
+ username: admin # RabbitMQ 服务的账号
+ password: K18LepU5YBpSl8 # RabbitMQ 服务的密码
+ publisher-confirm-type: correlated # 开启生产者确认
+ publisher-returns: true # 开启返回消息
+ template:
+ retry:
+ enabled: true # 开启发送失败重试
+ initial-interval: 1000ms # 重试间隔
+ max-attempts: 3 # 最大重试次数
+ listener:
+ simple:
+ acknowledge-mode: manual # 手动确认
+ retry:
+ enabled: true # 开启消费失败重试
+ initial-interval: 1000ms # 重试间隔
+ max-attempts: 3 # 最大重试次数
# Kafka 配置项,对应 KafkaProperties 配置类
kafka:
bootstrap-servers: 127.0.0.1:9092 # 指定 Kafka Broker 地址,可以设置多个,以逗号分隔
diff --git a/yudao-server/src/main/resources/application-prod.yaml b/yudao-server/src/main/resources/application-prod.yaml
index 2bedbed032..66f2d1036c 100644
--- a/yudao-server/src/main/resources/application-prod.yaml
+++ b/yudao-server/src/main/resources/application-prod.yaml
@@ -117,8 +117,22 @@ spring:
rabbitmq:
host: 172.18.0.1 # RabbitMQ 服务的地址
port: 5672 # RabbitMQ 服务的端口
- username: rabbit # RabbitMQ 服务的账号
- password: rabbit # RabbitMQ 服务的密码
+ username: admin # RabbitMQ 服务的账号
+ password: K18LepU5YBpSl8 # RabbitMQ 服务的密码
+ publisher-confirm-type: correlated # 开启生产者确认
+ publisher-returns: true # 开启返回消息
+ template:
+ retry:
+ enabled: true # 开启发送失败重试
+ initial-interval: 1000ms # 重试间隔
+ max-attempts: 3 # 最大重试次数
+ listener:
+ simple:
+ acknowledge-mode: manual # 手动确认
+ retry:
+ enabled: true # 开启消费失败重试
+ initial-interval: 1000ms # 重试间隔
+ max-attempts: 3 # 最大重试次数
# Kafka 配置项,对应 KafkaProperties 配置类
kafka:
bootstrap-servers: 172.18.0.1:9092 # 指定 Kafka Broker 地址,可以设置多个,以逗号分隔
diff --git a/yudao-server/src/main/resources/application-test.yaml b/yudao-server/src/main/resources/application-test.yaml
index 5a09ccd0a5..c6e8d8bdf7 100644
--- a/yudao-server/src/main/resources/application-test.yaml
+++ b/yudao-server/src/main/resources/application-test.yaml
@@ -115,10 +115,24 @@ rocketmq:
spring:
# RabbitMQ 配置项,对应 RabbitProperties 配置类
rabbitmq:
- host: 127.0.0.1 # RabbitMQ 服务的地址
+ host: forz.fun # RabbitMQ 服务的地址
port: 5672 # RabbitMQ 服务的端口
- username: rabbit # RabbitMQ 服务的账号
- password: rabbit # RabbitMQ 服务的密码
+ username: admin # RabbitMQ 服务的账号
+ password: K18LepU5YBpSl8 # RabbitMQ 服务的密码
+ publisher-confirm-type: correlated # 开启生产者确认
+ publisher-returns: true # 开启返回消息
+ template:
+ retry:
+ enabled: true # 开启发送失败重试
+ initial-interval: 1000ms # 重试间隔
+ max-attempts: 3 # 最大重试次数
+ listener:
+ simple:
+ acknowledge-mode: manual # 手动确认
+ retry:
+ enabled: true # 开启消费失败重试
+ initial-interval: 1000ms # 重试间隔
+ max-attempts: 3 # 最大重试次数
# Kafka 配置项,对应 KafkaProperties 配置类
kafka:
bootstrap-servers: 127.0.0.1:9092 # 指定 Kafka Broker 地址,可以设置多个,以逗号分隔
diff --git a/yudao-server/src/main/resources/db/migration/V5.0.18__order_clock_log.sql b/yudao-server/src/main/resources/db/migration/V5.0.18__order_clock_log.sql
new file mode 100644
index 0000000000..86a149e508
--- /dev/null
+++ b/yudao-server/src/main/resources/db/migration/V5.0.18__order_clock_log.sql
@@ -0,0 +1,22 @@
+CREATE TABLE `haoka_clock_record` (
+ `id` bigint(20) NOT NULL COMMENT 'ID',
+ `clock_type` int(11) DEFAULT NULL COMMENT '打卡类型',
+ `clock_user_id` varchar(100) NOT NULL COMMENT '用户ID',
+ `clock_shop_id` varchar(11) DEFAULT NULL COMMENT '店铺ID',
+ `clock_room_id` varchar(100) NOT NULL COMMENT '直播间ID',
+ `clock_time` datetime NOT NULL COMMENT '打卡时间',
+ `clock_shop_name` varchar(255) DEFAULT NULL COMMENT '店铺名称',
+ `clock_user_name` varchar(255) DEFAULT NULL COMMENT '姓名',
+ `dept_id` bigint(20) DEFAULT NULL COMMENT '部门ID',
+ `creator` varchar(64) NOT NULL DEFAULT '' COMMENT '创建者',
+ `create_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
+ `updater` varchar(64) NOT NULL DEFAULT '' COMMENT '更新者',
+ `update_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间',
+ `deleted` bit(1) NOT NULL DEFAULT b'0' COMMENT '是否删除',
+ `tenant_id` bigint(20) NOT NULL DEFAULT '0' COMMENT '租户编号',
+ PRIMARY KEY (`id`)
+) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 ROW_FORMAT=DYNAMIC COMMENT='打卡记录表';
+-- 订单新增参数
+ALTER TABLE `haoka_orders`
+ ADD COLUMN `order_amount` decimal(10, 2) NULL COMMENT '订单金额' AFTER `sales_attribution_name`,
+ ADD COLUMN `pay_amount` decimal(10, 2) NULL COMMENT '支付金额' AFTER `order_amount`;
\ No newline at end of file