Browse Source

1.优化拉取诗尼曼数据定时任务逻辑

test
zhenghaoyu 2 years ago
parent
commit
5e23fddccd
  1. 41
      blade-biz-common/src/main/java/org/springblade/common/exception/CustomerException.java
  2. 24
      blade-biz-common/src/main/java/org/springblade/common/utils/CommonUtil.java
  3. 3
      blade-service/logpm-factory/src/main/java/com/logpm/factory/FactoryApplication.java
  4. 54
      blade-service/logpm-factory/src/main/java/com/logpm/factory/jobhandler/FactoryXxlJob.java
  5. 1
      blade-service/logpm-factory/src/main/java/com/logpm/factory/snm/mapper/OrderLogMapper.java
  6. 4
      blade-service/logpm-factory/src/main/java/com/logpm/factory/snm/mapper/OrderLogMapper.xml
  7. 2
      blade-service/logpm-factory/src/main/java/com/logpm/factory/snm/service/IOrderLogService.java
  8. 5
      blade-service/logpm-factory/src/main/java/com/logpm/factory/snm/service/IOrderService.java
  9. 5
      blade-service/logpm-factory/src/main/java/com/logpm/factory/snm/service/impl/OrderLogServiceImpl.java
  10. 17
      blade-service/logpm-factory/src/main/java/com/logpm/factory/snm/service/impl/OrderServiceImpl.java

41
blade-biz-common/src/main/java/org/springblade/common/exception/CustomerException.java

@ -0,0 +1,41 @@
package org.springblade.common.exception;
/**
*
*类说明 自定义异常
*
* @author zhy
* @date 2023年6月1日
*/
public class CustomerException extends RuntimeException {
/**
*
*/
private static final long serialVersionUID = 1L;
public Integer code;
public String message;
public CustomerException() {
};
public CustomerException(String message) {
this();
this.message = message;
}
public CustomerException(Integer code, String message) {
this();
this.message = message;
this.code = code;
}
@Override
public String toString() {
return "CustomerException{" +
"code=" + code +
", message='" + message + '\'' +
'}';
}
}

24
blade-biz-common/src/main/java/org/springblade/common/utils/CommonUtil.java

@ -19,8 +19,10 @@ package org.springblade.common.utils;
import lombok.extern.log4j.Log4j2;
import org.springframework.util.StringUtils;
import java.text.SimpleDateFormat;
import java.time.LocalDate;
import java.time.format.DateTimeFormatter;
import java.util.TimeZone;
/**
* 通用工具类
@ -40,5 +42,27 @@ public class CommonUtil {
return parse;
}
public static boolean checkDateFormat(String time,String format){
DateTimeFormatter formatter = DateTimeFormatter.ofPattern(format);
try{
LocalDate.parse(time,formatter);
}catch(Exception e){
return false;
}
return true;
}
public static String datoLongToString(Long dateTime,String format,String timeZone){
if (StringUtils.isEmpty(timeZone)) {
timeZone = "Asia/Shanghai";
}
if (dateTime != null) {
SimpleDateFormat simpleDateFormat = new SimpleDateFormat(format);
simpleDateFormat.setTimeZone(TimeZone.getTimeZone(timeZone));
return simpleDateFormat.format(dateTime);
}
return null;
}
}

3
blade-service/logpm-factory/src/main/java/com/logpm/factory/FactoryApplication.java

@ -16,7 +16,6 @@
*/
package com.logpm.factory;
import org.springblade.common.constant.LauncherConstant;
import org.springblade.common.constant.ModuleNameConstant;
import org.springblade.core.cloud.client.BladeCloudApplication;
import org.springblade.core.launch.BladeApplication;
@ -30,7 +29,7 @@ import org.springblade.core.launch.BladeApplication;
public class FactoryApplication {
public static void main(String[] args) {
BladeApplication.run(ModuleNameConstant.APPLICATION_FACTORY_NAME, FactoryApplication.class, args);
BladeApplication.run(ModuleNameConstant.APPLICATION_FACTORY_NAME+"-zhy", FactoryApplication.class, args);
}
}

54
blade-service/logpm-factory/src/main/java/com/logpm/factory/jobhandler/FactoryXxlJob.java

@ -1,7 +1,7 @@
package com.logpm.factory.jobhandler;
import cn.hutool.core.util.ObjectUtil;
import com.baomidou.mybatisplus.core.toolkit.StringUtils;
import com.alibaba.fastjson.JSONObject;
import com.baomidou.mybatisplus.core.toolkit.Wrappers;
import com.logpm.factory.snm.dto.GroupByPackagesDTO;
import com.logpm.factory.snm.entity.OrderLogEntity;
@ -18,16 +18,21 @@ import com.xxl.job.core.biz.model.ReturnT;
import com.xxl.job.core.handler.annotation.XxlJob;
import com.xxl.job.core.log.XxlJobLogger;
import lombok.AllArgsConstructor;
import net.logstash.logback.encoder.org.apache.commons.lang3.StringUtils;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springblade.common.constant.LogpmDataStatusEnum;
import org.springblade.common.constant.PackagesTypeEnum;
import org.springblade.common.exception.CustomerException;
import org.springblade.common.utils.CommonUtil;
import org.springframework.stereotype.Component;
import org.springframework.transaction.annotation.Transactional;
import org.springframework.util.ObjectUtils;
import java.time.LocalDate;
import java.time.LocalDateTime;
import java.time.ZoneOffset;
import java.time.format.DateTimeFormatter;
import java.util.*;
import java.util.stream.Collectors;
@ -69,20 +74,57 @@ public class FactoryXxlJob {
@XxlJob("factoryJobHandler")
public ReturnT<String> factoryJobHandler(String param) throws Exception {
// 获取当前时间
LocalDate date ;
LocalDate date = LocalDate.now();
List<StationlinenumEntity> ls = stationlinenumService.lambdaQuery().eq(StationlinenumEntity::getIsDeleted, 0).eq(StationlinenumEntity::getStatus, LogpmDataStatusEnum.OPEN.getValue()).list();
if (!ObjectUtils.isEmpty(ls)) {
if(StringUtils.isNotBlank(param)){
date = LocalDate.parse(param);
DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss");
String startTime;
String endTime;
int type = 1;
if (StringUtils.isNotBlank(param)){
String[] split = param.split("/");
if(split.length == 2){
startTime = split[0];
endTime = split[1];
}else{
throw new CustomerException(401,"参数传入有误!");
}
//判断时间格式是否正确
boolean flagStart = CommonUtil.checkDateFormat(startTime,"yyyy-MM-dd HH:mm:ss");
boolean flagEnd = CommonUtil.checkDateFormat(endTime,"yyyy-MM-dd HH:mm:ss");
if(!flagStart || !flagEnd){
throw new CustomerException(401,"参数传入有误!");
}
//设置类型为2手动
type = 2;
}else{
date = LocalDate.now();
//如果参数传入为空就用当前时间作为结束时间,上一次拉取的最后一条数的结束时间为本次的开始时间
endTime = LocalDateTime.now().format(formatter);
//获取最后一条数据
OrderLogEntity lastOne = orderLogService.selectOrderLogLastOne();
if (Objects.isNull(lastOne)){
//如果为空就暂时还没有拉取过的数据就用当天的0点为开始时间
Long zeroTime = LocalDate.now()
.atStartOfDay(ZoneOffset.ofHours(8))
.toInstant()
.toEpochMilli();
startTime = CommonUtil.datoLongToString(zeroTime, "yyyy-MM-dd HH:mm:ss", null);
}else{
//如果不为空则开始时间为上一条数据的结束时间
String reqArgs = lastOne.getReqArgs();
JSONObject jsonObject = JSONObject.parseObject(reqArgs);
startTime = jsonObject.getJSONObject("data").getString("dispatch_time_end");
}
}
//查询配置站点
int finalType = type;
ls.forEach(stationlinenumEntity -> {
// 根据站点id和当前时间调用service 请求对方接口获取数据插入到我们的数据库
XxlJobLogger.log("站点线路编号{}", stationlinenumEntity.getLogisticsLineNumber());
orderService.synOrderByLineNumData(stationlinenumEntity.getLogisticsLineNumber(), date);
orderService.synOrderByLineNumData(stationlinenumEntity.getLogisticsLineNumber(), startTime,endTime, finalType);
});
}
return ReturnT.SUCCESS;

1
blade-service/logpm-factory/src/main/java/com/logpm/factory/snm/mapper/OrderLogMapper.java

@ -40,4 +40,5 @@ public interface OrderLogMapper extends BaseMapper<OrderLogEntity> {
List<OrderLogVO> selectOrderLogPage(IPage page, OrderLogVO orderLog);
OrderLogEntity selectOrderLogLastOne();
}

4
blade-service/logpm-factory/src/main/java/com/logpm/factory/snm/mapper/OrderLogMapper.xml

@ -23,4 +23,8 @@
</select>
<select id="selectOrderLogLastOne" resultMap="orderLogResultMap">
select * from snm_order_log where type=1 order by create_time desc limit 1
</select>
</mapper>

2
blade-service/logpm-factory/src/main/java/com/logpm/factory/snm/service/IOrderLogService.java

@ -39,4 +39,6 @@ public interface IOrderLogService extends BaseService<OrderLogEntity> {
IPage<OrderLogVO> selectOrderLogPage(IPage<OrderLogVO> page, OrderLogVO orderLog);
OrderLogEntity selectOrderLogLastOne();
}

5
blade-service/logpm-factory/src/main/java/com/logpm/factory/snm/service/IOrderService.java

@ -1,10 +1,8 @@
package com.logpm.factory.snm.service;
import com.logpm.factory.snm.entity.OrderLogEntity;
import com.logpm.factory.snm.entity.StationOrderEntity;
import com.logpm.factory.snm.vo.response.ResponseBaseVo;
import java.time.LocalDate;
import java.util.List;
import java.util.Map;
@ -18,10 +16,9 @@ public interface IOrderService {
* 获取数据
*
* @param lineNum
* @param date
* @return
*/
ResponseBaseVo synOrderByLineNumData(String lineNum, LocalDate date);
ResponseBaseVo synOrderByLineNumData(String lineNum, String startTime,String endTime,Integer type);
/**
* 解析数据

5
blade-service/logpm-factory/src/main/java/com/logpm/factory/snm/service/impl/OrderLogServiceImpl.java

@ -38,5 +38,10 @@ public class OrderLogServiceImpl extends BaseServiceImpl<OrderLogMapper, OrderLo
return page.setRecords(baseMapper.selectOrderLogPage(page, orderLog));
}
@Override
public OrderLogEntity selectOrderLogLastOne() {
return baseMapper.selectOrderLogLastOne();
}
}

17
blade-service/logpm-factory/src/main/java/com/logpm/factory/snm/service/impl/OrderServiceImpl.java

@ -25,8 +25,6 @@ import org.springframework.util.ObjectUtils;
import java.io.UnsupportedEncodingException;
import java.lang.reflect.Field;
import java.time.LocalDate;
import java.time.format.DateTimeFormatter;
import java.util.*;
@AllArgsConstructor
@ -46,15 +44,12 @@ public class OrderServiceImpl implements IOrderService {
/**
* @param lineNum
* @param date
* @param startTime
* @param endTime
* @return
*/
@Override
public ResponseBaseVo synOrderByLineNumData(String lineNum, LocalDate date) {
DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd");
String dayDate = date.format(formatter);
public ResponseBaseVo synOrderByLineNumData(String lineNum, String startTime,String endTime,Integer type) {
RequestVo<RequestLineNumberVo> requestVo = new RequestVo();
requestVo.setMethod("snimay.crm.externalinterface.logistics.get");
@ -64,8 +59,8 @@ public class OrderServiceImpl implements IOrderService {
Date now = new Date();
requestLineNumberVo.setLogistics_line_number(lineNum);
requestLineNumberVo.setDispatch_time_start(dayDate);
requestLineNumberVo.setDispatch_time_end(dayDate);
requestLineNumberVo.setDispatch_time_start(startTime);
requestLineNumberVo.setDispatch_time_end(endTime);
SystemSign systemSign = new SystemSign();
systemSign.setTimestamp(now.getTime());
systemSign.setPublicKey(factorySnmdataProperties.getPublicKey());
@ -94,7 +89,7 @@ public class OrderServiceImpl implements IOrderService {
OrderLogEntity orderLogEntity = new OrderLogEntity();
orderLogEntity.setReqArgs(userStr);
orderLogEntity.setType(1);
orderLogEntity.setType(type);
orderLogEntity.setResBody(JSONUtil.toJsonStr(responseStationOrderVo));
orderLogService.save(orderLogEntity);
logger.info(">>>>>>>>>>>>>> 数据保存orderLogService{}", orderLogService);

Loading…
Cancel
Save