Commit efbe29e53e1bd51f7b3bba3b74223e4ee282c06a
1 parent
c959f812
票务数据接口加密验证
Showing
4 changed files
with
52 additions
and
6 deletions
src/main/java/com/example/demo/SaticScheduleTask.java
| 1 | package com.example.demo; | 1 | package com.example.demo; |
| 2 | 2 | ||
| 3 | 3 | ||
| 4 | +import cn.hutool.crypto.digest.DigestUtil; | ||
| 5 | +import cn.hutool.http.HttpRequest; | ||
| 6 | +import cn.hutool.http.HttpResponse; | ||
| 4 | import cn.hutool.http.HttpUtil; | 7 | import cn.hutool.http.HttpUtil; |
| 5 | import com.alibaba.fastjson.JSON; | 8 | import com.alibaba.fastjson.JSON; |
| 6 | import com.alibaba.fastjson.JSONObject; | 9 | import com.alibaba.fastjson.JSONObject; |
| 10 | +import com.example.demo.mapper.db1.SiteMapper1; | ||
| 7 | import com.example.demo.model.Scheduling; | 11 | import com.example.demo.model.Scheduling; |
| 8 | import com.example.demo.model.TJRLDB; | 12 | import com.example.demo.model.TJRLDB; |
| 9 | import com.example.demo.service.Contrast; | 13 | import com.example.demo.service.Contrast; |
| @@ -15,9 +19,11 @@ import org.springframework.scheduling.annotation.EnableScheduling; | @@ -15,9 +19,11 @@ import org.springframework.scheduling.annotation.EnableScheduling; | ||
| 15 | import org.springframework.scheduling.annotation.Scheduled; | 19 | import org.springframework.scheduling.annotation.Scheduled; |
| 16 | import org.springframework.stereotype.Component; | 20 | import org.springframework.stereotype.Component; |
| 17 | import javax.annotation.PostConstruct; | 21 | import javax.annotation.PostConstruct; |
| 22 | +import java.time.LocalDate; | ||
| 18 | import java.time.LocalDateTime; | 23 | import java.time.LocalDateTime; |
| 19 | import java.time.format.DateTimeFormatter; | 24 | import java.time.format.DateTimeFormatter; |
| 20 | import java.util.*; | 25 | import java.util.*; |
| 26 | +import java.util.stream.Collectors; | ||
| 21 | 27 | ||
| 22 | /** | 28 | /** |
| 23 | * @author Hill | 29 | * @author Hill |
| @@ -34,21 +40,30 @@ public class SaticScheduleTask { | @@ -34,21 +40,30 @@ public class SaticScheduleTask { | ||
| 34 | @Autowired | 40 | @Autowired |
| 35 | private Contrast contrast; | 41 | private Contrast contrast; |
| 36 | 42 | ||
| 43 | + @Autowired | ||
| 44 | + private SiteMapper1 siteMapper1; | ||
| 37 | 45 | ||
| 38 | 46 | ||
| 39 | private static DateTimeFormatter tdf=DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm"); | 47 | private static DateTimeFormatter tdf=DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm"); |
| 40 | 48 | ||
| 41 | 49 | ||
| 50 | + private String pwd="qaz#123_abc"; | ||
| 42 | 51 | ||
| 43 | - | ||
| 44 | - @Scheduled(cron = "0 0/5 * * * ?") | ||
| 45 | - //@PostConstruct | 52 | + @Scheduled(cron = "0 0 */4 * * ?") |
| 53 | + @PostConstruct | ||
| 46 | void getArrivalInfos(){ | 54 | void getArrivalInfos(){ |
| 47 | logger.info("票务数据缓存加载: " + LocalDateTime.now()); | 55 | logger.info("票务数据缓存加载: " + LocalDateTime.now()); |
| 48 | try { | 56 | try { |
| 49 | - LocalDateTime now=LocalDateTime.now(); | 57 | + LocalDateTime now= LocalDate.now().atStartOfDay(); |
| 50 | /*DateTimeFormatter tdf=DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm"); | 58 | /*DateTimeFormatter tdf=DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm"); |
| 51 | now=LocalDateTime.parse("2025-03-14 00:00",tdf);*/ | 59 | now=LocalDateTime.parse("2025-03-14 00:00",tdf);*/ |
| 60 | + LocalDateTime rq=now.minusDays(1); | ||
| 61 | + DateTimeFormatter tdf=DateTimeFormatter.ofPattern("yyyy-MM-dd"); | ||
| 62 | + int count=siteMapper1.countResult(rq.format(tdf)); | ||
| 63 | + if(count>0){ | ||
| 64 | + logger.info("==============================="+rq.format(tdf)+"已生成================================"); | ||
| 65 | + return; | ||
| 66 | + } | ||
| 52 | List<Map<String,List<Scheduling>>> result=contrast.getSchedulingS(now,1); | 67 | List<Map<String,List<Scheduling>>> result=contrast.getSchedulingS(now,1); |
| 53 | contrast.getSchedulingS=result.get(0); | 68 | contrast.getSchedulingS=result.get(0); |
| 54 | contrast.getSchedulingSSell=result.get(1); | 69 | contrast.getSchedulingSSell=result.get(1); |
| @@ -56,6 +71,12 @@ public class SaticScheduleTask { | @@ -56,6 +71,12 @@ public class SaticScheduleTask { | ||
| 56 | DateTimeFormatter dtf=DateTimeFormatter.ofPattern("yyyyMMdd"); | 71 | DateTimeFormatter dtf=DateTimeFormatter.ofPattern("yyyyMMdd"); |
| 57 | String date=now.minusDays(1).format(dtf); | 72 | String date=now.minusDays(1).format(dtf); |
| 58 | List<TJRLDB> tjrldbs=loadTJRL(date); | 73 | List<TJRLDB> tjrldbs=loadTJRL(date); |
| 74 | + tjrldbs.stream() | ||
| 75 | + .collect(Collectors.toMap( | ||
| 76 | + tjrldb -> Arrays.asList(tjrldb.getTJRLPOSID(), tjrldb.getPOS_SEQ_ID(), tjrldb.getTJRLCARDNO(), tjrldb.getCOUNT()), // 创建复合键 | ||
| 77 | + tjrldb -> tjrldb, | ||
| 78 | + (existing, replacement) -> existing // 当键冲突时,保留现有的元素 | ||
| 79 | + )).values().stream().collect(Collectors.toList()); // 将Map转换回List | ||
| 59 | logger.info("===============================交易数"+tjrldbs.size()+",读取文件结束================================"); | 80 | logger.info("===============================交易数"+tjrldbs.size()+",读取文件结束================================"); |
| 60 | contrast.filterCardList(tjrldbs); | 81 | contrast.filterCardList(tjrldbs); |
| 61 | } catch (Exception e) { | 82 | } catch (Exception e) { |
| @@ -67,10 +88,19 @@ public class SaticScheduleTask { | @@ -67,10 +88,19 @@ public class SaticScheduleTask { | ||
| 67 | public List<TJRLDB> loadTJRL(String date){ | 88 | public List<TJRLDB> loadTJRL(String date){ |
| 68 | List<TJRLDB> listMap = new ArrayList<>(); | 89 | List<TJRLDB> listMap = new ArrayList<>(); |
| 69 | try { | 90 | try { |
| 91 | + String md5Hex = DigestUtil.md5Hex(pwd); | ||
| 92 | + // 转换为32位大写字符串 | ||
| 93 | + String md5HexUpperCase = md5Hex.toUpperCase(); | ||
| 70 | JSONObject params=new JSONObject(); | 94 | JSONObject params=new JSONObject(); |
| 71 | params.put("cdate",date); | 95 | params.put("cdate",date); |
| 72 | - String sb = HttpUtil.post("http://10.10.150.53:8184/cardSys/data/act",params.toJSONString()); | ||
| 73 | - JSONObject jsonObject=JSONObject.parseObject(sb.toString()); | 96 | + HttpResponse resp = HttpRequest.post("http://10.10.150.53:8184/cardSys/data/act") |
| 97 | + .header("Content-Type", "application/json") | ||
| 98 | + .header("username", "lgpw_act") | ||
| 99 | + .header("password", md5HexUpperCase) | ||
| 100 | + .header("timestamp", String.valueOf(System.currentTimeMillis())) | ||
| 101 | + .body(params.toString()) // 将JSON对象转为字符串 | ||
| 102 | + .execute(); | ||
| 103 | + JSONObject jsonObject=JSONObject.parseObject(resp.body()); | ||
| 74 | if(jsonObject.getString("code").equals("0")){ | 104 | if(jsonObject.getString("code").equals("0")){ |
| 75 | String ja=jsonObject.getString("data"); | 105 | String ja=jsonObject.getString("data"); |
| 76 | List<Map> result= JSON.parseArray(ja,Map.class); | 106 | List<Map> result= JSON.parseArray(ja,Map.class); |
| @@ -91,6 +121,7 @@ public class SaticScheduleTask { | @@ -91,6 +121,7 @@ public class SaticScheduleTask { | ||
| 91 | tjrl.setTJRLORGAMT(String.valueOf(map.get("ORIGNAL_TXN_AMOUNT")));//优惠前原始票价,单位:分 | 121 | tjrl.setTJRLORGAMT(String.valueOf(map.get("ORIGNAL_TXN_AMOUNT")));//优惠前原始票价,单位:分 |
| 92 | tjrl.setTJRLTXFG(String.valueOf(map.get("CARD_SPEC")));//卡规范(01—建设部卡、02—交通部卡、03—二维码扫码) | 122 | tjrl.setTJRLTXFG(String.valueOf(map.get("CARD_SPEC")));//卡规范(01—建设部卡、02—交通部卡、03—二维码扫码) |
| 93 | tjrl.setCOUNT(String.valueOf(map.get("COUNT")));//卡计数器 | 123 | tjrl.setCOUNT(String.valueOf(map.get("COUNT")));//卡计数器 |
| 124 | + tjrl.setPOS_SEQ_ID(String.valueOf(map.get("POS_SEQ_ID")));//POS流水号 | ||
| 94 | listMap.add(tjrl); | 125 | listMap.add(tjrl); |
| 95 | } | 126 | } |
| 96 | } | 127 | } |
src/main/java/com/example/demo/mapper/db1/SiteMapper1.java
| @@ -29,4 +29,7 @@ public interface SiteMapper1 { | @@ -29,4 +29,7 @@ public interface SiteMapper1 { | ||
| 29 | 29 | ||
| 30 | @DS("db1") | 30 | @DS("db1") |
| 31 | List<TJRLDB> getRecords(Map<String, Object> map); | 31 | List<TJRLDB> getRecords(Map<String, Object> map); |
| 32 | + | ||
| 33 | + @DS("db1") | ||
| 34 | + int countResult(String rq); | ||
| 32 | } | 35 | } |
| 33 | \ No newline at end of file | 36 | \ No newline at end of file |
src/main/java/com/example/demo/model/TJRL.java
| @@ -49,6 +49,7 @@ public class TJRL implements Cloneable { | @@ -49,6 +49,7 @@ public class TJRL implements Cloneable { | ||
| 49 | private String TRAD_ID; | 49 | private String TRAD_ID; |
| 50 | private String COUNT;//计数器 | 50 | private String COUNT;//计数器 |
| 51 | private String lineId; | 51 | private String lineId; |
| 52 | + private String POS_SEQ_ID; | ||
| 52 | public TJRL(){ | 53 | public TJRL(){ |
| 53 | 54 | ||
| 54 | } | 55 | } |
| @@ -400,4 +401,12 @@ public class TJRL implements Cloneable { | @@ -400,4 +401,12 @@ public class TJRL implements Cloneable { | ||
| 400 | public void setLineId(String lineId) { | 401 | public void setLineId(String lineId) { |
| 401 | this.lineId = lineId; | 402 | this.lineId = lineId; |
| 402 | } | 403 | } |
| 404 | + | ||
| 405 | + public String getPOS_SEQ_ID() { | ||
| 406 | + return POS_SEQ_ID; | ||
| 407 | + } | ||
| 408 | + | ||
| 409 | + public void setPOS_SEQ_ID(String POS_SEQ_ID) { | ||
| 410 | + this.POS_SEQ_ID = POS_SEQ_ID; | ||
| 411 | + } | ||
| 403 | } | 412 | } |
src/main/resources/mapping/db1/Site-mapper1.xml
| @@ -70,5 +70,8 @@ | @@ -70,5 +70,8 @@ | ||
| 70 | from ${table} where TJRLRDATE >= '${start}' and TJRLRDATE < '${end}' | 70 | from ${table} where TJRLRDATE >= '${start}' and TJRLRDATE < '${end}' |
| 71 | </select> | 71 | </select> |
| 72 | 72 | ||
| 73 | + <select id="countResult" resultType="int"> | ||
| 74 | + select count(*) from passenger_flow.t_jc_result where TJRLRDATE = #{rq} | ||
| 75 | + </select> | ||
| 73 | 76 | ||
| 74 | </mapper> | 77 | </mapper> |
| 75 | \ No newline at end of file | 78 | \ No newline at end of file |