src/main/java/com/xcong/excoin/common/enumerates/MemberWalletCoinEnum.java
@@ -17,6 +17,7 @@ CONTENTFROMCONTRACT("0004","由合约账户转入"), CONTENTFROMAGENT("0005","由代理账户转入"), CONTENTFROMACTIVITY("0006","活动激活补贴"), WALLETCOINCODE("USDT", "USDT"), src/main/java/com/xcong/excoin/modules/activity/controller/ActivityController.java
@@ -4,14 +4,17 @@ import org.springframework.web.bind.annotation.GetMapping; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RequestParam; import org.springframework.web.bind.annotation.RestController; import com.xcong.excoin.common.response.Result; import com.xcong.excoin.modules.activity.service.ActivityService; import com.xcong.excoin.modules.activity.vo.ActivityMainListVo; import com.xcong.excoin.modules.activity.vo.ActivityMainDetailVo; import com.xcong.excoin.modules.activity.vo.ActivityMainVo; import com.xcong.excoin.modules.helpCenter.vo.NoticeInfoVo; import io.swagger.annotations.Api; import io.swagger.annotations.ApiOperation; import io.swagger.annotations.ApiParam; import io.swagger.annotations.ApiResponse; import io.swagger.annotations.ApiResponses; import lombok.extern.slf4j.Slf4j; @@ -26,13 +29,36 @@ ActivityService activityService; /** * 活动中心 * 首页获取活动图片 */ @ApiOperation(value="用户协议", notes="用户协议") @ApiResponses({@ApiResponse( code = 200, message = "success", response = ActivityMainListVo.class)}) @GetMapping(value = "/getActivityMainList") public Result getActivityMainList() { return activityService.getActivityMainList(); @ApiOperation(value="首页获取活动图片", notes="首页获取活动图片") @ApiResponses({@ApiResponse( code = 200, message = "success", response = ActivityMainVo.class)}) @GetMapping(value = "/getActivityMain") public Result getActivityMain() { return activityService.getActivityMain(); } /** * 活动详情 */ @ApiOperation(value="活动详情", notes="活动详情") @ApiResponses({@ApiResponse( code = 200, message = "success", response = ActivityMainDetailVo.class)}) @GetMapping(value = "/getActivityMainDetail") public Result getActivityMainDetail(@ApiParam(name = "活动ID", value = "ID", example = "1") @RequestParam(value = "Id") long Id) { return activityService.getActivityMainDetail(Id); } /** * 点击领取 */ @ApiOperation(value="点击领取", notes="点击领取") @GetMapping(value = "/clinkReceive") public Result clinkReceive(@ApiParam(name = "活动规则ID", value = "subId", example = "1") @RequestParam(value = "subId") long subId) { return activityService.clinkReceive(subId); } } src/main/java/com/xcong/excoin/modules/activity/dao/ActivityReceiveRecordDao.java
@@ -1,7 +1,12 @@ package com.xcong.excoin.modules.activity.dao; import java.util.List; import org.apache.ibatis.annotations.Param; import com.baomidou.mybatisplus.core.mapper.BaseMapper; import com.xcong.excoin.modules.activity.entity.ActivityReceiveRecord; import com.xcong.excoin.modules.activity.vo.ActivityReceiveRecordVo; /** * @description 活动记录表 @@ -10,4 +15,6 @@ */ public interface ActivityReceiveRecordDao extends BaseMapper<ActivityReceiveRecord>{ List<ActivityReceiveRecordVo> selectListByMemberIdAndMainId(@Param("memberId")Long memberId, @Param("mainId")long id); } src/main/java/com/xcong/excoin/modules/activity/entity/ActivityMain.java
@@ -64,6 +64,10 @@ private BigDecimal amount; /** * banner图Id */ private Long bannerId; src/main/java/com/xcong/excoin/modules/activity/entity/ActivityReceiveRecord.java
@@ -19,9 +19,6 @@ private static final long serialVersionUID = 1L; /** * 用户ID */ @@ -58,10 +55,11 @@ private Long amcId; /** * 激活状态1已激活2未激活 *激活状态1已激活2未激活3已失效 */ public static final Integer RECEIVESTATE_ONE = 1; public static final Integer RECEIVESTATE_TWO = 2; public static final Integer RECEIVESTATE_THREE = 3; private Integer receiveState; /** @@ -74,8 +72,8 @@ /** * 失效时间 */ //激活后在当前时间的基础上新增30天 public static final long DAYS = 30; private Date invalidTime; src/main/java/com/xcong/excoin/modules/activity/entity/ActivitySub.java
@@ -16,9 +16,6 @@ private static final long serialVersionUID = 1L; /** * 活动主表ID */ @@ -29,6 +26,15 @@ /** * 规则code */ public static final String CODE_ONE = "CODE_ONE"; public static final String CODE_TWO = "CODE_TWO"; public static final BigDecimal CODE_TWO_BIG_DECIMAL = new BigDecimal(200); public static final String CODE_THREE = "CODE_THREE"; public static final BigDecimal CODE_THREE_BIG_DECIMAL = new BigDecimal(500); public static final String CODE_FOUR = "CODE_FOUR"; public static final BigDecimal CODE_FOUR_BIG_DECIMAL = new BigDecimal(900); public static final String CODE_FIVE = "CODE_FIVE"; public static final BigDecimal CODE_FIVE_BIG_DECIMAL = new BigDecimal(1900); private String code; @@ -45,7 +51,7 @@ */ private String condition; private String conditions; /** * 奖励金额 src/main/java/com/xcong/excoin/modules/activity/service/ActivityService.java
@@ -6,6 +6,10 @@ public interface ActivityService extends IService<ActivityMain> { Result getActivityMainList(); Result getActivityMain(); Result getActivityMainDetail(long id); Result clinkReceive(long subId); } src/main/java/com/xcong/excoin/modules/activity/service/impl/ActivityServiceImpl.java
@@ -1,17 +1,46 @@ package com.xcong.excoin.modules.activity.service.impl; import java.math.BigDecimal; import java.util.Date; import java.util.List; import javax.annotation.Resource; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; import com.xcong.excoin.common.LoginUserUtils; import com.xcong.excoin.common.enumerates.MemberWalletCoinEnum; import com.xcong.excoin.common.response.Result; import com.xcong.excoin.modules.activity.dao.ActivityMainDao; import com.xcong.excoin.modules.activity.dao.ActivityMemberDetailDao; import com.xcong.excoin.modules.activity.dao.ActivityReceiveRecordDao; import com.xcong.excoin.modules.activity.dao.ActivitySubDao; import com.xcong.excoin.modules.activity.entity.ActivityMain; import com.xcong.excoin.modules.activity.entity.ActivityMemberDetail; import com.xcong.excoin.modules.activity.entity.ActivityReceiveRecord; import com.xcong.excoin.modules.activity.entity.ActivitySub; import com.xcong.excoin.modules.activity.service.ActivityService; import com.xcong.excoin.modules.activity.vo.ActivityMainDetailVo; import com.xcong.excoin.modules.activity.vo.ActivityMainVo; import com.xcong.excoin.modules.activity.vo.ActivityReceiveRecordVo; import com.xcong.excoin.modules.coin.dao.MemberAccountMoneyChangeDao; import com.xcong.excoin.modules.coin.entity.MemberAccountMoneyChange; import com.xcong.excoin.modules.contract.dao.ContractOrderDao; import com.xcong.excoin.modules.contract.entity.ContractOrderEntity; import com.xcong.excoin.modules.documentary.vo.MemberIsTradeVo; import com.xcong.excoin.modules.member.dao.MemberDao; import com.xcong.excoin.modules.member.dao.MemberWalletCoinDao; import com.xcong.excoin.modules.member.entity.MemberEntity; import com.xcong.excoin.modules.member.entity.MemberWalletCoinEntity; import com.xcong.excoin.modules.platform.dao.PlatformBannerDao; import com.xcong.excoin.modules.platform.entity.PlatformBannerEntity; import com.xcong.excoin.utils.MessageSourceUtils; import cn.hutool.core.collection.CollUtil; import cn.hutool.core.util.ObjectUtil; import lombok.extern.slf4j.Slf4j; @Slf4j @@ -26,11 +55,216 @@ private ActivityMemberDetailDao activityMemberDetailDao; @Resource private ActivityReceiveRecordDao activityReceiveRecordDao; @Resource private MemberDao memberDao; @Resource PlatformBannerDao platformBannerDao; @Resource ContractOrderDao contractOrderDao; @Resource MemberAccountMoneyChangeDao memberAccountMoneyChangeDao; @Resource MemberWalletCoinDao memberWalletCoinDao; @Override public Result getActivityMainList() { // TODO Auto-generated method stub return null; public Result getActivityMain() { //登录验证 LoginUserUtils.getAppLoginUser().getId(); ActivityMainVo activityMainVo = new ActivityMainVo(); //活动图片 QueryWrapper<PlatformBannerEntity> queryWrapper = new QueryWrapper<>(); queryWrapper.eq("is_banner",PlatformBannerEntity.BANNER_NO); PlatformBannerEntity platformBannerEntity = platformBannerDao.selectOne(queryWrapper); //查询图片绑定的活动 if(ObjectUtil.isNotEmpty(platformBannerEntity)) { activityMainVo.setImageUrl(platformBannerEntity.getImageUrl()); activityMainVo.setIsJump(Integer.parseInt(platformBannerEntity.getIsJump())); QueryWrapper<ActivityMain> queryWrappers = new QueryWrapper<>(); queryWrappers.eq("banner_id",platformBannerEntity.getId()); ActivityMain activityMain = activityMainDao.selectOne(queryWrappers); if(ObjectUtil.isNotEmpty(activityMain)) { activityMainVo.setId(activityMain.getId()); } } return Result.ok(activityMainVo); } @Override public Result getActivityMainDetail(long id) { //登录验证 Long memberId = LoginUserUtils.getAppLoginUser().getId(); ActivityMainDetailVo activityMainDetailVo = new ActivityMainDetailVo(); /** * 头部信息 */ QueryWrapper<ActivityMemberDetail> queryWrapper = new QueryWrapper<>(); queryWrapper.eq("member_id",memberId); queryWrapper.eq("main_id",id); ActivityMemberDetail activityMemberDetail = activityMemberDetailDao.selectOne(queryWrapper); //获取当前人的累计爆仓金额 BigDecimal burstUsdt = contractOrderDao.getBurstUsdtByMemberId(memberId); activityMainDetailVo.setBurstUsdt(burstUsdt); activityMainDetailVo.setReceivedUsdt(activityMemberDetail.getReceivedUsdt()); activityMainDetailVo.setSurplusUsdt(activityMemberDetail.getSurplusUsdt()); /** * 活动名称 */ ActivityMain activityMain = activityMainDao.selectById(id); activityMainDetailVo.setName(activityMain.getName()); activityMainDetailVo.setContent(activityMain.getContent()); activityMainDetailVo.setState(activityMain.getState()); activityMainDetailVo.setStartTime(activityMain.getStartTime()); activityMainDetailVo.setEndTime(activityMain.getEndTime()); /** * 活动细则 */ //根据活动主表ID和memberID获取对应的活动细则 List<ActivityReceiveRecordVo> activityReceiveRecordVos = activityReceiveRecordDao.selectListByMemberIdAndMainId(memberId,id); activityMainDetailVo.setActivityReceiveRecordVos(activityReceiveRecordVos); return Result.ok(activityMainDetailVo); } @Override @Transactional(rollbackFor = Exception.class) public Result clinkReceive(long subId) { //登录验证 Long memberId = LoginUserUtils.getAppLoginUser().getId(); //验证是否实名认证 MemberEntity memberEntity = memberDao.selectById(memberId); Integer certifyStatus = memberEntity.getCertifyStatus(); if(MemberEntity.CERTIFY_STATUS_Y != certifyStatus) { return Result.fail(MessageSourceUtils.getString("activity_service_0001")); } //验证领取记录是否失效 QueryWrapper<ActivityReceiveRecord> queryWrapperActivityReceiveRecord = new QueryWrapper<>(); queryWrapperActivityReceiveRecord.eq("member_id",memberId); queryWrapperActivityReceiveRecord.eq("sub_id",subId); ActivityReceiveRecord activityReceiveRecord = activityReceiveRecordDao.selectOne(queryWrapperActivityReceiveRecord); Date receiveTime = activityReceiveRecord.getReceiveTime(); Date date = new Date(); if(receiveTime.getTime() - date.getTime() < 0) { return Result.fail(MessageSourceUtils.getString("activity_service_0002")); } //验证当前活动是否结束 ActivityMain activityMain = activityMainDao.selectById(activityReceiveRecord.getMainId()); Date endTime = activityMain.getEndTime(); if(endTime.getTime() - date.getTime() < 0) { return Result.fail(MessageSourceUtils.getString("activity_service_0004")); } //处于失效状态 Integer receiveState = activityReceiveRecord.getReceiveState(); if(ActivityReceiveRecord.RECEIVESTATE_THREE == receiveState) { return Result.fail(MessageSourceUtils.getString("activity_service_0002")); } //不能重复领取 if(ActivityReceiveRecord.RECEIVESTATE_ONE == receiveState) { return Result.fail(MessageSourceUtils.getString("activity_service_0003")); } //获取对应的规则编码 ActivitySub activitySub = activitySubDao.selectById(subId); String code = activitySub.getCode(); //获取当前人的累计爆仓金额 BigDecimal burstUsdt = contractOrderDao.getBurstUsdtByMemberId(memberId); //判断是否满足领取条件 if(ActivitySub.CODE_TWO.equals(code)) { if(ActivitySub.CODE_TWO_BIG_DECIMAL.compareTo(burstUsdt) > 0) { return Result.fail(MessageSourceUtils.getString("activity_service_0005")); } } if(ActivitySub.CODE_THREE.equals(code)) { if(ActivitySub.CODE_THREE_BIG_DECIMAL.compareTo(burstUsdt) > 0) { return Result.fail(MessageSourceUtils.getString("activity_service_0005")); } } if(ActivitySub.CODE_FOUR.equals(code)) { if(ActivitySub.CODE_FOUR_BIG_DECIMAL.compareTo(burstUsdt) > 0) { return Result.fail(MessageSourceUtils.getString("activity_service_0005")); } } if(ActivitySub.CODE_FIVE.equals(code)) { if(ActivitySub.CODE_FIVE_BIG_DECIMAL.compareTo(burstUsdt) > 0) { return Result.fail(MessageSourceUtils.getString("activity_service_0005")); } } Long mainId = activitySub.getMainId(); BigDecimal amount = activitySub.getAmount(); /** * 更新领取记录表 */ activityReceiveRecord.setReceiveCoinAmount(amount); activityReceiveRecord.setReceiveState(ActivityReceiveRecord.RECEIVESTATE_ONE); activityReceiveRecord.setReceiveTime(new Date()); activityReceiveRecordDao.updateById(activityReceiveRecord); /** * 更新个人详情页面信息 */ QueryWrapper<ActivityMemberDetail> queryWrapperMemberDetail = new QueryWrapper<>(); queryWrapperMemberDetail.eq("member_id",memberId); queryWrapperMemberDetail.eq("main_id",mainId); ActivityMemberDetail activityMemberDetail = activityMemberDetailDao.selectOne(queryWrapperMemberDetail); //累计爆仓金额 activityMemberDetail.setBurstUsdt(burstUsdt); //已领取USDT BigDecimal receivedUsdt = activityMemberDetail.getReceivedUsdt(); BigDecimal addReceivedUsdt = receivedUsdt.add(amount); activityMemberDetail.setReceivedUsdt(addReceivedUsdt); //剩余待领取 BigDecimal amountMain = activityMain.getAmount(); BigDecimal subtractSurplusUsdt = amountMain.subtract(addReceivedUsdt); activityMemberDetail.setSurplusUsdt(subtractSurplusUsdt); activityMemberDetailDao.updateById(activityMemberDetail); /** * 生成一个币币流水记录 */ MemberAccountMoneyChange memberAccountMoneyChange = new MemberAccountMoneyChange(); memberAccountMoneyChange.setContent(MemberWalletCoinEnum.CONTENTFROMACTIVITY.getValue()); memberAccountMoneyChange.setMemberId(memberId); memberAccountMoneyChange.setAmount(amount); memberAccountMoneyChange.setStatus(MemberAccountMoneyChange.STATUS_SUCCESS_INTEGER); memberAccountMoneyChange.setSymbol(MemberWalletCoinEnum.WALLETCOINCODE.getValue()); memberAccountMoneyChange.setType(MemberAccountMoneyChange.TYPE_WALLET_COIN); memberAccountMoneyChangeDao.insert(memberAccountMoneyChange); /** * 更新币币账户 */ MemberWalletCoinEntity memberWalletCoinEntity = memberWalletCoinDao.selectWalletCoinBymIdAndCode(memberId, MemberWalletCoinEnum.WALLETCOINCODE.getValue()); BigDecimal availableBalance = memberWalletCoinEntity.getAvailableBalance(); BigDecimal totalBalance = memberWalletCoinEntity.getTotalBalance(); availableBalance.add(amount); totalBalance.add(amount); memberWalletCoinDao.updateById(memberWalletCoinEntity); return Result.ok(MessageSourceUtils.getString("activity_service_0006")); } } src/main/java/com/xcong/excoin/modules/activity/vo/ActivityMainDetailVo.java
New file @@ -0,0 +1,47 @@ package com.xcong.excoin.modules.activity.vo; import java.math.BigDecimal; import java.util.Date; import java.util.List; import com.fasterxml.jackson.annotation.JsonFormat; import io.swagger.annotations.ApiModel; import io.swagger.annotations.ApiModelProperty; import lombok.Data; @Data @ApiModel(value = "ActivityMainDetailVo", description = "参数返回类") public class ActivityMainDetailVo { /** * 头部信息 */ @ApiModelProperty("累计爆仓额度") private BigDecimal burstUsdt; @ApiModelProperty("已领取USDT") private BigDecimal receivedUsdt; @ApiModelProperty("剩余待领取") private BigDecimal surplusUsdt; /** * 活动名称 */ @ApiModelProperty("活动名称") private String name; @ApiModelProperty("内容") private String content; @ApiModelProperty("活动状态1:开始2结束") private Integer state; @JsonFormat(pattern = "yyyy-MM-dd", timezone = "GMT+8") @ApiModelProperty("开始时间") private Date startTime; @JsonFormat(pattern = "yyyy-MM-dd", timezone = "GMT+8") @ApiModelProperty("结束时间") private Date endTime; /** * 活动细则 */ @ApiModelProperty("活动卷") private List<ActivityReceiveRecordVo> activityReceiveRecordVos; } src/main/java/com/xcong/excoin/modules/activity/vo/ActivityMainListVo.java
File was deleted src/main/java/com/xcong/excoin/modules/activity/vo/ActivityMainVo.java
New file @@ -0,0 +1,18 @@ package com.xcong.excoin.modules.activity.vo; import io.swagger.annotations.ApiModel; import io.swagger.annotations.ApiModelProperty; import lombok.Data; @Data @ApiModel(value = "ActivityMainVo", description = "参数返回类") public class ActivityMainVo { @ApiModelProperty("图片链接") private String imageUrl; @ApiModelProperty("活动ID") private Long id; @ApiModelProperty("是否可跳转 1-是2-否") private int isJump; } src/main/java/com/xcong/excoin/modules/activity/vo/ActivityReceiveRecordVo.java
New file @@ -0,0 +1,32 @@ package com.xcong.excoin.modules.activity.vo; import java.math.BigDecimal; import java.util.Date; import com.fasterxml.jackson.annotation.JsonFormat; import io.swagger.annotations.ApiModel; import io.swagger.annotations.ApiModelProperty; import lombok.Data; @Data @ApiModel(value = "ActivityReceiveRecordVo", description = "参数返回类") public class ActivityReceiveRecordVo { @ApiModelProperty("活动规则ID") private Long subId; @ApiModelProperty("规则名称") private String subName; @ApiModelProperty("规则code") private String subcode; @ApiModelProperty("规则奖励金额") private BigDecimal subAmount; @ApiModelProperty("条件") private String subConditions; @ApiModelProperty("激活状态1已激活2未激活3已领取") private Integer receiveState; @JsonFormat(pattern = "yyyy-MM-dd", timezone = "GMT+8") @ApiModelProperty("失效时间") private Date invalidTime; } src/main/java/com/xcong/excoin/modules/contract/dao/ContractOrderDao.java
@@ -31,4 +31,6 @@ BigDecimal selectWholeFeeAmountByOrderNo(@Param("orderNo") String orderNo); int updateOrderProfitOrLessById(@Param("rewardAmount") BigDecimal rewardAmount, @Param("rewardRatio") BigDecimal rewardRatio, @Param("id") Long id); public BigDecimal getBurstUsdtByMemberId(@Param("memberId") Long memberId); } src/main/java/com/xcong/excoin/modules/platform/entity/PlatformBannerEntity.java
@@ -44,4 +44,11 @@ * 是否置顶 1-是2-否 */ private String isTop; /** * 是不是Banner图 1-是2-否 */ private int isBanner; public static final int BANNER_YES = 1; public static final int BANNER_NO = 2; } src/main/java/com/xcong/excoin/modules/platform/service/impl/PlatformBannerServiceImpl.java
@@ -23,6 +23,7 @@ @Override public Result findAll() { QueryWrapper<PlatformBannerEntity> queryWrapper = new QueryWrapper<>(); queryWrapper.eq("is_banner",1); List<PlatformBannerEntity> paymentMethodList = platformBannerDao.selectList(queryWrapper); return Result.ok(paymentMethodList); } src/main/resources/i18n/messages_en_US.properties
@@ -233,6 +233,13 @@ documentary_service_0018=In documentary, cannot adjust to full position margin mode documentary_service_0019=The follower has a documentary contract and cannot kick out activity_service_0001=Please pass the real name authentication first activity_service_0002=Currently invalid activity_service_0003=Cannot activate repeatedly activity_service_0004=The activity has ended activity_service_0005=Can't get it if you don't meet the conditions activity_service_0006=Received successfully, it has been issued to currency account uploadFile_controller_0001=Upload failed result_success_msg=Operation success src/main/resources/i18n/messages_zh_CN.properties
@@ -233,6 +233,13 @@ documentary_service_0018=正在跟单中,无法调整为全仓保证金模式 documentary_service_0019=跟随者拥有跟单合约,无法踢出 activity_service_0001=请先通过实名认证 activity_service_0002=已失效 activity_service_0003=无法重复激活 activity_service_0004=活动已结束 activity_service_0005=不满足领取条件,无法领取 activity_service_0006=领取成功,已发放至币币账户 uploadFile_controller_0001=上传失败 result_success_msg=操作成功 src/main/resources/mapper/activity/ActivityReceiveRecordDao.xml
@@ -38,4 +38,21 @@ <result property="invalidTime" column="invalid_time" /> </resultMap> <select id="selectListByMemberIdAndMainId" resultType="com.xcong.excoin.modules.activity.vo.ActivityReceiveRecordVo"> SELECT a.receive_state receiveState, a.invalid_time invalidTime, b.id subId, b.`name` subName, b.code subcode, b.conditions subConditions, b.amount subAmount FROM activity_receive_record a LEFT JOIN activity_sub b ON a.sub_id = b.id WHERE a.main_id = #{mainId} AND a.member_id = #{memberId} </select> </mapper> src/main/resources/mapper/contract/ContractOrderDao.xml
@@ -97,4 +97,14 @@ reward_ratio=#{rewardRatio} where id=#{id} </update> <select id="getBurstUsdtByMemberId" resultType="java.math.BigDecimal"> SELECT IFNULL(SUM(reward_amount), 0) FROM contract_order WHERE closing_type IN (4, 5) and member_id=#{memberId} </select> </mapper> src/main/resources/mapper/member/MemberAccountMoneyChangeDao.xml
@@ -64,7 +64,7 @@ <if test="record != null"> <where> type = 3 and content like '%佣金到账%' and (content like '%佣金到账%' or content like '%活动%') <if test="record.memberId != null" > and member_id=#{record.memberId} </if>