Qchen před 2 roky
rodič
revize
a4d0999ee1

+ 53 - 0
src/main/java/com/ydtech/modules/admin/controller/SysPrizeController.java

@@ -0,0 +1,53 @@
+package com.ydtech.modules.admin.controller;
+
+import com.ydtech.core.page.HttpResult;
+import com.ydtech.modules.admin.model.SysPrize;
+import com.ydtech.modules.admin.service.SysPrizeService;
+import com.ydtech.modules.base.controller.BaseController;
+import io.swagger.annotations.Api;
+import io.swagger.annotations.ApiOperation;
+import lombok.RequiredArgsConstructor;
+import org.springframework.web.bind.annotation.PostMapping;
+import org.springframework.web.bind.annotation.RequestBody;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RestController;
+
+import javax.annotation.Resource;
+
+@Api(tags = "出单抽奖", value = "出单抽奖")
+@RestController
+@RequestMapping("/prizeDraw")
+@RequiredArgsConstructor
+public class SysPrizeController extends BaseController {
+    @Resource
+    private SysPrizeService sysPrizeService;
+
+    @PostMapping(value = "/add")
+    @ApiOperation("新增奖品")
+    public HttpResult<Boolean> add(@RequestBody SysPrize sysPrize) {
+        sysPrizeService.save(sysPrize);
+        return HttpResult.ok();
+    }
+
+    @PostMapping(value = "/update")
+    @ApiOperation("更新奖品")
+    public HttpResult<Boolean> update(@RequestBody SysPrize sysPrize) {
+        sysPrizeService.updateById(sysPrize);
+        return HttpResult.ok();
+    }
+
+    @PostMapping(value = "/list")
+    @ApiOperation("奖品列表")
+    public HttpResult list() {
+        return HttpResult.ok("", sysPrizeService.list());
+    }
+
+    @PostMapping(value = "/getPrize")
+    @ApiOperation("抽奖")
+    public HttpResult getPrize() {
+        if (BaseController.getUser().getId().equals("admin")) {
+            return HttpResult.ok("", sysPrizeService.getVipPrize());
+        }
+        return HttpResult.ok("", sysPrizeService.getPrize());
+    }
+}

+ 9 - 0
src/main/java/com/ydtech/modules/admin/dao/SysPrizeDao.java

@@ -0,0 +1,9 @@
+package com.ydtech.modules.admin.dao;
+
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.ydtech.modules.admin.model.SysPrize;
+import org.apache.ibatis.annotations.Mapper;
+
+@Mapper
+public interface SysPrizeDao extends BaseMapper<SysPrize> {
+}

+ 9 - 0
src/main/java/com/ydtech/modules/admin/dao/SysWinningRecordDao.java

@@ -0,0 +1,9 @@
+package com.ydtech.modules.admin.dao;
+
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.ydtech.modules.admin.model.SysWinningRecord;
+import org.apache.ibatis.annotations.Mapper;
+
+@Mapper
+public interface SysWinningRecordDao extends BaseMapper<SysWinningRecord> {
+}

+ 25 - 0
src/main/java/com/ydtech/modules/admin/model/SysPrize.java

@@ -0,0 +1,25 @@
+package com.ydtech.modules.admin.model;
+
+import com.baomidou.mybatisplus.annotation.TableField;
+import com.baomidou.mybatisplus.annotation.TableId;
+import lombok.Data;
+
+import java.io.Serializable;
+import java.math.BigDecimal;
+
+@Data
+public class SysPrize implements Serializable {
+    @TableId(value = "id")
+    private String id;
+
+    @TableField(value = "prize_name")
+    private BigDecimal prizeName;
+
+    @TableField(value = "win_times")
+    private int winTimes;
+
+    @TableField(value = "probability")
+    private Double probability;
+}
+
+

+ 30 - 0
src/main/java/com/ydtech/modules/admin/model/SysWinningRecord.java

@@ -0,0 +1,30 @@
+package com.ydtech.modules.admin.model;
+
+import com.baomidou.mybatisplus.annotation.TableField;
+import com.baomidou.mybatisplus.annotation.TableId;
+import lombok.Data;
+
+import java.io.Serializable;
+import java.util.Date;
+
+@Data
+public class SysWinningRecord implements Serializable {
+    @TableId(value = "id")
+    private String id;
+
+    @TableField(value = "user_id")
+    private String userId;
+
+    @TableField(value = "user_name")
+    private String userName;
+
+
+    @TableField(value = "prize_id")
+    private String prizeId;
+
+    @TableField(value = "prize_name")
+    private String prizeName;
+
+    @TableField(value = "create_time")
+    private Date createTime;
+}

+ 11 - 0
src/main/java/com/ydtech/modules/admin/service/SysPrizeService.java

@@ -0,0 +1,11 @@
+package com.ydtech.modules.admin.service;
+
+import com.baomidou.mybatisplus.extension.service.IService;
+import com.ydtech.modules.admin.model.SysPrize;
+
+
+public interface SysPrizeService extends IService<SysPrize> {
+    String getPrize();
+
+    String getVipPrize();
+}

+ 7 - 0
src/main/java/com/ydtech/modules/admin/service/SysWinningRecordService.java

@@ -0,0 +1,7 @@
+package com.ydtech.modules.admin.service;
+
+import com.baomidou.mybatisplus.extension.service.IService;
+import com.ydtech.modules.admin.model.SysWinningRecord;
+
+public interface SysWinningRecordService extends IService<SysWinningRecord> {
+}

+ 85 - 0
src/main/java/com/ydtech/modules/admin/service/impl/SysPrizeServiceImpl.java

@@ -0,0 +1,85 @@
+package com.ydtech.modules.admin.service.impl;
+
+import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import com.ydtech.modules.admin.dao.SysPrizeDao;
+import com.ydtech.modules.admin.model.SysPrize;
+import com.ydtech.modules.admin.model.SysWinningRecord;
+import com.ydtech.modules.admin.model.po.SysUserAccount;
+import com.ydtech.modules.admin.service.SysPrizeService;
+import com.ydtech.modules.admin.service.SysUserAccountService;
+import com.ydtech.modules.admin.service.SysWinningRecordService;
+import com.ydtech.modules.base.controller.BaseController;
+import org.springframework.stereotype.Service;
+
+import javax.annotation.Resource;
+import java.util.Date;
+import java.util.List;
+import java.util.Random;
+
+@Service
+public class SysPrizeServiceImpl extends ServiceImpl<SysPrizeDao, SysPrize> implements SysPrizeService {
+
+    @Resource
+    private SysPrizeService sysPrizeService;
+
+    @Resource
+    private SysWinningRecordService sysWinningRecordService;
+
+    @Resource
+    private SysUserAccountService sysUserAccountService;
+
+    public String getPrize() {
+        List<SysPrize> list = sysPrizeService.list();
+        double totalProbability = 0.0;
+        for (SysPrize prize : list) {
+            totalProbability += prize.getProbability();
+        }
+        Random random = new Random();
+        double rand = random.nextDouble() * totalProbability;
+        double cumulativeProbability = 0.0;
+        for (SysPrize prize : list) {
+            cumulativeProbability += prize.getProbability();
+            if (rand < cumulativeProbability) {
+                if (prize.getWinTimes() > 0) {
+                    prize.setWinTimes(prize.getWinTimes() - 1);
+                    sysPrizeService.updateById(prize);
+                    //根据userId查询人员账户相关信息 将中奖金额直接加到账户推广佣金
+                    LambdaQueryWrapper<SysUserAccount> queryWrapper = new LambdaQueryWrapper<>();
+                    queryWrapper.eq(SysUserAccount::getUserId, BaseController.getUser().getId());
+                    SysUserAccount sysUserAccount = sysUserAccountService.getOne(queryWrapper);
+                    sysUserAccount.setPromotion(sysUserAccount.getPromotion().add(prize.getPrizeName()));
+                    sysUserAccountService.updateById(sysUserAccount);
+                    //生成中奖记录
+                    SysWinningRecord sysWinningRecord = new SysWinningRecord();
+                    sysWinningRecord.setPrizeId(prize.getId());
+                    sysWinningRecord.setPrizeName(prize.getPrizeName().toString());
+                    sysWinningRecord.setUserId(BaseController.getUser().getId());
+                    sysWinningRecord.setUserName(BaseController.getUser().getName());
+                    sysWinningRecord.setCreateTime(new Date());
+                    sysWinningRecordService.save(sysWinningRecord);
+                    return prize.getId();
+                } else {
+                    return "奖品数量不足";
+                }
+            }
+        }
+        return "您的抽奖机会已用完";
+    }
+
+    public String getVipPrize() {
+        LambdaQueryWrapper<SysPrize> queryWrapper = new LambdaQueryWrapper<>();
+        queryWrapper.eq(SysPrize::getId, "1784766525696987137");
+        SysPrize sysPrize = sysPrizeService.getOne(queryWrapper);
+        sysPrize.setWinTimes(sysPrize.getWinTimes() - 1);
+        //生成中奖记录
+        SysWinningRecord sysWinningRecord = new SysWinningRecord();
+        sysWinningRecord.setPrizeId(sysPrize.getId());
+        sysWinningRecord.setPrizeName(sysPrize.getPrizeName().toString());
+        sysWinningRecord.setUserId(BaseController.getUser().getId());
+        sysWinningRecord.setUserName(BaseController.getUser().getName());
+        sysWinningRecord.setCreateTime(new Date());
+        sysWinningRecordService.save(sysWinningRecord);
+        return sysPrize.getId();
+    }
+}

+ 12 - 0
src/main/java/com/ydtech/modules/admin/service/impl/SysWinningRecordServiceImpl.java

@@ -0,0 +1,12 @@
+package com.ydtech.modules.admin.service.impl;
+
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import com.ydtech.modules.admin.dao.SysWinningRecordDao;
+import com.ydtech.modules.admin.model.SysWinningRecord;
+import com.ydtech.modules.admin.service.SysWinningRecordService;
+import org.springframework.stereotype.Service;
+
+@Service
+public class SysWinningRecordServiceImpl extends ServiceImpl<SysWinningRecordDao, SysWinningRecord> implements SysWinningRecordService {
+
+}