提交 b035dfc7 authored 作者: Whispa's avatar Whispa

commit commit

上级 4bc1e550
...@@ -71,8 +71,6 @@ public class TbCfItemOrderR { ...@@ -71,8 +71,6 @@ public class TbCfItemOrderR {
private String shopId; private String shopId;
@JsonIgnore @ManyToOne
private TbCfOrder order;
......
...@@ -3,6 +3,7 @@ package com.example.afrishop_v3.models; ...@@ -3,6 +3,7 @@ package com.example.afrishop_v3.models;
import com.example.afrishop_v3.base.StateConstant; import com.example.afrishop_v3.base.StateConstant;
import com.example.afrishop_v3.enums.OrderStatusEnum; import com.example.afrishop_v3.enums.OrderStatusEnum;
import com.example.afrishop_v3.util.IdUtil; import com.example.afrishop_v3.util.IdUtil;
import com.fasterxml.jackson.annotation.JsonIgnore;
import com.fasterxml.jackson.annotation.JsonProperty; import com.fasterxml.jackson.annotation.JsonProperty;
import lombok.Data; import lombok.Data;
import org.hibernate.annotations.Where; import org.hibernate.annotations.Where;
...@@ -156,6 +157,11 @@ public class TbCfOrder { ...@@ -156,6 +157,11 @@ public class TbCfOrder {
*/ */
private String remarkInfo; private String remarkInfo;
@JsonIgnore
@JoinColumn(columnDefinition = "user_id",name = "user_id")
@ManyToOne(fetch = FetchType.LAZY)
private TbCfUserInfo userInfo;
@Transient @Transient
private TbCfExpressTemplate defaultTemplate; private TbCfExpressTemplate defaultTemplate;
...@@ -170,6 +176,12 @@ public class TbCfOrder { ...@@ -170,6 +176,12 @@ public class TbCfOrder {
@OneToMany(mappedBy = "orderId", cascade = CascadeType.ALL) @OneToMany(mappedBy = "orderId", cascade = CascadeType.ALL)
private List<TbCfItemOrderR> itemOrderList = new ArrayList<>(); private List<TbCfItemOrderR> itemOrderList = new ArrayList<>();
@JsonIgnore
public TbCfUserInfo getUserInfo() {
return userInfo;
}
/** /**
* 设置:订单id * 设置:订单id
*/ */
......
package com.example.afrishop_v3.models; package com.example.afrishop_v3.models;
import com.fasterxml.jackson.annotation.JsonIgnore;
import lombok.Data; import lombok.Data;
import javax.persistence.Entity; import javax.persistence.*;
import javax.persistence.Id;
import java.io.Serializable; import java.io.Serializable;
import java.math.BigDecimal; import java.math.BigDecimal;
import java.util.Date; import java.util.Date;
...@@ -77,6 +77,10 @@ public class TbCfPlatformOrder { ...@@ -77,6 +77,10 @@ public class TbCfPlatformOrder {
*/ */
private Integer logisticsStatus; private Integer logisticsStatus;
@JsonIgnore @JoinColumn(columnDefinition = "order_id",name = "order_id")
@ManyToOne(fetch = FetchType.LAZY)
private TbCfOrder order;
/** /**
* 设置:对应id * 设置:对应id
*/ */
...@@ -97,6 +101,12 @@ public class TbCfPlatformOrder { ...@@ -97,6 +101,12 @@ public class TbCfPlatformOrder {
this.orderId = orderId; this.orderId = orderId;
} }
@JsonIgnore
public TbCfOrder getOrder() {
return order;
}
/** /**
* 获取:订单id * 获取:订单id
*/ */
......
package com.example.afrishop_v3.models;
/**
* @Auther: wudepeng
* @Date: 2020/05/25
* @Description:
*/
public class Time {
private String startTime;
private String endTime;
public String getStartTime() {
return startTime;
}
public void setStartTime(String startTime) {
this.startTime = startTime;
}
public String getEndTime() {
return endTime;
}
public void setEndTime(String endTime) {
this.endTime = endTime;
}
}
package com.example.afrishop_v3.quartz;
import com.example.afrishop_v3.enums.DeliveryStatusEnum;
import com.example.afrishop_v3.models.TbCfOrder;
import com.example.afrishop_v3.models.TbCfPlatformOrder;
import com.example.afrishop_v3.models.Time;
import com.example.afrishop_v3.repository.TbCfOrderRepository;
import com.example.afrishop_v3.repository.TbCfPlatformOrderRepository;
import com.example.afrishop_v3.util.HttpClientUtil;
import net.sf.json.JSONArray;
import net.sf.json.JSONObject;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.scheduling.annotation.Scheduled;
import org.springframework.stereotype.Component;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.*;
/**
* @Author : wudepeng
* @Date: 2020/05/25
* @Description:物流任务
*/
@Component
public class LogisticsTask {
private static Logger logger = LoggerFactory.getLogger(LogisticsTask.class);
private final TbCfOrderRepository orderRepository;
private final TbCfPlatformOrderRepository platformOrderRepository;
@Value("${logistics.track}")
private String TRACK_API;
@Value("${logistics.sign}")
private String SIGN_API;
@Value("${logistics.stock}")
private String STOCK_API;
@Value("${logistics.user}")
private String USER_NO;
@Value("${logistics.token}")
private String TOKEN;
@Value("${logistics.add_order}")
private String ADD_ORDER_API;
public LogisticsTask(TbCfOrderRepository orderRepository, TbCfPlatformOrderRepository platformOrderRepository) {
this.orderRepository = orderRepository;
this.platformOrderRepository = platformOrderRepository;
}
//===================================================
//
//##定时查询意境通物流订单,然后将数据库订单进行相应的修改
//##物流状态 20:已到达中国仓 40:已到达非洲仓 50:已签收
//
//===================================================
/**
* 调用意境通API,查询已到达中国仓的订单,修改数据库订单状态为20
*
* @throws Exception
*/
@Scheduled(cron = "0 0 0/2 * * ? ")
public void chainaWarehouse() throws Exception {
//封装请求参数
Map<String, Object> paramMap = getParamMap();
paramMap.put("incomeid", 855);
//发送请求
afterLogistics(STOCK_API, paramMap, DeliveryStatusEnum.ON_LOAD.getValue());
}
/**
* 调用意境通API,查询已到达非洲的订单,修改数据库订单状态为40
*
* @throws Exception
*/
@Scheduled(cron = "0 0 0/2 * * ? ")
public void africanWarehouse() throws Exception {
//封装请求参数
Map<String, Object> paramMap = getParamMap();
paramMap.put("incomeid", 1170);
//发送请求
afterLogistics(STOCK_API, paramMap, DeliveryStatusEnum.ON_AFRICA.getValue());
}
/**
* 调用意境通API,查询已签收的订单,修改数据库订单状态为50
*
* @throws Exception
*/
@Scheduled(cron = "0 0 0/2 * * ? ")
public void signed() throws Exception {
Map<String, Object> paramMap = getParamMap();
afterLogistics(SIGN_API, paramMap, DeliveryStatusEnum.ARRIVALS.getValue());
}
//公共处理方法
public void afterLogistics(String API, Map paramMap, Integer status) throws Exception {
String body = HttpClientUtil.sendPostWithBodyParameter(API, paramMap);
JSONObject jsonObject = JSONObject.fromObject(body);
System.out.println(jsonObject);
JSONArray jsonArray = jsonObject.getJSONObject("content").getJSONArray("data");
for (int i = 0; i < jsonArray.size(); i++) {
JSONObject object = jsonArray.getJSONObject(i);
//快递单号
String expressNumber = object.getString("sid");
Optional<TbCfPlatformOrder> platformOrder = platformOrderRepository.findFirstByPExpressNumber(expressNumber);
if (platformOrder.isPresent()) {
TbCfPlatformOrder cfPlatformOrder = platformOrder.get();
Optional<TbCfOrder> order = orderRepository.findById(cfPlatformOrder.getOrderId());
if (order.isPresent()) {
TbCfOrder cfOrder = order.get();
cfOrder.setDeliveryFlag(status);
orderRepository.save(cfOrder);
}
}
}
}
//封装公共的请求参数
public Map<String, Object> getParamMap() throws ParseException {
Map<String, Object> paramMap = new HashMap<>();
Time time = getTime();
paramMap.put("user_no", USER_NO);
paramMap.put("token", TOKEN);
logger.info("开始时间:" + time.getStartTime());
logger.info("结束时间:" + time.getEndTime());
paramMap.put("startime", time.getStartTime());
paramMap.put("endtime", time.getEndTime());
return paramMap;
}
//封装时间
public Time getTime() throws ParseException {
SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd hh:mm:ss");
Time time = new Time();
Date date = dateFormat.parse(dateFormat.format(new Date()));
Calendar calendar = Calendar.getInstance();
calendar.setTime(date);
calendar.add(Calendar.DATE, -2);
time.setStartTime(dateFormat.format(calendar.getTime()));
time.setEndTime(dateFormat.format(new Date()));
return time;
}
}
package com.example.afrishop_v3.quartz;
import com.example.afrishop_v3.enums.OrderStatusEnum;
import com.example.afrishop_v3.models.*;
import com.example.afrishop_v3.repository.*;
import com.example.afrishop_v3.util.HttpClientUtil;
import net.sf.json.JSONObject;
import org.apache.commons.lang3.StringUtils;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.scheduling.annotation.Scheduled;
import org.springframework.stereotype.Component;
import java.io.IOException;
import java.math.BigDecimal;
import java.util.*;
import java.util.concurrent.ExecutionException;
import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;
import java.util.concurrent.Future;
import java.util.concurrent.locks.Lock;
import java.util.concurrent.locks.ReentrantLock;
/**
* @Auther: wudepeng
* @Date: 2020/04/26
* @Description:订单定时任务
*/
@Component
public class OrderTask {
private static Logger logger = LoggerFactory.getLogger(OrderTask.class);
private final TbCfOrderRepository orderRepository;
private final TbCfItemOrderRepository itemOrderRepository;
private final TbCfToicouponRepository toicouponRepository;
private final TbCfAddressRepository addressRepository;
private final TbCfItemSkuRepository itemSkuRepository;
private final TbCfStationItemRepository stationItemRepository;
private final TbCfDescripitonRepository descripitonRepository;
private final TbCfPlatformOrderRepository platformOrderRepository;
@Value("${logistics.track}")
private String TRACK_API;
@Value("${logistics.sign}")
private String SIGN_API;
@Value("${logistics.stock}")
private String STOCK_API;
@Value("${logistics.user}")
private String USER_NO;
@Value("${logistics.token}")
private String TOKEN;
@Value("${logistics.add_order}")
private String ADD_ORDER_API;
private final Lock lock = new ReentrantLock();
public OrderTask(TbCfOrderRepository orderRepository, TbCfItemOrderRepository itemOrderRepository, TbCfToicouponRepository toicouponRepository, UserRepository userRepository, TbCfAddressRepository addressRepository, TbCfItemSkuRepository itemSkuRepository, TbCfStationItemRepository stationItemRepository, TbCfDescripitonRepository descripitonRepository, TbCfPlatformOrderRepository platformOrderRepository) {
this.orderRepository = orderRepository;
this.itemOrderRepository = itemOrderRepository;
this.toicouponRepository = toicouponRepository;
this.addressRepository = addressRepository;
this.itemSkuRepository = itemSkuRepository;
this.stationItemRepository = stationItemRepository;
this.descripitonRepository = descripitonRepository;
this.platformOrderRepository = platformOrderRepository;
}
/**
* 将超时(24小时)未付款的订单释放库存
*/
@Scheduled(cron = "0 0 0-23 * * ?")
public void orderReleaseStock() throws ExecutionException, InterruptedException {
ExecutorService executorService = Executors.newFixedThreadPool(20);
//查询超时未支付的订单
List<TbCfOrder> orderList = new ArrayList<>();
for (int i = 0; i < 20; i++) {
Future<List<TbCfOrder>> orders = executorService.submit(() -> orderRepository.getTimeoutOrders(new Date()));
orderList = orders.get();
}
for (TbCfOrder order : orderList) {
//关闭交易订单
//1.修改订单状态 ## 2.修改订单详情状态
order.setOrderStatus(OrderStatusEnum.CLOSE.getValue());
orderRepository.save(order);
List<TbCfItemOrderR> orderDetailList = itemOrderRepository.findAllByOrderId(order.getOrderId());
for (TbCfItemOrderR orderDetail : orderDetailList) {
orderDetail.setOrderStatus(OrderStatusEnum.CLOSE.getValue());
itemOrderRepository.save(orderDetail);
//释放库存
Optional<TbCfItemSkus> skuOptional = itemSkuRepository.findFirstByItemId(orderDetail.getItemId());
if (skuOptional.isPresent()) {
TbCfItemSkus item = skuOptional.get();
item.setSkuCount(item.getSkuCount() + orderDetail.getItemNum());
itemSkuRepository.save(item);
}
}
//释放优惠券
if (!StringUtils.isBlank(order.getCouponId())) {
Optional<TbCfToicoupon> cfToicouponOptional = toicouponRepository.findById(order.getCouponId());
if (cfToicouponOptional.isPresent()) {
TbCfToicoupon coupon = cfToicouponOptional.get();
coupon.setEnableFlag(1);
toicouponRepository.save(coupon);
}
}
}
}
/**
* ##定时任务:每隔一小时向意境通推送订单
* ##(已代购的订单&&物流状态为10的)
*/
@Scheduled(cron = "0 0 0-23 * * ?")
public void addOrderToYJT() {
ExecutorService executorService = Executors.newCachedThreadPool();
List<Future<List<TbCfPlatformOrder>>> futureList = new ArrayList<>();
for (int i = 0; i < 20; i++) {
//查询已经代购的订单明细
Future future = executorService.submit(() -> platformOrderRepository.findAllByLogisticsStatus(10));
futureList.add(future);
}
futureList.forEach(order -> {
if (!order.isDone()) {
try {
List<TbCfPlatformOrder> list = order.get();
addOrderToYJT(list);
} catch (Exception e) {
e.printStackTrace();
}
}
});
}
//推送订单至意境通平台
public void addOrderToYJT(List<TbCfPlatformOrder> orderList) throws IOException {
// try {
for (TbCfPlatformOrder platformOrder : orderList) {
//查询用户信息
TbCfOrder order = platformOrder.getOrder();
if( order == null ) continue;
TbCfUserInfo user = order.getUserInfo();
Optional<TbCfItemOrderR> itemOrderOptional = itemOrderRepository.findById(platformOrder.getRelativeId());
//封装请求参数
Map<String, Object> paramMap = new HashMap<>();
//账号号码
paramMap.put("user_no", USER_NO);
//账号TOKEN
paramMap.put("token", TOKEN);
//快递单号(后续用来查询物流轨迹的唯一标识)
paramMap.put("orderNo", filterParam(platformOrder.getPExpressNumber()));
//用户ID
paramMap.put("user_id", filterParam(platformOrder.getUserId()));
//##用户相关##
Map<String, String> userMap = new HashMap<>();
//用户编号
userMap.put("userNo", filterParam(user.getUserNo()));
//用户名
userMap.put("userName", filterParam(user.getNick()));
//手机号
userMap.put("phone", user.getPhone() == null ? null : user.getPhone().substring(1));
paramMap.put("user_array", userMap);
//##订单相关##
Map<String, Object> orderMap = new HashMap<>();
//订单ID
orderMap.put("orderId", platformOrder.getRelativeId());
//下单号码
orderMap.put("deliveryPhone", filterParam(order.getDeliveryPhone()));
//下单地址
orderMap.put("deliveryAddress", filterParam(order.getDeliveryAddress()));
//下单人
orderMap.put("deliveryName", filterParam(order.getDeliveryName()));
//国家 默认赞比亚
orderMap.put("country", "Zambia");
//##商品相关##
List<Map<String, Object>> itemDetailList = new ArrayList<>();
String itemTitle = null;//商品名
BigDecimal itemPrice = null;//商品价格
// String descripitionName = platformOrder.getTemplateTitle();//报关品名
if ("2".equals(order.getOrderSource().toString())) {
//PC官网订单
// ItemVo item = tbCfItemSkusDao.queryItemDetail(platformOrder.getItemId());
// itemTitle = item.getItemName();
// itemPrice = item.getSkuPrice();
} else {
//app or 移动端订单
Optional<TbCfStationItem> byId = stationItemRepository.findById(platformOrder.getItemId());
if (byId.isPresent()) {
itemTitle = byId.get().getItemName();
itemPrice = byId.get().getItemPrice();
}
}
Map<String, Object> itemMap = new HashMap<>();
//商品名称
itemMap.put("itemTitle", filterParam(itemTitle));
//购买数量
itemMap.put("itemNum", itemOrderOptional.isPresent() ? itemOrderOptional.get().getItemNum() : 1);
//商品价格
itemMap.put("itemPrice", itemPrice);
//品名
// itemMap.put("descripitionName", filterParam(descripitionName));
itemDetailList.add(itemMap);
orderMap.put("itemDetailList", itemDetailList);
paramMap.put("order_info", orderMap);
//发送请求
System.err.println(paramMap);
String body = HttpClientUtil.sendPostWithBodyParameter(ADD_ORDER_API, paramMap);
JSONObject jsonObject = JSONObject.fromObject(body);
System.err.println(jsonObject);
logger.info("订单号[" + order.getOrderNo() + "]开始下单,时间:" + new Date());
logger.info(String.valueOf(jsonObject));
if ("0".equals(jsonObject.getString("error"))) {
//下单成功
lock.lock();
// PlatformOrderVo platformOrderVo = tbCfPlatformOrderDao.queryObject(platformOrder.getRelativeId());
platformOrder.setLogisticsStatus(20);
platformOrderRepository.save(platformOrder);
lock.unlock();
}
}
// } catch (Exception e) {
// //发生异常
// logger.error("对接意境通下单发生异常:" + e);
// }
}
//
// /**
// * 将已发货的订单信息传输至易境通平台
// */
// @Scheduled(cron = "0 0 0-23 * * ?")
// public void addOrdersToYJT() throws Exception {
// try {
// ExecutorService executorService = Executors.newFixedThreadPool(20);
// List<Future> list = new ArrayList<>();
// for (int i = 0; i < 20; i++) {
// Future future = executorService.submit(() -> tbCfOrderDao.queryLogisticsOrder());
// list.add(future);
// }
// for (Future future : list) {
// if (!future.isDone()) {
// List<TbCfOrderEntity> orderList = (List<TbCfOrderEntity>) future.get();
// for (TbCfOrderEntity order : orderList) {
// add_order(order);
// }
// }
// }
// } catch (Exception e) {
// logger.error("物流下单发生异常:" + e.toString());
// }
//
// }
//
// //添加订单
// public void add_order(TbCfOrderEntity order) {
//
// try {
// TbCfUserInfoEntity user = tbCfUserInfoDao.queryObject(order.getUserId());
// TbCfAddressEntity address = tbCfAddressDao.queryObject(user.getDefaultAddressId());
// TbCfAddressEntity addressEntity = tbCfAddressDao.queryObject(order.getDeliveryAddressId());
//
// //封装请求参数
// Map<String, Object> paramMap = new HashMap<>();
// paramMap.put("user_no", USER_NO);
// paramMap.put("token", TOKEN);
// paramMap.put("orderNo", filterParam(order.getOrderNo()));
// paramMap.put("user_id", filterParam(order.getUserId()));
// //用户相关
// Map<String, String> userMap = new HashMap<>();
// userMap.put("userNo", filterParam(user.getUserNo()));
// userMap.put("userName", filterParam(user.getNick()));
// userMap.put("phone", user.getPhone() == null ? null : user.getPhone().substring(1));
// if (address != null) {
// userMap.put("defaultAddressName", filterParam(address.getAddressDetail()));
// } else {
// userMap.put("defaultAddressName", null);
// }
// paramMap.put("user_array", userMap);
// //订单相关
// Map<String, Object> orderMap = new HashMap<>();
// orderMap.put("orderId", order.getOrderId());
// if (addressEntity != null) {
// orderMap.put("deliveryPhone", filterParam(addressEntity.getPhone()));
// orderMap.put("deliveryAddress", filterParam(addressEntity.getAddressDetail()));
// orderMap.put("deliveryName", filterParam(addressEntity.getDeliveryName()));
// } else {
// orderMap.put("deliveryPhone", null);
// orderMap.put("deliveryAddress", null);
// orderMap.put("deliveryName", null);
// }
// orderMap.put("country", "Zambia");
// //商品相关
// List<TbCfItemOrderREntity> orderDetailList = tbCfItemOrderRDao.queryByOrderId(order.getOrderId());
//
// List<Map<String, Object>> itemDetailList = new ArrayList<>();
// for (TbCfItemOrderREntity orderDetail : orderDetailList) {
// String itemTitle = null;
// BigDecimal itemPrice = null;
// String descripitionName = "";
// if ("2".equals(order.getOrderSource())) {
// ItemVo item = tbCfItemSkusDao.queryItemDetail(orderDetail.getItemId());
// itemTitle = item.getItemName();
// itemPrice = item.getSkuPrice();
// descripitionName = item.getDescName();
//
// } else {
// TbCfItemDetailEntity item = tbCfItemDetailDao.queryObject(orderDetail.getItemId());
// if (item != null) {
// itemTitle = item.getItemTitle();
// itemPrice = item.getItemPrice();
// if (!StringUtils.isBlank(item.getGoodsId())) {
// TbCfDescripitonEntity desc = tbCfDescripitonDao.queryPostage(item.getGoodsId());
// descripitionName = desc.getDescripitionName();
// }
// }
//
// }
// Map<String, Object> itemMap = new HashMap<>();
// itemMap.put("itemTitle", filterParam(itemTitle));
// itemMap.put("itemNum", orderDetail.getItemNum());
// itemMap.put("itemPrice", itemPrice);
// itemMap.put("descripitionName", filterParam(descripitionName));
// itemDetailList.add(itemMap);
// }
// orderMap.put("itemDetailList", itemDetailList);
// paramMap.put("order_info", orderMap);
// //发送请求
// String body = HttpClientUtil.sendPostWithBodyParameter(ADD_ORDER_API, paramMap);
// JSONObject jsonObject = JSONObject.fromObject(body);
// logger.info("订单号[" + order.getOrderNo() + "]开始下单,时间:" + new Date());
// logger.info(String.valueOf(jsonObject));
// if ("0".equals(jsonObject.getString("error"))) {
// //下单成功
// lock.lock();
// order.setLogisticsStatus(20);
// tbCfOrderDao.update(order);
// lock.unlock();
// }
// } catch (Exception e) {
// logger.error("订单号[" + order.getOrderNo() + "]下单发生异常:" + e.toString());
// }
//
// }
//过滤空参数
public String filterParam(String param) {
if (StringUtils.isBlank(param)) {
return null;
}
return param;
}
}
package com.example.afrishop_v3.quartz;
import com.example.afrishop_v3.repository.TbCfExchangeRepository;
import com.example.afrishop_v3.repository.UserRepository;
import com.example.afrishop_v3.util.HttpClientUtil;
import org.jsoup.Jsoup;
import org.jsoup.nodes.Document;
import org.springframework.beans.factory.annotation.Qualifier;
import org.springframework.scheduling.annotation.Scheduled;
import org.springframework.stereotype.Component;
import java.io.IOException;
import java.math.BigDecimal;
import java.net.URISyntaxException;
@Component
public class QuartzMethod {
private final UserRepository userRepository;
private final TbCfExchangeRepository exchangeRepository;
public QuartzMethod(UserRepository userRepository, @Qualifier("tbCfExchangeRepository") TbCfExchangeRepository exchangeRepository) {
this.userRepository = userRepository;
this.exchangeRepository = exchangeRepository;
}
// //@Scheduled(cron = "0 0/1 * * * ? ")
// public void sendEmail() throws EmailException, TemplateException, IOException {
// System.out.println("////////////////////////////////////////////////////");
// String email= tbCfUserInfoService.findEmails();
// // String email= "1203063316@qq.com";
// if(email!=null){
// String s = tbCfUserInfoService.sendRegister(email);
// if(s!=null){
// System.out.println("已发送邮件:"+email);
// }
// }
// }
/**
* 美元-克瓦查
* @throws IOException
* @throws URISyntaxException
*/
@Scheduled(cron = "0 0 3 * * ?")
public void getRent() throws IOException, URISyntaxException {
String content = HttpClientUtil.getContentByUrl("https://cn.valutafx.com/USD-ZMW.htm?amount=1", "rent");
// 解析为 Document 对象
Document document = Jsoup.parse(content);
String rent = document.select("div[class=rate-value]").text();
BigDecimal rate=new BigDecimal(rent);
String type="USD-ZMW";
exchangeRepository.updateByType(type,rate);
}
/**
* 美元-人民币
* @throws IOException
* @throws URISyntaxException
*/
@Scheduled(cron = "0 0 3 * * ?")
public void getRate() throws IOException, URISyntaxException {
String content = HttpClientUtil.getContentByUrl("https://cn.valutafx.com/USD-CNY.htm?amount=1", "rent");
// 解析为 Document 对象
Document document = Jsoup.parse(content);
String rent = document.select("div[class=rate-value]").text();
BigDecimal rate=new BigDecimal(rent);
String type="USD-CNY";
exchangeRepository.updateByType(type,rate);
}
}
package com.example.afrishop_v3.repository; package com.example.afrishop_v3.repository;
import com.example.afrishop_v3.models.TbCfExchange; import com.example.afrishop_v3.models.TbCfExchange;
import org.springframework.data.jpa.repository.Modifying;
import org.springframework.data.jpa.repository.Query;
import org.springframework.data.repository.PagingAndSortingRepository; import org.springframework.data.repository.PagingAndSortingRepository;
import org.springframework.data.repository.query.Param;
import org.springframework.stereotype.Service; import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import java.math.BigDecimal;
@Service("tbCfExchangeRepository") @Service("tbCfExchangeRepository")
public interface TbCfExchangeRepository extends PagingAndSortingRepository<TbCfExchange,String> { public interface TbCfExchangeRepository extends PagingAndSortingRepository<TbCfExchange,String> {
TbCfExchange findByExchangeCurrency(String exchangeCurrency); TbCfExchange findByExchangeCurrency(String exchangeCurrency);
@Transactional
@Query(value = "update tb_cf_exchange WHERE type=:type SET exchange_rate = :rate ",nativeQuery = true)
@Modifying
void updateByType(@Param("type") String type,@Param("rate") BigDecimal rate);
} }
...@@ -3,5 +3,8 @@ package com.example.afrishop_v3.repository; ...@@ -3,5 +3,8 @@ package com.example.afrishop_v3.repository;
import com.example.afrishop_v3.models.TbCfItemOrderR; import com.example.afrishop_v3.models.TbCfItemOrderR;
import org.springframework.data.repository.PagingAndSortingRepository; import org.springframework.data.repository.PagingAndSortingRepository;
import java.util.List;
public interface TbCfItemOrderRepository extends PagingAndSortingRepository<TbCfItemOrderR,String> { public interface TbCfItemOrderRepository extends PagingAndSortingRepository<TbCfItemOrderR,String> {
List<TbCfItemOrderR> findAllByOrderId(String orderId);
} }
...@@ -4,7 +4,9 @@ import com.example.afrishop_v3.models.TbCfItemSkus; ...@@ -4,7 +4,9 @@ import com.example.afrishop_v3.models.TbCfItemSkus;
import org.springframework.data.repository.PagingAndSortingRepository; import org.springframework.data.repository.PagingAndSortingRepository;
import java.util.List; import java.util.List;
import java.util.Optional;
public interface TbCfItemSkuRepository extends PagingAndSortingRepository<TbCfItemSkus,String> { public interface TbCfItemSkuRepository extends PagingAndSortingRepository<TbCfItemSkus,String> {
List<TbCfItemSkus> findAllByItemIdOrderByOrderNumAsc(String itemId); List<TbCfItemSkus> findAllByItemIdOrderByOrderNumAsc(String itemId);
Optional<TbCfItemSkus> findFirstByItemId(String itemId);
} }
...@@ -3,8 +3,15 @@ package com.example.afrishop_v3.repository; ...@@ -3,8 +3,15 @@ package com.example.afrishop_v3.repository;
import com.example.afrishop_v3.models.TbCfOrder; import com.example.afrishop_v3.models.TbCfOrder;
import org.springframework.data.domain.Page; import org.springframework.data.domain.Page;
import org.springframework.data.domain.Pageable; import org.springframework.data.domain.Pageable;
import org.springframework.data.jpa.repository.Query;
import org.springframework.data.repository.PagingAndSortingRepository; import org.springframework.data.repository.PagingAndSortingRepository;
import org.springframework.data.repository.query.Param;
import java.util.Date;
import java.util.List;
public interface TbCfOrderRepository extends PagingAndSortingRepository<TbCfOrder,String> { public interface TbCfOrderRepository extends PagingAndSortingRepository<TbCfOrder,String> {
Page<TbCfOrder> findAllByUserId(String userId, Pageable pageable); Page<TbCfOrder> findAllByUserId(String userId, Pageable pageable);
@Query(value = "select a from #{#entityName} a where :now > SUBDATE(a.orderTime,interval -1 day) and order_status=10")
List<TbCfOrder> getTimeoutOrders(@Param("now") Date date);
} }
...@@ -3,5 +3,10 @@ package com.example.afrishop_v3.repository; ...@@ -3,5 +3,10 @@ package com.example.afrishop_v3.repository;
import com.example.afrishop_v3.models.TbCfPlatformOrder; import com.example.afrishop_v3.models.TbCfPlatformOrder;
import org.springframework.data.repository.PagingAndSortingRepository; import org.springframework.data.repository.PagingAndSortingRepository;
import java.util.List;
import java.util.Optional;
public interface TbCfPlatformOrderRepository extends PagingAndSortingRepository<TbCfPlatformOrder,String> { public interface TbCfPlatformOrderRepository extends PagingAndSortingRepository<TbCfPlatformOrder,String> {
Optional<TbCfPlatformOrder> findFirstByPExpressNumber(String pExpressNumber);
List<TbCfPlatformOrder> findAllByLogisticsStatus(Integer logisticsStatus);
} }
...@@ -52,9 +52,9 @@ dpo: ...@@ -52,9 +52,9 @@ dpo:
#服务类型 #服务类型
service_type: 5525 service_type: 5525
#回调地址 #回调地址
notify_url: http://165.22.82.105:7000/zion/dpo/notify notify_url: http://159.138.48.71:8080/zion/dpo/notify
#取消地址 #取消地址
back_url: http://165.22.82.105:7000/zion/dpo/cancel back_url: http://159.138.48.71:8080/zion/dpo/cancel
#支付成功页面 #支付成功页面
success_url: https://dev.diaosaas.com/afrishop_web/payment_successful success_url: https://dev.diaosaas.com/afrishop_web/payment_successful
#支付失败页面 #支付失败页面
...@@ -69,7 +69,7 @@ dpo: ...@@ -69,7 +69,7 @@ dpo:
flutter: flutter:
pay_url: https://ravesandboxapi.flutterwave.com/flwv3-pug/getpaidx/api/v2/verify pay_url: https://ravesandboxapi.flutterwave.com/flwv3-pug/getpaidx/api/v2/verify
refund_url: https://api.ravepay.co/gpx/merchant/transactions/refund refund_url: https://api.ravepay.co/gpx/merchant/transactions/refund
redirect_url: http://165.22.82.105:7000/zion/flutterwave/notify redirect_url: http://159.138.48.71:8080/zion/flutterwave/notify
public_key: FLWPUBK_TEST-e3cc948e7cb24b2128fca3b781f6fce0-X public_key: FLWPUBK_TEST-e3cc948e7cb24b2128fca3b781f6fce0-X
secret_key: FLWSECK_TEST-f88371ca63a989a4af95625475a0d22d-X secret_key: FLWSECK_TEST-f88371ca63a989a4af95625475a0d22d-X
Markdown 格式
0%
您添加了 0 到此讨论。请谨慎行事。
请先完成此评论的编辑!
注册 或者 后发表评论