记得上下班打卡 | git大法好,push需谨慎

Commit f167ae5c authored by 胡佳晨's avatar 胡佳晨

Merge branch 'master' into gaohu-smile-0915-three

# Conflicts:
#	liquidnet-bus-client/liquidnet-client-admin/liquidnet-client-admin-web/src/main/java/com/liquidnet/client/admin/web/controller/zhengzai/LocalAdminController.java
parents 4c9e44bf 50e849e1
package com.liquidnet.service.galaxy.dto.bo; package com.liquidnet.service.galaxy.dto.bo;
import com.fasterxml.jackson.annotation.JsonIgnoreProperties;
import com.liquidnet.commons.lang.util.JsonUtils; import com.liquidnet.commons.lang.util.JsonUtils;
import lombok.Data; import lombok.Data;
...@@ -15,6 +16,7 @@ import java.io.Serializable; ...@@ -15,6 +16,7 @@ import java.io.Serializable;
* @date 2022/8/12 13:36 * @date 2022/8/12 13:36
*/ */
@Data @Data
@JsonIgnoreProperties(value = {"nftOrderPayId", "nftOrderPayId2"}, ignoreUnknown = true)
public class GalaxyTransferNftInfoBo implements Serializable,Cloneable{ public class GalaxyTransferNftInfoBo implements Serializable,Cloneable{
/** /**
* 转让流水号(平台转让订单id) * 转让流水号(平台转让订单id)
...@@ -48,6 +50,14 @@ public class GalaxyTransferNftInfoBo implements Serializable,Cloneable{ ...@@ -48,6 +50,14 @@ public class GalaxyTransferNftInfoBo implements Serializable,Cloneable{
* nft当前拥有者addr(转让成功后更新) * nft当前拥有者addr(转让成功后更新)
*/ */
private String ownerAddress; private String ownerAddress;
/**
* nft转让任务ID
*/
private String nftTransferTaskId;
/**
* nft转让时间
*/
private String nftTransferChainTimestamp;
/** /**
* 转让hash * 转让hash
*/ */
......
package com.liquidnet.service.goblin.dto.manage.vo; package com.liquidnet.service.goblin.dto.manage.vo;
import com.fasterxml.jackson.annotation.JsonFormat; import com.fasterxml.jackson.annotation.JsonFormat;
import com.fasterxml.jackson.annotation.JsonIgnoreProperties;
import com.liquidnet.commons.lang.util.DateUtil; import com.liquidnet.commons.lang.util.DateUtil;
import com.liquidnet.service.goblin.dto.manage.GoblinGoodsAnticipateValueAddParam; import com.liquidnet.service.goblin.dto.manage.GoblinGoodsAnticipateValueAddParam;
import io.swagger.annotations.ApiModelProperty; import io.swagger.annotations.ApiModelProperty;
...@@ -18,6 +19,7 @@ import java.time.LocalDateTime; ...@@ -18,6 +19,7 @@ import java.time.LocalDateTime;
* @since 2022-04-08 * @since 2022-04-08
*/ */
@Data @Data
@JsonIgnoreProperties(ignoreUnknown = true)
public class GoblinGoodsAnticipateValueVo implements Cloneable { public class GoblinGoodsAnticipateValueVo implements Cloneable {
private static final long serialVersionUID = 1L; private static final long serialVersionUID = 1L;
......
package com.liquidnet.service.goblin.dto.vo; package com.liquidnet.service.goblin.dto.vo;
import com.fasterxml.jackson.annotation.JsonIgnoreProperties;
import io.swagger.annotations.ApiModelProperty; import io.swagger.annotations.ApiModelProperty;
import lombok.Data; import lombok.Data;
...@@ -8,6 +9,7 @@ import java.math.BigDecimal; ...@@ -8,6 +9,7 @@ import java.math.BigDecimal;
import java.time.LocalDateTime; import java.time.LocalDateTime;
@Data @Data
@JsonIgnoreProperties(ignoreUnknown = true)
public class GoblinListCollectVo implements Serializable, Cloneable{ public class GoblinListCollectVo implements Serializable, Cloneable{
@ApiModelProperty(value = "listId") @ApiModelProperty(value = "listId")
private String listId; private String listId;
......
package com.liquidnet.service.goblin.dto.vo; package com.liquidnet.service.goblin.dto.vo;
import com.fasterxml.jackson.annotation.JsonIgnoreProperties;
import com.liquidnet.commons.lang.util.DateUtil; import com.liquidnet.commons.lang.util.DateUtil;
import com.liquidnet.commons.lang.util.IDGenerator; import com.liquidnet.commons.lang.util.IDGenerator;
import com.liquidnet.service.goblin.param.GoblinMixDetailsParam; import com.liquidnet.service.goblin.param.GoblinMixDetailsParam;
...@@ -13,6 +14,7 @@ import java.util.List; ...@@ -13,6 +14,7 @@ import java.util.List;
@Data @Data
@EqualsAndHashCode @EqualsAndHashCode
@JsonIgnoreProperties(ignoreUnknown = true)
public class GoblinMixDetailsVo implements Serializable, Cloneable { public class GoblinMixDetailsVo implements Serializable, Cloneable {
@ApiModelProperty(position = 0, value = "活动id") @ApiModelProperty(position = 0, value = "活动id")
private String mixId; private String mixId;
......
...@@ -104,4 +104,9 @@ public class SweetConstant { ...@@ -104,4 +104,9 @@ public class SweetConstant {
//AR //AR
public final static String REDIS_KEY_SWEET_PERFORMANCE_AR = "sweet:performance:ar"; public final static String REDIS_KEY_SWEET_PERFORMANCE_AR = "sweet:performance:ar";
//yb活动
public final static String REDIS_KEY_YB_ACTIVITY = "sweet:yb:activity:";
public final static String REDIS_KEY_YB_ACTIVITY_LIST = "sweet:yb:activity:list";
} }
...@@ -43,4 +43,12 @@ public class SweetYbEnrollParam implements Serializable { ...@@ -43,4 +43,12 @@ public class SweetYbEnrollParam implements Serializable {
@NotBlank(message = "请填写常驻城市") @NotBlank(message = "请填写常驻城市")
private String cityName; private String cityName;
@ApiModelProperty(position = 19, required = false, value = "活动id", example = "0")
private String activityId;
@ApiModelProperty(position = 20, required = false, value = "平均年龄", example = "0")
private Integer age;
} }
package com.liquidnet.service.sweet.dto.param.admin;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import javax.validation.constraints.NotNull;
import java.io.Serializable;
/**
* <p>
* SweetIntegralActivityListSearchParam
* </p>
*
* @author jiangxiulong
* @since 2021-10-20
*/
@Data
@ApiModel(value = "SweetYbActivityListParam", description = "yb活动列表")
public class SweetYbActivityListParam implements Serializable {
private static final long serialVersionUID = 6917807562233084828L;
@ApiModelProperty(position = 11, value = "标题")
private String title;
@ApiModelProperty(value = "开始时间")
private String startTime;
@ApiModelProperty(value = "结束时间")
private String endTime;
@ApiModelProperty(value = "页数", example = "0")
@NotNull(message = "页数不能为空")
private Integer pageSize;
@ApiModelProperty(value = "数量", example = "20")
@NotNull(message = "数量不能为空")
private Integer pageNum;
}
package com.liquidnet.service.sweet.dto.param.admin;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import java.io.Serializable;
/**
* <p>
* SweetIntegralActivityListSearchParam
* </p>
*
* @author jiangxiulong
* @since 2021-10-20
*/
@Data
@ApiModel(value = "SweetYbActivityParam", description = "yb活动")
public class SweetYbActivityParam implements Serializable {
private static final long serialVersionUID = 6917807562233084828L;
@ApiModelProperty(position = 11, value = "id")
private String activityId;
@ApiModelProperty(position = 11, value = "标题")
private String title;
@ApiModelProperty(position = 11, value = "封面")
private String cover;
@ApiModelProperty(value = "开始时间")
private String startTime;
@ApiModelProperty(value = "结束时间")
private String endTime;
}
package com.liquidnet.service.sweet.dto.vo;
import com.baomidou.mybatisplus.annotation.IdType;
import com.baomidou.mybatisplus.annotation.TableId;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import lombok.EqualsAndHashCode;
import java.io.Serializable;
import java.time.LocalDateTime;
/**
* <p>
* YB报名表
* </p>
*
* @author jiangxiulong
* @since 2022-07-29
*/
@Data
@EqualsAndHashCode(callSuper = false)
public class SweetYbActivityVo implements Serializable {
private static final long serialVersionUID = -2081186417971841992L;
@ApiModelProperty(value = "活动id")
private String activityId;
@ApiModelProperty(value = "活动名称")
private String title;
@ApiModelProperty(value = "封面图")
private String cover;
@ApiModelProperty(value = "状态[0-未开始|6-开始|7-下线|9-结束]")
private Integer status;
@ApiModelProperty(value = "开始时间")
private String startTime;
@ApiModelProperty(value = "结束时间")
private String endTime;
@ApiModelProperty(value = "创建时间")
private String createdAt;
@ApiModelProperty(value = "更新时间")
private String updatedAt;
private static final SweetYbActivityVo obj = new SweetYbActivityVo();
public static SweetYbActivityVo getNew() {
try {
return (SweetYbActivityVo) obj.clone();
} catch (CloneNotSupportedException e) {
return new SweetYbActivityVo();
}
}
}
...@@ -3,8 +3,11 @@ package com.liquidnet.service.sweet.service; ...@@ -3,8 +3,11 @@ package com.liquidnet.service.sweet.service;
import com.baomidou.mybatisplus.extension.service.IService; import com.baomidou.mybatisplus.extension.service.IService;
import com.liquidnet.service.base.ResponseDto; import com.liquidnet.service.base.ResponseDto;
import com.liquidnet.service.sweet.dto.param.SweetYbEnrollParam; import com.liquidnet.service.sweet.dto.param.SweetYbEnrollParam;
import com.liquidnet.service.sweet.dto.vo.SweetYbActivityVo;
import com.liquidnet.service.sweet.entity.SweetYbEnroll; import com.liquidnet.service.sweet.entity.SweetYbEnroll;
import java.util.List;
/** /**
* <p> * <p>
* YB报名表 服务类 * YB报名表 服务类
...@@ -13,7 +16,9 @@ import com.liquidnet.service.sweet.entity.SweetYbEnroll; ...@@ -13,7 +16,9 @@ import com.liquidnet.service.sweet.entity.SweetYbEnroll;
* @author jiangxiulong * @author jiangxiulong
* @since 2022-07-29 * @since 2022-07-29
*/ */
public interface ISweetYbEnrollService extends IService<SweetYbEnroll> { public interface ISweetYbEnrollService {
ResponseDto<Boolean> create(SweetYbEnrollParam param); ResponseDto<Boolean> create(SweetYbEnrollParam param);
ResponseDto<List<SweetYbActivityVo>> list();
} }
...@@ -21,6 +21,7 @@ public class LocalAdminController extends BaseController ...@@ -21,6 +21,7 @@ public class LocalAdminController extends BaseController
private final String smilePrefix = "zhengzai/smile"; private final String smilePrefix = "zhengzai/smile";
private final String activityPrefix = "zhengzai/sweet"; private final String activityPrefix = "zhengzai/sweet";
private final String candyPrefix = "zhengzai/candy"; private final String candyPrefix = "zhengzai/candy";
private final String ybPrefix = "zhengzai/yb";
@Value("${liquidnet.client.admin.platformUrl}") @Value("${liquidnet.client.admin.platformUrl}")
private String platformUrl; private String platformUrl;
...@@ -221,6 +222,16 @@ public class LocalAdminController extends BaseController ...@@ -221,6 +222,16 @@ public class LocalAdminController extends BaseController
{ {
return activityPrefix + "/affiliatedActivity/edit"; return activityPrefix + "/affiliatedActivity/edit";
} }
@GetMapping("/bannerList") // yb banner列表
public String bannerList()
{
return ybPrefix + "/bannerList";
}
@GetMapping("/creatAndEdit") // yb banner列表
public String creatAndEdit(ModelMap mmap) {
mmap.put("platformUrl", platformUrl);
return ybPrefix + "/creatAndEdit";
}
@GetMapping("/smileUserListAdd") // 关联活动-编辑 @GetMapping("/smileUserListAdd") // 关联活动-编辑
public String smileUserListAdd() public String smileUserListAdd()
{ {
......
package com.liquidnet.client.admin.web.controller.zhengzai.sweet;
import com.github.pagehelper.PageHelper;
import com.github.pagehelper.PageInfo;
import com.liquidnet.client.admin.common.core.controller.BaseController;
import com.liquidnet.client.admin.common.core.domain.AjaxResult;
import com.liquidnet.client.admin.common.core.page.TableDataInfo;
import com.liquidnet.client.admin.common.utils.poi.ExcelUtil;
import com.liquidnet.client.admin.zhengzai.kylin.dto.OrderMemberExportVo;
import com.liquidnet.client.admin.zhengzai.smile.service.ISmileAgentService;
import com.liquidnet.client.admin.zhengzai.sweet.dto.SweetYbActivityExportVo;
import com.liquidnet.client.admin.zhengzai.sweet.service.ISweetYbActivityService;
import com.liquidnet.service.kylin.dao.PerformanceAdminListDao;
import com.liquidnet.service.smile.entity.SmileAgent;
import com.liquidnet.service.sweet.dto.param.admin.SweetYbActivityListParam;
import com.liquidnet.service.sweet.dto.param.admin.SweetYbActivityParam;
import com.liquidnet.service.sweet.dto.vo.SweetYbActivityVo;
import com.liquidnet.service.sweet.entity.SweetYbActivity;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiImplicitParam;
import io.swagger.annotations.ApiImplicitParams;
import io.swagger.annotations.ApiOperation;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;
import java.util.List;
/**
* <p>
* 前端控制器
* </p>
*
* @author liquidnet
* @since 2022-03-16
*/
@Api(tags = "YB活动管理")
@RestController
@RequestMapping("/sweet/activity")
public class SweetYbActivityController extends BaseController {
@Autowired
ISweetYbActivityService sweetYbActivityService;
@PostMapping("/insert")
@ApiOperation("创建活动")
@ResponseBody
public AjaxResult aInsert(@RequestBody SweetYbActivityParam param) {
return sweetYbActivityService.aInsert(param);
}
@GetMapping("/details")
@ApiOperation("活动详情")
@ResponseBody
@ApiImplicitParams({
@ApiImplicitParam(type = "form", required = true, dataType = "String", name = "activityId", value = "活动id"),
})
public SweetYbActivityVo aDetails(String activityId) {
return sweetYbActivityService.aDetails(activityId);
}
@PostMapping("/update")
@ApiOperation("修改活动")
@ResponseBody
public AjaxResult aUpdate(@RequestBody SweetYbActivityParam param) {
return sweetYbActivityService.aUpdate(param);
}
@PostMapping("/status")
@ApiOperation("修改上线下")
@ResponseBody
@ApiImplicitParams({
@ApiImplicitParam(type = "form", required = true, dataType = "String", name = "activityId", value = "活动id"),
@ApiImplicitParam(type = "form", required = true, dataType = "Integer", name = "status", value = "状态[6-启用|7禁用]"),
})
public AjaxResult aStatus(String activityId, Integer status) {
return sweetYbActivityService.aStatus(activityId, status);
}
@PostMapping("/list")
@ApiOperation("活动列表")
@ResponseBody
public TableDataInfo aList(SweetYbActivityListParam param) {
PageHelper.startPage(param.getPageNum(), param.getPageSize());
List<SweetYbActivity> result = sweetYbActivityService.aList(param);
// TableDataInfo rspData = new TableDataInfo();
// rspData.setCode(0);
// rspData.setRows(result.getList());
// rspData.setTotal(result.getTotal());
return getDataTable(result);
}
@PostMapping("/export")
@ApiOperation("活动列表导出")
@ResponseBody
public AjaxResult exportMemberOrder(String activityId) {
List<SweetYbActivityExportVo> list = sweetYbActivityService.aExport(activityId);
if (list.size() == 0) {
return AjaxResult.error("查无信息");
}
ExcelUtil<SweetYbActivityExportVo> util = new ExcelUtil(SweetYbActivityExportVo.class);
return util.exportExcel(list, "YB报名数据");
}
}
<!DOCTYPE html>
<html lang="zh" xmlns:th="http://www.thymeleaf.org" >
<head>
<th:block th:include="include :: header('新增活动')" />
<th:block th:include="include :: select2-css" />
<th:block th:include="include :: bootstrap-fileinput-css" />
<link rel="stylesheet" href="">
<style>
input {
height: 34PX;
line-height: 34PX;
}
.required {
font-style: normal;
color: red;
}
.content_item {
padding: 20px;
}
/* .content_item .content_title {
display: flex;
} */
.content_item .content_title h3 span {
display: inline-block;
width: 4px;
height: 18px;
background: skyblue;
margin-right: 6px;
vertical-align: top;
}
.basis_data {
display: flex;
font-size: 14px;
padding: 0 20px;
margin-top: 20px;
/* align-items: center; */
}
.basis_data span {
width: 100px;
text-align: right;
}
#startTime, #endTime {
width: 272px;
margin-right: 10px;
}
.storeList, #selectShow, .dropdown-menu, .input-group {
width: 270px !important;
}
.activityStore_item {
display: flex;
margin-bottom: 12px;
}
#basis_data {
align-items: flex-start;
}
.form-control,.layui-input {
height: 34px;
line-height: 34px;
}
.kv-upload-progress {
display: none !important;
}
.ibox-content .imgBox {
max-width: 350px;
max-height: 180px;
}
</style>
</head>
<body>
<div>
<div class="content_item">
<div class="content_title">
<!-- <h3><span></span>基础信息</h3> -->
</div>
<div class="basis_data">
<span>
<em class="required">*</em>
标题:
</span>
<div class="input-group" style="width: 300px;">
<input type="text" class="form-control" id="ybTitle" placeholder="请输入活动名称">
<input type="hidden" class="form-control" id="activityId" placeholder="">
</div>
</div>
<div class="basis_data ibox-content" style="border: none;display: flex;">
<span>
<em class="required">*</em>
活动图片:
</span>
<div>
<img id="viewImg" class="imgBox" src="" alt="">
<div class="form-group">
<div class="file-loading">
<input id="fileinput" type="file" name="file" data-browse-on-zone-click="true" data-theme="fas">
</div>
<!-- <span style="color: #ccc; font-size: 12px;">适配图片尺寸:660*344</span> -->
</div>
</div>
</div>
<div class="basis_data">
<span>
<em class="required">*</em>
起止时间:
</span>
<input type="text" class="layui-input form-control editDisabled" id="startTime" autocomplete="off" placeholder="请选择活动开始时间">
~
<input type="text" class="layui-input form-control editDisabled" id="endTime" style="margin-left: 10px;" autocomplete="off" placeholder="请选择活动结束时间">
</div>
</div>
</div>
<th:block th:include="include :: footer" />
<th:block th:include="include :: bootstrap-fileinput-js" />
<th:block th:include="include :: bootstrap-suggest-js" />
</body>
<script th:inline="javascript">
let count = 1;
var prefix2 = ctx + "local";
let activityId = '';
let editDatas = 0;
var platformUrl = [[${platformUrl}]];
$(function() {
let name = 'id';
var reg = new RegExp("(^|&)"+ name +"=([^&]*)(&|$)");
var r = window.location.search.substr(1).match(reg);
layui.use('laydate', function(){
var laydate = layui.laydate;
//执行一个laydate实例
laydate.render({
elem: '#startTime', //指定元素
type: 'datetime'
});
laydate.render({
elem: '#endTime', //指定元素
type: 'datetime'
});
});
if (unescape(r[2]) && unescape(r[2]) != 'undefined') {
activityId = unescape(r[2]);
let data = {
activityId
}
let searchActivity = promiseMethods('/sweet/activity/details', 'get', data);
Promise.all([searchActivity]).then(res => {
let data = res[0];
console.log(data, 'rees')
$("#viewImg").attr('src', data.cover);
$("#startTime").val(data.startTime);
$("#endTime").val(data.endTime);
$("#ybTitle").val(data.title);
$("#activityId").val(data.activityId);
})
}
$("#fileinput").fileinput({
'theme': 'explorer-fas',
'uploadUrl': platformUrl + "/platform/basicServices/alOss/upload",
"uploadExtraData": {
"pathName" : "banner",
"buckType" : 1
},
autoReplace: true,
showCaption: false,
showPreview: false,
showRemove: false,
showUpload: false,
showCancel: false,
showClose: false,
autoReplace: true,
dropZoneTitle: "请上传文件",
maxFileCount: 1
}).on("filebatchselected", function (event, files) { //默认上传
$(this).fileinput("upload");
})
.on("fileuploaded", function (event, data) { //上传回调事件
console.log(event, data, '????')
if (data.response.code == 1) {
return layer.msg(data.response.message)
}
let showPicture = 'https://img.zhengzai.tv/' + data.response.data.ossPath;
$("#viewImg").attr('src', showPicture)
})
})
function promiseMethods(url,type,data,contentType) {
return new Promise((resolve,reject)=>{
$.ajax({
url,
type,
data,
contentType,
success:function(res) {
resolve(res);
}
})
})
}
</script>
</html>
package com.liquidnet.client.admin.zhengzai.sweet.dto;
import com.liquidnet.client.admin.common.annotation.Excel;
import com.liquidnet.service.kylin.dao.OrderExportDao;
import com.liquidnet.service.sweet.entity.SweetYbActivity;
import com.liquidnet.service.sweet.entity.SweetYbEnroll;
import lombok.Data;
import java.io.Serializable;
import java.time.format.DateTimeFormatter;
@Data
public class SweetYbActivityExportVo implements Serializable, Cloneable {
@Excel(name = "活动名称", cellType = Excel.ColumnType.STRING)
private String activityName;
@Excel(name = "联系电话", cellType = Excel.ColumnType.STRING)
private String contactTell;
@Excel(name = "联系微信", cellType = Excel.ColumnType.STRING)
private String contactWechat;
@Excel(name = "乐队名称", cellType = Excel.ColumnType.STRING)
private String nickname;
@Excel(name = "平均年龄", cellType = Excel.ColumnType.STRING)
private String age;
@Excel(name = "风格", cellType = Excel.ColumnType.STRING)
private String style;
@Excel(name = "图片地址", cellType = Excel.ColumnType.STRING)
private String imgUrl;
@Excel(name = "音频文件地址", cellType = Excel.ColumnType.STRING)
private String audioUrl;
@Excel(name = "院校", cellType = Excel.ColumnType.STRING)
private String universities;
@Excel(name = "常驻城市名称", cellType = Excel.ColumnType.STRING)
private String cityName;
@Excel(name = "创建时间", cellType = Excel.ColumnType.STRING)
private String createdAt;
private static final SweetYbActivityExportVo obj = new SweetYbActivityExportVo();
public static SweetYbActivityExportVo getNew() {
try {
return (SweetYbActivityExportVo) obj.clone();
} catch (CloneNotSupportedException e) {
e.printStackTrace();
}
return new SweetYbActivityExportVo();
}
public SweetYbActivityExportVo copyOrderExportVo(SweetYbEnroll source,String name) {
this.setActivityName(name);
this.setAge(source.getAge()+"");
this.setContactTell(source.getContactTell());
this.setContactWechat(source.getContactWechat());
this.setNickname(source.getNickname());
this.setStyle(source.getStyle());
this.setImgUrl(source.getImgUrl());
this.setAudioUrl(source.getAudioUrl());
this.setUniversities(getUniversities());
this.setCityName(source.getCityName());
this.setUniversities(source.getUniversities());
this.setCreatedAt(source.getCreatedAt().format(DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss")));
return this;
}
}
package com.liquidnet.client.admin.zhengzai.sweet.service;
import com.baomidou.mybatisplus.extension.service.IService;
import com.github.pagehelper.PageInfo;
import com.liquidnet.client.admin.common.core.domain.AjaxResult;
import com.liquidnet.client.admin.zhengzai.sweet.dto.SweetYbActivityExportVo;
import com.liquidnet.service.base.ResponseDto;
import com.liquidnet.service.sweet.dto.SweetIntegralActivityDto;
import com.liquidnet.service.sweet.dto.param.admin.SweetIntegralActivityFromParam;
import com.liquidnet.service.sweet.dto.param.admin.SweetIntegralActivityListSearchParam;
import com.liquidnet.service.sweet.dto.param.admin.SweetYbActivityListParam;
import com.liquidnet.service.sweet.dto.param.admin.SweetYbActivityParam;
import com.liquidnet.service.sweet.dto.vo.SweetYbActivityVo;
import com.liquidnet.service.sweet.dto.vo.admin.SweetIntegralActivityVo;
import com.liquidnet.service.sweet.entity.SweetIntegralActivity;
import com.liquidnet.service.sweet.entity.SweetYbActivity;
import java.util.List;
/**
* <p>
* 积分活动表 服务类
* </p>
*
* @author jiangxiulong
* @since 2021-10-20
*/
public interface ISweetYbActivityService {
AjaxResult aInsert(SweetYbActivityParam param);
SweetYbActivityVo aDetails(String activityId);
List<SweetYbActivity> aList(SweetYbActivityListParam param);
AjaxResult aUpdate(SweetYbActivityParam param);
AjaxResult aStatus(String activityId, Integer status);
List<SweetYbActivityExportVo> aExport(String activityId);
}
package com.liquidnet.client.admin.zhengzai.sweet.service.impl;
import com.baomidou.mybatisplus.core.toolkit.Wrappers;
import com.liquidnet.client.admin.common.core.domain.AjaxResult;
import com.liquidnet.client.admin.common.exception.BusinessException;
import com.liquidnet.client.admin.zhengzai.sweet.dto.SweetYbActivityExportVo;
import com.liquidnet.client.admin.zhengzai.sweet.service.ISweetYbActivityService;
import com.liquidnet.client.admin.zhengzai.sweet.utils.SweetRedisAdminUtils;
import com.liquidnet.commons.lang.util.DateUtil;
import com.liquidnet.commons.lang.util.IDGenerator;
import com.liquidnet.service.sweet.dto.param.admin.SweetYbActivityListParam;
import com.liquidnet.service.sweet.dto.param.admin.SweetYbActivityParam;
import com.liquidnet.service.sweet.dto.vo.SweetYbActivityVo;
import com.liquidnet.service.sweet.entity.SweetYbActivity;
import com.liquidnet.service.sweet.entity.SweetYbEnroll;
import com.liquidnet.service.sweet.mapper.SweetYbActivityMapper;
import com.liquidnet.service.sweet.mapper.SweetYbEnrollMapper;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import java.time.LocalDateTime;
import java.time.format.DateTimeFormatter;
import java.util.ArrayList;
import java.util.List;
import static com.liquidnet.commons.lang.util.DateUtil.DTF_YMD_HMS;
@Service
@Slf4j
public class SweetYbActivityServiceImpl implements ISweetYbActivityService {
@Autowired
SweetRedisAdminUtils sweetRedisAdminUtils;
@Autowired
SweetYbActivityMapper sweetYbActivityMapper;
@Autowired
SweetYbEnrollMapper sweetYbEnrollMapper;
@Override
public AjaxResult aInsert(SweetYbActivityParam param) {
LocalDateTime now = LocalDateTime.now();
SweetYbActivity entity = SweetYbActivity.getNew();
entity.setActivityId(IDGenerator.nextTimeId2());
entity.setCover(param.getCover());
entity.setTitle(param.getTitle());
entity.setStartTime(LocalDateTime.parse(param.getStartTime(), DTF_YMD_HMS));
entity.setEndTime(LocalDateTime.parse(param.getEndTime(), DTF_YMD_HMS));
entity.setStatus(7);
entity.setCreatedAt(now);
entity.setUpdatedAt(now);
int i = sweetYbActivityMapper.insert(entity);
if (i > 0) {
SweetYbActivityVo vo = SweetYbActivityVo.getNew();
vo.setCreatedAt(DateUtil.getNowTime());
vo.setCover(entity.getCover());
vo.setTitle(entity.getTitle());
vo.setActivityId(entity.getActivityId());
vo.setStartTime(entity.getStartTime().format(DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss")));
vo.setEndTime(entity.getEndTime().format(DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss")));
sweetRedisAdminUtils.setSweetYbActivityVo(vo);
return AjaxResult.success("添加成功");
}
return AjaxResult.error("添加失败");
}
@Override
public SweetYbActivityVo aDetails(String activityId) {
SweetYbActivity entity = sweetYbActivityMapper.selectOne(Wrappers.lambdaQuery(SweetYbActivity.class).eq(SweetYbActivity::getActivityId, activityId));
return initVo(entity);
}
@Override
public List<SweetYbActivity> aList(SweetYbActivityListParam param) {
List<SweetYbActivity> data = sweetYbActivityMapper.selectList(Wrappers.lambdaQuery(SweetYbActivity.class).like(SweetYbActivity::getTitle, param.getTitle()).orderByDesc(SweetYbActivity::getCreatedAt));
// List<SweetYbActivityVo> voList = new ArrayList<>();
// for (SweetYbActivity entity : data) {
// SweetYbActivityVo vo = initVo(entity);
// voList.add(vo);
// }
// pageInfo = new PageInfo(voList);
return data;
}
@Override
public AjaxResult aUpdate(SweetYbActivityParam param) {
int count = sweetYbActivityMapper.selectCount(Wrappers.lambdaQuery(SweetYbActivity.class).ne(SweetYbActivity::getActivityId, param.getActivityId()).eq(SweetYbActivity::getTitle, param.getTitle()));
if (count > 0) {
return AjaxResult.error("活动名称重复");
}
LocalDateTime now = LocalDateTime.now();
SweetYbActivity entity = SweetYbActivity.getNew();
entity.setCover(param.getCover());
entity.setTitle(param.getTitle());
entity.setStartTime(LocalDateTime.parse(param.getStartTime(), DTF_YMD_HMS));
entity.setEndTime(LocalDateTime.parse(param.getEndTime(), DTF_YMD_HMS));
entity.setUpdatedAt(now);
int i = sweetYbActivityMapper.update(entity, Wrappers.lambdaUpdate(SweetYbActivity.class).eq(SweetYbActivity::getActivityId, param.getActivityId()));
if (i > 0) {
SweetYbActivityVo vo = sweetRedisAdminUtils.getSweetYbActivityVo(param.getActivityId());
vo.setUpdatedAt(DateUtil.getNowTime());
vo.setCover(entity.getCover());
vo.setTitle(entity.getTitle());
vo.setStartTime(entity.getStartTime().format(DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss")));
vo.setEndTime(entity.getEndTime().format(DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss")));
sweetRedisAdminUtils.setSweetYbActivityVo(vo);
return AjaxResult.success("修改成功");
}
return AjaxResult.error("修改失败");
}
@Override
public AjaxResult aStatus(String activityId, Integer status) {
if (status != 6 && status != 7) {
return AjaxResult.error("修改失败");
}
SweetYbActivity entity = SweetYbActivity.getNew();
entity.setStatus(status);
SweetYbActivityVo vo = sweetRedisAdminUtils.getSweetYbActivityVo(activityId);
// if(vo.getStatus().equals(status)){
// return AjaxResult.error("已修改");
// }
int i = sweetYbActivityMapper.update(entity, Wrappers.lambdaUpdate(SweetYbActivity.class).eq(SweetYbActivity::getActivityId, activityId));
if (i > 0) {
vo.setStatus(status);
sweetRedisAdminUtils.setSweetYbActivityVo(vo);
if (status == 6) {
sweetRedisAdminUtils.addSweetYbActivityList(activityId);
} else {
sweetRedisAdminUtils.removeSweetYbActivityList(activityId);
}
return AjaxResult.success("修改成功");
}
return AjaxResult.error("修改失败");
}
@Override
public List<SweetYbActivityExportVo> aExport(String activityId) {
try {
SweetYbActivity activity = sweetYbActivityMapper.selectOne(Wrappers.lambdaQuery(SweetYbActivity.class).eq(SweetYbActivity::getActivityId, activityId));
List<SweetYbEnroll> list = sweetYbEnrollMapper.selectList(Wrappers.lambdaQuery(SweetYbEnroll.class).eq(SweetYbEnroll::getActivityId, activityId));
List<SweetYbActivityExportVo> voList = new ArrayList();
for (SweetYbEnroll item : list) {
voList.add(SweetYbActivityExportVo.getNew().copyOrderExportVo(item, activity.getTitle()));
}
return voList;
} catch (Exception e) {
e.printStackTrace();
throw new BusinessException("导出异常,请联系网站管理员!");
}
}
private SweetYbActivityVo initVo(SweetYbActivity entity) {
LocalDateTime now = LocalDateTime.now();
SweetYbActivityVo vo = SweetYbActivityVo.getNew();
vo.setActivityId(entity.getActivityId());
vo.setCreatedAt(entity.getCreatedAt().format(DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss")));
vo.setEndTime(entity.getEndTime().format(DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss")));
vo.setStartTime(entity.getStartTime().format(DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss")));
vo.setTitle(entity.getTitle());
vo.setCover(entity.getCover());
if (entity.getStatus() == 6) {
if (now.isBefore(entity.getStartTime())) {
vo.setStatus(0);
} else if (now.isAfter(entity.getEndTime())) {
vo.setStatus(9);
} else {
vo.setStatus(6);
}
} else {
vo.setStatus(entity.getStatus());
}
return vo;
}
}
package com.liquidnet.client.admin.zhengzai.sweet.utils; package com.liquidnet.client.admin.zhengzai.sweet.utils;
import com.liquidnet.common.cache.redis.util.RedisDataSourceUtil; import com.liquidnet.common.cache.redis.util.RedisDataSourceUtil;
import com.liquidnet.commons.lang.util.CollectionUtil;
import com.liquidnet.commons.lang.util.CurrentUtil;
import com.liquidnet.service.sweet.constant.SweetConstant; import com.liquidnet.service.sweet.constant.SweetConstant;
import com.liquidnet.service.sweet.dto.vo.IntegralActivityDrawVo; import com.liquidnet.service.sweet.dto.vo.IntegralActivityDrawVo;
import com.liquidnet.service.sweet.dto.vo.IntegralActivityVo; import com.liquidnet.service.sweet.dto.vo.IntegralActivityVo;
import com.liquidnet.service.sweet.dto.vo.SweetYbActivityVo;
import com.liquidnet.service.sweet.entity.SweetQrCode; import com.liquidnet.service.sweet.entity.SweetQrCode;
import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component; import org.springframework.stereotype.Component;
import java.util.Currency;
import java.util.LinkedList; import java.util.LinkedList;
import java.util.List; import java.util.List;
...@@ -150,4 +154,50 @@ public class SweetRedisAdminUtils { ...@@ -150,4 +154,50 @@ public class SweetRedisAdminUtils {
String redisKey = SweetConstant.REDIS_KEY_QRCODE_LIST.concat(type + ""); String redisKey = SweetConstant.REDIS_KEY_QRCODE_LIST.concat(type + "");
redisDataSourceUtil.getRedisSweetUtil().set(redisKey, data); redisDataSourceUtil.getRedisSweetUtil().set(redisKey, data);
} }
//yb活动vo
public void setSweetYbActivityVo(SweetYbActivityVo vo) {
String redisKey = SweetConstant.REDIS_KEY_YB_ACTIVITY.concat(vo.getActivityId());
redisDataSourceUtil.getRedisSweetUtil().set(redisKey, vo);
}
//yb活动vo
public SweetYbActivityVo getSweetYbActivityVo(String activityId) {
String redisKey = SweetConstant.REDIS_KEY_YB_ACTIVITY.concat(activityId);
Object obj = redisDataSourceUtil.getRedisSweetUtil().get(redisKey);
if (obj == null) {
return SweetYbActivityVo.getNew();
} else {
return (SweetYbActivityVo) obj;
}
}
//yb活动vo
public List<String> getSweetYbActivityList() {
String redisKey = SweetConstant.REDIS_KEY_YB_ACTIVITY_LIST;
Object obj = redisDataSourceUtil.getRedisSweetUtil().get(redisKey);
if (obj == null) {
return CollectionUtil.arrayListString();
} else {
return (List<String>) obj;
}
}
//yb活动vo
public void addSweetYbActivityList(String activityId) {
String redisKey = SweetConstant.REDIS_KEY_YB_ACTIVITY_LIST;
List<String> list = getSweetYbActivityList();
if(!list.contains(activityId)) {
list.add(activityId);
}
redisDataSourceUtil.getRedisSweetUtil().set(redisKey,list);
}
//yb活动vo
public void removeSweetYbActivityList(String activityId) {
String redisKey = SweetConstant.REDIS_KEY_YB_ACTIVITY_LIST;
List<String> list = getSweetYbActivityList();
list.remove(activityId);
redisDataSourceUtil.getRedisSweetUtil().set(redisKey,list);
}
} }
package com.liquidnet.service.sweet.entity;
import com.baomidou.mybatisplus.annotation.IdType;
import com.baomidou.mybatisplus.annotation.TableId;
import lombok.Data;
import lombok.EqualsAndHashCode;
import java.io.Serializable;
import java.time.LocalDateTime;
/**
* <p>
* YB报名表
* </p>
*
* @author jiangxiulong
* @since 2022-07-29
*/
@Data
@EqualsAndHashCode(callSuper = false)
public class SweetYbActivity implements Serializable {
private static final long serialVersionUID = -2081186417971841992L;
@TableId(value = "mid", type = IdType.AUTO)
private Long mid;
/**
* 活动id
*/
private String activityId;
/**
* 活动名称
*/
private String title;
/**
* 封面图
*/
private String cover;
/**
* 状态[0-未开始|6-开始|7-下线|9-结束]
*/
private Integer status;
/**
* 开始时间
*/
private LocalDateTime startTime;
/**
* 结束时间
*/
private LocalDateTime endTime;
/**
* 创建时间
*/
private LocalDateTime createdAt;
/**
* 更新时间
*/
private LocalDateTime updatedAt;
private static final SweetYbActivity obj = new SweetYbActivity();
public static SweetYbActivity getNew() {
try {
return (SweetYbActivity) obj.clone();
} catch (CloneNotSupportedException e) {
return new SweetYbActivity();
}
}
}
...@@ -70,6 +70,16 @@ public class SweetYbEnroll implements Serializable { ...@@ -70,6 +70,16 @@ public class SweetYbEnroll implements Serializable {
*/ */
private String cityName; private String cityName;
/**
* 平均年龄
*/
private int age;
/**
* 活动id
*/
private String activityId;
/** /**
* 创建时间 * 创建时间
*/ */
......
package com.liquidnet.service.sweet.mapper;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.liquidnet.service.sweet.dto.SweetManualAppletFiveDto;
import com.liquidnet.service.sweet.dto.SweetManualFiveDto;
import com.liquidnet.service.sweet.entity.SweetManualFive;
import com.liquidnet.service.sweet.entity.SweetYbActivity;
import java.util.List;
import java.util.Map;
/**
* <p>
* Mapper 接口
* </p>
*
* @author liquidnet
* @since 2021-08-09
*/
public interface SweetYbActivityMapper extends BaseMapper<SweetYbActivity> {
}
<?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">
<mapper namespace="com.liquidnet.service.sweet.mapper.SweetYbActivityMapper">
</mapper>
...@@ -161,6 +161,8 @@ public class GalaxyBeanTransferBiz { ...@@ -161,6 +161,8 @@ public class GalaxyBeanTransferBiz {
transferNftInfoBo.setSeriesId(null); transferNftInfoBo.setSeriesId(null);
transferNftInfoBo.setRouterType(reqDto.getRouterType()); transferNftInfoBo.setRouterType(reqDto.getRouterType());
transferNftInfoBo.setTransferStatus(GalaxyEnum.NftTransferStatusEnum.INIT.getCode()); transferNftInfoBo.setTransferStatus(GalaxyEnum.NftTransferStatusEnum.INIT.getCode());
transferNftInfoBo.setNftTransferTaskId(null);
transferNftInfoBo.setNftTransferChainTimestamp(null);
transferNftInfoBo.setTransferHash(null); transferNftInfoBo.setTransferHash(null);
transferNftInfoBo.setErrorCode(null); transferNftInfoBo.setErrorCode(null);
transferNftInfoBo.setErrorMsg(null); transferNftInfoBo.setErrorMsg(null);
...@@ -184,6 +186,7 @@ public class GalaxyBeanTransferBiz { ...@@ -184,6 +186,7 @@ public class GalaxyBeanTransferBiz {
respDto.setFromUserId(userInfoBo.getUserId()); respDto.setFromUserId(userInfoBo.getUserId());
respDto.setFromAddress(userInfoBo.getBlockChainAddress()); respDto.setFromAddress(userInfoBo.getBlockChainAddress());
respDto.setTransferTime(DateUtil.getNowTime()); respDto.setTransferTime(DateUtil.getNowTime());
respDto.setRouterType(transferNftInfoBo.getRouterType());
respDto.setTransferHash(transferNftInfoBo.getTransferHash()); respDto.setTransferHash(transferNftInfoBo.getTransferHash());
return respDto; return respDto;
} }
......
...@@ -84,6 +84,9 @@ public class XuperTradeCommonBiz { ...@@ -84,6 +84,9 @@ public class XuperTradeCommonBiz {
return ResponseDto.failure(GalaxyErrorEnum.SERIES_NFT_INFO_NOT_EXIST.getCode(), GalaxyErrorEnum.SERIES_NFT_INFO_NOT_EXIST.getMessage()); return ResponseDto.failure(GalaxyErrorEnum.SERIES_NFT_INFO_NOT_EXIST.getCode(), GalaxyErrorEnum.SERIES_NFT_INFO_NOT_EXIST.getMessage());
} }
//生成nftId
String nftId = this.createNftId(reqDto,seriesNftInfoBo);
//获取订单信息 //获取订单信息
GalaxyNftOrderBo nftOrderBo = dataUtils.getNftOrderBo(reqDto.getRouterType(),reqDto.getNftOrderPayId()); GalaxyNftOrderBo nftOrderBo = dataUtils.getNftOrderBo(reqDto.getRouterType(),reqDto.getNftOrderPayId());
//初始化订单数据 //初始化订单数据
...@@ -92,6 +95,11 @@ public class XuperTradeCommonBiz { ...@@ -92,6 +95,11 @@ public class XuperTradeCommonBiz {
nftOrderBo.setNftPublishTaskId(seriesNftInfoBo.getSeriesId()); nftOrderBo.setNftPublishTaskId(seriesNftInfoBo.getSeriesId());
nftOrderBo.setNftPublishFromAddress(xuperConfig.getNftPlatformAddress()); nftOrderBo.setNftPublishFromAddress(xuperConfig.getNftPlatformAddress());
nftOrderBo.setNftBuyFromAddress(xuperConfig.getNftPlatformAddress()); nftOrderBo.setNftBuyFromAddress(xuperConfig.getNftPlatformAddress());
//设置购买标志
nftOrderBo.setNftId(nftId);
nftOrderBo.setNftPublishChainTimestamp(seriesNftInfoBo.getUpdatedAt().toString());
nftOrderBo.setNftPublishTradeHash(seriesNftInfoBo.getNftPublishTradeHash());
nftOrderBo.setNftPublishStatus(seriesNftInfoBo.getNftPublishStatus());
dataUtils.setNftOrderBo(reqDto.getRouterType(),reqDto.getNftOrderPayId(),nftOrderBo); dataUtils.setNftOrderBo(reqDto.getRouterType(),reqDto.getNftOrderPayId(),nftOrderBo);
}else if(StringUtil.isNotNull(nftOrderBo)){ }else if(StringUtil.isNotNull(nftOrderBo)){
if(nftOrderBo.getNftPublishStatus().equalsIgnoreCase(GalaxyEnum.TaskStatusEnum.TASK_SUCCESS.getCode()) if(nftOrderBo.getNftPublishStatus().equalsIgnoreCase(GalaxyEnum.TaskStatusEnum.TASK_SUCCESS.getCode())
...@@ -116,14 +124,7 @@ public class XuperTradeCommonBiz { ...@@ -116,14 +124,7 @@ public class XuperTradeCommonBiz {
} }
} }
//开始索引
Integer seriesBeginIndex = null;
/**
* 根据sku获取系列Id
*/
String seriesId = seriesNftInfoBo.getSeriesId();
//返回参数nftId //返回参数nftId
String nftId = null;
String publishTaskId = null; String publishTaskId = null;
Long nftPublishChainTimestamp = null; Long nftPublishChainTimestamp = null;
Integer nftPublishStatus = null; Integer nftPublishStatus = null;
...@@ -135,46 +136,6 @@ public class XuperTradeCommonBiz { ...@@ -135,46 +136,6 @@ public class XuperTradeCommonBiz {
boolean isPublishSuccess = false; boolean isPublishSuccess = false;
try{ try{
/**
* 获取订单和nft绑定信息
*/
GalaxyNftOrderBindBo nftOrderBindBo = dataUtils.getGalaxyNftOrderBindBo(reqDto.getRouterType(),reqDto.getNftOrderPayId());
if(StringUtil.isNull(nftOrderBindBo)){
//获取发行索引
long nftIdNo = dataUtils.incrNftIdNo(reqDto.getRouterType(),reqDto.getSkuId());
//如果发行数大于最大发行数量
if(nftIdNo > seriesNftInfoBo.getNftTotalCount()){
//发行失败
throw new GalaxyNftPublishException(GalaxyErrorEnum.NFT_PUBLISH_ERROR.getCode(),"该sku:"+reqDto.getSkuId()+" 总共"+seriesNftInfoBo.getNftTotalCount()+"个NFT已经发行完毕,没有剩余库存!");
}
//判断是否切换订单
while(galaxyTradeBiz.isNeedSwitch(reqDto.getSkuId(),String.valueOf(nftIdNo))){
long finalNftIdNo = nftIdNo;
//开启新线程去执行购买
executorService.submit(() -> {
galaxyTradeBiz.switchBuyRouterBySkuId(reqDto.getSkuId(),String.valueOf(finalNftIdNo),seriesNftInfoBo);
});
nftIdNo = dataUtils.incrNftIdNo(reqDto.getRouterType(),reqDto.getSkuId());
}
nftOrderBindBo = GalaxyNftOrderBindBo.getNew();
nftOrderBindBo.setNftOrderPayId(reqDto.getNftOrderPayId());
nftOrderBindBo.setSeriesId(seriesNftInfoBo.getSeriesId());
nftOrderBindBo.setSeriesCode(seriesNftInfoBo.getSeriesCode());
nftOrderBindBo.setNftIdIndex(Integer.valueOf(String.valueOf(nftIdNo)));
nftOrderBindBo.setRouterType(reqDto.getRouterType());
String nowTimeStr = DateUtil.Formatter.yyyyMMddHHmmss.format(LocalDateTime.now());
nftOrderBindBo.setCreatedAt(nowTimeStr);
dataUtils.setGalaxyNftOrderBindBo(reqDto.getRouterType(),reqDto.getNftOrderPayId(),nftOrderBindBo);
}
seriesBeginIndex = nftOrderBindBo.getNftIdIndex();
//设置nftId
nftId = seriesId.concat("_").concat(seriesBeginIndex.toString());
//设置购买标志
nftOrderBo.setNftId(nftId);
/** /**
* 如果已经发行成功 * 如果已经发行成功
*/ */
...@@ -367,6 +328,61 @@ public class XuperTradeCommonBiz { ...@@ -367,6 +328,61 @@ public class XuperTradeCommonBiz {
return nftPublishAndBuyRespDto; return nftPublishAndBuyRespDto;
} }
/**
* 生成nftId
* @param reqDto
* @param seriesNftInfoBo
* @return
*/
private String createNftId(GalaxyNftPublishAndBuyReqDto reqDto,GalaxySeriesNftInfoBo seriesNftInfoBo){
//开始索引
Integer seriesBeginIndex = null;
/**
* 根据sku获取系列Id
*/
String seriesId = seriesNftInfoBo.getSeriesId();
//返回参数nftId
String nftId = null;
/**
* 获取订单和nft绑定信息
*/
GalaxyNftOrderBindBo nftOrderBindBo = dataUtils.getGalaxyNftOrderBindBo(reqDto.getRouterType(),reqDto.getNftOrderPayId());
if(StringUtil.isNull(nftOrderBindBo)){
//获取发行索引
long nftIdNo = dataUtils.incrNftIdNo(reqDto.getRouterType(),reqDto.getSkuId());
//如果发行数大于最大发行数量
if(nftIdNo > seriesNftInfoBo.getNftTotalCount()){
//发行失败
throw new GalaxyNftPublishException(GalaxyErrorEnum.NFT_PUBLISH_ERROR.getCode(),"该sku:"+reqDto.getSkuId()+" 总共"+seriesNftInfoBo.getNftTotalCount()+"个NFT已经发行完毕,没有剩余库存!");
}
//判断是否切换订单
while(galaxyTradeBiz.isNeedSwitch(reqDto.getSkuId(),String.valueOf(nftIdNo))){
long finalNftIdNo = nftIdNo;
//开启新线程去执行购买
executorService.submit(() -> {
galaxyTradeBiz.switchBuyRouterBySkuId(reqDto.getSkuId(),String.valueOf(finalNftIdNo),seriesNftInfoBo);
});
nftIdNo = dataUtils.incrNftIdNo(reqDto.getRouterType(),reqDto.getSkuId());
}
nftOrderBindBo = GalaxyNftOrderBindBo.getNew();
nftOrderBindBo.setNftOrderPayId(reqDto.getNftOrderPayId());
nftOrderBindBo.setSeriesId(seriesNftInfoBo.getSeriesId());
nftOrderBindBo.setSeriesCode(seriesNftInfoBo.getSeriesCode());
nftOrderBindBo.setNftIdIndex(Integer.valueOf(String.valueOf(nftIdNo)));
nftOrderBindBo.setRouterType(reqDto.getRouterType());
String nowTimeStr = DateUtil.Formatter.yyyyMMddHHmmss.format(LocalDateTime.now());
nftOrderBindBo.setCreatedAt(nowTimeStr);
dataUtils.setGalaxyNftOrderBindBo(reqDto.getRouterType(),reqDto.getNftOrderPayId(),nftOrderBindBo);
}
seriesBeginIndex = nftOrderBindBo.getNftIdIndex();
//设置nftId
nftId = seriesId.concat("_").concat(seriesBeginIndex.toString());
return nftId;
}
/** /**
* 保持线程循环查询 * 保持线程循环查询
* @param nftId * @param nftId
......
...@@ -545,8 +545,11 @@ public abstract class AbstractDataUtils { ...@@ -545,8 +545,11 @@ public abstract class AbstractDataUtils {
try{ try{
this.getQueueUtil().sendMySqlRedis( this.getQueueUtil().sendMySqlRedis(
SqlMapping.get("galaxy_nft_transfer_info.insert"), SqlMapping.get("galaxy_nft_transfer_info.insert"),
new Object[]{transferNftInfoBo.getTransOrderId(),transferNftInfoBo.getNftId(),transferNftInfoBo.getUserId(),transferNftInfoBo.getAddress(),transferNftInfoBo.getReceiveUserId(),transferNftInfoBo.getReceiveAddress(), new Object[]{transferNftInfoBo.getTransOrderId(),transferNftInfoBo.getNftId(),transferNftInfoBo.getUserId(),transferNftInfoBo.getAddress()
transferNftInfoBo.getOwnerUserId(),transferNftInfoBo.getOwnerAddress(),transferNftInfoBo.getTransferHash(),transferNftInfoBo.getSeriesId(),transferNftInfoBo.getRouterType(), ,transferNftInfoBo.getReceiveUserId(),transferNftInfoBo.getReceiveAddress()
,transferNftInfoBo.getOwnerUserId(),transferNftInfoBo.getOwnerAddress()
,transferNftInfoBo.getNftTransferTaskId(),transferNftInfoBo.getNftTransferChainTimestamp()
,transferNftInfoBo.getTransferHash(),transferNftInfoBo.getSeriesId(),transferNftInfoBo.getRouterType(),
transferNftInfoBo.getTransferStatus(),transferNftInfoBo.getErrorCode(),transferNftInfoBo.getErrorMsg(),transferNftInfoBo.getCreatedAt(),transferNftInfoBo.getUpdatedAt()} transferNftInfoBo.getTransferStatus(),transferNftInfoBo.getErrorCode(),transferNftInfoBo.getErrorMsg(),transferNftInfoBo.getCreatedAt(),transferNftInfoBo.getUpdatedAt()}
, MQConst.GalaxyQueue.SQL_NFT_TRADE_INFO.getKey() , MQConst.GalaxyQueue.SQL_NFT_TRADE_INFO.getKey()
); );
...@@ -583,8 +586,10 @@ public abstract class AbstractDataUtils { ...@@ -583,8 +586,10 @@ public abstract class AbstractDataUtils {
try{ try{
this.getQueueUtil().sendMySqlRedis( this.getQueueUtil().sendMySqlRedis(
SqlMapping.get("galaxy_nft_transfer_info.updateNftTransferInfo"), SqlMapping.get("galaxy_nft_transfer_info.updateNftTransferInfo"),
new Object[]{transferNftInfoBo.getOwnerUserId(),transferNftInfoBo.getOwnerAddress(),transferNftInfoBo.getTransferHash(), new Object[]{transferNftInfoBo.getOwnerUserId(),transferNftInfoBo.getOwnerAddress()
transferNftInfoBo.getTransferStatus(),transferNftInfoBo.getErrorCode(),transferNftInfoBo.getErrorMsg() ,transferNftInfoBo.getNftTransferTaskId(),transferNftInfoBo.getNftTransferChainTimestamp()
,transferNftInfoBo.getTransferHash()
,transferNftInfoBo.getTransferStatus(),transferNftInfoBo.getErrorCode(),transferNftInfoBo.getErrorMsg()
,transferNftInfoBo.getUpdatedAt(),transferNftInfoBo.getTransOrderId()} ,transferNftInfoBo.getUpdatedAt(),transferNftInfoBo.getTransOrderId()}
, MQConst.GalaxyQueue.SQL_NFT_TRADE_INFO.getKey() , MQConst.GalaxyQueue.SQL_NFT_TRADE_INFO.getKey()
); );
......
...@@ -11,7 +11,7 @@ galaxy_nft_trade_info.insert=insert into galaxy_nft_trade_info (user_id, nft_id, ...@@ -11,7 +11,7 @@ galaxy_nft_trade_info.insert=insert into galaxy_nft_trade_info (user_id, nft_id,
# ------------------------数字藏品发行购买失败记录---------------------------- # ------------------------数字藏品发行购买失败记录----------------------------
galaxy_nft_order_fail_log.insert=insert into galaxy_nft_order_fail_log (nft_order_pay_id, user_id, nft_id, nft_name, series_name, series_id,series_code, taskId, fail_reason_desc, fail_reason_desc_second, deal_with_status, trade_type,router_type, created_at, updated_at)values (?,?,?,?,?,?,?,?,?,?,?,?,?,?,?) galaxy_nft_order_fail_log.insert=insert into galaxy_nft_order_fail_log (nft_order_pay_id, user_id, nft_id, nft_name, series_name, series_id,series_code, taskId, fail_reason_desc, fail_reason_desc_second, deal_with_status, trade_type,router_type, created_at, updated_at)values (?,?,?,?,?,?,?,?,?,?,?,?,?,?,?)
# ------------------------数字藏品转让记录---------------------------- # ------------------------数字藏品转让记录----------------------------
galaxy_nft_transfer_info.insert=insert into galaxy_nft_transfer_info (trans_order_id,nft_id,user_id, address, receive_user_id, receive_address, owner_user_id,owner_address, transfer_hash, series_id, router_type, transfer_status, error_code,error_msg, created_at, updated_at) values (?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?) galaxy_nft_transfer_info.insert=insert into galaxy_nft_transfer_info (trans_order_id,nft_id,user_id, address, receive_user_id, receive_address, owner_user_id,owner_address,nft_transfer_task_id,nft_transfer_chain_timestamp,transfer_hash, series_id, router_type, transfer_status, error_code,error_msg, created_at, updated_at) values (?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?)
# ------------------------更新用户注册信息---------------------------- # ------------------------更新用户注册信息----------------------------
galaxy_user_info.update=update galaxy_user_info set user_name = ?,id_card_type = ?,id_card = ?,mobile = ?,block_chain_address = ?,user_identification = ?,updated_at =? where router_type = ? and user_id = ? galaxy_user_info.update=update galaxy_user_info set user_name = ?,id_card_type = ?,id_card = ?,mobile = ?,block_chain_address = ?,user_identification = ?,updated_at =? where router_type = ? and user_id = ?
...@@ -34,4 +34,4 @@ galaxy_series_nft_info.updateSeriesNftPublishStatus=update galaxy_series_nft_inf ...@@ -34,4 +34,4 @@ galaxy_series_nft_info.updateSeriesNftPublishStatus=update galaxy_series_nft_inf
# ------------------------同步用户数字账户信息到adam--------------------------- # ------------------------同步用户数字账户信息到adam---------------------------
adam_user_busi_acct.add=INSERT INTO adam_user_busi_acct (`uid`, busi, uuid, `work`, ppwd, `state`, created_at) VALUES (?,?,?,?,?,?,?) adam_user_busi_acct.add=INSERT INTO adam_user_busi_acct (`uid`, busi, uuid, `work`, ppwd, `state`, created_at) VALUES (?,?,?,?,?,?,?)
# ------------------------更新nft转让信息---------------------------- # ------------------------更新nft转让信息----------------------------
galaxy_nft_transfer_info.updateNftTransferInfo=update galaxy_nft_transfer_info t set t.owner_user_id = ?,t.owner_address = ?,t.transfer_hash =?,t.transfer_status =?,t.error_code =?,t.error_msg =? ,t.updated_at =? where t.trans_order_id = ? galaxy_nft_transfer_info.updateNftTransferInfo=update galaxy_nft_transfer_info t set t.owner_user_id = ?,t.owner_address = ?,t.nft_transfer_task_id =?,t.nft_transfer_chain_timestamp =?,t.transfer_hash =?,t.transfer_status =?,t.error_code =?,t.error_msg =? ,t.updated_at =? where t.trans_order_id = ?
alter table galaxy_nft_transfer_info
add nft_transfer_task_id varchar(100) null comment 'nft转让任务id' after owner_address;
alter table galaxy_nft_transfer_info
add nft_transfer_chain_timestamp varchar(30) null comment 'nft转让时间' after nft_transfer_task_id;
...@@ -1157,7 +1157,7 @@ alter table goblin_user_digital_artwork ...@@ -1157,7 +1157,7 @@ alter table goblin_user_digital_artwork
alter table goblin_user_digital_artwork alter table goblin_user_digital_artwork
add transfer_order_id varchar(64) null comment '转赠订单号' after receiver_uid; add transfer_order_id varchar(64) null comment '转赠订单号' after receiver_uid;
alter table goblin_user_digital_artwork alter table goblin_user_digital_artwork
add transfer_state varchar(20) null comment '转赠状态[PENDING|SUCCESS]' after transfer_order_id; add transfer_state varchar(20) null comment '转赠状态[WAITING|PENDING|SUCCESS]' after transfer_order_id;
alter table goblin_user_digital_artwork alter table goblin_user_digital_artwork
modify source tinyint null comment '获得方式[1-购买|2-兑换|3-赠送|5-大美|6-转赠|31-空投赠送]'; modify source tinyint null comment '获得方式[1-购买|2-兑换|3-赠送|5-大美|6-转赠|31-空投赠送]';
......
...@@ -62,11 +62,11 @@ public class GalaxyRouterStrategyZxlTradeImpl implements IGalaxyRouterStrategyTr ...@@ -62,11 +62,11 @@ public class GalaxyRouterStrategyZxlTradeImpl implements IGalaxyRouterStrategyTr
@Override @Override
public ResponseDto<GalaxyNftTransferRespDto> nftTransfer(GalaxyNftTransferReqDto reqDto) { public ResponseDto<GalaxyNftTransferRespDto> nftTransfer(GalaxyNftTransferReqDto reqDto) {
return null; return zxinTradeBiz.nftTransfer(reqDto);
} }
@Override @Override
public ResponseDto<GalaxyNftTransferQueryRespDto> nftTransferQuery(GalaxyNftTransferQueryReqDto reqDto) { public ResponseDto<GalaxyNftTransferQueryRespDto> nftTransferQuery(GalaxyNftTransferQueryReqDto reqDto) {
return null; return zxinTradeBiz.nftTransferQuery(reqDto);
} }
} }
...@@ -71,7 +71,16 @@ public class GoblinStoreZhengzaiServiceImpl implements IGoblinStoreZhengzaiServi ...@@ -71,7 +71,16 @@ public class GoblinStoreZhengzaiServiceImpl implements IGoblinStoreZhengzaiServi
if (storeInfoVo == null) { if (storeInfoVo == null) {
return ResponseDto.failure("店铺不存在"); return ResponseDto.failure("店铺不存在");
} }
GoblinSelfMarketingVo marketingVo = redisUtils.getSelfMarket(marketId);
if (marketingVo.getStatus() == 7) {
return ResponseDto.failure("活动已停用");
}
//todo
String storeId = storeInfoVo.getStoreId(); String storeId = storeInfoVo.getStoreId();
GoblinMarketingZhengzaiRelationVo marketingZhengzaiRelationVo = redisUtils.getZhengzaiRelation(marketId, storeId);
if (marketingZhengzaiRelationVo == null) {
return ResponseDto.failure("未参加活动");
}
List<GoblinMarketRelationVo> relationVo = redisUtils.getMarketRelation(GoblinStatusConst.MarketPreStatus.MARKET_PRE_ZHENGZAI.getValue(), marketId); List<GoblinMarketRelationVo> relationVo = redisUtils.getMarketRelation(GoblinStatusConst.MarketPreStatus.MARKET_PRE_ZHENGZAI.getValue(), marketId);
List<String> spuIdList = relationVo.stream().map(GoblinMarketRelationVo::getSpuId).collect(Collectors.toList()); List<String> spuIdList = relationVo.stream().map(GoblinMarketRelationVo::getSpuId).collect(Collectors.toList());
List<GoblinZhengzaiGoodVo> voList = ObjectUtil.getGoblinZhengzaiGoodVoArrayList(); List<GoblinZhengzaiGoodVo> voList = ObjectUtil.getGoblinZhengzaiGoodVoArrayList();
...@@ -124,7 +133,7 @@ public class GoblinStoreZhengzaiServiceImpl implements IGoblinStoreZhengzaiServi ...@@ -124,7 +133,7 @@ public class GoblinStoreZhengzaiServiceImpl implements IGoblinStoreZhengzaiServi
//redis //redis
redisUtils.setGoblinOrder(storeOrderVo.getOrderId(), storeOrderVo); redisUtils.setGoblinOrder(storeOrderVo.getOrderId(), storeOrderVo);
sqlDataOrder.add(new Object[]{ sqlDataOrder.add(new Object[]{
storeOrderVo.getZhengzaiStatus(),storeOrderVo.getStatus(), now, storeOrderVo.getOrderId(), now, now storeOrderVo.getZhengzaiStatus(), storeOrderVo.getStatus(), now, storeOrderVo.getOrderId(), now, now
}); });
} }
//mysql //mysql
......
...@@ -485,12 +485,22 @@ public class GoblinOrderServiceImpl implements IGoblinOrderService { ...@@ -485,12 +485,22 @@ public class GoblinOrderServiceImpl implements IGoblinOrderService {
payInnerResultVo.setPrice(BigDecimal.valueOf(0)); payInnerResultVo.setPrice(BigDecimal.valueOf(0));
payInnerResultVo.setPayType(preParam.getPayType()); payInnerResultVo.setPayType(preParam.getPayType());
} else if (preParam.getPayType().equals("huifu")) { } else if (preParam.getPayType().equals("huifu")) {
isFree = true; // isFree = true;
preParam.setPayType("huifu"); // preParam.setPayType("huifu");
payCode = "HUIFU_PAY_CODE"; // payCode = "HUIFU_PAY_CODE";
// payInnerResultVo = GoblinPayInnerResultVo.getNew();
// payInnerResultVo.setPrice(preParam.getPriceActual());
// payInnerResultVo.setPayType(preParam.getPayType());
payInnerResultVo = GoblinPayInnerResultVo.getNew(); payInnerResultVo = GoblinPayInnerResultVo.getNew();
payInnerResultVo.setPrice(preParam.getPriceActual()); payInnerResultVo.setCode("HUIFU_PAY_CODE");
payInnerResultVo.setOrderCode(preParam.getOrderMasterCode());
payInnerResultVo.setPayData(null);
payInnerResultVo.setPayType(preParam.getPayType()); payInnerResultVo.setPayType(preParam.getPayType());
payInnerResultVo.setPrice(preParam.getPriceActual());
payInnerResultVo.setMsg("汇付支付");
payCode = payInnerResultVo.getCode();
payInnerResultVo.setShowUrl(preParam.getShowUrl());
payInnerResultVo.setReturnUrl(preParam.getReturnUrl());
} else { } else {
isFree = true; isFree = true;
preParam.setPayType("FREE"); preParam.setPayType("FREE");
......
...@@ -129,7 +129,7 @@ public class MixOrderServiceImpl implements IMixOrderService { ...@@ -129,7 +129,7 @@ public class MixOrderServiceImpl implements IMixOrderService {
initStock(canBuyIds, mixId, isUseLimit, uid); initStock(canBuyIds, mixId, isUseLimit, uid);
return ResponseDto.failure("该商品SPU不存在~"); return ResponseDto.failure("该商品SPU不存在~");
} else { } else {
GoblinGoodsSkuInfoVo boxSkuInfo = nftOrderUtils.lotteryDraw(skuIdList, itemVo.getCount(), nt, mixId); GoblinGoodsSkuInfoVo boxSkuInfo = nftOrderUtils.lotteryDrawUnStatus(skuIdList, itemVo.getCount(), nt, mixId);
if (null == boxSkuInfo) { if (null == boxSkuInfo) {
return ResponseDto.failure("库存不足啦~"); return ResponseDto.failure("库存不足啦~");
} else { } else {
......
...@@ -488,6 +488,37 @@ public class GoblinNftOrderUtils { ...@@ -488,6 +488,37 @@ public class GoblinNftOrderUtils {
} }
} }
// 获取盲盒下藏品的库存 各种状态下不能算库存的排除掉 不考虑状态
public int getSkuAllStatusStockUnStatus(String listId, GoblinGoodsSkuInfoVo info) {
if (
info != null
&& (null == info.getHitRatio() || info.getHitRatio().compareTo(BigDecimal.ZERO) > 0)
) {// 可以返回库存
// 外面只有盲盒才能请求进来 里面只有不是分批购才判断盲盒里藏品的开售时间
if (null == listId) {
return goblinRedisUtils.getSkuStock(listId, info.getSkuId());
} else {
return goblinRedisUtils.getSkuStock(listId, info.getSkuId());
}
} else {// 不计入库存
return 0;
}
}
//不考虑状态
public boolean getSkuAllStatusShowUnStatus(GoblinGoodsSkuInfoVo info) {
if (
info != null
&& info.getSkuType() == 1
&& info.getDelFlg().equals("0")
&& ((info.getUnbox().equals("0") && info.getUpchain() == 1) || info.getUnbox().equals("1"))
) {
return true;
} else {
return false;
}
}
public GoblinGoodsSkuInfoVo lotteryDraw(List<String> skuIdList, int number, LocalDateTime nowTime, String listId) { public GoblinGoodsSkuInfoVo lotteryDraw(List<String> skuIdList, int number, LocalDateTime nowTime, String listId) {
// private HashMap<String, Object> lotteryDraw(List<String> skuIdList, int number, LocalDateTime nowTime) { // private HashMap<String, Object> lotteryDraw(List<String> skuIdList, int number, LocalDateTime nowTime) {
try { try {
...@@ -578,7 +609,112 @@ public class GoblinNftOrderUtils { ...@@ -578,7 +609,112 @@ public class GoblinNftOrderUtils {
// String endListId = newListIds.get(index); // String endListId = newListIds.get(index);
// 判断库存 // 判断库存
int surplusGeneral = goblinRedisUtils.decrSkuStock(listId, goodsSkuInfoVo.getSkuId(), number); int surplusGeneral = goblinRedisUtils.decrSkuStock(listId, goodsSkuInfoVo.getSkuId(), number);
log.error("剩余 skuId = "+surplusGeneral); log.error("剩余 skuId = " + surplusGeneral);
if (surplusGeneral < 0) {
goblinRedisUtils.incrSkuStock(listId, goodsSkuInfoVo.getSkuId(), number);
return lotteryDraw(skuIdList, number, nowTime, listId);
} else {
// HashMap<String, Object> map = CollectionUtil.mapStringObject();
// map.put("goodsSkuInfoVo", goodsSkuInfoVo);
// map.put("listId", endListId);
// return map;
return goodsSkuInfoVo;
}
}
} catch (Exception e) {
log.error("NFT下单-抽盲盒异常", e);
return null;
}
}
// 不判断状态
public GoblinGoodsSkuInfoVo lotteryDrawUnStatus(List<String> skuIdList, int number, LocalDateTime nowTime, String listId) {
try {
ArrayList<GoblinGoodsSkuInfoVo> skuInfoVos = ObjectUtil.cloneArrayGoblinGoodsSkuInfoListVo();
for (String kid : skuIdList) {
HashMap<String, Object> map = goblinRedisUtils.getGoodsSkuInfoVo(nowTime, kid);
GoblinGoodsSkuInfoVo skuInfoVo = (GoblinGoodsSkuInfoVo) map.get("vo");
// 是盲盒的扔掉
if (skuInfoVo.getUnbox().equals("1")) {
continue;
}
// 不能购买的 没库存的 概率是0的 过滤
if (getSkuAllStatusShowUnStatus(skuInfoVo) && getSkuAllStatusStockUnStatus(listId, skuInfoVo) > 0) {
skuInfoVos.add(skuInfoVo);
}
}
if (CollectionUtil.isEmpty(skuInfoVos)) {
return null;
} else {
// 计算总概率 和 剩余没填概率的平均概率
int size = 0;
BigDecimal sumHitRatio = BigDecimal.ZERO;
for (GoblinGoodsSkuInfoVo skuInfoVo : skuInfoVos) {
if (null == skuInfoVo.getHitRatio()) {
size++;
} else {
sumHitRatio = sumHitRatio.add(skuInfoVo.getHitRatio());
}
}
/**
* 剔除掉没库存的商品再去算未设置概率商品的平均概率 会导致未设置概率的商品的概率增加
* 如果不剔除掉没库存的商品去算未设置概率商品的平均概率 会导致总概率小于100 如果随机数还是0-100的话就有可能会中奖溢出
* 想保持概率 1.不剔除无库存商品算平均概率 2.随机数最大值为排序后概率的最后一个值
*/
BigDecimal avgHitRatio = BigDecimal.ZERO;
if (size > 0) {// 说明有未设置抽奖概率的
avgHitRatio = new BigDecimal(100).subtract(sumHitRatio).divide(new BigDecimal(size), 2, RoundingMode.HALF_UP);
}
// 未设置概率的写入概率
ArrayList<GoblinGoodsSkuInfoVo> newSkuInfoVos = ObjectUtil.cloneArrayGoblinGoodsSkuInfoListVo();
// ArrayList<String> newListIds = ObjectUtil.cloneArrayListString();
int skuListSize = skuInfoVos.size();
for (int i = 0; i < skuListSize; i++) {
GoblinGoodsSkuInfoVo infoVo = skuInfoVos.get(i);
if (null == infoVo.getHitRatio() || infoVo.getHitRatio().compareTo(BigDecimal.ZERO) < 0) {
/**
* 算所得平均概率是0 即中不了 剔除掉
* 但是这么处理会导致前端页面显示有库存 买的时候显示没有
* 所以要么概率加起来必须100 要么前端计算盲盒总概率的时候也要同样处理
*/
if (avgHitRatio.compareTo(BigDecimal.ZERO) <= 0) {
continue;
} else {
infoVo.setHitRatio(avgHitRatio);
}
}
// 等于0的最终概率就是设置的值 大于0最终的概率是自己的+上面的
if (i > 0) {
infoVo.setHitRatio(skuInfoVos.get(i - 1).getHitRatio().add(infoVo.getHitRatio()));
}
newSkuInfoVos.add(infoVo);
// newListIds.add(listIds.get(i));
}
if (CollectionUtil.isEmpty(newSkuInfoVos)) {
log.info("该盲盒概率超过100导致不能卖 skuIdList:{}", skuIdList);
return null;
}
// 按照概率排序 按照上面的运算最后一定是最大的不用排序了
// List<GoblinGoodsSkuInfoVo> listSort = newSkuInfoVos.stream().sorted(Comparator.comparing(GoblinGoodsSkuInfoVo::getHitRatio)).collect(Collectors.toList());
List<BigDecimal> hitRatioList = newSkuInfoVos.stream().map(GoblinGoodsSkuInfoVo::getHitRatio).collect(Collectors.toList());
// 根据区块值来获取抽取到的物品索引
double nextDouble = Math.random();
BigDecimal nextDoubleNew = BigDecimal.valueOf(nextDouble);
nextDoubleNew = nextDoubleNew.multiply(hitRatioList.get(hitRatioList.size() - 1)).setScale(4, RoundingMode.HALF_UP);
hitRatioList.add(nextDoubleNew);
Collections.sort(hitRatioList);
int index = hitRatioList.indexOf(nextDoubleNew);
GoblinGoodsSkuInfoVo goodsSkuInfoVo = newSkuInfoVos.get(index);
// String endListId = newListIds.get(index);
// 判断库存
int surplusGeneral = goblinRedisUtils.decrSkuStock(listId, goodsSkuInfoVo.getSkuId(), number);
log.error("剩余 skuId = " + surplusGeneral);
if (surplusGeneral < 0) { if (surplusGeneral < 0) {
goblinRedisUtils.incrSkuStock(listId, goodsSkuInfoVo.getSkuId(), number); goblinRedisUtils.incrSkuStock(listId, goodsSkuInfoVo.getSkuId(), number);
return lotteryDraw(skuIdList, number, nowTime, listId); return lotteryDraw(skuIdList, number, nowTime, listId);
......
...@@ -203,7 +203,7 @@ public class SellDataInfoImpl { ...@@ -203,7 +203,7 @@ public class SellDataInfoImpl {
commissionVO.setDaiRuZhang(daiRuZhang); commissionVO.setDaiRuZhang(daiRuZhang);
commissionVO.setKeJieSuan(keJieSuan); commissionVO.setKeJieSuan(keJieSuan);
commissionVO.setZongYingShou((BigDecimal) redisDataSourceUtil.getRedisKylinUtil().get(SmileRedisConst.SELL_USER_REVENUE.concat(smileUser.getUid()))); commissionVO.setZongYingShou((BigDecimal) redisDataSourceUtil.getRedisKylinUtil().get(SmileRedisConst.SELL_USER_REVENUE.concat(smileUser.getUid())));
redisDataSourceUtil.getRedisSweetUtil().set(SmileRedisConst.SELL_DATA_COMMISSION.concat(smileUser.getUid()),commissionVO); redisDataSourceUtil.getRedisKylinUtil().set(SmileRedisConst.SELL_DATA_COMMISSION.concat(smileUser.getUid()),commissionVO);
} }
} }
} }
......
...@@ -57,10 +57,10 @@ public class DataUtils { ...@@ -57,10 +57,10 @@ public class DataUtils {
//获取场地redis //获取场地redis
public SlimeFieldsVo getFieldVo(String fieldId) { public SlimeFieldsVo getFieldVo(String fieldId) {
String key = SlimeRedisConst.INFO_FIELD.concat(fieldId); String key = SlimeRedisConst.INFO_FIELD.concat(fieldId);
SlimeFieldsVo vo = (SlimeFieldsVo) redisDataSourceUtil.getRedisSweetUtil().get(key); SlimeFieldsVo vo = (SlimeFieldsVo) redisDataSourceUtil.getRedisKylinUtil().get(key);
if (null == vo) { if (null == vo) {
vo = mongoTemplate.findOne(Query.query(Criteria.where("fieldId").is(fieldId)), SlimeFieldsVo.class, SlimeFieldsVo.class.getSimpleName()); vo = mongoTemplate.findOne(Query.query(Criteria.where("fieldId").is(fieldId)), SlimeFieldsVo.class, SlimeFieldsVo.class.getSimpleName());
redisDataSourceUtil.getRedisSweetUtil().set(key, vo); redisDataSourceUtil.getRedisKylinUtil().set(key, vo);
} }
return vo; return vo;
} }
......
...@@ -510,6 +510,28 @@ CREATE TABLE `sweet_yb_enroll` ...@@ -510,6 +510,28 @@ CREATE TABLE `sweet_yb_enroll`
ROW_FORMAT = DYNAMIC COMMENT 'YB报名表'; ROW_FORMAT = DYNAMIC COMMENT 'YB报名表';
alter table sweet_yb_enroll alter table sweet_yb_enroll
add city_name varchar(255) NOT NULL DEFAULT '' COMMENT '常驻城市名称' after universities; add city_name varchar(255) NOT NULL DEFAULT '' COMMENT '常驻城市名称' after universities;
alter table sweet_yb_enroll
add activity_id varchar(255) DEFAULT '0' COMMENT '活动id' after city_name;
alter table sweet_yb_enroll
add age int DEFAULT 0 COMMENT '平均年龄' after city_name;
-- YB活动
drop TABLE if exists `sweet_yb_activity`;
CREATE TABLE `sweet_yb_activity`
(
`mid` bigint unsigned NOT NULL AUTO_INCREMENT primary key,
`activity_id` varchar(255) NOT NULL DEFAULT '' COMMENT '活动id',
`title` varchar(30) NOT NULL DEFAULT '' COMMENT '活动名称',
`status` int NOT NULL DEFAULT 7 COMMENT '状态[0-未开始|6-开始|7-下线|9-结束]',
`start_time` datetime NOT NULL COMMENT '开始时间',
`end_time` datetime NOT NULL COMMENT '结束时间',
`created_at` datetime NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
`updated_at` datetime NULL DEFAULT CURRENT_TIMESTAMP COMMENT '更新时间',
KEY `sweet_yb_activity_id` (`activity_id`)
) ENGINE = InnoDB
DEFAULT CHARSET utf8mb4
COLLATE utf8mb4_unicode_ci
ROW_FORMAT = DYNAMIC COMMENT 'YB活动表';
-- 城市投票表 -- 城市投票表
drop TABLE if exists `sweet_city_vote`; drop TABLE if exists `sweet_city_vote`;
......
...@@ -3,6 +3,7 @@ package com.liquidnet.service.sweet.controller; ...@@ -3,6 +3,7 @@ package com.liquidnet.service.sweet.controller;
import com.liquidnet.service.base.ResponseDto; import com.liquidnet.service.base.ResponseDto;
import com.liquidnet.service.sweet.dto.param.SweetYbEnrollParam; import com.liquidnet.service.sweet.dto.param.SweetYbEnrollParam;
import com.liquidnet.service.sweet.dto.vo.SweetYbActivityVo;
import com.liquidnet.service.sweet.service.ISweetYbEnrollService; import com.liquidnet.service.sweet.service.ISweetYbEnrollService;
import io.swagger.annotations.Api; import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation; import io.swagger.annotations.ApiOperation;
...@@ -13,6 +14,7 @@ import org.springframework.web.bind.annotation.RequestMapping; ...@@ -13,6 +14,7 @@ import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController; import org.springframework.web.bind.annotation.RestController;
import javax.validation.Valid; import javax.validation.Valid;
import java.util.List;
/** /**
* <p> * <p>
...@@ -36,4 +38,9 @@ public class SweetYbEnrollController { ...@@ -36,4 +38,9 @@ public class SweetYbEnrollController {
return iSweetYbEnrollService.create(param); return iSweetYbEnrollService.create(param);
} }
@PostMapping("activityList")
@ApiOperation("活动列表")
public ResponseDto<List<SweetYbActivityVo>> list() {
return iSweetYbEnrollService.list();
}
} }
...@@ -8,14 +8,24 @@ import com.liquidnet.service.base.ResponseDto; ...@@ -8,14 +8,24 @@ import com.liquidnet.service.base.ResponseDto;
import com.liquidnet.service.base.SqlMapping; import com.liquidnet.service.base.SqlMapping;
import com.liquidnet.service.base.constant.MQConst; import com.liquidnet.service.base.constant.MQConst;
import com.liquidnet.service.sweet.dto.param.SweetYbEnrollParam; import com.liquidnet.service.sweet.dto.param.SweetYbEnrollParam;
import com.liquidnet.service.sweet.dto.vo.SweetYbActivityVo;
import com.liquidnet.service.sweet.entity.SweetYbEnroll; import com.liquidnet.service.sweet.entity.SweetYbEnroll;
import com.liquidnet.service.sweet.mapper.SweetYbEnrollMapper; import com.liquidnet.service.sweet.mapper.SweetYbEnrollMapper;
import com.liquidnet.service.sweet.service.ISweetYbEnrollService; import com.liquidnet.service.sweet.service.ISweetYbEnrollService;
import com.liquidnet.service.sweet.utils.ObjectUtil;
import com.liquidnet.service.sweet.utils.QueueUtils; import com.liquidnet.service.sweet.utils.QueueUtils;
import com.liquidnet.service.sweet.utils.RedisDataUtils;
import org.apache.logging.log4j.util.PropertySource;
import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service; import org.springframework.stereotype.Service;
import java.time.LocalDateTime;
import java.util.Comparator;
import java.util.LinkedList; import java.util.LinkedList;
import java.util.List;
import java.util.stream.Collectors;
import static com.liquidnet.commons.lang.util.DateUtil.DTF_YMD_HMS;
/** /**
* <p> * <p>
...@@ -26,13 +36,21 @@ import java.util.LinkedList; ...@@ -26,13 +36,21 @@ import java.util.LinkedList;
* @since 2022-07-29 * @since 2022-07-29
*/ */
@Service @Service
public class SweetYbEnrollServiceImpl extends ServiceImpl<SweetYbEnrollMapper, SweetYbEnroll> implements ISweetYbEnrollService { public class SweetYbEnrollServiceImpl implements ISweetYbEnrollService {
@Autowired @Autowired
QueueUtils queueUtils; QueueUtils queueUtils;
@Autowired
RedisDataUtils redisDataUtils;
@Override @Override
public ResponseDto<Boolean> create(SweetYbEnrollParam param) { public ResponseDto<Boolean> create(SweetYbEnrollParam param) {
if (param.getActivityId() == null || param.getActivityId().equals("")) {
param.setActivityId("0");
}
if (param.getAge() == null ) {
param.setAge(0);
}
LinkedList<String> sqls = CollectionUtil.linkedListString(); LinkedList<String> sqls = CollectionUtil.linkedListString();
LinkedList<Object[]> sqlsDataA = CollectionUtil.linkedListObjectArr(); LinkedList<Object[]> sqlsDataA = CollectionUtil.linkedListObjectArr();
sqls.add(SqlMapping.get("sweet_yb_enroll.insert")); sqls.add(SqlMapping.get("sweet_yb_enroll.insert"));
...@@ -40,11 +58,34 @@ public class SweetYbEnrollServiceImpl extends ServiceImpl<SweetYbEnrollMapper, S ...@@ -40,11 +58,34 @@ public class SweetYbEnrollServiceImpl extends ServiceImpl<SweetYbEnrollMapper, S
IDGenerator.nextSnowId(), StringUtil.isEmpty(param.getContactTell()) ? "" : param.getContactTell(), IDGenerator.nextSnowId(), StringUtil.isEmpty(param.getContactTell()) ? "" : param.getContactTell(),
StringUtil.isEmpty(param.getContactWechat()) ? "" : param.getContactWechat(), param.getNickname(), param.getStyle(), StringUtil.isEmpty(param.getContactWechat()) ? "" : param.getContactWechat(), param.getNickname(), param.getStyle(),
param.getImgUrl(), param.getAudioUrl(), StringUtil.isEmpty(param.getUniversities()) ? "" : param.getUniversities(), param.getImgUrl(), param.getAudioUrl(), StringUtil.isEmpty(param.getUniversities()) ? "" : param.getUniversities(),
StringUtil.isEmpty(param.getCityName()) ? "" : param.getCityName() StringUtil.isEmpty(param.getCityName()) ? "" : param.getCityName(), param.getActivityId(),param.getAge()
}); });
queueUtils.sendMsgByRedis(MQConst.SweetQueue.SWEET_ANSWER_INSERT.getKey(), queueUtils.sendMsgByRedis(MQConst.SweetQueue.SWEET_ANSWER_INSERT.getKey(),
SqlMapping.gets(sqls, sqlsDataA)); SqlMapping.gets(sqls, sqlsDataA));
return ResponseDto.success(true); return ResponseDto.success(true);
} }
@Override
public ResponseDto<List<SweetYbActivityVo>> list() {
List<String> list = redisDataUtils.getSweetYbActivityList();
List<SweetYbActivityVo> voList = ObjectUtil.sweetYbActivityVoList();
LocalDateTime now = LocalDateTime.now();
for (String id : list) {
SweetYbActivityVo vo = redisDataUtils.getSweetYbActivityVo(id);
LocalDateTime st = LocalDateTime.parse(vo.getStartTime(), DTF_YMD_HMS);
LocalDateTime et = LocalDateTime.parse(vo.getEndTime(), DTF_YMD_HMS);
if (now.isAfter(et)) {
vo.setStatus(9);
} else if (now.isBefore(st)) {
vo.setStatus(0);
} else {
vo.setStatus(6);
}
voList.add(vo);
}
voList = voList.stream().sorted(Comparator.comparing(SweetYbActivityVo::getStatus, Comparator.naturalOrder()).thenComparing(SweetYbActivityVo::getStartTime,Comparator.reverseOrder())).collect(Collectors.toList());
return ResponseDto.success(voList);
}
} }
...@@ -3,6 +3,7 @@ package com.liquidnet.service.sweet.utils; ...@@ -3,6 +3,7 @@ package com.liquidnet.service.sweet.utils;
import com.liquidnet.service.sweet.dto.*; import com.liquidnet.service.sweet.dto.*;
import com.liquidnet.service.sweet.dto.vo.IntegralActivityDrawVo; import com.liquidnet.service.sweet.dto.vo.IntegralActivityDrawVo;
import com.liquidnet.service.sweet.dto.vo.IntegralActivityVo; import com.liquidnet.service.sweet.dto.vo.IntegralActivityVo;
import com.liquidnet.service.sweet.dto.vo.SweetYbActivityVo;
import com.liquidnet.service.sweet.entity.SweetManualShop; import com.liquidnet.service.sweet.entity.SweetManualShop;
import com.liquidnet.service.sweet.entity.SweetManualShopFive; import com.liquidnet.service.sweet.entity.SweetManualShopFive;
import com.liquidnet.service.sweet.entity.SweetManualShopMdsk; import com.liquidnet.service.sweet.entity.SweetManualShopMdsk;
...@@ -31,6 +32,12 @@ public class ObjectUtil { ...@@ -31,6 +32,12 @@ public class ObjectUtil {
private static final ArrayList<SweetCItyVoteStatVo> sweetCItyVoteStatVoList = new ArrayList<>(); private static final ArrayList<SweetCItyVoteStatVo> sweetCItyVoteStatVoList = new ArrayList<>();
private static final ArrayList<IntegralActivityVo> sweetIntegralActivityVoList = new ArrayList<>(); private static final ArrayList<IntegralActivityVo> sweetIntegralActivityVoList = new ArrayList<>();
private static final ArrayList<IntegralActivityDrawVo> sweetIntegralActivityDrawVoList = new ArrayList<>(); private static final ArrayList<IntegralActivityDrawVo> sweetIntegralActivityDrawVoList = new ArrayList<>();
private static final ArrayList<SweetYbActivityVo> sweetYbActivityVo = new ArrayList<>();
public static ArrayList<SweetYbActivityVo> sweetYbActivityVoList() {
return (ArrayList<SweetYbActivityVo>) sweetYbActivityVo.clone();
}
public static ArrayList<SweetManualAppletDto> getSweetManualAppletDtoList() { public static ArrayList<SweetManualAppletDto> getSweetManualAppletDtoList() {
return (ArrayList<SweetManualAppletDto>) sweetManualAppletDtoList.clone(); return (ArrayList<SweetManualAppletDto>) sweetManualAppletDtoList.clone();
......
...@@ -15,6 +15,7 @@ import com.liquidnet.service.sweet.dto.*; ...@@ -15,6 +15,7 @@ import com.liquidnet.service.sweet.dto.*;
import com.liquidnet.service.sweet.dto.param.poster.SweetStrawberryParam; import com.liquidnet.service.sweet.dto.param.poster.SweetStrawberryParam;
import com.liquidnet.service.sweet.dto.vo.IntegralActivityDrawVo; import com.liquidnet.service.sweet.dto.vo.IntegralActivityDrawVo;
import com.liquidnet.service.sweet.dto.vo.IntegralActivityVo; import com.liquidnet.service.sweet.dto.vo.IntegralActivityVo;
import com.liquidnet.service.sweet.dto.vo.SweetYbActivityVo;
import com.liquidnet.service.sweet.dto.vo.TempBannerVo; import com.liquidnet.service.sweet.dto.vo.TempBannerVo;
import com.liquidnet.service.sweet.entity.*; import com.liquidnet.service.sweet.entity.*;
import com.liquidnet.service.sweet.mapper.*; import com.liquidnet.service.sweet.mapper.*;
...@@ -889,4 +890,27 @@ public class RedisDataUtils { ...@@ -889,4 +890,27 @@ public class RedisDataUtils {
} }
} }
//yb活动vo
public List<String> getSweetYbActivityList() {
String redisKey = SweetConstant.REDIS_KEY_YB_ACTIVITY_LIST;
Object obj = redisUtil.get(redisKey);
if (obj == null) {
return CollectionUtil.arrayListString();
} else {
return (List<String>) obj;
}
}
//yb活动vo
public SweetYbActivityVo getSweetYbActivityVo(String activityId) {
String redisKey = SweetConstant.REDIS_KEY_YB_ACTIVITY.concat(activityId);
Object obj = redisUtil.get(redisKey);
if (obj == null) {
return SweetYbActivityVo.getNew();
} else {
return (SweetYbActivityVo) obj;
}
}
} }
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment