Commit 6b699caa by zhangdongwei-intern

feat-1002382: 时间管理任务新增奖励配置

parent d3f90ff9
......@@ -21,4 +21,8 @@ public class ReplyMessageBaseDto implements Serializable {
private String sendHour;
/**
* 0-不可配置,1-已配置,2-未配置
*/
private Integer configState;
}
package com.pcloud.book.timecontrol.biz;
import com.pcloud.book.timecontrol.dto.ReplyMessageBaseDto;
import com.pcloud.book.timecontrol.vo.CreatePrize4TaskItemVO;
import com.pcloud.book.timecontrol.vo.QueryPrizeVO;
import com.pcloud.book.timecontrol.vo.SaveTaskPrizeVO;
import com.pcloud.book.timecontrol.vo.request.SavePrize4TaskItemVO;
import java.util.List;
public interface TaskPrizeBiz {
Integer saveTaskPrize(SaveTaskPrizeVO saveTaskPrizeVO);
Integer createPrize4TaskItem(CreatePrize4TaskItemVO createPrize4TaskItemVO);
QueryPrizeVO getPrize4Task(Integer taskId);
/**
* 根据taskItem获取单次任务奖励
* @param taskItemId
* @return
*/
QueryPrizeVO getPrize4TaskItem(Integer taskItemId);
List<ReplyMessageBaseDto> listTaskItemPrize(Integer taskId);
/**
* 修改单次任务奖励
* @param vo
*/
void savePrize4TaskItem(SavePrize4TaskItemVO vo);
String downloadCertificate(Integer id, Integer type);
}
package com.pcloud.book.timecontrol.biz.impl;
import com.pcloud.appcenter.app.dto.AppDto;
import com.pcloud.book.base.exception.BookBizException;
import com.pcloud.book.consumer.app.AppConsr;
import com.pcloud.book.consumer.channel.QrcodeSceneConsr;
import com.pcloud.book.consumer.wechatgroup.WechatGroupConsr;
import com.pcloud.book.group.biz.WeixinQrcodeBiz;
import com.pcloud.book.group.enums.AppAndProductTypeEnum;
import com.pcloud.book.group.tools.SendWeixinRequestTools;
import com.pcloud.book.skill.dao.PcloudSkillDao;
import com.pcloud.book.skill.entity.PcloudSkill;
import com.pcloud.book.skill.enums.SkillTypeEnum;
import com.pcloud.book.timecontrol.biz.TaskBiz;
import com.pcloud.book.timecontrol.biz.TaskSubscribeBiz;
import com.pcloud.book.timecontrol.dto.*;
import com.pcloud.book.timecontrol.entity.*;
import com.pcloud.book.timecontrol.mapper.*;
import com.pcloud.book.timecontrol.dto.BookTaskBindingDto;
import com.pcloud.book.timecontrol.dto.CreateReplyMessageDto;
import com.pcloud.book.timecontrol.dto.CreateTaskDto;
import com.pcloud.book.timecontrol.dto.CreateTaskItemDto;
import com.pcloud.book.timecontrol.dto.LabelDto;
import com.pcloud.book.timecontrol.dto.ReplyMessageBaseDto;
import com.pcloud.book.timecontrol.dto.ReplyMessageDto;
import com.pcloud.book.timecontrol.dto.TaskDto;
import com.pcloud.book.timecontrol.dto.TaskItemDto;
import com.pcloud.book.timecontrol.dto.UpdateTaskDto;
import com.pcloud.book.timecontrol.dto.UpdateTaskItemDto;
import com.pcloud.book.timecontrol.entity.TimeControlPrizeItem;
import com.pcloud.book.timecontrol.entity.TimeControlReplyMessage;
import com.pcloud.book.timecontrol.entity.TimeControlTask;
import com.pcloud.book.timecontrol.entity.TimeControlTaskItem;
import com.pcloud.book.timecontrol.entity.TimeControlTaskPrize;
import com.pcloud.book.timecontrol.entity.TimeControlTaskSend;
import com.pcloud.book.timecontrol.entity.TimeControlTaskSubscribe;
import com.pcloud.book.timecontrol.enums.TaskPrizeTypeEnum;
import com.pcloud.book.timecontrol.enums.TaskSendStateEnum;
import com.pcloud.book.timecontrol.mapper.BookTaskBindingMapper;
import com.pcloud.book.timecontrol.mapper.TaskPrizeItemMapper;
import com.pcloud.book.timecontrol.mapper.TaskPrizeMapper;
import com.pcloud.book.timecontrol.mapper.TimeControlReplyMessageMapper;
import com.pcloud.book.timecontrol.mapper.TimeControlTaskItemMapper;
import com.pcloud.book.timecontrol.mapper.TimeControlTaskMapper;
import com.pcloud.book.timecontrol.mapper.TimeControlTaskSendMapper;
import com.pcloud.book.timecontrol.mapper.TimeControlTaskSubscribeMapper;
import com.pcloud.book.timecontrol.vo.KeyWordTaskVO;
import com.pcloud.book.util.common.YesOrNoEnums;
import com.pcloud.channelcenter.wechat.dto.AccountSettingDto;
import com.pcloud.common.core.aspect.ParamLog;
import com.pcloud.common.dto.ResponseDto;
import com.pcloud.common.page.PageBeanNew;
import com.pcloud.common.utils.DateUtils;
import com.pcloud.common.utils.ListUtils;
import com.pcloud.common.utils.ResponseHandleUtil;
import com.pcloud.common.utils.httpclient.UrlUtils;
import com.pcloud.common.utils.string.StringUtil;
import com.pcloud.common.utils.string.StringUtilParent;
import com.pcloud.labelcenter.label.service.LabelService;
import com.pcloud.wechatgroup.base.exception.WechatGroupBizException;
import lombok.extern.slf4j.Slf4j;
import com.pcloud.wechatgroup.group.dto.GroupRobotDTO;
import com.sdk.wxgroup.SendArticleMessageVO;
import com.sdk.wxgroup.SendFileVO;
import com.sdk.wxgroup.SendMessageTypeEnum;
import com.sdk.wxgroup.SendPicMessageVO;
import com.sdk.wxgroup.SendTextMessageVO;
import com.sdk.wxgroup.WxGroupSDK;
import lombok.extern.slf4j.Slf4j;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.BeanUtils;
......@@ -37,7 +71,12 @@ import org.springframework.http.ResponseEntity;
import org.springframework.stereotype.Component;
import org.springframework.transaction.annotation.Transactional;
import java.util.*;
import java.util.ArrayList;
import java.util.HashSet;
import java.util.List;
import java.util.Map;
import java.util.Objects;
import java.util.Set;
/**
* @date: 2020年01月30日 14:20
......@@ -74,6 +113,16 @@ public class TaskBizImpl implements TaskBiz {
private WechatGroupConsr wechatGroupConsr;
@Autowired
private WeixinQrcodeBiz weixinQrcodeBiz;
@Autowired
private TaskPrizeMapper taskPrizeMapper;
@Autowired
private TaskPrizeItemMapper taskPrizeItemMapper;
@Autowired
private AppConsr appConsr;
@Autowired
private QrcodeSceneConsr qrcodeSceneConsr;
@Autowired
private TaskPrizeBizImpl taskPrizeBiz;
@Override
public Integer createTask(CreateTaskDto createTaskDto) {
......@@ -471,13 +520,15 @@ public class TaskBizImpl implements TaskBiz {
@Override
@ParamLog
@Transactional(rollbackFor = Exception.class)
public void finishTaskSend(Integer taskSendId) {
TimeControlTaskSend timeControlTaskSend = timeControlTaskSendMapper.getById(taskSendId);
if (null == timeControlTaskSend) {
return;
}
if (!TaskSendStateEnum.FINISH_SEND.getState().equals(timeControlTaskSend.getSendState())) {
LOGGER.info("任务未完成");
if (!(YesOrNoEnums.YES.getValue().equals(timeControlTaskSend.getWorking()) && YesOrNoEnums.NO.getValue().equals(timeControlTaskSend.getCompleteState()))){
LOGGER.info("状态不对,不能完成任务");
return;
}
Integer taskItemId = timeControlTaskSend.getTaskItemId();
String wxUserId = timeControlTaskSend.getWxUserId();
......@@ -487,7 +538,7 @@ public class TaskBizImpl implements TaskBiz {
String ip = weixinQrcodeBiz.getRobotIpByGeneration(groupRobotDTO.getVersion());
List<TimeControlReplyMessage> replyMessages = replyMessageMapper.list4TaskItem(taskItemId, 1);
if (!ListUtils.isEmpty(replyMessages)) {
LOGGER.info("發送消息開始");
LOGGER.info("开始发送完成信息");
for(TimeControlReplyMessage replyMessage : replyMessages) {
if(replyMessage != null) {
switch (replyMessage.getMessageType()) {
......@@ -535,10 +586,93 @@ public class TaskBizImpl implements TaskBiz {
if(noCompletedItem==0){
taskSubscribeMapper.completedTaskById(timeControlTaskSend.getSubscribeId());
}
new Thread(() -> {
//处理奖励信息
handlePrize(timeControlTaskSubscribe, ip, timeControlTaskSend.getTaskItemId());
}).start();
}
private void handlePrize(TimeControlTaskSubscribe timeControlTaskSubscribe, String ip, Integer taskItemId) {
LOGGER.info("开始处理奖励信息");
//先判断有无单次奖励
TimeControlTaskPrize taskPrize = taskPrizeMapper.getByTaskItemId(taskItemId);
if (null != taskPrize) {
if (taskPrize.getHasApp().equals(YesOrNoEnums.YES.getValue()) || taskPrize.getHasCoupon().equals(YesOrNoEnums.YES.getValue()) ||
taskPrize.getHasCertificate().equals(YesOrNoEnums.YES.getValue())) {
List<TimeControlPrizeItem> timeControlPrizeItems = taskPrizeItemMapper.listByPrizeId(taskPrize.getId());
if (!ListUtils.isEmpty(timeControlPrizeItems)) {
LOGGER.info("开始发送单次奖励");
timeControlPrizeItems.forEach(timeControlPrizeItem -> {
sendMessage(timeControlPrizeItem, ip, timeControlTaskSubscribe.getWxUserId(), timeControlTaskSubscribe.getRobotWxId());
});
}
}
}
Integer taskId = timeControlTaskSubscribe.getTaskId();
//判断是否到大累计奖励
Integer completedCount = timeControlTaskSendMapper.getCompletedCount(timeControlTaskSubscribe.getId());
TimeControlTaskPrize byTaskId = taskPrizeMapper.getByTaskId(taskId, TaskPrizeTypeEnum.GRAND_TOTAL.key);
if (byTaskId != null && completedCount.equals(byTaskId.getTotalPrizeNum())) {
List<TimeControlPrizeItem> timeControlPrizeItems = taskPrizeItemMapper.listByPrizeId(byTaskId.getId());
if (!ListUtils.isEmpty(timeControlPrizeItems)) {
LOGGER.info("开始发送累计奖励");
timeControlPrizeItems.forEach(timeControlPrizeItem -> {
sendMessage(timeControlPrizeItem, ip, timeControlTaskSubscribe.getWxUserId(), timeControlTaskSubscribe.getRobotWxId());
});
}
}
}
private void sendMessage(TimeControlPrizeItem timeControlPrizeItem, String ip, String wxUserId, String robotWxId) {
if (timeControlPrizeItem.getPrizeType() == 1) {
//优惠券
SendTextMessageVO sendTextMessageVO = new SendTextMessageVO();
sendTextMessageVO.setContent(timeControlPrizeItem.getCouponTitle() + "\n" + timeControlPrizeItem.getCouponUrl());
sendTextMessageVO.setCode(SendMessageTypeEnum.SELF.getCode());
sendTextMessageVO.setWxId(robotWxId);
sendTextMessageVO.setAltId(robotWxId);
sendTextMessageVO.setWxGroupId(wxUserId);
sendTextMessageVO.setIp(ip);
WxGroupSDK.sendTextMessage(sendTextMessageVO);
} else if (timeControlPrizeItem.getPrizeType() == 2) {
//应用
if (AppAndProductTypeEnum.APP.value.equals(timeControlPrizeItem.getServeType())) {
AppDto appDto = appConsr.getBaseById(timeControlPrizeItem.getServeId());
if (appDto != null) {
AccountSettingDto accountSettingDto = qrcodeSceneConsr.getWechatInfo(appDto.getChannelId());
// 处理链接地址
String endUrl = timeControlPrizeItem.getLinkUrl() + "&wxId=" + wxUserId + "&robotWxId=" + robotWxId;
String linkUrl = SendWeixinRequestTools.splitUrl(accountSettingDto, endUrl);
String resultUrl = UrlUtils.getShortUrl4Own(linkUrl);
SendArticleMessageVO sendArticleMessageVO = new SendArticleMessageVO();
sendArticleMessageVO.setCode(1);
sendArticleMessageVO.setAltId(robotWxId);
sendArticleMessageVO.setDescription(appDto.getTypeName());
sendArticleMessageVO.setWxGroupId(wxUserId);
sendArticleMessageVO.setLinkUrl(resultUrl);
sendArticleMessageVO.setPicUrl(appDto.getSquareImg());
sendArticleMessageVO.setTitle(appDto.getTitle());
sendArticleMessageVO.setIp(ip);
WxGroupSDK.sendArticleMessage(sendArticleMessageVO);
}
}
} else if (timeControlPrizeItem.getPrizeType() == 3) {
String s = taskPrizeBiz.downloadUrl(timeControlPrizeItem, wxUserId);
if (null != s) {
SendFileVO sendFileVO = new SendFileVO();
sendFileVO.setFileUrl(s);
sendFileVO.setFileName(DateUtils.today() + "-任务奖状" + ".jpg");
sendFileVO.setIp(ip);
sendFileVO.setAltId(robotWxId);
sendFileVO.setWxId(wxUserId);
WxGroupSDK.sendFile(sendFileVO);
}
}
}
@Override
public TaskDto getTaskByIdAndWxUserId(Integer relSkillId, String wxUserId) {
return taskMapper.getTaskByIdAndWxUserId(relSkillId,wxUserId);
}
}
package com.pcloud.book.timecontrol.biz.impl;
import com.google.common.collect.Lists;
import com.pcloud.appcenter.app.dto.AppDto;
import com.pcloud.book.base.exception.BookBizException;
import com.pcloud.book.consumer.app.AppConsr;
import com.pcloud.book.consumer.wechatgroup.WechatGroupConsr;
import com.pcloud.book.group.enums.AppAndProductTypeEnum;
import com.pcloud.book.timecontrol.biz.TaskBiz;
import com.pcloud.book.timecontrol.biz.TaskPrizeBiz;
import com.pcloud.book.timecontrol.dto.ReplyMessageBaseDto;
import com.pcloud.book.timecontrol.entity.TimeControlPrizeItem;
import com.pcloud.book.timecontrol.entity.TimeControlTask;
import com.pcloud.book.timecontrol.entity.TimeControlTaskItem;
import com.pcloud.book.timecontrol.entity.TimeControlTaskPrize;
import com.pcloud.book.timecontrol.enums.TaskPrizeItemTypeEnum;
import com.pcloud.book.timecontrol.enums.TaskPrizeTypeEnum;
import com.pcloud.book.timecontrol.mapper.TaskPrizeItemMapper;
import com.pcloud.book.timecontrol.mapper.TaskPrizeMapper;
import com.pcloud.book.timecontrol.mapper.TimeControlTaskItemMapper;
import com.pcloud.book.timecontrol.mapper.TimeControlTaskMapper;
import com.pcloud.book.timecontrol.vo.CouponVO;
import com.pcloud.book.timecontrol.vo.CreateAppVO;
import com.pcloud.book.timecontrol.vo.CreateCertificateVO;
import com.pcloud.book.timecontrol.vo.CreatePrize4TaskItemVO;
import com.pcloud.book.timecontrol.vo.QueryAppVO;
import com.pcloud.book.timecontrol.vo.QueryCertificateVO;
import com.pcloud.book.timecontrol.vo.QueryCouponVO;
import com.pcloud.book.timecontrol.vo.QueryPrizeVO;
import com.pcloud.book.timecontrol.vo.SaveCertificateVO;
import com.pcloud.book.timecontrol.vo.SaveCouponVO;
import com.pcloud.book.timecontrol.vo.SaveTaskPrizeVO;
import com.pcloud.book.timecontrol.vo.request.AppRequestVO;
import com.pcloud.book.timecontrol.vo.request.CertificateRequestVO;
import com.pcloud.book.timecontrol.vo.request.PrizeCouponRequestVO;
import com.pcloud.book.timecontrol.vo.request.SavePrize4TaskItemVO;
import com.pcloud.book.util.common.YesOrNoEnums;
import com.pcloud.common.core.aspect.ParamLog;
import com.pcloud.common.entity.UploadResultInfo;
import com.pcloud.common.enums.ImageTypeEnum;
import com.pcloud.common.utils.BeanUtils;
import com.pcloud.common.utils.ListUtils;
import com.pcloud.common.utils.NumberUtil;
import com.pcloud.common.utils.UUIDUitl;
import com.pcloud.common.utils.aliyun.OssUtils;
import com.pcloud.common.utils.string.StringUtil;
import com.pcloud.wechatgroup.group.dto.GroupUserDTO;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;
import org.springframework.transaction.annotation.Transactional;
import javax.imageio.ImageIO;
import java.awt.*;
import java.awt.image.BufferedImage;
import java.io.ByteArrayOutputStream;
import java.net.URL;
import java.util.ArrayList;
import java.util.Calendar;
import java.util.Date;
import java.util.List;
import java.util.Optional;
import java.util.stream.Collectors;
@Component("taskPrizeBiz")
public class TaskPrizeBizImpl implements TaskPrizeBiz {
private final static Logger LOGGER = LoggerFactory.getLogger(TaskPrizeBizImpl.class);
@Autowired
private TimeControlTaskMapper taskMapper;
@Autowired
private TimeControlTaskItemMapper taskItemMapper;
@Autowired
private TaskPrizeMapper taskPrizeMapper;
@Autowired
private TaskPrizeItemMapper taskPrizeItemMapper;
@Autowired
private TaskBiz taskBiz;
@Autowired
private AppConsr appConsr;
@Autowired
private WechatGroupConsr wechatGroupConsr;
@ParamLog("保存累计奖励")
@Transactional(rollbackFor = Exception.class)
public Integer saveTaskPrize(SaveTaskPrizeVO saveTaskPrizeVO){
Integer taskId = saveTaskPrizeVO.getTaskId();
if (null == taskId) {
throw new BookBizException(BookBizException.ERROR, "taskId不能为空!");
}
TimeControlTask timeControlTask = taskMapper.selectByPrimaryKey(taskId);
if (null == timeControlTask) {
throw new BookBizException(BookBizException.ERROR, "任务不存在!");
}
List<TimeControlPrizeItem> prizeItems = Lists.newArrayList();
// 构建优惠券对象
buildCoupon(saveTaskPrizeVO, prizeItems);
// 构建课程对象
buildApp(saveTaskPrizeVO, prizeItems);
// 构建奖状对象
buildCertificate(saveTaskPrizeVO, prizeItems);
// 删除旧数据
taskPrizeMapper.deleteByTaskId(taskId, TaskPrizeTypeEnum.GRAND_TOTAL.key);
if(NumberUtil.isNumber(saveTaskPrizeVO.getId()) && saveTaskPrizeVO.getId() > 0){
taskPrizeItemMapper.deleteByPrizeId(saveTaskPrizeVO.getId());
}
// 新增
Integer prizeId = insertTaskPrize(saveTaskPrizeVO);
if(!ListUtils.isEmpty(prizeItems)){
prizeItems.stream().forEach(x->{ x.setPrizeId(prizeId); });
taskPrizeItemMapper.batchInsert(prizeItems);
}
return prizeId;
}
@ParamLog("累计奖励数据入库")
private Integer insertTaskPrize(SaveTaskPrizeVO saveTaskPrizeVO) {
TimeControlTaskPrize timeControlTaskPrize = new TimeControlTaskPrize();
BeanUtils.copyProperties(saveTaskPrizeVO, timeControlTaskPrize);
timeControlTaskPrize.setType(TaskPrizeTypeEnum.GRAND_TOTAL.key);
taskPrizeMapper.insert(timeControlTaskPrize);
return timeControlTaskPrize.getId();
}
@ParamLog("构建优惠券对象")
private void buildCoupon(SaveTaskPrizeVO saveTaskPrizeVO, List<TimeControlPrizeItem> prizeItems) {
if(YesOrNoEnums.NO.getValue().equals(saveTaskPrizeVO.getHasCoupon())){
return;
}
SaveCouponVO couponVO = saveTaskPrizeVO.getCouponVO();
if (StringUtil.isEmpty(couponVO.getCouponTitle()) || StringUtil.isEmpty(couponVO.getCouponUrl())) {
throw new BookBizException(BookBizException.ERROR, "请填写完整的优惠券信息!");
}
TimeControlPrizeItem timeControlPrizeItem = new TimeControlPrizeItem();
BeanUtils.copyProperties(couponVO, timeControlPrizeItem);
timeControlPrizeItem.setTaskId(saveTaskPrizeVO.getTaskId());
timeControlPrizeItem.setPrizeType(TaskPrizeItemTypeEnum.COUPON.key);
prizeItems.add(timeControlPrizeItem);
}
@ParamLog("构建课程对象")
private void buildApp(SaveTaskPrizeVO saveTaskPrizeVO, List<TimeControlPrizeItem> prizeItems) {
if(YesOrNoEnums.NO.getValue().equals(saveTaskPrizeVO.getHasApp())){
return;
}
TimeControlPrizeItem timeControlPrizeItem = new TimeControlPrizeItem();
BeanUtils.copyProperties(saveTaskPrizeVO.getAppVO(), timeControlPrizeItem);
timeControlPrizeItem.setTaskId(saveTaskPrizeVO.getTaskId());
timeControlPrizeItem.setPrizeType(TaskPrizeItemTypeEnum.APP.key);
prizeItems.add(timeControlPrizeItem);
}
@ParamLog("构建奖状对象")
private void buildCertificate(SaveTaskPrizeVO saveTaskPrizeVO, List<TimeControlPrizeItem> prizeItems) {
if(YesOrNoEnums.NO.getValue().equals(saveTaskPrizeVO.getHasCertificate())){
return;
}
SaveCertificateVO certificateVO = saveTaskPrizeVO.getCertificateVO();
if (StringUtil.isEmpty(certificateVO.getCertificateTitle()) || StringUtil.isEmpty(certificateVO.getCertificateUser())) {
throw new BookBizException(BookBizException.ERROR, "请填写完整的奖状信息!");
}
TimeControlPrizeItem timeControlPrizeItem = new TimeControlPrizeItem();
BeanUtils.copyProperties(certificateVO, timeControlPrizeItem);
timeControlPrizeItem.setTaskId(saveTaskPrizeVO.getTaskId());
timeControlPrizeItem.setPrizeType(TaskPrizeItemTypeEnum.CERTIFICATE.key);
prizeItems.add(timeControlPrizeItem);
}
@ParamLog("查询累计奖励")
@Override
public QueryPrizeVO getPrize4Task(Integer taskId) {
if (null == taskId) {
throw new BookBizException(BookBizException.ERROR, "taskId不能为空");
}
QueryPrizeVO prizeVO = new QueryPrizeVO();
TimeControlTaskPrize timeControlTaskPrize = taskPrizeMapper.getByTaskId(taskId, TaskPrizeTypeEnum.GRAND_TOTAL.key);
if(timeControlTaskPrize == null || timeControlTaskPrize.getId() == 0){
return prizeVO;
}
BeanUtils.copyProperties(timeControlTaskPrize, prizeVO);
//获取奖励
this.fillPrizeItem(prizeVO);
return prizeVO;
}
@Override
@ParamLog(value = "获取单次任务奖励", isAfterReturn = false)
public QueryPrizeVO getPrize4TaskItem(Integer taskItemId) {
if (null == taskItemId){
throw new BookBizException(BookBizException.ERROR, "taskItemId不能为空");
}
QueryPrizeVO prizeVO = new QueryPrizeVO();
TimeControlTaskPrize timeControlTaskPrize = taskPrizeMapper.selectByTaskItemId(taskItemId);
if (null == timeControlTaskPrize || null == timeControlTaskPrize.getId()){
return prizeVO;
}
BeanUtils.copyProperties(timeControlTaskPrize, prizeVO);
//获取奖励
this.fillPrizeItem(prizeVO);
return prizeVO;
}
@Override
@ParamLog("保存单次任务奖励")
@Transactional(rollbackFor = Exception.class)
public void savePrize4TaskItem(SavePrize4TaskItemVO vo) {
TimeControlTaskPrize timeControlTaskPrize = SavePrize4TaskItemVO.valueToTaskPrize(vo);
List<TimeControlPrizeItem> prizeItems = new ArrayList<>();
//要删除的奖励类型
List<Integer> deleteTypes = new ArrayList<>();
if (YesOrNoEnums.YES.getValue().equals(vo.getHasCoupon())){
Optional.ofNullable(vo.getCoupon()).orElseThrow(() -> new BookBizException(BookBizException.ERROR, "未设置优惠券"));
TimeControlPrizeItem couponPrizeItem = PrizeCouponRequestVO.valueToPrizeItem(vo);
prizeItems.add(couponPrizeItem);
deleteTypes.add(couponPrizeItem.getPrizeType());
}
if (YesOrNoEnums.YES.getValue().equals(vo.getHasApp())){
Optional.ofNullable(vo.getApp()).orElseThrow(() -> new BookBizException(BookBizException.ERROR, "未设置课程"));
TimeControlPrizeItem appPrizeItem = AppRequestVO.valueToPrizeItem(vo);
prizeItems.add(appPrizeItem);
deleteTypes.add(appPrizeItem.getPrizeType());
}
if (YesOrNoEnums.YES.getValue().equals(vo.getHasCertificate())){
Optional.ofNullable(vo.getCertificate()).orElseThrow(() -> new BookBizException(BookBizException.ERROR, "未设置证书"));
TimeControlPrizeItem certificatePrizeItem = CertificateRequestVO.valueToPrizeItem(vo);
prizeItems.add(certificatePrizeItem);
deleteTypes.add(certificatePrizeItem.getPrizeType());
}
taskPrizeMapper.deleteByTaskItemId(vo.getTaskItemId());
taskPrizeMapper.insert(timeControlTaskPrize);
if (deleteTypes.size() == 0){
return;
}
prizeItems = prizeItems.stream().peek(item -> item.setPrizeId(timeControlTaskPrize.getId())).collect(Collectors.toList());
taskPrizeItemMapper.deleteByTaskItemId(vo.getTaskItemId(), deleteTypes);
taskPrizeItemMapper.batchInsert(prizeItems);
}
@Override
public String downloadCertificate(Integer id, Integer type) {
TimeControlTaskPrize taskPrize = taskPrizeMapper.getByType(id, type);
if (taskPrize == null) {
throw new BookBizException(BookBizException.ERROR, "保存奖状设置后才可下载");
}
List<TimeControlPrizeItem> timeControlPrizeItems = taskPrizeItemMapper.listByPrizeId(taskPrize.getId());
if (!ListUtils.isEmpty(timeControlPrizeItems)) {
for (TimeControlPrizeItem timeControlPrizeItem : timeControlPrizeItems) {
if (timeControlPrizeItem.getPrizeType().equals(TaskPrizeItemTypeEnum.CERTIFICATE.key)) {
return downloadUrl(timeControlPrizeItem, null);
}
}
}
throw new BookBizException(BookBizException.ERROR, "保存奖状设置后才可下载");
}
public String downloadUrl(TimeControlPrizeItem timeControlPrizeItem, String wxUserId) {
//发送奖状
String fFileUrl = timeControlPrizeItem.getCertificateBaseUrl();
fFileUrl = fFileUrl.replace("//oss.", "//file.");
try {
//准备画板
BufferedImage bg;
bg = ImageIO.read(new URL(fFileUrl));
BufferedImage bg1 = new BufferedImage(bg.getWidth(), bg.getHeight(), BufferedImage.TYPE_3BYTE_BGR);
Graphics2D g = bg1.createGraphics();
g.drawImage(bg.getScaledInstance(bg.getWidth(), bg.getHeight(), Image.SCALE_DEFAULT), 0, 0, null);
g.setRenderingHint(RenderingHints.KEY_ANTIALIASING, RenderingHints.VALUE_ANTIALIAS_ON);
String name = "xxx";
if (null != wxUserId) {
GroupUserDTO wxUserInfoByWxUserId = wechatGroupConsr.getWxUserInfoByWxUserId(wxUserId);
name = wxUserInfoByWxUserId.getNickName();
}
//绘制昵称
name = "亲爱的" + name + ":";
g.setColor(new Color(102, 102, 102));
Font font = new Font("黑体", Font.BOLD, 16);
g.setFont(font);
g.drawString(name, 23, 85);
//绘制文案
String certificateTitle = timeControlPrizeItem.getCertificateTitle();
int length = certificateTitle.length();
if (length > 33) {
g.drawString(timeControlPrizeItem.getCertificateTitle().substring(0, 16), 40, 115);
g.drawString(timeControlPrizeItem.getCertificateTitle().substring(16, 33), 23, 138);
g.drawString(timeControlPrizeItem.getCertificateTitle().substring(33), 23, 161);
} else if (length > 16) {
g.drawString(timeControlPrizeItem.getCertificateTitle().substring(0, 16), 40, 115);
g.drawString(timeControlPrizeItem.getCertificateTitle().substring(16), 23, 138);
} else {
g.drawString(timeControlPrizeItem.getCertificateTitle(), 40, 115);
}
//绘制日期
Calendar cal = Calendar.getInstance();
cal.setTime(new Date());
Integer year = cal.get(Calendar.YEAR);
Integer month = cal.get(Calendar.MONTH) + 1;
Integer day = cal.get(Calendar.DATE);
g.drawString(year + "年" + month + "月" + day + "日", 180, 215);
//绘制落款
String loan = timeControlPrizeItem.getCertificateUser();
g.setColor(new Color(102, 102, 102));
g.setFont(font);
FontMetrics fm = g.getFontMetrics(font);
int textWidth = fm.stringWidth(loan);
int x = bg.getWidth() - textWidth - 20;
g.drawString(loan, x, 190);
ByteArrayOutputStream os = new ByteArrayOutputStream();
ImageIO.write(bg1, ImageTypeEnum.JPG.value, os);
UploadResultInfo uploadResultInfo = OssUtils.uploadFileByte(os.toByteArray(), UUIDUitl.taskName(), ImageTypeEnum.JPG.value);
os.close();
String url = uploadResultInfo == null ? null : uploadResultInfo.getUrl();
LOGGER.info("上传后的地址:" + url);
if (url != null) {
url = url.replace("//oss.", "//file.");
return url;
}
} catch (Exception e) {
LOGGER.error("生成奖状失败:" + e.getMessage(), e);
}
return null;
}
@Override
@Transactional(rollbackFor = Exception.class)
public Integer createPrize4TaskItem(CreatePrize4TaskItemVO createPrize4TaskItemVO) {
Integer taskItemId = createPrize4TaskItemVO.getTaskItemId();
TimeControlTaskItem timeControlTaskItem = taskItemMapper.selectByPrimaryKey(taskItemId);
if (null == timeControlTaskItem) {
throw new BookBizException(BookBizException.ERROR, "任务不存在!");
}
Integer taskId = timeControlTaskItem.getTaskId();
TimeControlTask timeControlTask = taskMapper.selectByPrimaryKey(taskId);
if (null == timeControlTask) {
throw new BookBizException(BookBizException.ERROR, "任务不存在!");
}
List<TimeControlPrizeItem> prizeItemList = new ArrayList<>();
//参数校验
if (YesOrNoEnums.YES.getValue().equals(createPrize4TaskItemVO.getHasCoupon())) {
CouponVO couponVO = createPrize4TaskItemVO.getCouponVO();
if (StringUtil.isEmpty(couponVO.getCouponTitle()) || StringUtil.isEmpty(couponVO.getCouponUrl())) {
throw new BookBizException(BookBizException.ERROR, "请填写完整的优惠券信息!");
}
TimeControlPrizeItem prizeItem = new TimeControlPrizeItem();
BeanUtils.copyProperties(couponVO, prizeItem);
prizeItem.setPrizeType(TaskPrizeItemTypeEnum.COUPON.key);
prizeItemList.add(prizeItem);
}
if (YesOrNoEnums.YES.getValue().equals(createPrize4TaskItemVO.getHasCertificate())) {
CreateCertificateVO createCertificateVO = createPrize4TaskItemVO.getCreateCertificateVO();
if (StringUtil.isEmpty(createCertificateVO.getCertificateTitle()) || StringUtil.isEmpty(createCertificateVO.getCertificateUser())) {
throw new BookBizException(BookBizException.ERROR, "请填写完整的奖状信息!");
}
TimeControlPrizeItem prizeItem = new TimeControlPrizeItem();
BeanUtils.copyProperties(createCertificateVO, prizeItem);
prizeItem.setPrizeType(TaskPrizeItemTypeEnum.CERTIFICATE.key);
prizeItemList.add(prizeItem);
}
if (YesOrNoEnums.YES.getValue().equals(createPrize4TaskItemVO.getHasApp())) {
CreateAppVO createAppVO = createPrize4TaskItemVO.getCreateAppVO();
TimeControlPrizeItem prizeItem = new TimeControlPrizeItem();
BeanUtils.copyProperties(createAppVO, prizeItem);
prizeItem.setPrizeType(TaskPrizeItemTypeEnum.APP.key);
prizeItemList.add(prizeItem);
}
TimeControlTaskPrize taskPrize = TimeControlTaskPrize.builder().taskId(taskId).taskItemId(taskItemId).type(TaskPrizeTypeEnum.SINGLE.key)
.totalPrizeNum(0).hasCoupon(createPrize4TaskItemVO.getHasCoupon()).hasApp(createPrize4TaskItemVO.getHasApp())
.hasCertificate(createPrize4TaskItemVO.getHasCertificate()).build();
taskPrizeMapper.insert(taskPrize);
Integer prizeId = taskPrize.getId();
if (!ListUtils.isEmpty(prizeItemList)) {
prizeItemList.forEach(timeControlPrizeItem -> {
timeControlPrizeItem.setTaskId(taskId);
timeControlPrizeItem.setTaskItemId(taskItemId);
timeControlPrizeItem.setPrizeId(prizeId);
});
}
taskPrizeItemMapper.batchInsert(prizeItemList);
return prizeId;
}
@ParamLog("填充任务奖励item")
private void fillPrizeItem(QueryPrizeVO prizeVO){
List<TimeControlPrizeItem> prizeItems = taskPrizeItemMapper.listByPrizeId(prizeVO.getId());
if(ListUtils.isEmpty(prizeItems)){
return;
}
for (TimeControlPrizeItem prizeItem : prizeItems){
if (TaskPrizeItemTypeEnum.COUPON.key.equals(prizeItem.getPrizeType())){
QueryCouponVO queryCouponVO = new QueryCouponVO();
BeanUtils.copyProperties(prizeItem, queryCouponVO);
prizeVO.setQueryCouponVO(queryCouponVO);
}else if (TaskPrizeItemTypeEnum.APP.key.equals(prizeItem.getPrizeType())){
QueryAppVO queryAppVO = new QueryAppVO();
BeanUtils.copyProperties(prizeItem, queryAppVO);
fillApp(queryAppVO);
prizeVO.setQueryAppVO(queryAppVO);
}else if (TaskPrizeItemTypeEnum.CERTIFICATE.key.equals(prizeItem.getPrizeType())){
QueryCertificateVO queryCertificateVO = new QueryCertificateVO();
BeanUtils.copyProperties(prizeItem, queryCertificateVO);
prizeVO.setQueryCertificateVO(queryCertificateVO);
}
}
}
@ParamLog("填充APP详情")
private void fillApp(QueryAppVO queryAppVO) {
if (NumberUtil.isNumber(queryAppVO.getServeId()) && queryAppVO.getServeId() > 0 && AppAndProductTypeEnum.APP.value.equals(queryAppVO.getServeType())){
AppDto appDto = appConsr.getBaseById(queryAppVO.getServeId());
if (appDto!=null){
queryAppVO.setServePic(appDto.getSquareImg());
queryAppVO.setServeName(appDto.getTitle());
queryAppVO.setServeTypeCode(appDto.getTypeCode());
queryAppVO.setServeTypeName(appDto.getTypeName());
}
}
}
@Override
public List<ReplyMessageBaseDto> listTaskItemPrize(Integer taskId) {
List<ReplyMessageBaseDto> list = taskBiz.listTaskItemDay(taskId);
if(ListUtils.isEmpty(list)){
return new ArrayList<>();
}
fillConfigState(list);
return list;
}
@ParamLog("填充是否可配置")
private void fillConfigState(List<ReplyMessageBaseDto> list) {
List<Integer> taskItemIds = list.stream().filter(a -> a.getConfigState() == 2).map(a -> a.getId()).distinct().collect(Collectors.toList());
//在配置表的
List<Integer> configItemId = taskPrizeMapper.getConfigItemId(taskItemIds);
//在配置表但是开关都是关闭的
if(!ListUtils.isEmpty(configItemId)){
List<Integer> allCloseItemId = taskPrizeMapper.getAllCloseItemId(configItemId);
if(!ListUtils.isEmpty(allCloseItemId)){
configItemId.removeAll(allCloseItemId);
}
for (ReplyMessageBaseDto replyMessageBaseDto : list) {
if(!ListUtils.isEmpty(configItemId)){
if(replyMessageBaseDto.getConfigState()==2 && configItemId.contains(replyMessageBaseDto.getId())){
replyMessageBaseDto.setConfigState(1);
}
}
}
}
}
}
package com.pcloud.book.timecontrol.entity;
import lombok.Data;
import java.util.Date;
@Data
public class TimeControlPrizeItem {
private Integer id;
private Integer taskId;
private Integer taskItemId;
private Integer prizeId;
private Integer prizeType;
private String couponUrl;
private String couponTitle;
private String content;
private String picUrl;
private Long serveId;
private String serveType;
private String linkUrl;
private String description;
private String certificateTitle;
private String certificateUser;
private String certificateBaseUrl;
private Date createTime;
}
package com.pcloud.book.timecontrol.entity;
import lombok.AllArgsConstructor;
import lombok.Builder;
import lombok.Data;
import lombok.NoArgsConstructor;
import java.util.Date;
@Data
@Builder
@AllArgsConstructor
@NoArgsConstructor
public class TimeControlTaskPrize {
private Integer id;
private Integer taskId;
private Integer taskItemId;
private Integer type;
private Integer totalPrizeNum;
private Integer hasCoupon;
private Integer hasApp;
private Integer hasCertificate;
private Date createTime;
private Date updateTime;
}
......@@ -34,4 +34,6 @@ public class TimeControlTaskSend implements Serializable {
private Integer completeState;
private String sendHour;
private Integer working;
}
package com.pcloud.book.timecontrol.enums;
public enum TaskPrizeItemTypeEnum {
COUPON(1,"优惠券"),
APP(2,"APP"),
CERTIFICATE(3,"奖状");
public final Integer key;
public final String desc;
TaskPrizeItemTypeEnum(Integer key,String desc){
this.key = key;
this.desc = desc;
}
}
package com.pcloud.book.timecontrol.enums;
public enum TaskPrizeTypeEnum {
GRAND_TOTAL(0,"累计奖励"),
SINGLE(1,"单次奖励");
public final Integer key;
public final String desc;
TaskPrizeTypeEnum(Integer key,String desc){
this.key = key;
this.desc = desc;
}
}
package com.pcloud.book.timecontrol.facade.impl;
import com.pcloud.book.base.exception.BookBizException;
import com.pcloud.book.timecontrol.biz.TaskPrizeBiz;
import com.pcloud.book.timecontrol.vo.SaveTaskPrizeVO;
import com.pcloud.book.timecontrol.vo.request.SavePrize4TaskItemVO;
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 io.swagger.annotations.ApiOperation;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.validation.annotation.Validated;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PostMapping;
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.RequestParam;
import org.springframework.web.bind.annotation.RestController;
import java.util.Map;
import java.util.Optional;
@RequestMapping("taskPrize")
@RestController("timeControlPrizeFacade")
public class TimeControlPrizeFacadeImpl {
@Autowired
private TaskPrizeBiz taskPrizeBiz;
@ApiOperation(value = "保存累计奖励")
@PostMapping("saveTaskPrize")
ResponseDto<?> saveTaskPrize(@RequestHeader String token, @RequestBody SaveTaskPrizeVO saveTaskPrizeVO) throws PermissionException {
Map<String, Object> token4Redis = SessionUtil.getToken4Redis(token);
return new ResponseDto<>(taskPrizeBiz.saveTaskPrize(saveTaskPrizeVO));
}
@ApiOperation(value = "获取任务累计奖励")
@GetMapping("getPrize4Task")
ResponseDto<?> getPrize4Task(@RequestHeader String token, @RequestParam("taskId") Integer taskId) throws PermissionException {
Map<String, Object> token4Redis = SessionUtil.getToken4Redis(token);
return new ResponseDto<>(taskPrizeBiz.getPrize4Task(taskId));
}
@ApiOperation(value = "保存单次任务奖励")
@PostMapping(value = "savePrize4TaskItem")
ResponseDto<?> savePrize4TaskItem(@RequestHeader String token, @Validated @RequestBody SavePrize4TaskItemVO vo) throws PermissionException, BizException{
Optional.ofNullable(vo).orElseThrow(() -> new BookBizException(BookBizException.ERROR, "参数不能为空"));
SessionUtil.getVlaue(token, SessionUtil.PARTY_ID);
taskPrizeBiz.savePrize4TaskItem(vo);
return new ResponseDto<>();
}
@ApiOperation(value = "获取单次任务奖励")
@GetMapping("getPrize4TaskItem")
ResponseDto<?> getPrize4TaskItem(@RequestHeader String token, @RequestParam Integer taskItemId) throws PermissionException {
return new ResponseDto<>(taskPrizeBiz.getPrize4TaskItem(taskItemId));
}
@ApiOperation(value = "获取奖励配置目录")
@GetMapping("listTaskItemPrize")
ResponseDto<?> listTaskItemPrize(@RequestHeader String token, @RequestParam Integer taskId) throws PermissionException {
return new ResponseDto<>(taskPrizeBiz.listTaskItemPrize(taskId));
}
@ApiOperation(value = "预览奖状")
@GetMapping("downloadCertificate")
ResponseDto<?> downloadCertificate(@RequestHeader String token, @RequestParam Integer id, @RequestParam Integer type) {
String url = taskPrizeBiz.downloadCertificate(id, type);
return new ResponseDto<>(url);
}
}
package com.pcloud.book.timecontrol.mapper;
import com.pcloud.book.timecontrol.entity.TimeControlPrizeItem;
import org.apache.ibatis.annotations.Param;
import org.springframework.stereotype.Component;
import java.util.List;
@Component("taskPrizeItemMapper")
public interface TaskPrizeItemMapper {
int insert(TimeControlPrizeItem model);
TimeControlPrizeItem selectByPrimaryKey(Integer id);
/**
* 根据prizeId和类型查询奖励详情
* @param prizeId
* @param prizeType
* @return
*/
TimeControlPrizeItem getByPrizeId(@Param("prizeId") Integer prizeId, @Param("prizeType") Integer prizeType);
/**
* 批量新增奖励详情
* @param prizeItemList
*/
void batchInsert(@Param("prizeItemList") List<TimeControlPrizeItem> prizeItemList);
/**
* 根据prizeId删除奖励
* @param prizeId
*/
void deleteByPrizeId(Integer prizeId);
/**
* 根据奖励id获取奖励的item列表
* @param prizeId
* @return
*/
List<TimeControlPrizeItem> listByPrizeId(Integer prizeId);
/**
* 根据taskItemId删除奖励
* @param taskItemId
* @param deleteTypes
*/
void deleteByTaskItemId(@Param("taskItemId") Integer taskItemId, @Param("deleteTypes") List<Integer> deleteTypes);
}
\ No newline at end of file
package com.pcloud.book.timecontrol.mapper;
import com.pcloud.book.timecontrol.entity.TimeControlTaskPrize;
import org.apache.ibatis.annotations.Param;
import org.springframework.stereotype.Component;
import java.util.List;
@Component("taskPrizeMapper")
public interface TaskPrizeMapper {
/**
* 新增
* @param model
* @return
*/
int insert(TimeControlTaskPrize model);
TimeControlTaskPrize selectByPrimaryKey(Integer id);
/**
* 根据taskId和类型查询奖励
* @param taskId
* @param type
* @return
*/
TimeControlTaskPrize getByTaskId(@Param("taskId") Integer taskId, @Param("type") Integer type);
int updateByPrimaryKeySelective(TimeControlTaskPrize model);
/**
* 根据任务和类型删除
* @param taskId
* @param type
*/
void deleteByTaskId(@Param("taskId") Integer taskId, @Param("type") Integer type);
/**
* 根据taskItemId删除奖励
* @param taskItemId
*/
void deleteByTaskItemId(Integer taskItemId);
/**
* 根据taskItemId获取单次任务奖励
* @param taskItemId
* @return
*/
TimeControlTaskPrize selectByTaskItemId(Integer taskItemId);
/**
*获取配置奖励的单次任务
*/
List<Integer> getConfigItemId(@Param("taskItemIds") List<Integer> taskItemIds);
/**
* 获取所有开关的关闭的单次任务
* @param taskItemIds
* @return
*/
List<Integer> getAllCloseItemId(@Param("taskItemIds") List<Integer> taskItemIds);
TimeControlTaskPrize getByTaskItemId(Integer taskItemId);
TimeControlTaskPrize getByType(@Param("id") Integer id, @Param("type") Integer type);
}
\ No newline at end of file
......@@ -61,4 +61,6 @@ public interface TimeControlTaskSendMapper {
List<SubscribeTaskUserDTO> getTaskNoCompletedCount(@Param("wxIds") List<String> wxIds, @Param("taskId") Integer taskId);
Integer getNoCompletedCount(@Param("subscribeId") Integer subscribeId);
Integer getCompletedCount(Integer subscribeId);
}
package com.pcloud.book.timecontrol.vo;
import lombok.Data;
import java.io.Serializable;
@Data
public class CouponVO implements Serializable {
private String couponUrl;
private String couponTitle;
}
package com.pcloud.book.timecontrol.vo;
import lombok.Data;
import java.io.Serializable;
@Data
public class CreateAppVO implements Serializable {
private String content;
private String picUrl;
private Long serveId;
private String serveType;
private String linkUrl;
private String description;
}
package com.pcloud.book.timecontrol.vo;
import lombok.Data;
import java.io.Serializable;
@Data
public class CreateCertificateVO implements Serializable {
private String certificateTitle;
private String certificateUser;
private String certificateBaseUrl;
}
package com.pcloud.book.timecontrol.vo;
import lombok.Data;
import javax.validation.constraints.NotNull;
import java.io.Serializable;
@Data
public class CreatePrize4TaskItemVO implements Serializable {
private Integer taskItemId;
@NotNull
private Integer hasCoupon;
private CouponVO couponVO;
@NotNull
private Integer hasApp;
private CreateAppVO createAppVO;
@NotNull
private Integer hasCertificate;
private CreateCertificateVO createCertificateVO;
}
package com.pcloud.book.timecontrol.vo;
import lombok.Data;
import java.io.Serializable;
@Data
public class CreatePrize4TaskVO implements Serializable {
private Integer prizeId;
private Integer taskId;
private Integer totalPrizeNum;
private Integer hasCoupon;
private CouponVO couponVO;
private Integer hasApp;
private CreateAppVO createAppVO;
private Integer hasCertificate;
private CreateCertificateVO createCertificateVO;
}
package com.pcloud.book.timecontrol.vo;
import com.fasterxml.jackson.annotation.JsonInclude;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import java.io.Serializable;
@Data
@JsonInclude(JsonInclude.Include.NON_NULL)
public class QueryAppVO implements Serializable {
private Integer id;
private String content;
private String picUrl;
private Long serveId;
private String serveType;
private String linkUrl;
private String description;
@ApiModelProperty("应用或作品图片")
private String servePic;
@ApiModelProperty("应用或作品名称")
private String serveName;
@ApiModelProperty("应用或作品类型名称")
private String serveTypeName;
@ApiModelProperty("应用或作品类型编码")
private String serveTypeCode;
}
package com.pcloud.book.timecontrol.vo;
import com.fasterxml.jackson.annotation.JsonInclude;
import lombok.Data;
import java.io.Serializable;
@Data
@JsonInclude(JsonInclude.Include.NON_NULL)
public class QueryCertificateVO implements Serializable {
private Integer id;
private String certificateTitle;
private String certificateUser;
private String certificateBaseUrl;
}
package com.pcloud.book.timecontrol.vo;
import com.fasterxml.jackson.annotation.JsonInclude;
import lombok.Data;
import java.io.Serializable;
@Data
@JsonInclude(JsonInclude.Include.NON_NULL)
public class QueryCouponVO implements Serializable {
private Integer id;
private String couponUrl;
private String couponTitle;
}
package com.pcloud.book.timecontrol.vo;
import com.fasterxml.jackson.annotation.JsonInclude;
import lombok.Data;
import java.io.Serializable;
@Data
@JsonInclude(JsonInclude.Include.NON_NULL)
public class QueryPrizeVO implements Serializable {
private Integer id;
private Integer taskId;
private Integer taskItemId;
private Integer totalPrizeNum;
private Integer hasCoupon;
private QueryCouponVO queryCouponVO;
private Integer hasApp;
private QueryAppVO queryAppVO;
private Integer hasCertificate;
private QueryCertificateVO queryCertificateVO;
}
package com.pcloud.book.timecontrol.vo;
import lombok.Data;
import java.io.Serializable;
@Data
public class SaveAppVO implements Serializable {
private String content;
private String picUrl;
private Long serveId;
private String serveType;
private String linkUrl;
private String description;
}
package com.pcloud.book.timecontrol.vo;
import lombok.Data;
import java.io.Serializable;
@Data
public class SaveCertificateVO implements Serializable {
private String certificateTitle;
private String certificateUser;
private String certificateBaseUrl;
}
package com.pcloud.book.timecontrol.vo;
import lombok.Data;
import java.io.Serializable;
@Data
public class SaveCouponVO implements Serializable {
private String couponUrl;
private String couponTitle;
}
package com.pcloud.book.timecontrol.vo;
import lombok.Data;
import java.io.Serializable;
@Data
public class SaveTaskPrizeVO implements Serializable {
private Integer id;
private Integer taskId;
private Integer totalPrizeNum;
private Integer hasCoupon;
private SaveCouponVO couponVO;
private Integer hasApp;
private SaveAppVO appVO;
private Integer hasCertificate;
private SaveCertificateVO certificateVO;
}
package com.pcloud.book.timecontrol.vo;
import lombok.Data;
import java.io.Serializable;
@Data
public class UpdatePrize4TaskItemVO implements Serializable {
private Integer prizeId;
private Integer hasCoupon;
private Integer hasApp;
private Integer hasCertificate;
}
package com.pcloud.book.timecontrol.vo.request;
import com.pcloud.book.timecontrol.entity.TimeControlPrizeItem;
import com.pcloud.book.timecontrol.enums.TaskPrizeItemTypeEnum;
import com.pcloud.common.utils.bean.BeanUtils;
import lombok.Data;
import javax.validation.constraints.NotNull;
import java.util.Date;
@Data
public class AppRequestVO {
@NotNull(message = "课程标题不能为空")
private String content;
@NotNull(message = "课程封面图不能为空")
private String picUrl;
@NotNull(message = "课程应用id不能为空")
private Long serveId;
@NotNull(message = "课程类型不能为空")
private String serveType;
/**
* 课程链接
*/
private String linkUrl;
/**
* 课程简介
*/
private String description;
public static TimeControlPrizeItem valueToPrizeItem(SavePrize4TaskItemVO savePrize4TaskItemVO){
TimeControlPrizeItem prizeItem = new TimeControlPrizeItem();
AppRequestVO vo = savePrize4TaskItemVO.getApp();
BeanUtils.copyProperties(vo, prizeItem);
prizeItem.setTaskId(savePrize4TaskItemVO.getTaskId());
prizeItem.setTaskItemId(savePrize4TaskItemVO.getTaskItemId());
prizeItem.setPrizeType(TaskPrizeItemTypeEnum.APP.key);
prizeItem.setCreateTime(new Date());
return prizeItem;
}
}
package com.pcloud.book.timecontrol.vo.request;
import com.pcloud.book.timecontrol.entity.TimeControlPrizeItem;
import com.pcloud.book.timecontrol.enums.TaskPrizeItemTypeEnum;
import com.pcloud.common.utils.BeanUtils;
import lombok.Data;
import javax.validation.constraints.NotNull;
import java.util.Date;
@Data
public class CertificateRequestVO {
@NotNull(message = "证书文案不能为空")
private String certificateTitle;
@NotNull(message = "证书落款不能为空")
private String certificateUser;
@NotNull(message = "证书图片链接不能为空")
private String certificateBaseUrl;
public static TimeControlPrizeItem valueToPrizeItem(SavePrize4TaskItemVO savePrize4TaskItemVO){
TimeControlPrizeItem prizeItem = new TimeControlPrizeItem();
CertificateRequestVO vo = savePrize4TaskItemVO.getCertificate();
BeanUtils.copyProperties(vo, prizeItem);
prizeItem.setTaskId(savePrize4TaskItemVO.getTaskId());
prizeItem.setTaskItemId(savePrize4TaskItemVO.getTaskItemId());
prizeItem.setPrizeType(TaskPrizeItemTypeEnum.CERTIFICATE.key);
prizeItem.setCreateTime(new Date());
return prizeItem;
}
}
package com.pcloud.book.timecontrol.vo.request;
import com.pcloud.book.timecontrol.entity.TimeControlPrizeItem;
import com.pcloud.book.timecontrol.enums.TaskPrizeItemTypeEnum;
import com.pcloud.common.utils.BeanUtils;
import lombok.Data;
import javax.validation.constraints.NotNull;
import java.util.Date;
@Data
public class PrizeCouponRequestVO {
@NotNull(message = "优惠券链接不能为空")
private String couponUrl;
@NotNull(message = "优惠券标题不能为空")
private String couponTitle;
public static TimeControlPrizeItem valueToPrizeItem(SavePrize4TaskItemVO savePrize4TaskItemVO){
TimeControlPrizeItem prizeItem = new TimeControlPrizeItem();
PrizeCouponRequestVO vo = savePrize4TaskItemVO.getCoupon();
BeanUtils.copyProperties(vo, prizeItem);
prizeItem.setTaskId(savePrize4TaskItemVO.getTaskId());
prizeItem.setTaskItemId(savePrize4TaskItemVO.getTaskItemId());
prizeItem.setPrizeType(TaskPrizeItemTypeEnum.COUPON.key);
prizeItem.setCreateTime(new Date());
return prizeItem;
}
}
package com.pcloud.book.timecontrol.vo.request;
import com.pcloud.book.timecontrol.entity.TimeControlTaskPrize;
import com.pcloud.book.timecontrol.enums.TaskPrizeTypeEnum;
import com.pcloud.common.utils.BeanUtils;
import lombok.Data;
import javax.validation.Valid;
import javax.validation.constraints.NotNull;
import java.util.Date;
@Data
public class SavePrize4TaskItemVO{
@NotNull(message = "taskId不能为空")
private Integer taskId;
@NotNull(message = "taskItemId不能为空")
private Integer taskItemId;
@NotNull(message = "未设置是否开启优惠券奖励")
private Integer hasCoupon;
@NotNull(message = "未设置是否开启课程奖励")
private Integer hasApp;
@NotNull(message = "未设置是否开启证书奖励")
private Integer hasCertificate;
@Valid
private PrizeCouponRequestVO coupon;
@Valid
private AppRequestVO app;
@Valid
private CertificateRequestVO certificate;
public static TimeControlTaskPrize valueToTaskPrize(SavePrize4TaskItemVO vo){
TimeControlTaskPrize taskPrize = new TimeControlTaskPrize();
BeanUtils.copyProperties(vo, taskPrize);
taskPrize.setType(TaskPrizeTypeEnum.SINGLE.key);
taskPrize.setCreateTime(new Date());
taskPrize.setUpdateTime(new Date());
return taskPrize;
}
}
<?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.timecontrol.mapper.TaskPrizeItemMapper" >
<resultMap id="BaseResultMap" type="com.pcloud.book.timecontrol.entity.TimeControlPrizeItem" >
<id column="id" property="id" jdbcType="INTEGER" />
<result column="task_id" property="taskId" jdbcType="INTEGER" />
<result column="task_item_id" property="taskItemId" jdbcType="INTEGER" />
<result column="prize_id" property="prizeId" jdbcType="INTEGER" />
<result column="prize_type" property="prizeType" jdbcType="INTEGER" />
<result column="coupon_url" property="couponUrl" jdbcType="VARCHAR" />
<result column="coupon_title" property="couponTitle" jdbcType="VARCHAR" />
<result column="content" property="content" jdbcType="VARCHAR" />
<result column="pic_url" property="picUrl" jdbcType="VARCHAR" />
<result column="serve_id" property="serveId" jdbcType="INTEGER" />
<result column="serve_type" property="serveType" jdbcType="VARCHAR" />
<result column="link_url" property="linkUrl" jdbcType="VARCHAR" />
<result column="description" property="description" jdbcType="VARCHAR" />
<result column="certificate_title" property="certificateTitle" jdbcType="VARCHAR" />
<result column="certificate_user" property="certificateUser" jdbcType="VARCHAR" />
<result column="certificate_base_url" property="certificateBaseUrl" jdbcType="VARCHAR" />
<result column="create_time" property="createTime" jdbcType="TIMESTAMP" />
</resultMap>
<sql id="Base_Column_List" >
id, task_id, task_item_id, prize_id, prize_type, coupon_url, coupon_title, content,
pic_url, serve_id, serve_type, link_url, description, certificate_title, certificate_user,
certificate_base_url, create_time
</sql>
<select id="selectByPrimaryKey" resultMap="BaseResultMap" parameterType="java.lang.Integer" >
select
<include refid="Base_Column_List" />
from time_control_task_prize_item
where id = #{id,jdbcType=INTEGER}
</select>
<select id="getByPrizeId" resultMap="BaseResultMap" parameterType="map">
SELECT
<include refid="Base_Column_List" />
from time_control_task_prize_item
WHERE prize_id = #{prizeId,jdbcType=INTEGER} AND prize_type = #{prizeType,jdbcType=INTEGER}
ORDER BY id DESC
LIMIT 0,1
</select>
<delete id="deleteByPrimaryKey" parameterType="java.lang.Integer" >
delete from time_control_task_prize_item
where id = #{id,jdbcType=INTEGER}
</delete>
<delete id="deleteByPrizeId">
delete from time_control_task_prize_item
where prize_id = #{prizeId,jdbcType=INTEGER}
</delete>
<insert id="insert" parameterType="com.pcloud.book.timecontrol.entity.TimeControlPrizeItem" useGeneratedKeys="true" keyProperty="id" >
insert into time_control_task_prize_item (task_id, task_item_id,
prize_id, prize_type, coupon_url,
coupon_title, content, pic_url,
serve_id, serve_type, link_url,
description, certificate_title, certificate_user,
certificate_base_url, create_time)
values (#{taskId,jdbcType=INTEGER}, #{taskItemId,jdbcType=INTEGER},
#{prizeId,jdbcType=INTEGER}, #{prizeType,jdbcType=INTEGER}, #{couponUrl,jdbcType=VARCHAR},
#{couponTitle,jdbcType=VARCHAR}, #{content,jdbcType=VARCHAR}, #{picUrl,jdbcType=VARCHAR},
#{serveId,jdbcType=INTEGER}, #{serveType,jdbcType=VARCHAR}, #{linkUrl,jdbcType=VARCHAR},
#{description,jdbcType=VARCHAR}, #{certificateTitle,jdbcType=VARCHAR}, #{certificateUser,jdbcType=VARCHAR},
#{certificateBaseUrl,jdbcType=VARCHAR}, NOW())
</insert>
<insert id="insertSelective" parameterType="com.pcloud.book.timecontrol.entity.TimeControlPrizeItem" >
insert into time_control_task_prize_item
<trim prefix="(" suffix=")" suffixOverrides="," >
<if test="id != null" >
id,
</if>
<if test="taskId != null" >
task_id,
</if>
<if test="taskItemId != null" >
task_item_id,
</if>
<if test="prizeId != null" >
prize_id,
</if>
<if test="prizeType != null" >
prize_type,
</if>
<if test="couponUrl != null" >
coupon_url,
</if>
<if test="couponTitle != null" >
coupon_title,
</if>
<if test="content != null" >
content,
</if>
<if test="picUrl != null" >
pic_url,
</if>
<if test="serveId != null" >
serve_id,
</if>
<if test="serveType != null" >
serve_type,
</if>
<if test="linkUrl != null" >
link_url,
</if>
<if test="description != null" >
description,
</if>
<if test="certificateTitle != null" >
certificate_title,
</if>
<if test="certificateUser != null" >
certificate_user,
</if>
<if test="certificateBaseUrl != null" >
certificate_base_url,
</if>
<if test="createTime != null" >
create_time,
</if>
</trim>
<trim prefix="values (" suffix=")" suffixOverrides="," >
<if test="id != null" >
#{id,jdbcType=INTEGER},
</if>
<if test="taskId != null" >
#{taskId,jdbcType=INTEGER},
</if>
<if test="taskItemId != null" >
#{taskItemId,jdbcType=INTEGER},
</if>
<if test="prizeId != null" >
#{prizeId,jdbcType=INTEGER},
</if>
<if test="prizeType != null" >
#{prizeType,jdbcType=INTEGER},
</if>
<if test="couponUrl != null" >
#{couponUrl,jdbcType=VARCHAR},
</if>
<if test="couponTitle != null" >
#{couponTitle,jdbcType=VARCHAR},
</if>
<if test="content != null" >
#{content,jdbcType=VARCHAR},
</if>
<if test="picUrl != null" >
#{picUrl,jdbcType=VARCHAR},
</if>
<if test="serveId != null" >
#{serveId,jdbcType=INTEGER},
</if>
<if test="serveType != null" >
#{serveType,jdbcType=VARCHAR},
</if>
<if test="linkUrl != null" >
#{linkUrl,jdbcType=VARCHAR},
</if>
<if test="description != null" >
#{description,jdbcType=VARCHAR},
</if>
<if test="certificateTitle != null" >
#{certificateTitle,jdbcType=VARCHAR},
</if>
<if test="certificateUser != null" >
#{certificateUser,jdbcType=VARCHAR},
</if>
<if test="certificateBaseUrl != null" >
#{certificateBaseUrl,jdbcType=VARCHAR},
</if>
<if test="createTime != null" >
#{createTime,jdbcType=TIMESTAMP},
</if>
</trim>
</insert>
<update id="updateByPrimaryKeySelective" parameterType="com.pcloud.book.timecontrol.entity.TimeControlPrizeItem" >
update time_control_task_prize_item
<set >
<if test="taskId != null" >
task_id = #{taskId,jdbcType=INTEGER},
</if>
<if test="taskItemId != null" >
task_item_id = #{taskItemId,jdbcType=INTEGER},
</if>
<if test="prizeId != null" >
prize_id = #{prizeId,jdbcType=INTEGER},
</if>
<if test="prizeType != null" >
prize_type = #{prizeType,jdbcType=INTEGER},
</if>
<if test="couponUrl != null" >
coupon_url = #{couponUrl,jdbcType=VARCHAR},
</if>
<if test="couponTitle != null" >
coupon_title = #{couponTitle,jdbcType=VARCHAR},
</if>
<if test="content != null" >
content = #{content,jdbcType=VARCHAR},
</if>
<if test="picUrl != null" >
pic_url = #{picUrl,jdbcType=VARCHAR},
</if>
<if test="serveId != null" >
serve_id = #{serveId,jdbcType=INTEGER},
</if>
<if test="serveType != null" >
serve_type = #{serveType,jdbcType=VARCHAR},
</if>
<if test="linkUrl != null" >
link_url = #{linkUrl,jdbcType=VARCHAR},
</if>
<if test="description != null" >
description = #{description,jdbcType=VARCHAR},
</if>
<if test="certificateTitle != null" >
certificate_title = #{certificateTitle,jdbcType=VARCHAR},
</if>
<if test="certificateUser != null" >
certificate_user = #{certificateUser,jdbcType=VARCHAR},
</if>
<if test="certificateBaseUrl != null" >
certificate_base_url = #{certificateBaseUrl,jdbcType=VARCHAR},
</if>
<if test="createTime != null" >
create_time = #{createTime,jdbcType=TIMESTAMP},
</if>
</set>
where id = #{id,jdbcType=INTEGER}
</update>
<update id="updateByPrimaryKey" parameterType="com.pcloud.book.timecontrol.entity.TimeControlPrizeItem" >
update time_control_task_prize_item
set task_id = #{taskId,jdbcType=INTEGER},
task_item_id = #{taskItemId,jdbcType=INTEGER},
prize_id = #{prizeId,jdbcType=INTEGER},
prize_type = #{prizeType,jdbcType=INTEGER},
coupon_url = #{couponUrl,jdbcType=VARCHAR},
coupon_title = #{couponTitle,jdbcType=VARCHAR},
content = #{content,jdbcType=VARCHAR},
pic_url = #{picUrl,jdbcType=VARCHAR},
serve_id = #{serveId,jdbcType=INTEGER},
serve_type = #{serveType,jdbcType=VARCHAR},
link_url = #{linkUrl,jdbcType=VARCHAR},
description = #{description,jdbcType=VARCHAR},
certificate_title = #{certificateTitle,jdbcType=VARCHAR},
certificate_user = #{certificateUser,jdbcType=VARCHAR},
certificate_base_url = #{certificateBaseUrl,jdbcType=VARCHAR},
create_time = #{createTime,jdbcType=TIMESTAMP}
where id = #{id,jdbcType=INTEGER}
</update>
<insert id="batchInsert" parameterType="com.pcloud.book.timecontrol.entity.TimeControlPrizeItem">
insert into time_control_task_prize_item (task_id, task_item_id,
prize_id, prize_type, coupon_url,
coupon_title, content, pic_url,
serve_id, serve_type, link_url,
description, certificate_title, certificate_user,
certificate_base_url, create_time)
values
<foreach collection="prizeItemList" separator="," item="item">
(#{item.taskId}, #{item.taskItemId}, #{item.prizeId}, #{item.prizeType}, #{item.couponUrl}, #{item.couponTitle},
#{item.content}, #{item.picUrl}, #{item.serveId}, #{item.serveType}, #{item.linkUrl}, #{item.description},
#{item.certificateTitle}, #{item.certificateUser}, #{item.certificateBaseUrl}, now())
</foreach>
</insert>
<select id="listByPrizeId" parameterType="int" resultMap="BaseResultMap">
select <include refid="Base_Column_List"/>
from time_control_task_prize_item where prize_id = #{prizeId}
</select>
<delete id="deleteByTaskItemId" parameterType="map">
delete from time_control_task_prize_item where task_item_id = #{taskItemId}
<if test="deleteTypes != null and deleteTypes.size > 0">
and prize_type in
<foreach collection="deleteTypes" item="item" open="(" close=")" separator=",">
#{item}
</foreach>
</if>
</delete>
</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.timecontrol.mapper.TaskPrizeMapper" >
<resultMap id="BaseResultMap" type="com.pcloud.book.timecontrol.entity.TimeControlTaskPrize" >
<id column="id" property="id" jdbcType="INTEGER" />
<result column="task_id" property="taskId" jdbcType="INTEGER" />
<result column="task_item_id" property="taskItemId" jdbcType="INTEGER" />
<result column="type" property="type" jdbcType="INTEGER" />
<result column="total_prize_num" property="totalPrizeNum" jdbcType="INTEGER" />
<result column="has_coupon" property="hasCoupon" jdbcType="INTEGER" />
<result column="has_app" property="hasApp" jdbcType="INTEGER" />
<result column="has_certificate" property="hasCertificate" jdbcType="INTEGER" />
<result column="create_time" property="createTime" jdbcType="TIMESTAMP" />
<result column="update_time" property="updateTime" jdbcType="TIMESTAMP" />
</resultMap>
<sql id="Base_Column_List" >
id, task_id, task_item_id, type, total_prize_num, has_coupon, has_app, has_certificate, create_time, update_time
</sql>
<select id="selectByPrimaryKey" resultMap="BaseResultMap" parameterType="java.lang.Integer" >
select
<include refid="Base_Column_List" />
from time_control_task_prize
where id = #{id,jdbcType=INTEGER}
</select>
<select id="getByTaskId" resultMap="BaseResultMap" parameterType="java.lang.Integer" >
select
<include refid="Base_Column_List" />
from time_control_task_prize
where task_id = #{taskId,jdbcType=INTEGER} AND type = #{type,jdbcType=INTEGER}
</select>
<delete id="deleteByPrimaryKey" parameterType="java.lang.Integer" >
delete from time_control_task_prize
where id = #{id,jdbcType=INTEGER}
</delete>
<delete id="deleteByTaskId">
delete from time_control_task_prize
where task_id = #{taskId,jdbcType=INTEGER} AND type = #{type,jdbcType=INTEGER}
</delete>
<delete id="deleteByTaskItemId" parameterType="int">
delete from time_control_task_prize
where task_item_id = #{taskItemId}
</delete>
<insert id="insert" parameterType="com.pcloud.book.timecontrol.entity.TimeControlTaskPrize" useGeneratedKeys="true" keyProperty="id" >
insert into time_control_task_prize (task_id, task_item_id,
type, total_prize_num, has_coupon,
has_app, has_certificate, create_time,update_time)
values (#{taskId,jdbcType=INTEGER}, #{taskItemId,jdbcType=INTEGER},
#{type,jdbcType=INTEGER}, #{totalPrizeNum,jdbcType=INTEGER}, #{hasCoupon,jdbcType=INTEGER},
#{hasApp,jdbcType=INTEGER}, #{hasCertificate,jdbcType=INTEGER}, NOW(),NOW())
</insert>
<insert id="insertSelective" parameterType="com.pcloud.book.timecontrol.entity.TimeControlTaskPrize" >
insert into time_control_task_prize
<trim prefix="(" suffix=")" suffixOverrides="," >
<if test="id != null" >
id,
</if>
<if test="taskId != null" >
task_id,
</if>
<if test="taskItemId != null" >
task_item_id,
</if>
<if test="type != null" >
type,
</if>
<if test="totalPrizeNum != null" >
total_prize_num,
</if>
<if test="hasCoupon != null" >
has_coupon,
</if>
<if test="hasApp != null" >
has_app,
</if>
<if test="hasCertificate != null" >
has_certificate,
</if>
<if test="createTime != null" >
create_time,
</if>
<if test="updateTime != null" >
update_time,
</if>
</trim>
<trim prefix="values (" suffix=")" suffixOverrides="," >
<if test="id != null" >
#{id,jdbcType=INTEGER},
</if>
<if test="taskId != null" >
#{taskId,jdbcType=INTEGER},
</if>
<if test="taskItemId != null" >
#{taskItemId,jdbcType=INTEGER},
</if>
<if test="type != null" >
#{type,jdbcType=INTEGER},
</if>
<if test="totalPrizeNum != null" >
#{totalPrizeNum,jdbcType=INTEGER},
</if>
<if test="hasCoupon != null" >
#{hasCoupon,jdbcType=INTEGER},
</if>
<if test="hasApp != null" >
#{hasApp,jdbcType=INTEGER},
</if>
<if test="hasCertificate != null" >
#{hasCertificate,jdbcType=INTEGER},
</if>
<if test="createTime != null" >
#{createTime,jdbcType=TIMESTAMP},
</if>
<if test="updateTime != null" >
#{updateTime,jdbcType=TIMESTAMP},
</if>
</trim>
</insert>
<update id="updateByPrimaryKeySelective" parameterType="com.pcloud.book.timecontrol.entity.TimeControlTaskPrize" >
update time_control_task_prize
<set >
<if test="taskId != null" >
task_id = #{taskId,jdbcType=INTEGER},
</if>
<if test="taskItemId != null" >
task_item_id = #{taskItemId,jdbcType=INTEGER},
</if>
<if test="type != null" >
type = #{type,jdbcType=INTEGER},
</if>
<if test="totalPrizeNum != null" >
total_prize_num = #{totalPrizeNum,jdbcType=INTEGER},
</if>
<if test="hasCoupon != null" >
has_coupon = #{hasCoupon,jdbcType=INTEGER},
</if>
<if test="hasApp != null" >
has_app = #{hasApp,jdbcType=INTEGER},
</if>
<if test="hasCertificate != null" >
has_certificate = #{hasCertificate,jdbcType=INTEGER},
</if>
<if test="createTime != null" >
create_time = #{createTime,jdbcType=TIMESTAMP},
</if>
<if test="updateTime != null" >
update_time = #{updateTime,jdbcType=TIMESTAMP},
</if>
</set>
where id = #{id,jdbcType=INTEGER}
</update>
<update id="updateByPrimaryKey" parameterType="com.pcloud.book.timecontrol.entity.TimeControlTaskPrize" >
update time_control_task_prize
set task_id = #{taskId,jdbcType=INTEGER},
task_item_id = #{taskItemId,jdbcType=INTEGER},
type = #{type,jdbcType=INTEGER},
total_prize_num = #{totalPrizeNum,jdbcType=INTEGER},
has_coupon = #{hasCoupon,jdbcType=INTEGER},
has_app = #{hasApp,jdbcType=INTEGER},
has_certificate = #{hasCertificate,jdbcType=INTEGER},
create_time = #{createTime,jdbcType=TIMESTAMP},
update_time = #{updateTime,jdbcType=TIMESTAMP}
where id = #{id,jdbcType=INTEGER}
</update>
<update id="update"></update>
<select id="selectByTaskItemId" parameterType="int" resultMap="BaseResultMap">
select <include refid="Base_Column_List"/>
from time_control_task_prize where task_item_id = #{taskItemId}
</select>
<select id="getConfigItemId" resultType="Integer">
select task_item_id
from time_control_task_prize
where 1=1
<if test="taskItemIds!=null and taskItemIds.size()>0">
and task_item_id in
<foreach collection="taskItemIds" open="(" close=")" separator="," item="item">
#{item}
</foreach>
</if>
</select>
<select id="getAllCloseItemId" resultType="Integer">
select DISTINCT task_item_id
from time_control_task_prize
where 1=1
<if test="taskItemIds!=null and taskItemIds.size()>0">
and task_item_id in
<foreach collection="taskItemIds" open="(" close=")" separator="," item="item">
#{item}
</foreach>
</if>
and has_coupon=0 and has_app=0 and has_certificate=0
</select>
<select id="getByTaskItemId" resultMap="BaseResultMap" parameterType="java.lang.Integer" >
select
<include refid="Base_Column_List" />
from time_control_task_prize
where task_item_id = #{taskItemId} AND type = 1
</select>
<select id="getByType" resultMap="BaseResultMap" parameterType="java.lang.Integer" >
select
<include refid="Base_Column_List" />
from time_control_task_prize
where type = #{type}
<if test="type == 0">
and task_id = #{id}
</if>
<if test="type == 1">
and task_item_id = #{id}
</if>
</select>
</mapper>
\ No newline at end of file
......@@ -57,7 +57,8 @@
</select>
<select id="listTaskItemDay" resultType="com.pcloud.book.timecontrol.dto.ReplyMessageBaseDto">
select id, task_id taskId, start_day startDay, send_hour sendHour
select id, task_id taskId, start_day startDay, send_hour sendHour,
if(finish_confirm=0,0,2) configState
from time_control_task_item where task_id = #{taskId}
order by startDay asc, send_hour asc
</select>
......
......@@ -11,10 +11,12 @@
<result column="send_state" property="sendState" jdbcType="INTEGER" />
<result column="create_time" property="createTime" jdbcType="TIMESTAMP" />
<result column="send_day" property="sendDay" jdbcType="TIMESTAMP" />
<result column="working" property="working" jdbcType="INTEGER" />
<result column="complete_state" property="completeState" jdbcType="INTEGER" />
</resultMap>
<sql id="Base_Column_List">
id, wx_user_id, book_id, task_id, task_item_id, subscribe_id, send_day, send_state, create_time
id, wx_user_id, book_id, task_id, task_item_id, subscribe_id, send_day, send_state, create_time, complete_state
</sql>
<insert id="batchInsert" parameterType="com.pcloud.book.timecontrol.entity.TimeControlTaskSend" useGeneratedKeys="true" keyProperty="id">
......@@ -79,7 +81,7 @@
</update>
<select id="getById" resultMap="BaseResultMap">
select id, wx_user_id, book_id, task_id, task_item_id, subscribe_id, send_day, send_state
select id, wx_user_id, book_id, task_id, task_item_id, subscribe_id, send_day, send_state, working, complete_state
from time_control_task_send
where id = #{taskSendId}
</select>
......@@ -229,4 +231,11 @@
WHERE subscribe_id =#{subscribeId}
and complete_state !=1 AND send_state !=2
</select>
<select id="getCompletedCount" resultType="java.lang.Integer">
select ifnull(count(1),0)
from time_control_task_send
WHERE subscribe_id =#{subscribeId}
and working =1 and complete_state = 1
</select>
</mapper>
\ No newline at end of file
......@@ -23,12 +23,12 @@
</update>
<update id="unSubscribeTask">
UPDATE time_control_task_subscribe set state = #{state}, update_time = now()
UPDATE time_control_task_subscribe set state = #{state}, update_time = now(), working = 0
where id = #{id}
</update>
<update id="unSubscribeTaskByTaskId">
UPDATE time_control_task_subscribe set state = 0, update_time = now()
UPDATE time_control_task_subscribe set state = 0, update_time = now(), working = 0
where task_id = #{taskId}
</update>
......@@ -50,7 +50,7 @@
</select>
<select id="getById" resultMap="BaseResultMap">
select wx_user_id, book_id, task_id, state, create_time, update_time, robot_wx_id
select wx_user_id, book_id, task_id, state, create_time, update_time, robot_wx_id, id
from time_control_task_subscribe WHERE id = #{subscribeId}
</select>
......
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