diff --git a/hiver-core/src/main/java/cc/hiver/core/common/constant/DealingsRecordConstant.java b/hiver-core/src/main/java/cc/hiver/core/common/constant/DealingsRecordConstant.java
index a38e443b..571472ea 100644
--- a/hiver-core/src/main/java/cc/hiver/core/common/constant/DealingsRecordConstant.java
+++ b/hiver-core/src/main/java/cc/hiver/core/common/constant/DealingsRecordConstant.java
@@ -15,7 +15,7 @@ public interface DealingsRecordConstant {
/**
*
*/
- String[] TYPE_REMARK = {"é…é€è®¢å•佣金","å”®åŽé€€æ¬¾","é…逿ޒå奖励","商家æçް","é…é€å‘˜æçް","å…å•奖励","商家结算","用户æçް"};
+ String[] TYPE_REMARK = {"é…é€è®¢å•佣金","å”®åŽé€€æ¬¾","é…逿ޒå奖励","商家æçް","é…é€å‘˜æçް","å…å•奖励","商家结算","用户æçް","白嫖ä¸å¥–"};
/**
*交易类型:0:å¢žåŠ 1 æçް 2消费 3å”®åŽ
diff --git a/hiver-core/src/main/java/cc/hiver/core/dao/UserDao.java b/hiver-core/src/main/java/cc/hiver/core/dao/UserDao.java
index 2b98532c..6fd3b5fe 100644
--- a/hiver-core/src/main/java/cc/hiver/core/dao/UserDao.java
+++ b/hiver-core/src/main/java/cc/hiver/core/dao/UserDao.java
@@ -45,7 +45,7 @@ public interface UserDao extends HiverBaseDao
{
* @return
*/
@Query("select u from User u where u.mobile = ?1 and u.type = ?2 ")
- User findByMobile(String mobile,Integer type);
+ User findByMobile(String mobile,String type);
/**
* 通过邮件获å–用户
diff --git a/hiver-core/src/main/java/cc/hiver/core/service/UserService.java b/hiver-core/src/main/java/cc/hiver/core/service/UserService.java
index 135a44f6..20151366 100644
--- a/hiver-core/src/main/java/cc/hiver/core/service/UserService.java
+++ b/hiver-core/src/main/java/cc/hiver/core/service/UserService.java
@@ -35,7 +35,7 @@ public interface UserService extends HiverBaseService {
*/
User findByMobile(String mobile);
- User findByMobile(String mobile,Integer type);
+ User findByMobile(String mobile,String type);
/**
* 通过邮件和状æ€èŽ·å–用户
diff --git a/hiver-core/src/main/java/cc/hiver/core/serviceimpl/UserServiceImpl.java b/hiver-core/src/main/java/cc/hiver/core/serviceimpl/UserServiceImpl.java
index 873e6cd3..d08c1f05 100644
--- a/hiver-core/src/main/java/cc/hiver/core/serviceimpl/UserServiceImpl.java
+++ b/hiver-core/src/main/java/cc/hiver/core/serviceimpl/UserServiceImpl.java
@@ -79,7 +79,7 @@ public class UserServiceImpl implements UserService {
}
@Override
- public User findByMobile(String mobile, Integer type) {
+ public User findByMobile(String mobile, String type) {
final User user = userDao.findByMobile(mobile,type);
return userToDTO(user);
}
diff --git a/hiver-modules/hiver-mall/src/main/java/cc/hiver/mall/mq/OrderAsyncConsumer.java b/hiver-modules/hiver-mall/src/main/java/cc/hiver/mall/mq/OrderAsyncConsumer.java
index 74d7b64e..e63aa20e 100644
--- a/hiver-modules/hiver-mall/src/main/java/cc/hiver/mall/mq/OrderAsyncConsumer.java
+++ b/hiver-modules/hiver-mall/src/main/java/cc/hiver/mall/mq/OrderAsyncConsumer.java
@@ -7,7 +7,9 @@ import cc.hiver.core.service.WorkerService;
import cc.hiver.mall.dao.mapper.MallDeliveryOrderMapper;
import cc.hiver.mall.dao.mapper.MallOrderMapper;
import cc.hiver.mall.entity.MallDeliveryOrder;
+import cc.hiver.mall.entity.MallOrder;
import cc.hiver.mall.ie.service.IeMatchService;
+import cc.hiver.mall.planet.hook.PlanetRewardHook;
import cc.hiver.mall.pojo.dto.CreateOrderDTO;
import cc.hiver.mall.serviceimpl.mybatis.MallOrderServiceImpl;
import cc.hiver.mall.utils.*;
@@ -74,6 +76,9 @@ public class OrderAsyncConsumer {
@Autowired
private IeMatchService ieMatchService;
+ @Autowired
+ private PlanetRewardHook planetRewardHook;
+
// 微信模æ¿é…ç½®
private static final String TEMPLATE_ID = "K15zpZSHBNivouTfpW5FK1XFz8GbYAK8b9dXXOP_Ka0";
@@ -195,6 +200,7 @@ public class OrderAsyncConsumer {
if (StringUtils.isNotBlank(userId) && StringUtils.isNotBlank(orderId)) {
userPendingOrderCacheUtil.remove(userId, orderId);
rewardIeMatchQuota(userId);
+ rewardPlanetOrderTicket(userId, orderId, body.getString("regionId"));
}
}
}
@@ -244,4 +250,24 @@ public class OrderAsyncConsumer {
log.warn("é…é€å®Œæˆå¼‚æ¥å¢žåŠ i/eåŒ¹é…æœºä¼šå¤±è´¥ï¼Œä¸å½±å“å¼‚æ¥æ”¶å°¾ userId={}, reason={}", userId, e.getMessage());
}
}
+
+ private void rewardPlanetOrderTicket(String userId, String orderId, String fallbackRegionId) {
+ if (StringUtils.isBlank(userId) || StringUtils.isBlank(orderId)) {
+ return;
+ }
+ try {
+ String regionId = fallbackRegionId;
+ MallOrder order = mallOrderMapper.selectById(orderId);
+ if (order != null) {
+ regionId = StringUtils.defaultIfBlank(order.getRegionId(), regionId);
+ }
+ if (StringUtils.isBlank(regionId)) {
+ log.warn("[白嫖星çƒ] é…é€å®Œæˆå‘券缺少商圈 orderId={}, userId={}", orderId, userId);
+ return;
+ }
+ planetRewardHook.onOrderFinish(userId, regionId, orderId);
+ } catch (Exception e) {
+ log.warn("[白嫖星çƒ] é…é€å®Œæˆå‘券失败,ä¸å½±å“å¼‚æ¥æ”¶å°¾ orderId={}, userId={}, reason={}", orderId, userId, e.getMessage());
+ }
+ }
}
diff --git a/hiver-modules/hiver-mall/src/main/java/cc/hiver/mall/planet/constant/PlanetConstant.java b/hiver-modules/hiver-mall/src/main/java/cc/hiver/mall/planet/constant/PlanetConstant.java
index 7fe91b4a..d18fd0d7 100644
--- a/hiver-modules/hiver-mall/src/main/java/cc/hiver/mall/planet/constant/PlanetConstant.java
+++ b/hiver-modules/hiver-mall/src/main/java/cc/hiver/mall/planet/constant/PlanetConstant.java
@@ -38,6 +38,7 @@ public class PlanetConstant {
public static final String TICKET_TYPE_ADVENTURE_PK_ENTRY = "adventure_pk_entry";
public static final String TICKET_TYPE_ADVENTURE_PK_REFUND = "adventure_pk_refund";
public static final String TICKET_TYPE_ADVENTURE_PK_REWARD = "adventure_pk_reward";
+ public static final String TICKET_TYPE_RANK_DAILY_REWARD = "rank_daily_reward";
/** å¦é™¢åŠ©æŽ¨èµ› */
public static final int ADVENTURE_SESSION_RUNNING = 0;
diff --git a/hiver-modules/hiver-mall/src/main/java/cc/hiver/mall/planet/controller/PlanetController.java b/hiver-modules/hiver-mall/src/main/java/cc/hiver/mall/planet/controller/PlanetController.java
index 969d7131..ecbba0a7 100644
--- a/hiver-modules/hiver-mall/src/main/java/cc/hiver/mall/planet/controller/PlanetController.java
+++ b/hiver-modules/hiver-mall/src/main/java/cc/hiver/mall/planet/controller/PlanetController.java
@@ -114,6 +114,19 @@ public class PlanetController {
}
}
+ @ApiOperation(value = "å·å–过我的追æ•记录(分页)")
+ @RequestMapping(value = "/hunt/raiders", method = RequestMethod.POST)
+ public Result huntRaiders(@RequestBody PlanetQuery query) {
+ if (StringUtils.isEmpty(query.getUserId())) {
+ return ResultUtil.error("用户idä¸èƒ½ä¸ºç©º");
+ }
+ if (StringUtils.isEmpty(query.getRegionId())) {
+ return ResultUtil.error(REGION_REQUIRED);
+ }
+ return new ResultUtil<>().setData(
+ huntService.raiders(query.getUserId(), query.getRegionId(), query.getPageNumber(), query.getPageSize()));
+ }
+
@ApiOperation(value = "开坿¯æ—¥å®ç®±")
@RequestMapping(value = "/box/open", method = RequestMethod.POST)
public Result openBox(@RequestBody PlanetQuery query) {
@@ -263,6 +276,20 @@ public class PlanetController {
}
}
+ @ApiOperation(value = "æ ‡è®°ä¸å¥–记录已读")
+ @RequestMapping(value = "/draw/read", method = RequestMethod.POST)
+ public Result markWinningRead(@RequestBody PlanetQuery query) {
+ if (StringUtils.isEmpty(query.getRegionId())) {
+ return ResultUtil.error("ç¼ºå°‘å•†åœˆå‚æ•°ï¼Œä»…坿 ‡è®°æœ¬åŒºåŸŸä¸å¥–记录");
+ }
+ try {
+ drawService.markWinningRead(query.getUserId(), query.getRegionId(), query.getWinnerId());
+ return ResultUtil.success("已读æˆåŠŸ");
+ } catch (HiverException e) {
+ return ResultUtil.error(e.getMessage());
+ }
+ }
+
@ApiOperation(value = "我的星çƒåˆ¸æ˜Žç»†(分页)")
@RequestMapping(value = "/ticket/log", method = RequestMethod.POST)
public Result ticketLog(@RequestBody PlanetQuery query) {
@@ -410,6 +437,19 @@ public class PlanetController {
}
}
+ @ApiOperation(value = "å·å–è¿‡æˆ‘çš„æŽ å¤ºè€…è®°å½•(分页)")
+ @RequestMapping(value = "/search/raiders", method = RequestMethod.POST)
+ public Result searchRaiders(@RequestBody PlanetQuery query) {
+ if (StringUtils.isEmpty(query.getUserId())) {
+ return ResultUtil.error("用户idä¸èƒ½ä¸ºç©º");
+ }
+ if (StringUtils.isEmpty(query.getRegionId())) {
+ return ResultUtil.error(REGION_REQUIRED);
+ }
+ return new ResultUtil<>().setData(
+ operateService.raiders(query.getUserId(), query.getRegionId(), query.getPageNumber(), query.getPageSize()));
+ }
+
@ApiOperation(value = "体力é“具列表")
@RequestMapping(value = "/stamina/items", method = RequestMethod.POST)
public Result staminaItems(@RequestBody PlanetQuery query) {
@@ -533,6 +573,39 @@ public class PlanetController {
}
}
+ @ApiOperation(value = "æ˜Ÿçƒæ“‚å°-我的房间")
+ @RequestMapping(value = "/adventure/pk/myRooms", method = RequestMethod.POST)
+ @Transactional(propagation = Propagation.NOT_SUPPORTED)
+ public Result adventurePkMyRooms(@RequestBody PlanetQuery query) {
+ try {
+ return new ResultUtil<>().setData(adventurePkService.myRooms(query.getUserId(), query.getRegionId(), query.getPageNumber(), query.getPageSize()));
+ } catch (HiverException e) {
+ return ResultUtil.error(e.getMessage());
+ }
+ }
+
+ @ApiOperation(value = "æ˜Ÿçƒæ“‚å°-我的战绩")
+ @RequestMapping(value = "/adventure/pk/myRecords", method = RequestMethod.POST)
+ @Transactional(propagation = Propagation.NOT_SUPPORTED)
+ public Result adventurePkMyRecords(@RequestBody PlanetQuery query) {
+ try {
+ return new ResultUtil<>().setData(adventurePkService.myRecords(query.getUserId(), query.getRegionId(), query.getPageNumber(), query.getPageSize()));
+ } catch (HiverException e) {
+ return ResultUtil.error(e.getMessage());
+ }
+ }
+
+ @ApiOperation(value = "æ˜Ÿçƒæ“‚å°-çƒé—¨æˆ¿é—´")
+ @RequestMapping(value = "/adventure/pk/hotRooms", method = RequestMethod.POST)
+ @Transactional(propagation = Propagation.NOT_SUPPORTED)
+ public Result adventurePkHotRooms(@RequestBody PlanetQuery query) {
+ try {
+ return new ResultUtil<>().setData(adventurePkService.hotRooms(query.getUserId(), query.getRegionId(), query.getPageNumber(), query.getPageSize()));
+ } catch (HiverException e) {
+ return ResultUtil.error(e.getMessage());
+ }
+ }
+
@ApiOperation(value = "åˆ›å»ºæ˜Ÿçƒæ“‚å°æˆ¿é—´")
@RequestMapping(value = "/adventure/pk/create", method = RequestMethod.POST)
@Transactional(propagation = Propagation.NOT_SUPPORTED)
diff --git a/hiver-modules/hiver-mall/src/main/java/cc/hiver/mall/planet/entity/PlanetDrawWinner.java b/hiver-modules/hiver-mall/src/main/java/cc/hiver/mall/planet/entity/PlanetDrawWinner.java
index 6ccb8669..31a5d5bc 100644
--- a/hiver-modules/hiver-mall/src/main/java/cc/hiver/mall/planet/entity/PlanetDrawWinner.java
+++ b/hiver-modules/hiver-mall/src/main/java/cc/hiver/mall/planet/entity/PlanetDrawWinner.java
@@ -71,6 +71,14 @@ public class PlanetDrawWinner implements Serializable {
@ApiModelProperty(value = "领喿—¶é—´")
private Date receivedTime;
+ @ApiModelProperty(value = "是å¦å·²è¯»/已弹窗 0å¦ 1是")
+ private Integer isRead;
+
+ @JsonFormat(timezone = "GMT+8", pattern = "yyyy-MM-dd HH:mm:ss")
+ @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
+ @ApiModelProperty(value = "已读时间")
+ private Date readTime;
+
@JsonFormat(timezone = "GMT+8", pattern = "yyyy-MM-dd HH:mm:ss")
@DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
@ApiModelProperty(value = "创建时间")
diff --git a/hiver-modules/hiver-mall/src/main/java/cc/hiver/mall/planet/entity/PlanetSearchRecord.java b/hiver-modules/hiver-mall/src/main/java/cc/hiver/mall/planet/entity/PlanetSearchRecord.java
index c60dd3b9..c7e51ac5 100644
--- a/hiver-modules/hiver-mall/src/main/java/cc/hiver/mall/planet/entity/PlanetSearchRecord.java
+++ b/hiver-modules/hiver-mall/src/main/java/cc/hiver/mall/planet/entity/PlanetSearchRecord.java
@@ -1,5 +1,6 @@
package cc.hiver.mall.planet.entity;
+import com.baomidou.mybatisplus.annotation.TableField;
import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.annotation.TableName;
import com.fasterxml.jackson.annotation.JsonFormat;
@@ -20,7 +21,15 @@ public class PlanetSearchRecord implements Serializable {
@TableId
private String id;
private String fromUserId;
+ @TableField(exist = false)
+ private String fromUserName;
+ @TableField(exist = false)
+ private String fromAvatar;
private String toUserId;
+ @TableField(exist = false)
+ private String toUserName;
+ @TableField(exist = false)
+ private String toAvatar;
private String regionId;
private Integer staminaCost;
private Integer towerLevel;
@@ -28,6 +37,7 @@ public class PlanetSearchRecord implements Serializable {
private Integer countered;
private Integer staminaDamage;
private Integer gainTickets;
+ private Integer counterDropTickets;
private Integer targetPublicTicketsBefore;
private String message;
@JsonFormat(timezone = "GMT+8", pattern = "yyyy-MM-dd HH:mm:ss")
diff --git a/hiver-modules/hiver-mall/src/main/java/cc/hiver/mall/planet/pojo/PlanetHomeVo.java b/hiver-modules/hiver-mall/src/main/java/cc/hiver/mall/planet/pojo/PlanetHomeVo.java
index 30e29506..19d8f4b6 100644
--- a/hiver-modules/hiver-mall/src/main/java/cc/hiver/mall/planet/pojo/PlanetHomeVo.java
+++ b/hiver-modules/hiver-mall/src/main/java/cc/hiver/mall/planet/pojo/PlanetHomeVo.java
@@ -1,5 +1,6 @@
package cc.hiver.mall.planet.pojo;
+import cc.hiver.mall.planet.entity.PlanetDrawWinner;
import cc.hiver.mall.planet.entity.PlanetNews;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
@@ -95,4 +96,7 @@ public class PlanetHomeVo implements Serializable {
@ApiModelProperty(value = "2åˆ†é’Ÿæ¯æ—¥é—环")
private Object dailyLoop;
+
+ @ApiModelProperty(value = "首页待弹窗ä¸å¥–记录")
+ private PlanetDrawWinner unreadWinning;
}
diff --git a/hiver-modules/hiver-mall/src/main/java/cc/hiver/mall/planet/pojo/PlanetSearchResultVo.java b/hiver-modules/hiver-mall/src/main/java/cc/hiver/mall/planet/pojo/PlanetSearchResultVo.java
index 65dae450..6e6b44a5 100644
--- a/hiver-modules/hiver-mall/src/main/java/cc/hiver/mall/planet/pojo/PlanetSearchResultVo.java
+++ b/hiver-modules/hiver-mall/src/main/java/cc/hiver/mall/planet/pojo/PlanetSearchResultVo.java
@@ -15,6 +15,7 @@ public class PlanetSearchResultVo implements Serializable {
private Boolean intercepted;
private Boolean countered;
private Integer gainTickets;
+ private Integer counterDropTickets;
private Integer staminaDamage;
private Integer remainStamina;
private Integer remainSearchCount;
diff --git a/hiver-modules/hiver-mall/src/main/java/cc/hiver/mall/planet/service/PlanetAdventurePkService.java b/hiver-modules/hiver-mall/src/main/java/cc/hiver/mall/planet/service/PlanetAdventurePkService.java
index 3f3e3bac..a85f503a 100644
--- a/hiver-modules/hiver-mall/src/main/java/cc/hiver/mall/planet/service/PlanetAdventurePkService.java
+++ b/hiver-modules/hiver-mall/src/main/java/cc/hiver/mall/planet/service/PlanetAdventurePkService.java
@@ -1,10 +1,12 @@
package cc.hiver.mall.planet.service;
import cc.hiver.mall.planet.entity.PlanetAdventureChallenge;
+import cc.hiver.mall.planet.entity.PlanetAdventurePkPlayer;
import cc.hiver.mall.planet.entity.PlanetAdventurePkRoom;
import cc.hiver.mall.planet.pojo.PlanetAdventureChallengeResultVo;
import cc.hiver.mall.planet.pojo.PlanetAdventurePkHallVo;
import cc.hiver.mall.planet.pojo.PlanetAdventurePkPlayVo;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import java.util.List;
@@ -12,6 +14,12 @@ public interface PlanetAdventurePkService {
PlanetAdventurePkHallVo hall(String userId, String regionId, Integer pageNumber, Integer pageSize);
+ Page myRooms(String userId, String regionId, Integer pageNumber, Integer pageSize);
+
+ Page myRecords(String userId, String regionId, Integer pageNumber, Integer pageSize);
+
+ Page hotRooms(String userId, String regionId, Integer pageNumber, Integer pageSize);
+
PlanetAdventurePkRoom createRoom(String userId, String regionId, String nickname, String avatar,
String college, String roomName, Integer maxPlayers,
Integer publicFlag, String password, Integer entryTickets);
diff --git a/hiver-modules/hiver-mall/src/main/java/cc/hiver/mall/planet/service/PlanetDrawService.java b/hiver-modules/hiver-mall/src/main/java/cc/hiver/mall/planet/service/PlanetDrawService.java
index b223e743..2bdf4024 100644
--- a/hiver-modules/hiver-mall/src/main/java/cc/hiver/mall/planet/service/PlanetDrawService.java
+++ b/hiver-modules/hiver-mall/src/main/java/cc/hiver/mall/planet/service/PlanetDrawService.java
@@ -57,6 +57,16 @@ public interface PlanetDrawService {
*/
List myWinning(String userId, String regionId);
+ /**
+ * 首页待弹窗的未读ä¸å¥–记录。
+ */
+ PlanetDrawWinner unreadWinning(String userId, String regionId);
+
+ /**
+ * æ ‡è®°ä¸å¥–记录已读/已弹窗。
+ */
+ void markWinningRead(String userId, String regionId, String winnerId);
+
/**
* 领å–ä¸å¥–奖励(æ ¡éªŒå•†åœˆä¸€è‡´)
*/
diff --git a/hiver-modules/hiver-mall/src/main/java/cc/hiver/mall/planet/service/PlanetHuntService.java b/hiver-modules/hiver-mall/src/main/java/cc/hiver/mall/planet/service/PlanetHuntService.java
index f874a317..d9213393 100644
--- a/hiver-modules/hiver-mall/src/main/java/cc/hiver/mall/planet/service/PlanetHuntService.java
+++ b/hiver-modules/hiver-mall/src/main/java/cc/hiver/mall/planet/service/PlanetHuntService.java
@@ -1,6 +1,8 @@
package cc.hiver.mall.planet.service;
+import cc.hiver.mall.planet.entity.PlanetHuntRecord;
import cc.hiver.mall.planet.pojo.PlanetHuntResultVo;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
/**
* 白嫖星çƒ-è¿½æ•æœåŠ¡
@@ -18,4 +20,9 @@ public interface PlanetHuntService {
* ä»Šæ—¥å‰©ä½™è¿½æ•æ¬¡æ•°
*/
int remainHunt(String userId);
+
+ /**
+ * å·è¿‡æˆ‘的追æ•记录分页
+ */
+ Page raiders(String userId, String regionId, Integer pageNumber, Integer pageSize);
}
diff --git a/hiver-modules/hiver-mall/src/main/java/cc/hiver/mall/planet/service/PlanetOperateService.java b/hiver-modules/hiver-mall/src/main/java/cc/hiver/mall/planet/service/PlanetOperateService.java
index 0019e02f..d99d575a 100644
--- a/hiver-modules/hiver-mall/src/main/java/cc/hiver/mall/planet/service/PlanetOperateService.java
+++ b/hiver-modules/hiver-mall/src/main/java/cc/hiver/mall/planet/service/PlanetOperateService.java
@@ -2,6 +2,7 @@ package cc.hiver.mall.planet.service;
import cc.hiver.mall.planet.entity.*;
import cc.hiver.mall.planet.pojo.PlanetSearchResultVo;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import java.util.List;
import java.util.Map;
@@ -32,6 +33,8 @@ public interface PlanetOperateService {
PlanetSearchResultVo searchTarget(String userId, String regionId, String targetUserId);
+ Page raiders(String userId, String regionId, Integer pageNumber, Integer pageSize);
+
List staminaItems(String regionId);
PlanetUserState buyStaminaItem(String userId, String regionId, String itemId);
diff --git a/hiver-modules/hiver-mall/src/main/java/cc/hiver/mall/planet/service/impl/PlanetAdventurePkServiceImpl.java b/hiver-modules/hiver-mall/src/main/java/cc/hiver/mall/planet/service/impl/PlanetAdventurePkServiceImpl.java
index 879137ec..84c532b6 100644
--- a/hiver-modules/hiver-mall/src/main/java/cc/hiver/mall/planet/service/impl/PlanetAdventurePkServiceImpl.java
+++ b/hiver-modules/hiver-mall/src/main/java/cc/hiver/mall/planet/service/impl/PlanetAdventurePkServiceImpl.java
@@ -45,30 +45,44 @@ public class PlanetAdventurePkServiceImpl implements PlanetAdventurePkService {
@Override
public PlanetAdventurePkHallVo hall(String userId, String regionId, Integer pageNumber, Integer pageSize) {
require(userId, regionId);
- long current = pageNumber == null || pageNumber < 1 ? 1 : pageNumber;
- long size = pageSize == null || pageSize < 1 ? 10 : Math.min(pageSize, 30);
PlanetAdventurePkHallVo vo = new PlanetAdventurePkHallVo();
- Page hotPage = roomMapper.selectPage(new Page<>(current, size), new LambdaQueryWrapper()
- .eq(PlanetAdventurePkRoom::getRegionId, regionId)
- .eq(PlanetAdventurePkRoom::getPublicFlag, 1)
- .in(PlanetAdventurePkRoom::getStatus, PlanetConstant.ADVENTURE_PK_ROOM_WAITING, PlanetConstant.ADVENTURE_PK_ROOM_PLAYING)
- .orderByDesc(PlanetAdventurePkRoom::getPlayerCount)
- .orderByDesc(PlanetAdventurePkRoom::getCreateTime));
+ Page hotPage = hotRooms(userId, regionId, pageNumber, pageSize);
vo.setHotRooms(hotPage.getRecords());
vo.setHotTotal(hotPage.getTotal());
vo.setHotTotalPages(hotPage.getPages());
vo.setHotPageNumber(hotPage.getCurrent());
- vo.setMyRooms(roomMapper.selectList(new LambdaQueryWrapper()
+ vo.setMyRooms(myRooms(userId, regionId, 1, 8).getRecords());
+ vo.setMyRecords(myRecords(userId, regionId, 1, 10).getRecords());
+ return vo;
+ }
+
+ @Override
+ public Page myRooms(String userId, String regionId, Integer pageNumber, Integer pageSize) {
+ require(userId, regionId);
+ return roomMapper.selectPage(page(pageNumber, pageSize), new LambdaQueryWrapper()
.eq(PlanetAdventurePkRoom::getRegionId, regionId)
.eq(PlanetAdventurePkRoom::getOwnerUserId, userId)
- .orderByDesc(PlanetAdventurePkRoom::getCreateTime)
- .last("limit 8")));
- vo.setMyRecords(playerMapper.selectList(new LambdaQueryWrapper()
+ .orderByDesc(PlanetAdventurePkRoom::getCreateTime));
+ }
+
+ @Override
+ public Page myRecords(String userId, String regionId, Integer pageNumber, Integer pageSize) {
+ require(userId, regionId);
+ return playerMapper.selectPage(page(pageNumber, pageSize), new LambdaQueryWrapper()
.eq(PlanetAdventurePkPlayer::getRegionId, regionId)
.eq(PlanetAdventurePkPlayer::getUserId, userId)
- .orderByDesc(PlanetAdventurePkPlayer::getCreateTime)
- .last("limit 10")));
- return vo;
+ .orderByDesc(PlanetAdventurePkPlayer::getCreateTime));
+ }
+
+ @Override
+ public Page hotRooms(String userId, String regionId, Integer pageNumber, Integer pageSize) {
+ require(userId, regionId);
+ return roomMapper.selectPage(page(pageNumber, pageSize), new LambdaQueryWrapper()
+ .eq(PlanetAdventurePkRoom::getRegionId, regionId)
+ .eq(PlanetAdventurePkRoom::getPublicFlag, 1)
+ .in(PlanetAdventurePkRoom::getStatus, PlanetConstant.ADVENTURE_PK_ROOM_WAITING, PlanetConstant.ADVENTURE_PK_ROOM_PLAYING)
+ .orderByDesc(PlanetAdventurePkRoom::getPlayerCount)
+ .orderByDesc(PlanetAdventurePkRoom::getCreateTime));
}
@Override
@@ -333,6 +347,12 @@ public class PlanetAdventurePkServiceImpl implements PlanetAdventurePkService {
if (StringUtils.isEmpty(regionId)) throw new HiverException("ç¼ºå°‘å•†åœˆå‚æ•°");
}
+ private Page page(Integer pageNumber, Integer pageSize) {
+ long current = pageNumber == null || pageNumber < 1 ? 1 : pageNumber;
+ long size = pageSize == null || pageSize < 1 ? 10 : Math.min(pageSize, 30);
+ return new Page<>(current, size);
+ }
+
private int nz(Integer v) {
return v == null ? 0 : v;
}
diff --git a/hiver-modules/hiver-mall/src/main/java/cc/hiver/mall/planet/service/impl/PlanetBoxServiceImpl.java b/hiver-modules/hiver-mall/src/main/java/cc/hiver/mall/planet/service/impl/PlanetBoxServiceImpl.java
index 0114885d..f191408d 100644
--- a/hiver-modules/hiver-mall/src/main/java/cc/hiver/mall/planet/service/impl/PlanetBoxServiceImpl.java
+++ b/hiver-modules/hiver-mall/src/main/java/cc/hiver/mall/planet/service/impl/PlanetBoxServiceImpl.java
@@ -50,23 +50,13 @@ public class PlanetBoxServiceImpl implements PlanetBoxService {
ticketMapper.updateById(ticket);
// 抽å–å¥–åŠ±ï¼šåŠ æƒéšæœº
- // 1券50% / 2券22% / 5券8% / 幸è¿BUFF6% / 防护BUFF6% / åŒå€BUFF5% / æŽ å¤ºBUFF3%
+ // 1券50% / 2券22%
final int roll = ThreadLocalRandom.current().nextInt(100);
final PlanetBoxResultVo vo = new PlanetBoxResultVo();
if (roll < 50) {
grantTicket(userId, regionId, 1, vo, "幸è¿å®ç®±å¼€å‡º 1 å¼ æ˜Ÿçƒåˆ¸");
- } else if (roll < 72) {
- grantTicket(userId, regionId, 2, vo, "幸è¿å®ç®±å¼€å‡º 2 å¼ æ˜Ÿçƒåˆ¸");
- } else if (roll < 80) {
- grantTicket(userId, regionId, 5, vo, "幸è¿å®ç®±å¼€å‡º 5 å¼ æ˜Ÿçƒåˆ¸");
- } else if (roll < 86) {
- grantBuff(userId, regionId, PlanetConstant.BUFF_LUCKY, "å¹¸è¿æ˜Ÿè¾°", vo);
- } else if (roll < 92) {
- grantBuff(userId, regionId, PlanetConstant.BUFF_SHIELD, "星际防护罩", vo);
- } else if (roll < 97) {
- grantBuff(userId, regionId, PlanetConstant.BUFF_DOUBLE, "åŒå€èƒ½é‡", vo);
} else {
- grantBuff(userId, regionId, PlanetConstant.BUFF_HUNT, "追猎雷达", vo);
+ grantTicket(userId, regionId, 2, vo, "幸è¿å®ç®±å¼€å‡º 2 å¼ æ˜Ÿçƒåˆ¸");
}
newsService.addNews(regionId, PlanetConstant.NEWS_BOX,
diff --git a/hiver-modules/hiver-mall/src/main/java/cc/hiver/mall/planet/service/impl/PlanetDrawServiceImpl.java b/hiver-modules/hiver-mall/src/main/java/cc/hiver/mall/planet/service/impl/PlanetDrawServiceImpl.java
index c573da43..ef757187 100644
--- a/hiver-modules/hiver-mall/src/main/java/cc/hiver/mall/planet/service/impl/PlanetDrawServiceImpl.java
+++ b/hiver-modules/hiver-mall/src/main/java/cc/hiver/mall/planet/service/impl/PlanetDrawServiceImpl.java
@@ -1,11 +1,16 @@
package cc.hiver.mall.planet.service.impl;
+import cc.hiver.core.common.constant.DealingsRecordConstant;
import cc.hiver.core.common.exception.HiverException;
+import cc.hiver.core.entity.User;
+import cc.hiver.core.service.UserService;
+import cc.hiver.mall.entity.DealingsRecord;
import cc.hiver.mall.planet.constant.PlanetConstant;
import cc.hiver.mall.planet.entity.*;
import cc.hiver.mall.planet.mapper.*;
import cc.hiver.mall.planet.pojo.PlanetDailyLoopVo;
import cc.hiver.mall.planet.service.*;
+import cc.hiver.mall.service.mybatis.DealingsRecordService;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import lombok.extern.slf4j.Slf4j;
import org.apache.commons.lang3.StringUtils;
@@ -67,6 +72,12 @@ public class PlanetDrawServiceImpl implements PlanetDrawService {
@Autowired
private PlanetTaskService taskService;
+ @Autowired
+ private UserService userService;
+
+ @Autowired
+ private DealingsRecordService dealingsRecordService;
+
/**
* 抽奖功能强制按商圈隔离:缺少 regionId 直接拒ç»ï¼Œæœç»è·¨åŒºåŸŸå¼€å¥–/查询。
*/
@@ -371,19 +382,84 @@ public class PlanetDrawServiceImpl implements PlanetDrawService {
}
@Override
- public void receive(String userId, String regionId, String winnerId) {
+ public PlanetDrawWinner unreadWinning(String userId, String regionId) {
requireRegion(regionId);
- final PlanetDrawWinner winner = drawWinnerMapper.selectById(winnerId);
- if (winner == null || !userId.equals(winner.getUserId()) || !regionId.equals(winner.getRegionId())) {
- throw new HiverException("ä¸å¥–记录ä¸å˜åœ¨");
+ if (StringUtils.isEmpty(userId)) {
+ return null;
}
+ final LambdaQueryWrapper qw = new LambdaQueryWrapper<>();
+ qw.eq(PlanetDrawWinner::getUserId, userId)
+ .eq(PlanetDrawWinner::getRegionId, regionId)
+ .and(w -> w.isNull(PlanetDrawWinner::getIsRead).or().eq(PlanetDrawWinner::getIsRead, 0))
+ .orderByDesc(PlanetDrawWinner::getCreateTime)
+ .last("limit 1");
+ return drawWinnerMapper.selectOne(qw);
+ }
+
+ @Override
+ public void markWinningRead(String userId, String regionId, String winnerId) {
+ requireRegion(regionId);
+ final PlanetDrawWinner winner = getOwnedWinner(userId, regionId, winnerId);
+ if (winner.getIsRead() != null && winner.getIsRead() == 1) {
+ return;
+ }
+ winner.setIsRead(1);
+ winner.setReadTime(new Date());
+ drawWinnerMapper.updateById(winner);
+ }
+
+ @Override
+ @Transactional(rollbackFor = Exception.class)
+ public void receive(String userId, String regionId, String winnerId) {
+ requireRegion(regionId);
+ final PlanetDrawWinner winner = getOwnedWinner(userId, regionId, winnerId);
if (winner.getIsReceived() != null && winner.getIsReceived() == 1) {
throw new HiverException("已领å–,请勿é‡å¤æ“作");
}
+ if (winner.getRewardType() != null && winner.getRewardType() != 0) {
+ throw new HiverException("æš‚ä¸æ”¯æŒè¯¥å¥–励类型领å–");
+ }
+ final BigDecimal amount = winner.getAmount() == null ? BigDecimal.ZERO : winner.getAmount();
+ if (amount.compareTo(BigDecimal.ZERO) <= 0) {
+ throw new HiverException("ä¸å¥–金é¢å¼‚常");
+ }
+ final User user = userService.findById(userId);
+ if (user == null) {
+ throw new HiverException("用户ä¸å˜åœ¨");
+ }
+ user.setDepoBal((user.getDepoBal() == null ? BigDecimal.ZERO : user.getDepoBal()).add(amount));
+ userService.update(user);
+
winner.setIsReceived(1);
winner.setReceivedTime(new Date());
+ winner.setIsRead(1);
+ if (winner.getReadTime() == null) {
+ winner.setReadTime(new Date());
+ }
drawWinnerMapper.updateById(winner);
- // TODO: 现金奖励å¯åœ¨æ¤å¯¹æŽ¥é’±åŒ…å…¥è´¦ï¼›ä¼˜æƒ åˆ¸å¥–åŠ±å¯å¯¹æŽ¥å‘券逻辑
+
+ DealingsRecord dealingsRecord = new DealingsRecord();
+ dealingsRecord.setDealingsWay(DealingsRecordConstant.TYPE_REMARK[8]);
+ dealingsRecord.setAmount(amount);
+ dealingsRecord.setDealingsTime(new Date());
+ dealingsRecord.setLinkId(winner.getId());
+ dealingsRecord.setLinkUserId(userId);
+ dealingsRecord.setRegionId(regionId);
+ dealingsRecord.setLinkType(DealingsRecordConstant.TYPE[0]);
+ dealingsRecord.setDealingsType(DealingsRecordConstant.DEALINGS_TYPE[0]);
+ dealingsRecord.setCreateBy(userId);
+ dealingsRecordService.save(dealingsRecord);
+ }
+
+ private PlanetDrawWinner getOwnedWinner(String userId, String regionId, String winnerId) {
+ if (StringUtils.isEmpty(userId) || StringUtils.isEmpty(winnerId)) {
+ throw new HiverException("ä¸å¥–记录ä¸å˜åœ¨");
+ }
+ final PlanetDrawWinner winner = drawWinnerMapper.selectById(winnerId);
+ if (winner == null || !userId.equals(winner.getUserId()) || !regionId.equals(winner.getRegionId())) {
+ throw new HiverException("ä¸å¥–记录ä¸å˜åœ¨");
+ }
+ return winner;
}
private void saveWinner(PlanetDrawRecord record, PlanetReward reward, PlanetPoolTicket ticket, Date now) {
@@ -401,6 +477,7 @@ public class PlanetDrawServiceImpl implements PlanetDrawService {
winner.setAmount(reward.getAmount());
winner.setCouponId(reward.getCouponId());
winner.setIsReceived(0);
+ winner.setIsRead(0);
winner.setCreateTime(now);
drawWinnerMapper.insert(winner);
}
diff --git a/hiver-modules/hiver-mall/src/main/java/cc/hiver/mall/planet/service/impl/PlanetHuntServiceImpl.java b/hiver-modules/hiver-mall/src/main/java/cc/hiver/mall/planet/service/impl/PlanetHuntServiceImpl.java
index 9e74ad90..ceb1f22a 100644
--- a/hiver-modules/hiver-mall/src/main/java/cc/hiver/mall/planet/service/impl/PlanetHuntServiceImpl.java
+++ b/hiver-modules/hiver-mall/src/main/java/cc/hiver/mall/planet/service/impl/PlanetHuntServiceImpl.java
@@ -2,18 +2,20 @@ package cc.hiver.mall.planet.service.impl;
import cc.hiver.core.common.exception.HiverException;
import cc.hiver.mall.planet.constant.PlanetConstant;
-import cc.hiver.mall.planet.entity.PlanetBuffRecord;
import cc.hiver.mall.planet.entity.PlanetHuntRecord;
import cc.hiver.mall.planet.entity.PlanetTicket;
+import cc.hiver.mall.planet.entity.PlanetUserState;
import cc.hiver.mall.planet.mapper.PlanetHuntRecordMapper;
import cc.hiver.mall.planet.pojo.PlanetHuntResultVo;
import cc.hiver.mall.planet.service.*;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import lombok.extern.slf4j.Slf4j;
import org.apache.commons.lang3.StringUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
+import java.math.BigDecimal;
import java.time.LocalDate;
import java.util.Date;
import java.util.UUID;
@@ -41,10 +43,10 @@ public class PlanetHuntServiceImpl implements PlanetHuntService {
private PlanetRankService rankService;
@Autowired
- private PlanetBuffService buffService;
+ private PlanetNewsService newsService;
@Autowired
- private PlanetNewsService newsService;
+ private PlanetOperateService operateService;
@Override
public PlanetHuntResultVo hunt(String fromUserId, String regionId, String toUserId) {
@@ -77,29 +79,31 @@ public class PlanetHuntServiceImpl implements PlanetHuntService {
vo.setBountyTickets(0);
vo.setTotalGain(0);
- // ç›®æ ‡é˜²æŠ¤ç½©ï¼šé˜²æŠ¤BUFF 或 ä»Šæ—¥å·²è¢«è¿½æ•æˆåŠŸè¾¾ä¸Šé™
- final int targetHuntedSuccess = countTodayHuntedSuccess(toUserId, today);
- final boolean shielded = buffService.hasActiveBuff(toUserId, PlanetConstant.BUFF_SHIELD)
- || targetHuntedSuccess >= PlanetConstant.HUNTED_SUCCESS_LIMIT;
+ final PlanetUserState targetState = operateService.getOrCreateState(toUserId, regionId);
String result;
- if (shielded) {
+ if (hit(targetState.getTowerInterceptRate())) {
result = PlanetConstant.HUNT_SHIELD;
- vo.setMessage("ç›®æ ‡å¯åŠ¨äº†æ˜Ÿé™…é˜²æŠ¤ç½©ï¼Œæœ¬æ¬¡è¿½æ•æœªèƒ½ç¼´èŽ·");
+ final boolean countered = hit(targetState.getTowerCounterRate());
+ if (countered && from.getTicketCount() != null && from.getTicketCount() > 0) {
+ final String sourceId = UUID.randomUUID().toString().replace("-", "");
+ ticketService.deductTickets(fromUserId, regionId, 1,
+ PlanetConstant.TICKET_TYPE_HUNT, sourceId + "_drop",
+ "被" + safeName(target.getNickname()) + "防御塔å击掉è½");
+ ticketService.addTicketsWithoutBuff(toUserId, target.getRegionId(), 1,
+ PlanetConstant.TICKET_TYPE_HUNT, sourceId + "_counter",
+ "防御塔å击缴获" + safeName(from.getNickname()));
+ vo.setMessage("ç›®æ ‡é˜²å¾¡å¡”å击æˆåŠŸï¼ä½ ä¸ä»…没å·åˆ°ï¼Œè¿˜æŽ‰è½ 1 å¼ æ˜Ÿçƒåˆ¸");
+ } else if (countered) {
+ vo.setMessage("ç›®æ ‡é˜²å¾¡å¡”å击æˆåŠŸï¼ä½†ä½ 没有星çƒåˆ¸å¯æŽ‰è½");
+ } else {
+ vo.setMessage("ç›®æ ‡é˜²å¾¡å¡”æ‹¦æˆªäº†æœ¬æ¬¡æŽ å¤º");
+ }
} else if (target.getTicketCount() == null || target.getTicketCount() <= 0) {
result = PlanetConstant.HUNT_FAIL;
vo.setMessage("ç›®æ ‡æ˜Ÿçƒç©ºç©ºå¦‚也,未能缴获");
} else {
- // æˆåŠŸçŽ‡ï¼šåŸºç¡€ + 追æ•BUFFåŠ æˆ
- double rate = BASE_SUCCESS_RATE;
- final PlanetBuffRecord huntBuff = firstActiveBuff(fromUserId, PlanetConstant.BUFF_HUNT);
- if (huntBuff != null && huntBuff.getEffectValue() != null) {
- rate += huntBuff.getEffectValue().doubleValue();
- }
- if (rate > 1) {
- rate = 1;
- }
- final boolean success = ThreadLocalRandom.current().nextDouble() < rate;
+ final boolean success = ThreadLocalRandom.current().nextDouble() < BASE_SUCCESS_RATE;
if (success) {
result = PlanetConstant.HUNT_SUCCESS;
final int gain = 1;
@@ -124,10 +128,6 @@ public class PlanetHuntServiceImpl implements PlanetHuntService {
vo.setTotalGain(gain + bounty);
vo.setMessage("è¿½æ•æˆåŠŸï¼ç¼´èŽ· " + gain + " å¼ æ˜Ÿçƒåˆ¸" + (bounty > 0 ? ",é¢å¤–获得 " + bounty + " å¼ æ‚¬èµåˆ¸" : ""));
- // ç›®æ ‡è¢«è¿½æˆåŠŸè¾¾ä¸Šé™è‡ªåŠ¨å¼€é˜²æŠ¤ç½©
- if (targetHuntedSuccess + 1 >= PlanetConstant.HUNTED_SUCCESS_LIMIT) {
- buffService.grantBuff(toUserId, target.getRegionId(), PlanetConstant.BUFF_SHIELD, "hunt");
- }
// 快讯
newsService.addNews(regionId, PlanetConstant.NEWS_HUNT,
safeName(target.getNickname()) + " éé‡è¿½æ•,æŸå¤± " + (gain) + " å¼ æ˜Ÿçƒåˆ¸",
@@ -151,28 +151,30 @@ public class PlanetHuntServiceImpl implements PlanetHuntService {
return Math.max(0, PlanetConstant.HUNT_DAILY_LIMIT - used);
}
- private int countTodayHunts(String userId, LocalDate date) {
+ @Override
+ public Page raiders(String userId, String regionId, Integer pageNumber, Integer pageSize) {
+ final int num = pageNumber == null || pageNumber <= 0 ? 1 : pageNumber;
+ final int size = pageSize == null || pageSize <= 0 ? 10 : Math.min(pageSize, 50);
final LambdaQueryWrapper qw = new LambdaQueryWrapper<>();
- qw.eq(PlanetHuntRecord::getFromUserId, userId)
- .eq(PlanetHuntRecord::getHuntDate, date);
- return huntRecordMapper.selectCount(qw).intValue();
+ qw.eq(PlanetHuntRecord::getToUserId, userId)
+ .eq(PlanetHuntRecord::getRegionId, regionId)
+ .gt(PlanetHuntRecord::getGainTickets, 0)
+ .orderByDesc(PlanetHuntRecord::getCreateTime);
+ return huntRecordMapper.selectPage(new Page<>(num, size), qw);
}
- private int countTodayHuntedSuccess(String userId, LocalDate date) {
+ private int countTodayHunts(String userId, LocalDate date) {
final LambdaQueryWrapper qw = new LambdaQueryWrapper<>();
- qw.eq(PlanetHuntRecord::getToUserId, userId)
- .eq(PlanetHuntRecord::getResult, PlanetConstant.HUNT_SUCCESS)
+ qw.eq(PlanetHuntRecord::getFromUserId, userId)
.eq(PlanetHuntRecord::getHuntDate, date);
return huntRecordMapper.selectCount(qw).intValue();
}
- private PlanetBuffRecord firstActiveBuff(String userId, String type) {
- for (PlanetBuffRecord r : buffService.activeBuffs(userId)) {
- if (type.equals(r.getType())) {
- return r;
- }
+ private boolean hit(BigDecimal rate) {
+ if (rate == null || rate.compareTo(BigDecimal.ZERO) <= 0) {
+ return false;
}
- return null;
+ return BigDecimal.valueOf(ThreadLocalRandom.current().nextDouble() * 100).compareTo(rate) < 0;
}
private void saveHuntRecord(PlanetTicket from, PlanetTicket target, String regionId, String result,
diff --git a/hiver-modules/hiver-mall/src/main/java/cc/hiver/mall/planet/service/impl/PlanetOperateServiceImpl.java b/hiver-modules/hiver-mall/src/main/java/cc/hiver/mall/planet/service/impl/PlanetOperateServiceImpl.java
index a63f8b07..844ca2b3 100644
--- a/hiver-modules/hiver-mall/src/main/java/cc/hiver/mall/planet/service/impl/PlanetOperateServiceImpl.java
+++ b/hiver-modules/hiver-mall/src/main/java/cc/hiver/mall/planet/service/impl/PlanetOperateServiceImpl.java
@@ -9,6 +9,7 @@ import cc.hiver.mall.planet.service.PlanetNewsService;
import cc.hiver.mall.planet.service.PlanetOperateService;
import cc.hiver.mall.planet.service.PlanetTicketService;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import org.apache.commons.lang3.StringUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
@@ -78,10 +79,11 @@ public class PlanetOperateServiceImpl implements PlanetOperateService {
state.setWarehouseLevel(1);
state.setWarehouseCapacity(DEFAULT_WAREHOUSE_CAPACITY);
state.setWarehouseTicketCount(0);
+ final PlanetTowerLevelConfig towerLevel = getTowerLevel(regionId, 1);
state.setTowerLevel(1);
- state.setTowerInterceptRate(BigDecimal.ZERO);
- state.setTowerDamage(0);
- state.setTowerCounterRate(BigDecimal.ZERO);
+ state.setTowerInterceptRate(towerLevel == null ? BigDecimal.ZERO : towerLevel.getInterceptRate());
+ state.setTowerDamage(towerLevel == null ? 0 : towerLevel.getDamage());
+ state.setTowerCounterRate(towerLevel == null ? BigDecimal.ZERO : towerLevel.getCounterRate());
state.setDailySearchCount(0);
state.setDailySearchGain(0);
state.setDailyPlantGain(0);
@@ -181,7 +183,8 @@ public class PlanetOperateServiceImpl implements PlanetOperateService {
@Override
public List treeOrders(String userId, String regionId) {
final LambdaQueryWrapper qw = new LambdaQueryWrapper<>();
- qw.eq(PlanetTreeOrder::getUserId, userId).eq(PlanetTreeOrder::getRegionId, regionId).orderByDesc(PlanetTreeOrder::getCreateTime).last("limit 20");
+ qw.eq(PlanetTreeOrder::getUserId, userId).ne(PlanetTreeOrder::getStatus, PlanetConstant.TREE_STATUS_HARVESTED).
+ eq(PlanetTreeOrder::getRegionId, regionId).orderByDesc(PlanetTreeOrder::getCreateTime).last("limit 20");
return treeOrderMapper.selectList(qw);
}
@@ -296,12 +299,25 @@ public class PlanetOperateServiceImpl implements PlanetOperateService {
boolean countered = false;
int damage = 0;
int gain = 0;
+ int counterDrop = 0;
final int beforePublicTickets = nullToZero(target.getTicketCount());
fromState.setStamina(nullToZero(fromState.getStamina()) - cost);
if (intercepted) {
countered = hit(targetState.getTowerCounterRate());
damage = countered ? nullToZero(targetState.getTowerDamage()) : Math.max(1, nullToZero(targetState.getTowerDamage()) / 2);
fromState.setStamina(Math.max(0, nullToZero(fromState.getStamina()) - damage));
+ if (countered) {
+ PlanetTicket fromTicket = ticketMapper.selectOne(new LambdaQueryWrapper()
+ .eq(PlanetTicket::getRegionId, regionId).eq(PlanetTicket::getUserId, userId).last("limit 1"));
+ if (fromTicket != null && nullToZero(fromTicket.getTicketCount()) > 0) {
+ counterDrop = 1;
+ final String dropSourceId = genId();
+ ticketService.deductTickets(userId, regionId, counterDrop, PlanetConstant.TICKET_TYPE_SEARCH,
+ dropSourceId + "_drop", "防御塔å击掉è½");
+ ticketService.addTicketsWithoutBuff(target.getUserId(), regionId, counterDrop, PlanetConstant.TICKET_TYPE_SEARCH,
+ dropSourceId + "_gain", "防御塔å击缴获");
+ }
+ }
} else {
gain = calcSearchGain(config, beforePublicTickets, fromState);
if (gain > 0) {
@@ -325,8 +341,9 @@ public class PlanetOperateServiceImpl implements PlanetOperateService {
record.setCountered(countered ? 1 : 0);
record.setStaminaDamage(damage);
record.setGainTickets(gain);
+ record.setCounterDropTickets(counterDrop);
record.setTargetPublicTicketsBefore(beforePublicTickets);
- record.setMessage(intercepted ? "ç›®æ ‡é˜²å¾¡å¡”æ‹¦æˆªäº†æ¾é¼ 宇航员" : "æœæŸ¥æˆåŠŸï¼ŒèŽ·å¾—æ˜Ÿçƒåˆ¸");
+ record.setMessage(buildSearchMessage(intercepted, countered, gain, counterDrop));
record.setCreateTime(new Date());
searchRecordMapper.insert(record);
if (gain > 0) {
@@ -340,6 +357,7 @@ public class PlanetOperateServiceImpl implements PlanetOperateService {
vo.setIntercepted(intercepted);
vo.setCountered(countered);
vo.setGainTickets(gain);
+ vo.setCounterDropTickets(counterDrop);
vo.setStaminaDamage(damage);
vo.setRemainStamina(fromState.getStamina());
vo.setRemainSearchCount(Math.max(0, dailyLimit - nullToZero(fromState.getDailySearchCount())));
@@ -347,6 +365,22 @@ public class PlanetOperateServiceImpl implements PlanetOperateService {
return vo;
}
+ @Override
+ public Page raiders(String userId, String regionId, Integer pageNumber, Integer pageSize) {
+ final int num = pageNumber == null || pageNumber <= 0 ? 1 : pageNumber;
+ final int size = pageSize == null || pageSize <= 0 ? 10 : Math.min(pageSize, 50);
+ final Page page = new Page<>(num, size);
+ final LambdaQueryWrapper qw = new LambdaQueryWrapper<>();
+ qw.eq(PlanetSearchRecord::getToUserId, userId);
+ if (StringUtils.isNotEmpty(regionId)) {
+ qw.eq(PlanetSearchRecord::getRegionId, regionId);
+ }
+ qw.orderByDesc(PlanetSearchRecord::getCreateTime);
+ final Page result = searchRecordMapper.selectPage(page, qw);
+ fillSearchUserInfo(result.getRecords(), regionId);
+ return result;
+ }
+
@Override
public List staminaItems(String regionId) {
final LambdaQueryWrapper qw = new LambdaQueryWrapper<>();
@@ -490,6 +524,52 @@ public class PlanetOperateServiceImpl implements PlanetOperateService {
return list.get(new Random().nextInt(list.size()));
}
+ private void fillSearchUserInfo(List records, String regionId) {
+ if (records == null || records.isEmpty()) {
+ return;
+ }
+ final Map users = new HashMap<>();
+ for (PlanetSearchRecord record : records) {
+ putTicketUser(users, record.getFromUserId(), regionId);
+ putTicketUser(users, record.getToUserId(), regionId);
+ }
+ for (PlanetSearchRecord record : records) {
+ final PlanetTicket from = users.get(record.getFromUserId());
+ if (from != null) {
+ record.setFromUserName(from.getNickname());
+ record.setFromAvatar(from.getAvatar());
+ }
+ final PlanetTicket to = users.get(record.getToUserId());
+ if (to != null) {
+ record.setToUserName(to.getNickname());
+ record.setToAvatar(to.getAvatar());
+ }
+ }
+ }
+
+ private void putTicketUser(Map users, String userId, String regionId) {
+ if (StringUtils.isEmpty(userId) || users.containsKey(userId)) {
+ return;
+ }
+ PlanetTicket ticket = ticketMapper.selectOne(new LambdaQueryWrapper()
+ .eq(PlanetTicket::getRegionId, regionId)
+ .eq(PlanetTicket::getUserId, userId)
+ .last("limit 1"));
+ if (ticket != null) {
+ users.put(userId, ticket);
+ }
+ }
+
+ private String buildSearchMessage(boolean intercepted, boolean countered, int gain, int counterDrop) {
+ if (intercepted && countered) {
+ return counterDrop > 0 ? "防御塔命ä¸ï¼æŽ å¤ºè€…æŽ‰è½ " + counterDrop + " å¼ æ˜Ÿçƒåˆ¸" : "防御塔命ä¸ï¼æŽ 夺者空手而归";
+ }
+ if (intercepted) {
+ return "ç›®æ ‡é˜²å¾¡å¡”æ‹¦æˆªäº†æ¾é¼ 宇航员";
+ }
+ return gain > 0 ? "æœæŸ¥æˆåŠŸï¼ŒèŽ·å¾— " + gain + " å¼ æ˜Ÿçƒåˆ¸" : "æœæŸ¥æˆåŠŸï¼Œä½†ç›®æ ‡æ²¡æœ‰å¯èŽ·å¾—çš„æ˜Ÿçƒåˆ¸";
+ }
+
private int calcSearchGain(PlanetSearchConfig config, int targetTicket, PlanetUserState fromState) {
int min = config.getMinGain() == null ? 1 : config.getMinGain();
int max = config.getMaxGain() == null ? 3 : config.getMaxGain();
diff --git a/hiver-modules/hiver-mall/src/main/java/cc/hiver/mall/planet/service/impl/PlanetServiceImpl.java b/hiver-modules/hiver-mall/src/main/java/cc/hiver/mall/planet/service/impl/PlanetServiceImpl.java
index f3cae0b2..9f818e83 100644
--- a/hiver-modules/hiver-mall/src/main/java/cc/hiver/mall/planet/service/impl/PlanetServiceImpl.java
+++ b/hiver-modules/hiver-mall/src/main/java/cc/hiver/mall/planet/service/impl/PlanetServiceImpl.java
@@ -1,10 +1,8 @@
package cc.hiver.mall.planet.service.impl;
import cc.hiver.mall.planet.constant.PlanetConstant;
-import cc.hiver.mall.planet.entity.PlanetBuffRecord;
import cc.hiver.mall.planet.entity.PlanetPool;
import cc.hiver.mall.planet.entity.PlanetTicket;
-import cc.hiver.mall.planet.pojo.PlanetBuffVo;
import cc.hiver.mall.planet.pojo.PlanetHomeVo;
import cc.hiver.mall.planet.pojo.PlanetQuery;
import cc.hiver.mall.planet.pojo.PlanetRankItemVo;
@@ -14,9 +12,7 @@ import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import java.math.BigDecimal;
-import java.util.ArrayList;
import java.util.Date;
-import java.util.List;
/**
* 白嫖星çƒ-首页èšåˆæœåŠ¡å®žçŽ°
@@ -87,7 +83,7 @@ public class PlanetServiceImpl implements PlanetService {
vo.setMyRankNo(rankService.userRankNo(regionId, userId));
// 我生效的BUFF
- final List myBuffs = new ArrayList<>();
+ /*final List myBuffs = new ArrayList<>();
for (PlanetBuffRecord r : buffService.activeBuffs(userId)) {
final PlanetBuffVo bv = new PlanetBuffVo();
bv.setId(r.getBuffId());
@@ -97,7 +93,7 @@ public class PlanetServiceImpl implements PlanetService {
bv.setActiveEndTime(r.getEndTime());
myBuffs.add(bv);
}
- vo.setMyBuffs(myBuffs);
+ vo.setMyBuffs(myBuffs);*/
// 儿¿å—
vo.setTasks(taskService.listTasks(userId, regionId));
@@ -107,9 +103,10 @@ public class PlanetServiceImpl implements PlanetService {
vo.setRankTotalPages(rankPage.getPages());
vo.setRankPageNumber(rankPage.getCurrent());
vo.setBuffShop(buffService.shopList(userId, regionId));
- vo.setNewsList(newsService.latest(regionId, 20));
+ vo.setNewsList(newsService.latest(regionId, 10));
vo.setOperate(operateService.overview(userId, regionId));
vo.setDailyLoop(drawService.dailyLoop(userId, regionId));
+ vo.setUnreadWinning(drawService.unreadWinning(userId, regionId));
return vo;
}
}
diff --git a/hiver-modules/hiver-mall/src/main/java/cc/hiver/mall/quartz/MerchantSettlementTask.java b/hiver-modules/hiver-mall/src/main/java/cc/hiver/mall/quartz/MerchantSettlementTask.java
index aaa77af4..772ac5aa 100644
--- a/hiver-modules/hiver-mall/src/main/java/cc/hiver/mall/quartz/MerchantSettlementTask.java
+++ b/hiver-modules/hiver-mall/src/main/java/cc/hiver/mall/quartz/MerchantSettlementTask.java
@@ -46,6 +46,7 @@ public class MerchantSettlementTask {
LambdaQueryWrapper qw = new LambdaQueryWrapper<>();
qw.in(MallOrder::getStatus, 5, 12);
qw.eq(MallOrder::getSettlementStatus, 0);
+ qw.ne(MallOrder::getOtherOrder, 1);
List orders = mallOrderService.list(qw);
for (MallOrder order : orders) {
diff --git a/hiver-modules/hiver-mall/src/main/java/cc/hiver/mall/quartz/PlanetAdventureSettleTask.java b/hiver-modules/hiver-mall/src/main/java/cc/hiver/mall/quartz/PlanetAdventureSettleTask.java
index e1472f7b..dc409d9a 100644
--- a/hiver-modules/hiver-mall/src/main/java/cc/hiver/mall/quartz/PlanetAdventureSettleTask.java
+++ b/hiver-modules/hiver-mall/src/main/java/cc/hiver/mall/quartz/PlanetAdventureSettleTask.java
@@ -1,11 +1,20 @@
package cc.hiver.mall.quartz;
+import cc.hiver.mall.planet.constant.PlanetConstant;
+import cc.hiver.mall.planet.entity.PlanetTicket;
+import cc.hiver.mall.planet.mapper.PlanetTicketMapper;
import cc.hiver.mall.planet.service.PlanetAdventureService;
+import cc.hiver.mall.planet.service.PlanetTicketService;
+import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.scheduling.annotation.Scheduled;
import org.springframework.stereotype.Component;
+import java.time.LocalDate;
+import java.util.List;
+import java.util.stream.Collectors;
+
@Slf4j
@Component
public class PlanetAdventureSettleTask {
@@ -13,13 +22,53 @@ public class PlanetAdventureSettleTask {
@Autowired
private PlanetAdventureService adventureService;
+ @Autowired
+ private PlanetTicketMapper ticketMapper;
+
+ @Autowired
+ private PlanetTicketService ticketService;
+
@Scheduled(cron = "0 30 21 * * ?")
public void settleAdventureRanks() {
try {
int count = adventureService.settleDueRanks();
- log.info("[白嫖星çƒ] å¦é™¢åŠ©æŽ¨èµ›ç»“ç®—å®Œæˆ count={}", count);
+ int rewardCount = rewardRegionTopTickets();
+ log.info("[白嫖星çƒ] å¦é™¢åŠ©æŽ¨èµ›ç»“ç®—å®Œæˆ count={}, rankRewardCount={}", count, rewardCount);
} catch (Exception e) {
log.error("[白嫖星çƒ] å¦é™¢åŠ©æŽ¨èµ›ç»“ç®—å¼‚å¸¸: {}", e.getMessage(), e);
}
}
+
+ private int rewardRegionTopTickets() {
+ List regionIds = ticketMapper.selectList(new LambdaQueryWrapper()
+ .select(PlanetTicket::getRegionId)
+ .isNotNull(PlanetTicket::getRegionId)
+ .gt(PlanetTicket::getTicketCount, 0)
+ .groupBy(PlanetTicket::getRegionId)).stream()
+ .map(PlanetTicket::getRegionId)
+ .collect(Collectors.toList());
+ int rewarded = 0;
+ String rewardDate = LocalDate.now().toString();
+ for (String regionId : regionIds) {
+ List topList = ticketMapper.selectList(new LambdaQueryWrapper()
+ .eq(PlanetTicket::getRegionId, regionId)
+ .gt(PlanetTicket::getTicketCount, 0)
+ .orderByDesc(PlanetTicket::getTicketCount)
+ .orderByDesc(PlanetTicket::getTotalTicket)
+ .last("limit 5"));
+ for (int i = 0; i < topList.size(); i++) {
+ PlanetTicket ticket = topList.get(i);
+ int rankNo = i + 1;
+ int reward = 6 - rankNo;
+ int added = ticketService.addTicketsWithoutBuff(ticket.getUserId(), regionId, reward,
+ PlanetConstant.TICKET_TYPE_RANK_DAILY_REWARD,
+ rewardDate + "_" + regionId + "_" + ticket.getUserId(),
+ "æ˜ŸçƒæŽ’è¡Œæ¦œç¬¬" + rankNo + "åæ¯æ—¥å¥–åŠ±");
+ if (added > 0) {
+ rewarded++;
+ }
+ }
+ }
+ return rewarded;
+ }
}
diff --git a/hiver-modules/hiver-mall/src/main/java/cc/hiver/mall/serviceimpl/mybatis/MallOrderServiceImpl.java b/hiver-modules/hiver-mall/src/main/java/cc/hiver/mall/serviceimpl/mybatis/MallOrderServiceImpl.java
index 4ae940ec..61ca3056 100644
--- a/hiver-modules/hiver-mall/src/main/java/cc/hiver/mall/serviceimpl/mybatis/MallOrderServiceImpl.java
+++ b/hiver-modules/hiver-mall/src/main/java/cc/hiver/mall/serviceimpl/mybatis/MallOrderServiceImpl.java
@@ -1752,10 +1752,10 @@ public class MallOrderServiceImpl extends ServiceImpl item.getRefundAmount()) // æå– BigDecimal 金é¢
.reduce(BigDecimal.ZERO, BigDecimal::add);
- wechatPayUtil.refund(mallRefundRecord.getOrderId(), totalRefund.multiply(new BigDecimal(100)).longValue(), totalRefund.multiply(new BigDecimal(100)).longValue());
+ wechatPayUtil.refund(mallRefundRecord.getOrderId(), order.getTotalAmount().multiply(new BigDecimal(100)).longValue(), totalRefund.multiply(new BigDecimal(100)).longValue());
if(mallRefundRecord.getLinkId().toUpperCase().startsWith("W")){
//é…é€å‘˜åŒæ„退款。扣掉余é¢
Worker worker = workerServiceImpl.findByWorkerId(mallRefundRecord.getLinkId());
@@ -556,7 +556,7 @@ public class MallRefundRecordServiceImpl extends ServiceImpl phones = Arrays.asList(userPhones.split(","));
phones.forEach(phone -> {
for(int i = 0; i < giveNum; i++){
- User user = userService.findByMobile(phone,3);
+ User user = userService.findByMobile(phone,"0");
if(user != null){
- this.receiveCoupon(userService.findByMobile(phone,3).getId(), couponId);
+ this.receiveCoupon(userService.findByMobile(phone,"0").getId(), couponId);
}
}
});
diff --git a/hiver-modules/hiver-mall/src/main/resources/sql/planet.sql b/hiver-modules/hiver-mall/src/main/resources/sql/planet.sql
index 2a84df93..0a9b82c4 100644
--- a/hiver-modules/hiver-mall/src/main/resources/sql/planet.sql
+++ b/hiver-modules/hiver-mall/src/main/resources/sql/planet.sql
@@ -221,6 +221,8 @@ CREATE TABLE `t_planet_draw_winner` (
`coupon_id` varchar(64) DEFAULT NULL COMMENT 'ä¼˜æƒ åˆ¸id',
`is_received` int DEFAULT '0' COMMENT '是å¦å·²é¢†å– 0å¦ 1是',
`received_time` datetime DEFAULT NULL COMMENT '领喿—¶é—´',
+ `is_read` int DEFAULT '0' COMMENT '是å¦å·²è¯»/已弹窗 0å¦ 1是',
+ `read_time` datetime DEFAULT NULL COMMENT '已读时间',
`create_time` datetime DEFAULT NULL,
PRIMARY KEY (`id`),
KEY `idx_user` (`user_id`),
@@ -396,6 +398,7 @@ CREATE TABLE `t_planet_search_record` (
`countered` int DEFAULT '0' COMMENT '是å¦å击 0å¦1是',
`stamina_damage` int DEFAULT '0' COMMENT 'é¢å¤–体力伤害',
`gain_tickets` int DEFAULT '0' COMMENT '获得券数',
+ `counter_drop_tickets` int DEFAULT '0' COMMENT '防御塔å击掉è½åˆ¸æ•°',
`target_public_tickets_before` int DEFAULT '0' COMMENT 'ç›®æ ‡å¯æœæŸ¥åˆ¸å¿«ç…§',
`message` varchar(255) DEFAULT NULL COMMENT '结果文案',
`create_time` datetime DEFAULT NULL,