This commit is contained in:
Owen 2025-01-07 22:10:17 +08:00
parent 6268aa1d86
commit 0c285e742b
8 changed files with 233 additions and 65 deletions

View File

@ -13,32 +13,34 @@ import java.util.Map;
@Service
public class ApiGuangZhouDXService extends ApiConfigService {
public static final String Key_urlPrefix = "urlPrefix";
public static final String Key_publicKey = "publicKey";
public static final String Path_createOrder = "";
public static final String Key_createOrderUrl = "createOrderUrl";
public static final String Key_queryOrderUrl = "queryOrderUrl";
public String createOrder( final SuperiorApiLogSaveReqVO logVO , Long haokaSuperiorApiId ,GdOrderCreateRequestParam param) throws Exception {
public String createOrder(final SuperiorApiLogSaveReqVO logVO, Long haokaSuperiorApiId, GdOrderCreateRequestParam param) throws Exception {
logVO.setHaokaSuperiorApiId(haokaSuperiorApiId);
Map<String, String> devConfig = getDevConfig(haokaSuperiorApiId);
String urlPrefix = devConfig.get(Key_urlPrefix);
String publicKey = devConfig.get(Key_publicKey);
String url = urlPrefix + Path_createOrder;
String url = devConfig.get(Key_createOrderUrl);
param.setUserIDNumber(devConfig.get("userIDNumber"));
param.setUserName(devConfig.get("userName"));
param.setAgentAccount(devConfig.get("agentAccount"));
HttpResponse<String> order = GdDxApi.createOrder(logVO, url, publicKey, param);
return order.getBody();
}
public String queryOrder(final SuperiorApiLogSaveReqVO logVO, Long haokaSuperiorApiId , GdOrderQueryRequestParam param) throws Exception {
public String queryOrder(final SuperiorApiLogSaveReqVO logVO, Long haokaSuperiorApiId, GdOrderQueryRequestParam param) throws Exception {
logVO.setHaokaSuperiorApiId(haokaSuperiorApiId);
Map<String, String> devConfig = getDevConfig(haokaSuperiorApiId);
String urlPrefix = devConfig.get(Key_urlPrefix);
String publicKey = devConfig.get(Key_publicKey);
HttpResponse<String> order = GdDxApi.queryOrder(logVO, urlPrefix + Path_createOrder, publicKey, param);
String url = devConfig.get(Key_queryOrderUrl);
param.setUserIDNumber(devConfig.get("userIDNumber"));
param.setUserName(devConfig.get("userName"));
param.setAgentAccount(devConfig.get("agentAccount"));
HttpResponse<String> order = GdDxApi.queryOrder(logVO, url, publicKey, param);
return order.getBody();
}
}

View File

@ -1,17 +1,25 @@
package cn.iocoder.yudao.module.haoka.schedule;
import cn.hutool.core.util.ObjectUtil;
import cn.iocoder.yudao.framework.common.pojo.PageResult;
import cn.iocoder.yudao.framework.mybatis.core.query.LambdaQueryWrapperX;
import cn.iocoder.yudao.framework.tenant.core.context.TenantContextHolder;
import cn.iocoder.yudao.framework.tenant.core.service.TenantFrameworkService;
import cn.iocoder.yudao.module.haoka.api.ApiFrom;
import cn.iocoder.yudao.module.haoka.api.ApiLianTongService;
import cn.iocoder.yudao.module.haoka.api.liantong.model.response.KingMessageGetResponse;
import cn.iocoder.yudao.module.haoka.controller.admin.orders.vo.OrdersPageReqVO;
import cn.iocoder.yudao.module.haoka.controller.admin.superiorapilog.vo.SuperiorApiLogSaveReqVO;
import cn.iocoder.yudao.module.haoka.dal.dataobject.orders.OrdersDO;
import cn.iocoder.yudao.module.haoka.dal.dataobject.superiorapi.SuperiorApiDO;
import cn.iocoder.yudao.module.haoka.service.api.ApiDealStrategyService;
import cn.iocoder.yudao.module.haoka.service.api.models.ApiDealResp;
import cn.iocoder.yudao.module.haoka.service.api.models.OrderApiQueryResp;
import cn.iocoder.yudao.module.haoka.service.orders.OrdersService;
import cn.iocoder.yudao.module.haoka.service.superiorapi.SuperiorApiService;
import cn.iocoder.yudao.module.haoka.service.superiorapilog.SuperiorApiLogService;
import cn.iocoder.yudao.module.haoka.utils.SnowflakeId;
import com.alibaba.fastjson.JSON;
import jakarta.annotation.Resource;
import lombok.extern.slf4j.Slf4j;
@ -20,6 +28,8 @@ import org.springframework.beans.factory.annotation.Qualifier;
import org.springframework.scheduling.annotation.Scheduled;
import org.springframework.stereotype.Component;
import java.util.List;
@Slf4j
@Component
public class HaokaLianTongUpdateOrderSchedule {
@ -34,47 +44,20 @@ public class HaokaLianTongUpdateOrderSchedule {
@Resource
private TenantFrameworkService tenantFrameworkService;
@Resource
private ApiLianTongService apiLianTongService;
@Scheduled(cron = "0 */10 * * * ?")
@Scheduled(cron = "0 */25 * * * ?")
public void updateOrder() {
String type = new String();
log.info("开始-----------更新订单开始--------------------");
log.info("开始-----------联通--更新订单开始--------------------");
tenantFrameworkService.getTenantIds().forEach((tenantId) -> {
log.info("开始-----------更新订单开始---------tenantId-----------{}",tenantId);
OrdersPageReqVO pageReqVO = new OrdersPageReqVO();
TenantContextHolder.setTenantId(tenantId);
int pageNo = 0;
int pageSize = 100;
Long total = 100L;
while ((long) pageNo * pageSize < total) {
pageNo += 1;
pageReqVO.setPageNo(pageNo);
pageReqVO.setPageSize(pageSize);
// 需要更新的订单过滤 todo
// pageReqVO.setStatus(Lists.asList(1));
PageResult<OrdersDO> ordersPage = ordersService.getOrdersPage(pageReqVO);
total = ordersPage.getTotal();
for (OrdersDO ordersDO : ordersPage.getList()) {
updateOrderInfo(ordersDO);
}
}
});
log.info("结束-----------更新订单结束--------------------");
log.info("结束-----------联通--更新订单结束--------------------");
}
private void updateOrderInfo(final OrdersDO ordersDO) {
log.info("更新前--{}", JSON.toJSONString(ordersDO));
ApiDealResp<OrderApiQueryResp> updateOrderInfo = apiDealStrategyService.getUpdateOrderInfo(ordersDO);
// todo 上游更新
ordersService.updateById(ordersDO);
log.info("更新后--{}", JSON.toJSONString(ordersDO));
}
}

View File

@ -1,17 +1,25 @@
package cn.iocoder.yudao.module.haoka.schedule;
import cn.hutool.core.util.ObjectUtil;
import cn.iocoder.yudao.framework.common.pojo.PageResult;
import cn.iocoder.yudao.framework.mybatis.core.query.LambdaQueryWrapperX;
import cn.iocoder.yudao.framework.tenant.core.context.TenantContextHolder;
import cn.iocoder.yudao.framework.tenant.core.db.TenantBaseDO;
import cn.iocoder.yudao.framework.tenant.core.service.TenantFrameworkService;
import cn.iocoder.yudao.module.haoka.api.ApiFrom;
import cn.iocoder.yudao.module.haoka.api.ApiLianTongService;
import cn.iocoder.yudao.module.haoka.api.liantong.model.response.KingMessageGetResponse;
import cn.iocoder.yudao.module.haoka.controller.admin.orders.vo.OrdersPageReqVO;
import cn.iocoder.yudao.module.haoka.controller.admin.superiorapilog.vo.SuperiorApiLogSaveReqVO;
import cn.iocoder.yudao.module.haoka.dal.dataobject.orders.OrdersDO;
import cn.iocoder.yudao.module.haoka.dal.dataobject.superiorapi.SuperiorApiDO;
import cn.iocoder.yudao.module.haoka.service.api.ApiDealStrategyService;
import cn.iocoder.yudao.module.haoka.service.api.models.ApiDealResp;
import cn.iocoder.yudao.module.haoka.service.api.models.OrderApiQueryResp;
import cn.iocoder.yudao.module.haoka.service.orders.OrdersService;
import cn.iocoder.yudao.module.haoka.service.superiorapi.SuperiorApiService;
import cn.iocoder.yudao.module.haoka.service.superiorapilog.SuperiorApiLogService;
import com.alibaba.fastjson.JSON;
import com.google.common.collect.Lists;
import jakarta.annotation.Resource;
@ -21,6 +29,8 @@ import org.springframework.beans.factory.annotation.Qualifier;
import org.springframework.scheduling.annotation.Scheduled;
import org.springframework.stereotype.Component;
import java.util.List;
@Slf4j
@Component
public class HaokaUpdateOrderSchedule {
@ -35,32 +45,60 @@ public class HaokaUpdateOrderSchedule {
@Resource
private TenantFrameworkService tenantFrameworkService;
@Scheduled(cron = "0 */10 * * * ?")
@Resource
private SuperiorApiService superiorApiService;
@Resource
protected SuperiorApiLogService superiorApiLogService;
@Resource
private ApiLianTongService apiLianTongService;
@Scheduled(cron = "0 */22 * * * ?")
public void updateOrder() {
log.info("开始-----------更新订单开始--------------------");
tenantFrameworkService.getTenantIds().forEach((tenantId) -> {
log.info("开始-----------更新订单开始---------tenantId-----------{}",tenantId);
OrdersPageReqVO pageReqVO = new OrdersPageReqVO();
log.info("开始-----------更新订单开始---------tenantId-----------{}", tenantId);
TenantContextHolder.setTenantId(tenantId);
int pageNo = 0;
int pageSize = 100;
Long total = 100L;
while ((long) pageNo * pageSize < total) {
pageNo += 1;
pageReqVO.setPageNo(pageNo);
pageReqVO.setPageSize(pageSize);
// 通用查询跟新订单
try {
OrdersPageReqVO pageReqVO = new OrdersPageReqVO();
int pageNo = 0;
int pageSize = 100;
Long total = 100L;
// 需要更新的订单过滤 todo
// pageReqVO.setStatus(Lists.asList(1));
while ((long) pageNo * pageSize < total) {
pageNo += 1;
pageReqVO.setPageNo(pageNo);
pageReqVO.setPageSize(pageSize);
PageResult<OrdersDO> ordersPage = ordersService.getOrdersPage(pageReqVO);
total = ordersPage.getTotal();
for (OrdersDO ordersDO : ordersPage.getList()) {
updateOrderInfo(ordersDO);
// 需要更新的订单过滤 todo
// pageReqVO.setStatus(Lists.asList(1));
PageResult<OrdersDO> ordersPage = ordersService.getOrdersPage(pageReqVO);
total = ordersPage.getTotal();
for (OrdersDO ordersDO : ordersPage.getList()) {
updateOrderInfo(ordersDO);
}
}
} catch (Exception e) {
log.error(e.getMessage());
}
// 联通查询消息队列跟新订单
try {
updateLianTongOrderInfo();
} catch (Exception e) {
log.error(e.getMessage());
}
});
log.info("结束-----------更新订单结束--------------------");
}
@ -73,4 +111,124 @@ public class HaokaUpdateOrderSchedule {
ordersService.updateById(ordersDO);
log.info("更新后--{}", JSON.toJSONString(ordersDO));
}
/**
* 更新联通订单
*/
private void updateLianTongOrderInfo() {
List<SuperiorApiDO> list = superiorApiService.list();
if (list.isEmpty()) {
return;
}
for (SuperiorApiDO superiorApiDO : list) {
if (superiorApiDO.getApiFrom() != 1) {
break;
}
// if (superiorApiDO.getId() < 100) {
// break;
// }
final SuperiorApiLogSaveReqVO logVoSys = new SuperiorApiLogSaveReqVO();
logVoSys.setHaokaOrderId(0L);
logVoSys.setHaokaSuperiorApiId(superiorApiDO.getId());
logVoSys.setApiType(2);
try {
// 消息类型3-下单消息4-订单状态变更消息
getAndDealSuperiorMsg(superiorApiDO, "3");
getAndDealSuperiorMsg(superiorApiDO, "4");
} catch (Exception e) {
logVoSys.setSuccess(false);
logVoSys.setInnerNote(e.getMessage());
logVoSys.setErrorInfo(e.getMessage());
} finally {
superiorApiLogService.createSuperiorApiLog(logVoSys);
}
}
}
private void getAndDealSuperiorMsg(SuperiorApiDO superiorApiDO, String msgType) {
final SuperiorApiLogSaveReqVO logForOrderSys = new SuperiorApiLogSaveReqVO();
logForOrderSys.setHaokaSuperiorApiId(superiorApiDO.getId());
logForOrderSys.setApiType(2);
logForOrderSys.setParam(msgType);
logForOrderSys.setHaokaOrderId(2L);
try {
KingMessageGetResponse msgResponse = apiLianTongService.lianTongMessageGet(superiorApiDO.getId(), msgType);
logForOrderSys.setResponse(JSON.toJSONString(msgResponse));
List<KingMessageGetResponse.KingMessageGetBody> msgList = msgResponse.getBody();
if (ObjectUtil.isEmpty(msgList)) {
logForOrderSys.setSuccess(false);
logForOrderSys.setInnerNote(JSON.toJSONString(msgResponse.getRspDesc()));
return;
}
for (KingMessageGetResponse.KingMessageGetBody msg : msgList) {
final SuperiorApiLogSaveReqVO logForOrder = new SuperiorApiLogSaveReqVO();
logForOrder.setHaokaSuperiorApiId(superiorApiDO.getId());
logForOrder.setApiType(2);
logForOrder.setParam(msgType);
logForOrder.setResponse(JSON.toJSONString(msg));
try {
String orderId = msg.getOrder();
OrdersDO ordersDO = ordersService.getOne(new LambdaQueryWrapperX<OrdersDO>().eq(OrdersDO::getUpstreamOrderId, orderId));
if (ordersDO == null) {
logForOrder.setSuccess(false);
logForOrder.setErrorInfo("OrdersDO 本地不存在该订单");
log.debug("OrdersDO 本地不存在该订单");
break;
}
/**
* 订单变更类型1激活,2退单(激活前),3:转套餐(要根据产品id判断是否为享有特权的套餐),4销户(激活后),6:首充数据同步,
* C1开户完成,E0发货,SX:未支付超期,AX:未支付用户取消SX和AX状态目前仅支持3.27接口同步订单
*/
// 物流单号 发货时必传
String trackingNumber = msg.getTrackingNumber();
// 上游状态 要转换为本地状态
String state = msg.getState();
// todo XX ordersService.updateById(ordersDO);
// ordersDO.setStatus()
ordersService.updateById(ordersDO);
// 日志
logForOrder.setSuccess(true);
logForOrder.setHaokaOrderId(ordersDO.getId());
// 删除上游消息
apiLianTongService.lianTongMessageDel(superiorApiDO.getId(), msgType, msg.getId());
} catch (Exception e) {
logForOrder.setSuccess(false);
logForOrder.setInnerNote(e.getMessage());
logForOrder.setErrorInfo(e.getMessage());
} finally {
superiorApiLogService.createSuperiorApiLog(logForOrder);
}
}
} catch (Exception e) {
logForOrderSys.setSuccess(false);
logForOrderSys.setInnerNote(e.getMessage());
logForOrderSys.setErrorInfo(e.getMessage());
} finally {
superiorApiLogService.createSuperiorApiLog(logForOrderSys);
}
}
}

View File

@ -80,6 +80,7 @@ public class ApiDealServiceImpl implements ApiDealStrategyService {
logVO.setApiType(2);
logVO.setHaokaOrderId(param.getId());
logVO.setHaokaProductId(param.getProductId());
Boolean isSupport = true;
try {
OnSaleProductPreOrderRespVO onSaleProductPreOrder = onSaleProductService.getOnSaleProductPreOrder(param.getProductId());
if (onSaleProductPreOrder == null) {
@ -104,7 +105,8 @@ public class ApiDealServiceImpl implements ApiDealStrategyService {
return ApiDealResp.failed(noneService);
}
ApiDealResp<OrderApiQueryResp> respApiDealResp = apiDealStrategy.queryOrder(param);
if (!respApiDealResp.getIsSupport()) {
isSupport = respApiDealResp.getIsSupport();
if (!isSupport) {
logVO.setSuccess(false);
logVO.setInnerNote(respApiDealResp.getMsg());
}
@ -112,13 +114,16 @@ public class ApiDealServiceImpl implements ApiDealStrategyService {
logVO.setSuccess(false);
logVO.setInnerNote(respApiDealResp.getMsg());
}
return respApiDealResp;
} catch (Exception e) {
logVO.setSuccess(false);
logVO.setErrorInfo(e.getMessage());
return ApiDealResp.failed(e.getMessage());
} finally {
superiorApiLogService.createSuperiorApiLog(logVO);
if (isSupport) {
superiorApiLogService.createSuperiorApiLog(logVO);
}
}
}
@ -136,7 +141,7 @@ public class ApiDealServiceImpl implements ApiDealStrategyService {
param.setProductId(ordersDO.getProductId());
param.setPlanMobileProduced(ordersDO.getPlanMobileProduced());
return this.queryOrder(new SuperiorApiLogSaveReqVO(),param);
return this.queryOrder(new SuperiorApiLogSaveReqVO(), param);
// // 上游接口不支持根据订单ID查询
// if (!resp.getIsSupport()) {
@ -181,6 +186,6 @@ public class ApiDealServiceImpl implements ApiDealStrategyService {
@Override
public ApiDealStrategy getApiDealStrategy(Long apiFrom) {
return strategyMap.get(ApiFrom.fromId(apiFrom));
return strategyMap.get(ApiFrom.fromId(apiFrom).getApiDealStrategy());
}
}

View File

@ -90,6 +90,9 @@ public class GuangZhouDxApiDealStrategy implements ApiDealStrategy {
}
String supplierOrderId = apiGuangZhouDXService.createOrder(logVO, haokaSuperiorApiId,createParam);
if (StringUtils.isEmpty(supplierOrderId)){
return ApiDealResp.failed("广州电信同步订单接口:没有返回订单信息");
}
OrderApiCreateResp orderApiCreateResp = new OrderApiCreateResp();
orderApiCreateResp.setSupplierOrderId(supplierOrderId);
@ -107,6 +110,8 @@ public class GuangZhouDxApiDealStrategy implements ApiDealStrategy {
Long haokaSuperiorApiId = preProduct.getSuperiorApiRespVO().getId();
logVO.setHaokaSuperiorApiId(haokaSuperiorApiId);
GdOrderQueryRequestParam queryParam = new GdOrderQueryRequestParam();
queryParam.setOrderCode(param.getSupplierOrderId());
String responseInfo = apiGuangZhouDXService.queryOrder(logVO,haokaSuperiorApiId, queryParam);
if (responseInfo == null) {

View File

@ -152,7 +152,7 @@ public class HaiNanDxApiDealStrategy implements ApiDealStrategy {
OrderApiQueryResp orderApiQueryResp = new OrderApiQueryResp();
// todo
// todo 转换本地订单状态
// orderApiQueryResp.setOrderStatusCode();
String statusCd = jsonObject.getString("statusCd");
String statusName = jsonObject.getString("statusName");

View File

@ -229,6 +229,7 @@ public class HuNanDxApiDealStrategy implements ApiDealStrategy {
OrderApiQueryResp orderApiQueryResp = new OrderApiQueryResp();
orderApiQueryResp.setData(responseInfo);
orderApiQueryResp.setOrderStatusCode(string);
orderApiQueryResp.setSupplierOrderStatusDesc(string+"----说明:0待确认1生产2作废3同步失败4待下单5待转业务单8业务单挂起状态");
return ApiDealResp.ok(orderApiQueryResp);
} catch (Exception e) {

View File

@ -194,9 +194,23 @@ public class LianTongApiDealStrategy implements ApiDealStrategy {
if (!"0000".equals(response.getRspCode())) {
return ApiDealResp.failed(response.getRspDesc());
}
// /**
// * 返回体JSON字符串包含字段
// * 订单号orderNo
// * 上传三照短链shortUrl
// * 商城订单编码mallOrderId部分流程返回
// * 预占号码preNumber
// * {\"mallOrderId\":\"363067187203\",\"orderNo\":\"1962041937730469\",\"preNumber\":\"13104876751\",\"shortUrl\":\"https://uc.gtimg.cn/AjIxeJEl\"}
// */
// private String body;
OrderApiCreateResp orderApiCreateResp = new OrderApiCreateResp();
orderApiCreateResp.setOrderCreateResponse(JSON.toJSONString(response));
String body1 = response.getBody();
orderApiCreateResp.setOrderCreateResponse(JSON.toJSONString(body1));
JSONObject jsonObject = JSON.parseObject(body1);
orderApiCreateResp.setSupplierOrderId(jsonObject.getString("orderNo"));
return ApiDealResp.ok(orderApiCreateResp);
}