Commit fa773c80 by 朱亚洁

广告位详情

parent 1511139c
......@@ -515,6 +515,16 @@ public class BookDto extends BaseDto {
*/
private String secondTypeCode;
/**
* 报名量
*/
private Long registerNum;
/**
* 报名率
*/
private BigDecimal registerRate;
public String getQrRemark() {
return qrRemark;
}
......@@ -1311,6 +1321,22 @@ public class BookDto extends BaseDto {
this.depLabelId = depLabelId;
}
public Long getRegisterNum() {
return registerNum;
}
public void setRegisterNum(Long registerNum) {
this.registerNum = registerNum;
}
public BigDecimal getRegisterRate() {
return registerRate;
}
public void setRegisterRate(BigDecimal registerRate) {
this.registerRate = registerRate;
}
@Override
public String toString() {
return "BookDto{" +
......@@ -1401,18 +1427,20 @@ public class BookDto extends BaseDto {
", clickRate=" + clickRate +
", officialAccountsName='" + officialAccountsName + '\'' +
", uniqueNumber='" + uniqueNumber + '\'' +
", isBookGroup=" + isBookGroup +
", bookGroupId=" + bookGroupId +
", groupQrcodeUrl='" + groupQrcodeUrl + '\'' +
", groupQrcodeName='" + groupQrcodeName + '\'' +
", depLabelId=" + depLabelId +
", classifyCount=" + classifyCount +
", groupPersonCount=" + groupPersonCount +
", groupCount=" + groupCount +
", totalIncome=" + totalIncome +
", isBookGroup=" + isBookGroup +
", groupQrcodeLink='" + groupQrcodeLink + '\'' +
", secondTempletId=" + secondTempletId +
", secondTypeCode='" + secondTypeCode + '\'' +
", depLabelId=" + depLabelId +
", registerNum=" + registerNum +
", registerRate=" + registerRate +
'}';
}
}
......@@ -2,6 +2,7 @@ package com.pcloud.book;
import com.alibaba.druid.pool.DruidDataSource;
import com.pcloud.book.mq.config.MQTopicConumer;
import com.pcloud.common.core.constant.MQQueueConstant;
import com.pcloud.common.core.constant.MQTopicProducer;
import com.pcloud.common.core.mq.RabbitMQFactory;
......@@ -182,4 +183,9 @@ public class BookApplication {
public Binding updateProductInfoBind() {
return RabbitMQFactory.bindingExchange(updateProductInfoQueue(), MQTopicProducer.PRODUCT_UPDATE);
}
@Bean
public Queue convert2BookQueue(){
return RabbitMQFactory.queueBuilder(MQQueueConstant.CONVERT_TO_BOOK);
}
}
......@@ -367,6 +367,29 @@ public interface AdvertisingSpaceBiz {
* @throws BizException
*/
AdGroupQrcodeDTO getGroupQrcodeInfo(Long qrcodeId) throws BizException;
/**
*获得剪切的音视频
* @param fileUrl
* @param fileText
* @param startTime
* @param endTime
* @param duration
* @return
*/
public String getCutUrl(String fileUrl, String fileText, Double startTime, Double endTime, Double duration);
/**
* 未转码的文件
* @return
*/
public List<AdvertisingSpace> getUnConvertFile(String adDetailFileId);
/**
* 更新文件路径
* @param filelist
* @param fileUrl
*/
void updateFile(List<AdvertisingSpace> filelist, String fileUrl);
/**
* 获得关闭广告位的出版id
* @return
......
package com.pcloud.book.advertising.biz;
import com.pcloud.book.advertising.dto.BmRegisterDTO;
import com.pcloud.book.advertising.dto.OptionType;
import com.pcloud.book.advertising.entity.AdvertisingBmOption;
import com.pcloud.book.advertising.entity.AdvertisingBmRegister;
import com.pcloud.common.exceptions.BizException;
import java.util.List;
import java.util.Map;
/**
* @描述:报名
* @作者:zhuyajie
* @创建时间:20:03 2019/6/27
* @版本:1.0
*/
public interface BmBiz {
/**
* 获取选项类型
* @return
* @throws BizException
*/
List<OptionType> getOptionType() throws BizException;
/**
* 获取选项数据类型
* @return
* @throws BizException
*/
List<OptionType> getOptionDataType() throws BizException;
/**
* 新增选项列表
* @param advertisingBmOptionList
*/
void addOptionList(List<AdvertisingBmOption> advertisingBmOptionList,Long adId);
/**
* 新增选项配置
* @param bmOption 选项实体
* @return
* @throws BizException
*/
Long addOption(AdvertisingBmOption bmOption) throws BizException;
/**
* 根据应用ID获取选项列表信息
* @param adId 选项实体
* @return
* @throws BizException
*/
List<AdvertisingBmOption> getByAdId(Long adId);
/**
* 修改选项配置
* @param bmOption 选项实体
* @return
* @throws BizException
*/
void modifyOption(AdvertisingBmOption bmOption) throws BizException;
/**
* 删除选项
* @param adId
*/
void deleteByAdId(Long adId);
/**
* 用户提交表单
* @param bmRegister
* @param wechatUserId
* @return
*/
Long userSubmit(AdvertisingBmRegister bmRegister, Long wechatUserId, Long qrcodeId);
/**
* 微信端获取个人报名详情
* @param adId 应用ID
* @param wechatUserId 用户ID
* @return
* @throws BizException
*/
List<BmRegisterDTO> getDetail4Wechat(Long adId, Long wechatUserId, Long qrcodeId) throws BizException;
/**
* 获取报名次数
* @param adId
* @return
*/
public Long getRegisterCountByAdId(Long adId, String statisMonth);
/**
* 获取微信群报名次数
* @param adId
* @param statisMonth
* @param qrcodeId
* @return
*/
public Long getRegisterCountByAdIdQrcodeId(Long adId, String statisMonth, Long qrcodeId);
/**
* 获取报名次数
* @param adIdList
* @return
*/
Long getRegisterCountByAdIds(List<Long> adIdList);
/**
* 导出报名表单
* @param adId
*/
Map<String, Object> exportRegisterInfoByAdId(Long adId,Long qrcodeId);
}
......@@ -3,7 +3,7 @@ package com.pcloud.book.advertising.biz.impl;
import com.pcloud.appcenter.app.dto.AppTypeDto;
import com.pcloud.appcenter.app.service.AppTypeService;
import com.pcloud.book.advertising.biz.AdvertisingSpaceBiz;
import com.pcloud.book.advertising.biz.BmBiz;
import com.pcloud.book.advertising.dao.*;
import com.pcloud.book.advertising.dto.*;
import com.pcloud.book.advertising.entity.*;
......@@ -36,13 +36,18 @@ import com.pcloud.book.group.vo.GroupQrcodeVO;
import com.pcloud.book.util.common.CommonUtils;
import com.pcloud.channelcenter.qrcode.service.QrcodeSceneService;
import com.pcloud.common.core.aspect.ParamLog;
import com.pcloud.common.core.biz.ConvertQueueBiz;
import com.pcloud.common.core.constant.ConvertEnum;
import com.pcloud.common.core.dto.ConvertQueueDto;
import com.pcloud.common.exceptions.BizException;
import com.pcloud.common.page.PageBean;
import com.pcloud.common.page.PageBeanNew;
import com.pcloud.common.page.PageParam;
import com.pcloud.common.utils.DateNewUtils;
import com.pcloud.common.utils.DateUtils;
import com.pcloud.common.utils.ListUtils;
import com.pcloud.common.utils.ResponseHandleUtil;
import com.pcloud.common.utils.aliyun.OssUtils;
import com.pcloud.common.utils.httpclient.UrlUtils;
import com.pcloud.common.utils.string.StringUtil;
import com.pcloud.readercenter.wechat.entity.WechatUser;
......@@ -51,6 +56,7 @@ import com.sdk.wxgroup.SendArticleMessageVO;
import com.sdk.wxgroup.SendPicMessageVO;
import com.sdk.wxgroup.SendTextMessageVO;
import com.sdk.wxgroup.WxGroupSDK;
import org.apache.commons.collections.MapUtils;
import org.apache.commons.lang3.ArrayUtils;
import org.slf4j.Logger;
......@@ -133,6 +139,13 @@ public class AdvertisingSpaceBizImpl implements AdvertisingSpaceBiz {
private ReaderConsr readerConsr;
@Autowired
private LabelConsr labelConsr;
@Autowired
private ConvertQueueBiz convertQueueBiz;
@Autowired
private BmBiz bmBiz;
private static final String ADVERTISING_PUT_PLAN_SCHEDULE_PRE = "ADVERTISING_PUT_PALN_";
/**
* 创建广告位
......@@ -145,8 +158,16 @@ public class AdvertisingSpaceBizImpl implements AdvertisingSpaceBiz {
checkParamBeforeCreate(advertisingSpace);
String settlementMethod = advertisingSpace.getSettlementMethod();
advertisingSpace.setIsOpen(true);
//CPA方式
if (SettlementMethodEnum.CPA.code.equals(settlementMethod)) {
advertisingSpace = equipCPA(advertisingSpace);
}
advertisingSpaceDao.insert(advertisingSpace);
Long adId = advertisingSpace.getId();
//报名表单选项新增
if (SettlementMethodEnum.CPA.code.equals(settlementMethod)) {
bmBiz.addOptionList(advertisingSpace.getAdvertisingBmOptionList(), adId);
}
AdvertisingSettlementMethod method = new AdvertisingSettlementMethod();
method.setMasterId(advertisingSpace.getMasterId());
method.setAdId(adId);
......@@ -157,6 +178,38 @@ public class AdvertisingSpaceBizImpl implements AdvertisingSpaceBiz {
}
/**
* cpa广告详情参数配置
* @param advertisingSpace
* @return
*/
private AdvertisingSpace equipCPA(AdvertisingSpace advertisingSpace) {
if (AdDetailModeEnum.AUDIO.code.equals(advertisingSpace.getAdDetailMode()) || AdDetailModeEnum.VIDEO.code.equals(advertisingSpace.getAdDetailMode())) {
String fileId = advertisingSpace.getAdDetailFileId();
String fileUrl = advertisingSpace.getAdDetailFileUrl();
String title = advertisingSpace.getAdDetailFileName();
Long seconds = advertisingSpace.getAdDetailFilePilotSecond();
if (StringUtil.isEmpty(fileUrl) && !StringUtil.isEmpty(fileId)) {
//转码通知
sendConvertFileQueue(fileId, 0l);
advertisingSpace.setAdDetailFileConvertState(0);
return advertisingSpace;
}
if (!StringUtil.isEmpty(fileUrl)) {//剪切文件
advertisingSpace.setAdDetailFileConvertState(1);
if (null == seconds) {//试播秒数为null,播放全部
advertisingSpace.setAdDetailFilePilotUrl(fileUrl);
advertisingSpace.setAdDetailFilePilotSecond(0L);
} else if (seconds > 0) {
String cutUrl = getCutUrl(fileUrl, title, 0d, seconds.doubleValue(), seconds.doubleValue());
advertisingSpace.setAdDetailFilePilotUrl(cutUrl);
}
}
}
return advertisingSpace;
}
/**
* 新增前校验参数
*/
private void checkParamBeforeCreate(AdvertisingSpace advertisingSpace) {
......@@ -176,13 +229,20 @@ public class AdvertisingSpaceBizImpl implements AdvertisingSpaceBiz {
throw new BookBizException(BookBizException.PARAM_IS_ERROR, "广告位置选择有误!");
}
String settlementMethod = advertisingSpace.getSettlementMethod();
if (AdPositionEnum.WECHAT_GROUP_MSG.equals(adPosition)
&& !SettlementMethodEnum.CPM.code.equals(settlementMethod)) {
throw new BookBizException(BookBizException.PARAM_IS_ERROR, "微信群消息仅支持按曝光量结算!");
}
//按点击量结算、按曝光量结算、按实际行动结算价格不为空
if (ArrayUtils.contains(SettlementMethodEnum.SETTLEMENT_METHOD_NEED_PRICE_GATHER, settlementMethod)
&& null == advertisingSpace.getPriceEachTime()) {
throw new BookBizException(BookBizException.PARAM_IS_ERROR, "按点击量结算和按曝光量结算时每次价格不能为空!");
throw new BookBizException(BookBizException.PARAM_IS_ERROR, "价格不能为空!");
}
if (SettlementMethodEnum.CPA.code.equals(settlementMethod) &&
!AdPositionModeEnum.JUST_PIC.modeCode.equals(advertisingSpace.getAdPositionMode())) {//CPA、非纯图片广告详情、报名表单不为空
if (StringUtil.isEmpty(advertisingSpace.getAdDetailMode())) {
throw new BookBizException(BookBizException.PARAM_IS_ERROR, "广告详情不能为空!");
}
if (ListUtils.isEmpty(advertisingSpace.getAdvertisingBmOptionList())) {
throw new BookBizException(BookBizException.PARAM_IS_ERROR, "报名表单不能为空!");
}
checkCPAParam(advertisingSpace);
}
if (AdPositionEnum.WECHAT_GROUP_MSG.positionCode.equals(advertisingSpace.getAdPosition())) {//微信群投放
if (AdPositionModeEnum.TEXT_AND_LINK.modeCode.equals(advertisingSpace.getAdPositionMode())) {//多文字+多链接
......@@ -201,7 +261,84 @@ public class AdvertisingSpaceBizImpl implements AdvertisingSpaceBiz {
}
}
}
}
/**
* CPA方式参数校验
* @param advertisingSpace
*/
private void checkCPAParam(AdvertisingSpace advertisingSpace) {
if (StringUtil.isEmpty(advertisingSpace.getAdDetailInfo())) {
throw new BookBizException(BookBizException.PARAM_IS_ERROR, "产品介绍不能为空!");
}
if (StringUtil.isEmpty(advertisingSpace.getAdDetailWelfarePic())) {
throw new BookBizException(BookBizException.PARAM_IS_ERROR, "优惠展示图不能为空!");
}
//1图文介绍
if (AdDetailModeEnum.IMG_TEXT.code.equals(advertisingSpace.getAdDetailMode())) {
if (StringUtil.isEmpty(advertisingSpace.getAdDetailCoverPic())) {
throw new BookBizException(BookBizException.PARAM_IS_ERROR, "封面不能为空!");
}
}
//2音频试听
else if (AdDetailModeEnum.AUDIO.code.equals(advertisingSpace.getAdDetailMode())) {
if (StringUtil.isEmpty(advertisingSpace.getAdDetailFileId())) {
throw new BookBizException(BookBizException.PARAM_IS_ERROR, "请上传音频资源!");
}
if (StringUtil.isEmpty(advertisingSpace.getAdDetailTitle())) {
throw new BookBizException(BookBizException.PARAM_IS_ERROR, "标题不能为空!");
}
if (null != advertisingSpace.getAdDetailFileDuration() && null != advertisingSpace.getAdDetailFilePilotSecond()
&& advertisingSpace.getAdDetailFilePilotSecond() >= advertisingSpace.getAdDetailFileDuration()) {
throw new BookBizException(BookBizException.PARAM_IS_ERROR, "试听时长超过音频时长,请重新设置");
}
}
//3视频试看
else if (AdDetailModeEnum.VIDEO.code.equals(advertisingSpace.getAdDetailMode())) {
if (StringUtil.isEmpty(advertisingSpace.getAdDetailCoverPic())) {
throw new BookBizException(BookBizException.PARAM_IS_ERROR, "封面不能为空!");
}
if (StringUtil.isEmpty(advertisingSpace.getAdDetailFileId())) {
throw new BookBizException(BookBizException.PARAM_IS_ERROR, "请上传视频资源!");
}
if (StringUtil.isEmpty(advertisingSpace.getAdDetailTitle())) {
throw new BookBizException(BookBizException.PARAM_IS_ERROR, "标题不能为空!");
}
if (null != advertisingSpace.getAdDetailFileDuration() && null != advertisingSpace.getAdDetailFilePilotSecond()
&& advertisingSpace.getAdDetailFilePilotSecond() >= advertisingSpace.getAdDetailFileDuration()) {
throw new BookBizException(BookBizException.PARAM_IS_ERROR, "试看时长超过视频时长,请重新设置");
}
}
//报名设置
if (null == advertisingSpace.getAdFormMobileCheck()) {
throw new BookBizException(BookBizException.PARAM_IS_ERROR, "手机号校验不能为空!");
}
if (StringUtil.isEmpty(advertisingSpace.getAdFormRemark())) {
throw new BookBizException(BookBizException.PARAM_IS_ERROR, "报名表单备注不能为空!");
}
if (StringUtil.isEmpty(advertisingSpace.getAdFormButton())) {
throw new BookBizException(BookBizException.PARAM_IS_ERROR, "按钮提示不能为空!");
}
}
/**
* 向文件转换中心发送通知
*/
public void sendConvertFileQueue(String fileId, Long fromId) throws BizException {
LOGGER.info("【文件转换(消)】向文件转换中心发送通知,<START>.[fileId]=" + fileId + ",[fromId]=" + fromId);
if (StringUtil.isEmpty(fileId)) {
return;
}
ConvertQueueDto convertQueueDto = new ConvertQueueDto();
convertQueueDto.setFileId(fileId);
convertQueueDto.setFromType(ConvertEnum.BOOK.value);
convertQueueDto.setFromId(fromId);
try {
convertQueueBiz.sendConvertFileQueue(convertQueueDto);
} catch (Exception e) {
LOGGER.error("【文件转换(消)】向文件转换中心发送通知.[sendConvertFileQueue]:" + e.getMessage(), e);
}
LOGGER.info("【文件转换(消)】向文件转换中心发送通知,<END>");
}
/**
......@@ -227,7 +364,17 @@ public class AdvertisingSpaceBizImpl implements AdvertisingSpaceBiz {
if (null != bookNum && bookNum > 0) {
throw new BookBizException(BookBizException.PARAM_IS_ERROR, "已投放书刊的广告位不能修改!");
}
//CPA方式
if (SettlementMethodEnum.CPA.code.equals(advertisingSpace.getSettlementMethod())) {
advertisingSpace = equipCPA(advertisingSpace);
}
advertisingSpaceDao.update(advertisingSpace);
//报名表单选项新增
if (SettlementMethodEnum.CPA.code.equals(advertisingSpace.getSettlementMethod())) {
bmBiz.addOptionList(advertisingSpace.getAdvertisingBmOptionList(), advertisingSpace.getId());
} else {//删除可能有的报名信息
bmBiz.deleteByAdId(advertisingSpace.getId());
}
// 修改结算方式
AdvertisingSettlementMethodDTO methodDTO = advertisingSettlementMethodDao.getByMasterIdAndAdId(space.getMasterId(), space.getId());
AdvertisingSettlementMethod method = new AdvertisingSettlementMethod();
......@@ -280,6 +427,10 @@ public class AdvertisingSpaceBizImpl implements AdvertisingSpaceBiz {
spaceDTO.setSettlementMethod(methodDTO.getSettlementMethod());
spaceDTO.setSettlementMethodName(SettlementMethodEnum.getNameByCode(methodDTO.getSettlementMethod()));
spaceDTO.setPriceEachTime(methodDTO.getPriceEachTime());
//CPA方式填充报名表单
if (SettlementMethodEnum.CPA.code.equals(methodDTO.getSettlementMethod())) {
spaceDTO.setAdvertisingBmOptionList(bmBiz.getByAdId(adId));
}
}
Map<String, Object> paramMap = new HashMap<>();
paramMap.put("adId", adId);
......@@ -419,13 +570,15 @@ public class AdvertisingSpaceBizImpl implements AdvertisingSpaceBiz {
list.add(distributionBook);
}
advertisingDistributionBookDao.batchInsert(list);
//结算方式
AdvertisingSettlementMethodDTO methodDTO = advertisingSettlementMethodDao.getByMasterIdAndAdId(advertisingSpace.getMasterId(), advertisingSpace.getId());
for (DistributionWechatGroup group : book.getGroups()) {
// 获取群信息
GroupQrcode groupQrcode = groupQrcodeDao.getById(group.getQrcodeId());
String groupId = groupQrcode.getWeixinGroupId();
ClassifyDTO classifyDTO = bookGroupClassifyDao.getById(group.getClassifyId());
// 获取机器人微信号
String altId = wechatGroupConsr.getRobotIdByGroupId(groupId);
String altId = wechatGroupConsr.getSendAdRobotByGroupId(groupId);
if (AdPositionModeEnum.TEXT_AND_LINK.modeCode.equals(advertisingSpace.getAdPositionMode())) {
//多文字+多链接 modifyby zhuyajie
//例如:[色]123<link>http://www.baidu.com</link>1111111[闭嘴]
......@@ -444,6 +597,9 @@ public class AdvertisingSpaceBizImpl implements AdvertisingSpaceBiz {
adLink = adLinkOld + "?book_group_id=" + classifyDTO.getBookGroupId() + "&classify_id=" + group.getClassifyId()
+ "&qrcode_id=" + group.getQrcodeId() + "&ad_id=" + advertisingSpace.getId();
}
if (null != methodDTO) {
adLink = adLink + "&settlement_method=" + methodDTO.getSettlementMethod();
}
adLink = UrlUtils.getShortUrl4Own(wechatGroupLinkPrefix + "/link?url=" + URLEncoder.encode(adLink));
}
adTitle = adTitle.replace(link, adLink);
......@@ -473,12 +629,14 @@ public class AdvertisingSpaceBizImpl implements AdvertisingSpaceBiz {
}
sendArticleMessageVO.setLinkUrl(adLink);
sendArticleMessageVO.setPicUrl(advertisingSpace.getAdPic());
LOGGER.info("发送微信消息" + sendArticleMessageVO.toString());
WxGroupSDK.sendArticleMessage(sendArticleMessageVO);
} else if (AdPositionModeEnum.JUST_PIC.modeCode.equals(advertisingSpace.getAdPositionMode())) {
SendPicMessageVO sendPicMessageVO = new SendPicMessageVO();
sendPicMessageVO.setAltId(altId);
sendPicMessageVO.setGroupId(groupId);
sendPicMessageVO.setPicUrl(advertisingSpace.getAdPic());
LOGGER.info("发送微信消息" + sendPicMessageVO.toString());
WxGroupSDK.sendPicMessage(sendPicMessageVO);
}
}
......@@ -702,6 +860,12 @@ public class AdvertisingSpaceBizImpl implements AdvertisingSpaceBiz {
bookDto.setClickRate(clickRate);
BigDecimal income = getIncomeByAdId(adId, bookDto.getBookId(), bookDto.getChannelId(), null);
bookDto.setTotalIncome(income);
//报名量报名率
Long registerNum = bmBiz.getRegisterCountByAdId(adId,null);
BigDecimal registerRate = (null == clickNum || clickNum.equals(0L)) ? BigDecimal.ZERO :
new BigDecimal(registerNum.doubleValue() / clickNum).setScale(2, BigDecimal.ROUND_HALF_UP);
bookDto.setRegisterNum(registerNum);
bookDto.setRegisterRate(registerRate);
}
return pageBean;
}
......@@ -752,6 +916,12 @@ public class AdvertisingSpaceBizImpl implements AdvertisingSpaceBiz {
// 点击读者量
Long clickUserNum = getClickUserNumByGroupQrcodeId(qrcodeDTO.getGroupQrcodeId(), adId, null);
qrcodeDTO.setClickUserNum(clickUserNum);
//报名量报名率
Long registerNum = bmBiz.getRegisterCountByAdId(adId,null);
BigDecimal registerRate = (null == clickNum || clickNum.equals(0L)) ? BigDecimal.ZERO :
new BigDecimal(registerNum.doubleValue() / clickNum).setScale(2, BigDecimal.ROUND_HALF_UP);
qrcodeDTO.setRegisterNum(registerNum);
qrcodeDTO.setRegisterRate(registerRate);
}
return pageBean;
}
......@@ -1043,6 +1213,13 @@ public class AdvertisingSpaceBizImpl implements AdvertisingSpaceBiz {
spaceDTO.setClickRate(clickRate);
BigDecimal income = getIncomeByAdId(spaceDTO.getId());
spaceDTO.setTotalIncome(income);
//报名量报名率
Long registerNum = bmBiz.getRegisterCountByAdId(spaceDTO.getId(),null);
BigDecimal registerRate = (null == spaceDTO.getClickNum() || spaceDTO.getClickNum().equals(0L)) ? BigDecimal.ZERO :
new BigDecimal(registerNum.doubleValue() / spaceDTO.getClickNum()).setScale(2, BigDecimal.ROUND_HALF_UP);
spaceDTO.setRegisterNum(registerNum);
spaceDTO.setRegisterRate(registerRate);
List<AdvertisingDistributionBook> list = advertisingDistributionBookDao.getByAdId(spaceDTO.getId());
if (!ListUtils.isEmpty(list)) {
spaceDTO.setBookNum(list.size());
......@@ -1092,6 +1269,13 @@ public class AdvertisingSpaceBizImpl implements AdvertisingSpaceBiz {
spaceDTO.setClickRate(clickRate);
BigDecimal income = getIncomeByAdId(spaceDTO.getId(), bookId, channelId, statisMonth);
spaceDTO.setTotalIncome(income);
//报名量报名率
Long clickNum = spaceDTO.getClickNum();
Long registerNum = bmBiz.getRegisterCountByAdId(spaceDTO.getId(),statisMonth);
BigDecimal registerRate = (null == clickNum || clickNum.equals(0L)) ? BigDecimal.ZERO :
new BigDecimal(registerNum.doubleValue() / clickNum).setScale(2, BigDecimal.ROUND_HALF_UP);
spaceDTO.setRegisterNum(registerNum);
spaceDTO.setRegisterRate(registerRate);
// 填充广告位置名称
fillAdpositionName4CommonAd(spaceDTO);
}
......@@ -1112,7 +1296,7 @@ public class AdvertisingSpaceBizImpl implements AdvertisingSpaceBiz {
throw new BookBizException(BookBizException.PARAM_IS_ERROR, "暂无数据导出!");
}
// 字段名
String[] rowsName = {"序号", "广告位名称", "广告主", "广告位置", "投放时间", "曝光量", "点击量", "点击率", "累计收益"};
String[] rowsName = {"序号", "广告位名称", "广告主", "广告位置", "投放时间", "曝光量", "点击量", "点击率", "报名量", "报名率", "累计收益"};
List<Object[]> dataList = new ArrayList<>();
Object[] objs;
for (int i = 0; i < list.size(); i++) {
......@@ -1132,8 +1316,15 @@ public class AdvertisingSpaceBizImpl implements AdvertisingSpaceBiz {
BigDecimal clickRate = (null == exposureNum || exposureNum.equals(0L)) ? BigDecimal.ZERO :
new BigDecimal(clickNum.doubleValue() / exposureNum).setScale(2, BigDecimal.ROUND_HALF_UP);
objs[7] = clickRate.multiply(new BigDecimal(100)).setScale(0, BigDecimal.ROUND_HALF_UP) + "%";
//报名量报名率
Long registerNum = bmBiz.getRegisterCountByAdId(spaceDTO.getId(),statisMonth);
BigDecimal registerRate = (null == clickNum || clickNum.equals(0L)) ? BigDecimal.ZERO :
new BigDecimal(registerNum.doubleValue() / clickNum).setScale(2, BigDecimal.ROUND_HALF_UP);
objs[8] = registerNum;
objs[9] = registerRate.multiply(new BigDecimal(100)).setScale(0, BigDecimal.ROUND_HALF_UP) + "%";
BigDecimal income = getIncomeByAdId(spaceDTO.getId(), bookId, channelId, statisMonth);
objs[8] = income + "元";
objs[10] = income + "元";
dataList.add(objs);
}
BookDto bookDto = bookBiz.getBaseById(bookId);
......@@ -1389,15 +1580,18 @@ public class AdvertisingSpaceBizImpl implements AdvertisingSpaceBiz {
Long exposureNum = 0L;
Long clickNum = 0L;
BigDecimal income = BigDecimal.ZERO;
Long registerNum = 0L;
if (null != spaceDTO.getBookId()) {
if (AdPositionEnum.WECHAT_GROUP_MSG.positionCode.equals(spaceDTO.getAdPosition())) {
exposureNum = getExposureNumByGroupQrcodeId(spaceDTO.getQrcodeId(), spaceDTO.getId(), statisMonth);
clickNum = getClickNumByGroupQrcodeId(spaceDTO.getQrcodeId(), spaceDTO.getId(), statisMonth);
income = getIncomeByGroupQrcodeId(spaceDTO.getQrcodeId(), spaceDTO.getId(), statisMonth);
registerNum = bmBiz.getRegisterCountByAdIdQrcodeId(spaceDTO.getId(),statisMonth,spaceDTO.getQrcodeId());
} else {
exposureNum = getExposureNumByAdId(spaceDTO.getId(), spaceDTO.getBookId(), spaceDTO.getAdviserId(), spaceDTO.getChannelId(), statisMonth);
clickNum = getClickNumByAdId(spaceDTO.getId(), spaceDTO.getBookId(), spaceDTO.getAdviserId(), spaceDTO.getChannelId(), statisMonth);
income = getIncomeByAdId(spaceDTO.getId(), spaceDTO.getBookId(), spaceDTO.getChannelId(), statisMonth);
registerNum = bmBiz.getRegisterCountByAdId(spaceDTO.getId(),statisMonth);
}
}
BigDecimal clickRate = (null == exposureNum || exposureNum.equals(0L)) ? BigDecimal.ZERO :
......@@ -1406,6 +1600,12 @@ public class AdvertisingSpaceBizImpl implements AdvertisingSpaceBiz {
spaceDTO.setClickNum(clickNum);
spaceDTO.setClickRate(clickRate);
spaceDTO.setTotalIncome(income);
//报名量报名率
BigDecimal registerRate = (null == clickNum || clickNum.equals(0L)) ? BigDecimal.ZERO :
new BigDecimal(registerNum.doubleValue() / clickNum).setScale(2, BigDecimal.ROUND_HALF_UP);
spaceDTO.setRegisterNum(registerNum);
spaceDTO.setRegisterRate(registerRate);
// 填充广告位置名称
if (AdPositionEnum.WECHAT_GROUP_MSG.positionCode.equals(spaceDTO.getAdPosition())) {
fillAdpositionName4WechatGroupAd(spaceDTO);
......@@ -1452,7 +1652,7 @@ public class AdvertisingSpaceBizImpl implements AdvertisingSpaceBiz {
throw new BookBizException(BookBizException.PARAM_IS_ERROR, "暂无数据导出!");
}
// 字段名
String[] rowsName = {"序号", "广告位名称", "对方ID", "广告位置", "投放渠道", "投放时间", "曝光量", "点击量", "点击率", "累计收益"};
String[] rowsName = {"序号", "广告位名称", "对方ID", "广告位置", "投放渠道", "投放时间", "曝光量", "点击量", "点击率", "报名量", "报名率", "累计收益"};
List<Object[]> dataList = new ArrayList<>();
Object[] objs;
for (int i = 0; i < list.size(); i++) {
......@@ -1488,15 +1688,18 @@ public class AdvertisingSpaceBizImpl implements AdvertisingSpaceBiz {
Long exposureNum = 0L;
Long clickNum = 0L;
BigDecimal income = BigDecimal.ZERO;
Long registerNum = 0L;
if (null != spaceDTO.getBookId()) {
if (AdPositionEnum.WECHAT_GROUP_MSG.positionCode.equals(spaceDTO.getAdPosition())) {
exposureNum = getExposureNumByGroupQrcodeId(spaceDTO.getQrcodeId(), spaceDTO.getId(), statisMonth);
clickNum = getClickNumByGroupQrcodeId(spaceDTO.getQrcodeId(), spaceDTO.getId(), statisMonth);
income = getIncomeByGroupQrcodeId(spaceDTO.getQrcodeId(), spaceDTO.getId(), statisMonth);
registerNum = bmBiz.getRegisterCountByAdIdQrcodeId(spaceDTO.getId(),statisMonth,spaceDTO.getQrcodeId());
} else {
exposureNum = getExposureNumByAdId(spaceDTO.getId(), spaceDTO.getBookId(), spaceDTO.getAdviserId(), spaceDTO.getChannelId(), statisMonth);
clickNum = getClickNumByAdId(spaceDTO.getId(), spaceDTO.getBookId(), spaceDTO.getAdviserId(), spaceDTO.getChannelId(), statisMonth);
income = getIncomeByAdId(spaceDTO.getId(), spaceDTO.getBookId(), spaceDTO.getChannelId(), statisMonth);
registerNum = bmBiz.getRegisterCountByAdId(spaceDTO.getId(),statisMonth);
}
}
objs[6] = exposureNum;
......@@ -1504,7 +1707,12 @@ public class AdvertisingSpaceBizImpl implements AdvertisingSpaceBiz {
BigDecimal clickRate = (null == exposureNum || exposureNum.equals(0L)) ? BigDecimal.ZERO :
new BigDecimal(clickNum.doubleValue() / exposureNum).setScale(2, BigDecimal.ROUND_HALF_UP);
objs[8] = clickRate.multiply(new BigDecimal(100)).setScale(0, BigDecimal.ROUND_HALF_UP) + "%";
objs[9] = income + "元";
//报名量报名率
BigDecimal registerRate = (null == clickNum || clickNum.equals(0L)) ? BigDecimal.ZERO :
new BigDecimal(registerNum.doubleValue() / clickNum).setScale(2, BigDecimal.ROUND_HALF_UP);
objs[9] = registerNum;
objs[10] = registerRate.multiply(new BigDecimal(100)).setScale(0, BigDecimal.ROUND_HALF_UP) + "%";
objs[11] = income + "元";
dataList.add(objs);
}
String[] dateStr = statisMonth.split("-");
......@@ -1554,6 +1762,13 @@ public class AdvertisingSpaceBizImpl implements AdvertisingSpaceBiz {
}
if (!ListUtils.isEmpty(list)) {
list.forEach(spaceDTO -> spaceDTO.setBookId(bookId));
for (AdvertisingSpaceDTO spaceDTO : list) {
//填充结算方式
AdvertisingSettlementMethodDTO methodDTO = advertisingSettlementMethodDao.getByMasterIdAndAdId(spaceDTO.getMasterId(), spaceDTO.getId());
if (null != methodDTO) {
spaceDTO.setSettlementMethod(methodDTO.getSettlementMethod());
}
}
}
return list;
}
......@@ -1584,6 +1799,27 @@ public class AdvertisingSpaceBizImpl implements AdvertisingSpaceBiz {
return new AdvertisingSpaceDTO();
}
spaceDTO.setBookId(bookGroupDTO.getBookId());
//填充结算方式
AdvertisingSettlementMethodDTO methodDTO = advertisingSettlementMethodDao.getByMasterIdAndAdId(spaceDTO.getMasterId(), spaceDTO.getId());
if (null != methodDTO) {
spaceDTO.setSettlementMethod(methodDTO.getSettlementMethod());
}
return spaceDTO;
}
/**
* 填充CPA结算方式参数
* @param adId
* @param masterId
*/
public AdvertisingSpaceDTO fillCPAInfo(Long adId, Long masterId, AdvertisingSpaceDTO spaceDTO) {
AdvertisingSettlementMethodDTO methodDTO = advertisingSettlementMethodDao.getByMasterIdAndAdId(masterId, adId);
if (null != methodDTO) {
//CPA方式填充报名表单
if (SettlementMethodEnum.CPA.code.equals(methodDTO.getSettlementMethod())) {
spaceDTO.setAdvertisingBmOptionList(bmBiz.getByAdId(adId));
}
}
return spaceDTO;
}
......@@ -1729,6 +1965,13 @@ public class AdvertisingSpaceBizImpl implements AdvertisingSpaceBiz {
masterDTO.setClickRate(clickRate);
BigDecimal income = getIncomeByMasterId(masterDTO.getId());
masterDTO.setTotalIncome(income);
List<Long> adIdList = advertisingSpaceDao.getAdIdsByMasterId(masterDTO.getId());
//报名量报名率
Long registerNum = bmBiz.getRegisterCountByAdIds(adIdList);
BigDecimal registerRate = (null == clickNum || clickNum.equals(0L)) ? BigDecimal.ZERO :
new BigDecimal(registerNum.doubleValue() / clickNum).setScale(2, BigDecimal.ROUND_HALF_UP);
masterDTO.setRegisterNum(registerNum);
masterDTO.setRegisterRate(registerRate);
}
return pageBean;
}
......@@ -1872,6 +2115,53 @@ public class AdvertisingSpaceBizImpl implements AdvertisingSpaceBiz {
}
@Override
public String getCutUrl(String fileUrl, String fileText, Double startTime, Double endTime, Double duration) {
String musicUrl;
try {
if (startTime.equals(0d) && endTime.equals(0d)) {
musicUrl = fileUrl;
} else {
String realUrl = OssUtils.submitClipJob(fileText, fileUrl, startTime.toString(), duration.toString());
musicUrl = realUrl;
}
} catch (Exception e) {
LOGGER.error("音视频剪切失败" + e.getMessage(), e);
throw new BookBizException(BookBizException.ERROR, "音视频剪切失败");
}
return musicUrl;
}
@Override
public List<AdvertisingSpace> getUnConvertFile(String adDetailFileId) {
return advertisingSpaceDao.getUnConvertFile(adDetailFileId);
}
@Override
public void updateFile(List<AdvertisingSpace> filelist, String fileUrl) {
if (ListUtils.isEmpty(filelist)) {
return;
}
for (AdvertisingSpace advertisingSpace : filelist) {
if (null == advertisingSpace) {
continue;
}
Long seconds = advertisingSpace.getAdDetailFilePilotSecond();
//更新
AdvertisingSpace space = new AdvertisingSpace();
space.setAdDetailFileConvertState(1);
space.setAdDetailFileUrl(fileUrl);
space.setAdDetailFileId(advertisingSpace.getAdDetailFileId());
if (null != seconds && seconds > 0) {
String cutUrl = getCutUrl(fileUrl, advertisingSpace.getAdDetailFileName(), 0d, seconds.doubleValue(), seconds.doubleValue());
space.setAdDetailFilePilotUrl(cutUrl);
} else {//播放全部
space.setAdDetailFilePilotUrl(fileUrl);
}
advertisingSpaceDao.updateByFileId(space);
}
}
@Override
public List<Long> getCloseAgentId() {
return advertisingAgentPermissionDao.getCloseAgentId();
}
......
package com.pcloud.book.advertising.biz.impl;
import com.pcloud.book.advertising.biz.BmBiz;
import com.pcloud.book.advertising.dao.AdvertisingSpaceDao;
import com.pcloud.book.advertising.dao.BmOptionDao;
import com.pcloud.book.advertising.dao.BmOptionItemDao;
import com.pcloud.book.advertising.dao.BmRegisterDao;
import com.pcloud.book.advertising.dao.BmRegisterItemDao;
import com.pcloud.book.advertising.dto.AdvertisingSpaceDTO;
import com.pcloud.book.advertising.dto.BmRegisterDTO;
import com.pcloud.book.advertising.dto.BmRegisterItemDTO;
import com.pcloud.book.advertising.dto.OptionType;
import com.pcloud.book.advertising.entity.AdvertisingBmOption;
import com.pcloud.book.advertising.entity.AdvertisingBmOptionItem;
import com.pcloud.book.advertising.entity.AdvertisingBmRegister;
import com.pcloud.book.advertising.entity.AdvertisingBmRegisterItem;
import com.pcloud.book.base.exception.BookBizException;
import com.pcloud.book.consumer.reader.ReaderConsr;
import com.pcloud.book.util.common.ExcelUtils;
import com.pcloud.common.entity.UploadResultInfo;
import com.pcloud.common.exceptions.BizException;
import com.pcloud.common.exceptions.ExportException;
import com.pcloud.common.utils.ListUtils;
import com.pcloud.common.utils.aliyun.OssUtils;
import com.pcloud.common.utils.string.StringUtil;
import com.pcloud.common.utils.validate.ValidateUtils;
import com.pcloud.readercenter.wechat.entity.WechatUser;
import org.apache.poi.ss.usermodel.CellStyle;
import org.apache.poi.ss.usermodel.HorizontalAlignment;
import org.apache.poi.ss.util.CellRangeAddress;
import org.apache.poi.xssf.streaming.SXSSFCell;
import org.apache.poi.xssf.streaming.SXSSFRow;
import org.apache.poi.xssf.streaming.SXSSFSheet;
import org.apache.poi.xssf.streaming.SXSSFWorkbook;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.dao.DataAccessException;
import org.springframework.stereotype.Component;
import org.springframework.transaction.annotation.Transactional;
import java.io.File;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.UUID;
/**
* @描述:报名
* @作者:zhuyajie
* @创建时间:20:04 2019/6/27
* @版本:1.0
*/
@Component("bmBiz")
public class BmBizImpl implements BmBiz {
private static final Logger LOGGER = LoggerFactory.getLogger(BmBizImpl.class);
@Autowired
private BmOptionDao bmOptionDao;
@Autowired
private BmOptionItemDao bmOptionItemDao;
@Autowired
private ReaderConsr readerConsr;
@Autowired
private BmRegisterDao bmRegisterDao;
@Autowired
private BmRegisterItemDao bmRegisterItemDao;
@Autowired
private AdvertisingSpaceDao advertisingSpaceDao;
/**
* 获取报名商品选项类型
*/
@Override
public List<OptionType> getOptionType() throws BizException {
List<OptionType> list = new ArrayList<>();
OptionType optionType = new OptionType("input", "文本域(读者最多输入50字)");
list.add(optionType);
optionType = new OptionType("textarea", "多行文本域(读者最多输入2000字)");
list.add(optionType);
optionType = new OptionType("radio", "单选按钮");
list.add(optionType);
optionType = new OptionType("checkbox", "复选框");
list.add(optionType);
optionType = new OptionType("select", "选择(列表/菜单)");
list.add(optionType);
// optionType = new OptionType("levelselect", "2级选择(列表/菜单)");
// list.add(optionType);
optionType = new OptionType("file", "文件域");
list.add(optionType);
// optionType = new OptionType("areas", "省市区");
// list.add(optionType);
return list;
}
/**
* 获取报名商品选项数据类型
*/
@Override
public List<OptionType> getOptionDataType() throws BizException {
List<OptionType> list = new ArrayList<>();
OptionType optionType = new OptionType("text", "不限");
list.add(optionType);
optionType = new OptionType("number", "数字");
list.add(optionType);
optionType = new OptionType("chinese", "汉字");
list.add(optionType);
optionType = new OptionType("english", "字母");
list.add(optionType);
optionType = new OptionType("email", "邮箱");
list.add(optionType);
optionType = new OptionType("date", "日期");
list.add(optionType);
optionType = new OptionType("mobile", "手机");
list.add(optionType);
optionType = new OptionType("phone", "固话");
list.add(optionType);
optionType = new OptionType("idcard", "身份证");
list.add(optionType);
// optionType = new OptionType("image", "图片");
// list.add(optionType);
return list;
}
/**
* 新增选项列表
*/
@Override
public void addOptionList(List<AdvertisingBmOption> advertisingBmOptionList, Long adId) {
if (ListUtils.isEmpty(advertisingBmOptionList) || null == adId) {
return;
}
List<Long> optionIds = bmOptionDao.getOptionIdsByAdId(adId);
List<Long> deleteOptionIds =new ArrayList<>();
for (AdvertisingBmOption bmOption : advertisingBmOptionList) {
bmOption.setAdId(adId);
if (!ListUtils.isEmpty(optionIds) && null != bmOption.getId()) {//修改选项
modifyOption(bmOption);
optionIds.remove(bmOption.getId());
} else {
addOption(bmOption);
}
}
if (!ListUtils.isEmpty(optionIds)) {//要删除的选项
bmOptionDao.deleteByIds(optionIds);
for (Long optionId:optionIds){
bmOptionItemDao.deleteByOptionId(optionId);
}
}
}
/**
* 新增选项
*/
@Override
@Transactional(rollbackFor = Exception.class)
public Long addOption(AdvertisingBmOption bmOption) throws BizException {
Long adId = bmOption.getAdId();
// 校验参数
if (null == adId || null == bmOption.getItemInputType() || null == bmOption.getItemTitle()) {
throw new BookBizException(BookBizException.PARAM_IS_ERROR, "参数有误!");
}
// 新增选项
if (null == bmOption.getSeq()) {
bmOption.setSeq(0L);
}
bmOption.setCreateUser(0L);
bmOptionDao.insert(bmOption);
Long optionId = bmOption.getId();
// 添加选项清单
addOptionItem(bmOption.getOptionItem(), bmOption.getCreateUser(), optionId);
return optionId;
}
/**
* 添加选项清单
* @param itemList 选项清单列表
* @param partyId 参与者ID
* @param optionId 选项ID
* @throws BizException
*/
public void addOptionItem(List<AdvertisingBmOptionItem> itemList, Long partyId, Long optionId) throws BizException {
if (itemList != null && itemList.size() > 0) {
Long parentId = 0L;
for (int i = 0; i < itemList.size(); i++) {
AdvertisingBmOptionItem item = itemList.get(i);
item.setOptionId(optionId);
item.setCreateUser(partyId);
String text = item.getText();
if (text != null && !text.trim().equals("")) {
String txt = text.replace("#", "");
// 二级
if (text.indexOf("##") > -1) {
item.setParentId(parentId);
item.setText(txt);
bmOptionItemDao.insert(item);
}
// 一级
else if (text.indexOf("#") > -1) {
item.setParentId(0L);
item.setText(txt);
bmOptionItemDao.insert(item);
parentId = item.getId();
} else {
item.setParentId(0L);
item.setText(txt);
bmOptionItemDao.insert(item);
}
} else {
item.setParentId(0L);
bmOptionItemDao.insert(item);
}
}
}
}
/**
* 根据应用ID获取选项列表信息
*/
@Override
public List<AdvertisingBmOption> getByAdId(Long adId)
throws BizException {
if (null == adId){
return new ArrayList<>();
}
List<AdvertisingBmOption> list = bmOptionDao.getByAdId(adId);
return list;
}
/**
* 应用修改选项
*/
@Override
@Transactional(rollbackFor = Exception.class)
public void modifyOption(AdvertisingBmOption bmOption) throws BizException {
Long adId = bmOption.getAdId();
Long id = bmOption.getId();
// 校验参数
if (adId == null || bmOption.getItemInputType() == null
|| bmOption.getItemTitle() == null || id == null) {
throw new BookBizException(BookBizException.PARAM_IS_ERROR, "参数有误!");
}
// 修改选项
bmOption.setUpdateUser(0L);
bmOptionDao.update(bmOption);
Long optionId = bmOption.getId();
// 删除之前的选项清单
bmOptionItemDao.deleteByOptionId(id);
// 添加选项清单
addOptionItem(bmOption.getOptionItem(), bmOption.getUpdateUser(), optionId);
}
@Override
public void deleteByAdId(Long adId) {
List<Long> optionIds = bmOptionDao.getOptionIdsByAdId(adId);
if (ListUtils.isEmpty(optionIds)) {
return;
}
for (Long optionId : optionIds) {
bmOptionItemDao.deleteByOptionId(optionId);
}
bmOptionDao.deleteByIds(optionIds);
}
@Override
public Long userSubmit(AdvertisingBmRegister bmRegister, Long wechatUserId, Long qrcodeId) {
// 检测参数
Long adId = bmRegister.getAdId();
if (adId == null) {
throw new BookBizException(BookBizException.PARAM_IS_ERROR, "参数有误!");
}
// 获取用户昵称
WechatUser wechat = readerConsr.getWechatUser(wechatUserId);
bmRegister.setNickName(wechat == null ? "" : wechat.getWechatUserNickname());
bmRegister.setQrcodeId(qrcodeId);
bmRegisterDao.insert(bmRegister);
Long registerId = bmRegister.getId();
// 添加用户选项
addRegisterItem(bmRegister.getBmRegisterItemList(), adId, wechatUserId, registerId);
return registerId;
}
/**
* 添加用户选项
* @param items
* @param adId
* @param wechatUserId
* @param registerId
* @throws BizException
*/
public void addRegisterItem(List<AdvertisingBmRegisterItem> items, Long adId, Long wechatUserId, Long registerId) throws BizException {
if (ListUtils.isEmpty(items)) {
return;
}
for (AdvertisingBmRegisterItem item : items) {
item.setUserId(wechatUserId);
item.setAdId(adId);
item.setRegisterId(registerId);
//多选单选选项id
List<Long> optionItems = item.getOptionItemIds();
if (ListUtils.isEmpty(optionItems)) {
item.setOptionItemId(0L);
bmRegisterItemDao.insert(item);
}else {
for (Long optionItemId : optionItems) {
if (null == optionItemId) {
continue;
}
item.setOptionItemId(optionItemId);
String optionValue = bmOptionItemDao.getValueById(optionItemId);
item.setOptionValue(optionValue);
bmRegisterItemDao.insert(item);
}
}
}
}
/**
* 微信端获取个人报名详情
*/
@Override
public List<BmRegisterDTO> getDetail4Wechat(Long adId, Long wechatUserId, Long qrcodeId) throws BizException {
Map<String, Object> paramMap = new HashMap<>();
paramMap.put("adId", adId);
paramMap.put("wechatUserId", wechatUserId);
paramMap.put("qrcodeId", qrcodeId);
List<BmRegisterDTO> result = bmRegisterDao.getDetailByUser(paramMap);
return result;
}
@Override
public Long getRegisterCountByAdId(Long adId,String statisMonth) {
return bmRegisterDao.getRegisterCountByAdId(adId,statisMonth);
}
@Override
public Long getRegisterCountByAdIdQrcodeId(Long adId, String statisMonth, Long qrcodeId) {
return bmRegisterDao.getRegisterCountByAdIdQrcodeId(adId, statisMonth, qrcodeId);
}
@Override
public Long getRegisterCountByAdIds(List<Long> adIdList) {
if (ListUtils.isEmpty(adIdList)){
return 0L;
}
return bmRegisterDao.getRegisterCountByAdIds(adIdList);
}
@Override
public Map<String, Object> exportRegisterInfoByAdId(Long adId,Long qrcodeId) {
Map<String, Object> result = new HashMap<>();
Long registerCount = bmRegisterDao.getRegisterCountByAdId(adId,null);
if (registerCount == 0) {
throw new BookBizException(BookBizException.PARAM_IS_ERROR, "无报名信息!");
}
try {
String title = "报名用户信息";
AdvertisingSpaceDTO advertisingSpaceDTO = advertisingSpaceDao.getDTOById(adId);
if (null != advertisingSpaceDTO) {
title = advertisingSpaceDTO.getAdName() + "-" + title;
}
List<AdvertisingBmOption> optionList = bmOptionDao.getByAdId(adId);
List<String> rowsNameList = new ArrayList<>();
rowsNameList.add("序号");
rowsNameList.add("报名人");
rowsNameList.add("报名时间");
for (int t = 0; t < optionList.size(); t++) {
AdvertisingBmOption option = optionList.get(t);
rowsNameList.add(option.getItemTitle());
}
String[] rowsName = rowsNameList.toArray(new String[0]);
String fileUrl = "";
//异步导出
String filePath = exportRegisterInfo(title, rowsName, adId, optionList, qrcodeId);
result.put("fileName", title);
result.put("filePath", filePath);
return result;
} catch (DataAccessException e) {
LOGGER.error("导出用户信息时【exportRegisterInfoByMaster】" + e.getMessage(), e);
throw new BookBizException(BookBizException.ERROR, "导出注册用户相关信息时出现异常");
} catch (Exception e) {
LOGGER.error("调用commoncenter生成Excel异常:" + e.getMessage(), e);
throw new BookBizException(BookBizException.ERROR, "导出失败,请稍后重试");
}
}
private String exportRegisterInfo(String title, String[] rowsName, Long adId, List<AdvertisingBmOption> optionList, Long qrcodeId) {
LOGGER.info("导出相关信息:adId=" + adId + ",optionList=" + optionList);
SXSSFWorkbook wb = new SXSSFWorkbook(200);
int columnNum = rowsName.length;
int rowIndex = 0;
SXSSFRow row;
SXSSFCell cell;
//设置表头样式
CellStyle headerStyle = ExcelUtils.getColumnTopStyle(wb);
SXSSFSheet sheet = wb.createSheet();
row = sheet.createRow(rowIndex);
cell = row.createCell(0);
//合并前两行
sheet.addMergedRegion(new CellRangeAddress(rowIndex, ++rowIndex, 0, columnNum - 1));
cell.setCellStyle(headerStyle);
cell.setCellValue(title);
//设置属性
row = sheet.createRow(++rowIndex);
for (int i = 0; i < rowsName.length; ++i) {
sheet.setColumnWidth(i, 20 * 256);
cell = row.createCell(i);
cell.setCellStyle(headerStyle);
cell.setCellValue(rowsName[i]);
}
//设置数据样式
CellStyle dataStyle = ExcelUtils.getDataStyle(wb);
dataStyle.setAlignment(HorizontalAlignment.CENTER);
//准备初始数据
SimpleDateFormat df = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
int k = 1;
List<BmRegisterDTO> registerDtos = bmRegisterDao.exportRegisterInfoById(adId, qrcodeId);
if (!ListUtils.isEmpty(registerDtos)) {
//excel数据准备
this.exportExcelByDataList(registerDtos, dataStyle, k, rowIndex, sheet, optionList, df);
}
//上传文件
String fileUrl = "";
try {
String UID = UUID.randomUUID().toString();
String path = UID + ".xlsx";
FileOutputStream fileOut = new FileOutputStream(path);
wb.write(fileOut);
fileOut.flush();
fileOut.close();
wb.close();
UploadResultInfo uploadResultInfo = OssUtils.uploadLocalFile(path, "xlsx");
fileUrl = uploadResultInfo.getUrl();
LOGGER.info("=======fileUrl==========" + OssUtils.urlAddKeyLong(fileUrl));
new File(path).delete();
} catch (FileNotFoundException e) {
LOGGER.error("临时文件Excel路径找不到" + e.getMessage(), e);
throw new ExportException(BookBizException.ERROR, "导出Excel失败");
} catch (IOException e) {
LOGGER.error("生成临时文件Excel异常" + e.getMessage(), e);
throw new ExportException(BookBizException.ERROR, "导出Excel失败");
}
return fileUrl;
}
/**
* excel数据导出
* @param registerDtos
* @param dataStyle
* @param k
* @param rowIndex
* @param sheet
* @param optionList
* @param df
*/
private void exportExcelByDataList(List<BmRegisterDTO> registerDtos,CellStyle dataStyle,int k,int rowIndex,SXSSFSheet sheet,List<AdvertisingBmOption> optionList,SimpleDateFormat df){
LOGGER.info("excel数据导出");
for (BmRegisterDTO registerDto : registerDtos) {
SXSSFRow srow = sheet.createRow(++rowIndex);
SXSSFCell cell0 = srow.createCell(0);
cell0.setCellStyle(dataStyle);
cell0.setCellValue(k++);
SXSSFCell cell1 = srow.createCell(1);
cell1.setCellStyle(dataStyle);
cell1.setCellValue(registerDto.getNickName() == null ? "" : registerDto.getNickName());
SXSSFCell cell2 = srow.createCell(2);
cell2.setCellStyle(dataStyle);
cell2.setCellValue(registerDto.getCreateTime() != null ? df.format(registerDto.getCreateTime()) : "");
for (int m = 0; m < optionList.size(); m++) {
AdvertisingBmOption appOption = optionList.get(m);
Long optionId = appOption.getId();
String optionValue = "";
for (BmRegisterItemDTO dto : registerDto.getRegisterItemDTOS()) {
if (optionId.equals(dto.getOptionId())) {
optionValue = dto.getOptionValue();
optionValue = StringUtil.isEmpty(optionValue) ? "" : optionValue;
}
}
SXSSFCell cellm = srow.createCell(m + 3);
cellm.setCellStyle(dataStyle);
cellm.setCellValue(optionValue);
}
}
}
}
package com.pcloud.book.advertising.dao;
import java.util.List;
import java.util.Map;
import com.pcloud.book.advertising.dto.AdvertisingSpaceDTO;
import com.pcloud.book.advertising.entity.AdvertisingSpace;
import com.pcloud.common.core.dao.BaseDao;
import java.util.List;
import java.util.Map;
/**
* Description 广告位数据访问层接口
* @author PENG
......@@ -49,6 +50,18 @@ public interface AdvertisingSpaceDao extends BaseDao<AdvertisingSpace> {
List<AdvertisingSpaceDTO> getDTOByBookId(Map<String, Object> paramMap);
/**
* 未转码的文件
* @return
*/
public List<AdvertisingSpace> getUnConvertFile(String adDetailFileId);
/**
* 根据fileId更新
* @param advertisingSpace
*/
public void updateByFileId(AdvertisingSpace advertisingSpace);
/**
* 更新测试状态
* @param isTest
* @param id
......@@ -59,4 +72,11 @@ public interface AdvertisingSpaceDao extends BaseDao<AdvertisingSpace> {
* 根据id集合获取
*/
List<AdvertisingSpace> getByIds(List<Long> ids);
/**
* 获取广告id列表
* @param id
* @return
*/
List<Long> getAdIdsByMasterId(Long id);
}
package com.pcloud.book.advertising.dao;
import com.pcloud.book.advertising.entity.AdvertisingBmOption;
import com.pcloud.common.core.dao.BaseDao;
import java.util.List;
import java.util.Map;
/**
* @描述:报名选项
* @作者:zhuyajie
* @创建时间:20:05 2019/6/27
* @版本:1.0
*/
public interface BmOptionDao extends BaseDao<AdvertisingBmOption> {
/**
* 获取报名列表
* @param adId
* @return
*/
List<AdvertisingBmOption> getByAdId(Long adId);
/**
* 批量删除
* @param optionIds
*/
void deleteByIds(List<Long> optionIds);
/**
* 根据广告id获取选项id列表
* @param adId
* @return
*/
List<Long> getOptionIdsByAdId(Long adId);
}
package com.pcloud.book.advertising.dao;
import com.pcloud.book.advertising.entity.AdvertisingBmOptionItem;
import com.pcloud.common.core.dao.BaseDao;
/**
* @描述:报名选项清单
* @作者:zhuyajie
* @创建时间:20:06 2019/6/27
* @版本:1.0
*/
public interface BmOptionItemDao extends BaseDao<AdvertisingBmOptionItem> {
/**
* 根据选项ID删除选项清单
* @param optionId 选项ID
* @return
*/
long deleteByOptionId(Long optionId);
/**
* 获取选项值
* @param optionItemId
* @return
*/
String getValueById(Long optionItemId);
}
package com.pcloud.book.advertising.dao;
import com.pcloud.book.advertising.dto.BmRegisterDTO;
import com.pcloud.book.advertising.entity.AdvertisingBmRegister;
import com.pcloud.common.core.dao.BaseDao;
import java.util.List;
import java.util.Map;
/**
* @描述:报名记录
* @作者:zhuyajie
* @创建时间:20:06 2019/6/27
* @版本:1.0
*/
public interface BmRegisterDao extends BaseDao<AdvertisingBmRegister> {
/**
* 获取用户报名信息
* @param paramMap
* @return
*/
List<BmRegisterDTO> getDetailByUser(Map<String, Object> paramMap);
/**
* 获取报名数量
* @param adId
* @return
*/
Long getRegisterCountByAdId(Long adId, String statisMonth);
/**
* 报名数量
* @param adIdList
* @return
*/
Long getRegisterCountByAdIds(List<Long> adIdList);
/**
* 查报名信息
* @param adId
* @return
*/
List<BmRegisterDTO> exportRegisterInfoById(Long adId, Long qrcodeId);
/**
* 获取微信群报名次数
* @param adId
* @param statisMonth
* @param qrcodeId
* @return
*/
Long getRegisterCountByAdIdQrcodeId(Long adId, String statisMonth, Long qrcodeId);
}
package com.pcloud.book.advertising.dao;
import com.pcloud.book.advertising.entity.AdvertisingBmRegisterItem;
import com.pcloud.common.core.dao.BaseDao;
/**
* @描述:报名选项记录
* @作者:zhuyajie
* @创建时间:20:05 2019/6/27
* @版本:1.0
*/
public interface BmRegisterItemDao extends BaseDao<AdvertisingBmRegisterItem> {
}
......@@ -60,6 +60,16 @@ public class AdvertisingSpaceDaoImpl extends BaseDaoImpl<AdvertisingSpace> imple
}
@Override
public List<AdvertisingSpace> getUnConvertFile(String adDetailFileId) {
return getSessionTemplate().selectList(getStatement("getUnConvertFile"),adDetailFileId);
}
@Override
public void updateByFileId(AdvertisingSpace advertisingSpace) {
getSessionTemplate().update(getStatement("updateByFileId"),advertisingSpace);
}
@Override
public void updateTestStatus(Boolean isTest, Long id) {
Map<String, Object> map = new HashMap<>();
map.put("id", id);
......@@ -73,4 +83,9 @@ public class AdvertisingSpaceDaoImpl extends BaseDaoImpl<AdvertisingSpace> imple
map.put("ids", ids);
return getSessionTemplate().selectList(getStatement("getByIds"), map);
}
@Override
public List<Long> getAdIdsByMasterId(Long masterId) {
return getSessionTemplate().selectList(getStatement("getAdIdsByMasterId"),masterId);
}
}
package com.pcloud.book.advertising.dao.impl;
import com.pcloud.book.advertising.dao.BmOptionDao;
import com.pcloud.book.advertising.entity.AdvertisingBmOption;
import com.pcloud.common.core.dao.BaseDaoImpl;
import org.springframework.stereotype.Component;
import java.util.List;
/**
* @描述:报名选项
* @作者:zhuyajie
* @创建时间:20:14 2019/6/27
* @版本:1.0
*/
@Component("bmOptionDao")
public class BmOptionDaoImpl extends BaseDaoImpl<AdvertisingBmOption> implements BmOptionDao {
@Override
public List<AdvertisingBmOption> getByAdId(Long adId) {
return getSessionTemplate().selectList(getStatement("getByAdId"), adId);
}
@Override
public void deleteByIds(List<Long> optionIds) {
getSessionTemplate().delete(getStatement("deleteByIds"), optionIds);
}
@Override
public List<Long> getOptionIdsByAdId(Long adId) {
return getSessionTemplate().selectList(getStatement("getOptionIdsByAdId"), adId);
}
}
package com.pcloud.book.advertising.dao.impl;
import com.pcloud.book.advertising.dao.BmOptionItemDao;
import com.pcloud.book.advertising.entity.AdvertisingBmOptionItem;
import com.pcloud.common.core.dao.BaseDaoImpl;
import org.springframework.stereotype.Component;
/**
* @描述:报名选项清单
* @作者:zhuyajie
* @创建时间:20:16 2019/6/27
* @版本:1.0
*/
@Component("bmOptionItemDao")
public class BmOptionItemDaoImpl extends BaseDaoImpl<AdvertisingBmOptionItem> implements BmOptionItemDao{
/**
* 根据选项ID删除选项清单
*/
@Override
public long deleteByOptionId(Long optionId) {
return super.getSqlSession().delete(getStatement("deleteByOptionId"), optionId);
}
@Override
public String getValueById(Long optionItemId) {
return getSessionTemplate().selectOne(getStatement("getValueById"),optionItemId);
}
}
package com.pcloud.book.advertising.dao.impl;
import com.pcloud.book.advertising.dao.BmRegisterDao;
import com.pcloud.book.advertising.dto.BmRegisterDTO;
import com.pcloud.book.advertising.entity.AdvertisingBmRegister;
import com.pcloud.common.core.dao.BaseDaoImpl;
import org.springframework.stereotype.Component;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
/**
* @描述:报名记录
* @作者:zhuyajie
* @创建时间:20:06 2019/6/27
* @版本:1.0
*/
@Component("bmRegisterDao")
public class BmRegisterDaoImpl extends BaseDaoImpl<AdvertisingBmRegister> implements BmRegisterDao {
@Override
public List<BmRegisterDTO> getDetailByUser(Map<String, Object> paramMap) {
return getSessionTemplate().selectList(getStatement("getDetailByUser"),paramMap);
}
@Override
public Long getRegisterCountByAdId(Long adId,String statisMonth) {
Map<String,Object> map = new HashMap<>();
map.put("adId",adId);
map.put("statisMonth",statisMonth);
return getSessionTemplate().selectOne(getStatement("getRegisterCountByAdId"),map);
}
@Override
public Long getRegisterCountByAdIds(List<Long> adIdList) {
return getSessionTemplate().selectOne(getStatement("getRegisterCountByAdIds"),adIdList);
}
@Override
public List<BmRegisterDTO> exportRegisterInfoById(Long adId, Long qrcodeId) {
Map<String, Object> map = new HashMap<>();
map.put("adId", adId);
map.put("qrcodeId", qrcodeId);
return getSessionTemplate().selectList(getStatement("exportRegisterInfoById"), map);
}
@Override
public Long getRegisterCountByAdIdQrcodeId(Long adId, String statisMonth, Long qrcodeId) {
Map<String,Object> map = new HashMap<>();
map.put("adId",adId);
map.put("statisMonth",statisMonth);
map.put("qrcodeId",qrcodeId);
return getSessionTemplate().selectOne(getStatement("getRegisterCountByAdIdQrcodeId"),map);
}
}
package com.pcloud.book.advertising.dao.impl;
import com.pcloud.book.advertising.dao.BmRegisterItemDao;
import com.pcloud.book.advertising.entity.AdvertisingBmRegisterItem;
import com.pcloud.common.core.dao.BaseDaoImpl;
import org.springframework.stereotype.Component;
/**
* @描述:报名选项记录
* @作者:zhuyajie
* @创建时间:20:19 2019/6/27
* @版本:1.0
*/
@Component("bmRegisterItemDao")
public class BmRegisterItemDaoImpl extends BaseDaoImpl<AdvertisingBmRegisterItem> implements BmRegisterItemDao {
}
......@@ -61,6 +61,15 @@ public class AdvertisingMasterDTO extends BaseDto {
* 累积消费
*/
private BigDecimal totalIncome;
/**
* 报名量
*/
private Long registerNum;
/**
* 报名率
*/
private BigDecimal registerRate;
public Long getId() {
return id;
......@@ -144,6 +153,22 @@ public class AdvertisingMasterDTO extends BaseDto {
this.totalIncome = totalIncome;
}
public Long getRegisterNum() {
return registerNum;
}
public void setRegisterNum(Long registerNum) {
this.registerNum = registerNum;
}
public BigDecimal getRegisterRate() {
return registerRate;
}
public void setRegisterRate(BigDecimal registerRate) {
this.registerRate = registerRate;
}
@Override
public String toString() {
return "AdvertisingMasterDTO{" +
......@@ -157,6 +182,8 @@ public class AdvertisingMasterDTO extends BaseDto {
", clickNum=" + clickNum +
", clickRate=" + clickRate +
", totalIncome=" + totalIncome +
"} " + super.toString();
", registerNum=" + registerNum +
", registerRate=" + registerRate +
'}';
}
}
\ No newline at end of file
......@@ -2,7 +2,10 @@ package com.pcloud.book.advertising.dto;
import java.math.BigDecimal;
import java.util.Date;
import java.util.List;
import com.fasterxml.jackson.annotation.JsonFormat;
import com.pcloud.book.advertising.entity.AdvertisingBmOption;
import com.pcloud.common.dto.BaseDto;
/**
......@@ -194,6 +197,93 @@ public class AdvertisingSpaceDTO extends BaseDto {
* 运营ID
*/
private Long channelId;
/**
*广告详情方式
*/
private String adDetailMode;
/**
*广告详情封面
*/
private String adDetailCoverPic;
/**
*广告详情优惠图
*/
private String adDetailWelfarePic;
/**
*广告详情介绍
*/
private String adDetailInfo;
/**
*广告详情文件ID
*/
private String adDetailFileId;
/**
*广告详情文件转码状态
*/
private Integer adDetailFileConvertState;
/**
*广告详情文件路径
*/
private String adDetailFileUrl;
/**
*广告详情文件标题
*/
private String adDetailTitle;
/**
*广告详情文件试播秒数
*/
private Long adDetailFilePilotSecond;
/**
*广告详情文件试播路径
*/
private String adDetailFilePilotUrl;
/**
*广告详情文件试播结束提示
*/
private String adDetailFilePilotFinishTip;
/**
*广告报名表单是否校验手机号
*/
private Boolean adFormMobileCheck;
/**
*广告报名表单备注
*/
private String adFormRemark;
/**
*广告报名表单提交按钮
*/
private String adFormButton;
/**
*广告报名表单跳转链接
*/
private String adFormLink;
/**
* 报名选项设置
*/
private List<AdvertisingBmOption> advertisingBmOptionList;
/**
* 报名量
*/
private Long registerNum;
/**
* 报名率
*/
private BigDecimal registerRate;
/**
* 广告详情文件大小
*/
private Long adDetailFileSize;
/**
* 广告详情文件名称
*/
private String adDetailFileName;
/**
* 广告详情文件时长
*/
private Long adDetailFileDuration;
public Long getId() {
return id;
......@@ -478,6 +568,125 @@ public class AdvertisingSpaceDTO extends BaseDto {
this.clickUserNum = clickUserNum;
}
public String getAdDetailMode() {
return adDetailMode;
}
public void setAdDetailMode(String adDetailMode) {
this.adDetailMode = adDetailMode;
}
public String getAdDetailCoverPic() {
return adDetailCoverPic;
}
public void setAdDetailCoverPic(String adDetailCoverPic) {
this.adDetailCoverPic = adDetailCoverPic;
}
public String getAdDetailWelfarePic() {
return adDetailWelfarePic;
}
public void setAdDetailWelfarePic(String adDetailWelfarePic) {
this.adDetailWelfarePic = adDetailWelfarePic;
}
public String getAdDetailInfo() {
return adDetailInfo;
}
public void setAdDetailInfo(String adDetailInfo) {
this.adDetailInfo = adDetailInfo;
}
public String getAdDetailFileId() {
return adDetailFileId;
}
public void setAdDetailFileId(String adDetailFileId) {
this.adDetailFileId = adDetailFileId;
}
public Integer getAdDetailFileConvertState() {
return adDetailFileConvertState;
}
public void setAdDetailFileConvertState(Integer adDetailFileConvertState) {
this.adDetailFileConvertState = adDetailFileConvertState;
}
public String getAdDetailFileUrl() {
return adDetailFileUrl;
}
public void setAdDetailFileUrl(String adDetailFileUrl) {
this.adDetailFileUrl = adDetailFileUrl;
}
public String getAdDetailTitle() {
return adDetailTitle;
}
public void setAdDetailTitle(String adDetailTitle) {
this.adDetailTitle = adDetailTitle;
}
public Long getAdDetailFilePilotSecond() {
return adDetailFilePilotSecond;
}
public void setAdDetailFilePilotSecond(Long adDetailFilePilotSecond) {
this.adDetailFilePilotSecond = adDetailFilePilotSecond;
}
public String getAdDetailFilePilotUrl() {
return adDetailFilePilotUrl;
}
public void setAdDetailFilePilotUrl(String adDetailFilePilotUrl) {
this.adDetailFilePilotUrl = adDetailFilePilotUrl;
}
public String getAdDetailFilePilotFinishTip() {
return adDetailFilePilotFinishTip;
}
public void setAdDetailFilePilotFinishTip(String adDetailFilePilotFinishTip) {
this.adDetailFilePilotFinishTip = adDetailFilePilotFinishTip;
}
public Boolean getAdFormMobileCheck() {
return adFormMobileCheck;
}
public void setAdFormMobileCheck(Boolean adFormMobileCheck) {
this.adFormMobileCheck = adFormMobileCheck;
}
public String getAdFormRemark() {
return adFormRemark;
}
public void setAdFormRemark(String adFormRemark) {
this.adFormRemark = adFormRemark;
}
public String getAdFormButton() {
return adFormButton;
}
public void setAdFormButton(String adFormButton) {
this.adFormButton = adFormButton;
}
public String getAdFormLink() {
return adFormLink;
}
public void setAdFormLink(String adFormLink) {
this.adFormLink = adFormLink;
}
public Boolean getIsTest() {
return isTest;
......@@ -487,6 +696,54 @@ public class AdvertisingSpaceDTO extends BaseDto {
this.isTest = isTest;
}
public List<AdvertisingBmOption> getAdvertisingBmOptionList() {
return advertisingBmOptionList;
}
public void setAdvertisingBmOptionList(List<AdvertisingBmOption> advertisingBmOptionList) {
this.advertisingBmOptionList = advertisingBmOptionList;
}
public Long getRegisterNum() {
return registerNum;
}
public void setRegisterNum(Long registerNum) {
this.registerNum = registerNum;
}
public BigDecimal getRegisterRate() {
return registerRate;
}
public void setRegisterRate(BigDecimal registerRate) {
this.registerRate = registerRate;
}
public Long getAdDetailFileSize() {
return adDetailFileSize;
}
public void setAdDetailFileSize(Long adDetailFileSize) {
this.adDetailFileSize = adDetailFileSize;
}
public String getAdDetailFileName() {
return adDetailFileName;
}
public void setAdDetailFileName(String adDetailFileName) {
this.adDetailFileName = adDetailFileName;
}
public Long getAdDetailFileDuration() {
return adDetailFileDuration;
}
public void setAdDetailFileDuration(Long adDetailFileDuration) {
this.adDetailFileDuration = adDetailFileDuration;
}
@Override
public String toString() {
return "AdvertisingSpaceDTO{" +
......@@ -526,6 +783,27 @@ public class AdvertisingSpaceDTO extends BaseDto {
", agentName='" + agentName + '\'' +
", adviserId=" + adviserId +
", channelId=" + channelId +
"} " + super.toString();
", adDetailMode='" + adDetailMode + '\'' +
", adDetailCoverPic='" + adDetailCoverPic + '\'' +
", adDetailWelfarePic='" + adDetailWelfarePic + '\'' +
", adDetailInfo='" + adDetailInfo + '\'' +
", adDetailFileId='" + adDetailFileId + '\'' +
", adDetailFileConvertState=" + adDetailFileConvertState +
", adDetailFileUrl='" + adDetailFileUrl + '\'' +
", adDetailTitle='" + adDetailTitle + '\'' +
", adDetailFilePilotSecond=" + adDetailFilePilotSecond +
", adDetailFilePilotUrl='" + adDetailFilePilotUrl + '\'' +
", adDetailFilePilotFinishTip='" + adDetailFilePilotFinishTip + '\'' +
", adFormMobileCheck=" + adFormMobileCheck +
", adFormRemark='" + adFormRemark + '\'' +
", adFormButton='" + adFormButton + '\'' +
", adFormLink='" + adFormLink + '\'' +
", advertisingBmOptionList=" + advertisingBmOptionList +
", registerNum=" + registerNum +
", registerRate=" + registerRate +
", adDetailFileSize=" + adDetailFileSize +
", adDetailFileName='" + adDetailFileName + '\'' +
", adDetailFileDuration=" + adDetailFileDuration +
'}';
}
}
\ No newline at end of file
package com.pcloud.book.advertising.dto;
import com.fasterxml.jackson.annotation.JsonFormat;
import com.pcloud.common.dto.BaseDto;
import java.util.Date;
import java.util.List;
/**
* @描述:用户报名信息
* @作者:zhuyajie
* @创建时间:20:19 2019/6/28
* @版本:1.0
*/
public class BmRegisterDTO extends BaseDto{
private Long id;
/**
*用户id
*/
private Long userId;
/**
*广告id
*/
private Long adId;
/**
*用户昵称
*/
private String nickName;
@JsonFormat(
pattern = "yyyy-MM-dd HH:mm:ss",
timezone = "GMT+8"
)
private Date createTime;
/**
* 报名选项信息
*/
private List<BmRegisterItemDTO> registerItemDTOS;
/**
* 群二维码id
*/
private Long qrcodeId;
public Long getId() {
return id;
}
public void setId(Long id) {
this.id = id;
}
public Long getUserId() {
return userId;
}
public void setUserId(Long userId) {
this.userId = userId;
}
public Long getAdId() {
return adId;
}
public void setAdId(Long adId) {
this.adId = adId;
}
public String getNickName() {
return nickName;
}
public void setNickName(String nickName) {
this.nickName = nickName;
}
public Date getCreateTime() {
return createTime;
}
public void setCreateTime(Date createTime) {
this.createTime = createTime;
}
public List<BmRegisterItemDTO> getRegisterItemDTOS() {
return registerItemDTOS;
}
public void setRegisterItemDTOS(List<BmRegisterItemDTO> registerItemDTOS) {
this.registerItemDTOS = registerItemDTOS;
}
public Long getQrcodeId() {
return qrcodeId;
}
public void setQrcodeId(Long qrcodeId) {
this.qrcodeId = qrcodeId;
}
@Override
public String toString() {
return "BmRegisterDTO{" +
"id=" + id +
", userId=" + userId +
", adId=" + adId +
", nickName='" + nickName + '\'' +
", createTime=" + createTime +
", registerItemDTOS=" + registerItemDTOS +
", qrcodeId=" + qrcodeId +
'}';
}
}
package com.pcloud.book.advertising.dto;
import com.fasterxml.jackson.annotation.JsonFormat;
import com.pcloud.common.dto.BaseDto;
import java.util.Date;
/**
* @描述:报名选项信息
* @作者:zhuyajie
* @创建时间:20:22 2019/6/28
* @版本:1.0
*/
public class BmRegisterItemDTO extends BaseDto{
/**
*报名记录ID
*/
private Long registerId;
/**
*选项ID
*/
private Long optionId;
/**
*选项清单ID
*/
private Long optionItemId;
/**
*选项值
*/
private String optionValue;
public Long getRegisterId() {
return registerId;
}
public void setRegisterId(Long registerId) {
this.registerId = registerId;
}
public Long getOptionId() {
return optionId;
}
public void setOptionId(Long optionId) {
this.optionId = optionId;
}
public Long getOptionItemId() {
return optionItemId;
}
public void setOptionItemId(Long optionItemId) {
this.optionItemId = optionItemId;
}
public String getOptionValue() {
return optionValue;
}
public void setOptionValue(String optionValue) {
this.optionValue = optionValue;
}
@Override
public String toString() {
return "BmRegisterItemDTO{" +
"registerId=" + registerId +
", optionId=" + optionId +
", optionItemId=" + optionItemId +
", optionValue='" + optionValue + '\'' +
'}';
}
}
package com.pcloud.book.advertising.dto;
import java.io.Serializable;
/**
*
* @ClassName: OptionType
* @Description: 选项类型
* @author Michael
* @date 2017年2月17日 下午12:50:47
*
*/
public class OptionType implements Serializable{
private static final long serialVersionUID = -3507316325248166878L;
/**
* 选项编码
*/
private String value;
/**
* 选项文字
*/
private String text;
public String getValue() {
return value;
}
public void setValue(String value) {
this.value = value;
}
public String getText() {
return text;
}
public void setText(String text) {
this.text = text;
}
public OptionType(String value, String text) {
super();
this.value = value;
this.text = text;
}
public OptionType() {
}
@Override
public String toString() {
return "OptionType [value=" + value + ", text=" + text + "]";
}
}
package com.pcloud.book.advertising.entity;
import com.fasterxml.jackson.annotation.JsonFormat;
import com.pcloud.common.entity.BaseEntity;
import java.util.Date;
import java.util.List;
/**
* 报表选项
*/
public class AdvertisingBmOption extends BaseEntity{
/**
*广告id
*/
private Long adId;
/**
*排序值
*/
private Long seq;
/**
*选项名称
*/
private String itemTitle;
/**
*选项描述
*/
private String itemDesc;
/**
*选项类型
*/
private String itemInputType;
/**
*选项数据类型
*/
private String itemDataType;
/**
*是否必填
*/
private Boolean required;
private Long createUser;
@JsonFormat(
pattern = "yyyy-MM-dd HH:mm:ss",
timezone = "GMT+8"
)
private Date createTime;
private Long updateUser;
@JsonFormat(
pattern = "yyyy-MM-dd HH:mm:ss",
timezone = "GMT+8"
)
private Date updateTime;
/**
* 选项列表
*/
private List<AdvertisingBmOptionItem> optionItem;
public Long getAdId() {
return adId;
}
public void setAdId(Long adId) {
this.adId = adId;
}
public Long getSeq() {
return seq;
}
public void setSeq(Long seq) {
this.seq = seq;
}
public String getItemTitle() {
return itemTitle;
}
public void setItemTitle(String itemTitle) {
this.itemTitle = itemTitle == null ? null : itemTitle.trim();
}
public String getItemDesc() {
return itemDesc;
}
public void setItemDesc(String itemDesc) {
this.itemDesc = itemDesc == null ? null : itemDesc.trim();
}
public String getItemInputType() {
return itemInputType;
}
public void setItemInputType(String itemInputType) {
this.itemInputType = itemInputType == null ? null : itemInputType.trim();
}
public String getItemDataType() {
return itemDataType;
}
public void setItemDataType(String itemDataType) {
this.itemDataType = itemDataType == null ? null : itemDataType.trim();
}
public Boolean getRequired() {
return required;
}
public void setRequired(Boolean required) {
this.required = required;
}
public Long getCreateUser() {
return createUser;
}
public void setCreateUser(Long createUser) {
this.createUser = createUser;
}
public Date getCreateTime() {
return createTime;
}
public void setCreateTime(Date createTime) {
this.createTime = createTime;
}
public Long getUpdateUser() {
return updateUser;
}
public void setUpdateUser(Long updateUser) {
this.updateUser = updateUser;
}
public Date getUpdateTime() {
return updateTime;
}
public void setUpdateTime(Date updateTime) {
this.updateTime = updateTime;
}
public List<AdvertisingBmOptionItem> getOptionItem() {
return optionItem;
}
public void setOptionItem(List<AdvertisingBmOptionItem> optionItem) {
this.optionItem = optionItem;
}
@Override
public String toString() {
return "AdvertisingBmOption{" +
"adId=" + adId +
", seq=" + seq +
", itemTitle='" + itemTitle + '\'' +
", itemDesc='" + itemDesc + '\'' +
", itemInputType='" + itemInputType + '\'' +
", itemDataType='" + itemDataType + '\'' +
", required=" + required +
", createUser=" + createUser +
", createTime=" + createTime +
", updateUser=" + updateUser +
", updateTime=" + updateTime +
", optionItem=" + optionItem +
'}';
}
}
\ No newline at end of file
package com.pcloud.book.advertising.entity;
import com.fasterxml.jackson.annotation.JsonFormat;
import com.pcloud.common.entity.BaseEntity;
import java.util.Date;
/**
* 报名选项清单
*/
public class AdvertisingBmOptionItem extends BaseEntity{
/**
*选项ID
*/
private Long optionId;
/**
*父选项清单ID
*/
private Long parentId;
/**
*选项文字
*/
private String text;
/**
*选项图片url
*/
private String imgUrl;
private Long createUser;
@JsonFormat(
pattern = "yyyy-MM-dd HH:mm:ss",
timezone = "GMT+8"
)
private Date createTime;
private Long updateUser;
@JsonFormat(
pattern = "yyyy-MM-dd HH:mm:ss",
timezone = "GMT+8"
)
private Date updateTime;
public Long getOptionId() {
return optionId;
}
public void setOptionId(Long optionId) {
this.optionId = optionId;
}
public Long getParentId() {
return parentId;
}
public void setParentId(Long parentId) {
this.parentId = parentId;
}
public String getText() {
return text;
}
public void setText(String text) {
this.text = text == null ? null : text.trim();
}
public String getImgUrl() {
return imgUrl;
}
public void setImgUrl(String imgUrl) {
this.imgUrl = imgUrl == null ? null : imgUrl.trim();
}
public Long getCreateUser() {
return createUser;
}
public void setCreateUser(Long createUser) {
this.createUser = createUser;
}
public Date getCreateTime() {
return createTime;
}
public void setCreateTime(Date createTime) {
this.createTime = createTime;
}
public Long getUpdateUser() {
return updateUser;
}
public void setUpdateUser(Long updateUser) {
this.updateUser = updateUser;
}
public Date getUpdateTime() {
return updateTime;
}
public void setUpdateTime(Date updateTime) {
this.updateTime = updateTime;
}
@Override
public String toString() {
return "AdvertisingBmOptionItem{" +
"optionId=" + optionId +
", parentId=" + parentId +
", text='" + text + '\'' +
", imgUrl='" + imgUrl + '\'' +
", createUser=" + createUser +
", createTime=" + createTime +
", updateUser=" + updateUser +
", updateTime=" + updateTime +
'}';
}
}
\ No newline at end of file
package com.pcloud.book.advertising.entity;
import com.fasterxml.jackson.annotation.JsonFormat;
import com.pcloud.common.entity.BaseEntity;
import java.util.Date;
import java.util.List;
/**
* 报名记录
*/
public class AdvertisingBmRegister extends BaseEntity{
/**
*用户id
*/
private Long userId;
/**
*广告id
*/
private Long adId;
/**
*用户昵称
*/
private String nickName;
@JsonFormat(
pattern = "yyyy-MM-dd HH:mm:ss",
timezone = "GMT+8"
)
private Date createTime;
/**
* 报名选项信息
*/
private List<AdvertisingBmRegisterItem> bmRegisterItemList;
/**
* 群二维码id
*/
private Long qrcodeId;
public Long getUserId() {
return userId;
}
public void setUserId(Long userId) {
this.userId = userId;
}
public Long getAdId() {
return adId;
}
public void setAdId(Long adId) {
this.adId = adId;
}
public String getNickName() {
return nickName;
}
public void setNickName(String nickName) {
this.nickName = nickName == null ? null : nickName.trim();
}
public Date getCreateTime() {
return createTime;
}
public void setCreateTime(Date createTime) {
this.createTime = createTime;
}
public List<AdvertisingBmRegisterItem> getBmRegisterItemList() {
return bmRegisterItemList;
}
public void setBmRegisterItemList(List<AdvertisingBmRegisterItem> bmRegisterItemList) {
this.bmRegisterItemList = bmRegisterItemList;
}
public Long getQrcodeId() {
return qrcodeId;
}
public void setQrcodeId(Long qrcodeId) {
this.qrcodeId = qrcodeId;
}
@Override
public String toString() {
return "AdvertisingBmRegister{" +
"userId=" + userId +
", adId=" + adId +
", nickName='" + nickName + '\'' +
", createTime=" + createTime +
", bmRegisterItemList=" + bmRegisterItemList +
", qrcodeId=" + qrcodeId +
'}';
}
}
\ No newline at end of file
package com.pcloud.book.advertising.entity;
import com.fasterxml.jackson.annotation.JsonFormat;
import com.pcloud.common.entity.BaseEntity;
import java.util.Date;
import java.util.List;
/**
* 报名记录选项内容
*/
public class AdvertisingBmRegisterItem extends BaseEntity{
/**
*用户id
*/
private Long userId;
/**
*广告id
*/
private Long adId;
/**
*报名记录ID
*/
private Long registerId;
/**
*选项ID
*/
private Long optionId;
/**
*选项清单ID
*/
private Long optionItemId;
/**
*选项值
*/
private String optionValue;
@JsonFormat(
pattern = "yyyy-MM-dd HH:mm:ss",
timezone = "GMT+8"
)
private Date createTime;
/**
* 选项清单IDs,单选多选
*/
private List<Long> optionItemIds;
public Long getUserId() {
return userId;
}
public void setUserId(Long userId) {
this.userId = userId;
}
public Long getAdId() {
return adId;
}
public void setAdId(Long adId) {
this.adId = adId;
}
public Long getRegisterId() {
return registerId;
}
public void setRegisterId(Long registerId) {
this.registerId = registerId;
}
public Long getOptionId() {
return optionId;
}
public void setOptionId(Long optionId) {
this.optionId = optionId;
}
public Long getOptionItemId() {
return optionItemId;
}
public void setOptionItemId(Long optionItemId) {
this.optionItemId = optionItemId;
}
public String getOptionValue() {
return optionValue;
}
public void setOptionValue(String optionValue) {
this.optionValue = optionValue == null ? null : optionValue.trim();
}
public Date getCreateTime() {
return createTime;
}
public void setCreateTime(Date createTime) {
this.createTime = createTime;
}
public List<Long> getOptionItemIds() {
return optionItemIds;
}
public void setOptionItemIds(List<Long> optionItemIds) {
this.optionItemIds = optionItemIds;
}
@Override
public String toString() {
return "AdvertisingBmRegisterItem{" +
"userId=" + userId +
", adId=" + adId +
", registerId=" + registerId +
", optionId=" + optionId +
", optionItemId=" + optionItemId +
", optionValue='" + optionValue + '\'' +
", createTime=" + createTime +
", optionItemIds=" + optionItemIds +
'}';
}
}
\ No newline at end of file
......@@ -2,6 +2,8 @@ package com.pcloud.book.advertising.entity;
import java.math.BigDecimal;
import java.util.Date;
import java.util.List;
import com.pcloud.common.entity.BaseEntity;
/**
......@@ -85,6 +87,71 @@ public class AdvertisingSpace extends BaseEntity {
* advertising_space.is_open (是否打开)
*/
private Boolean isOpen;
/**
*广告详情方式
*/
private String adDetailMode;
/**
*广告详情封面
*/
private String adDetailCoverPic;
/**
*广告详情优惠图
*/
private String adDetailWelfarePic;
/**
*广告详情介绍
*/
private String adDetailInfo;
/**
*广告详情文件ID
*/
private String adDetailFileId;
/**
*广告详情文件转码状态
*/
private Integer adDetailFileConvertState;
/**
*广告详情文件路径
*/
private String adDetailFileUrl;
/**
*广告详情文件标题
*/
private String adDetailTitle;
/**
*广告详情文件试播秒数
*/
private Long adDetailFilePilotSecond;
/**
*广告详情文件试播路径
*/
private String adDetailFilePilotUrl;
/**
*广告详情文件试播结束提示
*/
private String adDetailFilePilotFinishTip;
/**
* 报名选项设置
*/
private List<AdvertisingBmOption> advertisingBmOptionList;
/**
*广告报名表单是否校验手机号
*/
private Boolean adFormMobileCheck;
/**
*广告报名表单备注
*/
private String adFormRemark;
/**
*广告报名表单提交按钮
*/
private String adFormButton;
/**
*广告报名表单跳转链接
*/
private String adFormLink;
/**
* 结算方式
......@@ -96,6 +163,20 @@ public class AdvertisingSpace extends BaseEntity {
*/
private BigDecimal priceEachTime;
/**
* 广告详情文件大小
*/
private Long adDetailFileSize;
/**
* 广告详情文件名称
*/
private String adDetailFileName;
/**
* 广告详情文件时长
*/
private Long adDetailFileDuration;
@Override
public Long getId() {
return id;
......@@ -230,6 +311,125 @@ public class AdvertisingSpace extends BaseEntity {
this.priceEachTime = priceEachTime;
}
public String getAdDetailMode() {
return adDetailMode;
}
public void setAdDetailMode(String adDetailMode) {
this.adDetailMode = adDetailMode;
}
public String getAdDetailCoverPic() {
return adDetailCoverPic;
}
public void setAdDetailCoverPic(String adDetailCoverPic) {
this.adDetailCoverPic = adDetailCoverPic;
}
public String getAdDetailWelfarePic() {
return adDetailWelfarePic;
}
public void setAdDetailWelfarePic(String adDetailWelfarePic) {
this.adDetailWelfarePic = adDetailWelfarePic;
}
public String getAdDetailInfo() {
return adDetailInfo;
}
public void setAdDetailInfo(String adDetailInfo) {
this.adDetailInfo = adDetailInfo;
}
public String getAdDetailFileId() {
return adDetailFileId;
}
public void setAdDetailFileId(String adDetailFileId) {
this.adDetailFileId = adDetailFileId;
}
public Integer getAdDetailFileConvertState() {
return adDetailFileConvertState;
}
public void setAdDetailFileConvertState(Integer adDetailFileConvertState) {
this.adDetailFileConvertState = adDetailFileConvertState;
}
public String getAdDetailFileUrl() {
return adDetailFileUrl;
}
public void setAdDetailFileUrl(String adDetailFileUrl) {
this.adDetailFileUrl = adDetailFileUrl;
}
public String getAdDetailTitle() {
return adDetailTitle;
}
public void setAdDetailTitle(String adDetailTitle) {
this.adDetailTitle = adDetailTitle;
}
public Long getAdDetailFilePilotSecond() {
return adDetailFilePilotSecond;
}
public void setAdDetailFilePilotSecond(Long adDetailFilePilotSecond) {
this.adDetailFilePilotSecond = adDetailFilePilotSecond;
}
public String getAdDetailFilePilotUrl() {
return adDetailFilePilotUrl;
}
public void setAdDetailFilePilotUrl(String adDetailFilePilotUrl) {
this.adDetailFilePilotUrl = adDetailFilePilotUrl;
}
public String getAdDetailFilePilotFinishTip() {
return adDetailFilePilotFinishTip;
}
public void setAdDetailFilePilotFinishTip(String adDetailFilePilotFinishTip) {
this.adDetailFilePilotFinishTip = adDetailFilePilotFinishTip;
}
public Boolean getAdFormMobileCheck() {
return adFormMobileCheck;
}
public void setAdFormMobileCheck(Boolean adFormMobileCheck) {
this.adFormMobileCheck = adFormMobileCheck;
}
public String getAdFormRemark() {
return adFormRemark;
}
public void setAdFormRemark(String adFormRemark) {
this.adFormRemark = adFormRemark;
}
public String getAdFormButton() {
return adFormButton;
}
public void setAdFormButton(String adFormButton) {
this.adFormButton = adFormButton;
}
public String getAdFormLink() {
return adFormLink;
}
public void setAdFormLink(String adFormLink) {
this.adFormLink = adFormLink;
}
public Boolean getIsTest() {
return isTest;
......@@ -239,6 +439,38 @@ public class AdvertisingSpace extends BaseEntity {
this.isTest = isOpen;
}
public List<AdvertisingBmOption> getAdvertisingBmOptionList() {
return advertisingBmOptionList;
}
public void setAdvertisingBmOptionList(List<AdvertisingBmOption> advertisingBmOptionList) {
this.advertisingBmOptionList = advertisingBmOptionList;
}
public Long getAdDetailFileSize() {
return adDetailFileSize;
}
public void setAdDetailFileSize(Long adDetailFileSize) {
this.adDetailFileSize = adDetailFileSize;
}
public String getAdDetailFileName() {
return adDetailFileName;
}
public void setAdDetailFileName(String adDetailFileName) {
this.adDetailFileName = adDetailFileName;
}
public Long getAdDetailFileDuration() {
return adDetailFileDuration;
}
public void setAdDetailFileDuration(Long adDetailFileDuration) {
this.adDetailFileDuration = adDetailFileDuration;
}
@Override
public String toString() {
return "AdvertisingSpace{" +
......@@ -257,8 +489,27 @@ public class AdvertisingSpace extends BaseEntity {
", updateTime=" + updateTime +
", isTest=" + isTest +
", isOpen=" + isOpen +
", adDetailMode='" + adDetailMode + '\'' +
", adDetailCoverPic='" + adDetailCoverPic + '\'' +
", adDetailWelfarePic='" + adDetailWelfarePic + '\'' +
", adDetailInfo='" + adDetailInfo + '\'' +
", adDetailFileId='" + adDetailFileId + '\'' +
", adDetailFileConvertState=" + adDetailFileConvertState +
", adDetailFileUrl='" + adDetailFileUrl + '\'' +
", adDetailTitle='" + adDetailTitle + '\'' +
", adDetailFilePilotSecond=" + adDetailFilePilotSecond +
", adDetailFilePilotUrl='" + adDetailFilePilotUrl + '\'' +
", adDetailFilePilotFinishTip='" + adDetailFilePilotFinishTip + '\'' +
", advertisingBmOptionList=" + advertisingBmOptionList +
", adFormMobileCheck=" + adFormMobileCheck +
", adFormRemark='" + adFormRemark + '\'' +
", adFormButton='" + adFormButton + '\'' +
", adFormLink='" + adFormLink + '\'' +
", settlementMethod='" + settlementMethod + '\'' +
", priceEachTime=" + priceEachTime +
"} " + super.toString();
", adDetailFileSize=" + adDetailFileSize +
", adDetailFileName='" + adDetailFileName + '\'' +
", adDetailFileDuration=" + adDetailFileDuration +
'}';
}
}
\ No newline at end of file
package com.pcloud.book.advertising.enums;
/**
* @描述:广告详情介绍方式
* @作者:zhuyajie
* @创建时间:14:37 2019/6/25
* @版本:1.0
*/
public enum AdDetailModeEnum {
IMG_TEXT("IMG_TEXT","图文介绍"),
AUDIO("AUDIO","音频试听"),
VIDEO("VIDEO","视频试看");
public final String code;
public final String name;
AdDetailModeEnum(String code, String name) {
this.code = code;
this.name = name;
}
public static String getNameByCode(String code) {
AdDetailModeEnum[] var1 = values();
int var2 = var1.length;
for (int var3 = 0; var3 < var2; ++var3) {
AdDetailModeEnum methodEnum = var1[var3];
if (methodEnum.code.equals(code)) {
return methodEnum.name;
}
}
return null;
}
}
......@@ -34,5 +34,5 @@ public enum SettlementMethodEnum {
public static final String[] SETTLEMENT_METHOD_GATHER = {CPC.code, CPM.code, CPA.code, CPS.code};
public static final String[] SETTLEMENT_METHOD_NEED_PRICE_GATHER = {CPC.code, CPM.code};
public static final String[] SETTLEMENT_METHOD_NEED_PRICE_GATHER = {CPC.code, CPM.code, CPA.code};
}
package com.pcloud.book.advertising.facade;
import com.pcloud.book.advertising.dto.AdvertisingSpaceDTO;
import com.pcloud.book.advertising.dto.TestParamDTO;
import com.pcloud.book.advertising.entity.*;
import com.pcloud.common.dto.ResponseDto;
......@@ -80,6 +81,22 @@ public interface AdvertisingSpaceFacade {
throws PermissionException, BizException, JsonParseException;
/**
* 客户端获取广告位信息
* @param userInfo 用户身份信息
* @param adId 广告位ID
* @return
* @throws PermissionException
* @throws BizException
* @throws JsonParseException
*/
@ApiOperation(value = "客户端获取广告位信息", httpMethod = "GET")
@ApiImplicitParams({
@ApiImplicitParam(name = "userInfo", value = "用户身份信息", dataType = "string", paramType = "header"),
@ApiImplicitParam(name = "adId", value = "广告位ID", required = false, dataType = "Long", paramType = "query")
})
@RequestMapping(value = "getAdInfo4Wechat", method = RequestMethod.GET)
ResponseDto<AdvertisingSpaceDTO> getAdInfo4Wechat(@CookieValue("userInfo") String userInfo, @RequestParam(value = "adId", required = false) Long adId);
/**
* 停用广告位
* @param token 用户身份信息
* @param advertisingSpace 广告位实体
......
package com.pcloud.book.advertising.facade;
import com.pcloud.book.advertising.entity.AdvertisingBmRegister;
import com.pcloud.common.dto.ResponseDto;
import com.pcloud.common.exceptions.BizException;
import com.pcloud.common.permission.PermissionException;
import org.codehaus.jackson.JsonParseException;
import org.springframework.cloud.netflix.feign.FeignClient;
import org.springframework.web.bind.annotation.CookieValue;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestHeader;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.bind.annotation.RequestParam;
import java.util.Map;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiImplicitParam;
import io.swagger.annotations.ApiImplicitParams;
import io.swagger.annotations.ApiOperation;
import io.swagger.annotations.ApiParam;
/**
* 报名
*/
@FeignClient(value = "pcloud-service-book", qualifier = "bmFacadeCloud", path = "book/v1.0/bm")
@Api("报名应用FACADE接口类")
public interface BmFacade {
/**
* 获取报名应用选项类型
* @param token 用户身份信息
* @return
* @throws PermissionException
* @throws BizException
* @throws JsonParseException
*/
@ApiOperation(value = "获取报名应用选项类型",httpMethod = "GET")
@RequestMapping(value = "getOptionType",method = RequestMethod.GET)
ResponseDto<?> getOptionType(@RequestHeader("token") String token)
throws PermissionException, BizException, JsonParseException;
/**
* 获取报名应用选项数据类型
* @param token 用户身份信息
* @return
* @throws PermissionException
* @throws BizException
* @throws JsonParseException
*/
@ApiOperation(value = "获取报名应用选项数据类型",httpMethod = "GET")
@RequestMapping(value = "/getOptionDataType",method = RequestMethod.GET)
ResponseDto<?> getOptionDataType(@RequestHeader("token") String token)
throws PermissionException, BizException, JsonParseException;
/**
* 用户提交表单
* @param userInfo 用户身份信息
* @param bmRegister 用户实体
* @return
* @throws PermissionException
* @throws BizException
* @throws JsonParseException
* postman
*/
@ApiOperation(value = "用户提交表单", httpMethod = "POST")
@RequestMapping(value = "/userSubmit4Wechat", method = RequestMethod.POST)
ResponseDto<?> userSubmit4Wechat(@CookieValue("userInfo") String userInfo,
@RequestBody @ApiParam AdvertisingBmRegister bmRegister)
throws PermissionException, BizException, JsonParseException;
/**
* @Title: getDetail4Wechat
* @Description:微信端获取个人报名详情
* @throws PermissionException
* @throws BizException
* @throws JsonParseException
*/
@ApiOperation(value = "微信端获取个人报名详情", httpMethod = "GET")
@ApiImplicitParam(name = "adId", value = "广告id", dataType = "long", paramType = "query")
@RequestMapping(value = "/getDetail4Wechat", method = RequestMethod.GET)
ResponseDto<?> getDetail4Wechat(@CookieValue("userInfo") String userInfo, @RequestParam(value = "adId") Long adId)
throws PermissionException, BizException, JsonParseException;
/**
* @Description:导出报名信息-广告位
* @return
* @throws PermissionException
* @throws BizException
* @throws JsonParseException
*/
@ApiOperation(value = "导出报名信息",httpMethod = "GET")
@ApiImplicitParams({
@ApiImplicitParam(name = "adId",value = "广告位id",required = false,dataType = "Long",paramType = "query"),
@ApiImplicitParam(name = "qrcodeId",value = "群二维码id",required = false,dataType = "Long",paramType = "query")
})
@RequestMapping(value = "/exportRegisterInfoByAdId",method = RequestMethod.GET)
ResponseDto<Map<String, Object>> exportRegisterInfoByAdId(@RequestHeader("token")String token, @RequestParam("adId") Long adId,
@RequestParam(value = "qrcodeId",required = false) Long qrcodeId)
throws PermissionException, BizException, JsonParseException;
}
......@@ -82,6 +82,19 @@ public class AdvertisingSpaceFacadeImpl implements AdvertisingSpaceFacade {
}
/**
* 客户端获取广告位信息
*/
@Override
@RequestMapping(value = "getAdInfo4Wechat", method = RequestMethod.GET)
public ResponseDto<AdvertisingSpaceDTO> getAdInfo4Wechat(@CookieValue("userInfo") String userInfo, @RequestParam(value = "adId", required = false) Long adId) {
if (null == adId) {
throw new BookBizException(BookBizException.PARAM_IS_NULL, "参数有误!");
}
Cookie.getUserInfo(userInfo);
return new ResponseDto<>(advertisingSpaceBiz.get(adId));
}
/**
* 停用广告位
*/
@Override
......
package com.pcloud.book.advertising.facade.impl;
import com.pcloud.book.advertising.biz.BmBiz;
import com.pcloud.book.advertising.entity.AdvertisingBmOption;
import com.pcloud.book.advertising.entity.AdvertisingBmRegister;
import com.pcloud.book.advertising.facade.BmFacade;
import com.pcloud.book.base.exception.BookBizException;
import com.pcloud.book.book.biz.BookBiz;
import com.pcloud.common.dto.ResponseDto;
import com.pcloud.common.exceptions.BizException;
import com.pcloud.common.permission.PermissionException;
import com.pcloud.common.utils.SessionUtil;
import com.pcloud.common.utils.cookie.Cookie;
import org.codehaus.jackson.JsonParseException;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.CookieValue;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestHeader;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.RestController;
import java.util.Map;
import javax.servlet.http.HttpServletRequest;
/**
* 报名
*/
@RestController("bmFacade")
@RequestMapping("/bm")
public class BmFacadeImpl implements BmFacade {
@Autowired
private BmBiz bmBiz;
/**
* 获取选项类型
*/
@Override
@RequestMapping(value = "getOptionType",method = RequestMethod.GET)
public ResponseDto<?> getOptionType(@RequestHeader("token") String token)
throws PermissionException, BizException, JsonParseException {
SessionUtil.getToken4Redis(token);
return new ResponseDto<>(bmBiz.getOptionType());
}
/**
* 获取选项数据类型
*/
@RequestMapping(value = "/getOptionDataType",method = RequestMethod.GET)
@Override
public ResponseDto<?> getOptionDataType(@RequestHeader("token") String token)
throws PermissionException, BizException, JsonParseException {
SessionUtil.getToken4Redis(token);
return new ResponseDto<>(bmBiz.getOptionDataType());
}
/**
* 用户提交表单
*/
@Override
@RequestMapping(value = "/userSubmit4Wechat",method = RequestMethod.POST)
public ResponseDto<?> userSubmit4Wechat(@CookieValue("userInfo") String userInfo,
@RequestBody AdvertisingBmRegister bmRegister)
throws PermissionException, BizException, JsonParseException {
Long wechatUserId = Cookie.getId(userInfo, Cookie._WECHAT_USER_ID);
Long qrcodeId = Cookie.getId(userInfo, Cookie.QRCODE_ID);
if (bmRegister == null) {
throw new BookBizException(BookBizException.PARAM_IS_ERROR, "参数有误!");
}
bmRegister.setUserId(wechatUserId);
Long result = bmBiz.userSubmit(bmRegister, wechatUserId, qrcodeId);
return new ResponseDto<>(result);
}
/**
* 微信端获取个人报名详情
*/
@Override
@RequestMapping(value = "/getDetail4Wechat",method = RequestMethod.GET)
public ResponseDto<?> getDetail4Wechat(@CookieValue("userInfo") String userInfo, @RequestParam(value = "adId") Long adId)
throws PermissionException, BizException, JsonParseException {
Long wechatUserId = Cookie.getId(userInfo, Cookie._WECHAT_USER_ID);
Long qrcodeId = Cookie.getId(userInfo, Cookie.QRCODE_ID);
if (null == adId) {
throw new BookBizException(BookBizException.PARAM_IS_ERROR, "参数有误!");
}
return new ResponseDto<>(bmBiz.getDetail4Wechat(adId, wechatUserId,qrcodeId));
}
/**
* 报名信息导出
*/
@Override
@RequestMapping(value = "/exportRegisterInfoByAdId",method = RequestMethod.GET)
public ResponseDto<Map<String, Object>> exportRegisterInfoByAdId(
@RequestHeader("token")String token, @RequestParam("adId")Long adId,
@RequestParam(value = "qrcodeId",required = false) Long qrcodeId) throws PermissionException, BizException, JsonParseException {
if (null == adId){
throw new BookBizException(BookBizException.PARAM_IS_ERROR, "参数有误!");
}
SessionUtil.getInfoToken4Redis(token);
Map<String, Object> map =bmBiz.exportRegisterInfoByAdId(adId, qrcodeId);
return new ResponseDto<>(map);
}
}
......@@ -79,6 +79,25 @@ public class WechatGroupConsr {
}
}
@ParamLog("根据群号获取发广告机器人微信号")
public String getSendAdRobotByGroupId(String groupId) throws BizException{
log.info("【根据群号获取发广告机器人微信号,<START>.[groupId]=" + groupId + "]");
if (groupId == null) {
return null;
}
try {
return ResponseHandleUtil.parseResponse(groupMemberService.getSendAdRobotByGroupId(groupId), String.class);
} catch (BizException e) {
log.warn("根据群号获取发广告机器人微信号失败:" + e.getMessage(), e);
throw new BizException(e.getCode(), e.getMessage());
} catch (Exception e) {
log.error("根据群号获取发广告机器人微信号.[getSendAdRobotByGroupId]:" + e.getMessage(), e);
throw new BookBizException(BookBizException.INVOKE_RES_ERROR, "服务内部错误,请稍后重试");
} finally {
log.info("【根据群号获取发广告机器人微信号,<END>");
}
}
/**
* 根据昵称获取微信id
*/
......
package com.pcloud.book.mq.topic;
import com.google.common.collect.Maps;
import com.pcloud.book.advertising.biz.AdvertisingSpaceBiz;
import com.pcloud.book.advertising.entity.AdvertisingSpace;
import com.pcloud.common.core.aspect.ParamLog;
import com.pcloud.common.core.constant.ConvertEnum;
import com.pcloud.common.core.constant.MQQueueConstant;
import com.pcloud.common.core.dto.ConvertQueueDto;
import com.pcloud.common.exceptions.BizException;
import com.pcloud.common.utils.FileUtils;
import com.pcloud.common.utils.ListUtils;
import com.pcloud.contentcenter.resource.enums.ResourceTypeEnum;
import org.apache.commons.collections.MapUtils;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.amqp.rabbit.annotation.RabbitHandler;
import org.springframework.amqp.rabbit.annotation.RabbitListener;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;
import java.util.List;
import java.util.Map;
import javax.annotation.PostConstruct;
/**
* @描述:文件转码
* @作者:zhuyajie
* @创建时间:11:31 2019/6/25
* @版本:1.0
*/
@Component("convertFileListener")
@RabbitListener(queues = MQQueueConstant.CONVERT_TO_BOOK)
public class ConvertFileListener {
private static final Logger LOGGER = LoggerFactory.getLogger(ConvertFileListener.class);
private static ConvertFileListener convertFileListener;
@Autowired
private AdvertisingSpaceBiz advertisingSpaceBiz;
/**
* 当转换过快,消息先一步到达资源中心时,找不到对应的记录就保存下来
*/
private static Map<String, ConvertQueueDto> cqds = Maps.newHashMap();
private static Thread t1 = new Thread(new Runnable() {
@Override
public void run() {
while (true) {
LOGGER.info("开始轮询cqds");
//如果cqds没有记录,休眠60秒
if (MapUtils.isEmpty(cqds)) {
try {
Thread.sleep(1000 * 60);
} catch (InterruptedException e) {
LOGGER.error("pmrismap线程执行出错", e);
}
} else {
for (Map.Entry<String, ConvertQueueDto> e : cqds.entrySet()) {
if (e.getValue() != null) {
ConvertQueueDto convertFileDto = e.getValue();
LOGGER.warn("转码后信息>>>>>" + convertFileDto.toString());
String fileCategory = FileUtils.getGatherName(convertFileDto.getFileType());
String fileId = convertFileDto.getFileId();
String fileUrl = convertFileDto.getFileUrl();
if (ResourceTypeEnum.AUDIO.code.equals(fileCategory) || ResourceTypeEnum.VIDEO.code.equals(fileCategory)) {
List<AdvertisingSpace> filelist = convertFileListener.advertisingSpaceBiz.getUnConvertFile(fileId);
if (!ListUtils.isEmpty(filelist)) {
//更新
convertFileListener.advertisingSpaceBiz.updateFile(filelist, fileUrl);
cqds.remove(e.getKey());
} else {
if (convertFileDto.getProcessTimes() < 10) {
convertFileDto.setProcessTimes(convertFileDto.getProcessTimes() + 1);
LOGGER.info("音频资源 ,未找到对应记录,进入下一个循环!fileid=" + convertFileDto.getFileId());
} else {
cqds.remove(e.getKey());
}
}
}
} else {
// 当该key内无实体时,即清除
cqds.remove(e.getKey());
}
}
}
}
}
});
// 开始缓存处理
static {
t1.start();
}
@RabbitHandler
@ParamLog("文件转码")
public void process(ConvertQueueDto convertQueueDto) throws BizException {
//消息处理
update(convertQueueDto);
}
/**
* 更新数据库
*/
private void update(ConvertQueueDto convertFileDto) {
if (null == convertFileDto) {
return;
}
if (!ConvertEnum.BOOK.value.equals(convertFileDto.getFromType())) {
return;
}
String fileCategory = FileUtils.getGatherName(convertFileDto.getFileType());
//转换成功
if (convertFileDto.getState() == null || convertFileDto.getState()) {
String fileId = convertFileDto.getFileId();
String fileUrl = convertFileDto.getFileUrl();
// 修改点读书音频转码后的地址
if (ResourceTypeEnum.AUDIO.code.equals(fileCategory)) {
List<AdvertisingSpace> filelist = convertFileListener.advertisingSpaceBiz.getUnConvertFile(fileId);
if (ListUtils.isEmpty(filelist)) {
LOGGER.info("接收到转码状态时,数据库还未插入记录,先将音频转码信息放到缓存fileId=" + fileId + "convertFileDto=" + convertFileDto.toString());
cqds.put(fileId, convertFileDto);
} else {
convertFileListener.advertisingSpaceBiz.updateFile(filelist, fileUrl);
}
}
}
}
@PostConstruct
public void init() {
convertFileListener = this;
convertFileListener.advertisingSpaceBiz = this.advertisingSpaceBiz;
}
}
package com.pcloud.book.util.common;
import org.apache.poi.hssf.util.HSSFColor;
import org.apache.poi.ss.usermodel.BorderStyle;
import org.apache.poi.ss.usermodel.CellStyle;
import org.apache.poi.ss.usermodel.Font;
import org.apache.poi.ss.usermodel.HorizontalAlignment;
import org.apache.poi.ss.usermodel.VerticalAlignment;
import org.apache.poi.ss.usermodel.Workbook;
public class ExcelUtils {
public static CellStyle getColumnTopStyle(Workbook workbook) {
// 设置字体
Font font = workbook.createFont();
//设置字体大小
font.setFontHeightInPoints((short) 12);
//字体加粗
font.setBold(true);
//设置字体名字
font.setFontName("宋体");
//设置样式;
CellStyle style = workbook.createCellStyle();
//设置底边框;
style.setBorderBottom(BorderStyle.THIN);
//设置底边框颜色;
style.setBottomBorderColor(HSSFColor.HSSFColorPredefined.BLACK.getIndex());
//设置左边框;
style.setBorderLeft(BorderStyle.THIN);
//设置左边框颜色;
style.setLeftBorderColor(HSSFColor.HSSFColorPredefined.BLACK.getIndex());
//设置右边框;
style.setBorderRight(BorderStyle.THIN);
//设置右边框颜色;
style.setRightBorderColor(HSSFColor.HSSFColorPredefined.BLACK.getIndex());
//设置顶边框;
style.setBorderTop(BorderStyle.THIN);
//设置顶边框颜色;
style.setTopBorderColor(HSSFColor.HSSFColorPredefined.BLACK.getIndex());
//在样式用应用设置的字体;
style.setFont(font);
//设置自动换行;
style.setWrapText(true);
//设置水平对齐的样式为居中对齐;
style.setAlignment(HorizontalAlignment.CENTER);
//设置垂直对齐的样式为居中对齐;
style.setVerticalAlignment(VerticalAlignment.CENTER);
return style;
}
public static CellStyle getDataStyle(Workbook workbook) {
// 设置字体
Font font = workbook.createFont();
//设置字体大小
font.setFontHeightInPoints((short) 10);
//设置字体名字
font.setFontName("宋体");
//设置样式;
CellStyle style = workbook.createCellStyle();
//设置底边框;
style.setBorderBottom(BorderStyle.THIN);
//设置底边框颜色;
style.setBottomBorderColor(HSSFColor.HSSFColorPredefined.BLACK.getIndex());
//设置左边框;
style.setBorderLeft(BorderStyle.THIN);
//设置左边框颜色;
style.setLeftBorderColor(HSSFColor.HSSFColorPredefined.BLACK.getIndex());
//设置右边框;
style.setBorderRight(BorderStyle.THIN);
//设置右边框颜色;
style.setRightBorderColor(HSSFColor.HSSFColorPredefined.BLACK.getIndex());
//设置顶边框;
style.setBorderTop(BorderStyle.THIN);
//设置顶边框颜色;
style.setTopBorderColor(HSSFColor.HSSFColorPredefined.BLACK.getIndex());
//在样式用应用设置的字体;
style.setFont(font);
//设置自动换行;
style.setWrapText(true);
//设置水平对齐的样式为居中对齐;
style.setAlignment(HorizontalAlignment.CENTER);
//设置垂直对齐的样式为居中对齐;
style.setVerticalAlignment(VerticalAlignment.CENTER);
return style;
}
}
<?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.pcloud.book.advertising.dao.impl.BmOptionItemDaoImpl" >
<resultMap id="BaseResultMap" type="com.pcloud.book.advertising.entity.AdvertisingBmOptionItem" >
<id column="id" property="id" jdbcType="BIGINT" />
<result column="option_id" property="optionId" jdbcType="BIGINT" />
<result column="parent_id" property="parentId" jdbcType="BIGINT" />
<result column="text" property="text" jdbcType="VARCHAR" />
<result column="img_url" property="imgUrl" jdbcType="VARCHAR" />
<result column="create_user" property="createUser" jdbcType="BIGINT" />
<result column="create_time" property="createTime" jdbcType="TIMESTAMP" />
<result column="update_user" property="updateUser" jdbcType="BIGINT" />
<result column="update_time" property="updateTime" jdbcType="TIMESTAMP" />
</resultMap>
<sql id="Base_Column_List" >
id, option_id, parent_id, text, img_url, create_user, create_time, update_user, update_time
</sql>
<insert id="insert" parameterType="com.pcloud.book.advertising.entity.AdvertisingBmOptionItem" useGeneratedKeys="true" keyProperty="id">
insert into advertising_bm_option_item (option_id, parent_id,
text, img_url, create_user, create_time
)
values (#{optionId,jdbcType=BIGINT}, #{parentId,jdbcType=BIGINT},
#{text,jdbcType=VARCHAR}, #{imgUrl,jdbcType=VARCHAR}, #{createUser,jdbcType=BIGINT}, NOW()
)
</insert>
<!-- 根据选项ID删除选项清单信息 -->
<delete id="deleteByOptionId" parameterType="java.lang.Long" >
delete from advertising_bm_option_item
where option_id = #{id,jdbcType=BIGINT}
</delete>
<select id="getByOptionId" resultMap="BaseResultMap" parameterType="java.lang.Long" >
select
<include refid="Base_Column_List" />
from advertising_bm_option_item
where option_id = #{optionId,jdbcType=BIGINT} and PARENT_ID=0
</select>
<select id="getValueById" resultType="String" parameterType="Long">
select text
from advertising_bm_option_item
where id = #{id,jdbcType=BIGINT}
</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.pcloud.book.advertising.dao.impl.BmOptionDaoImpl" >
<resultMap id="BaseResultMap" type="com.pcloud.book.advertising.entity.AdvertisingBmOption" >
<id column="id" property="id" jdbcType="BIGINT" />
<result column="ad_id" property="adId" jdbcType="BIGINT" />
<result column="seq" property="seq" jdbcType="BIGINT" />
<result column="item_title" property="itemTitle" jdbcType="VARCHAR" />
<result column="item_desc" property="itemDesc" jdbcType="VARCHAR" />
<result column="item_input_type" property="itemInputType" jdbcType="VARCHAR" />
<result column="item_data_type" property="itemDataType" jdbcType="VARCHAR" />
<result column="required" property="required" jdbcType="BIT" />
<result column="create_user" property="createUser" jdbcType="BIGINT" />
<result column="create_time" property="createTime" jdbcType="TIMESTAMP" />
<result column="update_user" property="updateUser" jdbcType="BIGINT" />
<result column="update_time" property="updateTime" jdbcType="TIMESTAMP" />
<collection property="optionItem" column="id"
ofType="productMatchOptionItem"
select="com.pcloud.book.advertising.dao.impl.BmOptionItemDaoImpl.getByOptionId" />
</resultMap>
<sql id="Base_Column_List" >
id, ad_id, seq, item_title, item_desc, item_input_type, item_data_type, required,
create_user, create_time, update_user, update_time
</sql>
<insert id="insert" parameterType="com.pcloud.book.advertising.entity.AdvertisingBmOption" useGeneratedKeys="true" keyProperty="id">
insert into advertising_bm_option (ad_id, seq, item_title,
item_desc, item_input_type, item_data_type,
required, create_user, create_time
)
values (#{adId,jdbcType=BIGINT}, #{seq,jdbcType=BIGINT}, #{itemTitle,jdbcType=VARCHAR},
#{itemDesc,jdbcType=VARCHAR}, #{itemInputType,jdbcType=VARCHAR}, #{itemDataType,jdbcType=VARCHAR},
#{required,jdbcType=BIT}, #{createUser,jdbcType=BIGINT}, NOW()
)
</insert>
<!-- 根据广告ID获取选项表单 -->
<select id="getByAdId" resultMap="BaseResultMap" parameterType="map" >
select
<include refid="Base_Column_List" />
from advertising_bm_option
where ad_id = #{adId,jdbcType=BIGINT}
order by seq asc, id asc
</select>
<update id="update" parameterType="com.pcloud.book.advertising.entity.AdvertisingBmOption" >
update advertising_bm_option
<set >
<if test="seq != null" >
seq = #{seq,jdbcType=BIGINT},
</if>
<if test="itemTitle != null" >
item_title = #{itemTitle,jdbcType=VARCHAR},
</if>
<if test="itemDesc != null" >
item_desc = #{itemDesc,jdbcType=VARCHAR},
</if>
<if test="itemInputType != null" >
item_input_type = #{itemInputType,jdbcType=VARCHAR},
</if>
<if test="itemDataType != null" >
item_data_type = #{itemDataType,jdbcType=VARCHAR},
</if>
<if test="required != null" >
required = #{required,jdbcType=BIT},
</if>
update_user = #{updateUser,jdbcType=BIGINT},
update_time = NOW(),
</set>
where id = #{id,jdbcType=BIGINT}
</update>
<delete id="deleteByIds" parameterType="list">
DELETE FROM advertising_bm_option
WHERE 1=1
AND id IN
<foreach collection = "list" index="index" item = "item" open = "(" separator= "," close = ")">
#{item}
</foreach>
</delete>
<select id="getOptionIdsByAdId" parameterType="Long" resultType="Long">
SELECT id
FROM advertising_bm_option
WHERE ad_id = #{adId,jdbcType=BIGINT}
</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.pcloud.book.advertising.dao.impl.BmRegisterItemDaoImpl" >
<resultMap id="BaseResultMap" type="com.pcloud.book.advertising.entity.AdvertisingBmRegisterItem" >
<id column="id" property="id" jdbcType="BIGINT" />
<result column="user_id" property="userId" jdbcType="BIGINT" />
<result column="ad_id" property="adId" jdbcType="BIGINT" />
<result column="register_id" property="registerId" jdbcType="BIGINT" />
<result column="option_id" property="optionId" jdbcType="BIGINT" />
<result column="option_item_id" property="optionItemId" jdbcType="BIGINT" />
<result column="option_value" property="optionValue" jdbcType="VARCHAR" />
<result column="create_time" property="createTime" jdbcType="TIMESTAMP" />
</resultMap>
<resultMap id="registerItemDtoMap" type="BmRegisterItemDTO" >
<id column="id" property="id" jdbcType="BIGINT" />
<result column="register_id" property="registerId" jdbcType="BIGINT" />
<result column="option_id" property="optionId" jdbcType="BIGINT" />
<result column="option_item_id" property="optionItemId" jdbcType="BIGINT" />
<result column="option_value" property="optionValue" jdbcType="VARCHAR" />
</resultMap>
<sql id="Base_Column_List" >
id, user_id, ad_id, register_id, option_id, option_item_id, option_value, create_time
</sql>
<insert id="insert" parameterType="com.pcloud.book.advertising.entity.AdvertisingBmRegisterItem" useGeneratedKeys="true" keyProperty="id">
insert into advertising_bm_register_item (user_id, ad_id,
register_id, option_id, option_item_id,
option_value, create_time)
values (#{userId,jdbcType=BIGINT}, #{adId,jdbcType=BIGINT},
#{registerId,jdbcType=BIGINT}, #{optionId,jdbcType=BIGINT}, #{optionItemId,jdbcType=BIGINT},
#{optionValue,jdbcType=VARCHAR}, NOW())
</insert>
<select id="getRegisterItemByUser" resultMap="registerItemDtoMap" parameterType="java.lang.Long" >
SELECT
register_id,
option_id,
option_item_id,
option_value
FROM
advertising_bm_register_item a
LEFT JOIN advertising_bm_option b ON a.option_id = b.ID
WHERE
a.register_id = #{id}
GROUP BY
a.option_id
ORDER BY
b.seq ASC,
b.id ASC
</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.pcloud.book.advertising.dao.impl.BmRegisterDaoImpl" >
<resultMap id="BaseResultMap" type="com.pcloud.book.advertising.entity.AdvertisingBmRegister" >
<id column="id" property="id" jdbcType="BIGINT" />
<result column="user_id" property="userId" jdbcType="BIGINT" />
<result column="ad_id" property="adId" jdbcType="BIGINT" />
<result column="nick_name" property="nickName" jdbcType="VARCHAR" />
<result column="create_time" property="createTime" jdbcType="TIMESTAMP" />
<result column="qrcode_id" property="qrcodeId" jdbcType="BIGINT" />
</resultMap>
<!-- 微信端用户详细信息 -->
<resultMap id="wechatDetailMap" type="BmRegisterDTO">
<id column="id" property="id" jdbcType="BIGINT" />
<result column="user_id" property="userId" jdbcType="BIGINT" />
<result column="ad_id" property="adId" jdbcType="BIGINT" />
<result column="nick_name" property="nickName" jdbcType="VARCHAR" />
<result column="create_time" property="createTime" jdbcType="TIMESTAMP" />
<result column="qrcode_id" property="qrcodeId" jdbcType="BIGINT" />
<collection property="registerItemDTOS" column="id"
ofType="registerItemDtoMap"
select="com.pcloud.book.advertising.dao.impl.BmRegisterItemDaoImpl.getRegisterItemByUser" />
</resultMap>
<sql id="Base_Column_List" >
id, user_id, ad_id, nick_name, create_time, qrcode_id
</sql>
<insert id="insert" parameterType="com.pcloud.book.advertising.entity.AdvertisingBmRegister" useGeneratedKeys="true" keyProperty="id">
insert into advertising_bm_register (user_id, ad_id,
nick_name, create_time, qrcode_id)
values (#{userId,jdbcType=BIGINT}, #{adId,jdbcType=BIGINT},
#{nickName,jdbcType=VARCHAR}, NOW(), #{qrcodeId})
</insert>
<!-- 微信端获取个人报名信息 -->
<select id="getDetailByUser" resultMap="wechatDetailMap" parameterType="map" >
select
<include refid="Base_Column_List" />
from advertising_bm_register
where ad_id = #{adId,jdbcType=BIGINT}
and user_id = #{wechatUserId}
<if test="qrcodeId != null">
AND qrcode_id = #{qrcodeId}
</if>
ORDER BY create_time DESC
</select>
<select id="getRegisterCountByAdId" parameterType="map" resultType="Long">
SELECT
IFNULL(COUNT(1), 0)
FROM
advertising_bm_register
WHERE
ad_id = #{adId,jdbcType=BIGINT}
<if test="statisMonth != null">
AND DATE_FORMAT(create_time, "%Y-%m") = #{statisMonth}
</if>
</select>
<select id="getRegisterCountByAdIds" parameterType="list" resultType="Long">
SELECT
IFNULL(COUNT(1), 0)
FROM
advertising_bm_register
WHERE ad_id in
<foreach collection="list" item="item" open="(" separator="," close=")">
${item}
</foreach>
</select>
<select id="exportRegisterInfoById" parameterType="map" resultMap="wechatDetailMap">
select
<include refid="Base_Column_List" />
from advertising_bm_register
where ad_id = #{adId}
<if test="qrcodeId != null">
AND qrcode_id = #{qrcodeId}
</if>
ORDER BY create_time DESC
</select>
<select id="getRegisterCountByAdIdQrcodeId" parameterType="map" resultType="Long">
SELECT
IFNULL(COUNT(1), 0)
FROM
advertising_bm_register
WHERE
ad_id = #{adId,jdbcType=BIGINT}
AND qrcode_id = #{qrcodeId}
<if test="statisMonth != null">
AND DATE_FORMAT(create_time, "%Y-%m") = #{statisMonth}
</if>
</select>
</mapper>
\ No newline at end of file
......@@ -179,6 +179,8 @@
ifnull(cr.click_num, 0) * m.price_each_time
WHEN 'CPM' THEN
ifnull(er.exposure_num, 0) * m.price_each_time
WHEN 'CPA' THEN
ifnull(br.register_num, 0) * ifnull(m.price_each_time,0)
ELSE
0
END
......@@ -226,6 +228,18 @@
) cr ON cr.ad_id = b.ad_id
AND cr.book_id = b.book_id
AND cr.channel_id = b.channel_id
LEFT JOIN (
SELECT
ad_id,
COUNT(id) register_num
FROM
advertising_bm_register
WHERE
DATE_FORMAT(create_time, '%Y-%m-%d') = #{createDay}
AND qrcode_id IS NULL
GROUP BY
ad_id
) br ON br.ad_id = b.ad_id
WHERE
b.ad_id = s.id
AND s.id = m.ad_id
......@@ -275,6 +289,8 @@
ifnull(cr.click_num, 0) * m.price_each_time
WHEN 'CPM' THEN
ifnull(er.exposure_num, 0) * m.price_each_time
WHEN 'CPA' THEN
ifnull(br.register_num, 0) * ifnull(m.price_each_time,0)
ELSE
0
END
......@@ -328,6 +344,21 @@
AND cr.book_id = b.book_id
AND cr.channel_id = b.channel_id
AND cr.from_id = b.qrcode_id
LEFT JOIN (
SELECT
ad_id,
qrcode_id,
COUNT(id) register_num
FROM
advertising_bm_register
WHERE
DATE_FORMAT(create_time, '%Y-%m-%d') = #{createDay}
AND qrcode_id IS NOT NULL
GROUP BY
ad_id,
qrcode_id
) br ON br.ad_id = b.ad_id
AND br.qrcode_id = b.qrcode_id
WHERE
b.ad_id = s.id
AND s.id = m.ad_id
......
......@@ -17,6 +17,24 @@
<result column="update_time" property="updateTime" jdbcType="TIMESTAMP"/>
<result column="is_test" property="isTest" jdbcType="BIT"/>
<result column="is_open" property="isOpen" jdbcType="BIT"/>
<result column="ad_detail_mode" property="adDetailMode" jdbcType="VARCHAR" />
<result column="ad_detail_cover_pic" property="adDetailCoverPic" jdbcType="VARCHAR" />
<result column="ad_detail_welfare_pic" property="adDetailWelfarePic" jdbcType="VARCHAR" />
<result column="ad_detail_info" property="adDetailInfo" jdbcType="VARCHAR" />
<result column="ad_detail_file_id" property="adDetailFileId" jdbcType="VARCHAR" />
<result column="ad_detail_file_convert_state" property="adDetailFileConvertState" jdbcType="INTEGER" />
<result column="ad_detail_file_url" property="adDetailFileUrl" jdbcType="VARCHAR" />
<result column="ad_detail_title" property="adDetailTitle" jdbcType="VARCHAR" />
<result column="ad_detail_file_pilot_second" property="adDetailFilePilotSecond" jdbcType="BIGINT" />
<result column="ad_detail_file_pilot_url" property="adDetailFilePilotUrl" jdbcType="VARCHAR" />
<result column="ad_detail_file_pilot_finish_tip" property="adDetailFilePilotFinishTip" jdbcType="VARCHAR" />
<result column="ad_form_mobile_check" property="adFormMobileCheck" jdbcType="BIT" />
<result column="ad_form_remark" property="adFormRemark" jdbcType="VARCHAR" />
<result column="ad_form_button" property="adFormButton" jdbcType="VARCHAR" />
<result column="ad_form_link" property="adFormLink" jdbcType="VARCHAR" />
<result column="ad_detail_file_size" property="adDetailFileSize" jdbcType="BIGINT" />
<result column="ad_detail_file_name" property="adDetailFileName" jdbcType="VARCHAR" />
<result column="ad_detail_file_duration" property="adDetailFileDuration" jdbcType="BIGINT" />
</resultMap>
<resultMap id="AdvertisingSpaceDTO" type="com.pcloud.book.advertising.dto.AdvertisingSpaceDTO">
......@@ -35,11 +53,33 @@
<result column="update_time" property="updateTime" jdbcType="TIMESTAMP"/>
<result column="is_test" property="isTest" jdbcType="BIT"/>
<result column="is_open" property="isOpen" jdbcType="BIT"/>
<result column="ad_detail_mode" property="adDetailMode" jdbcType="VARCHAR" />
<result column="ad_detail_cover_pic" property="adDetailCoverPic" jdbcType="VARCHAR" />
<result column="ad_detail_welfare_pic" property="adDetailWelfarePic" jdbcType="VARCHAR" />
<result column="ad_detail_info" property="adDetailInfo" jdbcType="VARCHAR" />
<result column="ad_detail_file_id" property="adDetailFileId" jdbcType="VARCHAR" />
<result column="ad_detail_file_convert_state" property="adDetailFileConvertState" jdbcType="INTEGER" />
<result column="ad_detail_file_url" property="adDetailFileUrl" jdbcType="VARCHAR" />
<result column="ad_detail_title" property="adDetailTitle" jdbcType="VARCHAR" />
<result column="ad_detail_file_pilot_second" property="adDetailFilePilotSecond" jdbcType="BIGINT" />
<result column="ad_detail_file_pilot_url" property="adDetailFilePilotUrl" jdbcType="VARCHAR" />
<result column="ad_detail_file_pilot_finish_tip" property="adDetailFilePilotFinishTip" jdbcType="VARCHAR" />
<result column="ad_form_mobile_check" property="adFormMobileCheck" jdbcType="BIT" />
<result column="ad_form_remark" property="adFormRemark" jdbcType="VARCHAR" />
<result column="ad_form_button" property="adFormButton" jdbcType="VARCHAR" />
<result column="ad_form_link" property="adFormLink" jdbcType="VARCHAR" />
<result column="ad_detail_file_size" property="adDetailFileSize" jdbcType="BIGINT" />
<result column="ad_detail_file_name" property="adDetailFileName" jdbcType="VARCHAR" />
<result column="ad_detail_file_duration" property="adDetailFileDuration" jdbcType="BIGINT" />
</resultMap>
<sql id="Base_Column_List">
id, ad_name, ad_position, ad_position_mode, ad_position_detail, master_id, ad_link, source_id,
ad_title, ad_slogan, ad_pic, create_time, update_time,is_test, is_open
ad_title, ad_slogan, ad_pic, create_time, update_time, is_test, is_open, ad_detail_mode,
ad_detail_cover_pic, ad_detail_welfare_pic, ad_detail_info, ad_detail_file_id, ad_detail_file_convert_state,
ad_detail_file_url, ad_detail_title, ad_detail_file_pilot_second, ad_detail_file_pilot_url,
ad_detail_file_pilot_finish_tip, ad_form_mobile_check, ad_form_remark, ad_form_button,
ad_form_link, ad_detail_file_size, ad_detail_file_name, ad_detail_file_duration
</sql>
<select id="getById" resultMap="BaseResultMap" parameterType="Long">
......@@ -67,7 +107,26 @@
s.source_id,
s.ad_title,
s.ad_slogan,
s.ad_pic
s.ad_pic,
s.master_id,
s.ad_detail_mode,
s.ad_detail_cover_pic,
s.ad_detail_welfare_pic,
s.ad_detail_info,
s.ad_detail_file_id,
s.ad_detail_file_convert_state,
s.ad_detail_file_url,
s.ad_detail_title,
s.ad_detail_file_pilot_second,
s.ad_detail_file_pilot_url,
s.ad_detail_file_pilot_finish_tip,
s.ad_form_mobile_check,
s.ad_form_remark,
s.ad_form_button,
s.ad_form_link,
s.ad_detail_file_size,
s.ad_detail_file_name,
s.ad_detail_file_duration
FROM
advertising_distribution_book b,
advertising_space s
......@@ -94,7 +153,26 @@
s.source_id,
s.ad_title,
s.ad_slogan,
s.ad_pic
s.ad_pic,
s.master_id,
s.ad_detail_mode,
s.ad_detail_cover_pic,
s.ad_detail_welfare_pic,
s.ad_detail_info,
s.ad_detail_file_id,
s.ad_detail_file_convert_state,
s.ad_detail_file_url,
s.ad_detail_title,
s.ad_detail_file_pilot_second,
s.ad_detail_file_pilot_url,
s.ad_detail_file_pilot_finish_tip,
s.ad_form_mobile_check,
s.ad_form_remark,
s.ad_form_button,
s.ad_form_link,
s.ad_detail_file_size,
s.ad_detail_file_name,
s.ad_detail_file_duration
FROM
advertising_distribution_book b,
advertising_space s
......@@ -237,7 +315,14 @@
create_time,
update_time,
is_open,
is_test,
ad_detail_mode,
ad_detail_cover_pic, ad_detail_welfare_pic, ad_detail_info,
ad_detail_file_id, ad_detail_file_convert_state,
ad_detail_file_url, ad_detail_title, ad_detail_file_pilot_second,
ad_detail_file_pilot_url, ad_detail_file_pilot_finish_tip,
ad_form_mobile_check, ad_form_remark, ad_form_button,
ad_form_link,ad_detail_file_size, ad_detail_file_name,
ad_detail_file_duration
</trim>
<trim prefix="values (" suffix=")" suffixOverrides=",">
#{adName,jdbcType=VARCHAR},
......@@ -253,7 +338,14 @@
NOW(),
NOW(),
#{isOpen,jdbcType=BIT},
0,
#{adDetailMode,jdbcType=VARCHAR},
#{adDetailCoverPic,jdbcType=VARCHAR}, #{adDetailWelfarePic,jdbcType=VARCHAR}, #{adDetailInfo,jdbcType=VARCHAR},
#{adDetailFileId,jdbcType=VARCHAR}, #{adDetailFileConvertState,jdbcType=INTEGER},
#{adDetailFileUrl,jdbcType=VARCHAR}, #{adDetailTitle,jdbcType=VARCHAR}, #{adDetailFilePilotSecond,jdbcType=BIGINT},
#{adDetailFilePilotUrl,jdbcType=VARCHAR}, #{adDetailFilePilotFinishTip,jdbcType=VARCHAR},
#{adFormMobileCheck,jdbcType=BIT}, #{adFormRemark,jdbcType=VARCHAR}, #{adFormButton,jdbcType=VARCHAR},
#{adFormLink,jdbcType=VARCHAR}, #{adDetailFileSize}, #{adDetailFileName},
#{adDetailFileDuration}
</trim>
</insert>
......@@ -294,10 +386,86 @@
<if test="isOpen != null">
is_open = #{isOpen,jdbcType=BIT},
</if>
<if test="adDetailMode != null" >
ad_detail_mode = #{adDetailMode,jdbcType=VARCHAR},
</if>
<if test="adDetailCoverPic != null" >
ad_detail_cover_pic = #{adDetailCoverPic,jdbcType=VARCHAR},
</if>
<if test="adDetailWelfarePic != null" >
ad_detail_welfare_pic = #{adDetailWelfarePic,jdbcType=VARCHAR},
</if>
<if test="adDetailInfo != null" >
ad_detail_info = #{adDetailInfo,jdbcType=VARCHAR},
</if>
<if test="adDetailFileId != null" >
ad_detail_file_id = #{adDetailFileId,jdbcType=VARCHAR},
</if>
<if test="adDetailFileConvertState != null" >
ad_detail_file_convert_state = #{adDetailFileConvertState,jdbcType=INTEGER},
</if>
<if test="adDetailFileUrl != null" >
ad_detail_file_url = #{adDetailFileUrl,jdbcType=VARCHAR},
</if>
<if test="adDetailTitle != null" >
ad_detail_title = #{adDetailTitle,jdbcType=VARCHAR},
</if>
<if test="adDetailFilePilotSecond != null" >
ad_detail_file_pilot_second = #{adDetailFilePilotSecond,jdbcType=BIGINT},
</if>
<if test="adDetailFilePilotUrl != null" >
ad_detail_file_pilot_url = #{adDetailFilePilotUrl,jdbcType=VARCHAR},
</if>
<if test="adDetailFilePilotFinishTip != null" >
ad_detail_file_pilot_finish_tip = #{adDetailFilePilotFinishTip,jdbcType=VARCHAR},
</if>
<if test="adFormMobileCheck != null" >
ad_form_mobile_check = #{adFormMobileCheck,jdbcType=BIT},
</if>
<if test="adFormRemark != null" >
ad_form_remark = #{adFormRemark,jdbcType=VARCHAR},
</if>
<if test="adFormButton != null" >
ad_form_button = #{adFormButton,jdbcType=VARCHAR},
</if>
<if test="adFormLink != null" >
ad_form_link = #{adFormLink,jdbcType=VARCHAR},
</if>
<if test="adDetailFileSize != null">
ad_detail_file_size = #{adDetailFileSize},
</if>
<if test="adDetailFileName != null">
ad_detail_file_name = #{adDetailFileName},
</if>
<if test="adDetailFileDuration != null">
ad_detail_file_duration = #{adDetailFileDuration},
</if>
</set>
where id = #{id,jdbcType=INTEGER}
</update>
<select id="getUnConvertFile" resultMap="BaseResultMap" parameterType="String">
select <include refid="Base_Column_List"></include>
from advertising_space
where ad_detail_file_id = #{adDetailFileId,jdbcType=VARCHAR}
</select>
<update id="updateByFileId" parameterType="com.pcloud.book.advertising.entity.AdvertisingSpace">
update advertising_space
<set>
<if test="adDetailFileConvertState != null" >
ad_detail_file_convert_state = #{adDetailFileConvertState,jdbcType=INTEGER},
</if>
<if test="adDetailFileUrl != null" >
ad_detail_file_url = #{adDetailFileUrl,jdbcType=VARCHAR},
</if>
<if test="adDetailFilePilotUrl != null" >
ad_detail_file_pilot_url = #{adDetailFilePilotUrl,jdbcType=VARCHAR},
</if>
</set>
where ad_detail_file_id = #{adDetailFileId,jdbcType=VARCHAR}
</update>
<update id="updateTestStatus" parameterType="map">
UPDATE advertising_space
SET is_test = #{isTest}
......@@ -305,4 +473,21 @@
id = #{id}
</update>
<!--根据id集合获取-->
<select id="getByIds" parameterType="map" resultMap="BaseResultMap">
select <include refid="Base_Column_List"/> from advertising_space
where id in
<foreach collection="ids" item="item" open="(" separator="," close=")">
${item}
</foreach>
</select>
<select id="getAdIdsByMasterId" resultType="Long" parameterType="Long">
SELECT
id
FROM
advertising_space
WHERE
master_id = #{masterId}
</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