diff --git a/blade-service-api/logpm-factory-api/src/main/java/com/logpm/factory/mt/entity/MtOrderLogEntity.java b/blade-service-api/logpm-factory-api/src/main/java/com/logpm/factory/mt/entity/MtOrderLogEntity.java index 3f7d77db1..12a53fd02 100644 --- a/blade-service-api/logpm-factory-api/src/main/java/com/logpm/factory/mt/entity/MtOrderLogEntity.java +++ b/blade-service-api/logpm-factory-api/src/main/java/com/logpm/factory/mt/entity/MtOrderLogEntity.java @@ -56,5 +56,5 @@ public class MtOrderLogEntity extends BaseEntity { private String refCode; @ApiModelProperty(value = "推送状态:1=失败,2=成功,3=失败且不在推送") - private Integer push_status; + private Integer pushStatus; } diff --git a/blade-service/logpm-factory/src/main/java/com/logpm/factory/jobhandler/MtOrderLogFailRetryJob.java b/blade-service/logpm-factory/src/main/java/com/logpm/factory/jobhandler/MtOrderLogFailRetryJob.java index 5d1465112..050b1c49f 100644 --- a/blade-service/logpm-factory/src/main/java/com/logpm/factory/jobhandler/MtOrderLogFailRetryJob.java +++ b/blade-service/logpm-factory/src/main/java/com/logpm/factory/jobhandler/MtOrderLogFailRetryJob.java @@ -33,7 +33,7 @@ public class MtOrderLogFailRetryJob { public ReturnT execute(String param) { try { - batchHandleData(null, loopHandleQuantity); + batchHandleData(loopHandleQuantity, null); }catch (Exception exception){ log.error("OpFailPackageRetryJob error:{}",exception.getMessage()); } @@ -46,13 +46,13 @@ public class MtOrderLogFailRetryJob { * @param startId * @param quantity */ - private void batchHandleData(Long startId, Integer quantity) { + private void batchHandleData(Integer quantity, Long startId) { List batchData = mtOrderLogFailRetryMapper.selectWaitData(quantity, startId); mtOrderLogFailRetryService.retry(batchData); if (batchData.size() == quantity) { - batchHandleData(batchData.get(quantity - 1).getId(), quantity); + batchHandleData(quantity, batchData.get(quantity - 1).getId()); } } } diff --git a/blade-service/logpm-factory/src/main/java/com/logpm/factory/mt/service/IMtFactoryDataService.java b/blade-service/logpm-factory/src/main/java/com/logpm/factory/mt/service/IMtFactoryDataService.java index cf3a5faa9..456f9b086 100644 --- a/blade-service/logpm-factory/src/main/java/com/logpm/factory/mt/service/IMtFactoryDataService.java +++ b/blade-service/logpm-factory/src/main/java/com/logpm/factory/mt/service/IMtFactoryDataService.java @@ -56,4 +56,7 @@ public interface IMtFactoryDataService { * @return */ R sendUnloadCarNum(String unloadCarNum, String data) throws ParseException, JsonProcessingException, NoSuchAlgorithmException; + + + String retryPushMtFactoryData(String url, String data) throws NoSuchAlgorithmException; } diff --git a/blade-service/logpm-factory/src/main/java/com/logpm/factory/mt/service/impl/MtFactoryDataServiceImpl.java b/blade-service/logpm-factory/src/main/java/com/logpm/factory/mt/service/impl/MtFactoryDataServiceImpl.java index 3e49f1898..1140502eb 100644 --- a/blade-service/logpm-factory/src/main/java/com/logpm/factory/mt/service/impl/MtFactoryDataServiceImpl.java +++ b/blade-service/logpm-factory/src/main/java/com/logpm/factory/mt/service/impl/MtFactoryDataServiceImpl.java @@ -677,6 +677,17 @@ public class MtFactoryDataServiceImpl implements IMtFactoryDataService { } + /** + * 重新推送梦天失败的数据 + * @param url + * @param data + * @return + * @throws NoSuchAlgorithmException + */ + public String retryPushMtFactoryData(String url, String data) throws NoSuchAlgorithmException { + return sendMtFactoryDataRequest(url, data); + } + /** * 封装梦天数据对接接口 @@ -690,17 +701,7 @@ public class MtFactoryDataServiceImpl implements IMtFactoryDataService { logger.info("##############sendMtFactoryData 发送数据: {}", data); - //先获取token - String token = getMtToken(); - //处理逻辑 - String result = HttpRequest.post(url) - .header("APPKEY", mtFactoryProperties.getAppkey()) - .header("Authorization", token) - .header("USERID", mtFactoryProperties.getUserid()) - .header("USERPWD", MD5Utils.md5Hex(mtFactoryProperties.getUserpwd().getBytes(StandardCharsets.UTF_8))) - .header("Content-Type", "application/json") - .body(data).timeout(30 * 1000) - .execute().body(); + String result = sendMtFactoryDataRequest(url, data); logger.info("##############sendMtFactoryData 接受数据: {}", result); // 保存数据到数据库 @@ -730,4 +731,26 @@ public class MtFactoryDataServiceImpl implements IMtFactoryDataService { } + /** + * 发送梦天数据对接请求 + * @param url + * @param data + * @return + * @throws NoSuchAlgorithmException + */ + private String sendMtFactoryDataRequest(String url, String data) throws NoSuchAlgorithmException { + //先获取token + String token = getMtToken(); + + //处理逻辑 + return HttpRequest.post(url) + .header("APPKEY", mtFactoryProperties.getAppkey()) + .header("Authorization", token) + .header("USERID", mtFactoryProperties.getUserid()) + .header("USERPWD", MD5Utils.md5Hex(mtFactoryProperties.getUserpwd().getBytes(StandardCharsets.UTF_8))) + .header("Content-Type", "application/json") + .body(data).timeout(30 * 1000) + .execute().body(); + } + } diff --git a/blade-service/logpm-factory/src/main/java/com/logpm/factory/mt/service/impl/MtOrderLogFailRetryServiceImpl.java b/blade-service/logpm-factory/src/main/java/com/logpm/factory/mt/service/impl/MtOrderLogFailRetryServiceImpl.java index c7aaa6bcc..66ed70f1e 100644 --- a/blade-service/logpm-factory/src/main/java/com/logpm/factory/mt/service/impl/MtOrderLogFailRetryServiceImpl.java +++ b/blade-service/logpm-factory/src/main/java/com/logpm/factory/mt/service/impl/MtOrderLogFailRetryServiceImpl.java @@ -1,19 +1,18 @@ package com.logpm.factory.mt.service.impl; -import com.alibaba.nacos.shaded.com.google.gson.Gson; -import com.logpm.factory.comfac.dto.OrderStatusDTO; +import com.alibaba.fastjson.JSONObject; import com.logpm.factory.mt.entity.MtOrderLogEntity; +import com.logpm.factory.mt.mapper.MtOrderLogFailRetryMapper; +import com.logpm.factory.mt.service.IMtFactoryDataService; +import com.logpm.factory.mt.service.IMtOrderLogService; import com.logpm.factory.mt.service.MtOrderLogFailRetryService; -import com.logpm.factory.oupai.entity.OpFailRetryPushPackageEntity; -import com.logpm.factory.oupai.mapper.OpFailRetryPushPackageMapper; -import com.logpm.factory.oupai.service.IOuPaiFactoryService; +import com.logpm.factory.props.MtFactoryProperties; import lombok.AllArgsConstructor; import lombok.extern.slf4j.Slf4j; import org.springframework.scheduling.annotation.Async; import org.springframework.stereotype.Service; import java.text.SimpleDateFormat; -import java.util.ArrayList; import java.util.Calendar; import java.util.Date; import java.util.List; @@ -22,72 +21,105 @@ import java.util.List; @Service @AllArgsConstructor public class MtOrderLogFailRetryServiceImpl implements MtOrderLogFailRetryService { - protected OpFailRetryPushPackageMapper opFailRetryPushPackageMapper; + protected final MtOrderLogFailRetryMapper mtOrderLogFailRetryMapper; - protected IOuPaiFactoryService ouPaiFactoryService; + protected final IMtFactoryDataService mtFactoryDataService; + protected final MtFactoryProperties mtFactoryProperties; + private final IMtOrderLogService mtOrderLogService; protected final int MAX_RETRY_TIMES = 7; - @Async - @Override - public void retry(List waitData){ - ArrayList completeIds = new ArrayList<>(); - ArrayList failIds = new ArrayList<>(); + /** + * 收获入库 + */ + protected final Integer SH_IN_OF_WAREHOUSE_TYPE = 1; - waitData.forEach(opFailRetryPushPackageEntity -> executeRetry(opFailRetryPushPackageEntity, completeIds, failIds)); + /** + * 入库 + */ + protected final Integer IN_OF_WAREHOUSE_TYPE = 2; - updatePushStatus(completeIds, failIds); - } + /** + * 卸车确认 + */ + protected final Integer UNLOAD_CAR_CONFIRM_TYPE = 4; /** - * 更新推送状态 - * @param completeIds - * @param failIds + * 文员确认 */ - protected void updatePushStatus(ArrayList completeIds, ArrayList failIds){ - if (!completeIds.isEmpty()) { - opFailRetryPushPackageMapper.updateStatusToCompleteByIds(completeIds); - } - if (!failIds.isEmpty()) { - opFailRetryPushPackageMapper.updateStatusToExpireByIds(failIds, getExpireTime()); - } + protected final Integer VOLUNTEER_CONFIRM_TYPE = 5; + + /** + * 签收 + */ + protected final Integer SIGN_TYPE = 6; + + + @Async + @Override + public void retry(List waitData){ + waitData.forEach(this::executeRetry); } /** - * 获取过期的时间 - * + * 判断是否过期 + * @param date * @return */ - protected String getExpireTime(){ + protected boolean isExpire(Date date){ Calendar calendar = Calendar.getInstance(); - Date date = new Date(); calendar.setTime(date); - calendar.add(Calendar.DATE, -MAX_RETRY_TIMES); - - SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); + calendar.add(Calendar.DATE, MAX_RETRY_TIMES); - return sdf.format(calendar.getTime()); + return calendar.getTimeInMillis() < System.currentTimeMillis(); } /** * 执行重试 * @param mtOrderLogEntity - * @param completeIds */ - protected void executeRetry(MtOrderLogEntity mtOrderLogEntity, ArrayList completeIds, ArrayList failIds) { + protected void executeRetry(MtOrderLogEntity mtOrderLogEntity) { try { - OrderStatusDTO orderStatusDTO = new Gson().fromJson(mtOrderLogEntity.getResBody(), OrderStatusDTO.class); + String requestUrl = getRequestUrl(mtOrderLogEntity); + + String result = mtFactoryDataService.retryPushMtFactoryData(requestUrl, mtOrderLogEntity.getReqArgs()); - boolean res = ouPaiFactoryService.retryHandleStatusData(orderStatusDTO); + mtOrderLogEntity.setResBody(result); - if (res) { - completeIds.add(mtOrderLogEntity.getId()); + Integer PUSH_STATUS_SUCCESS = 1; + Integer PUSH_STATUS_FAIL = 2; + Integer PUSH_STATUS_EXPIRE = 3; + JSONObject jsonObject = JSONObject.parseObject(result); + + if (jsonObject == null || jsonObject.isEmpty() || 0 != jsonObject.getInteger("code")) { + mtOrderLogEntity.setPushStatus( + isExpire(mtOrderLogEntity.getCreateTime()) ? PUSH_STATUS_EXPIRE : PUSH_STATUS_FAIL + ); } else { - failIds.add(mtOrderLogEntity.getId()); + mtOrderLogEntity.setPushStatus(PUSH_STATUS_SUCCESS); } + + // 由于要存储每次的响应结果,所以每次请求后都立即保存 + mtOrderLogService.save(mtOrderLogEntity); + } catch (Exception e) { - log.error("executeRetry error: {}", e.getMessage()); + log.error("梦天重推 error: {}", e.getMessage()); } } + + private String getRequestUrl(MtOrderLogEntity mtOrderLogEntity) { + String url = null; + if (IN_OF_WAREHOUSE_TYPE.equals(mtOrderLogEntity.getType()) || SH_IN_OF_WAREHOUSE_TYPE.equals(mtOrderLogEntity.getType()) ) { + url = mtFactoryProperties.getUrl() + "/ZXCFaHuoDan/ShouHuoRuKu"; + }else if (UNLOAD_CAR_CONFIRM_TYPE.equals(mtOrderLogEntity.getType())) { + url = mtFactoryProperties.getUrl() + "/ZXCFaHuoDan/QueRenShouHuo"; + }else if (VOLUNTEER_CONFIRM_TYPE.equals(mtOrderLogEntity.getType())){ + url = mtFactoryProperties.getUrl() + "/ZXCFaHuoDan/QianShouDanNew"; + }else if (SIGN_TYPE.equals(mtOrderLogEntity.getType())){ + url = mtFactoryProperties.getUrl() + "/ZXCFaHuoDan/QianShouScan"; + } + + return url; + } }