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

Commit 2c0c89db authored by Administrator's avatar Administrator 🎨

Merge branch 'pre' into 'master'

Pre

See merge request !320
parents 65cb2b38 b1c59055
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;
......
...@@ -46,4 +46,9 @@ public class SweetYbEnrollParam implements Serializable { ...@@ -46,4 +46,9 @@ public class SweetYbEnrollParam implements Serializable {
@ApiModelProperty(position = 19, required = false, value = "活动id", example = "0") @ApiModelProperty(position = 19, required = false, value = "活动id", example = "0")
private String activityId; private String activityId;
@ApiModelProperty(position = 20, required = false, value = "平均年龄", example = "0")
private Integer age;
} }
package com.liquidnet.client.admin.web.controller.zhengzai.sweet; package com.liquidnet.client.admin.web.controller.zhengzai.sweet;
import com.github.pagehelper.PageHelper;
import com.github.pagehelper.PageInfo; 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.domain.AjaxResult;
import com.liquidnet.client.admin.common.core.page.TableDataInfo; import com.liquidnet.client.admin.common.core.page.TableDataInfo;
import com.liquidnet.client.admin.common.utils.poi.ExcelUtil; import com.liquidnet.client.admin.common.utils.poi.ExcelUtil;
...@@ -35,7 +37,7 @@ import java.util.List; ...@@ -35,7 +37,7 @@ import java.util.List;
@Api(tags = "YB活动管理") @Api(tags = "YB活动管理")
@RestController @RestController
@RequestMapping("/sweet/activity") @RequestMapping("/sweet/activity")
public class SweetYbActivityController { public class SweetYbActivityController extends BaseController {
@Autowired @Autowired
ISweetYbActivityService sweetYbActivityService; ISweetYbActivityService sweetYbActivityService;
...@@ -80,12 +82,13 @@ public class SweetYbActivityController { ...@@ -80,12 +82,13 @@ public class SweetYbActivityController {
@ApiOperation("活动列表") @ApiOperation("活动列表")
@ResponseBody @ResponseBody
public TableDataInfo aList(SweetYbActivityListParam param) { public TableDataInfo aList(SweetYbActivityListParam param) {
PageInfo<SweetYbActivityVo> result = sweetYbActivityService.aList(param); PageHelper.startPage(param.getPageNum(), param.getPageSize());
TableDataInfo rspData = new TableDataInfo(); List<SweetYbActivity> result = sweetYbActivityService.aList(param);
rspData.setCode(0); // TableDataInfo rspData = new TableDataInfo();
rspData.setRows(result.getList()); // rspData.setCode(0);
rspData.setTotal(result.getTotal()); // rspData.setRows(result.getList());
return rspData; // rspData.setTotal(result.getTotal());
return getDataTable(result);
} }
@PostMapping("/export") @PostMapping("/export")
......
...@@ -117,7 +117,7 @@ ...@@ -117,7 +117,7 @@
// onCheckAll: onCheckAll, // onCheckAll: onCheckAll,
sortName: "createdAt", sortName: "createdAt",
sortOrder: "desc", sortOrder: "desc",
modalName: "活动", modalName: "本活动名单",
columns: [ columns: [
{ {
field: 'cover', field: 'cover',
......
...@@ -173,6 +173,10 @@ ...@@ -173,6 +173,10 @@
$(this).fileinput("upload"); $(this).fileinput("upload");
}) })
.on("fileuploaded", function (event, data) { //上传回调事件 .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; let showPicture = 'https://img.zhengzai.tv/' + data.response.data.ossPath;
$("#viewImg").attr('src', showPicture) $("#viewImg").attr('src', showPicture)
}) })
......
...@@ -11,12 +11,16 @@ import java.time.format.DateTimeFormatter; ...@@ -11,12 +11,16 @@ import java.time.format.DateTimeFormatter;
@Data @Data
public class SweetYbActivityExportVo implements Serializable, Cloneable { public class SweetYbActivityExportVo implements Serializable, Cloneable {
@Excel(name = "活动名称", cellType = Excel.ColumnType.STRING)
private String activityName;
@Excel(name = "联系电话", cellType = Excel.ColumnType.STRING) @Excel(name = "联系电话", cellType = Excel.ColumnType.STRING)
private String contactTell; private String contactTell;
@Excel(name = "联系微信", cellType = Excel.ColumnType.STRING) @Excel(name = "联系微信", cellType = Excel.ColumnType.STRING)
private String contactWechat; private String contactWechat;
@Excel(name = "乐队名称", cellType = Excel.ColumnType.STRING) @Excel(name = "乐队名称", cellType = Excel.ColumnType.STRING)
private String nickname; private String nickname;
@Excel(name = "平均年龄", cellType = Excel.ColumnType.STRING)
private String age;
@Excel(name = "风格", cellType = Excel.ColumnType.STRING) @Excel(name = "风格", cellType = Excel.ColumnType.STRING)
private String style; private String style;
@Excel(name = "图片地址", cellType = Excel.ColumnType.STRING) @Excel(name = "图片地址", cellType = Excel.ColumnType.STRING)
...@@ -42,7 +46,9 @@ public class SweetYbActivityExportVo implements Serializable, Cloneable { ...@@ -42,7 +46,9 @@ public class SweetYbActivityExportVo implements Serializable, Cloneable {
return new SweetYbActivityExportVo(); return new SweetYbActivityExportVo();
} }
public SweetYbActivityExportVo copyOrderExportVo(SweetYbEnroll source) { public SweetYbActivityExportVo copyOrderExportVo(SweetYbEnroll source,String name) {
this.setActivityName(name);
this.setAge(source.getAge()+"");
this.setContactTell(source.getContactTell()); this.setContactTell(source.getContactTell());
this.setContactWechat(source.getContactWechat()); this.setContactWechat(source.getContactWechat());
this.setNickname(source.getNickname()); this.setNickname(source.getNickname());
......
...@@ -31,7 +31,7 @@ public interface ISweetYbActivityService { ...@@ -31,7 +31,7 @@ public interface ISweetYbActivityService {
SweetYbActivityVo aDetails(String activityId); SweetYbActivityVo aDetails(String activityId);
PageInfo<SweetYbActivityVo> aList(SweetYbActivityListParam param); List<SweetYbActivity> aList(SweetYbActivityListParam param);
AjaxResult aUpdate(SweetYbActivityParam param); AjaxResult aUpdate(SweetYbActivityParam param);
......
package com.liquidnet.client.admin.zhengzai.sweet.service.impl; package com.liquidnet.client.admin.zhengzai.sweet.service.impl;
import com.baomidou.mybatisplus.core.toolkit.Wrappers; import com.baomidou.mybatisplus.core.toolkit.Wrappers;
import com.github.pagehelper.PageInfo;
import com.liquidnet.client.admin.common.core.domain.AjaxResult; import com.liquidnet.client.admin.common.core.domain.AjaxResult;
import com.liquidnet.client.admin.common.exception.BusinessException; import com.liquidnet.client.admin.common.exception.BusinessException;
import com.liquidnet.client.admin.zhengzai.kylin.dto.OrderDetailedExportVo;
import com.liquidnet.client.admin.zhengzai.sweet.dto.SweetYbActivityExportVo; import com.liquidnet.client.admin.zhengzai.sweet.dto.SweetYbActivityExportVo;
import com.liquidnet.client.admin.zhengzai.sweet.service.ISweetAdminQrCodeService;
import com.liquidnet.client.admin.zhengzai.sweet.service.ISweetYbActivityService; import com.liquidnet.client.admin.zhengzai.sweet.service.ISweetYbActivityService;
import com.liquidnet.client.admin.zhengzai.sweet.utils.SweetRedisAdminUtils; import com.liquidnet.client.admin.zhengzai.sweet.utils.SweetRedisAdminUtils;
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.kylin.dao.OrderExportDao;
import com.liquidnet.service.kylin.dao.PerformanceAdminListDao;
import com.liquidnet.service.kylin.dto.param.CreateActiveQrCodeParam;
import com.liquidnet.service.sweet.dto.param.admin.SweetYbActivityListParam; import com.liquidnet.service.sweet.dto.param.admin.SweetYbActivityListParam;
import com.liquidnet.service.sweet.dto.param.admin.SweetYbActivityParam; import com.liquidnet.service.sweet.dto.param.admin.SweetYbActivityParam;
import com.liquidnet.service.sweet.dto.vo.SweetYbActivityVo; import com.liquidnet.service.sweet.dto.vo.SweetYbActivityVo;
import com.liquidnet.service.sweet.entity.SweetQrCode;
import com.liquidnet.service.sweet.entity.SweetYbActivity; import com.liquidnet.service.sweet.entity.SweetYbActivity;
import com.liquidnet.service.sweet.entity.SweetYbEnroll; import com.liquidnet.service.sweet.entity.SweetYbEnroll;
import com.liquidnet.service.sweet.mapper.SweetQrCodeMapper;
import com.liquidnet.service.sweet.mapper.SweetYbActivityMapper; import com.liquidnet.service.sweet.mapper.SweetYbActivityMapper;
import com.liquidnet.service.sweet.mapper.SweetYbEnrollMapper; import com.liquidnet.service.sweet.mapper.SweetYbEnrollMapper;
import lombok.extern.slf4j.Slf4j; import lombok.extern.slf4j.Slf4j;
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.text.ParseException;
import java.text.SimpleDateFormat;
import java.time.LocalDateTime; import java.time.LocalDateTime;
import java.time.format.DateTimeFormatter; import java.time.format.DateTimeFormatter;
import java.util.ArrayList; import java.util.ArrayList;
import java.util.Date;
import java.util.List; import java.util.List;
import static com.liquidnet.commons.lang.util.DateUtil.DTF_YMD_HMS; import static com.liquidnet.commons.lang.util.DateUtil.DTF_YMD_HMS;
...@@ -84,16 +73,15 @@ public class SweetYbActivityServiceImpl implements ISweetYbActivityService { ...@@ -84,16 +73,15 @@ public class SweetYbActivityServiceImpl implements ISweetYbActivityService {
} }
@Override @Override
public PageInfo<SweetYbActivityVo> aList(SweetYbActivityListParam param) { public List<SweetYbActivity> aList(SweetYbActivityListParam param) {
PageInfo<SweetYbActivityVo> pageInfo; List<SweetYbActivity> data = sweetYbActivityMapper.selectList(Wrappers.lambdaQuery(SweetYbActivity.class).like(SweetYbActivity::getTitle, param.getTitle()).orderByDesc(SweetYbActivity::getCreatedAt));
List<SweetYbActivity> data = sweetYbActivityMapper.selectList(Wrappers.lambdaQuery(SweetYbActivity.class).like(SweetYbActivity::getTitle, param.getTitle())); // List<SweetYbActivityVo> voList = new ArrayList<>();
List<SweetYbActivityVo> voList = new ArrayList<>(); // for (SweetYbActivity entity : data) {
for (SweetYbActivity entity : data) { // SweetYbActivityVo vo = initVo(entity);
SweetYbActivityVo vo = initVo(entity); // voList.add(vo);
voList.add(vo); // }
} // pageInfo = new PageInfo(voList);
pageInfo = new PageInfo(voList); return data;
return pageInfo;
} }
@Override @Override
...@@ -151,10 +139,11 @@ public class SweetYbActivityServiceImpl implements ISweetYbActivityService { ...@@ -151,10 +139,11 @@ public class SweetYbActivityServiceImpl implements ISweetYbActivityService {
@Override @Override
public List<SweetYbActivityExportVo> aExport(String activityId) { public List<SweetYbActivityExportVo> aExport(String activityId) {
try { 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<SweetYbEnroll> list = sweetYbEnrollMapper.selectList(Wrappers.lambdaQuery(SweetYbEnroll.class).eq(SweetYbEnroll::getActivityId, activityId));
List<SweetYbActivityExportVo> voList = new ArrayList(); List<SweetYbActivityExportVo> voList = new ArrayList();
for (SweetYbEnroll item : list) { for (SweetYbEnroll item : list) {
voList.add(SweetYbActivityExportVo.getNew().copyOrderExportVo(item)); voList.add(SweetYbActivityExportVo.getNew().copyOrderExportVo(item, activity.getTitle()));
} }
return voList; return voList;
} catch (Exception e) { } catch (Exception e) {
......
...@@ -70,6 +70,11 @@ public class SweetYbEnroll implements Serializable { ...@@ -70,6 +70,11 @@ public class SweetYbEnroll implements Serializable {
*/ */
private String cityName; private String cityName;
/**
* 平均年龄
*/
private int age;
/** /**
* 活动id * 活动id
*/ */
......
...@@ -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);
......
...@@ -512,6 +512,8 @@ alter table sweet_yb_enroll ...@@ -512,6 +512,8 @@ 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 alter table sweet_yb_enroll
add activity_id varchar(255) DEFAULT '0' COMMENT '活动id' after city_name; 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活动 -- YB活动
drop TABLE if exists `sweet_yb_activity`; drop TABLE if exists `sweet_yb_activity`;
......
...@@ -15,6 +15,7 @@ import com.liquidnet.service.sweet.service.ISweetYbEnrollService; ...@@ -15,6 +15,7 @@ import com.liquidnet.service.sweet.service.ISweetYbEnrollService;
import com.liquidnet.service.sweet.utils.ObjectUtil; 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 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;
...@@ -47,6 +48,9 @@ public class SweetYbEnrollServiceImpl implements ISweetYbEnrollService { ...@@ -47,6 +48,9 @@ public class SweetYbEnrollServiceImpl implements ISweetYbEnrollService {
if (param.getActivityId() == null || param.getActivityId().equals("")) { if (param.getActivityId() == null || param.getActivityId().equals("")) {
param.setActivityId("0"); 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"));
...@@ -54,7 +58,7 @@ public class SweetYbEnrollServiceImpl implements ISweetYbEnrollService { ...@@ -54,7 +58,7 @@ public class SweetYbEnrollServiceImpl implements ISweetYbEnrollService {
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(), param.getActivityId() 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));
...@@ -69,18 +73,18 @@ public class SweetYbEnrollServiceImpl implements ISweetYbEnrollService { ...@@ -69,18 +73,18 @@ public class SweetYbEnrollServiceImpl implements ISweetYbEnrollService {
LocalDateTime now = LocalDateTime.now(); LocalDateTime now = LocalDateTime.now();
for (String id : list) { for (String id : list) {
SweetYbActivityVo vo = redisDataUtils.getSweetYbActivityVo(id); SweetYbActivityVo vo = redisDataUtils.getSweetYbActivityVo(id);
LocalDateTime st = LocalDateTime.parse(vo.getStartTime(),DTF_YMD_HMS); LocalDateTime st = LocalDateTime.parse(vo.getStartTime(), DTF_YMD_HMS);
LocalDateTime et = LocalDateTime.parse(vo.getEndTime(),DTF_YMD_HMS); LocalDateTime et = LocalDateTime.parse(vo.getEndTime(), DTF_YMD_HMS);
if(now.isAfter(et)){ if (now.isAfter(et)) {
vo.setStatus(9); vo.setStatus(9);
}else if(now.isBefore(st)){ } else if (now.isBefore(st)) {
vo.setStatus(0); vo.setStatus(0);
}else{ } else {
vo.setStatus(6); vo.setStatus(6);
} }
voList.add(vo); voList.add(vo);
} }
voList = voList.stream().sorted(Comparator.comparing(SweetYbActivityVo::getEndTime, Comparator.reverseOrder())).collect(Collectors.toList()); voList = voList.stream().sorted(Comparator.comparing(SweetYbActivityVo::getStatus, Comparator.naturalOrder()).thenComparing(SweetYbActivityVo::getStartTime,Comparator.reverseOrder())).collect(Collectors.toList());
return ResponseDto.success(voList); return ResponseDto.success(voList);
} }
......
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