Commit 40fb2583 by xunj

优化

1 parent 117c68c8
Showing 29 changed files with 430 additions and 88 deletions
package com.polysoft.activity.constant;
public enum CallType {
NO_CALL(0,"未拨打"),
CALL_SUCCESS(1,"拨打成功"),
CALL_FAIL(-1,"拨打失败");
private Integer no;
private String desc;
CallType(Integer no,String desc){
this.no = no;
this.desc = desc;
}
public Integer getNo() {
return no;
}
public void setNo(Integer no) {
this.no = no;
}
public String getDesc() {
return desc;
}
public void setDesc(String desc) {
this.desc = desc;
}
}
package com.polysoft.activity.constant;
/**
* @author lvyp
* @date 2021/2/1
*/
public enum CommonTypeEnum {
REDPACK_SOURCE_TYPE1("1","红包雨"),
REDPACK_SOURCE_TYPE2("2","首次登录"),
REDPACK_SOURCE_TYPE3("3","补签扣除"),
REDPACK_SOURCE_TYPE4("4","集卡瓜分"),
REDPACK_TYPE1("1","普通红包"),
REDPACK_TYPE2("2","牛牌红包");
private String code;
private String desc;
CommonTypeEnum(String code, String desc) {
this.code = code;
this.desc = desc;
}
public String getCode() {
return code;
}
public String getDesc() {
return desc;
}
}
package com.polysoft.activity.constant;
public enum MsgCodeEnum {
BALANCE_NO("1001","余额不足");
private String code;
private String msg;
MsgCodeEnum(String code, String msg) {
this.code = code;
this.msg = msg;
}
public String getCode() {
return code;
}
public void setCode(String code) {
this.code = code;
}
public String getMsg() {
return msg;
}
public void setMsg(String msg) {
this.msg = msg;
}
}
...@@ -43,4 +43,16 @@ public class CattleController { ...@@ -43,4 +43,16 @@ public class CattleController {
return cattleBrandService.saveComposeCattleBrand(param); return cattleBrandService.saveComposeCattleBrand(param);
} }
//2,牛一牛 //2,牛一牛
@PostMapping("/saveOpenCattleBrand" )
@ResponseBody
public ApiResult saveOpenCattleBrand(@RequestBody @Validated ComposeCattleBrandParam param) {
return cattleBrandService.saveOpenCattleBrand(param);
}
@PostMapping("/getTaskStatus" )
@ResponseBody
public ApiResult getTaskStatus(@RequestBody @Validated ComposeCattleBrandParam param) {
return cattleBrandService.getTaskStatus(param);
}
} }
package com.polysoft.activity.controller; package com.polysoft.activity.controller;
import com.polysoft.activity.model.param.AddRedRainParam; import com.polysoft.activity.model.param.AddRedRainParam;
import com.polysoft.activity.model.param.IdQueryParam;
import com.polysoft.activity.service.ActItemService; import com.polysoft.activity.service.ActItemService;
import com.polysoft.activity.utils.ApiResult; import com.polysoft.activity.utils.ApiResult;
import io.swagger.annotations.Api; import io.swagger.annotations.Api;
...@@ -33,5 +34,10 @@ public class RedPackageController { ...@@ -33,5 +34,10 @@ public class RedPackageController {
public ApiResult queryActivityInfo() { public ApiResult queryActivityInfo() {
return actItemService.queryActivityInfo(); return actItemService.queryActivityInfo();
} }
@PostMapping("/queryRedPackInfo" )
@ResponseBody
public ApiResult queryRedPackInfo(@RequestBody IdQueryParam param) {
return actItemService.queryRedPackInfo(param);
}
} }
...@@ -7,6 +7,7 @@ import com.polysoft.activity.model.dto.CalculateAmoutDto; ...@@ -7,6 +7,7 @@ import com.polysoft.activity.model.dto.CalculateAmoutDto;
import com.polysoft.activity.model.dto.QueryRedRainDto; import com.polysoft.activity.model.dto.QueryRedRainDto;
import com.polysoft.activity.model.vo.ActItemVO; import com.polysoft.activity.model.vo.ActItemVO;
import com.polysoft.activity.model.vo.RedAmountTotalVO; import com.polysoft.activity.model.vo.RedAmountTotalVO;
import com.polysoft.activity.model.vo.RedPackInfoVO;
import com.polysoft.activity.model.vo.RedRainVO; import com.polysoft.activity.model.vo.RedRainVO;
import org.apache.ibatis.annotations.Param; import org.apache.ibatis.annotations.Param;
import org.mapstruct.Mapper; import org.mapstruct.Mapper;
...@@ -29,5 +30,6 @@ public interface ActivityMapper extends BaseMapper<ActItemDto> { ...@@ -29,5 +30,6 @@ public interface ActivityMapper extends BaseMapper<ActItemDto> {
int updateRedPackageForCattle(List<AddRedRainDto> dto); int updateRedPackageForCattle(List<AddRedRainDto> dto);
List<RedAmountTotalVO> calculateRedAmountTatol(CalculateAmoutDto dto); List<RedAmountTotalVO> calculateRedAmountTatol(CalculateAmoutDto dto);
List<RedAmountTotalVO> calculateCattleBrand(CalculateAmoutDto dto); List<RedAmountTotalVO> calculateCattleBrand(CalculateAmoutDto dto);
List<RedPackInfoVO> queryRedPackInfo(@Param("userId") Long userId);
} }
...@@ -2,10 +2,13 @@ package com.polysoft.activity.mapper; ...@@ -2,10 +2,13 @@ package com.polysoft.activity.mapper;
import com.baomidou.mybatisplus.core.mapper.BaseMapper; import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.polysoft.activity.model.dto.CattleBrandDto; import com.polysoft.activity.model.dto.CattleBrandDto;
import com.polysoft.activity.model.dto.ShareDto;
import com.polysoft.activity.model.vo.CattleBrandConfVO; import com.polysoft.activity.model.vo.CattleBrandConfVO;
import com.polysoft.activity.model.vo.CattleBrandFroUserVO; import com.polysoft.activity.model.vo.CattleBrandFroUserVO;
import com.polysoft.activity.model.vo.CattleBrandVO; import com.polysoft.activity.model.vo.CattleBrandVO;
import com.polysoft.activity.model.vo.CattleListVO; import com.polysoft.activity.model.vo.CattleListVO;
import com.polysoft.activity.model.vo.TaskStatusVO;
import com.polysoft.activity.model.vo.UserCattleVO;
import org.apache.ibatis.annotations.Param; import org.apache.ibatis.annotations.Param;
import org.mapstruct.Mapper; import org.mapstruct.Mapper;
...@@ -16,8 +19,11 @@ public interface CattleBrandMapper extends BaseMapper<CattleBrandDto> { ...@@ -16,8 +19,11 @@ public interface CattleBrandMapper extends BaseMapper<CattleBrandDto> {
List<CattleBrandVO> queryCattleBrandList(@Param("brandType") String brandType); List<CattleBrandVO> queryCattleBrandList(@Param("brandType") String brandType);
CattleBrandFroUserVO queryCattleBrandByUserId(@Param("userId")Long userId); CattleBrandFroUserVO queryCattleBrandByUserId(@Param("userId")Long userId);
CattleBrandConfVO queryCattleBrandConf(@Param("signDate") String signDate); CattleBrandConfVO queryCattleBrandConf(@Param("signDate") String signDate);
int getComposeCattleBrand(@Param("userId") Long userId); List<UserCattleVO> getComposeCattleBrand(@Param("userId") Long userId);
int updateComposeCattleStatus(@Param("userId") Long userId,@Param("status") String status,@Param("time") String time); int updateComposeCattleStatus(@Param("userId") Long userId,@Param("status") String status,@Param("time") String time);
List<CattleListVO> queryCattleList(@Param("userId") Long userId,@Param("type") String type); List<CattleListVO> queryCattleList(@Param("userId") Long userId,@Param("type") String type);
int deleteUserCalltle(@Param("list") List<UserCattleVO> list);
TaskStatusVO getTaskStatus(@Param("userId") Long userId,@Param("today") String today);
int saveShareForCattle(ShareDto dto);
int deleteUsetCattleById(@Param("id") Long id);
} }
package com.polysoft.activity.mapper; package com.polysoft.activity.mapper;
import com.polysoft.activity.model.dto.SaveUserCattleDto; import com.polysoft.activity.model.dto.SaveUserCattleDto;
import com.polysoft.activity.model.dto.UpdateUserStatesDto;
import com.polysoft.activity.model.dto.UserInfoDto; import com.polysoft.activity.model.dto.UserInfoDto;
import com.polysoft.activity.model.dto.UserInfoForComposeStatusDto; import com.polysoft.activity.model.dto.UserInfoForComposeStatusDto;
import com.polysoft.activity.model.dto.UserSignDto; import com.polysoft.activity.model.dto.UserSignDto;
import com.polysoft.activity.model.dto.WechatTokenDto; import com.polysoft.activity.model.dto.WechatTokenDto;
import com.polysoft.activity.model.param.UserInfoParam; import com.polysoft.activity.model.param.UserInfoParam;
import com.polysoft.activity.model.vo.FirstLoginRedVO; import com.polysoft.activity.model.vo.FirstLoginRedVO;
import com.polysoft.activity.model.vo.OpenCattleVO;
import com.polysoft.activity.model.vo.UserInfoVO; import com.polysoft.activity.model.vo.UserInfoVO;
import com.polysoft.activity.model.vo.UserSignVO; import com.polysoft.activity.model.vo.UserSignVO;
import com.polysoft.activity.model.vo.WechatToken; import com.polysoft.activity.model.vo.WechatToken;
...@@ -30,4 +32,6 @@ public interface UserInfoMapper { ...@@ -30,4 +32,6 @@ public interface UserInfoMapper {
int updateFirstLoginStatus(@Param("userId") Long userId); int updateFirstLoginStatus(@Param("userId") Long userId);
UserInfoVO getUserByComposeStatus(UserInfoForComposeStatusDto dto); UserInfoVO getUserByComposeStatus(UserInfoForComposeStatusDto dto);
List<UserSignVO> queryUserSignByUserId(@Param("userId") Long userId,@Param("signDate") String signDate); List<UserSignVO> queryUserSignByUserId(@Param("userId") Long userId,@Param("signDate") String signDate);
int updateUserStates(UpdateUserStatesDto dto);
OpenCattleVO getCattleAmount(@Param("userId") Long userId);
} }
...@@ -26,6 +26,8 @@ public class AddRedRainDto { ...@@ -26,6 +26,8 @@ public class AddRedRainDto {
private String isEnble; private String isEnble;
//红包雨批次号 //红包雨批次号
private int batchNum; private int batchNum;
//1 红包雨 ; 2 首次登录 ; 3 补签扣钱 ; 4 集卡瓜分
private String sourceType;
public void setCreateTime(Date date) { public void setCreateTime(Date date) {
this.createTime = DateUtil.format(date,"yyyy-MM-dd HH:mm:ss"); this.createTime = DateUtil.format(date,"yyyy-MM-dd HH:mm:ss");
......
package com.polysoft.activity.model.dto;
import cn.hutool.core.date.DateUtil;
import lombok.Data;
import java.util.Date;
/**
* @author lvyp
* @date 2021/2/1
*/
@Data
public class ShareDto {
private Long id;
private Long userId;
private String shareUrl;
private String createTime;
private String shareDate;
public void setCreateTime(Date date) {
this.createTime = DateUtil.format(date,"yyyy-MM-dd HH:mm:ss");
}
public void setShareDate(Date date) {
this.shareDate = DateUtil.format(date,"yyyy-MM-dd");
}
}
package com.polysoft.activity.model.dto;
import lombok.Data;
/**
* @author lvyp
* @date 2021/2/1
*/
@Data
public class UpdateUserStatesDto {
private Long userId;
//0 未合成牛牌 1 已合成牛牌
private String composeCattleStatus;
//0 未砸聚宝盆 1 已砸聚宝盆
private String hammerStatus;
//0 牛牌合成未打卡 1 已打开
private String cattleOpenStatus;
}
...@@ -2,11 +2,14 @@ package com.polysoft.activity.model.param; ...@@ -2,11 +2,14 @@ package com.polysoft.activity.model.param;
import lombok.Data; import lombok.Data;
import javax.validation.constraints.NotNull;
/** /**
* @author lvyp * @author lvyp
* @date 2021/1/30 * @date 2021/1/30
*/ */
@Data @Data
public class IdQueryParam { public class IdQueryParam {
@NotNull(message = "参数不能为空")
private Long id; private Long id;
} }
package com.polysoft.activity.model.vo;
import lombok.Data;
import java.math.BigDecimal;
/**
* @author lvyp
* @date 2021/2/1
*/
@Data
public class OpenCattleVO {
private BigDecimal redAmount;
}
package com.polysoft.activity.model.vo;
import lombok.Data;
import java.math.BigDecimal;
/**
* @author lvyp
* @date 2021/2/1
*/
@Data
public class RedPackInfoVO {
private BigDecimal redamount;
private String sourceType;
private String createTime;
}
package com.polysoft.activity.model.vo;
import lombok.Data;
/**
* @author lvyp
* @date 2021/2/1
*/
@Data
public class TaskStatusVO {
//不为0就是已完成
private String everyDaySign;
private String everyDayWish;
private String everyDayShare;
}
package com.polysoft.activity.model.vo;
import lombok.Data;
/**
* @author lvyp
* @date 2021/2/1
*/
@Data
public class UserCattleVO {
private Long id ;
private Long userId;
private Long cattleBrandId;
}
...@@ -28,5 +28,11 @@ public class UserInfoVO implements Serializable { ...@@ -28,5 +28,11 @@ public class UserInfoVO implements Serializable {
@ApiModelProperty("牛牌合成时间") @ApiModelProperty("牛牌合成时间")
private String composeCattleTime; private String composeCattleTime;
private String sysCurretTime; private String sysCurretTime;
//0 未砸聚宝盆 1 已砸聚宝盆
private String hammerStatus; private String hammerStatus;
//0 牛牌合成未打卡 1 已打开
private String cattleOpenStatus;
//牛牌种类数量
private String cattleTypeNum;
} }
package com.polysoft.activity.service; package com.polysoft.activity.service;
import com.polysoft.activity.model.param.AddRedRainParam; import com.polysoft.activity.model.param.AddRedRainParam;
import com.polysoft.activity.model.param.IdQueryParam;
import com.polysoft.activity.model.vo.ActItemVO; import com.polysoft.activity.model.vo.ActItemVO;
import com.polysoft.activity.utils.ApiResult; import com.polysoft.activity.utils.ApiResult;
...@@ -11,4 +12,5 @@ import com.polysoft.activity.utils.ApiResult; ...@@ -11,4 +12,5 @@ import com.polysoft.activity.utils.ApiResult;
public interface ActItemService { public interface ActItemService {
ApiResult queryActivityInfo(); ApiResult queryActivityInfo();
ApiResult saveRedRain(AddRedRainParam param); ApiResult saveRedRain(AddRedRainParam param);
ApiResult queryRedPackInfo(IdQueryParam param);
} }
...@@ -9,4 +9,6 @@ public interface CattleBrandService { ...@@ -9,4 +9,6 @@ public interface CattleBrandService {
ApiResult queryCattleBrandByUserId(Long userId); ApiResult queryCattleBrandByUserId(Long userId);
ApiResult queryCattleBrandByUserId2(Long userId); ApiResult queryCattleBrandByUserId2(Long userId);
ApiResult saveComposeCattleBrand(ComposeCattleBrandParam param); ApiResult saveComposeCattleBrand(ComposeCattleBrandParam param);
ApiResult saveOpenCattleBrand(ComposeCattleBrandParam param);
ApiResult getTaskStatus(ComposeCattleBrandParam param);
} }
...@@ -4,6 +4,7 @@ import cn.hutool.core.date.DateUtil; ...@@ -4,6 +4,7 @@ import cn.hutool.core.date.DateUtil;
import com.polysoft.activity.mapper.ActivityMapper; import com.polysoft.activity.mapper.ActivityMapper;
import com.polysoft.activity.model.dto.AddRedRainDto; import com.polysoft.activity.model.dto.AddRedRainDto;
import com.polysoft.activity.model.param.AddRedRainParam; import com.polysoft.activity.model.param.AddRedRainParam;
import com.polysoft.activity.model.param.IdQueryParam;
import com.polysoft.activity.model.vo.ActItemVO; import com.polysoft.activity.model.vo.ActItemVO;
import com.polysoft.activity.service.ActItemService; import com.polysoft.activity.service.ActItemService;
import com.polysoft.activity.utils.ApiResult; import com.polysoft.activity.utils.ApiResult;
...@@ -70,10 +71,16 @@ public class ActItemServiceImpl implements ActItemService{ ...@@ -70,10 +71,16 @@ public class ActItemServiceImpl implements ActItemService{
dto.setUserId(param.getUserId()); dto.setUserId(param.getUserId());
dto.setCreateTime(date); dto.setCreateTime(date);
dto.setBatchNum(param.getBatchNum()); dto.setBatchNum(param.getBatchNum());
dto.setSourceType("1");
list.add(dto); list.add(dto);
} }
activityMapper.saveRedRain(list); activityMapper.saveRedRain(list);
} }
return ApiResult.ok(); return ApiResult.ok();
} }
@Override
public ApiResult queryRedPackInfo(IdQueryParam param) {
return ApiResult.ok(activityMapper.queryRedPackInfo(param.getId()));
}
} }
package com.polysoft.activity.service.impl; package com.polysoft.activity.service.impl;
import cn.hutool.core.date.DateUtil; import cn.hutool.core.date.DateUtil;
import com.polysoft.activity.constant.CommonTypeEnum;
import com.polysoft.activity.mapper.ActivityMapper;
import com.polysoft.activity.mapper.CattleBrandMapper; import com.polysoft.activity.mapper.CattleBrandMapper;
import com.polysoft.activity.mapper.UserInfoMapper; import com.polysoft.activity.mapper.UserInfoMapper;
import com.polysoft.activity.model.dto.AddRedRainDto;
import com.polysoft.activity.model.dto.UpdateUserStatesDto;
import com.polysoft.activity.model.dto.UserInfoDto;
import com.polysoft.activity.model.dto.UserInfoForComposeStatusDto; import com.polysoft.activity.model.dto.UserInfoForComposeStatusDto;
import com.polysoft.activity.model.param.ComposeCattleBrandParam; import com.polysoft.activity.model.param.ComposeCattleBrandParam;
import com.polysoft.activity.model.vo.CattleBrandFroUserVO; import com.polysoft.activity.model.vo.CattleBrandFroUserVO;
import com.polysoft.activity.model.vo.CattleBrandVO; import com.polysoft.activity.model.vo.CattleBrandVO;
import com.polysoft.activity.model.vo.CattleListVO; import com.polysoft.activity.model.vo.CattleListVO;
import com.polysoft.activity.model.vo.OpenCattleVO;
import com.polysoft.activity.model.vo.UserCattleVO;
import com.polysoft.activity.model.vo.UserInfoVO; import com.polysoft.activity.model.vo.UserInfoVO;
import com.polysoft.activity.service.CattleBrandService; import com.polysoft.activity.service.CattleBrandService;
import com.polysoft.activity.utils.ApiResult; import com.polysoft.activity.utils.ApiResult;
import com.polysoft.activity.utils.SnowFlakeUtil;
import org.springframework.stereotype.Service; import org.springframework.stereotype.Service;
import javax.annotation.Resource; import javax.annotation.Resource;
import java.util.ArrayList;
import java.util.Date; import java.util.Date;
import java.util.HashMap; import java.util.HashMap;
import java.util.List; import java.util.List;
...@@ -26,6 +35,8 @@ public class CattleBrandServiceImpl implements CattleBrandService { ...@@ -26,6 +35,8 @@ public class CattleBrandServiceImpl implements CattleBrandService {
private CattleBrandMapper cattleBrandMapper; private CattleBrandMapper cattleBrandMapper;
@Resource @Resource
private UserInfoMapper userInfoMapper; private UserInfoMapper userInfoMapper;
@Resource
private ActivityMapper activityMapper;
@Override @Override
public ApiResult queryCattleBrandList(String brandType) { public ApiResult queryCattleBrandList(String brandType) {
...@@ -69,12 +80,51 @@ public class CattleBrandServiceImpl implements CattleBrandService { ...@@ -69,12 +80,51 @@ public class CattleBrandServiceImpl implements CattleBrandService {
@Override @Override
public ApiResult saveComposeCattleBrand(ComposeCattleBrandParam param) { public ApiResult saveComposeCattleBrand(ComposeCattleBrandParam param) {
int i = cattleBrandMapper.getComposeCattleBrand(param.getUserId()); try {
if(i == 5){ List<UserCattleVO> list = cattleBrandMapper.getComposeCattleBrand(param.getUserId());
if(list !=null && list.size() == 5){
cattleBrandMapper.updateComposeCattleStatus(param.getUserId(),"1", DateUtil.format(new Date(),"yyyy-MM-dd HH:mm:ss")); cattleBrandMapper.updateComposeCattleStatus(param.getUserId(),"1", DateUtil.format(new Date(),"yyyy-MM-dd HH:mm:ss"));
cattleBrandMapper.deleteUserCalltle(list);
//插入到t_red_rain
AddRedRainDto rainDto = new AddRedRainDto();
rainDto.setRedId(SnowFlakeUtil.nextId());
rainDto.setUserId(param.getUserId());
rainDto.setRedType(CommonTypeEnum.REDPACK_TYPE1.getCode());
rainDto.setCreateTime(new Date());
rainDto.setBatchNum(98);
rainDto.setSourceType(CommonTypeEnum.REDPACK_SOURCE_TYPE4.getCode());
activityMapper.saveRedRainForOne(rainDto);
return ApiResult.ok("恭喜合成牛牌"); return ApiResult.ok("恭喜合成牛牌");
}else { }else {
return ApiResult.ok("请继续收集牛牌"); return ApiResult.ok("请继续收集牛牌");
} }
} catch (Exception e) {
e.printStackTrace();
return ApiResult.error();
}
}
@Override
public ApiResult saveOpenCattleBrand(ComposeCattleBrandParam param) {
//更新0 牛牌合成未打开 1 已打开
UpdateUserStatesDto dto = new UpdateUserStatesDto();
dto.setUserId(param.getUserId());
dto.setCattleOpenStatus("1");
userInfoMapper.updateUserStates(dto);
//更新聚宝盆余额
List<UserInfoDto> userInfoDtoList = new ArrayList<>();
OpenCattleVO openCattleVO = userInfoMapper.getCattleAmount(param.getUserId());
UserInfoDto userInfoDto = new UserInfoDto();
userInfoDto.setUserId(param.getUserId());
userInfoDto.setRedBalance(openCattleVO.getRedAmount());
userInfoDtoList.add(userInfoDto);
userInfoMapper.updateRedBalace(userInfoDtoList);
return ApiResult.ok(openCattleVO);
}
@Override
public ApiResult getTaskStatus(ComposeCattleBrandParam param) {
String today = DateUtil.format(new Date(),"yyyy-MM-dd");
return ApiResult.ok(cattleBrandMapper.getTaskStatus(param.getUserId(),today));
} }
} }
...@@ -3,11 +3,14 @@ package com.polysoft.activity.service.impl; ...@@ -3,11 +3,14 @@ package com.polysoft.activity.service.impl;
import cn.hutool.core.date.DateUtil; import cn.hutool.core.date.DateUtil;
import com.alibaba.fastjson.JSONObject; import com.alibaba.fastjson.JSONObject;
import com.polysoft.activity.common.log.LoggerHelper; import com.polysoft.activity.common.log.LoggerHelper;
import com.polysoft.activity.constant.CommonTypeEnum;
import com.polysoft.activity.constant.MsgCodeEnum;
import com.polysoft.activity.mapper.ActivityMapper; import com.polysoft.activity.mapper.ActivityMapper;
import com.polysoft.activity.mapper.CattleBrandMapper; import com.polysoft.activity.mapper.CattleBrandMapper;
import com.polysoft.activity.mapper.UserInfoMapper; import com.polysoft.activity.mapper.UserInfoMapper;
import com.polysoft.activity.model.dto.AddRedRainDto; import com.polysoft.activity.model.dto.AddRedRainDto;
import com.polysoft.activity.model.dto.SaveUserCattleDto; import com.polysoft.activity.model.dto.SaveUserCattleDto;
import com.polysoft.activity.model.dto.ShareDto;
import com.polysoft.activity.model.dto.UserInfoDto; import com.polysoft.activity.model.dto.UserInfoDto;
import com.polysoft.activity.model.dto.UserSignDto; import com.polysoft.activity.model.dto.UserSignDto;
import com.polysoft.activity.model.dto.WechatTokenDto; import com.polysoft.activity.model.dto.WechatTokenDto;
...@@ -22,9 +25,11 @@ import com.polysoft.activity.utils.SnowFlakeUtil; ...@@ -22,9 +25,11 @@ import com.polysoft.activity.utils.SnowFlakeUtil;
import org.apache.commons.lang3.StringUtils; import org.apache.commons.lang3.StringUtils;
import org.springframework.beans.factory.annotation.Value; import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Service; import org.springframework.stereotype.Service;
import org.springframework.web.client.RestClientException;
import org.springframework.web.client.RestTemplate; import org.springframework.web.client.RestTemplate;
import javax.annotation.Resource; import javax.annotation.Resource;
import java.math.BigDecimal;
import java.util.ArrayList; import java.util.ArrayList;
import java.util.Date; import java.util.Date;
import java.util.List; import java.util.List;
...@@ -68,15 +73,17 @@ public class UserInfoServiceImpl implements UserInfoService { ...@@ -68,15 +73,17 @@ public class UserInfoServiceImpl implements UserInfoService {
@Override @Override
public ApiResult getShareLink(ShareLinkParam param) { public ApiResult getShareLink(ShareLinkParam param) {
try {
ShareLinkVO shareLinkVO = new ShareLinkVO(); ShareLinkVO shareLinkVO = new ShareLinkVO();
WechatToken wechatToken = mapper.getWechatToken(); WechatToken wechatToken = mapper.getWechatToken();
Date date = new Date();
String access_token = null; String access_token = null;
if((System.currentTimeMillis()/divide - wechatToken.getUpdateTime()/divide) > 6600){ if((System.currentTimeMillis()/divide - wechatToken.getUpdateTime()/divide) > 6600){
JSONObject object = restTemplate.getForObject(accessTokenUrl+"appid="+appId+"&secret="+passWord+"", JSONObject.class); JSONObject object = restTemplate.getForObject(accessTokenUrl+"appid="+appId+"&secret="+passWord+"", JSONObject.class);
access_token = object.getString("access_token"); access_token = object.getString("access_token");
WechatTokenDto dto = new WechatTokenDto(); WechatTokenDto dto = new WechatTokenDto();
dto.setAccessToken(access_token); dto.setAccessToken(access_token);
dto.setUpdateTime(DateUtil.format(new Date(),"yyyy-MM-dd HH:mm:ss")); dto.setUpdateTime(DateUtil.format(date,"yyyy-MM-dd HH:mm:ss"));
mapper.updateWechatToken(dto); mapper.updateWechatToken(dto);
}else { }else {
access_token = wechatToken.getAccessToken(); access_token = wechatToken.getAccessToken();
...@@ -97,7 +104,20 @@ public class UserInfoServiceImpl implements UserInfoService { ...@@ -97,7 +104,20 @@ public class UserInfoServiceImpl implements UserInfoService {
shareLinkVO.setNoncestr(noncestr); shareLinkVO.setNoncestr(noncestr);
shareLinkVO.setTimestamp(timestamp); shareLinkVO.setTimestamp(timestamp);
shareLinkVO.setSignature(SHA1.encode(signStr)); shareLinkVO.setSignature(SHA1.encode(signStr));
//存储分享连接
ShareDto shareDto = new ShareDto();
shareDto.setId(SnowFlakeUtil.nextId());
shareDto.setUserId(param.getUserId());
shareDto.setCreateTime(date);
shareDto.setShareDate(date);
cattleBrandMapper.saveShareForCattle(shareDto);
//删除用户牛牌关系表数据
cattleBrandMapper.deleteUsetCattleById(param.getCattleId());
return ApiResult.ok(shareLinkVO); return ApiResult.ok(shareLinkVO);
} catch (RestClientException e) {
e.printStackTrace();
return ApiResult.error();
}
} }
@Override @Override
...@@ -112,10 +132,34 @@ public class UserInfoServiceImpl implements UserInfoService { ...@@ -112,10 +132,34 @@ public class UserInfoServiceImpl implements UserInfoService {
CattleBrandVO cattleBrandVO = null; CattleBrandVO cattleBrandVO = null;
CattleBrandConfVO confVO = cattleBrandMapper.queryCattleBrandConf(today); CattleBrandConfVO confVO = cattleBrandMapper.queryCattleBrandConf(today);
if(param.getSignId() != null){ if(param.getSignId() != null){
//扣除金额
BigDecimal kouchu = BigDecimal.valueOf(-5.00);
//查询余额是否大于 5 元
UserInfoParam userInfoParam = new UserInfoParam();
userInfoParam.setUserId(param.getUserId());
UserInfoVO user = mapper.queryAuthUser(userInfoParam);
if(user.getRedBalance().compareTo(kouchu) < 0 ){
return ApiResult.ok(MsgCodeEnum.BALANCE_NO.getCode(),MsgCodeEnum.BALANCE_NO.getMsg());
}
userSignDto.setId(param.getSignId()); userSignDto.setId(param.getSignId());
userSignDto.setCreateTime(new Date()); userSignDto.setCreateTime(new Date());
userSignDto.setSignStatus("1"); userSignDto.setSignStatus("1");
mapper.updateUserSign(userSignDto); mapper.updateUserSign(userSignDto);
AddRedRainDto rainDto = new AddRedRainDto();
rainDto.setRedId(SnowFlakeUtil.nextId());
rainDto.setUserId(param.getUserId());
rainDto.setRedAmount(BigDecimal.valueOf(-5.00));
rainDto.setRedType("0");
rainDto.setCreateTime(new Date());
rainDto.setIsEnble("1");
rainDto.setSourceType(CommonTypeEnum.REDPACK_SOURCE_TYPE3.getCode());
activityMapper.saveRedRainForOne(rainDto);
List<UserInfoDto> list = new ArrayList<>();
UserInfoDto infoDto = new UserInfoDto();
infoDto.setUserId(param.getUserId());
infoDto.setRedBalance(rainDto.getRedAmount());
list.add(infoDto);
mapper.updateRedBalace(list);
}else{ }else{
userSignDto.setId(SnowFlakeUtil.nextId()); userSignDto.setId(SnowFlakeUtil.nextId());
userSignDto.setUserId(param.getUserId()); userSignDto.setUserId(param.getUserId());
...@@ -159,10 +203,10 @@ public class UserInfoServiceImpl implements UserInfoService { ...@@ -159,10 +203,10 @@ public class UserInfoServiceImpl implements UserInfoService {
dto.setRedAmount(redVO.getAmount()); dto.setRedAmount(redVO.getAmount());
dto.setRedType("0"); dto.setRedType("0");
dto.setIsEnble("1"); dto.setIsEnble("1");
dto.setBatchNum(4); dto.setSourceType(CommonTypeEnum.REDPACK_SOURCE_TYPE2.getCode());
dto.setBatchNum(99);
dto.setCreateTime(new Date()); dto.setCreateTime(new Date());
activityMapper.saveRedRainForOne(dto); activityMapper.saveRedRainForOne(dto);
mapper.updateFirstLoginRed(redVO.getId());
//更新聚宝盆余额 //更新聚宝盆余额
List<UserInfoDto> userInfoDtoList = new ArrayList<>(); List<UserInfoDto> userInfoDtoList = new ArrayList<>();
UserInfoDto userInfoDto = new UserInfoDto(); UserInfoDto userInfoDto = new UserInfoDto();
......
...@@ -3,6 +3,7 @@ package com.polysoft.activity.task; ...@@ -3,6 +3,7 @@ package com.polysoft.activity.task;
import cn.hutool.core.date.DateUtil; import cn.hutool.core.date.DateUtil;
import com.polysoft.activity.common.log.LoggerHelper; import com.polysoft.activity.common.log.LoggerHelper;
import com.polysoft.activity.common.utils.BeanTransferUtils; import com.polysoft.activity.common.utils.BeanTransferUtils;
import com.polysoft.activity.constant.CommonTypeEnum;
import com.polysoft.activity.mapper.ActivityMapper; import com.polysoft.activity.mapper.ActivityMapper;
import com.polysoft.activity.mapper.UserInfoMapper; import com.polysoft.activity.mapper.UserInfoMapper;
import com.polysoft.activity.model.dto.*; import com.polysoft.activity.model.dto.*;
...@@ -87,8 +88,9 @@ public class InitRedPackageTask { ...@@ -87,8 +88,9 @@ public class InitRedPackageTask {
for (Integer s : set) { for (Integer s : set) {
AddRedRainDto addRedRainDto = BeanTransferUtils.transfer(list.get(s),AddRedRainDto.class); AddRedRainDto addRedRainDto = BeanTransferUtils.transfer(list.get(s),AddRedRainDto.class);
addRedRainDto.setRedAmount(BigDecimal.valueOf(redAmount.get(i))); addRedRainDto.setRedAmount(BigDecimal.valueOf(redAmount.get(i)));
addRedRainDto.setRedType("1"); addRedRainDto.setRedType(CommonTypeEnum.REDPACK_TYPE1.getCode());
addRedRainDto.setIsEnble("1"); addRedRainDto.setIsEnble("1");
addRedRainDto.setSourceType(CommonTypeEnum.REDPACK_SOURCE_TYPE1.getCode());
batchList.add(addRedRainDto); batchList.add(addRedRainDto);
i++; i++;
} }
...@@ -116,8 +118,9 @@ public class InitRedPackageTask { ...@@ -116,8 +118,9 @@ public class InitRedPackageTask {
for (Integer s : set) { for (Integer s : set) {
AddRedRainDto addRedRainDto = BeanTransferUtils.transfer(list2.get(s),AddRedRainDto.class); AddRedRainDto addRedRainDto = BeanTransferUtils.transfer(list2.get(s),AddRedRainDto.class);
addRedRainDto.setRedAmount(BigDecimal.valueOf(redAmount.get(i))); addRedRainDto.setRedAmount(BigDecimal.valueOf(redAmount.get(i)));
addRedRainDto.setRedType("1"); addRedRainDto.setRedType(CommonTypeEnum.REDPACK_TYPE1.getCode());
addRedRainDto.setIsEnble("1"); addRedRainDto.setIsEnble("1");
addRedRainDto.setSourceType(CommonTypeEnum.REDPACK_SOURCE_TYPE1.getCode());
batchList2.add(addRedRainDto); batchList2.add(addRedRainDto);
i++; i++;
} }
...@@ -143,8 +146,9 @@ public class InitRedPackageTask { ...@@ -143,8 +146,9 @@ public class InitRedPackageTask {
for (Integer s : set) { for (Integer s : set) {
AddRedRainDto addRedRainDto = BeanTransferUtils.transfer(list2.get(s),AddRedRainDto.class); AddRedRainDto addRedRainDto = BeanTransferUtils.transfer(list2.get(s),AddRedRainDto.class);
addRedRainDto.setRedAmount(BigDecimal.valueOf(redAmount.get(i))); addRedRainDto.setRedAmount(BigDecimal.valueOf(redAmount.get(i)));
addRedRainDto.setRedType("1"); addRedRainDto.setRedType(CommonTypeEnum.REDPACK_TYPE1.getCode());
addRedRainDto.setIsEnble("1"); addRedRainDto.setIsEnble("1");
addRedRainDto.setSourceType(CommonTypeEnum.REDPACK_SOURCE_TYPE1.getCode());
batchList2.add(addRedRainDto); batchList2.add(addRedRainDto);
i++; i++;
} }
...@@ -170,8 +174,9 @@ public class InitRedPackageTask { ...@@ -170,8 +174,9 @@ public class InitRedPackageTask {
AddRedRainDto addRedRainDto = BeanTransferUtils.transfer(list2.get(s),AddRedRainDto.class); AddRedRainDto addRedRainDto = BeanTransferUtils.transfer(list2.get(s),AddRedRainDto.class);
int k = new Random().nextInt(5); int k = new Random().nextInt(5);
addRedRainDto.setCattleBrandId(cattleList.get(k).getCattleId()); addRedRainDto.setCattleBrandId(cattleList.get(k).getCattleId());
addRedRainDto.setRedType("2"); addRedRainDto.setRedType(CommonTypeEnum.REDPACK_TYPE2.getCode());
addRedRainDto.setIsEnble("1"); addRedRainDto.setIsEnble("1");
addRedRainDto.setSourceType(CommonTypeEnum.REDPACK_SOURCE_TYPE1.getCode());
batchList2.add(addRedRainDto); batchList2.add(addRedRainDto);
i++; i++;
} }
...@@ -179,7 +184,7 @@ public class InitRedPackageTask { ...@@ -179,7 +184,7 @@ public class InitRedPackageTask {
} }
//更新聚宝盆 //更新聚宝盆
CalculateAmoutDto calculateAmoutDto = new CalculateAmoutDto(); CalculateAmoutDto calculateAmoutDto = new CalculateAmoutDto();
calculateAmoutDto.setRedType("1"); calculateAmoutDto.setRedType(CommonTypeEnum.REDPACK_TYPE1.getCode());
calculateAmoutDto.setBatchNum(batchNum); calculateAmoutDto.setBatchNum(batchNum);
List<RedAmountTotalVO> lastList = activityMapper.calculateRedAmountTatol(calculateAmoutDto); List<RedAmountTotalVO> lastList = activityMapper.calculateRedAmountTatol(calculateAmoutDto);
List<UserInfoDto> userInfoDtoList = new ArrayList<>(); List<UserInfoDto> userInfoDtoList = new ArrayList<>();
...@@ -192,7 +197,7 @@ public class InitRedPackageTask { ...@@ -192,7 +197,7 @@ public class InitRedPackageTask {
userInfoMapper.updateRedBalace(userInfoDtoList); userInfoMapper.updateRedBalace(userInfoDtoList);
//更新户牛牌 //更新户牛牌
CalculateAmoutDto calculateAmoutDto2 = new CalculateAmoutDto(); CalculateAmoutDto calculateAmoutDto2 = new CalculateAmoutDto();
calculateAmoutDto2.setRedType("2"); calculateAmoutDto2.setRedType(CommonTypeEnum.REDPACK_TYPE2.getCode());
calculateAmoutDto2.setBatchNum(batchNum); calculateAmoutDto2.setBatchNum(batchNum);
List<RedAmountTotalVO> lastList2 = activityMapper.calculateCattleBrand(calculateAmoutDto2); List<RedAmountTotalVO> lastList2 = activityMapper.calculateCattleBrand(calculateAmoutDto2);
List<SaveUserCattleDto> saveUserCattleDtos = new ArrayList<>(); List<SaveUserCattleDto> saveUserCattleDtos = new ArrayList<>();
......
...@@ -42,40 +42,6 @@ public class UserSignTask { ...@@ -42,40 +42,6 @@ public class UserSignTask {
} }
private void sendWechat(){ private void sendWechat(){
//查询疫情回访数据基础表
LoggerHelper.info(this.getClass(),"任务开始");
List<QueryLuckDrawWishVO> wishForToday = wishService.queryLuckDrawWish();
QueryRealPrizeVO realPrizeVO = wishService.querRealPrize();
List<WishRealPrizeDto> dtos = new ArrayList<>();
Date date = new Date();
if(wishForToday !=null && wishForToday.size() >0 && realPrizeVO != null) {
if (wishForToday.size() < 10) {
wishForToday.forEach(item -> {
WishRealPrizeDto dto = new WishRealPrizeDto();
dto.setId(SnowFlakeUtil.nextId());
dto.setUserId(item.getUserId());
dto.setWishId(item.getWishId());
dto.setPrizeId(realPrizeVO.getPrizeId());
dto.setCreateTime(date);
dtos.add(dto);
});
}else {
HashSet<Integer> has = getLuckUser(10, wishForToday.size());
for (Integer n : has) {
QueryLuckDrawWishVO item = wishForToday.get(n);
WishRealPrizeDto dto = new WishRealPrizeDto();
dto.setId(SnowFlakeUtil.nextId());
dto.setUserId(item.getUserId());
dto.setWishId(dto.getWishId());
dto.setPrizeId(realPrizeVO.getPrizeId());
dto.setCreateTime(date);
dtos.add(dto);
}
}
wishRealPrizeMapper.saveWishRealPrizeForList(dtos);
}else {
LoggerHelper.info(this.getClass(),"无抽奖");
}
} }
private HashSet<Integer> getLuckUser(int count,int random){ private HashSet<Integer> getLuckUser(int count,int random){
HashSet<Integer> has = new HashSet<Integer>(); HashSet<Integer> has = new HashSet<Integer>();
......
...@@ -48,7 +48,6 @@ public class WishLuckDrawTask { ...@@ -48,7 +48,6 @@ public class WishLuckDrawTask {
} }
private void sendWechat(){ private void sendWechat(){
//查询疫情回访数据基础表
LoggerHelper.info(this.getClass(),"任务开始"); LoggerHelper.info(this.getClass(),"任务开始");
List<QueryLuckDrawWishVO> wishForToday = wishService.queryLuckDrawWish(); List<QueryLuckDrawWishVO> wishForToday = wishService.queryLuckDrawWish();
QueryRealPrizeVO realPrizeVO = wishService.querRealPrize(); QueryRealPrizeVO realPrizeVO = wishService.querRealPrize();
......
...@@ -6,14 +6,16 @@ ...@@ -6,14 +6,16 @@
red_id, red_id,
user_id, user_id,
create_time, create_time,
batch_num batch_num,
source_type
)VALUES )VALUES
<foreach collection="list" item="item" index="index" separator =","> <foreach collection="list" item="item" index="index" separator =",">
( (
#{item.redId}, #{item.redId},
#{item.userId}, #{item.userId},
#{item.createTime}, #{item.createTime},
#{item.batchNum} #{item.batchNum},
#{item.sourceType}
) )
</foreach> </foreach>
</insert> </insert>
...@@ -25,8 +27,8 @@ ...@@ -25,8 +27,8 @@
red_type, red_type,
is_enble, is_enble,
batch_num, batch_num,
create_time create_time,
source_type
)VALUES )VALUES
( (
#{redId}, #{redId},
...@@ -35,7 +37,8 @@ ...@@ -35,7 +37,8 @@
#{redType}, #{redType},
#{isEnble}, #{isEnble},
#{batchNum}, #{batchNum},
#{createTime} #{createTime},
#{sourceType}
) )
</insert> </insert>
<update id="updateActStatus"> <update id="updateActStatus">
...@@ -148,4 +151,16 @@ ...@@ -148,4 +151,16 @@
FROM FROM
t_red_rain t where t.red_type=#{redType} and t.batch_num=#{batchNum} t_red_rain t where t.red_type=#{redType} and t.batch_num=#{batchNum}
</select> </select>
<select id="queryRedPackInfo" resultType="com.polysoft.activity.model.vo.RedPackInfoVO">
SELECT
t.red_amount,
t.source_type,
t.create_time
FROM
t_red_rain t
WHERE
t.user_id = #{userId} and red_type = '0'
ORDER BY
t.create_time DESC
</select>
</mapper> </mapper>
<?xml version="1.0" encoding="UTF-8"?> <?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd"> <!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.polysoft.activity.mapper.CattleBrandMapper"> <mapper namespace="com.polysoft.activity.mapper.CattleBrandMapper">
<insert id="saveShareForCattle" parameterType="com.polysoft.activity.model.dto.ShareDto">
INSERT INTO t_share(
id,
user_id,
share_url,
create_time,
share_date
)VALUES (
#{id},
#{userId},
#{shareUrl},
#{createTime},
#{shareDate}
)
</insert>
<delete id="deleteUsetCattleById">
delete from t_user_cattle where id = #{id}
</delete>
<update id="updateComposeCattleStatus"> <update id="updateComposeCattleStatus">
update t_user update t_user
set compose_cattle_status = #{status}, set compose_cattle_status = #{status},
compose_cattle_time = #{time} compose_cattle_time = #{time}
where user_id = #{userId} where user_id = #{userId}
</update> </update>
<delete id="deleteUserCalltle" parameterType="list">
delete from t_user_cattle
where id IN
<foreach collection="list" item="item" open="(" separator="," close=")">
#{item.id}
</foreach>
</delete>
<select id="queryCattleBrandList" resultType="com.polysoft.activity.model.vo.CattleBrandVO"> <select id="queryCattleBrandList" resultType="com.polysoft.activity.model.vo.CattleBrandVO">
select select
cattle_id, cattle_id,
...@@ -33,11 +58,17 @@ ...@@ -33,11 +58,17 @@
t.user_id =#{userId} t.user_id =#{userId}
</select> </select>
<select id="getComposeCattleBrand" resultType="int"> <select id="getComposeCattleBrand" resultType="com.polysoft.activity.model.vo.UserCattleVO">
SELECT SELECT
count( * ) t.id,
t.user_id,
t.cattle_brand_id
FROM FROM
( SELECT t.cattle_brand_id FROM t_user_cattle t WHERE t.user_id = #{userId} GROUP BY t.cattle_brand_id ) tab t_user_cattle t
WHERE
t.user_id = #{userId}
GROUP BY
t.cattle_brand_id
</select> </select>
<select id="queryCattleBrandConf" resultType="com.polysoft.activity.model.vo.CattleBrandConfVO"> <select id="queryCattleBrandConf" resultType="com.polysoft.activity.model.vo.CattleBrandConfVO">
SELECT SELECT
...@@ -64,4 +95,15 @@ ...@@ -64,4 +95,15 @@
t1.user_id = #{userId} t1.user_id = #{userId}
AND t2.brand_type =#{type} AND t2.brand_type =#{type}
</select> </select>
<select id="getTaskStatus" resultType="com.polysoft.activity.model.vo.TaskStatusVO">
SELECT
t.user_id AS userId,
(select count(*) from t_wish tw where tw.user_id = t.user_id and tw.push_date=#{today}) AS everyDaySign,
(select count(*) from t_user_sign tus where tus.user_id = t.user_id and tus.sign_date=#{today}) AS everyDayWish,
(select count(*) from t_share ts where ts.user_id = t.user_id and ts.share_date=#{today}) AS everyDayShare
FROM
t_user t
WHERE
t.user_id = #{userId}
</select>
</mapper> </mapper>
...@@ -12,7 +12,10 @@ ...@@ -12,7 +12,10 @@
is_first, is_first,
compose_cattle_status, compose_cattle_status,
compose_cattle_time, compose_cattle_time,
hammer_status hammer_status,
cattle_open_status,
(select count(*) from (select tc.cattle_brand_id from t_user_cattle tc where tc.user_id = #{userId} GROUP BY tc.cattle_brand_id)tab) as cattleTypeNum
from from
t_user where t_user where
1=1 1=1
...@@ -59,6 +62,21 @@ ...@@ -59,6 +62,21 @@
<update id="updateFirstLoginStatus"> <update id="updateFirstLoginStatus">
update t_user set is_first = 1 where user_id =#{userId} update t_user set is_first = 1 where user_id =#{userId}
</update> </update>
<update id="updateUserStates" parameterType="com.polysoft.activity.model.dto.UpdateUserStatesDto">
update t_user set
<if test="composeCattleStatus != null and composeCattleStatus != ''">
compose_cattle_status = #{composeCattleStatus}
</if>
<if test="hammerStatus != null and hammerStatus != ''">
hammer_status = #{hammerStatus}
</if>
<if test="cattleOpenStatus != null and cattleOpenStatus != ''">
cattle_open_status = #{cattleOpenStatus}
</if>
<where>
user_id = #{userId}
</where>
</update>
<insert id="saveCattleBrand" parameterType="com.polysoft.activity.model.dto.SaveUserCattleDto"> <insert id="saveCattleBrand" parameterType="com.polysoft.activity.model.dto.SaveUserCattleDto">
INSERT into t_user_cattle ( INSERT into t_user_cattle (
id, id,
...@@ -118,5 +136,14 @@ ...@@ -118,5 +136,14 @@
</if> </if>
order by t.sign_date asc order by t.sign_date asc
</select> </select>
<select id="getCattleAmount" resultType="com.polysoft.activity.model.vo.OpenCattleVO">
select
t.red_amount
from t_red_rain t
where
t.user_id=#{userId}
and t.source_type = '4'
and t.is_enble='0'
</select>
</mapper> </mapper>
...@@ -39,6 +39,11 @@ public class ApiResult extends HashMap<String, Object> { ...@@ -39,6 +39,11 @@ public class ApiResult extends HashMap<String, Object> {
r.put("code", code); r.put("code", code);
r.put("msg", msg); r.put("msg", msg);
return r; return r;
}public static ApiResult ok(String code, String msg) {
ApiResult r = new ApiResult();
r.put("code", code);
r.put("msg", msg);
return r;
} }
// public static ApiResult ok(Map<String, Object> map) { // public static ApiResult ok(Map<String, Object> map) {
// ApiResult r = new ApiResult(); // ApiResult r = new ApiResult();
......
Markdown is supported
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!