Your Name 4 years ago
parent
commit
dfe7c2fc92

+ 1
- 0
src/main/java/com/yunzhi/niucai/common/ArrayUtils.java View File

88
     public static <T> int indexOf(T[] src, T search) {
88
     public static <T> int indexOf(T[] src, T search) {
89
         return Arrays.asList(src).indexOf(search);
89
         return Arrays.asList(src).indexOf(search);
90
     }
90
     }
91
+
91
 }
92
 }

+ 88
- 36
src/main/java/com/yunzhi/niucai/service/impl/TaLotteryResultServiceImpl.java View File

17
 
17
 
18
 import java.time.LocalDateTime;
18
 import java.time.LocalDateTime;
19
 import java.time.format.DateTimeFormatter;
19
 import java.time.format.DateTimeFormatter;
20
+import java.util.Arrays;
20
 import java.util.List;
21
 import java.util.List;
21
 
22
 
22
 /**
23
 /**
96
 
97
 
97
             // 中奖设置
98
             // 中奖设置
98
             List<TdLotteryPrize> prizeSettings = iTdLotteryPrizeService.getByLottery(lottery);
99
             List<TdLotteryPrize> prizeSettings = iTdLotteryPrizeService.getByLottery(lottery);
99
-            if (null == prizeSettings && prizeSettings.size() == 0) {
100
+            if (null == prizeSettings || prizeSettings.size() == 0) {
100
                 log.error(String.format("彩种 %s 没有开奖相关设置", lotteryId));
101
                 log.error(String.format("彩种 %s 没有开奖相关设置", lotteryId));
101
                 continue;
102
                 continue;
102
             }
103
             }
150
 //                    }
151
 //                    }
151
                 } catch (Exception e) {
152
                 } catch (Exception e) {
152
                     e.printStackTrace();
153
                     e.printStackTrace();
153
-                    continue;
154
+                    // continue;
154
                 }
155
                 }
155
             }
156
             }
156
         }
157
         }
171
 
172
 
172
         int winTotalCharges = 0;
173
         int winTotalCharges = 0;
173
         for (TaBettingPlanItem item : taBettingPlan.getItemList()) {
174
         for (TaBettingPlanItem item : taBettingPlan.getItemList()) {
175
+            // 是否中奖
176
+            boolean isWinning = false;
177
+            // 中奖金额
178
+            int winAmount = 0;
179
+
174
             try {
180
             try {
175
                 TaCustomerBettingItem bettingItem = getBettingItemMap(customerBetting.getItemList(), item);
181
                 TaCustomerBettingItem bettingItem = getBettingItemMap(customerBetting.getItemList(), item);
176
                 if (bettingItem == null) {
182
                 if (bettingItem == null) {
178
                     continue;
184
                     continue;
179
                 }
185
                 }
180
 
186
 
181
-                String firstNums = item.getFirstNums();
182
-                if (StringUtils.isEmpty(firstNums)) {
183
-                    log.error(String.format("ID %s 的投注明细无前区内容", customerBetting.getBettingId()));
184
-                    continue;
185
-                }
186
-
187
-                // 中奖金额
188
-                int winAmount = 0;
189
-                // 是否中奖
190
-                boolean isWinning = false;
191
-
192
-                // 排列五
187
+                // 排列三直选, 排列五 都是依靠比对数字位是否一致来决定是否中奖的
193
                 if (lottery.getLotteryId().equals(CommConstants.LOTTERY_P5)) {
188
                 if (lottery.getLotteryId().equals(CommConstants.LOTTERY_P5)) {
194
-                    TaLotteryResultDetail resultDetail = lotteryResult.getDetailList().get(0);
195
-                    isWinning = BizUtils.checkPrizeNumStrict(lotteryResult.getFirstResult().split(","), firstNums.split(","));
189
+                    isWinning = BizUtils.checkPrizeNumStrict(lotteryResult.getFirstResult().split(","), item.getFirstNums().split(","));
196
                     if (isWinning) {
190
                     if (isWinning) {
191
+                        TaLotteryResultDetail resultDetail = lotteryResult.getDetailList().get(0);
192
+                        if (null == resultDetail) {
193
+                            log.error(String.format("第 %s 期排列五结果明细未抓取", lotteryResult.getIssueNo()));
194
+                            continue;
195
+                        }
196
+
197
                         winAmount = Math.round(Float.parseFloat(resultDetail.getMoney()) * 100);
197
                         winAmount = Math.round(Float.parseFloat(resultDetail.getMoney()) * 100);
198
-                        bettingItem.setWinAmount(winAmount);
199
                     }
198
                     }
200
-
201
-                // 排列三
202
                 } else if (lottery.getLotteryId().equals(CommConstants.LOTTERY_P3)) {
199
                 } else if (lottery.getLotteryId().equals(CommConstants.LOTTERY_P3)) {
200
+                    String[] bingoNums = lotteryResult.getFirstResult().split(",");
201
+                    if (bingoNums.length != 3) {
202
+                        log.error(String.format("第 %s 期排列三抓取结果不正确", lotteryResult.getIssueNo()));
203
+                        continue;
204
+                    }
205
+
203
                     String level = "直选";
206
                     String level = "直选";
204
                     if ("组选3".equals(item.getPlayWay())) {
207
                     if ("组选3".equals(item.getPlayWay())) {
205
                         level = "组三";
208
                         level = "组三";
208
                     }
211
                     }
209
 
212
 
210
                     TaLotteryResultDetail resultDetail = filterResultDetail(lotteryResult.getDetailList(), level);
213
                     TaLotteryResultDetail resultDetail = filterResultDetail(lotteryResult.getDetailList(), level);
211
-                    switch (level) {
212
-                        case "直选":
213
-                            isWinning = BizUtils.checkPrizeNumStrict(lotteryResult.getFirstResult().split(","), firstNums.split(","));
214
-                            break;
215
-                        case "组三":
216
-
217
-                            break;
218
-                        case "组六":
219
-                            break;
214
+                    if (null == resultDetail) {
215
+                        log.error(String.format("第 %s 期排列三结果明细未抓取", lotteryResult.getIssueNo()));
216
+                        continue;
220
                     }
217
                     }
221
 
218
 
222
-                    if (isWinning) {
223
-                        winAmount = Math.round(Float.parseFloat(resultDetail.getMoney()) * 100);
224
-                        bettingItem.setWinAmount(winAmount);
219
+                    // 直选是通过比对数字来校验中奖
220
+                    if ("直选".equals(level)) {
221
+                        isWinning = BizUtils.checkPrizeNumStrict(bingoNums, item.getFirstNums().split(","));
222
+                        if (isWinning) {
223
+                            winAmount = Math.round(Float.parseFloat(resultDetail.getMoney()) * 100);
224
+                        }
225
+                    } else {
226
+                        // 出现2次的号码
227
+                        boolean hasTwiceNum = bingoNums[0].equals(bingoNums[1])
228
+                                || bingoNums[0].equals(bingoNums[2])
229
+                                || bingoNums[1].equals(bingoNums[2]);
230
+
231
+                        // 如果存在出现2次的号码, 只有可能中组选三, 否则只有可能中组选6
232
+                        if (!hasTwiceNum) {
233
+                            if ("组六".equals(level)) {
234
+                                isWinning = item.getFirstNums().contains(bingoNums[0])
235
+                                        && item.getFirstNums().contains(bingoNums[1])
236
+                                        && item.getFirstNums().contains(bingoNums[2]);
237
+                                if (isWinning) {
238
+                                    winAmount = Math.round(Float.parseFloat(resultDetail.getMoney()) * 100);
239
+                                }
240
+                            }
241
+                        } else {
242
+                            if ("组三".equals(level)) {
243
+                                // 如果是复式
244
+                                if (item.getIsMulti()) {
245
+                                    isWinning = item.getFirstNums().contains(bingoNums[0])
246
+                                            && item.getFirstNums().contains(bingoNums[1])
247
+                                            && item.getFirstNums().contains(bingoNums[2]);
248
+                                    if (isWinning) {
249
+                                        winAmount = Math.round(Float.parseFloat(resultDetail.getMoney()) * 100);
250
+                                    }
251
+                                } else {
252
+                                    // 投注号
253
+                                    String[] buyNums = item.getFirstNums().split(",");
254
+                                    // 由小到大排序
255
+                                    Arrays.sort(bingoNums);
256
+                                    Arrays.sort(buyNums);
257
+
258
+                                    isWinning = BizUtils.checkPrizeNumStrict(bingoNums, buyNums);
259
+                                    if (isWinning) {
260
+                                        winAmount = Math.round(Float.parseFloat(resultDetail.getMoney()) * 100);
261
+                                    }
262
+                                }
263
+                            }
264
+                        }
225
                     }
265
                     }
266
+
226
                 } else {
267
                 } else {
268
+                    // 大乐透  双色球
269
+                    String firstNums = item.getFirstNums();
270
+                    if (StringUtils.isEmpty(firstNums)) {
271
+                        log.error(String.format("ID %s 的投注明细无前区内容", customerBetting.getBettingId()));
272
+                        continue;
273
+                    }
274
+
227
                     String firstDanNums = item.getFirstDan();
275
                     String firstDanNums = item.getFirstDan();
228
                     if (StringUtils.isEmpty(firstDanNums)) {
276
                     if (StringUtils.isEmpty(firstDanNums)) {
229
                         firstDanNums = "";
277
                         firstDanNums = "";
248
                     }
296
                     }
249
 
297
 
250
                     // 后区中奖数
298
                     // 后区中奖数
251
-                    int secondSameNums = BizUtils.getSameNums(lotteryResult.getSecondResult().split(","), secondNums.split(","), secondDanNums.split(","));
299
+                    int secondSameNums = BizUtils.getSameNums(
300
+                            lotteryResult.getSecondResult().split(","),
301
+                            secondNums.split(","),
302
+                            secondDanNums.split(","));
252
 
303
 
253
                     // 选择结果
304
                     // 选择结果
254
                     String curNums = String.format("%d-%d", firstSameNums, secondSameNums);
305
                     String curNums = String.format("%d-%d", firstSameNums, secondSameNums);
257
                     TdLotteryPrize bingo = null;
308
                     TdLotteryPrize bingo = null;
258
                     for(TdLotteryPrize prize : prizeSettings) {
309
                     for(TdLotteryPrize prize : prizeSettings) {
259
                         if (StringUtils.isEmpty(prize.getBingoRule())) {
310
                         if (StringUtils.isEmpty(prize.getBingoRule())) {
260
-                            log.error(String.format("彩种 %s 中奖结果规则未维护", lottery.getLotteryId()));
311
+                            log.error(String.format("彩种 %s 中奖结果规则未维护", lottery.getLotteryId()));
261
                             needContinue = true;
312
                             needContinue = true;
262
                             break;
313
                             break;
263
                         }
314
                         }
272
                         continue;
323
                         continue;
273
                     }
324
                     }
274
 
325
 
275
-                    bettingItem.setIsOpen(true);
276
                     if (null != bingo) {
326
                     if (null != bingo) {
277
                         log.info(String.format("恭喜 %s 购买 %s 中了 %s", customerBetting.getCustomerId(), lottery.getLotteryId(), bingo.getLevel()));
327
                         log.info(String.format("恭喜 %s 购买 %s 中了 %s", customerBetting.getCustomerId(), lottery.getLotteryId(), bingo.getLevel()));
278
                         isWinning = true;
328
                         isWinning = true;
279
                         bettingItem.setWinLevel(bingo.getLevel());
329
                         bettingItem.setWinLevel(bingo.getLevel());
280
                         TaLotteryResultDetail resultDetail = filterResultDetail(lotteryResult.getDetailList(), bingo.getLevel());
330
                         TaLotteryResultDetail resultDetail = filterResultDetail(lotteryResult.getDetailList(), bingo.getLevel());
281
                         if (null == resultDetail) {
331
                         if (null == resultDetail) {
282
-                            log.error("大乐透的中奖结果明细未成功抓取");
332
+                            log.error(String.format("彩种 %s 的中奖结果明细未成功抓取", lottery.getLotteryId()));
283
                             continue;
333
                             continue;
284
                         }
334
                         }
285
 
335
 
292
                     }
342
                     }
293
                 }
343
                 }
294
 
344
 
345
+                winTotalCharges += winAmount;
346
+                bettingItem.setIsOpen(true);
347
+                bettingItem.setOpeningDate(DateUtils.today());
295
                 bettingItem.setIsWinning(isWinning);
348
                 bettingItem.setIsWinning(isWinning);
296
                 bettingItem.setWinAmount(winAmount);
349
                 bettingItem.setWinAmount(winAmount);
297
-                winTotalCharges += winAmount;
298
                 iTaCustomerBettingItemService.updateById(bettingItem);
350
                 iTaCustomerBettingItemService.updateById(bettingItem);
299
             } catch (Exception e) {
351
             } catch (Exception e) {
300
                 e.printStackTrace();
352
                 e.printStackTrace();