diff --git a/intc-api/intc-api-invest/src/main/java/com/intc/api/invest/RemoteInvestService.java b/intc-api/intc-api-invest/src/main/java/com/intc/api/invest/RemoteInvestService.java index 00673f6..0ddf4b9 100644 --- a/intc-api/intc-api-invest/src/main/java/com/intc/api/invest/RemoteInvestService.java +++ b/intc-api/intc-api-invest/src/main/java/com/intc/api/invest/RemoteInvestService.java @@ -77,7 +77,7 @@ public interface RemoteInvestService public R appointmentResults(); /** - * 更新未出信用卡分期账单入账数据 + * 同步当日股票日行情 * * @return 结果 */ @@ -85,4 +85,13 @@ public interface RemoteInvestService public R synStocksDailyHistory(); + /** + * 同步当日期货日行情 + * + * @return 结果 + */ + @RequestMapping(value = "/job/synFuturesDailyHistory",method = RequestMethod.POST) + public R synFuturesDailyHistory(); + + } diff --git a/intc-api/intc-api-invest/src/main/java/com/intc/api/invest/factory/RemoteInvestFallbackFactory.java b/intc-api/intc-api-invest/src/main/java/com/intc/api/invest/factory/RemoteInvestFallbackFactory.java index 03b1068..673763a 100644 --- a/intc-api/intc-api-invest/src/main/java/com/intc/api/invest/factory/RemoteInvestFallbackFactory.java +++ b/intc-api/intc-api-invest/src/main/java/com/intc/api/invest/factory/RemoteInvestFallbackFactory.java @@ -69,6 +69,11 @@ public class RemoteInvestFallbackFactory implements FallbackFactory futuresDailyHistory); } diff --git a/intc-modules/intc-invest/src/main/java/com/intc/invest/service/IFuturesDailyHistoryService.java b/intc-modules/intc-invest/src/main/java/com/intc/invest/service/IFuturesDailyHistoryService.java index 4e05959..cb326c0 100644 --- a/intc-modules/intc-invest/src/main/java/com/intc/invest/service/IFuturesDailyHistoryService.java +++ b/intc-modules/intc-invest/src/main/java/com/intc/invest/service/IFuturesDailyHistoryService.java @@ -1,10 +1,12 @@ package com.intc.invest.service; -import java.util.List; import com.intc.invest.domain.FuturesDailyHistory; +import com.intc.invest.domain.TuShare; import com.intc.invest.domain.dto.FuturesDailyHistoryDto; import com.intc.invest.domain.vo.FuturesDailyHistoryVo; +import java.util.List; + /** * 期货日行情历史Service接口 * @@ -60,4 +62,19 @@ public interface IFuturesDailyHistoryService * @return 结果 */ public int deleteFuturesDailyHistoryById(String id); + + /** + * 同步期货日行情历史信息 + * + * @param tuShare 股票日行情历史 + * @return 结果 + */ + public void synFuturesDailyHistory(TuShare tuShare); + + /** + * 同步当日期货日行情历史信息 + * + * @return 结果 + */ + public void synTodayFuturesDailyHistory(); } diff --git a/intc-modules/intc-invest/src/main/java/com/intc/invest/service/impl/FuturesDailyHistoryServiceImpl.java b/intc-modules/intc-invest/src/main/java/com/intc/invest/service/impl/FuturesDailyHistoryServiceImpl.java index e386777..ffea918 100644 --- a/intc-modules/intc-invest/src/main/java/com/intc/invest/service/impl/FuturesDailyHistoryServiceImpl.java +++ b/intc-modules/intc-invest/src/main/java/com/intc/invest/service/impl/FuturesDailyHistoryServiceImpl.java @@ -1,17 +1,32 @@ package com.intc.invest.service.impl; +import com.alibaba.fastjson2.JSON; +import com.alibaba.fastjson2.JSONObject; +import com.alibaba.nacos.shaded.com.google.gson.Gson; +import com.alibaba.nacos.shaded.com.google.gson.JsonObject; import com.intc.common.core.utils.DateUtils; import com.intc.common.core.utils.IdWorker; +import com.intc.common.core.utils.http.HttpUtils; import com.intc.common.security.utils.SecurityUtils; import com.intc.invest.domain.FuturesDailyHistory; +import com.intc.invest.domain.TuShare; +import com.intc.invest.domain.TuShareData; +import com.intc.invest.domain.TuShareParams; +import com.intc.invest.domain.dto.FutureBaseInforDto; import com.intc.invest.domain.dto.FuturesDailyHistoryDto; +import com.intc.invest.domain.vo.FutureBaseInforVo; import com.intc.invest.domain.vo.FuturesDailyHistoryVo; +import com.intc.invest.mapper.FutureBaseInforMapper; import com.intc.invest.mapper.FuturesDailyHistoryMapper; import com.intc.invest.service.IFuturesDailyHistoryService; +import org.springframework.beans.factory.annotation.Value; import org.springframework.stereotype.Service; import javax.annotation.Resource; -import java.util.List; +import java.text.DecimalFormat; +import java.text.ParseException; +import java.text.SimpleDateFormat; +import java.util.*; /** * 期货日行情历史Service业务层处理 @@ -24,6 +39,14 @@ public class FuturesDailyHistoryServiceImpl implements IFuturesDailyHistoryServi { @Resource private FuturesDailyHistoryMapper futuresDailyHistoryMapper; + @Resource + private FutureBaseInforMapper futureBaseInforMapper; + + @Value("${config.tushareUrl}") + private String tushareUrl; + + @Value("${config.tushareToken}") + private String tushareToken; /** * 查询期货日行情历史 @@ -46,7 +69,13 @@ public class FuturesDailyHistoryServiceImpl implements IFuturesDailyHistoryServi @Override public List selectFuturesDailyHistoryList(FuturesDailyHistoryDto futuresDailyHistoryDto) { - return futuresDailyHistoryMapper.selectFuturesDailyHistoryList(futuresDailyHistoryDto); + List list = futuresDailyHistoryMapper.selectFuturesDailyHistoryList(futuresDailyHistoryDto); + DecimalFormat decimalFormat = new DecimalFormat("#.##"); + for (FuturesDailyHistoryVo vo: list) { + String pctChgName=decimalFormat.format(vo.getChange1()*100/vo.getPreSettle()); + vo.setPctChgName(pctChgName+"%"); + } + return list; } /** @@ -87,7 +116,7 @@ public class FuturesDailyHistoryServiceImpl implements IFuturesDailyHistoryServi @Override public int deleteFuturesDailyHistoryByIds(String[] ids) { - return futuresDailyHistoryMapper.removeFuturesDailyHistoryByIds(ids); + return futuresDailyHistoryMapper.deleteFuturesDailyHistoryByIds(ids); } /** @@ -101,4 +130,132 @@ public class FuturesDailyHistoryServiceImpl implements IFuturesDailyHistoryServi { return futuresDailyHistoryMapper.removeFuturesDailyHistoryById(id); } + + /** + * 同步股票日行情历史 + * + * @param tuShare 需要删除的股票日行情历史主键 + * @return 结果 + */ + @Override + public void synFuturesDailyHistory(TuShare tuShare) { + + tuShare.setToken(tushareToken); + tuShare.setApi_name("fut_daily"); + Gson gson = new Gson(); + JsonObject json = gson.toJsonTree(tuShare).getAsJsonObject(); + Map headers = new HashMap(); + headers.put("X-Ca-Signature-Headers", "x-ca-key,x-ca-timestamp"); + String returnString = HttpUtils.sendSSLPost(tushareUrl, null, JSONObject.parseObject(json.toString()), headers); + com.alibaba.fastjson.JSONObject jsonObject = com.alibaba.fastjson.JSONObject.parseObject(returnString); + TuShareData data = JSON.parseObject(jsonObject.getString("data"), TuShareData.class); + List> itemList = data.getItems(); + List futuresDailyHistoryList = new ArrayList<>(); + for (List item : itemList) { + FuturesDailyHistory futuresDailyHistory = getFuturesDailyHistory(item,tuShare.getParams()); + futuresDailyHistoryList.add(futuresDailyHistory); + } + //批量插入数据 + if(futuresDailyHistoryList.size()>0){ + futuresDailyHistoryMapper.batchInsertFuturesDailyHistory(futuresDailyHistoryList); + } + } + + private static FuturesDailyHistory getFuturesDailyHistory(List item, TuShareParams tuShareParams) { + SimpleDateFormat dateFormat = new SimpleDateFormat("yyyyMMdd"); + FuturesDailyHistory futuresDailyHistory = new FuturesDailyHistory(); + futuresDailyHistory.setId(IdWorker.getId()); + futuresDailyHistory.setFutureId(tuShareParams.getTs_id()); + futuresDailyHistory.setCreateBy(SecurityUtils.getUsername()); + futuresDailyHistory.setCreateTime(DateUtils.getNowDate()); + futuresDailyHistory.setTsCode(item.get(0)); + try { + futuresDailyHistory.setTradeDate(dateFormat.parse(item.get(1))); + } catch (ParseException e) { + throw new RuntimeException(e); + } + if(item.get(2)!=null){ + futuresDailyHistory.setPreClose(Double.parseDouble(item.get(2))); + } + if(item.get(3)!=null){ + futuresDailyHistory.setPreSettle(Double.parseDouble(item.get(3))); + } + if(item.get(4)!=null){ + futuresDailyHistory.setOpen(Double.parseDouble(item.get(4))); + } + if(item.get(5)!=null){ + futuresDailyHistory.setHigh(Double.parseDouble(item.get(5))); + } + if(item.get(6)!=null){ + futuresDailyHistory.setLow(Double.parseDouble(item.get(6))); + } + if(item.get(7)!=null){ + futuresDailyHistory.setClose(Double.parseDouble(item.get(7))); + } + if(item.get(8)!=null){ + futuresDailyHistory.setSettle(Double.parseDouble(item.get(8))); + } + if(item.get(9)!=null){ + futuresDailyHistory.setChange1(Double.parseDouble(item.get(9))); + } + if(item.get(10)!=null){ + futuresDailyHistory.setChange2(Double.parseDouble(item.get(10))); + } + + if(item.get(11)!=null){ + futuresDailyHistory.setVol(Double.parseDouble(item.get(11))); + } + if(item.get(12)!=null){ + futuresDailyHistory.setAmount(Double.parseDouble(item.get(12))); + } + if(item.get(13)!=null){ + futuresDailyHistory.setOi(Double.parseDouble(item.get(13))); + } + if(item.get(14)!=null){ + futuresDailyHistory.setOiChg(Double.parseDouble(item.get(14))); + } + return futuresDailyHistory; + } + + + /** + * 同步当天股票日行情历史 + * + * @return 结果 + */ + @Override + public void synTodayFuturesDailyHistory() { + List futureBaseInforVos=futureBaseInforMapper.selectFutureBaseInforList(new FutureBaseInforDto()); + // + for (FutureBaseInforVo base : futureBaseInforVos) { + TuShare tuShare = new TuShare(); + tuShare.setToken(tushareToken); + tuShare.setApi_name("fut_daily"); + TuShareParams tuShareParams = new TuShareParams(); + SimpleDateFormat dateFormat = new SimpleDateFormat("yyyyMMdd"); + tuShareParams.setTs_code(base.getTsCode()); + tuShareParams.setTs_id(base.getId()); + tuShareParams.setStart_date(dateFormat.format(new Date())); + tuShareParams.setEnd_date(dateFormat.format(new Date())); + tuShare.setParams(tuShareParams); + Gson gson = new Gson(); + JsonObject json = gson.toJsonTree(tuShare).getAsJsonObject(); + Map headers = new HashMap(); + headers.put("X-Ca-Signature-Headers", "x-ca-key,x-ca-timestamp"); + String returnString = HttpUtils.sendSSLPost(tushareUrl, null, JSONObject.parseObject(json.toString()), headers); + com.alibaba.fastjson.JSONObject jsonObject = com.alibaba.fastjson.JSONObject.parseObject(returnString); + TuShareData data = JSON.parseObject(jsonObject.getString("data"), TuShareData.class); + List> itemList = data.getItems(); + List futuresDailyHistoryList = new ArrayList<>(); + for (List item : itemList) { + FuturesDailyHistory futuresDailyHistory = getFuturesDailyHistory(item,tuShare.getParams()); + futuresDailyHistoryList.add(futuresDailyHistory); + } + //批量插入数据 + if(futuresDailyHistoryList.size()>0){ + futuresDailyHistoryMapper.batchInsertFuturesDailyHistory(futuresDailyHistoryList); + } + } + + } } diff --git a/intc-modules/intc-invest/src/main/java/com/intc/invest/service/impl/StocksDailyHistoryServiceImpl.java b/intc-modules/intc-invest/src/main/java/com/intc/invest/service/impl/StocksDailyHistoryServiceImpl.java index d962ede..8fe5f6e 100644 --- a/intc-modules/intc-invest/src/main/java/com/intc/invest/service/impl/StocksDailyHistoryServiceImpl.java +++ b/intc-modules/intc-invest/src/main/java/com/intc/invest/service/impl/StocksDailyHistoryServiceImpl.java @@ -111,7 +111,7 @@ public class StocksDailyHistoryServiceImpl implements IStocksDailyHistoryService */ @Override public int deleteStocksDailyHistoryByIds(Long[] ids) { - return stocksDailyHistoryMapper.removeStocksDailyHistoryByIds(ids); + return stocksDailyHistoryMapper.deleteStocksDailyHistoryByIds(ids); } /** diff --git a/intc-modules/intc-invest/src/main/java/com/intc/job/controller/InvestJob.java b/intc-modules/intc-invest/src/main/java/com/intc/job/controller/InvestJob.java index 62362c2..a0205e8 100644 --- a/intc-modules/intc-invest/src/main/java/com/intc/job/controller/InvestJob.java +++ b/intc-modules/intc-invest/src/main/java/com/intc/job/controller/InvestJob.java @@ -2,6 +2,7 @@ package com.intc.job.controller; import com.intc.common.core.utils.DateUtils; import com.intc.common.core.web.domain.AjaxResult; +import com.intc.invest.service.IFuturesDailyHistoryService; import com.intc.invest.service.IMTService; import com.intc.invest.service.IStocksDailyHistoryService; import com.intc.invest.service.IUserService; @@ -34,6 +35,9 @@ public class InvestJob @Resource private IStocksDailyHistoryService stocksDailyHistoryService; + @Resource + private IFuturesDailyHistoryService futuresDailyHistoryService; + @PostMapping("/generateUnpaidCreditBill") public AjaxResult generateUnpaidCreditBill() { @@ -134,6 +138,18 @@ public class InvestJob return AjaxResult.success(); } + /** + * 同步当日期货日数据 + */ + @PostMapping("/synFuturesDailyHistory") + public AjaxResult synTodayFuturesDailyHistory() + { + System.out.println("================================开始同步当天期货日行情数据("+ DateUtils.getTime() +")================================="); + futuresDailyHistoryService.synTodayFuturesDailyHistory(); + System.out.println("================================结束同步当天期货日行情数据("+ DateUtils.getTime() +")================================="); + return AjaxResult.success(); + } + diff --git a/intc-modules/intc-invest/src/main/resources/mapper/invest/FuturesDailyHistoryMapper.xml b/intc-modules/intc-invest/src/main/resources/mapper/invest/FuturesDailyHistoryMapper.xml index c7f26a5..ff6ba17 100644 --- a/intc-modules/intc-invest/src/main/resources/mapper/invest/FuturesDailyHistoryMapper.xml +++ b/intc-modules/intc-invest/src/main/resources/mapper/invest/FuturesDailyHistoryMapper.xml @@ -28,17 +28,61 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" + + + - select a.id, a.ts_code, a.trade_date, a.pre_close, a.pre_settle, a.open, a.high, a.low, a.close, a.settle, a.change1, a.vol, a.amount, a.change2, a.oi, a.oi_chg, a.delv_settle, a.remark, a.create_by, a.create_time, a.update_by, a.update_time, a.del_flag from futures_daily_history a + select + a.id, + a.ts_code, + a.trade_date, + a.future_id, + a.pre_close, + a.pre_settle, + a.open, + a.high, + a.low, + a.close, + a.settle, + a.change1, + a.vol, + a.amount, + a.change2, + a.oi, + a.oi_chg, + a.delv_settle, + a.remark, + a.create_by, + a.create_time, + a.update_by, + a.update_time, + a.del_flag, + ifbi.name as future_name, + ie.short_name as exchange_name + from + futures_daily_history a + left join invest_future_base_infor ifbi on + ifbi.id = a.future_id + left join invest_future_standard_infor ifsi on + ifsi.id = ifbi.standard_id + left join invest_exchange ie on + ie.id = ifsi.exchange_id