diff --git a/src/main/java/com/xiang/common/enums/ScheduleEnums.java b/src/main/java/com/xiang/common/enums/ScheduleEnums.java index bf548a8..c51f438 100644 --- a/src/main/java/com/xiang/common/enums/ScheduleEnums.java +++ b/src/main/java/com/xiang/common/enums/ScheduleEnums.java @@ -39,6 +39,7 @@ public enum ScheduleEnums { ZLB_ORDER_CREATE_TASK(3, "zlb", "zlbOrderCreateTask"), ZLB_USER_CONFIG_TASK(3, "zlb", "zlbUserConfigTask"), ZLB_ORDER_QUERY_TASK(3, "zlb", "zlbOrderQueryTask"), + ZLB_ORDER_JL_TASK(3, "zlb", "zlbOrderJlTask"), /** diff --git a/src/main/java/com/xiang/common/manage/jntyzx/zlb/IZlbJlUserInfoManage.java b/src/main/java/com/xiang/common/manage/jntyzx/zlb/IZlbJlUserInfoManage.java new file mode 100644 index 0000000..659382d --- /dev/null +++ b/src/main/java/com/xiang/common/manage/jntyzx/zlb/IZlbJlUserInfoManage.java @@ -0,0 +1,15 @@ +package com.xiang.common.manage.jntyzx.zlb; + +import com.baomidou.mybatisplus.extension.service.IService; +import com.xiang.common.pojo.jntyzx.zlb.ZlbJlUserInfo; + +import java.util.List; + +/** + * @Author: xiang + * @Date: 2026-05-12 09:18 + */ +public interface IZlbJlUserInfoManage extends IService { + + List getJlUsers(); +} diff --git a/src/main/java/com/xiang/common/manage/jntyzx/zlb/ZlbJlUserInfoManageImpl.java b/src/main/java/com/xiang/common/manage/jntyzx/zlb/ZlbJlUserInfoManageImpl.java new file mode 100644 index 0000000..8b6bb77 --- /dev/null +++ b/src/main/java/com/xiang/common/manage/jntyzx/zlb/ZlbJlUserInfoManageImpl.java @@ -0,0 +1,27 @@ +package com.xiang.common.manage.jntyzx.zlb; + +import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; +import com.baomidou.mybatisplus.core.toolkit.Wrappers; +import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; +import com.xiang.common.mapper.ZlbJlUserInfoMapper; +import com.xiang.common.pojo.jntyzx.zlb.ZlbJlUserInfo; +import com.xiang.common.utils.DateUtils; +import org.springframework.stereotype.Service; + +import java.time.LocalDate; +import java.util.List; + +/** + * @Author: xiang + * @Date: 2026-05-12 09:18 + */ +@Service +public class ZlbJlUserInfoManageImpl extends ServiceImpl implements IZlbJlUserInfoManage { + @Override + public List getJlUsers() { + LambdaQueryWrapper lambdaQueryWrapper = Wrappers.lambdaQuery(); + lambdaQueryWrapper.eq(ZlbJlUserInfo::getDay, DateUtils.getDateFromDate(LocalDate.now())); + lambdaQueryWrapper.eq(ZlbJlUserInfo::getDay, DateUtils.getWeekDay(LocalDate.now())); + return baseMapper.selectList(lambdaQueryWrapper); + } +} diff --git a/src/main/java/com/xiang/service/module/jntyzx/zlb/schedule/ZlbJlTask.java b/src/main/java/com/xiang/service/module/jntyzx/zlb/schedule/ZlbJlTask.java new file mode 100644 index 0000000..d2d8720 --- /dev/null +++ b/src/main/java/com/xiang/service/module/jntyzx/zlb/schedule/ZlbJlTask.java @@ -0,0 +1,80 @@ +package com.xiang.service.module.jntyzx.zlb.schedule; + +import com.xiang.common.enums.ScheduleEnums; +import com.xiang.common.factory.JntyzxDingTalkFactory; +import com.xiang.common.factory.schedule.BaseScheduleTaskTemplate; +import com.xiang.common.manage.jntyzx.zlb.IZlbJlUserInfoManage; +import com.xiang.common.manage.jntyzx.zlb.ZlbTokenInfoService; +import com.xiang.common.pojo.schedule.TaskResult; +import com.xiang.common.service.IScheduleOpeningConfigService; +import com.xiang.common.service.IScheduleRunLogService; +import lombok.extern.slf4j.Slf4j; +import org.springframework.stereotype.Component; + +/** + * zlb场地捡漏任务 + * + * @Author: xiang + * @Date: 2026-05-12 09:16 + */ +@Component +@Slf4j +public class ZlbJlTask extends BaseScheduleTaskTemplate { + + private final ZlbTokenInfoService zlbTokenInfoService; + private final JntyzxDingTalkFactory jntyzxDingTalkFactory; + private final IZlbJlUserInfoManage zlbJlUserInfoManage; + + + public ZlbJlTask(IScheduleOpeningConfigService scheduleOpeningConfigService, + IScheduleRunLogService scheduleRunLogService, + ZlbTokenInfoService zlbTokenInfoService, + JntyzxDingTalkFactory jntyzxDingTalkFactory, + IZlbJlUserInfoManage zlbJlUserInfoManage) { + super(scheduleOpeningConfigService, scheduleRunLogService); + this.zlbTokenInfoService = zlbTokenInfoService; + this.jntyzxDingTalkFactory = jntyzxDingTalkFactory; + this.zlbJlUserInfoManage = zlbJlUserInfoManage; + } + + @Override + protected String getTaskName() { + return ScheduleEnums.ZLB_ORDER_JL_TASK.getTaskName(); + } + + @Override + protected Integer getModule() { + return ScheduleEnums.ZLB_ORDER_JL_TASK.getModuleCode(); + } + + @Override + protected String getModuleName() { + return ScheduleEnums.ZLB_ORDER_JL_TASK.getModule(); + } + + @Override + protected TaskResult doExecute(Object validatedParams) throws Exception { + +// TaskResult taskResult = new TaskResult(); +// taskResult.setSuccess(Boolean.TRUE); +// List jlUsers = zlbJlUserInfoManage.getJlUsers(); +// if (CollectionUtils.isEmpty(jlUsers)) { +// taskResult.setParams("暂无配置捡漏用户"); +// return taskResult; +// } +// +// List allUsers = zlbTokenInfoService.getAllUsers(); +// if (CollectionUtils.isEmpty(allUsers)) { +// taskResult.setParams("用户信息为空"); +// return taskResult; +// } +// Map userMap = allUsers.stream().collect(Collectors.toMap(ZlbTokenInfo::getName, Function.identity(), (a, b) -> a)); +// for (ZlbJlUserInfo jlUser : jlUsers) { +// if (userMap.containsKey(jlUser.getName())) { +// +// } +// } + + return null; + } +} diff --git a/src/main/java/com/xiang/service/module/jntyzx/zlb/server/JtZlbController.java b/src/main/java/com/xiang/service/module/jntyzx/zlb/server/JtZlbController.java new file mode 100644 index 0000000..4b50e92 --- /dev/null +++ b/src/main/java/com/xiang/service/module/jntyzx/zlb/server/JtZlbController.java @@ -0,0 +1,42 @@ +package com.xiang.service.module.jntyzx.zlb.server; + +import com.xiang.service.module.jntyzx.zlb.service.ZlbService; +import lombok.RequiredArgsConstructor; +import lombok.extern.slf4j.Slf4j; +import org.springframework.web.bind.annotation.GetMapping; +import org.springframework.web.bind.annotation.RequestParam; +import org.springframework.web.bind.annotation.RestController; + +import java.util.concurrent.ExecutorService; +import java.util.concurrent.Executors; + +/** + * @Author: xiang + * @Date: 2026-05-12 09:27 + */ +@Slf4j +@RestController +@RequiredArgsConstructor +public class JtZlbController { + + private final ZlbService zlbService; + private static final ExecutorService executorService = Executors.newFixedThreadPool(1); + + @GetMapping("/token") + public void token(@RequestParam("name") String name, @RequestParam("token") String token) throws Exception { + zlbService.token(token, name); + } + + @GetMapping("/zlbJl") + public void zlbJlTask(@RequestParam("name") String name, @RequestParam("date") String date, @RequestParam("time") String time, @RequestParam("interval") Long interval) throws Exception { + + log.info("[zlbJl] zlb自定义捡漏任务启动!用户:{}, 时间:{}", name, date); + executorService.submit(() -> { + try { + zlbService.jianlou(name, date, time, interval); + } catch (Exception e) { + throw new RuntimeException(e); + } + }); + } +} diff --git a/src/main/java/com/xiang/service/module/jntyzx/zlb/service/ZlbService.java b/src/main/java/com/xiang/service/module/jntyzx/zlb/service/ZlbService.java index fe49841..c24b2a0 100644 --- a/src/main/java/com/xiang/service/module/jntyzx/zlb/service/ZlbService.java +++ b/src/main/java/com/xiang/service/module/jntyzx/zlb/service/ZlbService.java @@ -14,30 +14,20 @@ import java.util.Map; * @Description:*** */ public interface ZlbService { - void queryZLbSiteInfo(String ymdDate,Integer type) throws Exception; + void queryZLbSiteInfo(String ymdDate, Integer type) throws Exception; String getKey(String tokenId, OkHttpUtil client) throws IOException; - - void testJs(String token, String name) throws IOException; + void token(String token, String name) throws IOException; Map getHeaders(String tokenId); String buildSiteOrder(ZlbUserInfo zlbUserInfo, String secretKey, String day) throws Exception; - void createOrder(ZlbUserInfo zlbUserInfo) throws Exception; - - String createOrderWq(ZlbUserInfo zlbUserInfo) throws Exception; - String buildNewOrder(String siteOrderDetailsStr, OkHttpUtil client) throws IOException; void deleteRedis(String name); - void installRedis(String name); + void jianlou(String name, String day, String time, long interval) throws Exception; - void jianlou(String name, String day,long time) throws Exception; - - void refundOrder(String refundName, String day) throws Exception; - - void cancelOrder(String cancelName, String day) throws Exception; } diff --git a/src/main/java/com/xiang/service/module/jntyzx/zlb/service/ZlbServiceImpl.java b/src/main/java/com/xiang/service/module/jntyzx/zlb/service/ZlbServiceImpl.java index 1dc4cab..23a9232 100644 --- a/src/main/java/com/xiang/service/module/jntyzx/zlb/service/ZlbServiceImpl.java +++ b/src/main/java/com/xiang/service/module/jntyzx/zlb/service/ZlbServiceImpl.java @@ -11,7 +11,6 @@ import com.baomidou.mybatisplus.core.toolkit.Wrappers; import com.xiang.common.factory.JntyzxDingTalkFactory; import com.xiang.common.manage.jntyzx.zlb.ZlbSiteInfoService; import com.xiang.common.manage.jntyzx.zlb.ZlbTokenInfoService; -import com.xiang.common.manage.jntyzx.zlb.ZlbUserInfoService; import com.xiang.common.pojo.jntyzx.zlb.ZlbCaptchaResp; import com.xiang.common.pojo.jntyzx.zlb.ZlbOrderInfo; import com.xiang.common.pojo.jntyzx.zlb.ZlbOrderJson; @@ -24,7 +23,6 @@ import com.xiang.common.pojo.jntyzx.zlb.ZlbUserInfo; import com.xiang.common.service.ICodeService; import com.xiang.common.utils.AESECBUtils; import com.xiang.common.utils.Base64ImageScaler; -import com.xiang.common.utils.DateUtils; import com.xiang.common.utils.OkHttpUtil; import com.xiang.common.utils.ZlbCaptchaTrackUtil; import com.xiang.service.module.jntyzx.zlb.constants.ZlbUrlConstants; @@ -62,8 +60,6 @@ public class ZlbServiceImpl implements ZlbService { @Autowired private JntyzxDingTalkFactory jntyzxDingTalkFactory; @Autowired - private ZlbUserInfoService zlbUserInfoService; - @Autowired private RedisTemplate redisTemplate; @Autowired private ICodeService codeService; @@ -219,34 +215,6 @@ public class ZlbServiceImpl implements ZlbService { return ""; } - @Override - public void createOrder(ZlbUserInfo zlbUserInfo) throws Exception { - Date date = DateUtils.addDate(new Date(), 1); - String day = DateUtils.format(date, DateUtils.ENUM_FORMAT_YMD); - String name = zlbUserInfo.getName(); - String placeName = zlbUserInfo.getPlaceName(); - String siteTimeName = zlbUserInfo.getSiteTimeName(); - //获取Token - ZlbTokenInfo zlbTokenInfo = zlbTokenInfoService.queryByName(name); - OkHttpUtil client = OkHttpUtil.getInstance(); - String tokenId = zlbTokenInfo.getTokenId(); - String secretKey = getKey(tokenId, client); - //组装场地信息 - String siteOrderDetailsStr = buildSiteOrder(zlbUserInfo, secretKey, day); - //加密 - - for (int i = 1; i < 12; i++) { - String response1 = sendOrder(siteOrderDetailsStr, zlbTokenInfo.getTokenId(), client); - String str = buildOrder(name, response1, placeName, siteTimeName); - if ("下单成功".equals(str)) { - return; - } - if ("您选择场地已被售出".equals(str)) { - return; - } - } - } - public String buildOrder(String name, String response, String placeName, String siteTimeName) throws InterruptedException { String orderId = ""; log.info("订单接口返回结果==> \n {}", response); @@ -280,51 +248,6 @@ public class ZlbServiceImpl implements ZlbService { return orderId; } - @Override - public String createOrderWq(ZlbUserInfo zlbUserInfo) throws Exception { - String orderId = ""; - Date date = DateUtils.addDate(new Date(), 3); - String day = DateUtils.format(date, DateUtils.ENUM_FORMAT_YMD); - String name = zlbUserInfo.getName(); - String placeName = zlbUserInfo.getPlaceName(); - String siteTimeName = zlbUserInfo.getSiteTimeName(); - //获取Token - ZlbTokenInfo zlbTokenInfo = zlbTokenInfoService.queryByName(name); - String siteOrderDetailsStr = buildSiteOrderList(zlbUserInfo, zlbTokenInfo.getSecretKey(), day); - //组装参数加密 - for (int i = 1; i < 10; i++) { - String response = sendOrderWq(siteOrderDetailsStr, zlbTokenInfo.getTokenId()); - log.info("订单接口返回结果==> \n {}", response); - JSONObject jsonObject = JSONObject.parseObject(response); - if (jsonObject.getInteger("code") == 200) { - jntyzxDingTalkFactory.sendMsg(name + "订单接口下单返回成功请2分钟内付款√√√√√√场地号:" + placeName + "时间:" + siteTimeName); - JSONObject data = jsonObject.getJSONObject("data"); - orderId = data.getString("orderId"); - return orderId; - } else if (response.contains("下单失败")) { - jntyzxDingTalkFactory.sendMsg(response); - return ""; - } else if (response.contains("场地不在可售时间内")) { - jntyzxDingTalkFactory.sendMsg(response); - return ""; - } else if (response.contains("您选择场地已被售出")) { - jntyzxDingTalkFactory.sendMsg(name + "订单接口下单返回失败 \n" + response); - return ""; - } else if (response.contains("此票超过用户每日订场次数")) { - jntyzxDingTalkFactory.sendMsg(name + "订单接口下单返回失败 \n" + response); - return ""; - } else if (response.contains("您有一笔待支付的订场订单")) { - jntyzxDingTalkFactory.sendMsg(name + "订单接口下单返回失败 \n" + response); - Thread.sleep(1500); - } else if (response.contains("场地火爆")) { - log.info("{}场地火爆下单返回失败暂停1s下单 \n{}", name, response); - Thread.sleep(200); - } else { - jntyzxDingTalkFactory.sendMsg(name + "订单接口下单返回失败请检查日志重试第" + i + "次××××××==> \n" + response); - } - } - return orderId; - } private String sendOrderWq(String siteOrderDetailsStr, String tokenId) throws IOException { OkHttpUtil client = OkHttpUtil.getInstance(); @@ -450,15 +373,8 @@ public class ZlbServiceImpl implements ZlbService { } @Override - public void installRedis(String name) { - String redisKey = ZlbUrlConstants.REDIS_PREFIX + "_" + 123456 + "_" + name; - redisTemplate.opsForValue().set(redisKey, name); - redisTemplate.expire(redisKey, 1234, TimeUnit.SECONDS); - } - - @Override - public void jianlou(String name, String day, long time) throws Exception { - jntyzxDingTalkFactory.sendMsg(name + "自定义捡漏开始捡漏时间:" + day + " 捡漏人:" + name + " 捡漏间隔:" + time + "ms"); + public void jianlou(String name, String day, String time, long interval) throws Exception { + jntyzxDingTalkFactory.sendMsg(name + "自定义捡漏开始捡漏时间:" + day + " 捡漏人:" + name + " 捡漏间隔:" + interval + "ms"); //获取Token ZlbTokenInfo zlbTokenInfo = zlbTokenInfoService.queryByName(name); String tokenId = zlbTokenInfo.getTokenId(); @@ -490,12 +406,15 @@ public class ZlbServiceImpl implements ZlbService { if (StringUtils.isEmpty(siteInfo)) { return; } - // log.info("请求场地返回信息: \n {}", siteInfo); + log.info("请求场地返回信息: \n {}", siteInfo); jsonObject = JSONObject.parseObject(siteInfo); JSONObject data = jsonObject.getJSONObject("data"); String listString = data.getString("list"); zlbSiteInfos = JSONArray.parseArray(listString, ZlbSiteInfo.class); for (ZlbSiteInfo zlbSiteInfo : zlbSiteInfos) { + if (!StringUtils.equals(zlbSiteInfo.getDayEffectiveTimes(), time)) { + continue; + } Integer ticketType = zlbSiteInfo.getTicketType(); if (ticketType == 1) {//代表可以抢的场地号 jntyzxDingTalkFactory.sendMsg(day + "ZLb捡漏发现场地:" + zlbSiteInfo.getPlaceName() + "时间点:" + zlbSiteInfo.getDayEffectiveTimes()); @@ -539,7 +458,7 @@ public class ZlbServiceImpl implements ZlbService { startTime = System.currentTimeMillis(); } //休息5s - Thread.sleep(time); + Thread.sleep(interval); } catch (Exception e) { log.error("请求场地信息异常:{}", e.getMessage()); jntyzxDingTalkFactory.sendMsg(name + "ZLb自定义捡漏异常请查看日志"); @@ -551,91 +470,6 @@ public class ZlbServiceImpl implements ZlbService { jntyzxDingTalkFactory.sendMsg("自定义捡漏结束"); } - @Override - public void refundOrder(String refundName, String day) throws Exception { - //找到退款人的token - ZlbTokenInfo zlbTokenInfo = zlbTokenInfoService.getOne(new LambdaQueryWrapper().eq(ZlbTokenInfo::getName, refundName)); - if (zlbTokenInfo == null) { - jntyzxDingTalkFactory.sendMsg("退款失败,请检查是否录入退款人登录信息-->" + refundName); - } - OkHttpUtil client = OkHttpUtil.getInstance(); - //获取退款人的订单列表 - String s = client.postJson(ZlbUrlConstants.getOrderInfoUrl, getHeaders(zlbTokenInfo.getTokenId()), "{\"curPage\":1,\"maxPage\":10,\"state\":2,\"type\":2}"); - log.info("{}订单列表==> \n {}", refundName, s); - //获取当前日期下的orderId - JSONObject jsonObject = JSONObject.parseObject(s); - JSONObject data = jsonObject.getJSONObject("data"); - if (data.getInteger("total").equals(0)) { - jntyzxDingTalkFactory.sendMsg("退款失败,请检查是否存在待使用订单-->" + refundName); - return; - } - JSONArray list = data.getJSONArray("list"); - for (int i = 0; i < list.size(); i++) { - JSONObject jsonObject1 = list.getJSONObject(i); - String orderId = jsonObject1.getString("orderId"); - Integer stadiumId = jsonObject1.getInteger("stadiumId"); - String validity = jsonObject1.getString("validity"); - log.info("stadiumId:{} ,validity:{},orderId:{}", stadiumId, validity, orderId); - if (stadiumId.equals(49) && validity.contains(day)) { - //拿到订单详情 - String orderDetailStr = client.postJson(String.format(ZlbUrlConstants.getOrderDetailUrl, orderId), getHeaders(zlbTokenInfo.getTokenId()), "{}"); - log.info("{}订单详情==> \n {}", orderId, orderDetailStr); - JSONObject jsonObject2 = JSONObject.parseObject(orderDetailStr); - JSONObject data1 = jsonObject2.getJSONObject("data"); - JSONArray ticketInfos = data1.getJSONArray("ticketInfos"); - for (int j = 0; j < ticketInfos.size(); j++) { - JSONObject ticketInfo = ticketInfos.getJSONObject(j); - String detailOrderId = ticketInfo.getString("detailOrderId"); - //取消订单 - String cancelOrder = client.postJson(ZlbUrlConstants.getOrderRefundUrl, getHeaders(zlbTokenInfo.getTokenId()), String.format(ZlbUrlConstants.refundStr, orderId, detailOrderId)); - log.info("{}退款订单==> \n {}", refundName, cancelOrder); - if (cancelOrder.contains("退款成功")) { - jntyzxDingTalkFactory.sendMsg(refundName + "退款成功"); - } - } - } - - } - - } - - @Override - public void cancelOrder(String cancelName, String day) throws Exception { - //找到取消人的token - ZlbTokenInfo zlbTokenInfo = zlbTokenInfoService.getOne(new LambdaQueryWrapper().eq(ZlbTokenInfo::getName, cancelName)); - if (zlbTokenInfo == null) { - jntyzxDingTalkFactory.sendMsg("取消失败,请检查是否录入取消人登录信息-->" + cancelName); - } - OkHttpUtil client = OkHttpUtil.getInstance(); - //获取取消人的订单列表 - String s = client.postJson(ZlbUrlConstants.getOrderInfoUrl, getHeaders(zlbTokenInfo.getTokenId()), "{\"curPage\":1,\"maxPage\":10,\"state\":1,\"type\":2}"); - log.info("{}订单列表==> \n {}", cancelName, s); - //获取当前日期下的orderId - JSONObject jsonObject = JSONObject.parseObject(s); - JSONObject data = jsonObject.getJSONObject("data"); - if (data.getInteger("total").equals(0)) { - jntyzxDingTalkFactory.sendMsg("取消失败,请检查是否存在待使用订单-->" + cancelName); - return; - } - JSONArray list = data.getJSONArray("list"); - for (int i = 0; i < list.size(); i++) { - JSONObject jsonObject1 = list.getJSONObject(i); - String orderId = jsonObject1.getString("orderId"); - Integer stadiumId = jsonObject1.getInteger("stadiumId"); - String validity = jsonObject1.getString("validity"); - log.info("stadiumId:{} ,validity:{},orderId:{}", stadiumId, validity, orderId); - if (stadiumId.equals(49) && validity.contains(day)) { - //取消订单,并直接删除redis相关信息 - String cancelOrder = client.postJson(ZlbUrlConstants.getOrderCancelUrl, getHeaders(zlbTokenInfo.getTokenId()), String.format(ZlbUrlConstants.cancelStr, orderId)); - deleteRedis(orderId); - log.info("{}取消订单==> \n {}", cancelName, cancelOrder); - if (cancelOrder.contains("取消成功")) { - jntyzxDingTalkFactory.sendMsg(cancelName + "取消成功"); - } - } - } - } - private String sendPost(OkHttpUtil client, Map headers, String encrypt) throws IOException { String newOrderJson = buildNewOrder(encrypt, client); String response = null; @@ -649,7 +483,7 @@ public class ZlbServiceImpl implements ZlbService { } @Override - public void testJs(String token, String name) throws IOException { + public void token(String token, String name) throws IOException { log.info("获取到name:{},token:{}", name, token); LambdaQueryWrapper wrapper = Wrappers.lambdaQuery(); wrapper.eq(ZlbTokenInfo::getName, name);