Commit 294be177 authored by jiaorz's avatar jiaorz

Merge remote-tracking branch 'origin/luck_draw_feature' into luck_draw_feature

parents 7b1bfeb2 ceaef0ef
package com.github.wxiaoqi.security.common.util.excel;
import org.apache.poi.ss.usermodel.*;
import org.apache.poi.xssf.usermodel.XSSFCellStyle;
import org.apache.poi.xssf.usermodel.XSSFFont;
import org.apache.poi.xssf.usermodel.XSSFSheet;
import org.apache.poi.xssf.usermodel.XSSFWorkbook;
import java.util.List;
/**
* @author libin
* @version 1.0
* @description
* @data 2019/12/4 18:37
*/
public class ExcelUtils {
private XSSFWorkbook hssfWorkbook;
private XSSFSheet sheet;
public ExcelUtils(String sheetName){
hssfWorkbook = new XSSFWorkbook();
sheet = hssfWorkbook.createSheet(sheetName);
}
public void createCellData(Sheet sheet, int startRowIndex, CellStyle cellStyle, List<String[]> datas) {
for (String[] data : datas) {
Row row = sheet.createRow(startRowIndex++);
createCellCount(row, 0, data, cellStyle);
}
}
private void createCellCount(Row row, int CellStartIndex, String[] data, CellStyle cellStyle) {
for (int i = CellStartIndex, y = 0; y < data.length; i++, y++) {
Cell cell = row.createCell(i);
cell.setCellStyle(cellStyle);
cell.setCellValue(data[y]);
}
}
public void createHeader(Row row, int cellStartIndex, String[] header, CellStyle cellStyle) {
for (int i = 0; i < header.length; i++) {
Cell cell = row.createCell(cellStartIndex);
cell.setCellValue(header[i]);
cell.setCellStyle(cellStyle);
cellStartIndex += 1;
}
}
public CellStyle createGeneralCellStyle() {
CellStyle cellStyleGeneral = createHeaderCellStyle();
cellStyleGeneral.setWrapText(true);
XSSFFont generalFont = createFont();
generalFont.setBold(false);
cellStyleGeneral.setFont(generalFont);
return cellStyleGeneral;
}
public CellStyle createHeaderCellStyle() {
XSSFCellStyle cellStyleHeader = hssfWorkbook.createCellStyle();
cellStyleHeader.setAlignment(HorizontalAlignment.CENTER);
cellStyleHeader.setVerticalAlignment(VerticalAlignment.CENTER);
cellStyleHeader.setLocked(false);
XSSFFont headerFont = createFont();
cellStyleHeader.setFont(headerFont);
return cellStyleHeader;
}
public XSSFFont createFont() {
XSSFFont font = hssfWorkbook.createFont();
font.setFontName("黑体");
font.setBold(true);
return font;
}
public XSSFWorkbook getHssfWorkbook() {
return hssfWorkbook;
}
public void setHssfWorkbook(XSSFWorkbook hssfWorkbook) {
this.hssfWorkbook = hssfWorkbook;
}
public XSSFSheet getSheet() {
return sheet;
}
public void setSheet(XSSFSheet sheet) {
this.sheet = sheet;
}
}
package com.xxfc.platform.activity.bo;
import com.xxfc.platform.activity.vo.ActivityAttendanceRecordTotalVo;
import com.xxfc.platform.activity.vo.ActivityAttendanceRecordVo;
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;
import org.apache.commons.collections4.CollectionUtils;
import java.util.Collections;
import java.util.List;
/**
* @author libin
* @version 1.0
* @description
* @data 2019/12/4 15:19
*/
@Data
@AllArgsConstructor
@NoArgsConstructor
public class ActivityAttendanceRecordBo {
private Integer totalPage;
private Long totalCount;
private Integer pageNum;
private Integer pageSize;
private List<ActivityAttendanceRecordVo> activityAttendanceRecordVos;
private ActivityAttendanceRecordTotalVo activityAttendanceRecordTotalVo;
public Integer getTotalPage() {
return totalPage==null?0:totalPage;
}
public Long getTotalCount() {
return totalCount==null?0:totalCount;
}
public Integer getPageNum() {
return pageNum==null?1:pageNum;
}
public Integer getPageSize() {
return pageSize==null?0:pageSize;
}
public List<ActivityAttendanceRecordVo> getActivityAttendanceRecordVos() {
return CollectionUtils.isEmpty(activityAttendanceRecordVos)? Collections.EMPTY_LIST:activityAttendanceRecordVos;
}
public ActivityAttendanceRecordTotalVo getActivityAttendanceRecordTotalVo() {
return activityAttendanceRecordTotalVo==null?new ActivityAttendanceRecordTotalVo():activityAttendanceRecordTotalVo;
}
}
package com.xxfc.platform.activity.bo;
import com.xxfc.platform.activity.vo.ActivityWinningRecordVo;
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;
import org.apache.commons.collections4.CollectionUtils;
import java.io.Serializable;
import java.util.Collections;
import java.util.List;
/**
* @author libin
* @version 1.0
* @description
* @data 2019/12/4 8:40
*/
@Data
@AllArgsConstructor
@NoArgsConstructor
public class ActivityWinningRecordBo implements Serializable {
private Integer totalPage;
private Long totalCount;
private Integer pageNum;
private Integer pageSize;
private List<ActivityWinningRecordVo> activityWinningRecords;
private ActivityWinningRecordTotalVo activityWinningRecordTotalVo;
public Integer getTotalPage() {
return totalPage==null?0:totalPage;
}
public Long getTotalCount() {
return totalCount==null?0:totalCount;
}
public Integer getPageNum() {
return pageNum==null?0:pageNum;
}
public Integer getPageSize() {
return pageSize==null?0:pageSize;
}
public List<ActivityWinningRecordVo> getActivityWinningRecords() {
return CollectionUtils.isEmpty(activityWinningRecords)? Collections.EMPTY_LIST:activityWinningRecords;
}
public ActivityWinningRecordTotalVo getActivityWinningRecordTotalVo() {
return activityWinningRecordTotalVo==null?new ActivityWinningRecordTotalVo():activityWinningRecordTotalVo;
}
}
package com.xxfc.platform.activity.bo;
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;
/**
* @author libin
* @version 1.0
* @description
* @data 2019/12/4 9:45
*/
@Data
@AllArgsConstructor
@NoArgsConstructor
public class ActivityWinningRecordTotalVo {
private Integer onLineNum;
private Integer onLineWineNum;
private Integer localeNum;
private Integer localeWineNum;
public Integer getOnLineNum() {
return onLineNum==null?0:onLineNum;
}
public Integer getOnLineWineNum() {
return onLineWineNum==null?0:onLineWineNum;
}
public Integer getLocaleNum() {
return localeNum==null?0:localeNum;
}
public Integer getLocaleWineNum() {
return localeWineNum==null?0:localeWineNum;
}
}
package com.xxfc.platform.activity.constant;
/**
* @author libin
* @version 1.0
* @description 奖品类型
* @data 2019/12/4 18:24
*/
public enum PrizeTypeEnum {
ONLINE(1,"线上"),
LOCALE(2,"现场");
private int code;
private String desc;
PrizeTypeEnum(int code, String desc) {
this.code = code;
this.desc = desc;
}
public int getCode() {
return code;
}
public void setCode(int code) {
this.code = code;
}
public String getDesc() {
return desc;
}
public void setDesc(String desc) {
this.desc = desc;
}
}
package com.xxfc.platform.activity.dto;
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;
import java.io.Serializable;
import java.math.BigDecimal;
/**
* @author libin
* @version 1.0
* @description
* @data 2019/12/4 16:48
*/
@Data
@AllArgsConstructor
@NoArgsConstructor
public class ActivityAttendanceRecordDTO implements Serializable {
private static final long serialVersionUID = 1L;
private Integer userId;
private String userName;
private String phone;
private String positionName;
private Integer status;
private BigDecimal amount;
private Integer inviteNum;
private String prizes;
private Long attendTime;
}
package com.xxfc.platform.activity.dto;
import com.github.wxiaoqi.security.common.vo.PageParam;
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;
import java.util.Date;
/**
* @author libin
* @version 1.0
* @description
* @data 2019/12/4 15:32
*/
@Data
@AllArgsConstructor
@NoArgsConstructor
public class ActivityAttendanceRecordFindDTO extends PageParam {
private Integer activityId;
private Long startTime;
private Long endTime;
private String phone;
private Integer status;
}
package com.xxfc.platform.activity.dto;
import com.github.wxiaoqi.security.common.vo.PageParam;
import lombok.AllArgsConstructor;
import lombok.Builder;
import lombok.Data;
import lombok.NoArgsConstructor;
import java.util.Date;
/**
* @author libin
* @version 1.0
* @description
* @data 2019/12/3 18:56
*/
@Data
@Builder(toBuilder = true)
@AllArgsConstructor
@NoArgsConstructor
public class ActivityLuckDrawFindDTO extends PageParam {
private Date startTime;
private Date endTime;
private String phone;
private Integer activityId;
}
package com.xxfc.platform.activity.dto;
import lombok.AllArgsConstructor;
import lombok.Builder;
import lombok.Data;
import lombok.NoArgsConstructor;
/**
* @author libin
* @version 1.0
* @description
* @data 2019/12/3 19:21
*/
@Data
@Builder(toBuilder = true)
@AllArgsConstructor
@NoArgsConstructor
public class ActivityWinningRecordDTO {
private Integer userId;
private Integer activityId;
private String activityName;
private String prizeName;
private String iconPath;
private Integer prizeType;
private Integer hasWinning;
private String expiryDateCode;
}
package com.xxfc.platform.activity.dto;
import com.github.wxiaoqi.security.common.vo.PageParam;
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;
import java.util.Date;
/**
* @author libin
* @version 1.0
* @description
* @data 2019/12/4 8:36
*/
@Data
@AllArgsConstructor
@NoArgsConstructor
public class ActivityWinningRecordFindDTO extends PageParam {
private Integer activityId;
private Date startTime;
private Date endTime;
private String phone;
private Integer hasWinning;
private Integer prizeType;
private Integer state;
}
package com.xxfc.platform.activity.dto;
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;
import java.util.Date;
/**
* @author libin
* @version 1.0
* @description
* @data 2019/12/4 15:08
*/
@Data
@AllArgsConstructor
@NoArgsConstructor
public class ActivityWinningRecordPageDTO {
private Integer userId;
private String userName;
private String phone;
private String positionName;
private Integer prizeType;
private String prizeName;
private String iconPath;
private Integer hasWinning;
private String expiryDateCode;
private Date crtTime;
private Date lotteryTime;
}
package com.xxfc.platform.activity.entity;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import javax.persistence.Column;
import javax.persistence.GeneratedValue;
import javax.persistence.Id;
import javax.persistence.Table;
import java.util.Date;
/**
* @author libin
* @version 1.0
* @description
* @data 2019/12/4 14:34
*/
@Data
@Table(name = "activity_attendance_record")
public class ActivityAttendanceRecord {
@Id
@GeneratedValue(generator = "JDBC")
private Long id;
@Column(name = "user_id")
private Integer userId;
@Column(name = "user_name")
private String userName;
@Column(name = "phone")
private String phone;
@Column(name = "activity_id")
private Integer activityId;
@Column(name = "activity_name")
private String activityName;
@Column(name = "position_id")
private Integer positionId;
@Column(name = "position_name")
private String positionName;
@ApiModelProperty("线上抽奖次数")
@Column(name = "online_lottery_num")
private Integer onlineLotteryNum;
@ApiModelProperty("现场抽奖次数")
@Column(name = "locale_lottery_num")
private Integer localeLotteryNum;
@Column(name = "crt_time")
private Date crtTime;
}
package com.xxfc.platform.activity.entity;
import lombok.Data;
import javax.persistence.Column;
import javax.persistence.GeneratedValue;
import javax.persistence.Id;
import javax.persistence.Table;
import java.io.Serializable;
import java.util.Date;
/**
* @author libin
* @version 1.0
* @description 报名
* @data 2019/12/3 15:06
*/
@Data
@Table(name = "activity_lucky_draw")
public class ActivityLuckyDraw implements Serializable {
private static final long serialVersionUID = 1L;
@Id
@GeneratedValue(generator= "JDBC")
private Long id;
@Column(name = "user_name")
private String userName;
@Column(name = "phone")
private String phone;
private Integer activityId;
@Column(name = "activity_name")
private String activityName;
@Column(name = "ticket_num")
private Integer ticketNum;
@Column(name = "user_id")
private Integer userId;
@Column(name = "crt_time")
private Date crtTime;
}
package com.xxfc.platform.activity.entity;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import javax.persistence.Column;
import javax.persistence.GeneratedValue;
import javax.persistence.Id;
import javax.persistence.Table;
import java.io.Serializable;
import java.util.Date;
/**
* @author libin
* @version 1.0
* @description 奖品、设置
* @data 2019/12/3 15:21
*/
@Data
@Table(name = "activity_prize")
@ApiModel
public class ActivityPrize implements Serializable {
private static final long serialVersionUID = 1L;
@Id
@GeneratedValue(generator = "JDBC")
private Integer id;
@ApiModelProperty("编号")
@Column(name = "serial_number")
private Integer serialNumber;
@Column(name = "name")
private String name;
@ApiModelProperty("奖品图片地址")
@Column(name = "icon_path")
private String iconPath;
@ApiModelProperty("每天最多中奖份数")
@Column(name = "day_max_use")
private Integer dayMaxUse;
@Column(name = "total_stock")
private Integer totalStock;
@Column(name = "probability")
private Double probability;
@ApiModelProperty("1:线上 2:现场")
@Column(name = "type")
private Integer type;
@Column(name = "crt_time")
private Date crtTime;
@Column(name = "upd_time")
private Date updTime;
@Column(name = "is_entity")
private Integer isEntity;
@Column(name = "goods_id")
private Integer goodsId;
@Column(name = "is_prize")
private Integer isPrize;
}
package com.xxfc.platform.activity.entity;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import javax.persistence.Column;
import javax.persistence.GeneratedValue;
import javax.persistence.Id;
import javax.persistence.Table;
import java.io.Serializable;
import java.util.Date;
/**
* @author libin
* @version 1.0
* @description 中奖记录
* @data 2019/12/3 16:14
*/
@Data
@Table(name = "activity_winning_record")
public class ActivityWinningRecord implements Serializable {
private static final long serialVersionUID = 1L;
@Id
@GeneratedValue(generator = "JDBC")
private Long id;
@Column(name = "user_id")
private Integer userId;
@Column(name = "activity_id")
private Integer activityId;
@ApiModelProperty("1:线上 2:现场")
@Column(name = "prize_type")
private Integer prizeType;
@Column(name = "prize_name")
private String prizeName;
@Column(name = "icon_path")
private String iconPath;
@ApiModelProperty("是否中奖 1:是 0:否")
@Column(name = "has_winning")
private Integer hasWinning;
@ApiModelProperty("兑奖码")
@Column(name = "expiry_date_code")
private String expiryDateCode;
@Column(name = "crt_time")
private Date crtTime;
@Column(name = "lottery_time")
private Date lotteryTime;
@Column(name = "goods_id")
private Integer goodsId;
}
package com.xxfc.platform.activity.util;
import com.xxfc.platform.activity.entity.ActivityPrize;
import java.util.List;
/**
* @author libin
* @version 1.0
* @description
* @data 2019/12/3 20:01
*/
public class LotteryUtils {
public static int getrandomIndex(List<ActivityPrize> prizes) {
int random = -1;
try {
//计算总权重
double sumWeight = 0;
for (ActivityPrize p : prizes) {
sumWeight += p.getProbability();
}
//产生随机数
double randomNumber;
randomNumber = Math.random();
//根据随机数在所有奖品分布的区域并确定所抽奖品
double d1 = 0;
double d2 = 0;
for (int i = 0; i < prizes.size(); i++) {
d2 += Double.parseDouble(String.valueOf(prizes.get(i).getProbability())) / sumWeight;
if (i == 0) {
d1 = 0;
} else {
d1 += Double.parseDouble(String.valueOf(prizes.get(i - 1).getProbability())) / sumWeight;
}
if (randomNumber >= d1 && randomNumber <= d2) {
random = i;
break;
}
}
} catch (Exception e) {
System.out.println("生成抽奖随机数出错,出错原因:" + e.getMessage());
}
return random;
}
}
package com.xxfc.platform.activity.vo;
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;
import java.math.BigDecimal;
/**
* @author libin
* @version 1.0
* @description
* @data 2019/12/4 15:21
*/
@Data
@AllArgsConstructor
@NoArgsConstructor
public class ActivityAttendanceRecordTotalVo {
private Integer attendNum;
private Integer finishNum;
private BigDecimal amount;
public Integer getAttendNum() {
return attendNum==null?0:attendNum;
}
public Integer getFinishNum() {
return finishNum==null?0:finishNum;
}
public BigDecimal getAmount() {
return amount==null?BigDecimal.ZERO:amount;
}
}
package com.xxfc.platform.activity.vo;
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;
import java.io.Serializable;
import java.math.BigDecimal;
/**
* @author libin
* @version 1.0
* @description
* @data 2019/12/4 15:20
*/
@Data
@AllArgsConstructor
@NoArgsConstructor
public class ActivityAttendanceRecordVo implements Serializable {
private static final long serialVersionUID = 1L;
private String userName;
private String phone;
private String positionName;
private Integer status;
private BigDecimal amount;
private Integer inviteNum;
private String prizes;
private Long attendTime;
}
package com.xxfc.platform.activity.vo;
import com.xxfc.platform.activity.entity.ActivityPrize;
import lombok.AllArgsConstructor;
import lombok.Builder;
import lombok.Data;
import lombok.NoArgsConstructor;
import org.apache.commons.collections4.CollectionUtils;
import java.util.Collections;
import java.util.List;
/**
* @author libin
* @version 1.0
* @description
* @data 2019/12/3 17:27
*/
@Data
@Builder(toBuilder = true)
@AllArgsConstructor
@NoArgsConstructor
public class ActivityPrizeVo {
private List<ActivityPrize> onlinePrize;
private List<ActivityPrize> localePrize;
public List<ActivityPrize> getOnlinePrize() {
return CollectionUtils.isEmpty(onlinePrize)? Collections.EMPTY_LIST:onlinePrize;
}
public List<ActivityPrize> getLocalePrize() {
return CollectionUtils.isEmpty(localePrize)? Collections.EMPTY_LIST:localePrize;
}
}
package com.xxfc.platform.activity.vo;
import io.swagger.annotations.ApiModelProperty;
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;
import java.util.Date;
/**
* @author libin
* @version 1.0
* @description
* @data 2019/12/4 9:47
*/
@Data
@AllArgsConstructor
@NoArgsConstructor
public class ActivityWinningRecordVo {
private String userName;
private String positionName;
@ApiModelProperty("1:线上 2:现场")
private Integer prizeType;
private String prizeName;
private String iconPath;
@ApiModelProperty("是否中奖 1:是 0:否")
private Integer hasWinning;
@ApiModelProperty("兑奖码")
private String expiryDateCode;
private Date lotteryTime;
}
package com.xxfc.platform.activity.vo;
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;
/**
* @author libin
* @version 1.0
* @description
* @data 2019/12/3 19:49
*/
@Data
@AllArgsConstructor
@NoArgsConstructor
public class LotteryVo {
private String prizeName;
private String expiryDateCode;
}
package com.xxfc.platform.activity.biz;
import cn.hutool.core.date.DateUtil;
import com.github.wxiaoqi.security.common.util.excel.ExcelUtils;
import com.github.wxiaoqi.security.common.vo.PageDataVO;
import com.xxfc.platform.activity.dto.ActivityLuckDrawFindDTO;
import org.apache.commons.collections.CollectionUtils;
import org.apache.poi.ss.usermodel.CellStyle;
import org.apache.poi.ss.usermodel.Row;
import org.apache.poi.xssf.usermodel.XSSFRow;
import org.apache.poi.xssf.usermodel.XSSFSheet;
import org.apache.poi.xssf.usermodel.XSSFWorkbook;
import org.springframework.stereotype.Service;
import com.xxfc.platform.activity.entity.ActivityLuckyDraw;
import com.xxfc.platform.activity.mapper.ActivityLuckyDrawMapper;
import com.github.wxiaoqi.security.common.biz.BaseBiz;
import org.springframework.transaction.annotation.Transactional;
import javax.servlet.ServletOutputStream;
import java.io.IOException;
import java.util.ArrayList;
import java.util.Collections;
import java.util.Date;
import java.util.List;
/**
* 活动抽奖报名表
*
* @author libin
* @email 18178966185@163.com
* @date 2019-12-03 16:46:02
*/
@Transactional(rollbackFor = Exception.class)
@Service
public class ActivityLuckyDrawBiz extends BaseBiz<ActivityLuckyDrawMapper, ActivityLuckyDraw> {
/**
* 报名
*
* @param activityLuckyDraw
*/
public void signUp(ActivityLuckyDraw activityLuckyDraw) {
activityLuckyDraw.setCrtTime(new Date());
mapper.insertSelective(activityLuckyDraw);
}
/**
* 分页查询报名列表
*
* @param activityLuckDrawFindDTO
* @return
*/
public PageDataVO<ActivityLuckyDraw> listLuckDrawWithPage(ActivityLuckDrawFindDTO activityLuckDrawFindDTO) {
PageDataVO<ActivityLuckyDraw> dataVO = PageDataVO.pageInfo(activityLuckDrawFindDTO.getPage(), activityLuckDrawFindDTO.getLimit(), () -> mapper.listLuckDrawWithPage(activityLuckDrawFindDTO));
List<ActivityLuckyDraw> data = dataVO.getData();
if (CollectionUtils.isEmpty(data)) {
PageDataVO<ActivityLuckyDraw> activityLuckyDrawPageDataVO = new PageDataVO<>();
activityLuckyDrawPageDataVO.setPageNum(activityLuckDrawFindDTO.getPage());
activityLuckyDrawPageDataVO.setPageSize(activityLuckDrawFindDTO.getLimit());
return activityLuckyDrawPageDataVO;
}
return dataVO;
}
public void exportActivityLuckDrawData(ActivityLuckDrawFindDTO activityLuckDrawFindDTO, ServletOutputStream outputStream) throws IOException {
List<ActivityLuckyDraw> activityLuckyDraws = listActivityLuckDraw(activityLuckDrawFindDTO);
ExcelUtils excelUtils = new ExcelUtils("报名列表");
XSSFWorkbook hssfWorkbook = excelUtils.getHssfWorkbook();
XSSFSheet sheet = excelUtils.getSheet();
Row headerRow = sheet.createRow(0);
CellStyle headerCellStyle = excelUtils.createHeaderCellStyle();
String[] headers = {"姓名","电话","人数","报名时间"};
excelUtils.createHeader(headerRow,0,headers,headerCellStyle);
CellStyle generalCellStyle = excelUtils.createGeneralCellStyle();
List<String[]> activityLuckDrawDataList = getActivityLuckDrawDataList(activityLuckyDraws);
excelUtils.createCellData(sheet,1,generalCellStyle,activityLuckDrawDataList);
hssfWorkbook.write(outputStream);
hssfWorkbook.close();
}
private List<String[]> getActivityLuckDrawDataList(List<ActivityLuckyDraw> activityLuckyDraws){
List<String[]> activityLuckDrawDataList = new ArrayList<>(activityLuckyDraws.size());
for (ActivityLuckyDraw activityLuckyDraw : activityLuckyDraws) {
String[] activityLuckDrawData = getActivityLuckDrawData(activityLuckyDraw);
activityLuckDrawDataList.add(activityLuckDrawData);
}
return activityLuckDrawDataList;
}
private String[] getActivityLuckDrawData(ActivityLuckyDraw activityLuckyDraw){
Date crtTime = activityLuckyDraw.getCrtTime();
String timeStr = DateUtil.format(crtTime, "yyyy-MM-dd HH:mm:ss");
return new String[]{activityLuckyDraw.getUserName(),activityLuckyDraw.getPhone(),activityLuckyDraw.getTicketNum()+"",timeStr};
}
public List<ActivityLuckyDraw> listActivityLuckDraw(ActivityLuckDrawFindDTO activityLuckDrawFindDTO){
List<ActivityLuckyDraw> activityLuckyDraws = mapper.listLuckDrawWithPage(activityLuckDrawFindDTO);
if (CollectionUtils.isEmpty(activityLuckyDraws)){
return Collections.EMPTY_LIST;
}
return activityLuckyDraws;
}
}
\ No newline at end of file
package com.xxfc.platform.activity.biz;
import com.github.wxiaoqi.security.admin.feign.dto.AppUserDTO;
import com.xxfc.platform.activity.constant.PrizeTypeEnum;
import com.xxfc.platform.activity.entity.ActivityWinningRecord;
import com.xxfc.platform.activity.util.LotteryUtils;
import com.xxfc.platform.activity.vo.ActivityPrizeVo;
import com.xxfc.platform.activity.vo.LotteryVo;
import lombok.RequiredArgsConstructor;
import org.apache.commons.collections.CollectionUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import com.xxfc.platform.activity.entity.ActivityPrize;
import com.xxfc.platform.activity.mapper.ActivityPrizeMapper;
import com.github.wxiaoqi.security.common.biz.BaseBiz;
import com.github.wxiaoqi.security.common.exception.BaseException;
import org.springframework.transaction.annotation.Transactional;
import tk.mybatis.mapper.entity.Example;
import java.util.*;
import java.util.stream.Collectors;
/**
* 奖品设置
*
* @author libin
* @email 18178966185@163.com
* @date 2019-12-03 16:46:02
*/
@Transactional(rollbackFor = Exception.class)
@Service
@RequiredArgsConstructor(onConstructor = @__(@Autowired))
public class ActivityPrizeBiz extends BaseBiz<ActivityPrizeMapper, ActivityPrize> {
private final ActivityWinningRecordBiz activityWinningRecordBiz;
private final UserCouponBiz userCouponBiz;
/**
* 查询奖品
*
* @return
*/
public ActivityPrizeVo selectActivitys() {
ActivityPrizeVo activityPrizeVo = new ActivityPrizeVo();
List<ActivityPrize> activityPrizes = mapper.selectAll();
if (CollectionUtils.isEmpty(activityPrizes)) {
return activityPrizeVo;
}
Map<Integer, List<ActivityPrize>> activityPrizeMap = activityPrizes.stream().collect(Collectors.groupingBy(ActivityPrize::getType, Collectors.toList()));
activityPrizeVo.setOnlinePrize(activityPrizeMap.get(PrizeTypeEnum.ONLINE.getCode()));
activityPrizeVo.setLocalePrize(activityPrizeMap.get(PrizeTypeEnum.LOCALE.getCode()));
return activityPrizeVo;
}
/**
* 保存奖品设置
*
* @param activityPrizes
*/
public void saveActivityPrizes(List<ActivityPrize> activityPrizes) {
if (CollectionUtils.isEmpty(activityPrizes)) {
throw new BaseException("奖品不能为空");
}
Map<Boolean, List<ActivityPrize>> activityPrizeMap = activityPrizes.stream().collect(Collectors.partitioningBy(x -> Objects.nonNull(x.getId()), Collectors.toList()));
//保存
List<ActivityPrize> activityPrizesOfSave = activityPrizeMap.get(Boolean.FALSE);
if (CollectionUtils.isNotEmpty(activityPrizesOfSave)) {
activityPrizesOfSave.stream().peek(x->x.setCrtTime(new Date())).count();
mapper.insertList(activityPrizesOfSave);
}
//更新
List<ActivityPrize> activityPrizesOfUpdate = activityPrizeMap.get(Boolean.TRUE);
if (CollectionUtils.isNotEmpty(activityPrizesOfUpdate)) {
for (ActivityPrize activityPrize : activityPrizesOfUpdate) {
activityPrize.setUpdTime(new Date());
mapper.updateByPrimaryKeySelective(activityPrize);
}
}
}
/**
* 根据奖品类型查询
*
* @param prizeType
* @return
*/
public List<ActivityPrize> findActivityPrizeByType(Integer prizeType) {
Example example = new Example(ActivityPrize.class);
example.orderBy("serialNumber").asc();
Example.Criteria criteria = example.createCriteria();
criteria.andEqualTo("type",prizeType);
List<ActivityPrize> activityPrizes = mapper.selectByExample(example);
if (CollectionUtils.isEmpty(activityPrizes)) {
return Collections.EMPTY_LIST;
}
return activityPrizes;
}
/**
* 抽奖
* //todo
* @param activityId
* @param prizeType
* @param appUserDTO
* @return
*/
public LotteryVo activityLottery(Integer activityId, Integer prizeType, AppUserDTO appUserDTO) {
LotteryVo lotteryVo = new LotteryVo();
List<ActivityPrize> activityPrizes = findActivityPrizeByType(prizeType);
int index = LotteryUtils.getrandomIndex(activityPrizes);
ActivityPrize activityPrize = activityPrizes.get(index);
if (activityPrize.getTotalStock() == 0){
lotteryVo.setPrizeName("谢谢参与");
return lotteryVo;
}
if (PrizeTypeEnum.LOCALE.getCode()==prizeType){
//兑奖码生成
}
ActivityWinningRecord activityWinningRecord = new ActivityWinningRecord();
activityWinningRecord.setActivityId(activityId);
activityWinningRecord.setPrizeType(prizeType);
activityWinningRecord.setUserId(appUserDTO.getUserid());
activityWinningRecord.setIconPath(activityPrize.getIconPath());
activityWinningRecordBiz.saveRecord(activityWinningRecord);
return lotteryVo;
}
}
\ No newline at end of file
package com.xxfc.platform.activity.biz;
import cn.hutool.core.date.DateUtil;
import com.github.wxiaoqi.security.common.biz.BaseBiz;
import com.github.wxiaoqi.security.common.util.excel.ExcelUtils;
import com.github.wxiaoqi.security.common.vo.PageDataVO;
import com.google.common.collect.Lists;
import com.xxfc.platform.activity.bo.ActivityWinningRecordBo;
import com.xxfc.platform.activity.bo.ActivityWinningRecordTotalVo;
import com.xxfc.platform.activity.constant.PrizeTypeEnum;
import com.xxfc.platform.activity.dto.ActivityWinningRecordDTO;
import com.xxfc.platform.activity.dto.ActivityWinningRecordFindDTO;
import com.xxfc.platform.activity.dto.ActivityWinningRecordPageDTO;
import com.xxfc.platform.activity.entity.ActivityWinningRecord;
import com.xxfc.platform.activity.mapper.ActivityWinningRecordMapper;
import com.xxfc.platform.activity.vo.ActivityWinningRecordVo;
import org.apache.commons.collections.CollectionUtils;
import org.apache.poi.ss.usermodel.CellStyle;
import org.apache.poi.ss.usermodel.Row;
import org.apache.poi.ss.util.CellRangeAddress;
import org.apache.poi.xssf.usermodel.XSSFRow;
import org.apache.poi.xssf.usermodel.XSSFSheet;
import org.apache.poi.xssf.usermodel.XSSFWorkbook;
import org.springframework.beans.BeanUtils;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import org.springframework.util.StringUtils;
import javax.servlet.ServletOutputStream;
import java.io.IOException;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;
import java.util.concurrent.atomic.AtomicInteger;
/**
* 中奖记录
*
* @author libin
* @email 18178966185@163.com
* @date 2019-12-03 16:46:02
*/
@Transactional(rollbackFor = Exception.class)
@Service
public class ActivityWinningRecordBiz extends BaseBiz<ActivityWinningRecordMapper, ActivityWinningRecord> {
/**
* 保存
*
* @param activityWinningRecord
*/
public void saveRecord(ActivityWinningRecord activityWinningRecord) {
activityWinningRecord.setCrtTime(new Date());
mapper.insertSelective(activityWinningRecord);
}
public ActivityWinningRecordBo listActivityWinningRecordWithPage(ActivityWinningRecordFindDTO activityWinningRecordFindDTO) {
ActivityWinningRecordBo activityWinningRecordBo = new ActivityWinningRecordBo();
PageDataVO<ActivityWinningRecordPageDTO> dataVO = PageDataVO.pageInfo(activityWinningRecordFindDTO.getPage(), activityWinningRecordFindDTO.getLimit(),
() -> mapper.selectActivityWinningRecord(activityWinningRecordFindDTO));
ActivityWinningRecordTotalVo activityWinningRecordTotalVo = getActivityWinningRecordTotal(activityWinningRecordFindDTO);
List<ActivityWinningRecordPageDTO> data = dataVO.getData();
if (CollectionUtils.isEmpty(data)){
activityWinningRecordBo.setActivityWinningRecordTotalVo(activityWinningRecordTotalVo);
return activityWinningRecordBo;
}
List<ActivityWinningRecordVo> activityWinningRecordVos = new ArrayList<>();
ActivityWinningRecordVo activityWinningRecordVo = null;
for (ActivityWinningRecordPageDTO activityWinningRecord : data) {
activityWinningRecordVo = new ActivityWinningRecordVo();
BeanUtils.copyProperties(activityWinningRecord,activityWinningRecordVo);
activityWinningRecordVos.add(activityWinningRecordVo);
}
activityWinningRecordBo.setPageNum(dataVO.getPageNum());
activityWinningRecordBo.setPageSize(dataVO.getPageSize());
activityWinningRecordBo.setTotalPage(dataVO.getTotalPage());
activityWinningRecordBo.setTotalCount(dataVO.getTotalCount());
activityWinningRecordBo.setActivityWinningRecordTotalVo(activityWinningRecordTotalVo);
activityWinningRecordBo.setActivityWinningRecords(activityWinningRecordVos);
return activityWinningRecordBo;
}
private ActivityWinningRecordTotalVo getActivityWinningRecordTotal(ActivityWinningRecordFindDTO activityWinningRecordFindDTO){
activityWinningRecordFindDTO.setHasWinning(null);
ActivityWinningRecordTotalVo activityWinningRecordTotalVo = new ActivityWinningRecordTotalVo();
List<ActivityWinningRecordPageDTO> activityWinningRecords = mapper.selectActivityWinningRecord(activityWinningRecordFindDTO);
if (CollectionUtils.isEmpty(activityWinningRecords)){
return activityWinningRecordTotalVo;
}
AtomicInteger onlineCounter = new AtomicInteger(0);
AtomicInteger onlineWinCounter= new AtomicInteger(0);
AtomicInteger localeCounter = new AtomicInteger(0);
AtomicInteger localeWineCounter = new AtomicInteger(0);
for (ActivityWinningRecordPageDTO activityWinningRecord : activityWinningRecords) {
if (activityWinningRecord.getPrizeType()==1){
onlineCounter.incrementAndGet();
if (activityWinningRecord.getHasWinning()==1){
onlineWinCounter.incrementAndGet();
}
}
if (activityWinningRecord.getPrizeType()==2){
localeCounter.incrementAndGet();
if (activityWinningRecord.getHasWinning()==1){
localeWineCounter.incrementAndGet();
}
}
}
activityWinningRecordTotalVo.setOnLineNum(onlineCounter.get());
activityWinningRecordTotalVo.setOnLineWineNum(onlineWinCounter.get());
activityWinningRecordTotalVo.setLocaleNum(localeCounter.get());
activityWinningRecordTotalVo.setLocaleWineNum(localeWineCounter.get());
return activityWinningRecordTotalVo;
}
public void exportActivityWinngingData(ActivityWinningRecordFindDTO activityWinningRecordFindDTO, ServletOutputStream outputStream) throws IOException {
ExcelUtils excelUtils = new ExcelUtils("中奖列表");
XSSFWorkbook hssfWorkbook = excelUtils.getHssfWorkbook();
XSSFSheet sheet = excelUtils.getSheet();
List<ActivityWinningRecordPageDTO> activityWinningRecordPageDTOS = mapper.selectActivityWinningRecord(activityWinningRecordFindDTO);
ActivityWinningRecordTotalVo activityWinningRecordTotal = getActivityWinningRecordTotal(activityWinningRecordFindDTO);
String[] header1 = {"线上抽奖触发数","线上中奖个数","现场上抽奖触发数","现场中奖个数"};
Row headerRow1 = sheet.createRow(0);
CellStyle headerCellStyle = excelUtils.createHeaderCellStyle();
excelUtils.createHeader(headerRow1,0,header1,headerCellStyle);
String[] headerValue = {activityWinningRecordTotal.getOnLineNum()+"",activityWinningRecordTotal.getOnLineWineNum()+"",activityWinningRecordTotal.getLocaleNum()+"",activityWinningRecordTotal.getLocaleWineNum()+""};
CellStyle generalCellStyle = excelUtils.createGeneralCellStyle();
ArrayList<String[]> headerData = Lists.newArrayList();
headerData.add(headerValue);
excelUtils.createCellData(sheet,1,generalCellStyle,headerData);
CellRangeAddress cellRangeAddress = new CellRangeAddress(2, 2, 0, 6);
sheet.addMergedRegion(cellRangeAddress);
String[] header2 = {"用户名","电话","身份","发放类型","抽奖礼品","兑奖码","中奖时间"};
Row header2Row = sheet.createRow(3);
excelUtils.createHeader(header2Row,0,header2,headerCellStyle);
List<String[]> activityWinngingDataList = getActivityWinngingDataList(activityWinningRecordPageDTOS);
excelUtils.createCellData(sheet,4,generalCellStyle,activityWinngingDataList);
hssfWorkbook.write(outputStream);
hssfWorkbook.close();
}
private List<String[]> getActivityWinngingDataList(List<ActivityWinningRecordPageDTO> activityWinningRecordDTOS){
List<String[]> activityWinngingDataList = new ArrayList<>();
for (ActivityWinningRecordPageDTO activityWinningRecordDTO : activityWinningRecordDTOS) {
String[] activityWinngingData = getActivityWinngingData(activityWinningRecordDTO);
activityWinngingDataList.add(activityWinngingData);
}
return activityWinngingDataList;
}
private String[] getActivityWinngingData(ActivityWinningRecordPageDTO activityWinningRecordPageDTO){
String prizeType= activityWinningRecordPageDTO.getPrizeType()== PrizeTypeEnum.ONLINE.getCode()?"线上":"现场";
String expiryDateCode = StringUtils.hasText(activityWinningRecordPageDTO.getExpiryDateCode())?activityWinningRecordPageDTO.getExpiryDateCode():"无";
String timeStr = DateUtil.format(activityWinningRecordPageDTO.getLotteryTime(),"yyyy-MM-dd HH:mm:ss");
return new String[]{activityWinningRecordPageDTO.getUserName(),activityWinningRecordPageDTO.getPhone(),
activityWinningRecordPageDTO.getPositionName(),prizeType,activityWinningRecordPageDTO.getPrizeName(),
expiryDateCode,timeStr};
}
}
\ No newline at end of file
package com.xxfc.platform.activity.mapper;
import com.xxfc.platform.activity.dto.ActivityAttendanceRecordDTO;
import com.xxfc.platform.activity.dto.ActivityAttendanceRecordFindDTO;
import com.xxfc.platform.activity.entity.ActivityAttendanceRecord;
import tk.mybatis.mapper.common.Mapper;
import java.util.List;
/**
* 参与活动数据
*
* @author libin
* @email 18178966185@163.com
* @date 2019-12-04 14:54:06
*/
public interface ActivityAttendanceRecordMapper extends Mapper<ActivityAttendanceRecord> {
List<ActivityAttendanceRecordDTO> selectActivityAttendanceRecord(ActivityAttendanceRecordFindDTO activityAttendanceRecordFindDTO);
}
package com.xxfc.platform.activity.mapper;
import com.xxfc.platform.activity.dto.ActivityLuckDrawFindDTO;
import com.xxfc.platform.activity.entity.ActivityLuckyDraw;
import tk.mybatis.mapper.common.Mapper;
import java.util.List;
/**
* 活动抽奖报名表
*
* @author libin
* @email 18178966185@163.com
* @date 2019-12-03 16:46:02
*/
public interface ActivityLuckyDrawMapper extends Mapper<ActivityLuckyDraw> {
List<ActivityLuckyDraw> listLuckDrawWithPage(ActivityLuckDrawFindDTO activityLuckDrawFindDTO);
}
package com.xxfc.platform.activity.mapper;
import com.xxfc.platform.activity.entity.ActivityPrize;
import tk.mybatis.mapper.additional.insert.InsertListMapper;
import tk.mybatis.mapper.common.Mapper;
/**
* 奖品设置
*
* @author libin
* @email 18178966185@163.com
* @date 2019-12-03 16:46:02
*/
public interface ActivityPrizeMapper extends Mapper<ActivityPrize>, InsertListMapper<ActivityPrize> {
}
package com.xxfc.platform.activity.mapper;
import com.xxfc.platform.activity.dto.ActivityWinningRecordFindDTO;
import com.xxfc.platform.activity.dto.ActivityWinningRecordPageDTO;
import com.xxfc.platform.activity.entity.ActivityWinningRecord;
import tk.mybatis.mapper.common.Mapper;
import java.util.List;
/**
* 中奖记录
*
* @author libin
* @email 18178966185@163.com
* @date 2019-12-03 16:46:02
*/
public interface ActivityWinningRecordMapper extends Mapper<ActivityWinningRecord> {
List<ActivityWinningRecordPageDTO> selectActivityWinningRecord(ActivityWinningRecordFindDTO activityWinningRecordFindDTO);
}
package com.xxfc.platform.activity.rest;
import com.github.wxiaoqi.security.admin.feign.dto.AppUserDTO;
import com.github.wxiaoqi.security.common.msg.ObjectRestResponse;
import com.xxfc.platform.activity.biz.ActivityAttendanceRecordBiz;
import lombok.RequiredArgsConstructor;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;
/**
* @author libin
* @version 1.0
* @description
* @data 2019/12/4 14:56
*/
@RestController
@RequestMapping("activityAttendanceRecord")
@RequiredArgsConstructor(onConstructor = @__(@Autowired))
public class ActivityAttendanceRecordController {
private final ActivityAttendanceRecordBiz activityAttendanceRecordBiz;
/**
* 判断是否还有抽奖机会
*
* @param activityId
* @param prizeType
* @param appUserDTO
* @return
*/
@GetMapping("/number_of_luckydraw/{activityId}/{prizeType}")
public ObjectRestResponse<Boolean> hasNumberOfLuckyDrawByType(@PathVariable(value = "activityId") Integer activityId,
@PathVariable(value = "prizeType") Integer prizeType,
AppUserDTO appUserDTO) {
Boolean state = activityAttendanceRecordBiz.hasNumberOfLuckyDrawByType(activityId,prizeType,appUserDTO.getUserid());
return ObjectRestResponse.succ(state);
}
@PostMapping("/attend/{activityId}")
public ObjectRestResponse<Void> attendActivity(@PathVariable(value = "activityId") Integer activityId,
@RequestParam(value = "activityName",required = false) String activityName, AppUserDTO appUserDTO){
activityAttendanceRecordBiz.attendActivity(activityId,activityName,appUserDTO);
return ObjectRestResponse.succ();
}
}
\ No newline at end of file
package com.xxfc.platform.activity.rest;
import com.github.wxiaoqi.security.admin.feign.dto.AppUserDTO;
import com.github.wxiaoqi.security.common.msg.ObjectRestResponse;
import com.xxfc.platform.activity.biz.ActivityLuckyDrawBiz;
import com.xxfc.platform.activity.entity.ActivityLuckyDraw;
import lombok.RequiredArgsConstructor;
import org.springframework.beans.factory.annotation.Autowired;
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;
/**
* @author libin
* @version 1.0
* @description
* @data 2019/12/3 16:51
*/
@RestController
@RequestMapping("activityLuckyDraw")
@RequiredArgsConstructor(onConstructor = @__(@Autowired))
public class ActivityLuckyDrawController {
private final ActivityLuckyDrawBiz activityLuckyDrawBiz;
/**
* 报名
* @param activityLuckyDraw
* @param appUserDTO
* @return
*/
@PostMapping("/sign_up")
public ObjectRestResponse<Void> signUP(@RequestBody ActivityLuckyDraw activityLuckyDraw, AppUserDTO appUserDTO){
activityLuckyDraw.setUserId(appUserDTO.getUserid());
activityLuckyDraw.setPhone(appUserDTO.getUsername());
activityLuckyDrawBiz.signUp(activityLuckyDraw);
return ObjectRestResponse.succ();
}
}
\ No newline at end of file
package com.xxfc.platform.activity.rest;
import com.github.wxiaoqi.security.admin.feign.dto.AppUserDTO;
import com.github.wxiaoqi.security.common.msg.ObjectRestResponse;
import com.xxfc.platform.activity.biz.ActivityPrizeBiz;
import com.xxfc.platform.activity.entity.ActivityPrize;
import com.xxfc.platform.activity.vo.ActivityPrizeVo;
import com.xxfc.platform.activity.vo.LotteryVo;
import lombok.RequiredArgsConstructor;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;
import java.util.List;
/**
* @author libin
* @version 1.0
* @description
* @data 2019/12/3 19:44
*/
@RestController
@RequestMapping("activityPrize")
@RequiredArgsConstructor(onConstructor = @__(@Autowired))
public class ActivityPrizeController {
private final ActivityPrizeBiz activityPrizeBiz;
/**
* 奖品类型获取
*
* @param prizeType
* @return
*/
@GetMapping("/find_prize")
public ObjectRestResponse<List<ActivityPrize>> findActivityPrizeByType(@RequestParam(value = "prizeType") Integer prizeType) {
List<ActivityPrize> activityPrizes = activityPrizeBiz.findActivityPrizeByType(prizeType);
return ObjectRestResponse.succ(activityPrizes);
}
/**
* 抽奖
*
* @param activityId
* @param appUserDTO
* @return
*/
@PostMapping("/lottery/{activityId}/{prizeType}")
public ObjectRestResponse<LotteryVo> activityLottery(@PathVariable(value = "activityId") Integer activityId,
@PathVariable(value = "prizeType") Integer prizeType,
AppUserDTO appUserDTO) {
LotteryVo lotteryVo = activityPrizeBiz.activityLottery(activityId,prizeType,appUserDTO);
return ObjectRestResponse.succ(lotteryVo);
}
}
\ No newline at end of file
package com.xxfc.platform.activity.rest;
import com.xxfc.platform.activity.biz.ActivityAttendanceRecordBiz;
import lombok.RequiredArgsConstructor;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
/**
* @author libin
* @version 1.0
* @description
* @data 2019/12/3 19:44
*/
@RestController
@RequestMapping("activityWinningRecord")
@RequiredArgsConstructor(onConstructor = @__(@Autowired))
public class ActivityWinningRecordController {
private final ActivityAttendanceRecordBiz activityAttendanceRecordBiz;
}
\ No newline at end of file
package com.xxfc.platform.activity.rest.admin;
import com.github.wxiaoqi.security.common.msg.ObjectRestResponse;
import com.xxfc.platform.activity.biz.ActivityAttendanceRecordBiz;
import com.xxfc.platform.activity.bo.ActivityAttendanceRecordBo;
import com.xxfc.platform.activity.dto.ActivityAttendanceRecordFindDTO;
import com.github.wxiaoqi.security.common.exception.BaseException;
import lombok.RequiredArgsConstructor;
import org.springframework.beans.factory.annotation.Autowired;
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.servlet.ServletOutputStream;
import javax.servlet.http.HttpServletResponse;
import java.time.LocalDateTime;
import java.time.format.DateTimeFormatter;
/**
* @author libin
* @version 1.0
* @description
* @data 2019/12/4 14:56
*/
@RestController
@RequestMapping("admin/activityAttendanceRecord")
@RequiredArgsConstructor(onConstructor = @__(@Autowired))
public class ActivityAttendanceRecordAdminController {
private final ActivityAttendanceRecordBiz activityAttendanceRecordBiz;
@PostMapping("/page")
public ObjectRestResponse<ActivityAttendanceRecordBo> listActivityAttendanceRecordWithPage(@RequestBody ActivityAttendanceRecordFindDTO activityAttendanceRecordFindDTO){
ActivityAttendanceRecordBo activityAttendanceRecordBo = activityAttendanceRecordBiz.listActivityAttendanceRecord(activityAttendanceRecordFindDTO);
return ObjectRestResponse.succ(activityAttendanceRecordBo);
}
@PostMapping("/export")
public void exportActivityAttendanceRecordData(@RequestBody ActivityAttendanceRecordFindDTO activityAttendanceRecordFindDTO, HttpServletResponse response){
try {
String name = DateTimeFormatter.ofPattern("YYYYMMddHHmmss").format(LocalDateTime.now());
response.setContentType("application/vnd.ms-excel;charset=utf-8");
String filename = String.format("%s-activity-attendance-record.xlsx",name);
response.setHeader("Content-Disposition","attachment;filename="+ new String(filename.getBytes(), "iso8859-1"));
ServletOutputStream outputStream = response.getOutputStream();
activityAttendanceRecordBiz.exportActivityAttendanceRecordData(activityAttendanceRecordFindDTO,outputStream);
response.setCharacterEncoding("UTF-8");
}catch (Exception ex){
throw new BaseException("导出数据失败");
}
}
}
\ No newline at end of file
package com.xxfc.platform.activity.rest.admin;
import com.github.wxiaoqi.security.common.msg.ObjectRestResponse;
import com.github.wxiaoqi.security.common.vo.PageDataVO;
import com.xxfc.platform.activity.biz.ActivityLuckyDrawBiz;
import com.xxfc.platform.activity.dto.ActivityLuckDrawFindDTO;
import com.xxfc.platform.activity.entity.ActivityLuckyDraw;
import com.github.wxiaoqi.security.common.exception.BaseException;
import lombok.RequiredArgsConstructor;
import org.springframework.beans.factory.annotation.Autowired;
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.servlet.ServletOutputStream;
import javax.servlet.http.HttpServletResponse;
import java.time.LocalDateTime;
import java.time.format.DateTimeFormatter;
/**
* @author libin
* @version 1.0
* @description
* @data 2019/12/3 16:51
*/
@RestController
@RequestMapping("admin/activityLuckyDraw")
@RequiredArgsConstructor(onConstructor = @__(@Autowired))
public class ActivityLuckyDrawAdminController {
private final ActivityLuckyDrawBiz activityLuckyDrawBiz;
/**
* 分页查询报名列表
*
* @param activityLuckDrawFindDTO
* @return
*/
@PostMapping("/page")
public ObjectRestResponse<PageDataVO<ActivityLuckyDraw>> listActivtyLuckyDrawWithPage(@RequestBody ActivityLuckDrawFindDTO activityLuckDrawFindDTO) {
PageDataVO<ActivityLuckyDraw> activityLuckyDrawPageDataVO = activityLuckyDrawBiz.listLuckDrawWithPage(activityLuckDrawFindDTO);
return ObjectRestResponse.succ(activityLuckyDrawPageDataVO);
}
@PostMapping("/export")
public void exportActivityLuckyDrawData(@RequestBody ActivityLuckDrawFindDTO activityLuckDrawFindDTO, HttpServletResponse response){
try {
String name = DateTimeFormatter.ofPattern("YYYYMMddHHmmss").format(LocalDateTime.now());
response.setContentType("application/vnd.ms-excel;charset=utf-8");
String filename = String.format("%s-activity-luckdraw.xlsx",name);
response.setHeader("Content-Disposition","attachment;filename="+ new String(filename.getBytes(), "iso8859-1"));
ServletOutputStream outputStream = response.getOutputStream();
activityLuckyDrawBiz.exportActivityLuckDrawData(activityLuckDrawFindDTO,outputStream);
response.setCharacterEncoding("UTF-8");
}catch (Exception ex){
throw new BaseException("导出数据失败");
}
}
}
\ No newline at end of file
package com.xxfc.platform.activity.rest.admin;
import com.github.wxiaoqi.security.common.msg.ObjectRestResponse;
import com.xxfc.platform.activity.biz.ActivityPrizeBiz;
import com.xxfc.platform.activity.entity.ActivityPrize;
import com.xxfc.platform.activity.vo.ActivityPrizeVo;
import lombok.RequiredArgsConstructor;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;
import java.util.List;
/**
* @author libin
* @version 1.0
* @description
* @data 2019/12/3 19:44
*/
@RestController
@RequestMapping("/admin/activityPrize")
@RequiredArgsConstructor(onConstructor = @__(@Autowired))
public class ActivityPrizeAdminController {
private final ActivityPrizeBiz activityPrizeBiz;
@PostMapping("/save")
public ObjectRestResponse<Void> savePrize(@RequestBody List<ActivityPrize> activityPrizes) {
activityPrizeBiz.saveActivityPrizes(activityPrizes);
return ObjectRestResponse.succ();
}
@GetMapping("/list")
public ObjectRestResponse<ActivityPrizeVo> listActivityPrize(){
ActivityPrizeVo activityPrizeVo = activityPrizeBiz.selectActivitys();
return ObjectRestResponse.succ(activityPrizeVo);
}
}
\ No newline at end of file
package com.xxfc.platform.activity.rest.admin;
import com.github.wxiaoqi.security.common.msg.ObjectRestResponse;
import com.xxfc.platform.activity.biz.ActivityWinningRecordBiz;
import com.xxfc.platform.activity.bo.ActivityWinningRecordBo;
import com.xxfc.platform.activity.dto.ActivityWinningRecordFindDTO;
import com.github.wxiaoqi.security.common.exception.BaseException;
import lombok.RequiredArgsConstructor;
import org.springframework.beans.factory.annotation.Autowired;
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.servlet.ServletOutputStream;
import javax.servlet.http.HttpServletResponse;
import java.time.LocalDateTime;
import java.time.format.DateTimeFormatter;
/**
* @author libin
* @version 1.0
* @description
* @data 2019/12/3 16:51
*/
@RestController
@RequestMapping("admin/activityWinningRecord")
@RequiredArgsConstructor(onConstructor = @__(@Autowired))
public class ActivityWinningRecordAdminController {
private final ActivityWinningRecordBiz activityWinningRecordBiz;
@PostMapping("/page")
public ObjectRestResponse<ActivityWinningRecordBo> listActivityWinningRecordWithPage(@RequestBody ActivityWinningRecordFindDTO activityLuckDrawFindDTO){
ActivityWinningRecordBo activityWinningRecordBo = activityWinningRecordBiz.listActivityWinningRecordWithPage(activityLuckDrawFindDTO);
return ObjectRestResponse.succ(activityWinningRecordBo);
}
@PostMapping("/export")
public void exportActivityWinningRecordData(@RequestBody ActivityWinningRecordFindDTO activityWinningRecordFindDTO, HttpServletResponse response){
try {
String name = DateTimeFormatter.ofPattern("YYYYMMddHHmmss").format(LocalDateTime.now());
response.setContentType("application/vnd.ms-excel;charset=utf-8");
String filename = String.format("%s-activity-winnging-record.xlsx",name);
response.setHeader("Content-Disposition","attachment;filename="+ new String(filename.getBytes(), "iso8859-1"));
ServletOutputStream outputStream = response.getOutputStream();
activityWinningRecordBiz.exportActivityWinngingData(activityWinningRecordFindDTO,outputStream);
response.setCharacterEncoding("UTF-8");
}catch (Exception ex){
throw new BaseException("导出数据失败");
}
}
}
\ No newline at end of file
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.xxfc.platform.activity.mapper.ActivityAttendanceRecordMapper">
<!-- 可根据自己的需求,是否要使用 -->
<resultMap type="com.xxfc.platform.activity.entity.ActivityAttendanceRecord" id="activityAttendanceRecordMap">
<result property="id" column="id"/>
<result property="userId" column="user_id"/>
<result property="userName" column="user_name"/>
<result property="phone" column="phone"/>
<result property="activityId" column="activity_id"/>
<result property="activityName" column="activity_name"/>
<result property="positionId" column="position_id"/>
<result property="positionName" column="position_name"/>
<result property="onlineLotteryNum" column="online_lottery_num"/>
<result property="localeLotteryNum" column="locale_lottery_num"/>
<result property="crtTime" column="crt_time"/>
</resultMap>
<select id="selectActivityAttendanceRecord"
resultType="com.xxfc.platform.activity.dto.ActivityAttendanceRecordDTO">
select apu.user_id as `userId`,
apu.`current_progress` as `amount`,
apu.`status`,
apu.crt_time as `attendTime`,
aar.user_name as `userName`,
aar.phone,
aar.position_name as `positionName`,
apr.inviteNum,
awr.prizes
from (select `user_id`,`popularize_id`,`current_progress`,`status`,`crt_time` from activity_popularize_user where
`popularize_id`=#{activityId}
<if test="status!=null">
and `status`=#{status}
</if>
<if test="startTime!=null and endTime!=null">
and `crt_time` between #{startTime} and #{endTime}
</if>
<if test="startTime!=null and endTime==null">
and <![CDATA[
`crt_time`>=#{startTime}
]]>
</if>
<if test="startTime==null and endTime!=null">
and <![CDATA[
`crt_time`<=#{endTime}
]]>
</if>
) as `apu`
inner join (select * from `activity_attendance_record` where `activity_id`=#{activityId}
<if test="phone!=null and phone!=''">
and `phone`=#{phone}
</if>
) as `aar`
on aar.user_id = apu.user_id and apu.popularize_id = aar.activity_id
left join (select `major_user_id`, count(minor_user_id) as `inviteNum`
from activity_popularize_relation where `popularize_id`=#{activityId}
group by major_user_id) as `apr` on apr.major_user_id = apu.user_id
left join (select `user_id`, `activity_id`, group_concat(`prize_name`) as `prizes`
from `activity_winning_record` where `activity_id`=#{activityId}
group by user_id, `activity_id`) as `awr`
on awr.user_id = apu.user_id and awr.activity_id = apu.popularize_id
order by apu.current_progress desc
</select>
</mapper>
\ No newline at end of file
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.xxfc.platform.activity.mapper.ActivityLuckyDrawMapper">
<!-- 可根据自己的需求,是否要使用 -->
<resultMap type="com.xxfc.platform.activity.entity.ActivityLuckyDraw" id="activityLuckyDrawMap">
<result property="id" column="id"/>
<result property="userName" column="user_name"/>
<result property="phone" column="phone"/>
<result property="activityId" column="activity_id"/>
<result property="activityName" column="activity_name"/>
<result property="ticketNum" column="ticket_num"/>
<result property="crtTime" column="crt_time"/>
<result property="userId" column="user_id"/>
</resultMap>
<select id="listLuckDrawWithPage" resultMap="activityLuckyDrawMap">
select * from `activity_lucky_draw` where 1=1
<if test="activityId!=null">
and `activity_id`=#{activityId}
</if>
<if test="phone!=null and phone!=''">
and `phone`=#{phone}
</if>
<if test="startTime!=null and endTime!=null">
and `crt_time` between #{startTime} and #{endTime}
</if>
<if test="startTime!=null and endTime==null">
and <![CDATA[
`crt_time`>=#{startTime}
]]>
</if>
<if test="startTime==null and endTime!=null">
and <![CDATA[
`crt_time`<=#{endTime}
]]>
</if>
order by `crt_time` desc
</select>
</mapper>
\ No newline at end of file
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.xxfc.platform.activity.mapper.ActivityPrizeMapper">
<!-- 可根据自己的需求,是否要使用 -->
<resultMap type="com.xxfc.platform.activity.entity.ActivityPrize" id="activityPrizeMap">
<result property="id" column="id"/>
<result property="serialNumber" column="serial_number"/>
<result property="name" column="name"/>
<result property="iconPath" column="icon_path"/>
<result property="dayMaxUse" column="day_max_use"/>
<result property="totalStock" column="total_stock"/>
<result property="probability" column="probability"/>
<result property="type" column="type"/>
<result property="crtTime" column="crt_time"/>
<result property="isEntity" column="is_entity"/>
<result property="goodsId" column="goods_id"/>
<result property="isPrize" column="is_prize"/>
</resultMap>
</mapper>
\ No newline at end of file
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.xxfc.platform.activity.mapper.ActivityWinningRecordMapper">
<!-- 可根据自己的需求,是否要使用 -->
<resultMap type="com.xxfc.platform.activity.entity.ActivityWinningRecord" id="activityWinningRecordMap">
<result property="id" column="id"/>
<result property="userId" column="user_id"/>
<result property="activityId" column="activity_id"/>
<result property="prizeType" column="prize_type"/>
<result property="prizeName" column="prize_name"/>
<result property="iconPath" column="icon_path"/>
<result property="hasWinning" column="has_winning"/>
<result property="expiryDateCode" column="expiry_date_code"/>
<result property="crtTime" column="crt_time"/>
<result property="lotteryTime" column="lottery_time"/>
<result property="goodsId" column="goods_id"/>
</resultMap>
<select id="selectActivityWinningRecord" resultType="com.xxfc.platform.activity.dto.ActivityWinningRecordPageDTO">
select * from `activity_winning_record` as `awr`
left join `activity_attendance_record` as `aar` ON aar.user_id=awr.user_id and aar.activity_id=awr.activity_id
where 1=1
<if test="activityId!=null">
and awr.`activity_id`=#{activityId}
</if>
<if test="hasWinning!=null">
and awr.`has_winning`=#{hasWinning}
</if>
<if test="phone!=null and phone!=''">
and aar.`phone`=#{phone}
</if>
<if test="prizeType!=null">
and awr.`prize_type`=#{prizeType}
</if>
<if test="startTime!=null and endTime!=null">
and awr.`lottery_time` between #{startTime} and #{endTime}
</if>
<if test="startTime!=null and endTime==null">
and <![CDATA[
awr.`lottery_time` >=#{startTime}
]]>
</if>
<if test="startTime==null and endTime!=null">
and <![CDATA[
awr.`lottery_time` <=#{endTime}
]]>
</if>
order by awr.`lottery_time` desc
</select>
</mapper>
\ No newline at end of file
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment