diff --git a/pear-entrance/src/main/resources/templates/system/activity/add.html b/pear-entrance/src/main/resources/templates/system/activity/add.html
new file mode 100644
index 0000000000000000000000000000000000000000..174824efb9f74f90cd78870aa9843310cba2a2d4
--- /dev/null
+++ b/pear-entrance/src/main/resources/templates/system/activity/add.html
@@ -0,0 +1,131 @@
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/pear-entrance/src/main/resources/templates/system/activity/edit.html b/pear-entrance/src/main/resources/templates/system/activity/edit.html
new file mode 100644
index 0000000000000000000000000000000000000000..13126aafe324afb7ca7db3dd6b01afd8a40d0b34
--- /dev/null
+++ b/pear-entrance/src/main/resources/templates/system/activity/edit.html
@@ -0,0 +1,101 @@
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/pear-entrance/src/main/resources/templates/system/activity/main.html b/pear-entrance/src/main/resources/templates/system/activity/main.html
new file mode 100644
index 0000000000000000000000000000000000000000..5512eac640b10d71e56c59ae62bd195e3288186e
--- /dev/null
+++ b/pear-entrance/src/main/resources/templates/system/activity/main.html
@@ -0,0 +1,536 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/pear-entrance/src/main/resources/templates/system/joinuser/add.html b/pear-entrance/src/main/resources/templates/system/joinuser/add.html
new file mode 100644
index 0000000000000000000000000000000000000000..2fc74fd22e1fbf9869ec2297794ed9f06f1b3176
--- /dev/null
+++ b/pear-entrance/src/main/resources/templates/system/joinuser/add.html
@@ -0,0 +1,93 @@
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/pear-entrance/src/main/resources/templates/system/joinuser/edit.html b/pear-entrance/src/main/resources/templates/system/joinuser/edit.html
new file mode 100644
index 0000000000000000000000000000000000000000..c2833d0310a256ec88ecb2a3a8ea70290f21e815
--- /dev/null
+++ b/pear-entrance/src/main/resources/templates/system/joinuser/edit.html
@@ -0,0 +1,93 @@
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/pear-entrance/src/main/resources/templates/system/joinuser/main.html b/pear-entrance/src/main/resources/templates/system/joinuser/main.html
new file mode 100644
index 0000000000000000000000000000000000000000..9fbcd6ab380d29402d00d03ddc67338cddc3f829
--- /dev/null
+++ b/pear-entrance/src/main/resources/templates/system/joinuser/main.html
@@ -0,0 +1,229 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/pear-entrance/src/main/resources/templates/system/luckuser/add.html b/pear-entrance/src/main/resources/templates/system/luckuser/add.html
new file mode 100644
index 0000000000000000000000000000000000000000..c923a48f459339a2ffbb417f45103ab11168c1a3
--- /dev/null
+++ b/pear-entrance/src/main/resources/templates/system/luckuser/add.html
@@ -0,0 +1,110 @@
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/pear-entrance/src/main/resources/templates/system/luckuser/edit.html b/pear-entrance/src/main/resources/templates/system/luckuser/edit.html
new file mode 100644
index 0000000000000000000000000000000000000000..0bc128afe027d10ce14d6b89ecec113eaf080f63
--- /dev/null
+++ b/pear-entrance/src/main/resources/templates/system/luckuser/edit.html
@@ -0,0 +1,110 @@
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/pear-entrance/src/main/resources/templates/system/luckuser/main.html b/pear-entrance/src/main/resources/templates/system/luckuser/main.html
new file mode 100644
index 0000000000000000000000000000000000000000..21044babfaa6214b012398113528732b38f3ddbf
--- /dev/null
+++ b/pear-entrance/src/main/resources/templates/system/luckuser/main.html
@@ -0,0 +1,242 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/pear-entrance/src/main/resources/templates/system/prize/add.html b/pear-entrance/src/main/resources/templates/system/prize/add.html
new file mode 100644
index 0000000000000000000000000000000000000000..85f5e6764858ffd0f4ff1ccf439028673ed29302
--- /dev/null
+++ b/pear-entrance/src/main/resources/templates/system/prize/add.html
@@ -0,0 +1,177 @@
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/pear-entrance/src/main/resources/templates/system/prize/edit.html b/pear-entrance/src/main/resources/templates/system/prize/edit.html
new file mode 100644
index 0000000000000000000000000000000000000000..c3bce66345a46c917b05cf95488e2d24aef8a0be
--- /dev/null
+++ b/pear-entrance/src/main/resources/templates/system/prize/edit.html
@@ -0,0 +1,193 @@
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/pear-entrance/src/main/resources/templates/system/prize/main.html b/pear-entrance/src/main/resources/templates/system/prize/main.html
new file mode 100644
index 0000000000000000000000000000000000000000..291ed00bcb66cd87dd213eae13e2cbacacf67919
--- /dev/null
+++ b/pear-entrance/src/main/resources/templates/system/prize/main.html
@@ -0,0 +1,257 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/pear-entrance/src/test/java/com/pearadmin/TestEasyExcel.java b/pear-entrance/src/test/java/com/pearadmin/TestEasyExcel.java
new file mode 100644
index 0000000000000000000000000000000000000000..78072d7c281fcbb554ffd2b78c2ec1d18f1637c2
--- /dev/null
+++ b/pear-entrance/src/test/java/com/pearadmin/TestEasyExcel.java
@@ -0,0 +1,68 @@
+package com.pearadmin;
+
+import com.alibaba.excel.EasyExcel;
+import com.pearadmin.system.domain.excel.ExportLuckPrizeUserVO;
+import com.pearadmin.system.service.importexcel.ExcelListener;
+import com.pearadmin.system.domain.excel.ImportPrizeUser;
+import org.junit.Test;
+
+import java.io.*;
+import java.util.ArrayList;
+
+/**
+ * @author rufeng
+ * @version 1.0.0
+ * @date 2021/3/25 5:17 下午
+ * @description
+ */
+public class TestEasyExcel {
+ /**
+ * 最简单的写
+ *
1. 创建excel对应的实体对象
+ *
2. 直接写即可
+ */
+ @Test
+ public void simpleWrite() throws FileNotFoundException {
+ String userHome = System.getProperty("user.home");
+ ByteArrayOutputStream outputStream = new ByteArrayOutputStream();
+ // 写法1
+ // 这里 需要指定写用哪个class去写,然后写到第一个sheet,名字为模板 然后文件流会自动关闭
+ // 如果这里想使用03 则 传入excelType参数即可
+ EasyExcel.write(outputStream, ExportLuckPrizeUserVO.class).sheet("模板").doWrite(new ArrayList());
+ //测试-将表格导入本地文件
+ FileOutputStream fileOutputStream = null;
+ try {
+ fileOutputStream = new FileOutputStream(userHome + "/logs/" + System.currentTimeMillis() + ".xlsx");
+ fileOutputStream.write(outputStream.toByteArray());
+ } catch (Exception e) {
+ e.printStackTrace();
+ }
+
+ /*// 写法2
+ fileName = TestFileUtil.getPath() + "simpleWrite" + System.currentTimeMillis() + ".xlsx";
+ // 这里 需要指定写用哪个class去写
+ ExcelWriter excelWriter = null;
+ try {
+ excelWriter = EasyExcel.write(fileName, DemoData.class).build();
+ WriteSheet writeSheet = EasyExcel.writerSheet("模板").build();
+ excelWriter.write(data(), writeSheet);
+ } finally {
+ // 千万别忘记finish 会帮忙关闭流
+ if (excelWriter != null) {
+ excelWriter.finish();
+ }
+ }*/
+ }
+
+ @Test
+ public void testReadExcel() {
+ String userHome = System.getProperty("user.home");
+ try {
+ FileInputStream inputStream = new FileInputStream(new File(userHome + "/logs/1618369309864.xlsx"));
+ EasyExcel.read(inputStream, ImportPrizeUser.class, new ExcelListener(null, 1)).sheet().doRead();
+ } catch (Exception e) {
+ e.printStackTrace();
+ } finally {
+ }
+ }
+}
diff --git a/pear-entrance/src/test/java/com/pearadmin/TestGetPng.java b/pear-entrance/src/test/java/com/pearadmin/TestGetPng.java
new file mode 100644
index 0000000000000000000000000000000000000000..06402aa4176dc6445438a3edf26710a82c748d2c
--- /dev/null
+++ b/pear-entrance/src/test/java/com/pearadmin/TestGetPng.java
@@ -0,0 +1,32 @@
+package com.pearadmin;
+
+import cn.hutool.http.HttpUtil;
+
+import java.util.stream.IntStream;
+
+/**
+ * @author rufeng
+ * @version 1.0.0
+ * @date 2021/3/25 5:17 下午
+ * @description
+ */
+public class TestGetPng {
+ public static void main(String[] args) {
+
+ IntStream.range(4000, 30000).forEach(i -> {
+// System.out.println(getMillis());
+ HttpUtil.get("api.prize.hukp.cn/" + i + ".png");
+ try {
+ Thread.sleep(1000);
+ } catch (InterruptedException e) {
+ e.printStackTrace();
+ }
+ System.out.println("========>"+i);
+
+ });
+ }
+
+ private static long getMillis() {
+ return (long) (Math.random() * 20000 + 30000);
+ }
+}
diff --git a/pear-entrance/src/test/java/com/pearadmin/Tet.java b/pear-entrance/src/test/java/com/pearadmin/Tet.java
new file mode 100644
index 0000000000000000000000000000000000000000..43b7e586521ad2e2ff7e5bc0307cd20fe3198eaa
--- /dev/null
+++ b/pear-entrance/src/test/java/com/pearadmin/Tet.java
@@ -0,0 +1,14 @@
+package com.pearadmin;
+
+/**
+ * @author qujingguo
+ * @version 1.0.0
+ * @date 2021/4/25 3:56 下午
+ * @description
+ */
+public class Tet {
+ public static void main(String[] args) {
+ String s = "https://twowaterimage.oss-cn-beijing.aliyuncs.com/export1309861917694623744.xlsx";
+ System.out.println(s.substring(s.lastIndexOf("/")+1));
+ }
+}
diff --git a/pear-modules/pear-generate/src/main/java/com/pearadmin/generate/mapper/xml/GenTableColumnMapper.xml b/pear-modules/pear-generate/src/main/java/com/pearadmin/generate/mapper/xml/GenTableColumnMapper.xml
index a33b5e37da604197d2ea8a896556d70870dce5c4..4834668ec1bf89f44e0a709b88f46fc733fddb47 100644
--- a/pear-modules/pear-generate/src/main/java/com/pearadmin/generate/mapper/xml/GenTableColumnMapper.xml
+++ b/pear-modules/pear-generate/src/main/java/com/pearadmin/generate/mapper/xml/GenTableColumnMapper.xml
@@ -3,7 +3,7 @@
PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
"http://mybatis.org/dtd/mybatis-3-mapper.dtd">
-
+
@@ -28,23 +28,24 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
-
+
select column_id, table_id, column_name, column_comment, column_type, java_type, java_field, is_pk, is_increment, is_required, is_insert, is_edit, is_list, is_query, query_type, html_type, dict_type, sort, create_by, create_time, update_by, update_time from gen_table_column
-
+
-
+
+
-
+
insert into gen_table_column (
column_id,
@@ -90,7 +91,7 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
sysdate()
)
-
+
update gen_table_column
@@ -113,10 +114,10 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
- delete from gen_table_column where table_id in
+ delete from gen_table_column where table_id in
#{tableId}
-
+
\ No newline at end of file
diff --git a/pear-modules/pear-generate/src/main/java/com/pearadmin/generate/mapper/xml/GenTableMapper.xml b/pear-modules/pear-generate/src/main/java/com/pearadmin/generate/mapper/xml/GenTableMapper.xml
index 16309102de2b4df1fcdcfa4e546387531a495be0..f5c7487da2dc214a5e289712040bc50fd30246bb 100644
--- a/pear-modules/pear-generate/src/main/java/com/pearadmin/generate/mapper/xml/GenTableMapper.xml
+++ b/pear-modules/pear-generate/src/main/java/com/pearadmin/generate/mapper/xml/GenTableMapper.xml
@@ -29,7 +29,7 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
-
+
@@ -54,11 +54,11 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
-
+
select table_id, table_name, table_comment, sub_table_name, sub_table_fk_name, class_name, tpl_category, package_name, module_name, business_name, function_name, function_author, gen_type, gen_path, options, create_by, create_time, update_by, update_time, remark from gen_table
-
+
+
-
+
+
-
+
+
-
+
-
+
-
+
-
+
insert into gen_table (
table_id,
@@ -159,7 +162,7 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
sysdate()
)
-
+
update gen_table
@@ -185,12 +188,12 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
where table_id = #{tableId}
-
+
- delete from gen_table where table_id in
+ delete from gen_table where table_id in
#{tableId}
-
\ No newline at end of file
+
\ No newline at end of file
diff --git a/pear-modules/pear-system/pom.xml b/pear-modules/pear-system/pom.xml
index 2755becc18ee5f0a479f57737dbd1aad343d08e7..1a35e0ea825057d21588405be4b759b14d03f2af 100644
--- a/pear-modules/pear-system/pom.xml
+++ b/pear-modules/pear-system/pom.xml
@@ -58,5 +58,19 @@
com.github.whvcse
easy-captcha
+
+ com.alibaba
+ easyexcel
+
+
+ cn.hutool
+ hutool-all
+ 5.6.1
+
+
+
+ com.baomidou
+ dynamic-datasource-spring-boot-starter
+
diff --git a/pear-modules/pear-system/src/main/java/com/pearadmin/system/controller/CommonController.java b/pear-modules/pear-system/src/main/java/com/pearadmin/system/controller/CommonController.java
new file mode 100644
index 0000000000000000000000000000000000000000..a6f706c72c1cbf27bbbb583f8688431b25d28a37
--- /dev/null
+++ b/pear-modules/pear-system/src/main/java/com/pearadmin/system/controller/CommonController.java
@@ -0,0 +1,116 @@
+package com.pearadmin.system.controller;
+
+import cn.hutool.core.io.FileUtil;
+import cn.hutool.core.io.file.FileReader;
+import cn.hutool.http.HttpUtil;
+import com.pearadmin.common.tools.ImageUtil;
+import com.pearadmin.common.tools.common.OConvertUtils;
+import com.pearadmin.common.tools.upload.OssBootUtil;
+import com.pearadmin.common.web.domain.response.Result;
+import com.pearadmin.system.domain.ZsxqUser;
+import lombok.extern.slf4j.Slf4j;
+import org.apache.commons.collections4.CollectionUtils;
+import org.apache.commons.lang3.StringUtils;
+import org.apache.commons.lang3.time.StopWatch;
+import org.springframework.util.AntPathMatcher;
+import org.springframework.web.bind.annotation.GetMapping;
+import org.springframework.web.bind.annotation.PostMapping;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RestController;
+import org.springframework.web.multipart.MultipartFile;
+import org.springframework.web.multipart.MultipartHttpServletRequest;
+import org.springframework.web.servlet.HandlerMapping;
+
+import javax.servlet.http.HttpServletRequest;
+import javax.servlet.http.HttpServletResponse;
+import java.io.File;
+import java.util.Date;
+import java.util.List;
+import java.util.Map;
+import java.util.concurrent.TimeUnit;
+import java.util.function.Function;
+import java.util.stream.Collectors;
+import java.util.stream.IntStream;
+
+/**
+ * 通用上传
+ */
+@Slf4j
+@RestController
+@RequestMapping("/system/common")
+public class CommonController {
+
+ /**
+ * 把指定URL后的字符串全部截断当成参数
+ * 这么做是为了防止URL中包含中文或者特殊字符(/等)时,匹配不了的问题
+ *
+ * @param request
+ * @return
+ */
+ private static String extractPathFromPattern(final HttpServletRequest request) {
+ String path = (String) request.getAttribute(HandlerMapping.PATH_WITHIN_HANDLER_MAPPING_ATTRIBUTE);
+ String bestMatchPattern = (String) request.getAttribute(HandlerMapping.BEST_MATCHING_PATTERN_ATTRIBUTE);
+ return new AntPathMatcher().extractPathWithinPattern(bestMatchPattern, path);
+ }
+
+
+ /**
+ * 文件上传统一方法
+ *
+ * @param request
+ * @param response
+ * @return
+ */
+ @PostMapping(value = "/upload")
+ public Result upload(HttpServletRequest request, HttpServletResponse response) {
+ Result result = new Result<>();
+ String savePath = "";
+ String bizPath = request.getParameter("biz");
+ MultipartHttpServletRequest multipartRequest = (MultipartHttpServletRequest) request;
+ // 获取上传文件对象
+ MultipartFile file = multipartRequest.getFile("file");
+ if (OConvertUtils.isEmpty(bizPath)) {
+ //未指定目录,则用阿里云默认目录 upload
+ bizPath = "upload";
+ }
+ savePath = OssBootUtil.upload(file, bizPath);
+
+ if (OConvertUtils.isNotEmpty(savePath)) {
+ result.setData(savePath);
+ result.setSuccess(true);
+ } else {
+ result.setMsg("上传失败!");
+ result.setSuccess(false);
+ }
+ return result;
+ }
+
+ @GetMapping("/comprossPic")
+ public Result compross() {
+ StopWatch watch = new StopWatch();
+ watch.start();
+
+ try {
+ IntStream.range(0, 30000).forEach(i -> {
+ try {
+ if (FileUtil.exist("/home/soft/images/" + i + ".png")) {
+ FileReader reader = new FileReader(new File("/home/soft/images/" + i + ".png"));
+ byte[] bytes = reader.readBytes();
+ //压缩
+ bytes = ImageUtil.compressPhoto(bytes, 2, 50, 50, 0.9f);
+ FileUtil.writeBytes(bytes, "/home/soft/images/" + i + ".png");
+ log.info("压缩完成。路径是:{}", "/home/soft/images/" + i + ".png");
+ }
+ } catch (Exception e) {
+ log.error("下载图片失败:", e);
+ }
+ });
+
+ } finally {
+ watch.stop();
+ log.info("comprossPic =====>>> 此次压缩执行时间:{}秒", (watch.getTime(TimeUnit.SECONDS)));
+ }
+ return Result.success();
+ }
+
+}
diff --git a/pear-modules/pear-system/src/main/java/com/pearadmin/system/controller/LuckActivityController.java b/pear-modules/pear-system/src/main/java/com/pearadmin/system/controller/LuckActivityController.java
new file mode 100644
index 0000000000000000000000000000000000000000..cf0268acff80229db6c08265aaa4a099d805127f
--- /dev/null
+++ b/pear-modules/pear-system/src/main/java/com/pearadmin/system/controller/LuckActivityController.java
@@ -0,0 +1,202 @@
+package com.pearadmin.system.controller;
+
+import com.github.pagehelper.PageInfo;
+import com.pearadmin.common.tools.string.Convert;
+import com.pearadmin.common.web.base.BaseController;
+import com.pearadmin.common.web.domain.request.PageDomain;
+import com.pearadmin.common.web.domain.response.Result;
+import com.pearadmin.common.web.domain.response.module.ResultTable;
+import com.pearadmin.system.domain.LuckActivity;
+import com.pearadmin.system.service.ILuckActivityService;
+import org.apache.commons.lang3.StringUtils;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.security.access.prepost.PreAuthorize;
+import org.springframework.ui.ModelMap;
+import org.springframework.web.bind.annotation.*;
+import org.springframework.web.multipart.MultipartFile;
+import org.springframework.web.servlet.ModelAndView;
+
+import javax.servlet.http.HttpServletRequest;
+import javax.servlet.http.HttpServletResponse;
+import java.util.List;
+import java.util.Map;
+import java.util.Objects;
+
+/**
+ * 抽奖活动设置Controller
+ *
+ * @author zhangsenxiang
+ * @date 2021-03-09
+ */
+@RestController
+@RequestMapping("/system/activity")
+public class LuckActivityController extends BaseController {
+ private String prefix = "system/activity";
+
+ @Autowired
+ private ILuckActivityService luckActivityService;
+
+ @GetMapping("/main")
+ @PreAuthorize("hasPermission('/system/activity/main','system:activity:main')")
+ public ModelAndView main() {
+ return jumpPage(prefix + "/main");
+ }
+
+ /**
+ * 查询抽奖活动设置列表
+ */
+ @ResponseBody
+ @GetMapping("/data")
+ @PreAuthorize("hasPermission('/system/activity/data','system:activity:data')")
+ public ResultTable list(@ModelAttribute LuckActivity luckActivity, PageDomain pageDomain) {
+ PageInfo pageInfo = luckActivityService.selectLuckActivityPage(luckActivity, pageDomain);
+ return pageTable(pageInfo.getList(), pageInfo.getTotal());
+ }
+
+ /**
+ * 新增抽奖活动设置
+ */
+ @GetMapping("/add")
+ @PreAuthorize("hasPermission('/system/activity/add','system:activity:add')")
+ public ModelAndView add() {
+ return jumpPage(prefix + "/add");
+ }
+
+ /**
+ * 新增保存抽奖活动设置
+ */
+ @ResponseBody
+ @PostMapping("/save")
+ @PreAuthorize("hasPermission('/system/activity/add','system:activity:add')")
+ public Result save(@RequestBody LuckActivity luckActivity) {
+ return decide(luckActivityService.insertLuckActivity(luckActivity));
+ }
+
+ /**
+ * 修改抽奖活动设置
+ */
+ @GetMapping("/edit")
+ @PreAuthorize("hasPermission('/system/activity/edit','system:activity:edit')")
+ public ModelAndView edit(Long id, ModelMap mmap) {
+ LuckActivity luckActivity = luckActivityService.selectLuckActivityById(id);
+ mmap.put("luckActivity", luckActivity);
+ return jumpPage(prefix + "/edit");
+ }
+
+ /**
+ * 修改保存抽奖活动设置
+ */
+ @ResponseBody
+ @PutMapping("/update")
+ @PreAuthorize("hasPermission('/system/activity/edit','system:activity:edit')")
+ public Result update(@RequestBody LuckActivity luckActivity) {
+ return decide(luckActivityService.updateLuckActivity(luckActivity));
+ }
+
+ /**
+ * 删除抽奖活动设置
+ */
+ @ResponseBody
+ @DeleteMapping("/batchRemove")
+ @PreAuthorize("hasPermission('/system/activity/remove','system:activity:remove')")
+ public Result batchRemove(String ids) {
+ return decide(luckActivityService.deleteLuckActivityByIds(Convert.toStrArray(ids)));
+ }
+
+ /**
+ * 删除
+ */
+ @ResponseBody
+ @DeleteMapping("/remove/{id}")
+ @PreAuthorize("hasPermission('/system/activity/remove','system:activity:remove')")
+ public Result remove(@PathVariable("id") Long id) {
+ return decide(luckActivityService.deleteLuckActivityById(id));
+ }
+
+ /**
+ * 生成二维码
+ */
+ @GetMapping("/generate/qrcode/{id}")
+ @PreAuthorize("hasPermission('/system/activity/edit','system:activity:edit')")
+ public void generateQrcode(@PathVariable("id") Long id, HttpServletRequest request, HttpServletResponse response) throws Exception {
+ luckActivityService.generateQrcode(id, request, response);
+ }
+
+ /**
+ * 下载模板
+ */
+ @GetMapping("/dowmloadTemplete")
+ @PreAuthorize("hasPermission('/system/activity/edit','system:activity:edit')")
+ public void dowmloadTemplete(HttpServletRequest request, HttpServletResponse response) throws Exception {
+ luckActivityService.dowmloadTemplete(request, response);
+ }
+
+ @RequestMapping("/uploadPrizeUser")
+ @PreAuthorize("hasPermission('/system/activity/edit','system:activity:edit')")
+ @ResponseBody
+ public Result uploadPrizeUser(@RequestParam(value = "file") MultipartFile multipartFile, Long id, Integer type) throws Exception {
+ if (Objects.isNull(id)) {
+ return Result.failure("参数为空");
+ }
+ if (Objects.isNull(type)) {
+ return Result.failure("参数为空");
+ }
+ return luckActivityService.uploadPrizeUser(multipartFile, id, type);
+ }
+
+ @GetMapping("/checkStatus")
+ @PreAuthorize("hasPermission('/system/activity/edit','system:activity:edit')")
+ public Result checkStatus(Long activityNo, Integer type) throws Exception {
+ if (Objects.isNull(type)) {
+ return Result.failure("参数异常");
+ }
+ if (type == 0 && Objects.isNull(activityNo)) {
+ return Result.failure("参数异常");
+ }
+ return luckActivityService.checkUploadStatus(activityNo, type);
+ }
+
+ @GetMapping("/clearStatus")
+ @PreAuthorize("hasPermission('/system/activity/edit','system:activity:edit')")
+ public Result clearStatus(Long activityNo, Integer type) throws Exception {
+ if (Objects.isNull(type)) {
+ return Result.failure("参数异常");
+ }
+ if (type == 0 && Objects.isNull(activityNo)) {
+ return Result.failure("参数异常");
+ }
+ return luckActivityService.clearUploadStatus(activityNo, type);
+ }
+
+ @GetMapping("/getUploadStatus")
+ @PreAuthorize("hasPermission('/system/activity/edit','system:activity:edit')")
+ public Result getStatus(Integer type) throws Exception {
+ if (Objects.isNull(type)) {
+ return Result.failure("参数异常");
+ }
+ return luckActivityService.getUploadStatus(type);
+ }
+
+
+ @GetMapping("/exportPrizeUser")
+ @PreAuthorize("hasPermission('/system/activity/edit','system:activity:edit')")
+ public Result exportPrizeUser(String activityIds) throws Exception {
+ if (StringUtils.isBlank(activityIds)) {
+ return Result.failure("参数异常");
+ }
+ return luckActivityService.exportPrizeUser(activityIds);
+ }
+
+
+ /**
+ * 查询可绑定的活动
+ *
+ * @return
+ */
+ @ResponseBody
+ @GetMapping("/getActiveNos")
+ public Result>> getActiveNos() {
+ return luckActivityService.getActiveNos();
+ }
+
+}
diff --git a/pear-modules/pear-system/src/main/java/com/pearadmin/system/controller/LuckJoinUserController.java b/pear-modules/pear-system/src/main/java/com/pearadmin/system/controller/LuckJoinUserController.java
new file mode 100644
index 0000000000000000000000000000000000000000..9f3f4f46cd4c07c63d5c9d08671a5d5861522993
--- /dev/null
+++ b/pear-modules/pear-system/src/main/java/com/pearadmin/system/controller/LuckJoinUserController.java
@@ -0,0 +1,117 @@
+package com.pearadmin.system.controller;
+
+import com.github.pagehelper.PageInfo;
+import com.pearadmin.common.constant.ControllerConstant;
+import com.pearadmin.system.domain.LuckJoinUser;
+import com.pearadmin.common.tools.string.Convert;
+import com.pearadmin.common.web.base.BaseController;
+import com.pearadmin.common.web.domain.request.PageDomain;
+import com.pearadmin.common.web.domain.response.Result;
+import com.pearadmin.common.web.domain.response.module.ResultTable;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.security.access.prepost.PreAuthorize;
+import org.springframework.ui.ModelMap;
+import org.springframework.web.bind.annotation.*;
+import org.springframework.web.servlet.ModelAndView;
+import com.pearadmin.system.service.ILuckJoinUserService;
+
+/**
+ * 抽奖参加人员Controller
+ *
+ * @author zhangsenxiang
+ * @date 2021-03-03
+ */
+@RestController
+@RequestMapping(ControllerConstant.API_SYSTEM_PREFIX + "joinuser")
+public class LuckJoinUserController extends BaseController
+{
+ private String prefix = "system/joinuser";
+
+ @Autowired
+ private ILuckJoinUserService luckJoinUserService;
+
+ @GetMapping("/main")
+ @PreAuthorize("hasPermission('/system/joinuser/main','system:joinuser:main')")
+ public ModelAndView main()
+ {
+ return jumpPage(prefix + "/main");
+ }
+
+ /**
+ * 查询抽奖参加人员列表
+ */
+ @ResponseBody
+ @GetMapping("/data")
+ @PreAuthorize("hasPermission('/system/joinuser/data','system:joinuser:data')")
+ public ResultTable list(@ModelAttribute LuckJoinUser luckJoinUser, PageDomain pageDomain)
+ {
+ PageInfo pageInfo = luckJoinUserService.selectLuckJoinUserPage(luckJoinUser,pageDomain);
+ return pageTable(pageInfo.getList(),pageInfo.getTotal());
+ }
+
+ /**
+ * 新增抽奖参加人员
+ */
+ @GetMapping("/add")
+ @PreAuthorize("hasPermission('/system/joinuser/add','system:joinuser:add')")
+ public ModelAndView add()
+ {
+ return jumpPage(prefix + "/add");
+ }
+
+ /**
+ * 新增保存抽奖参加人员
+ */
+ @ResponseBody
+ @PostMapping("/save")
+ @PreAuthorize("hasPermission('/system/joinuser/add','system:joinuser:add')")
+ public Result save(@RequestBody LuckJoinUser luckJoinUser)
+ {
+ return decide(luckJoinUserService.insertLuckJoinUser(luckJoinUser));
+ }
+
+ /**
+ * 修改抽奖参加人员
+ */
+ @GetMapping("/edit")
+ @PreAuthorize("hasPermission('/system/joinuser/edit','system:joinuser:edit')")
+ public ModelAndView edit(Long id, ModelMap mmap)
+ {
+ LuckJoinUser luckJoinUser = luckJoinUserService.selectLuckJoinUserById(id);
+ mmap.put("luckJoinUser", luckJoinUser);
+ return jumpPage(prefix + "/edit");
+ }
+
+ /**
+ * 修改保存抽奖参加人员
+ */
+ @ResponseBody
+ @PutMapping("/update")
+ @PreAuthorize("hasPermission('/system/joinuser/edit','system:joinuser:edit')")
+ public Result update(@RequestBody LuckJoinUser luckJoinUser)
+ {
+ return decide(luckJoinUserService.updateLuckJoinUser(luckJoinUser));
+ }
+
+ /**
+ * 删除抽奖参加人员
+ */
+ @ResponseBody
+ @DeleteMapping( "/batchRemove")
+ @PreAuthorize("hasPermission('/system/joinuser/remove','system:joinuser:remove')")
+ public Result batchRemove(String ids)
+ {
+ return decide(luckJoinUserService.deleteLuckJoinUserByIds(Convert.toStrArray(ids)));
+ }
+
+ /**
+ * 删除
+ */
+ @ResponseBody
+ @DeleteMapping("/remove/{id}")
+ @PreAuthorize("hasPermission('/system/joinuser/remove','system:joinuser:remove')")
+ public Result remove(@PathVariable("id") Long id)
+ {
+ return decide(luckJoinUserService.deleteLuckJoinUserById(id));
+ }
+}
diff --git a/pear-modules/pear-system/src/main/java/com/pearadmin/system/controller/LuckPrizeController.java b/pear-modules/pear-system/src/main/java/com/pearadmin/system/controller/LuckPrizeController.java
new file mode 100644
index 0000000000000000000000000000000000000000..1b1974e95959cc2eccaed978060a4809289000cc
--- /dev/null
+++ b/pear-modules/pear-system/src/main/java/com/pearadmin/system/controller/LuckPrizeController.java
@@ -0,0 +1,118 @@
+package com.pearadmin.system.controller;
+
+import com.github.pagehelper.PageInfo;
+import com.pearadmin.common.tools.string.Convert;
+import com.pearadmin.common.web.base.BaseController;
+import com.pearadmin.common.web.domain.request.PageDomain;
+import com.pearadmin.common.web.domain.response.Result;
+import com.pearadmin.common.web.domain.response.module.ResultTable;
+import com.pearadmin.system.domain.LuckPrize;
+import com.pearadmin.system.service.ILuckPrizeService;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.security.access.prepost.PreAuthorize;
+import org.springframework.ui.ModelMap;
+import org.springframework.web.bind.annotation.*;
+import org.springframework.web.servlet.ModelAndView;
+
+/**
+ * 奖品设置Controller
+ *
+ * @author zhangsenxiang
+ * @date 2021-03-03
+ */
+@RestController
+@RequestMapping("/system/prize")
+public class LuckPrizeController extends BaseController {
+ private String prefix = "system/prize";
+
+ @Autowired
+ private ILuckPrizeService luckPrizeService;
+
+ @GetMapping("/main")
+ @PreAuthorize("hasPermission('/system/prize/main','system:prize:main')")
+ public ModelAndView main() {
+ return jumpPage(prefix + "/main");
+ }
+
+ /**
+ * 查询奖品设置列表
+ */
+ @ResponseBody
+ @GetMapping("/data")
+ @PreAuthorize("hasPermission('/system/prize/data','system:prize:data')")
+ public ResultTable list(@ModelAttribute LuckPrize luckPrize, PageDomain pageDomain) {
+ PageInfo pageInfo = luckPrizeService.selectLuckPrizePage(luckPrize, pageDomain);
+ return pageTable(pageInfo.getList(), pageInfo.getTotal());
+ }
+
+ /**
+ * 新增奖品设置
+ */
+ @GetMapping("/add")
+ @PreAuthorize("hasPermission('/system/prize/add','system:prize:add')")
+ public ModelAndView add() {
+ return jumpPage(prefix + "/add");
+ }
+
+ /**
+ * 新增保存奖品设置
+ */
+ @ResponseBody
+ @PostMapping("/save")
+ @PreAuthorize("hasPermission('/system/prize/add','system:prize:add')")
+ public Result save(@RequestBody LuckPrize luckPrize) {
+ return decide(luckPrizeService.insertLuckPrize(luckPrize));
+ }
+
+ /**
+ * 修改奖品设置
+ */
+ @GetMapping("/edit")
+ //@PreAuthorize("hasPermission('/system/prize/edit','system:prize:edit')")
+ public ModelAndView edit(Integer id, ModelMap mmap) {
+ LuckPrize luckPrize = luckPrizeService.selectLuckPrizeById(id);
+ mmap.put("luckPrize", luckPrize);
+ return jumpPage(prefix + "/edit");
+ }
+
+ /**
+ * 修改保存奖品设置
+ */
+ @ResponseBody
+ @PutMapping("/update")
+ @PreAuthorize("hasPermission('/system/prize/edit','system:prize:edit')")
+ public Result update(@RequestBody LuckPrize luckPrize) {
+ return decide(luckPrizeService.updateLuckPrize(luckPrize));
+ }
+
+ /**
+ * 删除奖品设置
+ */
+ @ResponseBody
+ @DeleteMapping("/batchRemove")
+ @PreAuthorize("hasPermission('/system/prize/remove','system:prize:remove')")
+ public Result batchRemove(String ids) {
+ return decide(luckPrizeService.deleteLuckPrizeByIds(Convert.toStrArray(ids)));
+ }
+
+ /**
+ * 删除
+ */
+ @ResponseBody
+ @DeleteMapping("/remove/{id}")
+ @PreAuthorize("hasPermission('/system/prize/remove','system:prize:remove')")
+ public Result remove(@PathVariable("id") Integer id) {
+ return decide(luckPrizeService.deleteLuckPrizeById(id));
+ }
+
+
+ /**
+ *
+ */
+ @ResponseBody
+ @GetMapping("/start/{id}")
+ @PreAuthorize("hasPermission('/system/prize/remove','system:prize:remove')")
+ public Result start(@PathVariable("id") Integer id) {
+ return decide(luckPrizeService.start(id));
+ }
+}
diff --git a/pear-modules/pear-system/src/main/java/com/pearadmin/system/controller/LuckUserController.java b/pear-modules/pear-system/src/main/java/com/pearadmin/system/controller/LuckUserController.java
new file mode 100644
index 0000000000000000000000000000000000000000..c53a448ec47eb17f5dc246393737a377462e612e
--- /dev/null
+++ b/pear-modules/pear-system/src/main/java/com/pearadmin/system/controller/LuckUserController.java
@@ -0,0 +1,116 @@
+package com.pearadmin.system.controller;
+
+import com.github.pagehelper.PageInfo;
+import com.pearadmin.system.domain.LuckUser;
+import com.pearadmin.common.tools.string.Convert;
+import com.pearadmin.common.web.base.BaseController;
+import com.pearadmin.common.web.domain.request.PageDomain;
+import com.pearadmin.common.web.domain.response.Result;
+import com.pearadmin.common.web.domain.response.module.ResultTable;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.security.access.prepost.PreAuthorize;
+import org.springframework.ui.ModelMap;
+import org.springframework.web.bind.annotation.*;
+import org.springframework.web.servlet.ModelAndView;
+import com.pearadmin.system.service.ILuckUserService;
+
+/**
+ * 中奖名单Controller
+ *
+ * @author zhangsenxiang
+ * @date 2021-03-03
+ */
+@RestController
+@RequestMapping("/system/luckuser")
+public class LuckUserController extends BaseController
+{
+ private String prefix = "system/luckuser";
+
+ @Autowired
+ private ILuckUserService luckUserService;
+
+ @GetMapping("/main")
+ @PreAuthorize("hasPermission('/system/luckuser/main','system:luckuser:main')")
+ public ModelAndView main()
+ {
+ return jumpPage(prefix + "/main");
+ }
+
+ /**
+ * 查询中奖名单列表
+ */
+ @ResponseBody
+ @GetMapping("/data")
+ @PreAuthorize("hasPermission('/system/luckuser/data','system:luckuser:data')")
+ public ResultTable list(@ModelAttribute LuckUser luckUser, PageDomain pageDomain)
+ {
+ PageInfo pageInfo = luckUserService.selectLuckUserPage(luckUser,pageDomain);
+ return pageTable(pageInfo.getList(),pageInfo.getTotal());
+ }
+
+ /**
+ * 新增中奖名单
+ */
+ @GetMapping("/add")
+ @PreAuthorize("hasPermission('/system/luckuser/add','system:luckuser:add')")
+ public ModelAndView add()
+ {
+ return jumpPage(prefix + "/add");
+ }
+
+ /**
+ * 新增保存中奖名单
+ */
+ @ResponseBody
+ @PostMapping("/save")
+ @PreAuthorize("hasPermission('/system/luckuser/add','system:luckuser:add')")
+ public Result save(@RequestBody LuckUser luckUser)
+ {
+ return decide(luckUserService.insertLuckUser(luckUser));
+ }
+
+ /**
+ * 修改中奖名单
+ */
+ @GetMapping("/edit")
+ @PreAuthorize("hasPermission('/system/luckuser/edit','system:luckuser:edit')")
+ public ModelAndView edit(Long id, ModelMap mmap)
+ {
+ LuckUser luckUser = luckUserService.selectLuckUserById(id);
+ mmap.put("luckUser", luckUser);
+ return jumpPage(prefix + "/edit");
+ }
+
+ /**
+ * 修改保存中奖名单
+ */
+ @ResponseBody
+ @PutMapping("/update")
+ @PreAuthorize("hasPermission('/system/luckuser/edit','system:luckuser:edit')")
+ public Result update(@RequestBody LuckUser luckUser)
+ {
+ return decide(luckUserService.updateLuckUser(luckUser));
+ }
+
+ /**
+ * 删除中奖名单
+ */
+ @ResponseBody
+ @DeleteMapping( "/batchRemove")
+ @PreAuthorize("hasPermission('/system/luckuser/remove','system:luckuser:remove')")
+ public Result batchRemove(String ids)
+ {
+ return decide(luckUserService.deleteLuckUserByIds(Convert.toStrArray(ids)));
+ }
+
+ /**
+ * 删除
+ */
+ @ResponseBody
+ @DeleteMapping("/remove/{id}")
+ @PreAuthorize("hasPermission('/system/luckuser/remove','system:luckuser:remove')")
+ public Result remove(@PathVariable("id") Long id)
+ {
+ return decide(luckUserService.deleteLuckUserById(id));
+ }
+}
diff --git a/pear-modules/pear-system/src/main/java/com/pearadmin/system/controller/UsersAddressController.java b/pear-modules/pear-system/src/main/java/com/pearadmin/system/controller/UsersAddressController.java
new file mode 100644
index 0000000000000000000000000000000000000000..0620dfa242478bf2bf0ded7f9f500aa39a73d441
--- /dev/null
+++ b/pear-modules/pear-system/src/main/java/com/pearadmin/system/controller/UsersAddressController.java
@@ -0,0 +1,116 @@
+package com.pearadmin.system.controller;
+
+import com.github.pagehelper.PageInfo;
+import com.pearadmin.system.domain.UsersAddress;
+import com.pearadmin.common.tools.string.Convert;
+import com.pearadmin.common.web.base.BaseController;
+import com.pearadmin.common.web.domain.request.PageDomain;
+import com.pearadmin.common.web.domain.response.Result;
+import com.pearadmin.common.web.domain.response.module.ResultTable;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.security.access.prepost.PreAuthorize;
+import org.springframework.ui.ModelMap;
+import org.springframework.web.bind.annotation.*;
+import org.springframework.web.servlet.ModelAndView;
+import com.pearadmin.system.service.IUsersAddressService;
+
+/**
+ * 用户地址Controller
+ *
+ * @author rufeng
+ * @date 2021-04-14
+ */
+@RestController
+@RequestMapping("/system/address")
+public class UsersAddressController extends BaseController
+{
+ private String prefix = "system/address";
+
+ @Autowired
+ private IUsersAddressService usersAddressService;
+
+ @GetMapping("/main")
+ @PreAuthorize("hasPermission('/system/address/main','system:address:main')")
+ public ModelAndView main()
+ {
+ return jumpPage(prefix + "/main");
+ }
+
+ /**
+ * 查询用户地址列表
+ */
+ @ResponseBody
+ @GetMapping("/data")
+ @PreAuthorize("hasPermission('/system/address/data','system:address:data')")
+ public ResultTable list(@ModelAttribute UsersAddress usersAddress, PageDomain pageDomain)
+ {
+ PageInfo pageInfo = usersAddressService.selectUsersAddressPage(usersAddress,pageDomain);
+ return pageTable(pageInfo.getList(),pageInfo.getTotal());
+ }
+
+ /**
+ * 新增用户地址
+ */
+ @GetMapping("/add")
+ @PreAuthorize("hasPermission('/system/address/add','system:address:add')")
+ public ModelAndView add()
+ {
+ return jumpPage(prefix + "/add");
+ }
+
+ /**
+ * 新增保存用户地址
+ */
+ @ResponseBody
+ @PostMapping("/save")
+ @PreAuthorize("hasPermission('/system/address/add','system:address:add')")
+ public Result save(@RequestBody UsersAddress usersAddress)
+ {
+ return decide(usersAddressService.insertUsersAddress(usersAddress));
+ }
+
+ /**
+ * 修改用户地址
+ */
+ @GetMapping("/edit")
+ @PreAuthorize("hasPermission('/system/address/edit','system:address:edit')")
+ public ModelAndView edit(String userid, ModelMap mmap)
+ {
+ UsersAddress usersAddress = usersAddressService.selectUsersAddressById(userid);
+ mmap.put("usersAddress", usersAddress);
+ return jumpPage(prefix + "/edit");
+ }
+
+ /**
+ * 修改保存用户地址
+ */
+ @ResponseBody
+ @PutMapping("/update")
+ @PreAuthorize("hasPermission('/system/address/edit','system:address:edit')")
+ public Result update(@RequestBody UsersAddress usersAddress)
+ {
+ return decide(usersAddressService.updateUsersAddress(usersAddress));
+ }
+
+ /**
+ * 删除用户地址
+ */
+ @ResponseBody
+ @DeleteMapping( "/batchRemove")
+ @PreAuthorize("hasPermission('/system/address/remove','system:address:remove')")
+ public Result batchRemove(String ids)
+ {
+ return decide(usersAddressService.deleteUsersAddressByIds(Convert.toStrArray(ids)));
+ }
+
+ /**
+ * 删除
+ */
+ @ResponseBody
+ @DeleteMapping("/remove/{userid}")
+ @PreAuthorize("hasPermission('/system/address/remove','system:address:remove')")
+ public Result remove(@PathVariable("userid") String userid)
+ {
+ return decide(usersAddressService.deleteUsersAddressById(userid));
+ }
+}
diff --git a/pear-modules/pear-system/src/main/java/com/pearadmin/system/domain/LuckActivity.java b/pear-modules/pear-system/src/main/java/com/pearadmin/system/domain/LuckActivity.java
new file mode 100644
index 0000000000000000000000000000000000000000..8e93f2a0a73ad4a5a0b0e00cf92353c42bf11a7c
--- /dev/null
+++ b/pear-modules/pear-system/src/main/java/com/pearadmin/system/domain/LuckActivity.java
@@ -0,0 +1,60 @@
+package com.pearadmin.system.domain;
+
+import java.util.Date;
+
+import com.fasterxml.jackson.annotation.JsonFormat;
+import lombok.Data;
+import com.pearadmin.common.web.base.BaseDomain;
+
+/**
+ * 抽奖活动设置对象 luck_activity
+ *
+ * @author zhangsenxiang
+ * @date 2021-03-09
+ */
+@Data
+public class LuckActivity extends BaseDomain
+{
+ private static final long serialVersionUID = 1L;
+
+ /** null */
+ private Long id;
+
+ /** 活动名称 */
+ private String activityName;
+
+ /** 活动日期 */
+ private Date activityDate;
+
+ /** 开始日期 */
+ @JsonFormat(locale="zh", timezone="GMT+8", pattern="yyyy-MM-dd HH:mm:ss")
+ private Date startDate;
+
+ /** 结束日期 */
+ @JsonFormat(locale="zh", timezone="GMT+8", pattern="yyyy-MM-dd HH:mm:ss")
+ private Date endDate;
+
+ /** 活动日期 */
+ private String activityDateStr;
+
+ /** 开始日期格式后 */
+ private String startDateStr;
+
+ /** 结束日期格式后 */
+ private String endDateStr;
+
+ /**
+ * 活动状态
+ */
+ private Integer status;
+
+ /** 开奖类型 */
+ private Integer drawType;
+
+ /** 创建人 */
+ private String createId;
+
+ /** 创建人名称 */
+ private String createName;
+
+}
diff --git a/pear-modules/pear-system/src/main/java/com/pearadmin/system/domain/LuckJoinUser.java b/pear-modules/pear-system/src/main/java/com/pearadmin/system/domain/LuckJoinUser.java
new file mode 100644
index 0000000000000000000000000000000000000000..c2d163904483979ca763c429953b54c56bf00f1c
--- /dev/null
+++ b/pear-modules/pear-system/src/main/java/com/pearadmin/system/domain/LuckJoinUser.java
@@ -0,0 +1,57 @@
+package com.pearadmin.system.domain;
+
+import lombok.Data;
+import org.apache.commons.lang3.builder.ToStringBuilder;
+import org.apache.commons.lang3.builder.ToStringStyle;
+import com.pearadmin.common.web.base.BaseDomain;
+
+import java.util.Objects;
+
+/**
+ * 抽奖参加人员对象 luck_join_user
+ *
+ * @author zhangsenxiang
+ * @date 2021-03-03
+ */
+@Data
+public class LuckJoinUser extends BaseDomain
+{
+ private static final long serialVersionUID = 1L;
+
+ /** null */
+ private Long id;
+
+ /** 星球编号 */
+ private Long number;
+
+ /** 星球昵称 */
+ private String nickName;
+
+ /** 活动版本号 */
+ private Integer activeNo;
+
+ /** 本次中奖次数 */
+ private Integer luckNumber;
+
+ /** 删除标记 */
+ private Long isDeleted;
+
+ @Override
+ public boolean equals(Object o) {
+ if (this == o)
+ return true;
+ if (o == null || getClass() != o.getClass())
+ return false;
+// if (!super.equals(o))
+// return false;
+ LuckJoinUser that = (LuckJoinUser) o;
+// //重写equals方法 星球编号 昵称相同算同一对象
+// return Objects.equals(number, that.number) && Objects.equals(nickName, that.nickName) && Objects.equals(activeNo, that.activeNo);
+ return number.longValue() == that.number.longValue() && activeNo.intValue() == that.activeNo.intValue();
+ }
+
+ @Override
+ public int hashCode() {
+ return Objects.hash(super.hashCode(), id, number, nickName, activeNo, luckNumber, isDeleted);
+ }
+}
diff --git a/pear-modules/pear-system/src/main/java/com/pearadmin/system/domain/LuckPrize.java b/pear-modules/pear-system/src/main/java/com/pearadmin/system/domain/LuckPrize.java
new file mode 100644
index 0000000000000000000000000000000000000000..3f8bed96e24a2569add8ed2aa9bfaa6208ae0a6c
--- /dev/null
+++ b/pear-modules/pear-system/src/main/java/com/pearadmin/system/domain/LuckPrize.java
@@ -0,0 +1,65 @@
+package com.pearadmin.system.domain;
+
+import com.fasterxml.jackson.annotation.JsonFormat;
+import io.swagger.models.auth.In;
+import lombok.Data;
+import org.apache.commons.lang3.builder.ToStringBuilder;
+import org.apache.commons.lang3.builder.ToStringStyle;
+import com.pearadmin.common.web.base.BaseDomain;
+
+import java.util.Date;
+
+/**
+ * 奖品设置对象 luck_prize
+ *
+ * @author zhangsenxiang
+ * @date 2021-03-03
+ */
+@Data
+public class LuckPrize extends BaseDomain
+{
+ private static final long serialVersionUID = 1L;
+
+ /** id */
+ private Integer id;
+
+ /** 奖品等级 */
+ private String grade;
+
+ /** 奖品名称 */
+ private String prizeName;
+
+ /** 奖品编号 */
+ private String luckCode;
+
+ /** 奖品数量 */
+ private Integer balance;
+
+ /** 活动版本号 */
+ private Integer activeNo;
+
+ /** 开奖状态 */
+ private Integer status;
+
+ /** 开奖状态 */
+ private String statusStr;
+
+ /** 活动名称 */
+ private String activeName;
+
+ /** 赞助人 */
+ private String sponsor;
+
+ /** 图片地址 */
+ private String picUrl;
+
+ /** 开奖时间 */
+ @JsonFormat(locale="zh", timezone="GMT+8", pattern="yyyy-MM-dd HH:mm:ss")
+ private Date openTime;
+
+ /**
+ * 开奖时间字符串
+ */
+ private String openTimeFormat;
+
+}
diff --git a/pear-modules/pear-system/src/main/java/com/pearadmin/system/domain/LuckUser.java b/pear-modules/pear-system/src/main/java/com/pearadmin/system/domain/LuckUser.java
new file mode 100644
index 0000000000000000000000000000000000000000..7ebf842ccb6be4867e835d5fb8bc1a7a809f3714
--- /dev/null
+++ b/pear-modules/pear-system/src/main/java/com/pearadmin/system/domain/LuckUser.java
@@ -0,0 +1,41 @@
+package com.pearadmin.system.domain;
+
+import java.util.Date;
+import lombok.Data;
+import org.apache.commons.lang3.builder.ToStringBuilder;
+import org.apache.commons.lang3.builder.ToStringStyle;
+import com.pearadmin.common.web.base.BaseDomain;
+
+/**
+ * 中奖名单对象 luck_user
+ *
+ * @author zhangsenxiang
+ * @date 2021-03-03
+ */
+@Data
+public class LuckUser extends BaseDomain
+{
+ private static final long serialVersionUID = 1L;
+
+ /** 主键 */
+ private Long id;
+
+ /** 星球编号 */
+ private Long number;
+
+ /** 星球昵称 */
+ private String nickName;
+
+ /** 奖品代码 */
+ private String luckCode;
+
+ /** 中奖日期 */
+ private Date luckDate;
+
+ /** 中奖日期 */
+ private String luckDateStr;
+
+ /** 活动编码 */
+ private Integer activeNo;
+
+}
diff --git a/pear-modules/pear-system/src/main/java/com/pearadmin/system/domain/UsersAddress.java b/pear-modules/pear-system/src/main/java/com/pearadmin/system/domain/UsersAddress.java
new file mode 100644
index 0000000000000000000000000000000000000000..87087543d264cbaf9fb2c073ac5a5883e40b47aa
--- /dev/null
+++ b/pear-modules/pear-system/src/main/java/com/pearadmin/system/domain/UsersAddress.java
@@ -0,0 +1,49 @@
+package com.pearadmin.system.domain;
+
+import lombok.Data;
+import org.apache.commons.lang3.builder.ToStringBuilder;
+import org.apache.commons.lang3.builder.ToStringStyle;
+import com.pearadmin.common.web.base.BaseDomain;
+
+/**
+ * 用户地址对象 users_address
+ *
+ * @author rufeng
+ * @date 2021-04-14
+ */
+@Data
+public class UsersAddress
+{
+ private static final long serialVersionUID = 1L;
+
+ /** null */
+ private String userid;
+
+ /** null */
+ private String nickname;
+
+ /** null */
+ private String username;
+
+ /** null */
+ private String phonenumber;
+
+ /** null */
+ private String province;
+
+ /** null */
+ private String city;
+
+ /** null */
+ private String county;
+
+ /** null */
+ private String details;
+
+ /** null */
+ private String wechatid;
+
+ /** null */
+ private String wechatname;
+
+}
diff --git a/pear-modules/pear-system/src/main/java/com/pearadmin/system/domain/ZsxqUser.java b/pear-modules/pear-system/src/main/java/com/pearadmin/system/domain/ZsxqUser.java
new file mode 100644
index 0000000000000000000000000000000000000000..8993a9eb4443be1ada4cf049fb0c1274f199a30f
--- /dev/null
+++ b/pear-modules/pear-system/src/main/java/com/pearadmin/system/domain/ZsxqUser.java
@@ -0,0 +1,58 @@
+package com.pearadmin.system.domain;
+
+import lombok.Data;
+
+@Data
+public class ZsxqUser {
+ /**
+ * '星球 id',
+ */
+ private String groupId;
+ /**
+ * '用户 id',
+ */
+ private String userId;
+ /**
+ * '用户昵称',
+ */
+ private String name;
+ /**
+ * '星球编号',
+ */
+ private String number;
+ /**
+ * '头像地址',
+ */
+ private String avatarUrl;
+ /**
+ * '个人简介',
+ */
+ private String description;
+ /**
+ * '加入时间',
+ */
+ private String joinTime;
+ /**
+ * '更新时间',
+ */
+ private String updateTime;
+ /**
+ * '登陆时间',
+ */
+ private String loginTime;
+ /**
+ * '过期时间',
+ */
+ private String expiredTime;
+ /**
+ * ,
+ */
+ private String isolated;
+ /**
+ * '状态:joined、exited',
+ */
+ private String status;
+
+
+
+}
diff --git a/pear-modules/pear-system/src/main/java/com/pearadmin/system/domain/excel/ExportLuckPrizeUserVO.java b/pear-modules/pear-system/src/main/java/com/pearadmin/system/domain/excel/ExportLuckPrizeUserVO.java
new file mode 100644
index 0000000000000000000000000000000000000000..199b1bf07aa07f9e0f4e14416574f2b08ebd9274
--- /dev/null
+++ b/pear-modules/pear-system/src/main/java/com/pearadmin/system/domain/excel/ExportLuckPrizeUserVO.java
@@ -0,0 +1,42 @@
+package com.pearadmin.system.domain.excel;
+
+import com.alibaba.excel.annotation.ExcelProperty;
+import lombok.Data;
+
+/**
+ * @author rufeng
+ * @version 1.0.0
+ * @date 2021/3/16 8:47 下午
+ * @description
+ */
+@Data
+public class ExportLuckPrizeUserVO {
+
+ @ExcelProperty("星球编号")
+ private Long userNumber;
+
+ @ExcelProperty("星球昵称")
+ private String userName;
+
+ @ExcelProperty("奖品名称")
+ private String prizeName;
+
+ @ExcelProperty("收货人")
+ private String recName;
+
+ @ExcelProperty("手机号")
+ private String phoneNumber;
+
+ @ExcelProperty("省")
+ private String province;
+
+ @ExcelProperty("市")
+ private String city;
+
+ @ExcelProperty("县")
+ private String county;
+
+ @ExcelProperty("详细地址")
+ private String details;
+
+}
diff --git a/pear-modules/pear-system/src/main/java/com/pearadmin/system/domain/excel/ImportPrizeUser.java b/pear-modules/pear-system/src/main/java/com/pearadmin/system/domain/excel/ImportPrizeUser.java
new file mode 100644
index 0000000000000000000000000000000000000000..80c9112d82cba73843f4884dad2da579432dd4f1
--- /dev/null
+++ b/pear-modules/pear-system/src/main/java/com/pearadmin/system/domain/excel/ImportPrizeUser.java
@@ -0,0 +1,20 @@
+package com.pearadmin.system.domain.excel;
+
+import com.alibaba.excel.annotation.ExcelProperty;
+import lombok.Data;
+
+/**
+ * @author rufeng
+ * @version 1.0.0
+ * @date 2021/3/16 8:47 下午
+ * @description
+ */
+@Data
+public class ImportPrizeUser {
+
+ @ExcelProperty("星球编号")
+ private Long userNumber;
+
+ @ExcelProperty("用户昵称")
+ private String userName;
+}
diff --git a/pear-modules/pear-system/src/main/java/com/pearadmin/system/enums/LuckActivityStatusEnum.java b/pear-modules/pear-system/src/main/java/com/pearadmin/system/enums/LuckActivityStatusEnum.java
new file mode 100644
index 0000000000000000000000000000000000000000..cd593df80a0f29b8cef02a99288a970888a48088
--- /dev/null
+++ b/pear-modules/pear-system/src/main/java/com/pearadmin/system/enums/LuckActivityStatusEnum.java
@@ -0,0 +1,38 @@
+package com.pearadmin.system.enums;
+
+import java.util.Objects;
+
+/**
+ * 活动状态
+ */
+public enum LuckActivityStatusEnum {
+
+ NOSTART(0, "未开始"),
+ START(1, "进行中"),
+ END(2, "已结束");
+
+ private Integer code;
+ private String desc;
+
+ private LuckActivityStatusEnum(Integer code, String desc) {
+ this.code = code;
+ this.desc = desc;
+ }
+
+ public Integer getCode() {
+ return code;
+ }
+
+ public String getDesc() {
+ return desc;
+ }
+
+ public static LuckActivityStatusEnum get(Integer code) {
+ for (LuckActivityStatusEnum value : values()) {
+ if (Objects.equals(value.code, code)) {
+ return value;
+ }
+ }
+ return null;
+ }
+}
diff --git a/pear-modules/pear-system/src/main/java/com/pearadmin/system/enums/LuckActivityTypeEnum.java b/pear-modules/pear-system/src/main/java/com/pearadmin/system/enums/LuckActivityTypeEnum.java
new file mode 100644
index 0000000000000000000000000000000000000000..649fb294db745c12b196c2a3c9edb51633d81bad
--- /dev/null
+++ b/pear-modules/pear-system/src/main/java/com/pearadmin/system/enums/LuckActivityTypeEnum.java
@@ -0,0 +1,37 @@
+package com.pearadmin.system.enums;
+
+import java.util.Objects;
+
+/**
+ * 活动状态
+ */
+public enum LuckActivityTypeEnum {
+
+ MANUAL(1, "手动开奖"),
+ TIMING(2, "定时开奖");
+
+ private Integer code;
+ private String desc;
+
+ private LuckActivityTypeEnum(Integer code, String desc) {
+ this.code = code;
+ this.desc = desc;
+ }
+
+ public Integer getCode() {
+ return code;
+ }
+
+ public String getDesc() {
+ return desc;
+ }
+
+ public static LuckActivityTypeEnum get(Integer code) {
+ for (LuckActivityTypeEnum value : values()) {
+ if (Objects.equals(value.code, code)) {
+ return value;
+ }
+ }
+ return null;
+ }
+}
diff --git a/pear-modules/pear-system/src/main/java/com/pearadmin/system/enums/LuckPrizeStatusEnum.java b/pear-modules/pear-system/src/main/java/com/pearadmin/system/enums/LuckPrizeStatusEnum.java
new file mode 100644
index 0000000000000000000000000000000000000000..e65ea88743f9f113c74d2d2ff78af24bc9213e84
--- /dev/null
+++ b/pear-modules/pear-system/src/main/java/com/pearadmin/system/enums/LuckPrizeStatusEnum.java
@@ -0,0 +1,37 @@
+package com.pearadmin.system.enums;
+
+import java.util.Objects;
+
+/**
+ * 奖品状态
+ */
+public enum LuckPrizeStatusEnum {
+
+ WKJ(0, "未开奖"),
+ YKJ(1, "已开奖");
+
+ private Integer code;
+ private String desc;
+
+ private LuckPrizeStatusEnum(Integer code, String desc) {
+ this.code = code;
+ this.desc = desc;
+ }
+
+ public Integer getCode() {
+ return code;
+ }
+
+ public String getDesc() {
+ return desc;
+ }
+
+ public static LuckPrizeStatusEnum get(Integer code) {
+ for (LuckPrizeStatusEnum value : values()) {
+ if (Objects.equals(value.code, code)) {
+ return value;
+ }
+ }
+ return null;
+ }
+}
diff --git a/pear-modules/pear-system/src/main/java/com/pearadmin/system/mapper/LuckActivityMapper.java b/pear-modules/pear-system/src/main/java/com/pearadmin/system/mapper/LuckActivityMapper.java
new file mode 100644
index 0000000000000000000000000000000000000000..2bf29c4882ffddfa2c79df03be2f1b100a1fed96
--- /dev/null
+++ b/pear-modules/pear-system/src/main/java/com/pearadmin/system/mapper/LuckActivityMapper.java
@@ -0,0 +1,68 @@
+package com.pearadmin.system.mapper;
+
+import org.apache.ibatis.annotations.Mapper;
+import java.util.List;
+import java.util.Set;
+
+import com.pearadmin.system.domain.LuckActivity;
+import org.apache.ibatis.annotations.Param;
+
+/**
+ * 抽奖活动设置Mapper接口
+ *
+ * @author zhangsenxiang
+ * @date 2021-03-09
+ */
+@Mapper
+public interface LuckActivityMapper
+{
+ /**
+ * 查询抽奖活动设置
+ *
+ * @param id 抽奖活动设置ID
+ * @return 抽奖活动设置
+ */
+ public LuckActivity selectLuckActivityById(Long id);
+
+ /**
+ * 查询抽奖活动设置列表
+ *
+ * @param luckActivity 抽奖活动设置
+ * @return 抽奖活动设置集合
+ */
+ List selectLuckActivityList(LuckActivity luckActivity);
+
+ /**
+ * 新增抽奖活动设置
+ *
+ * @param luckActivity 抽奖活动设置
+ * @return 结果
+ */
+ int insertLuckActivity(LuckActivity luckActivity);
+
+ /**
+ * 修改抽奖活动设置
+ *
+ * @param luckActivity 抽奖活动设置
+ * @return 结果
+ */
+ int updateLuckActivity(LuckActivity luckActivity);
+
+ /**
+ * 删除抽奖活动设置
+ *
+ * @param id 抽奖活动设置ID
+ * @return 结果
+ */
+ int deleteLuckActivityById(Long id);
+
+ /**
+ * 批量删除抽奖活动设置
+ *
+ * @param ids 需要删除的数据ID
+ * @return 结果
+ */
+ int deleteLuckActivityByIds(String[] ids);
+
+ List selectLuckActivityByIds(@Param("ids") Set ids);
+}
diff --git a/pear-modules/pear-system/src/main/java/com/pearadmin/system/mapper/LuckJoinUserMapper.java b/pear-modules/pear-system/src/main/java/com/pearadmin/system/mapper/LuckJoinUserMapper.java
new file mode 100644
index 0000000000000000000000000000000000000000..f14ec3cb9afcd50291319876169ddf62748a6c60
--- /dev/null
+++ b/pear-modules/pear-system/src/main/java/com/pearadmin/system/mapper/LuckJoinUserMapper.java
@@ -0,0 +1,81 @@
+package com.pearadmin.system.mapper;
+
+import io.swagger.models.auth.In;
+import org.apache.ibatis.annotations.Mapper;
+import java.util.List;
+import com.pearadmin.system.domain.LuckJoinUser;
+import org.apache.ibatis.annotations.Param;
+
+/**
+ * 抽奖参加人员Mapper接口
+ *
+ * @author zhangsenxiang
+ * @date 2021-03-03
+ */
+@Mapper
+public interface LuckJoinUserMapper
+{
+ /**
+ * 查询抽奖参加人员
+ *
+ * @param id 抽奖参加人员ID
+ * @return 抽奖参加人员
+ */
+ public LuckJoinUser selectLuckJoinUserById(Long id);
+
+ /**
+ * 查询抽奖参加人员列表
+ *
+ * @param luckJoinUser 抽奖参加人员
+ * @return 抽奖参加人员集合
+ */
+ List selectLuckJoinUserList(LuckJoinUser luckJoinUser);
+
+ /**
+ * 新增抽奖参加人员
+ *
+ * @param luckJoinUser 抽奖参加人员
+ * @return 结果
+ */
+ int insertLuckJoinUser(LuckJoinUser luckJoinUser);
+
+ /**
+ * 修改抽奖参加人员
+ *
+ * @param luckJoinUser 抽奖参加人员
+ * @return 结果
+ */
+ int updateLuckJoinUser(LuckJoinUser luckJoinUser);
+
+ /**
+ * 批量修改抽奖参加人员
+ *
+ * @param luckJoinUser 抽奖参加人员
+ * @return 结果
+ */
+ int batchUpdateLuckJoinUser(@Param("list") List list,@Param("activeNo")Integer activeNo);
+
+ /**
+ * 删除抽奖参加人员
+ *
+ * @param id 抽奖参加人员ID
+ * @return 结果
+ */
+ int deleteLuckJoinUserById(Long id);
+
+ /**
+ * 批量删除抽奖参加人员
+ *
+ * @param ids 需要删除的数据ID
+ * @return 结果
+ */
+ int deleteLuckJoinUserByIds(String[] ids);
+
+ int batchSave(List list);
+
+ /**
+ *
+ * @param activeNo
+ */
+ int deleteByActivityId(@Param("activeNo") Long activeNo);
+}
diff --git a/pear-modules/pear-system/src/main/java/com/pearadmin/system/mapper/LuckPrizeMapper.java b/pear-modules/pear-system/src/main/java/com/pearadmin/system/mapper/LuckPrizeMapper.java
new file mode 100644
index 0000000000000000000000000000000000000000..92dedca04ce9f9436c68a5e7a27184a1182fbd97
--- /dev/null
+++ b/pear-modules/pear-system/src/main/java/com/pearadmin/system/mapper/LuckPrizeMapper.java
@@ -0,0 +1,70 @@
+package com.pearadmin.system.mapper;
+
+import org.apache.ibatis.annotations.Mapper;
+import java.util.List;
+import java.util.Set;
+
+import com.pearadmin.system.domain.LuckPrize;
+import org.apache.ibatis.annotations.Param;
+
+/**
+ * 奖品设置Mapper接口
+ *
+ * @author zhangsenxiang
+ * @date 2021-03-03
+ */
+@Mapper
+public interface LuckPrizeMapper
+{
+ /**
+ * 查询奖品设置
+ *
+ * @param id 奖品设置ID
+ * @return 奖品设置
+ */
+ public LuckPrize selectLuckPrizeById(Integer id);
+
+ /**
+ * 查询奖品设置列表
+ *
+ * @param luckPrize 奖品设置
+ * @return 奖品设置集合
+ */
+ List selectLuckPrizeList(LuckPrize luckPrize);
+
+ /**
+ * 新增奖品设置
+ *
+ * @param luckPrize 奖品设置
+ * @return 结果
+ */
+ int insertLuckPrize(LuckPrize luckPrize);
+
+ /**
+ * 修改奖品设置
+ *
+ * @param luckPrize 奖品设置
+ * @return 结果
+ */
+ int updateLuckPrize(LuckPrize luckPrize);
+
+ /**
+ * 删除奖品设置
+ *
+ * @param id 奖品设置ID
+ * @return 结果
+ */
+ int deleteLuckPrizeById(Integer id);
+
+ /**
+ * 批量删除奖品设置
+ *
+ * @param ids 需要删除的数据ID
+ * @return 结果
+ */
+ int deleteLuckPrizeByIds(String[] ids);
+
+ List selectExpireTimePrizes();
+
+ List selectLuckPrizeByLuckCode(@Param("luckCodes")Set luckCodes);
+}
diff --git a/pear-modules/pear-system/src/main/java/com/pearadmin/system/mapper/LuckUserMapper.java b/pear-modules/pear-system/src/main/java/com/pearadmin/system/mapper/LuckUserMapper.java
new file mode 100644
index 0000000000000000000000000000000000000000..81fbce7ad5d584052b03abdf5dfbd803a362a6ab
--- /dev/null
+++ b/pear-modules/pear-system/src/main/java/com/pearadmin/system/mapper/LuckUserMapper.java
@@ -0,0 +1,77 @@
+package com.pearadmin.system.mapper;
+
+import org.apache.ibatis.annotations.Mapper;
+import java.util.List;
+import java.util.Set;
+
+import com.pearadmin.system.domain.LuckUser;
+import org.apache.ibatis.annotations.Param;
+
+/**
+ * 中奖名单Mapper接口
+ *
+ * @author zhangsenxiang
+ * @date 2021-03-03
+ */
+@Mapper
+public interface LuckUserMapper
+{
+ /**
+ * 查询中奖名单
+ *
+ * @param id 中奖名单ID
+ * @return 中奖名单
+ */
+ public LuckUser selectLuckUserById(Long id);
+
+ /**
+ * 查询中奖名单列表
+ *
+ * @param luckUser 中奖名单
+ * @return 中奖名单集合
+ */
+ List selectLuckUserList(LuckUser luckUser);
+
+ /**
+ * 新增中奖名单
+ *
+ * @param luckUser 中奖名单
+ * @return 结果
+ */
+ int insertLuckUser(LuckUser luckUser);
+
+ /**
+ * 批量新增中奖名单
+ *
+ * @param luckUsers 中奖名单集合
+ * @return 结果
+ */
+ int insertBatch(List luckUsers);
+
+ /**
+ * 修改中奖名单
+ *
+ * @param luckUser 中奖名单
+ * @return 结果
+ */
+ int updateLuckUser(LuckUser luckUser);
+
+ /**
+ * 删除中奖名单
+ *
+ * @param id 中奖名单ID
+ * @return 结果
+ */
+ int deleteLuckUserById(Long id);
+
+ /**
+ * 批量删除中奖名单
+ *
+ * @param ids 需要删除的数据ID
+ * @return 结果
+ */
+ int deleteLuckUserByIds(String[] ids);
+
+ List selectLuckUserListByActivityIds(@Param("activityIds")Set activityIds);
+
+}
diff --git a/pear-modules/pear-system/src/main/java/com/pearadmin/system/mapper/UserMapper.java b/pear-modules/pear-system/src/main/java/com/pearadmin/system/mapper/UserMapper.java
new file mode 100644
index 0000000000000000000000000000000000000000..fc30d39af14dafb14ac2bd0286cf8a1cc1becc78
--- /dev/null
+++ b/pear-modules/pear-system/src/main/java/com/pearadmin/system/mapper/UserMapper.java
@@ -0,0 +1,14 @@
+package com.pearadmin.system.mapper;
+
+import com.baomidou.dynamic.datasource.annotation.DS;
+import com.pearadmin.system.domain.ZsxqUser;
+import org.apache.ibatis.annotations.Mapper;
+
+import java.util.List;
+
+@DS("stormzhang")
+@Mapper
+public interface UserMapper {
+
+ List selectByNumbers(String[] numbers);
+}
diff --git a/pear-modules/pear-system/src/main/java/com/pearadmin/system/mapper/UsersAddressMapper.java b/pear-modules/pear-system/src/main/java/com/pearadmin/system/mapper/UsersAddressMapper.java
new file mode 100644
index 0000000000000000000000000000000000000000..3f8a158f2d950e0956ed54f9eafaf4349ad8ee51
--- /dev/null
+++ b/pear-modules/pear-system/src/main/java/com/pearadmin/system/mapper/UsersAddressMapper.java
@@ -0,0 +1,69 @@
+package com.pearadmin.system.mapper;
+
+import com.baomidou.dynamic.datasource.annotation.DS;
+import com.pearadmin.system.domain.UsersAddress;
+import org.apache.ibatis.annotations.Mapper;
+import org.apache.ibatis.annotations.Param;
+
+import java.util.List;
+import java.util.Set;
+
+/**
+ * 用户地址Mapper接口
+ *
+ * @author rufeng
+ * @date 2021-04-14
+ */
+@DS("stormzhang")
+@Mapper
+public interface UsersAddressMapper {
+ /**
+ * 查询用户地址
+ *
+ * @param userId 用户地址ID
+ * @return 用户地址
+ */
+ public UsersAddress selectUsersAddressById(String userId);
+
+ /**
+ * 查询用户地址列表
+ *
+ * @param usersAddress 用户地址
+ * @return 用户地址集合
+ */
+ List selectUsersAddressList(UsersAddress usersAddress);
+
+ /**
+ * 新增用户地址
+ *
+ * @param usersAddress 用户地址
+ * @return 结果
+ */
+ int insertUsersAddress(UsersAddress usersAddress);
+
+ /**
+ * 修改用户地址
+ *
+ * @param usersAddress 用户地址
+ * @return 结果
+ */
+ int updateUsersAddress(UsersAddress usersAddress);
+
+ /**
+ * 删除用户地址
+ *
+ * @param userid 用户地址ID
+ * @return 结果
+ */
+ int deleteUsersAddressById(String userid);
+
+ /**
+ * 批量删除用户地址
+ *
+ * @param userids 需要删除的数据ID
+ * @return 结果
+ */
+ int deleteUsersAddressByIds(String[] userids);
+
+ List selectUsersAddressByIds(@Param("userNumbers")Set userNumbers);
+}
diff --git a/pear-modules/pear-system/src/main/java/com/pearadmin/system/mapper/xml/LuckActivityMapper.xml b/pear-modules/pear-system/src/main/java/com/pearadmin/system/mapper/xml/LuckActivityMapper.xml
new file mode 100644
index 0000000000000000000000000000000000000000..006eec90ca9b1f3bde2df7f8c9f87f2413ce91c8
--- /dev/null
+++ b/pear-modules/pear-system/src/main/java/com/pearadmin/system/mapper/xml/LuckActivityMapper.xml
@@ -0,0 +1,97 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ select id, activity_name, activity_date, start_date, end_date, status, draw_type, create_id, create_name from luck_activity
+
+
+
+
+
+
+
+
+ insert into luck_activity
+
+ id,
+ activity_name,
+ activity_date,
+ start_date,
+ end_date,
+ draw_type,
+ status,
+ create_id,
+ create_name,
+
+
+ #{id},
+ #{activityName},
+ #{activityDate},
+ #{startDate},
+ #{endDate},
+ #{drawType},
+ #{status},
+ #{createId},
+ #{createName},
+
+
+
+
+ update luck_activity
+
+ activity_name = #{activityName},
+ activity_date = #{activityDate},
+ start_date = #{startDate},
+ end_date = #{endDate},
+ status = #{status},
+ draw_type = #{drawType},
+ create_id = #{createId},
+ create_name = #{createName},
+
+ where id = #{id}
+
+
+
+ delete from luck_activity where id = #{id}
+
+
+
+ delete from luck_activity where id in
+
+ #{id}
+
+
+
+
\ No newline at end of file
diff --git a/pear-modules/pear-system/src/main/java/com/pearadmin/system/mapper/xml/LuckJoinUserMapper.xml b/pear-modules/pear-system/src/main/java/com/pearadmin/system/mapper/xml/LuckJoinUserMapper.xml
new file mode 100644
index 0000000000000000000000000000000000000000..562998ffb3ca95968c135421c2946b2a40aef789
--- /dev/null
+++ b/pear-modules/pear-system/src/main/java/com/pearadmin/system/mapper/xml/LuckJoinUserMapper.xml
@@ -0,0 +1,111 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ select id, number, nick_name, active_no, luck_number, is_deleted from luck_join_user
+
+
+
+
+
+
+
+ insert into luck_join_user
+
+ number,
+ nick_name,
+ active_no,
+ luck_number,
+ is_deleted,
+
+
+ #{number},
+ #{nickName},
+ #{activeNo},
+ #{luckNumber},
+ #{isDeleted},
+
+
+
+ insert into luck_join_user
+ (
+ number,
+ nick_name,
+ active_no,
+ luck_number,
+ is_deleted
+ )
+ values
+
+ (
+ #{item.number},
+ #{item.nickName},
+ #{item.activeNo},
+ #{item.luckNumber},
+ 0
+ )
+
+
+
+
+ update luck_join_user
+
+ number = #{number},
+ nick_name = #{nickName},
+ active_no = #{activeNo},
+ luck_number = #{luckNumber},
+ is_deleted = #{isDeleted},
+
+ where id = #{id}
+
+
+
+ update luck_join_user
+ set luck_number = luck_number+1
+ where number in(
+
+ #{item.number}
+
+ )
+ and active_no = #{activeNo}
+
+
+
+ delete from luck_join_user where id = #{id}
+
+
+
+ delete from luck_join_user where id in
+
+ #{id}
+
+
+
+
+ delete from luck_join_user where active_no= #{activeNo}
+
+
+
\ No newline at end of file
diff --git a/pear-modules/pear-system/src/main/java/com/pearadmin/system/mapper/xml/LuckPrizeMapper.xml b/pear-modules/pear-system/src/main/java/com/pearadmin/system/mapper/xml/LuckPrizeMapper.xml
new file mode 100644
index 0000000000000000000000000000000000000000..bccdef70749cc49ed79edd4e402005ce6bb21ec8
--- /dev/null
+++ b/pear-modules/pear-system/src/main/java/com/pearadmin/system/mapper/xml/LuckPrizeMapper.xml
@@ -0,0 +1,114 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ select id, grade, prize_name, luck_code, balance, active_no, sponsor , pic_url , open_time from luck_prize
+
+
+
+ select p.id, p.grade, p.prize_name, p.luck_code, p.balance, p.active_no, p.sponsor, p.pic_url, p.status, p.open_time, a.activity_name from luck_prize p left join luck_activity a on p.active_no = a.id
+
+
+
+
+
+
+
+
+
+
+ insert into luck_prize
+
+ grade,
+ prize_name,
+ luck_code,
+ balance,
+ active_no,
+ sponsor,
+ pic_url,
+ status,
+ open_time,
+
+
+ #{grade},
+ #{prizeName},
+ #{luckCode},
+ #{balance},
+ #{activeNo},
+ #{sponsor},
+ #{picUrl},
+ #{status},
+ #{openTime},
+
+
+
+
+ update luck_prize
+
+ grade = #{grade},
+ prize_name = #{prizeName},
+ luck_code = #{luckCode},
+ balance = #{balance},
+ active_no = #{activeNo},
+ sponsor = #{sponsor},
+ pic_url=#{picUrl},
+ status=#{status},
+ open_time=#{openTime},
+
+ where id = #{id}
+
+
+
+ delete from luck_prize where id = #{id}
+
+
+
+ delete from luck_prize where id in
+
+ #{id}
+
+
+
+
\ No newline at end of file
diff --git a/pear-modules/pear-system/src/main/java/com/pearadmin/system/mapper/xml/LuckUserMapper.xml b/pear-modules/pear-system/src/main/java/com/pearadmin/system/mapper/xml/LuckUserMapper.xml
new file mode 100644
index 0000000000000000000000000000000000000000..8488200aee8c62694a4600f01a731d6480b556c5
--- /dev/null
+++ b/pear-modules/pear-system/src/main/java/com/pearadmin/system/mapper/xml/LuckUserMapper.xml
@@ -0,0 +1,103 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ number, nick_name, luck_code, luck_date, active_no
+
+
+
+ select id, number, nick_name, luck_code, luck_date, active_no from luck_user
+
+
+
+
+
+
+
+
+ insert into luck_user
+
+ number,
+ nick_name,
+ luck_code,
+ luck_date,
+ active_no,
+
+
+ #{number},
+ #{nickName},
+ #{luckCode},
+ #{luckDate},
+ #{activeNo},
+
+
+
+
+ insert into luck_user ( )
+ values
+
+ (
+ #{item.number},
+ #{item.nickName},
+ #{item.luckCode},
+ #{item.luckDate},
+ #{item.activeNo}
+ )
+
+
+
+
+
+ update luck_user
+
+ number = #{number},
+ nick_name = #{nickName},
+ luck_code = #{luckCode},
+ luck_date = #{luckDate},
+ active_no = #{activeNo},
+
+ where id = #{id}
+
+
+
+ delete from luck_user where id = #{id}
+
+
+
+ delete from luck_user where id in
+
+ #{id}
+
+
+
+
\ No newline at end of file
diff --git a/pear-modules/pear-system/src/main/java/com/pearadmin/system/mapper/xml/UserMapper.xml b/pear-modules/pear-system/src/main/java/com/pearadmin/system/mapper/xml/UserMapper.xml
new file mode 100644
index 0000000000000000000000000000000000000000..69e8dd0fc79b3a5d7e75e7198256aebddf23635f
--- /dev/null
+++ b/pear-modules/pear-system/src/main/java/com/pearadmin/system/mapper/xml/UserMapper.xml
@@ -0,0 +1,42 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ select `group_id` ,`user_id` , `name` ,
+ `number` ,
+ `avatar_url` ,
+ `description`,
+ `join_time`,
+ `update_time` ,
+ `login_time`,
+ `expired_time`,
+ `isolated`,
+ `status` from zsxq_users
+
+
+
+
+
\ No newline at end of file
diff --git a/pear-modules/pear-system/src/main/java/com/pearadmin/system/mapper/xml/UsersAddressMapper.xml b/pear-modules/pear-system/src/main/java/com/pearadmin/system/mapper/xml/UsersAddressMapper.xml
new file mode 100644
index 0000000000000000000000000000000000000000..5488a92c1f83d1895d49969e279e3a97a0526ede
--- /dev/null
+++ b/pear-modules/pear-system/src/main/java/com/pearadmin/system/mapper/xml/UsersAddressMapper.xml
@@ -0,0 +1,103 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ select userId, nickname, username, phoneNumber, province, city, county, details, wechatId, wechatName from users_address
+
+
+
+
+
+
+
+
+ insert into users_address
+
+ userId,
+ nickname,
+ username,
+ phoneNumber,
+ province,
+ city,
+ county,
+ details,
+ wechatId,
+ wechatName,
+ createTime,
+
+
+ #{userid},
+ #{nickname},
+ #{username},
+ #{phonenumber},
+ #{province},
+ #{city},
+ #{county},
+ #{details},
+ #{wechatid},
+ #{wechatname},
+ #{createtime},
+
+
+
+
+ update users_address
+
+ nickname = #{nickname},
+ username = #{username},
+ phoneNumber = #{phonenumber},
+ province = #{province},
+ city = #{city},
+ county = #{county},
+ details = #{details},
+ wechatId = #{wechatid},
+ wechatName = #{wechatname},
+ createTime = #{createtime},
+
+ where userId = #{userid}
+
+
+
+ delete from users_address where userId = #{userid}
+
+
+
+ delete from users_address where userId in
+
+ #{userid}
+
+
+
+
\ No newline at end of file
diff --git a/pear-modules/pear-system/src/main/java/com/pearadmin/system/service/ILuckActivityService.java b/pear-modules/pear-system/src/main/java/com/pearadmin/system/service/ILuckActivityService.java
new file mode 100644
index 0000000000000000000000000000000000000000..06f9688b63fd1c3022bc13b68d4ca93740297616
--- /dev/null
+++ b/pear-modules/pear-system/src/main/java/com/pearadmin/system/service/ILuckActivityService.java
@@ -0,0 +1,121 @@
+package com.pearadmin.system.service;
+
+import com.github.pagehelper.PageInfo;
+import com.pearadmin.common.web.domain.request.PageDomain;
+import com.pearadmin.common.web.domain.response.Result;
+import com.pearadmin.system.domain.LuckActivity;
+import org.springframework.web.multipart.MultipartFile;
+
+import javax.servlet.http.HttpServletRequest;
+import javax.servlet.http.HttpServletResponse;
+import java.util.List;
+import java.util.Map;
+
+/**
+ * 抽奖活动设置Service接口
+ *
+ * @author zhangsenxiang
+ * @date 2021-03-09
+ */
+public interface ILuckActivityService {
+ /**
+ * 查询抽奖活动设置
+ *
+ * @param id 抽奖活动设置ID
+ * @return 抽奖活动设置
+ */
+ LuckActivity selectLuckActivityById(Long id);
+
+
+ /**
+ * 查询抽奖活动设置
+ *
+ * @param ${classsName} 抽奖活动设置
+ * @param pageDomain
+ * @return 抽奖活动设置 分页集合
+ */
+ PageInfo selectLuckActivityPage(LuckActivity luckActivity, PageDomain pageDomain);
+
+ /**
+ * 查询抽奖活动设置列表
+ *
+ * @param luckActivity 抽奖活动设置
+ * @return 抽奖活动设置集合
+ */
+ List selectLuckActivityList(LuckActivity luckActivity);
+
+ /**
+ * 新增抽奖活动设置
+ *
+ * @param luckActivity 抽奖活动设置
+ * @return 结果
+ */
+ int insertLuckActivity(LuckActivity luckActivity);
+
+ /**
+ * 修改抽奖活动设置
+ *
+ * @param luckActivity 抽奖活动设置
+ * @return 结果
+ */
+ int updateLuckActivity(LuckActivity luckActivity);
+
+ /**
+ * 批量删除抽奖活动设置
+ *
+ * @param ids 需要删除的数据ID
+ * @return 结果
+ */
+ int deleteLuckActivityByIds(String[] ids);
+
+ /**
+ * 删除抽奖活动设置信息
+ *
+ * @param id 抽奖活动设置ID
+ * @return 结果
+ */
+ int deleteLuckActivityById(Long id);
+
+ /**
+ * 生成活动地址二维码
+ *
+ * @param id
+ * @param request
+ * @param response
+ */
+ void generateQrcode(Long id, HttpServletRequest request, HttpServletResponse response) throws Exception;
+
+ /**
+ * 上传活动下的用户
+ *
+ * @param multipartFile
+ * @param id
+ * @param type
+ * @return
+ */
+ Result uploadPrizeUser(MultipartFile multipartFile, Long id, Integer type);
+
+ Result exportPrizeUser(String activityIds);
+
+ Result checkUploadStatus(Long activityNo, Integer type);
+
+ Result clearUploadStatus(Long activityNo, Integer type);
+
+ Result getUploadStatus(Integer type);
+
+ /**
+ * 查询可绑定活动信息
+ *
+ * @return
+ */
+ Result>> getActiveNos();
+
+ /**
+ * 下载模板文件
+ * @param request
+ * @param response
+ */
+ void dowmloadTemplete(HttpServletRequest request, HttpServletResponse response) throws Exception;
+
+
+}
diff --git a/pear-modules/pear-system/src/main/java/com/pearadmin/system/service/ILuckJoinUserService.java b/pear-modules/pear-system/src/main/java/com/pearadmin/system/service/ILuckJoinUserService.java
new file mode 100644
index 0000000000000000000000000000000000000000..53b136dbf67a143198309cbafd9b8d76eabc17f1
--- /dev/null
+++ b/pear-modules/pear-system/src/main/java/com/pearadmin/system/service/ILuckJoinUserService.java
@@ -0,0 +1,73 @@
+package com.pearadmin.system.service;
+
+import java.util.List;
+import com.github.pagehelper.PageInfo;
+import com.pearadmin.common.web.domain.request.PageDomain;
+import com.pearadmin.system.domain.LuckJoinUser;
+
+/**
+ * 抽奖参加人员Service接口
+ *
+ * @author zhangsenxiang
+ * @date 2021-03-03
+ */
+public interface ILuckJoinUserService
+{
+ /**
+ * 查询抽奖参加人员
+ *
+ * @param id 抽奖参加人员ID
+ * @return 抽奖参加人员
+ */
+ LuckJoinUser selectLuckJoinUserById(Long id);
+
+
+ /**
+ * 查询抽奖参加人员
+ * @param ${classsName} 抽奖参加人员
+ * @param pageDomain
+ * @return 抽奖参加人员 分页集合
+ * */
+ PageInfo selectLuckJoinUserPage(LuckJoinUser luckJoinUser, PageDomain pageDomain);
+
+ /**
+ * 查询抽奖参加人员列表
+ *
+ * @param luckJoinUser 抽奖参加人员
+ * @return 抽奖参加人员集合
+ */
+ List selectLuckJoinUserList(LuckJoinUser luckJoinUser);
+
+ /**
+ * 新增抽奖参加人员
+ *
+ * @param luckJoinUser 抽奖参加人员
+ * @return 结果
+ */
+ int insertLuckJoinUser(LuckJoinUser luckJoinUser);
+
+ /**
+ * 修改抽奖参加人员
+ *
+ * @param luckJoinUser 抽奖参加人员
+ * @return 结果
+ */
+ int updateLuckJoinUser(LuckJoinUser luckJoinUser);
+
+ /**
+ * 批量删除抽奖参加人员
+ *
+ * @param ids 需要删除的数据ID
+ * @return 结果
+ */
+ int deleteLuckJoinUserByIds(String[] ids);
+
+ /**
+ * 删除抽奖参加人员信息
+ *
+ * @param id 抽奖参加人员ID
+ * @return 结果
+ */
+ int deleteLuckJoinUserById(Long id);
+
+}
diff --git a/pear-modules/pear-system/src/main/java/com/pearadmin/system/service/ILuckPrizeService.java b/pear-modules/pear-system/src/main/java/com/pearadmin/system/service/ILuckPrizeService.java
new file mode 100644
index 0000000000000000000000000000000000000000..b70d477a9d3303e552165f9b3585a6500e5a3f48
--- /dev/null
+++ b/pear-modules/pear-system/src/main/java/com/pearadmin/system/service/ILuckPrizeService.java
@@ -0,0 +1,88 @@
+package com.pearadmin.system.service;
+
+import java.util.List;
+import java.util.Map;
+
+import com.github.pagehelper.PageInfo;
+import com.pearadmin.common.web.domain.request.PageDomain;
+import com.pearadmin.common.web.domain.response.Result;
+import com.pearadmin.system.domain.LuckPrize;
+
+/**
+ * 奖品设置Service接口
+ *
+ * @author zhangsenxiang
+ * @date 2021-03-03
+ */
+public interface ILuckPrizeService {
+ /**
+ * 查询奖品设置
+ *
+ * @param id 奖品设置ID
+ * @return 奖品设置
+ */
+ LuckPrize selectLuckPrizeById(Integer id);
+
+
+ /**
+ * 查询奖品设置
+ *
+ * @param ${classsName} 奖品设置
+ * @param pageDomain
+ * @return 奖品设置 分页集合
+ */
+ PageInfo selectLuckPrizePage(LuckPrize luckPrize, PageDomain pageDomain);
+
+ /**
+ * 查询奖品设置列表
+ *
+ * @param luckPrize 奖品设置
+ * @return 奖品设置集合
+ */
+ List selectLuckPrizeList(LuckPrize luckPrize);
+
+ /**
+ * 新增奖品设置
+ *
+ * @param luckPrize 奖品设置
+ * @return 结果
+ */
+ int insertLuckPrize(LuckPrize luckPrize);
+
+ /**
+ * 修改奖品设置
+ *
+ * @param luckPrize 奖品设置
+ * @return 结果
+ */
+ int updateLuckPrize(LuckPrize luckPrize);
+
+ /**
+ * 批量删除奖品设置
+ *
+ * @param ids 需要删除的数据ID
+ * @return 结果
+ */
+ int deleteLuckPrizeByIds(String[] ids);
+
+ /**
+ * 删除奖品设置信息
+ *
+ * @param id 奖品设置ID
+ * @return 结果
+ */
+ int deleteLuckPrizeById(Integer id);
+
+ /**
+ * 开始抽奖
+ *
+ * @param id 奖品设置ID
+ * @return 结果
+ */
+ int start(Integer id);
+
+
+ void openPrizeByJob();
+
+
+}
diff --git a/pear-modules/pear-system/src/main/java/com/pearadmin/system/service/ILuckUserService.java b/pear-modules/pear-system/src/main/java/com/pearadmin/system/service/ILuckUserService.java
new file mode 100644
index 0000000000000000000000000000000000000000..7457dc822c4042585ff7c6b3816b9297bbea48b7
--- /dev/null
+++ b/pear-modules/pear-system/src/main/java/com/pearadmin/system/service/ILuckUserService.java
@@ -0,0 +1,73 @@
+package com.pearadmin.system.service;
+
+import java.util.List;
+import com.github.pagehelper.PageInfo;
+import com.pearadmin.common.web.domain.request.PageDomain;
+import com.pearadmin.system.domain.LuckUser;
+
+/**
+ * 中奖名单Service接口
+ *
+ * @author zhangsenxiang
+ * @date 2021-03-03
+ */
+public interface ILuckUserService
+{
+ /**
+ * 查询中奖名单
+ *
+ * @param id 中奖名单ID
+ * @return 中奖名单
+ */
+ LuckUser selectLuckUserById(Long id);
+
+
+ /**
+ * 查询中奖名单
+ * @param ${classsName} 中奖名单
+ * @param pageDomain
+ * @return 中奖名单 分页集合
+ * */
+ PageInfo selectLuckUserPage(LuckUser luckUser, PageDomain pageDomain);
+
+ /**
+ * 查询中奖名单列表
+ *
+ * @param luckUser 中奖名单
+ * @return 中奖名单集合
+ */
+ List selectLuckUserList(LuckUser luckUser);
+
+ /**
+ * 新增中奖名单
+ *
+ * @param luckUser 中奖名单
+ * @return 结果
+ */
+ int insertLuckUser(LuckUser luckUser);
+
+ /**
+ * 修改中奖名单
+ *
+ * @param luckUser 中奖名单
+ * @return 结果
+ */
+ int updateLuckUser(LuckUser luckUser);
+
+ /**
+ * 批量删除中奖名单
+ *
+ * @param ids 需要删除的数据ID
+ * @return 结果
+ */
+ int deleteLuckUserByIds(String[] ids);
+
+ /**
+ * 删除中奖名单信息
+ *
+ * @param id 中奖名单ID
+ * @return 结果
+ */
+ int deleteLuckUserById(Long id);
+
+}
diff --git a/pear-modules/pear-system/src/main/java/com/pearadmin/system/service/IUsersAddressService.java b/pear-modules/pear-system/src/main/java/com/pearadmin/system/service/IUsersAddressService.java
new file mode 100644
index 0000000000000000000000000000000000000000..3c5c214e1245f8e228381137153acd188183f6bf
--- /dev/null
+++ b/pear-modules/pear-system/src/main/java/com/pearadmin/system/service/IUsersAddressService.java
@@ -0,0 +1,73 @@
+package com.pearadmin.system.service;
+
+import java.util.List;
+import com.github.pagehelper.PageInfo;
+import com.pearadmin.common.web.domain.request.PageDomain;
+import com.pearadmin.system.domain.UsersAddress;
+
+/**
+ * 用户地址Service接口
+ *
+ * @author rufeng
+ * @date 2021-04-14
+ */
+public interface IUsersAddressService
+{
+ /**
+ * 查询用户地址
+ *
+ * @param userid 用户地址ID
+ * @return 用户地址
+ */
+ UsersAddress selectUsersAddressById(String userid);
+
+
+ /**
+ * 查询用户地址
+ * @param ${classsName} 用户地址
+ * @param pageDomain
+ * @return 用户地址 分页集合
+ * */
+ PageInfo selectUsersAddressPage(UsersAddress usersAddress, PageDomain pageDomain);
+
+ /**
+ * 查询用户地址列表
+ *
+ * @param usersAddress 用户地址
+ * @return 用户地址集合
+ */
+ List selectUsersAddressList(UsersAddress usersAddress);
+
+ /**
+ * 新增用户地址
+ *
+ * @param usersAddress 用户地址
+ * @return 结果
+ */
+ int insertUsersAddress(UsersAddress usersAddress);
+
+ /**
+ * 修改用户地址
+ *
+ * @param usersAddress 用户地址
+ * @return 结果
+ */
+ int updateUsersAddress(UsersAddress usersAddress);
+
+ /**
+ * 批量删除用户地址
+ *
+ * @param ids 需要删除的数据ID
+ * @return 结果
+ */
+ int deleteUsersAddressByIds(String[] ids);
+
+ /**
+ * 删除用户地址信息
+ *
+ * @param userid 用户地址ID
+ * @return 结果
+ */
+ int deleteUsersAddressById(String userid);
+
+}
diff --git a/pear-modules/pear-system/src/main/java/com/pearadmin/system/service/impl/LuckActivityServiceImpl.java b/pear-modules/pear-system/src/main/java/com/pearadmin/system/service/impl/LuckActivityServiceImpl.java
new file mode 100644
index 0000000000000000000000000000000000000000..ba6ace677b83be689969d6f5949cc08c2f3de7f0
--- /dev/null
+++ b/pear-modules/pear-system/src/main/java/com/pearadmin/system/service/impl/LuckActivityServiceImpl.java
@@ -0,0 +1,376 @@
+package com.pearadmin.system.service.impl;
+
+import cn.hutool.core.collection.CollectionUtil;
+import cn.hutool.core.io.FileUtil;
+import cn.hutool.core.io.file.FileReader;
+import cn.hutool.core.io.file.FileWriter;
+import com.alibaba.excel.EasyExcel;
+import com.alibaba.fastjson.JSON;
+import com.github.pagehelper.PageHelper;
+import com.github.pagehelper.PageInfo;
+import com.pearadmin.common.tools.qrcode.QRCodeUtil;
+import com.pearadmin.common.tools.secure.SecurityUtil;
+import com.pearadmin.common.tools.upload.OssBootUtil;
+import com.pearadmin.common.web.domain.request.PageDomain;
+import com.pearadmin.common.web.domain.response.Result;
+import com.pearadmin.system.domain.*;
+import com.pearadmin.system.domain.excel.ExportLuckPrizeUserVO;
+import com.pearadmin.system.domain.excel.ImportPrizeUser;
+import com.pearadmin.system.enums.LuckActivityStatusEnum;
+import com.pearadmin.system.mapper.*;
+import com.pearadmin.system.service.ILuckActivityService;
+import com.pearadmin.system.service.importexcel.ExcelContant;
+import com.pearadmin.system.service.importexcel.ExcelListener;
+import com.pearadmin.system.util.DateUtils;
+import lombok.extern.slf4j.Slf4j;
+import org.apache.commons.collections4.CollectionUtils;
+import org.apache.commons.lang3.StringUtils;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.beans.factory.annotation.Value;
+import org.springframework.stereotype.Service;
+import org.springframework.web.multipart.MultipartFile;
+
+import javax.servlet.http.HttpServletRequest;
+import javax.servlet.http.HttpServletResponse;
+import java.io.ByteArrayInputStream;
+import java.io.ByteArrayOutputStream;
+import java.io.OutputStream;
+import java.util.*;
+import java.util.concurrent.ConcurrentHashMap;
+import java.util.concurrent.ExecutorService;
+import java.util.concurrent.Executors;
+import java.util.function.Function;
+import java.util.stream.Collectors;
+
+/**
+ * 抽奖活动设置Service业务层处理
+ *
+ * @author zhangsenxiang
+ * @date 2021-03-09
+ */
+@Service
+@Slf4j
+public class LuckActivityServiceImpl implements ILuckActivityService {
+ @Autowired
+ private LuckActivityMapper luckActivityMapper;
+
+ @Autowired
+ private LuckJoinUserMapper luckJoinUserMapper;
+
+ @Autowired
+ private LuckUserMapper luckUserMapper;
+
+ @Autowired
+ private LuckPrizeMapper luckPrizeMapper;
+
+ @Autowired
+ private UsersAddressMapper usersAddressMapper;
+
+ @Value("${qrcode.url}")
+ private String qrcodeUrl;
+
+ /**
+ * 导入线程池
+ */
+ private ExecutorService executorService = Executors.newFixedThreadPool(10);
+
+ /**
+ * 导入锁定状态
+ */
+ private ConcurrentHashMap impLockStatus = new ConcurrentHashMap<>();
+
+ private ConcurrentHashMap exportStatus = new ConcurrentHashMap<>();
+
+ /**
+ * 查询抽奖活动设置
+ *
+ * @param id 抽奖活动设置ID
+ * @return 抽奖活动设置
+ */
+ @Override
+ public LuckActivity selectLuckActivityById(Long id) {
+ return luckActivityMapper.selectLuckActivityById(id);
+ }
+
+ /**
+ * 查询抽奖活动设置列表
+ *
+ * @param luckActivity 抽奖活动设置
+ * @return 抽奖活动设置
+ */
+ @Override
+ public List selectLuckActivityList(LuckActivity luckActivity) {
+ return luckActivityMapper.selectLuckActivityList(luckActivity);
+ }
+
+ /**
+ * 查询抽奖活动设置
+ *
+ * @param luckActivity 抽奖活动设置
+ * @param pageDomain
+ * @return 抽奖活动设置 分页集合
+ */
+ @Override
+ public PageInfo selectLuckActivityPage(LuckActivity luckActivity, PageDomain pageDomain) {
+ PageHelper.startPage(pageDomain.getPage(), pageDomain.getLimit());
+ List luckActivities = luckActivityMapper.selectLuckActivityList(luckActivity);
+ for (LuckActivity activity : luckActivities) {
+ activity.setActivityDateStr(DateUtils.formatDate(activity.getActivityDate(), DateUtils.YMD));
+ activity.setStartDateStr(DateUtils.formatDate(activity.getStartDate(), DateUtils.YMDHMS));
+ activity.setEndDateStr(DateUtils.formatDate(activity.getEndDate(), DateUtils.YMDHMS));
+ }
+ return new PageInfo<>(luckActivities);
+ }
+
+ /**
+ * 新增抽奖活动设置
+ *
+ * @param luckActivity 抽奖活动设置
+ * @return 结果
+ */
+
+ @Override
+ public int insertLuckActivity(LuckActivity luckActivity) {
+ SysUser sysUser = ((SysUser) SecurityUtil.currentUser().getPrincipal());
+ luckActivity.setCreateId(sysUser.getUserId());
+ luckActivity.setCreateName(sysUser.getRealName());
+ luckActivity.setStatus(LuckActivityStatusEnum.NOSTART.getCode());
+ return luckActivityMapper.insertLuckActivity(luckActivity);
+ }
+
+ /**
+ * 修改抽奖活动设置
+ *
+ * @param luckActivity 抽奖活动设置
+ * @return 结果
+ */
+ @Override
+ public int updateLuckActivity(LuckActivity luckActivity) {
+ return luckActivityMapper.updateLuckActivity(luckActivity);
+ }
+
+ /**
+ * 删除抽奖活动设置对象
+ *
+ * @param ids 需要删除的数据ID
+ * @return 结果
+ */
+ @Override
+ public int deleteLuckActivityByIds(String[] ids) {
+ return luckActivityMapper.deleteLuckActivityByIds(ids);
+ }
+
+ /**
+ * 删除抽奖活动设置信息
+ *
+ * @param id 抽奖活动设置ID
+ * @return 结果
+ */
+ @Override
+ public int deleteLuckActivityById(Long id) {
+ return luckActivityMapper.deleteLuckActivityById(id);
+ }
+
+ @Override
+ public void generateQrcode(Long id, HttpServletRequest request, HttpServletResponse response) throws Exception {
+ setHeader(response);
+ QRCodeUtil.writeToStream(qrcodeUrl + "?id=" + id, response.getOutputStream(), 80, 80);
+ }
+
+ @Override
+ public void dowmloadTemplete(HttpServletRequest request, HttpServletResponse response) throws Exception {
+ response.setContentType("application/vnd.ms-excel;charset=UTF-8");
+ response.setHeader("Content-Disposition", "attachment;filename=moban.xlsx");
+ OutputStream stream = response.getOutputStream();
+ EasyExcel.write(stream, ImportPrizeUser.class).sheet("模板").doWrite(new ArrayList());
+ stream.flush();
+ stream.close();
+ }
+
+
+ @Override
+ public Result uploadPrizeUser(MultipartFile multipartFile, Long id, Integer type) {
+ if (Objects.nonNull(impLockStatus.get(id))) {
+ return Result.failure("上一个导入任务执行中");
+ }
+ long importTime = System.currentTimeMillis();
+ LuckActivity luckActivity = luckActivityMapper.selectLuckActivityById(id);
+ if (Objects.isNull(luckActivity)) {
+ return Result.failure("活动不存在");
+ }
+ impLockStatus.put(String.valueOf(id), String.valueOf(importTime));
+ if (type == 1) {
+ luckJoinUserMapper.deleteByActivityId(id);
+ }
+ executorService.submit(() -> {
+ try {
+ EasyExcel.read(multipartFile.getInputStream(), ImportPrizeUser.class, new ExcelListener(luckJoinUserMapper, id.intValue())).sheet().doRead();
+ } catch (Exception e) {
+ log.error("读取文件失败", e);
+ } finally {
+ impLockStatus.remove(String.valueOf(id));
+ }
+ });
+ return Result.success("导入中");
+ }
+
+ @Override
+ public Result exportPrizeUser(String activityIds) {
+ String userId = ((SysUser) SecurityUtil.currentUser().getPrincipal()).getUserId();
+ Set ids = Arrays.stream(activityIds.split(",")).map(Long::parseLong).collect(Collectors.toSet());
+ if (StringUtils.isNotBlank(exportStatus.get(userId))) {
+ log.error("导出中奖名单,上一个导出任务执行中:" + activityIds);
+ return Result.failure("上一个导出任务执行中");
+ }
+ impLockStatus.put(userId, String.valueOf(System.currentTimeMillis()));
+ List luckActivityList = luckActivityMapper.selectLuckActivityByIds(ids);
+ if (CollectionUtils.isEmpty(luckActivityList) || luckActivityList.size() != ids.size()) {
+ log.error("导出中奖名单,活动不存在:" + activityIds);
+ return Result.failure("活动不存在请检查!");
+ }
+ List luckUsers = luckUserMapper.selectLuckUserListByActivityIds(ids);
+ if (CollectionUtils.isEmpty(luckUsers)) {
+ log.error("导出中奖名单,没有开奖数据:" + activityIds);
+ return Result.failure("没有开奖数据!");
+ }
+
+ //多线程切换不了数据源,此处先查询下
+ Set userNumbers = luckUsers.stream().map(LuckUser::getNumber).collect(Collectors.toSet());
+ List usersAddressesList = usersAddressMapper.selectUsersAddressByIds(userNumbers);
+ executorService.submit(() -> {
+ log.info("导出中奖名单,开始执行,活动id是:{},用户是:{}", activityIds, userId);
+ this.delOssFile(userId);
+ Set luckCodes = luckUsers.stream().map(LuckUser::getLuckCode).collect(Collectors.toSet());
+ List luckPrizes = luckPrizeMapper.selectLuckPrizeByLuckCode(luckCodes);
+ try {
+ Map addressMap = usersAddressesList.stream().collect(Collectors.toMap(UsersAddress::getUserid, Function.identity()));
+ Map luckPrizeMap = luckPrizes.stream().collect(Collectors.toMap(LuckPrize::getLuckCode, Function.identity()));
+ List userVOS = luckUsers.stream().map(luckUser -> {
+ UsersAddress usersAddress = addressMap.get(String.valueOf(luckUser.getNumber()));
+ LuckPrize luckPrize = luckPrizeMap.get(luckUser.getLuckCode());
+ ExportLuckPrizeUserVO vo = new ExportLuckPrizeUserVO();
+ vo.setUserNumber(luckUser.getNumber());
+ vo.setUserName(Objects.isNull(usersAddress) ? "" : usersAddress.getNickname());
+ vo.setPrizeName(Objects.isNull(luckPrize) ? "" : luckPrize.getPrizeName());
+ vo.setRecName(Objects.isNull(usersAddress) ? "" : usersAddress.getUsername());
+ vo.setPhoneNumber(Objects.isNull(usersAddress) ? "" : usersAddress.getPhonenumber());
+ vo.setProvince(Objects.isNull(usersAddress) ? "" : usersAddress.getProvince());
+ vo.setCity(Objects.isNull(usersAddress) ? "" : usersAddress.getCity());
+ vo.setCounty(Objects.isNull(usersAddress) ? "" : usersAddress.getCounty());
+ vo.setDetails(Objects.isNull(usersAddress) ? "" : usersAddress.getDetails());
+ log.info("转换的每个导出对象是:{}", JSON.toJSONString(vo));
+ return vo;
+ }).collect(Collectors.toList());
+ ByteArrayOutputStream outputStream = new ByteArrayOutputStream();
+ EasyExcel.write(outputStream, ExportLuckPrizeUserVO.class).sheet("中奖用户").doWrite(userVOS);
+ String url = OssBootUtil.upload(new ByteArrayInputStream(outputStream.toByteArray()), ExcelContant.uploadBiz + userId + System.currentTimeMillis() + ".xlsx");
+ log.info("导出中奖名单,userId:{},活动id:{},地址是:{}", userId, activityIds, url);
+ FileWriter writer = new FileWriter(ExcelContant.filePath + userId + ExcelContant.exportFileResult);
+ writer.write(url);
+ } catch (Exception e) {
+ log.error("导出中奖名单,异常,活动是:" + activityIds, e);
+ } finally {
+ impLockStatus.remove(userId);
+ }
+ });
+ return Result.success("导出中");
+ }
+
+ private void delOssFile(String userId) {
+ FileReader fileReader = new FileReader(ExcelContant.filePath + userId + ExcelContant.exportFileResult);
+ String ossUrl = fileReader.readString();
+ try {
+ OssBootUtil.delete(ossUrl.substring(ossUrl.lastIndexOf("/") + 1));
+ } catch (Exception e) {
+ log.error("oss del file error:userId:{},ossFileUrl:{}", userId, ossUrl, e);
+ }
+ FileUtil.del(ExcelContant.filePath + userId + ExcelContant.exportFileResult);
+ }
+
+
+ @Override
+ public Result checkUploadStatus(Long activityNo, Integer type) {
+ Result result = new Result();
+ switch (type) {
+ case 0:
+ if (Objects.isNull(impLockStatus.get(String.valueOf(activityNo)))) {
+ if (FileUtil.exist(ExcelContant.filePath + activityNo + ExcelContant.errorFileSuffix)) {
+ FileReader fileReader = new FileReader(ExcelContant.filePath + activityNo + ExcelContant.errorFileSuffix);
+ String json = fileReader.readString();
+ result.setSuccess(true);
+ result.setData(json);
+ } else {
+ result = Result.success();
+ }
+ } else {
+ result = Result.failure("导入中");
+ }
+ break;
+ case 1:
+ String userId = ((SysUser) SecurityUtil.currentUser().getPrincipal()).getUserId();
+ if (Objects.isNull(exportStatus.get(userId))) {
+ if (FileUtil.exist(ExcelContant.filePath + userId + ExcelContant.exportFileResult)) {
+ FileReader fileReader = new FileReader(ExcelContant.filePath + userId + ExcelContant.exportFileResult);
+ String url = fileReader.readString();
+ result.setSuccess(true);
+ result.setData(url);
+ } else {
+ result = Result.success();
+ }
+ } else {
+ result = Result.failure("导出中");
+ }
+ break;
+ default:
+
+ }
+ return result;
+ }
+
+ @Override
+ public Result clearUploadStatus(Long activityNo, Integer type) {
+ switch (type) {
+ case 0:
+ impLockStatus.remove(String.valueOf(activityNo));
+ break;
+ case 1:
+ String userId = ((SysUser) SecurityUtil.currentUser().getPrincipal()).getUserId();
+ exportStatus.remove(userId);
+ }
+ return Result.success();
+ }
+
+ @Override
+ public Result getUploadStatus(Integer type) {
+ return type == 0 ? Result.success(impLockStatus) : Result.success(exportStatus);
+ }
+
+ @Override
+ public Result>> getActiveNos() {
+ LuckActivity luckActivity = new LuckActivity();
+ //只查询有效的活动 status判断下
+ luckActivity.setStatus(LuckActivityStatusEnum.NOSTART.getCode());
+ List luckActivities = luckActivityMapper.selectLuckActivityList(luckActivity);
+ Result>> result = new Result<>();
+ if (CollectionUtil.isNotEmpty(luckActivities)) {
+ List