From c8a8b556432849bda331f300d659e5f7055d67b2 Mon Sep 17 00:00:00 2001 From: xiaoyong931011 <15274802129@163.com> Date: Wed, 28 Apr 2021 15:15:17 +0800 Subject: [PATCH] 20210428 抽奖 --- zq-erp/src/main/resources/mybatis/mapper/activity/ActivitySignRecordDao.xml | 11 zq-erp/src/main/java/com/matrix/system/shopXcx/api/vo/LuckyDrawInfoVo.java | 44 zq-erp/src/main/resources/templates/views/admin/activity/activity-luckyDraw.html | 1034 ++++++++++++++++ zq-erp/src/main/java/com/matrix/system/activity/dto/LuckyDrawForUpdateDto.java | 17 zq-erp/src/main/resources/templates/views/admin/activity/activity-luckyDraw-update.html | 1123 ++++++++++++++++++ zq-erp/src/main/java/com/matrix/system/activity/dao/ActivitySignAwardSetDao.java | 6 zq-erp/src/main/java/com/matrix/system/activity/dto/LuckyDrawBasicJsonDto.java | 53 zq-erp/src/main/java/com/matrix/system/activity/dto/AddLuckyDrawSetDto.java | 28 zq-erp/src/main/java/com/matrix/system/activity/service/ActivitySignAwardSetService.java | 7 zq-erp/src/main/java/com/matrix/system/activity/vo/LuckyDrawBasicJsonVo.java | 51 zq-erp/src/main/java/com/matrix/system/shopXcx/api/vo/LuckyDrawSuccessVo.java | 150 ++ zq-erp/src/main/resources/templates/views/admin/activity/activity-market.html | 36 zq-erp/src/main/java/com/matrix/system/activity/action/ActivitySignAwardSetAction.java | 356 +++++ zq-erp/src/main/java/com/matrix/system/shopXcx/api/action/WxShopActivitiesLuckydrawAction.java | 542 ++++++++ zq-erp/src/main/java/com/matrix/system/activity/dto/UpdateLuckyDrawSetDto.java | 34 zq-erp/src/main/java/com/matrix/system/activity/dao/ActivitySignRecordDao.java | 3 zq-erp/src/main/java/com/matrix/system/shopXcx/api/vo/LuckyDrawBasicInfoJsonVo.java | 60 zq-erp/src/main/resources/templates/views/admin/activity/activity-list.html | 32 zq-erp/src/main/java/com/matrix/system/activity/vo/LuckyDrawAwardCodeListVo.java | 57 zq-erp/src/main/java/com/matrix/system/shopXcx/bean/ShopActivities.java | 6 zq-erp/src/main/java/com/matrix/system/activity/dto/UpdateSignAwardSetDto.java | 12 zq-erp/src/main/resources/mybatis/mapper/activity/ActivitySignAwardSetDao.xml | 24 zq-erp/src/main/java/com/matrix/system/activity/vo/AddLuckyDrawSetVo.java | 34 23 files changed, 3,695 insertions(+), 25 deletions(-) diff --git a/zq-erp/src/main/java/com/matrix/system/activity/action/ActivitySignAwardSetAction.java b/zq-erp/src/main/java/com/matrix/system/activity/action/ActivitySignAwardSetAction.java index c22744d..6caec1a 100644 --- a/zq-erp/src/main/java/com/matrix/system/activity/action/ActivitySignAwardSetAction.java +++ b/zq-erp/src/main/java/com/matrix/system/activity/action/ActivitySignAwardSetAction.java @@ -1,18 +1,19 @@ package com.matrix.system.activity.action; import cn.hutool.core.collection.CollUtil; +import cn.hutool.core.util.ObjectUtil; +import com.alibaba.fastjson.JSON; import com.baomidou.mybatisplus.core.metadata.IPage; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.matrix.core.constance.MatrixConstance; import com.matrix.core.pojo.AjaxResult; import com.matrix.core.tools.StringUtils; import com.matrix.core.tools.WebUtil; +import com.matrix.system.activity.dao.ActivitySignAwardSetDao; import com.matrix.system.activity.dto.*; +import com.matrix.system.activity.entity.ActivitySignAwardSet; import com.matrix.system.activity.service.ActivitySignAwardSetService; -import com.matrix.system.activity.vo.ActivitiesListVo; -import com.matrix.system.activity.vo.CouponVo; -import com.matrix.system.activity.vo.GoodsVo; -import com.matrix.system.activity.vo.SignReceiveListVo; +import com.matrix.system.activity.vo.*; import com.matrix.system.common.bean.SysUsers; import com.matrix.system.hive.action.util.QueryUtil; import com.matrix.system.shopXcx.bean.ShopActivities; @@ -23,7 +24,7 @@ import org.springframework.beans.factory.annotation.Autowired; import org.springframework.web.bind.annotation.*; -import java.util.List; +import java.util.*; /** * @description 奖品设置表 @@ -38,6 +39,351 @@ private ActivitySignAwardSetService activitySignAwardSetService; @Autowired private ShopActivitiesDao shopActivitiesDao; + @Autowired + private ActivitySignAwardSetDao activitySignAwardSetDao; + + /** + * 马上创建转盘抽奖 + */ + @PostMapping(value = "/createLuckyDrawSet") + public @ResponseBody + AjaxResult createLuckyDrawSet() { + //获取当前登录人员信息 + SysUsers user = WebUtil.getSessionAttribute(MatrixConstance.LOGIN_KEY); + Long companyId = user.getCompanyId(); + //签到活动的唯一性 + List<ShopActivities> shopActivitiesDone = shopActivitiesDao.selectOneByCompanyIdAndActType(companyId,ShopActivities.ACTIVITIES_TYPE_LUCKYDRAW); + if(CollUtil.isNotEmpty(shopActivitiesDone)){ + return new AjaxResult(AjaxResult.STATUS_FAIL, "转盘抽奖已经创建,请去活动管理菜单查看"); + } + return new AjaxResult(AjaxResult.STATUS_SUCCESS, ""); + } + + /** + * 新增转盘抽奖 + */ + @PostMapping(value = "/addLuckyDrawSet") + public @ResponseBody + AjaxResult addLuckyDrawSet(@RequestBody AddLuckyDrawSetDto addLuckyDrawSetDto) { + //获取当前登录人员信息 + SysUsers user = WebUtil.getSessionAttribute(MatrixConstance.LOGIN_KEY); + Long companyId = user.getCompanyId(); + //转盘抽奖活动的唯一性 + List<ShopActivities> shopActivitiesDone = shopActivitiesDao.selectOneByCompanyIdAndActType(companyId,ShopActivities.ACTIVITIES_TYPE_LUCKYDRAW); + if(CollUtil.isNotEmpty(shopActivitiesDone)){ + return new AjaxResult(AjaxResult.STATUS_FAIL, "转盘抽奖只能创建一次"); + } + + //新增活动主表信息 + ShopActivities shopActivities = new ShopActivities(); + shopActivities.setActName(addLuckyDrawSetDto.getActName()); + shopActivities.setActCode(addLuckyDrawSetDto.getActCode()); + shopActivities.setIsStart(ShopActivities.ACTIVITIES_STATUS_CLOSE); + shopActivities.setActType(ShopActivities.ACTIVITIES_TYPE_LUCKYDRAW); + shopActivities.setActStatus(ShopActivities.ACTSTATUS_STATUS_RELEASE); + shopActivities.setActBeginTime(addLuckyDrawSetDto.getBeginTime()); + shopActivities.setActEndTime(addLuckyDrawSetDto.getEndTime()); + shopActivities.setCompanyId(companyId); + shopActivities.setCreateBy(user.getSuName()); + shopActivities.setUpdateBy(user.getSuName()); + //将基本信息转换成JSON字符串存储到活动主表的act_content字段 + LuckyDrawBasicJsonDto luckyDrawBasicJsonDto = addLuckyDrawSetDto.getLuckyDrawBasicJsonDto(); + String json= JSON.toJSONString(luckyDrawBasicJsonDto); + shopActivities.setActContent(json); + int insert = shopActivitiesDao.insert(shopActivities); + if(insert > 0){ + //新增活动奖品信息 + List<ActivitySignAwardSet> activitySignAwardSets = addLuckyDrawSetDto.getLuckyDrawAwardSets(); + if(CollUtil.isNotEmpty(activitySignAwardSets)) { + for(ActivitySignAwardSet activitySignAwardSet : activitySignAwardSets) { + activitySignAwardSet.setCreateBy(user.getSuName()); + activitySignAwardSet.setCreateTime(new Date()); + activitySignAwardSet.setUpdateTime(new Date()); + activitySignAwardSet.setUpdateBy(user.getSuName()); + activitySignAwardSet.setCompanyId(companyId); + activitySignAwardSet.setActivityId(shopActivities.getId()); + activitySignAwardSet.setAwardState(ActivitySignAwardSet.AWARDSTATE_WORK); + activitySignAwardSetDao.insert(activitySignAwardSet); + } + //生成中奖顺序 + + Long actId = shopActivities.getId(); + List<ActivitySignAwardSet> activitySignAwardSetList = activitySignAwardSetDao + .selectActivitySignAwardSetByActIDAndCompanyIdAndAwardType(actId, companyId, ActivitySignAwardSet.AWARDSTATE_WORK,ActivitySignAwardSet.AWARDRULE_CUMULATIVEDAY); + if(CollUtil.isNotEmpty(activitySignAwardSetList)){ + String awrdList = getAwrdList(activitySignAwardSets).toString(); + ShopActivities shopActivitiesAward = shopActivitiesDao.selectById(actId); + String actContent = shopActivitiesAward.getActContent(); + LuckyDrawAwardCodeListVo luckyDrawAwardCodeListVo = JSON.parseObject(actContent, LuckyDrawAwardCodeListVo.class); + luckyDrawAwardCodeListVo.setAwardLine(awrdList); + luckyDrawAwardCodeListVo.setAwrdLineIndex(0); + String awardJson= JSON.toJSONString(luckyDrawAwardCodeListVo); + shopActivitiesAward.setActContent(awardJson); + shopActivitiesDao.updateByModel(shopActivitiesAward); + } + } + }else{ + return new AjaxResult(AjaxResult.STATUS_FAIL, "保存失败"); + } + return new AjaxResult(AjaxResult.STATUS_SUCCESS, "保存成功"); + } + + //所有奖品ID后的集合 + public List getAwrdList(List<ActivitySignAwardSet> activitySignAwardSets){ + //插入所有奖品ID后的集合 + LinkedList awardIdFinalList = new LinkedList<>(); + if(CollUtil.isNotEmpty(activitySignAwardSets)){ + //总数 + int maxCount = 0; + HashMap<Long, ActivitySignAwardSet> integerStringHashMap = new HashMap<>(); + for(ActivitySignAwardSet activitySignAwardSet : activitySignAwardSets){ + //总共派发数量 + int awardInventoryCnt = activitySignAwardSet.getAwardInventoryCnt(); + integerStringHashMap.put(activitySignAwardSet.getId(),activitySignAwardSet); + maxCount = maxCount + awardInventoryCnt; + } + HashMap<Long, ActivitySignAwardSet> sortHashMap = sortHashMap(integerStringHashMap,2); + HashMap<Long, ActivitySignAwardSet> sortHashMapAec = sortHashMap(integerStringHashMap,1); + //获取奖品最多的ID + Long maxAwardIds = sortHashMap.keySet().stream().findFirst().get(); + Long minAwardIds = sortHashMapAec.keySet().stream().findFirst().get(); + //获取最大长度的奖品集合 + List awardIdList = new LinkedList<Long>(); + for(int i = 0; i< maxCount ; i++){ + awardIdList.add(maxAwardIds); + } + + Iterator<Map.Entry<Long, ActivitySignAwardSet>> entries = sortHashMap.entrySet().iterator(); + //插入奖品 + while (entries.hasNext()) { + Map.Entry<Long, ActivitySignAwardSet> entry = entries.next(); + ActivitySignAwardSet activitySignAwardSetDone = entry.getValue(); + int awardInventoryCnt = activitySignAwardSetDone.getAwardInventoryCnt(); + Long awardIdNew = entry.getKey(); + if(awardIdNew != maxAwardIds){ + //分段之后的List + List splitLists = getSplitList(awardInventoryCnt, awardIdList); + for(int j = 0; j<awardInventoryCnt; j++){ + List splitList = (List) splitLists.get(j); + //中间插入对应的奖品ID,如果和maxAwardIds相同,则索引+1 + List<Long> listInsert = getListInsert(maxAwardIds, awardIdNew, splitList); + if(minAwardIds == awardIdNew){ + awardIdFinalList.addAll(listInsert); + } + } + } + } + } + return awardIdFinalList; + } + + //中间插入对应的奖品ID,如果和maxAwardIds相同,则索引+1 + public static List<Long> getListInsert(Long awardOld,Long awardNew,List splitList){ + //中间位置索引 + LinkedList<Integer> indexs = new LinkedList<>(); + int groupFlag = splitList.size() % 2 == 0 ? (splitList.size() / 2) : (splitList.size() / 2 + 1); + for(int j = groupFlag-1; j < splitList.size();j++){ + if(splitList.get(j) == awardOld){ + indexs.add(j); + } + } + if(CollUtil.isNotEmpty(indexs)){ + splitList.set(indexs.get(0),awardNew); + }else{ + splitList.add(groupFlag,awardNew); + } + return splitList; + } + + //等份平分数组,最后剩余的添加到倒数第二个集合中 + public static List<List<Long>> getSplitList(int splitNum, List<Long> list) { + LinkedList<List<Long>> splitList = new LinkedList<>(); + // groupFlag >= 1 + int groupFlag = list.size() % splitNum == 0 ? (list.size() / splitNum) : (list.size() / splitNum); + if(groupFlag * splitNum < list.size()){ + for (int j = 1; j <= splitNum +1; j++) { + if ((j * groupFlag) <= list.size() ) { + splitList.add(list.subList(j * groupFlag - groupFlag, j * groupFlag)); + } else if ((j * groupFlag) > list.size()) { + splitList.add(list.subList(j * groupFlag - groupFlag, list.size())); + } + } + }else if(groupFlag * splitNum > list.size()){ + for (int j = 1; j < splitNum; j++) { + if ((j * groupFlag) <= list.size() ) { + splitList.add(list.subList(j * groupFlag - groupFlag, j * groupFlag)); + } else if ((j * groupFlag) > list.size()) { + splitList.add(list.subList(j * groupFlag - groupFlag, list.size())); + } + } + }else{ + for (int j = 1; j <= splitNum; j++) { + if ((j * groupFlag) <= list.size() ) { + splitList.add(list.subList(j * groupFlag - groupFlag, j * groupFlag)); + } else if ((j * groupFlag) > list.size()) { + splitList.add(list.subList(j * groupFlag - groupFlag, list.size())); + } + } + } + return splitList; + } + + + //对于奖品排序 1:升序进行排,2是倒序就是o2-o1 + public static HashMap<Long, ActivitySignAwardSet> sortHashMap(HashMap<Long, ActivitySignAwardSet> map,int type) { + // 首先拿到 map 的键值对集合 + Set<Map.Entry<Long, ActivitySignAwardSet>> entrySet = map.entrySet(); + // 将 set 集合转为 List 集合,为什么,为了使用工具类的排序方法 + List<Map.Entry<Long, ActivitySignAwardSet>> list = new ArrayList<Map.Entry<Long, ActivitySignAwardSet>>(entrySet); + // 使用 Collections 集合工具类对 list 进行排序,排序规则使用匿名内部类来实现 + Collections.sort(list, new Comparator<Map.Entry<Long, ActivitySignAwardSet>>() { + @Override + public int compare(Map.Entry<Long, ActivitySignAwardSet> o1, Map.Entry<Long, ActivitySignAwardSet> o2) { + if(type == 2){ + //按照要求根据 升序进行排,如果是倒序就是o2-o1 + return o2.getValue().getAwardInventoryCnt() - o1.getValue().getAwardInventoryCnt(); + } + return o1.getValue().getAwardInventoryCnt() - o2.getValue().getAwardInventoryCnt(); + } + }); + //创建一个新的有序的 HashMap 子类的集合 + LinkedHashMap<Long, ActivitySignAwardSet> linkedHashMap = new LinkedHashMap<Long, ActivitySignAwardSet>(); + //将 List 中的数据存储在 LinkedHashMap 中 + for (Map.Entry<Long, ActivitySignAwardSet> entry : list) { + linkedHashMap.put(entry.getKey(), entry.getValue()); + } + //返回结果 + return linkedHashMap; + } + + /** + *进入修改 + */ + @ApiOperation(value = "进入修改") + @PostMapping(value = "/findLuckyDrawForUpdate") + public @ResponseBody + AjaxResult findLuckyDrawForUpdate(@RequestBody LuckyDrawForUpdateDto luckyDrawForUpdateDto) { + //设置用户公司ID + QueryUtil.setQueryLimitCom(luckyDrawForUpdateDto); + Long actId = luckyDrawForUpdateDto.getActId(); + AjaxResult result= AjaxResult.buildSuccessInstance("查询成功"); + //获取对应的活动主表信息和对应的奖品设置信息 + AddLuckyDrawSetVo addLuckyDrawSetVo = new AddLuckyDrawSetVo(); + ShopActivities shopActivity = shopActivitiesDao.selectById(actId); + if(ObjectUtil.isNotEmpty(shopActivity)) { + addLuckyDrawSetVo.setId(actId); + addLuckyDrawSetVo.setActName(shopActivity.getActName()); + addLuckyDrawSetVo.setActCode(shopActivity.getActCode()); + addLuckyDrawSetVo.setBeginTime(shopActivity.getActBeginTime()); + addLuckyDrawSetVo.setEndTime(shopActivity.getActEndTime()); + + String actContent = shopActivity.getActContent(); + LuckyDrawBasicJsonVo luckyDrawBasicJsonVo = JSON.parseObject(actContent, LuckyDrawBasicJsonVo.class); + addLuckyDrawSetVo.setLuckyDrawBasicJsonVo(luckyDrawBasicJsonVo); + + Map<String, Object> columnMap = new HashMap<String, Object>(); + columnMap.put("activity_id", actId); + columnMap.put("company_id", luckyDrawForUpdateDto.getCompanyId()); + List<ActivitySignAwardSet> activityAwardSets = activitySignAwardSetDao.selectByMap(columnMap); + addLuckyDrawSetVo.setActivityluckyDrawSets(activityAwardSets); + } + result.putInMap("addLuckyDrawSetVo", addLuckyDrawSetVo); + return result; + } + /** + * 保存 + */ + @PostMapping(value = "/updateLuckyDrawSet") + public @ResponseBody + AjaxResult updateLuckyDrawSet(@RequestBody UpdateLuckyDrawSetDto updateLuckyDrawSetDto) { + //获取当前登录人员信息 + QueryUtil.setQueryLimitCom(updateLuckyDrawSetDto); + SysUsers user = WebUtil.getSessionAttribute(MatrixConstance.LOGIN_KEY); + Long actId = updateLuckyDrawSetDto.getActMainId(); + Long companyId = user.getCompanyId(); + ShopActivities shopActivity = shopActivitiesDao.selectById(actId); + //更新活动主表信息 + shopActivity.setActName(updateLuckyDrawSetDto.getActName()); + shopActivity.setActCode(updateLuckyDrawSetDto.getActCode()); + shopActivity.setActBeginTime(updateLuckyDrawSetDto.getBeginTime()); + shopActivity.setActEndTime(updateLuckyDrawSetDto.getEndTime()); + shopActivity.setCompanyId(companyId); + shopActivity.setCreateBy(user.getSuName()); + shopActivity.setUpdateBy(user.getSuName()); + //将基本信息转换成JSON字符串存储到活动主表的act_content字段 + LuckyDrawBasicJsonDto luckyDrawBasicJsonDto = updateLuckyDrawSetDto.getLuckyDrawBasicJsonDto(); + String json=JSON.toJSONString(luckyDrawBasicJsonDto); + shopActivity.setActContent(json); + shopActivitiesDao.updateByModel(shopActivity); + /** + * 比较两个奖品名单,多的新增,减少的更新为已失效,不变的更新 + */ + //原有的奖品 + ArrayList<Long> arrayListOld = new ArrayList<>(); + Map<String, Object> columnMap = new HashMap<String, Object>(); + columnMap.put("activity_id", actId); + columnMap.put("company_id", updateLuckyDrawSetDto.getCompanyId()); + List<ActivitySignAwardSet> activitySignAwardSetOld = activitySignAwardSetDao.selectByMap(columnMap); + if(CollUtil.isNotEmpty(activitySignAwardSetOld)) { + for(ActivitySignAwardSet activitySignAwardSetUpdate : activitySignAwardSetOld) { + Long actSubid = activitySignAwardSetUpdate.getId(); + arrayListOld.add(actSubid); + } + } + //修改后的奖品 + List<ActivitySignAwardSet> activitySignAwardSetsUpdate = updateLuckyDrawSetDto.getActivityAwardSets(); + ArrayList<Long> arrayListUpdate = new ArrayList<>(); + if(CollUtil.isNotEmpty(activitySignAwardSetsUpdate)) { + for(ActivitySignAwardSet activitySignAwardSetUpdate : activitySignAwardSetsUpdate) { + Long actSubid = activitySignAwardSetUpdate.getId(); + //如果ID为空则新增,不为空则修改 + if(ObjectUtil.isEmpty(actSubid)) { + activitySignAwardSetUpdate.setCreateBy(user.getSuName()); + activitySignAwardSetUpdate.setCreateTime(new Date()); + activitySignAwardSetUpdate.setUpdateTime(new Date()); + activitySignAwardSetUpdate.setUpdateBy(user.getSuName()); + activitySignAwardSetUpdate.setCompanyId(companyId); + activitySignAwardSetUpdate.setActivityId(actId); + activitySignAwardSetUpdate.setAwardState(ActivitySignAwardSet.AWARDSTATE_WORK); + activitySignAwardSetDao.insert(activitySignAwardSetUpdate); + }else { + activitySignAwardSetUpdate.setAwardState(ActivitySignAwardSet.AWARDSTATE_WORK); + activitySignAwardSetDao.updateById(activitySignAwardSetUpdate); + arrayListUpdate.add(actSubid); + } + } + } + //比较获取原来的比现在多出来的奖品,修改状态为失效 + boolean removeAll = arrayListOld.removeAll(arrayListUpdate); + if(removeAll && CollUtil.isNotEmpty(arrayListOld)) { + for(long id : arrayListOld) { + ActivitySignAwardSet activitySignAwardSetDel = activitySignAwardSetDao.selectById(id); + activitySignAwardSetDel.setAwardState(ActivitySignAwardSet.AWARDSTATE_UNWORK); + activitySignAwardSetDao.updateById(activitySignAwardSetDel); + } + } + + //生成中奖顺序 + List<ActivitySignAwardSet> activitySignAwardSetList = activitySignAwardSetDao + .selectActivitySignAwardSetByActIDAndCompanyIdAndAwardType(actId, companyId, ActivitySignAwardSet.AWARDSTATE_WORK,ActivitySignAwardSet.AWARDRULE_CUMULATIVEDAY); + if(CollUtil.isNotEmpty(activitySignAwardSetList)){ + String awrdList = getAwrdList(activitySignAwardSetList).toString(); + ShopActivities shopActivitiesAward = shopActivitiesDao.selectById(actId); + String actContent = shopActivitiesAward.getActContent(); + LuckyDrawAwardCodeListVo luckyDrawAwardCodeListVo = JSON.parseObject(actContent, LuckyDrawAwardCodeListVo.class); + luckyDrawAwardCodeListVo.setAwardLine(awrdList); + luckyDrawAwardCodeListVo.setAwrdLineIndex(0); + String awardJson= JSON.toJSONString(luckyDrawAwardCodeListVo); + shopActivitiesAward.setActContent(awardJson); + shopActivitiesDao.updateByModel(shopActivitiesAward); + } + return new AjaxResult(AjaxResult.STATUS_SUCCESS, "保存成功"); + } + + public IPage<ActivitiesListVo> findActivitiesList(Page<ActivitiesListVo> page, + ActivitiesListDto activitiesListDto) { + return shopActivitiesDao.findActivitiesList(page,activitiesListDto); + } /** * 马上创建签到活动 diff --git a/zq-erp/src/main/java/com/matrix/system/activity/dao/ActivitySignAwardSetDao.java b/zq-erp/src/main/java/com/matrix/system/activity/dao/ActivitySignAwardSetDao.java index bff7cc7..1061314 100644 --- a/zq-erp/src/main/java/com/matrix/system/activity/dao/ActivitySignAwardSetDao.java +++ b/zq-erp/src/main/java/com/matrix/system/activity/dao/ActivitySignAwardSetDao.java @@ -17,4 +17,10 @@ List<ActivitySignAwardSetVo> selectListByActIDAndCompanyId(@Param("actId")Long actId, @Param("companyId")Long companyId,@Param("awardState")int awardstateWork); + List<ActivitySignAwardSetVo> selectListByActIDAndCompanyIdAndAwardType(@Param("actId")Long actId, @Param("companyId")Long companyId + ,@Param("awardState")int awardstateWork,@Param("awardRule")int awardRule); + + List<ActivitySignAwardSet> selectActivitySignAwardSetByActIDAndCompanyIdAndAwardType(@Param("actId")Long actId, @Param("companyId")Long companyId + ,@Param("awardState")int awardstateWork,@Param("awardRule")int awardRule); + } \ No newline at end of file diff --git a/zq-erp/src/main/java/com/matrix/system/activity/dao/ActivitySignRecordDao.java b/zq-erp/src/main/java/com/matrix/system/activity/dao/ActivitySignRecordDao.java index 41a6db3..b7c5eb1 100644 --- a/zq-erp/src/main/java/com/matrix/system/activity/dao/ActivitySignRecordDao.java +++ b/zq-erp/src/main/java/com/matrix/system/activity/dao/ActivitySignRecordDao.java @@ -21,4 +21,7 @@ @Param("userId")Long userId, @Param("format")Date format); List<ActivitySignRecordVo> selectRecordByMonth(@Param("actId")Long actId, @Param("userId")Long userId, @Param("date") DateTime date); + + List<ActivitySignRecord> selectListByActIdAndUserIdLikesignTime(@Param("actId")long actId, + @Param("userId")Long userId, @Param("format")Date format); } \ No newline at end of file diff --git a/zq-erp/src/main/java/com/matrix/system/activity/dto/AddLuckyDrawSetDto.java b/zq-erp/src/main/java/com/matrix/system/activity/dto/AddLuckyDrawSetDto.java new file mode 100644 index 0000000..b559a2c --- /dev/null +++ b/zq-erp/src/main/java/com/matrix/system/activity/dto/AddLuckyDrawSetDto.java @@ -0,0 +1,28 @@ +package com.matrix.system.activity.dto; + +import com.matrix.system.activity.entity.ActivitySignAwardSet; +import io.swagger.annotations.ApiModel; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +import java.util.Date; +import java.util.List; + +@Data +@ApiModel(value = "AddLuckyDrawSetDto", description = "查询参数") +public class AddLuckyDrawSetDto { + + @ApiModelProperty(value ="活动名称") + private String actName; + @ApiModelProperty(value ="活动编码") + private String actCode; + @ApiModelProperty(value ="活动开始时间") + private Date beginTime; + @ApiModelProperty(value ="活动结束时间") + private Date endTime; + + private LuckyDrawBasicJsonDto luckyDrawBasicJsonDto; + + private List<ActivitySignAwardSet> luckyDrawAwardSets; + +} diff --git a/zq-erp/src/main/java/com/matrix/system/activity/dto/LuckyDrawBasicJsonDto.java b/zq-erp/src/main/java/com/matrix/system/activity/dto/LuckyDrawBasicJsonDto.java new file mode 100644 index 0000000..f1ba92d --- /dev/null +++ b/zq-erp/src/main/java/com/matrix/system/activity/dto/LuckyDrawBasicJsonDto.java @@ -0,0 +1,53 @@ +package com.matrix.system.activity.dto; + +import io.swagger.annotations.ApiModel; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +@Data +@ApiModel(value = "LuckyDrawBasicJsonDto", description = "查询参数") +public class LuckyDrawBasicJsonDto { + + @ApiModelProperty(value ="头部图片") + private String imageUrlHead; + @ApiModelProperty(value ="开始按钮") + private String imageUrlTitle; + @ApiModelProperty(value ="转盘背景") + private String imageUrlButton; + @ApiModelProperty(value ="状态图片") + private String imageUrlState; + @ApiModelProperty(value ="奖品划分线") + private String imageLine; + + @ApiModelProperty(value ="规则内容") + private String ruleExplain; + @ApiModelProperty(value ="字体颜色") + private String typographyColor; + @ApiModelProperty(value ="背景颜色") + private String backgroundColor; + @ApiModelProperty(value ="字体大小") + private Integer typographyNum; + @ApiModelProperty(value ="字体透明度") + private Integer typographyLight; + + /** + * 抽奖规则 + */ + //每人每日有10次无门槛抽奖机会 + private Integer wmkcjjh; + //可用积分兑换1次抽奖机会, + private Integer dhycjfs; + // 每日最多兑换 + //10 + //次抽奖机会 + private Integer jfdhcs; + // 每人最多可中奖 + //10 + //次 + private Integer zzjcs; + // 总中奖率 + //10 + //% + private Integer zzjl; + +} diff --git a/zq-erp/src/main/java/com/matrix/system/activity/dto/LuckyDrawForUpdateDto.java b/zq-erp/src/main/java/com/matrix/system/activity/dto/LuckyDrawForUpdateDto.java new file mode 100644 index 0000000..1d02334 --- /dev/null +++ b/zq-erp/src/main/java/com/matrix/system/activity/dto/LuckyDrawForUpdateDto.java @@ -0,0 +1,17 @@ +package com.matrix.system.activity.dto; + +import io.swagger.annotations.ApiModel; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +@Data +@ApiModel(value = "LuckyDrawForUpdateDto", description = "参数") +public class LuckyDrawForUpdateDto { + + @ApiModelProperty(value ="活动主表ID") + private Long actId; + + @ApiModelProperty(hidden = true) + private Long companyId; + +} \ No newline at end of file diff --git a/zq-erp/src/main/java/com/matrix/system/activity/dto/UpdateLuckyDrawSetDto.java b/zq-erp/src/main/java/com/matrix/system/activity/dto/UpdateLuckyDrawSetDto.java new file mode 100644 index 0000000..536191a --- /dev/null +++ b/zq-erp/src/main/java/com/matrix/system/activity/dto/UpdateLuckyDrawSetDto.java @@ -0,0 +1,34 @@ +package com.matrix.system.activity.dto; + +import com.matrix.system.activity.entity.ActivitySignAwardSet; +import io.swagger.annotations.ApiModel; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +import java.util.Date; +import java.util.List; + +@Data +@ApiModel(value = "UpdateLuckyDrawSetDto", description = "查询参数") +public class UpdateLuckyDrawSetDto { + + @ApiModelProperty(value ="活动名称") + private String actName; + @ApiModelProperty(value ="活动编码") + private String actCode; + @ApiModelProperty(value ="活动开始时间") + private Date beginTime; + @ApiModelProperty(value ="活动结束时间") + private Date endTime; + + private LuckyDrawBasicJsonDto luckyDrawBasicJsonDto; + + private List<ActivitySignAwardSet> activityAwardSets; + + @ApiModelProperty(value ="活动主表ID") + private Long actMainId; + + @ApiModelProperty(hidden = true) + private Long companyId; + +} \ No newline at end of file diff --git a/zq-erp/src/main/java/com/matrix/system/activity/dto/UpdateSignAwardSetDto.java b/zq-erp/src/main/java/com/matrix/system/activity/dto/UpdateSignAwardSetDto.java index 20134c2..11ec9f6 100644 --- a/zq-erp/src/main/java/com/matrix/system/activity/dto/UpdateSignAwardSetDto.java +++ b/zq-erp/src/main/java/com/matrix/system/activity/dto/UpdateSignAwardSetDto.java @@ -11,23 +11,23 @@ @Data @ApiModel(value = "UpdateSignAwardSetDto", description = "查询参数") public class UpdateSignAwardSetDto { - + @ApiModelProperty(value ="活动名称") - private String actName; + private String actName; @ApiModelProperty(value ="活动编码") private String actCode; @ApiModelProperty(value ="活动开始时间") private Date beginTime; @ApiModelProperty(value ="活动结束时间") private Date endTime; - + private SignSetBasicJsonDto signSetBasicJsonDto; - + private List<ActivitySignAwardSet> activitySignAwardSets; - + @ApiModelProperty(value ="活动主表ID") private Long actMainId; - + @ApiModelProperty(hidden = true) private Long companyId; diff --git a/zq-erp/src/main/java/com/matrix/system/activity/service/ActivitySignAwardSetService.java b/zq-erp/src/main/java/com/matrix/system/activity/service/ActivitySignAwardSetService.java index c203dae..905c4fa 100644 --- a/zq-erp/src/main/java/com/matrix/system/activity/service/ActivitySignAwardSetService.java +++ b/zq-erp/src/main/java/com/matrix/system/activity/service/ActivitySignAwardSetService.java @@ -111,11 +111,8 @@ if(ObjectUtil.isEmpty(shopActivity)) { return AjaxResult.buildFailInstance("网络不通畅,请刷新页面"); } - /** - * 未发布状态即使达到活动时间也不进入进行中状态 - */ - //未发布状态点击发布,状态变成未开始,且是开启状态 - shopActivity.setActStatus(ShopActivities.ACTSTATUS_STATUS_READY); + //未发布状态点击发布,状态变成进行中,且是开启状态 + shopActivity.setActStatus(ShopActivities.ACTSTATUS_STATUS_ING); shopActivity.setIsStart(ShopActivities.ACTIVITIES_STATUS_OPEN); shopActivitiesDao.updateByModel(shopActivity); return AjaxResult.buildSuccessInstance("操作成功"); diff --git a/zq-erp/src/main/java/com/matrix/system/activity/vo/AddLuckyDrawSetVo.java b/zq-erp/src/main/java/com/matrix/system/activity/vo/AddLuckyDrawSetVo.java new file mode 100644 index 0000000..f8ff24e --- /dev/null +++ b/zq-erp/src/main/java/com/matrix/system/activity/vo/AddLuckyDrawSetVo.java @@ -0,0 +1,34 @@ +package com.matrix.system.activity.vo; + +import com.fasterxml.jackson.annotation.JsonFormat; +import com.matrix.system.activity.entity.ActivitySignAwardSet; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +import java.util.Date; +import java.util.List; + +@Data +public class AddLuckyDrawSetVo { + /** + * 主键 + */ + private Long id; + + @ApiModelProperty(value ="活动名称") + private String actName; + @ApiModelProperty(value ="活动编码") + private String actCode; + @ApiModelProperty(value ="活动开始时间") + @JsonFormat(pattern = "yyyy-MM-dd hh:mm:ss", timezone="GMT+8") + private Date beginTime; + @ApiModelProperty(value ="活动结束时间") + @JsonFormat(pattern = "yyyy-MM-dd hh:mm:ss", timezone="GMT+8") + private Date endTime; + + private LuckyDrawBasicJsonVo luckyDrawBasicJsonVo; + + private List<ActivitySignAwardSet> activityluckyDrawSets; + + +} diff --git a/zq-erp/src/main/java/com/matrix/system/activity/vo/LuckyDrawAwardCodeListVo.java b/zq-erp/src/main/java/com/matrix/system/activity/vo/LuckyDrawAwardCodeListVo.java new file mode 100644 index 0000000..80eb8b6 --- /dev/null +++ b/zq-erp/src/main/java/com/matrix/system/activity/vo/LuckyDrawAwardCodeListVo.java @@ -0,0 +1,57 @@ +package com.matrix.system.activity.vo; + +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +@Data +public class LuckyDrawAwardCodeListVo { + + @ApiModelProperty(value ="头部图片") + private String imageUrlHead; + @ApiModelProperty(value ="开始按钮") + private String imageUrlTitle; + @ApiModelProperty(value ="转盘背景") + private String imageUrlButton; + @ApiModelProperty(value ="状态图片") + private String imageUrlState; + @ApiModelProperty(value ="奖品划分线") + private String imageLine; + + @ApiModelProperty(value ="规则内容") + private String ruleExplain; + @ApiModelProperty(value ="字体颜色") + private String typographyColor; + @ApiModelProperty(value ="背景颜色") + private String backgroundColor; + @ApiModelProperty(value ="字体大小") + private Integer typographyNum; + @ApiModelProperty(value ="字体透明度") + private Integer typographyLight; + + + //@ApiModelProperty(value ="中奖顺序") + private String awardLine; + //@ApiModelProperty(value ="中奖顺序索引") + private Integer awrdLineIndex; + + /** + * 抽奖规则 + */ + //每人每日有10次无门槛抽奖机会 + private Integer wmkcjjh; + //可用积分兑换1次抽奖机会, + private Integer dhycjfs; + // 每日最多兑换 + //10 + //次抽奖机会 + private Integer jfdhcs; + // 每人最多可中奖 + //10 + //次 + private Integer zzjcs; + // 总中奖率 + //10 + //% + private Integer zzjl; + +} diff --git a/zq-erp/src/main/java/com/matrix/system/activity/vo/LuckyDrawBasicJsonVo.java b/zq-erp/src/main/java/com/matrix/system/activity/vo/LuckyDrawBasicJsonVo.java new file mode 100644 index 0000000..f945879 --- /dev/null +++ b/zq-erp/src/main/java/com/matrix/system/activity/vo/LuckyDrawBasicJsonVo.java @@ -0,0 +1,51 @@ +package com.matrix.system.activity.vo; + +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +@Data +public class LuckyDrawBasicJsonVo { + + @ApiModelProperty(value ="头部图片") + private String imageUrlHead; + @ApiModelProperty(value ="开始按钮") + private String imageUrlTitle; + @ApiModelProperty(value ="转盘背景") + private String imageUrlButton; + @ApiModelProperty(value ="状态图片") + private String imageUrlState; + @ApiModelProperty(value ="奖品划分线") + private String imageLine; + + @ApiModelProperty(value ="规则内容") + private String ruleExplain; + @ApiModelProperty(value ="字体颜色") + private String typographyColor; + @ApiModelProperty(value ="背景颜色") + private String backgroundColor; + @ApiModelProperty(value ="字体大小") + private Integer typographyNum; + @ApiModelProperty(value ="字体透明度") + private Integer typographyLight; + + /** + * 抽奖规则 + */ + //每人每日有10次无门槛抽奖机会 + private Integer wmkcjjh; + //可用积分兑换1次抽奖机会, + private Integer dhycjfs; + // 每日最多兑换 + //10 + //次抽奖机会 + private Integer jfdhcs; + // 每人最多可中奖 + //10 + //次 + private Integer zzjcs; + // 总中奖率 + //10 + //% + private Integer zzjl; + +} diff --git a/zq-erp/src/main/java/com/matrix/system/shopXcx/api/action/WxShopActivitiesLuckydrawAction.java b/zq-erp/src/main/java/com/matrix/system/shopXcx/api/action/WxShopActivitiesLuckydrawAction.java new file mode 100644 index 0000000..c54e9ac --- /dev/null +++ b/zq-erp/src/main/java/com/matrix/system/shopXcx/api/action/WxShopActivitiesLuckydrawAction.java @@ -0,0 +1,542 @@ +package com.matrix.system.shopXcx.api.action; + +import cn.hutool.core.collection.CollUtil; +import cn.hutool.core.date.DateUtil; +import cn.hutool.core.util.ObjectUtil; +import cn.hutool.core.util.RandomUtil; +import cn.hutool.core.util.StrUtil; +import com.alibaba.fastjson.JSON; +import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; +import com.matrix.component.redis.RedisUserLoginUtils; +import com.matrix.core.pojo.AjaxResult; +import com.matrix.core.tools.StringUtils; +import com.matrix.system.activity.dao.ActivitySignAwardSetDao; +import com.matrix.system.activity.dao.ActivitySignReceiveRecordDao; +import com.matrix.system.activity.dao.ActivitySignRecordDao; +import com.matrix.system.activity.dao.ActivitySignWriteoffDao; +import com.matrix.system.activity.entity.ActivitySignAwardSet; +import com.matrix.system.activity.entity.ActivitySignReceiveRecord; +import com.matrix.system.activity.entity.ActivitySignRecord; +import com.matrix.system.activity.entity.ActivitySignWriteoff; +import com.matrix.system.common.constance.AppConstance; +import com.matrix.system.hive.bean.SysVipInfo; +import com.matrix.system.score.dao.ScoreVipDetailDao; +import com.matrix.system.score.entity.ScoreVipDetail; +import com.matrix.system.score.service.ScoreVipDetailService; +import com.matrix.system.shopXcx.api.service.WxShopLogisticsQueryService; +import com.matrix.system.shopXcx.api.tools.WxShopCouponUtil; +import com.matrix.system.shopXcx.api.vo.ActivitySignAwardSetVo; +import com.matrix.system.shopXcx.api.vo.LuckyDrawBasicInfoJsonVo; +import com.matrix.system.shopXcx.api.vo.LuckyDrawInfoVo; +import com.matrix.system.shopXcx.api.vo.LuckyDrawSuccessVo; +import com.matrix.system.shopXcx.bean.ShopActivities; +import com.matrix.system.shopXcx.bean.ShopCoupon; +import com.matrix.system.shopXcx.bean.ShopCouponRecord; +import com.matrix.system.shopXcx.dao.*; +import io.swagger.annotations.Api; +import io.swagger.annotations.ApiOperation; +import io.swagger.annotations.ApiResponse; +import io.swagger.annotations.ApiResponses; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.transaction.annotation.Transactional; +import org.springframework.web.bind.annotation.*; + +import java.util.ArrayList; +import java.util.Date; +import java.util.List; + +@Api(tags = "转盘抽奖活动接口类") +@RestController +@RequestMapping(value = "/wxapi/luckydraw") +public class WxShopActivitiesLuckydrawAction { + + @Autowired + private ShopActivitiesDao shopActivitiesDao; + + @Autowired + private RedisUserLoginUtils redisUserLoginUtils; + + @Autowired + private ActivitySignAwardSetDao activitySignAwardSetDao; + + @Autowired + private ActivitySignReceiveRecordDao activitySignReceiveRecordDao; + + @Autowired + private ActivitySignWriteoffDao activitySignWriteoffDao; + + @Autowired + private ActivitySignRecordDao activitySignRecordDao; + + @Autowired + ShopDeliveryInfoDao shopDeliveryInfoDao; + + @Autowired + private ShopLogisticsInfoDao shopLogisticsInfoDao; + @Autowired + private ShopReceiveAddressDao shopReceiveAddressDao; + + @Autowired + private WxShopLogisticsQueryService wxShopLogisticsQueryService; + @Autowired + private ScoreVipDetailService scoreVipDetailService; + @Autowired + private ShopCouponDao shopCouponDao; + @Autowired + private WxShopCouponUtil wxShopCouponUtil; + @Autowired + private ShopCouponRecordDao shopCouponRecordDao; + @Autowired + private ScoreVipDetailDao scoreVipDetailDao; + + @ApiOperation(value = "获取抽奖基本信息", notes = "") + @ApiResponses({ + @ApiResponse(code = 200, message = "ok", response = LuckyDrawInfoVo.class) + }) + @GetMapping(value = "/getLuckydrawBasicInfo") + public AjaxResult getLuckydrawBasicInfo() { + //获取登录人信息 + SysVipInfo loginUser = redisUserLoginUtils.getLoginUser(SysVipInfo.class); + Long companyId = loginUser.getCompanyId(); + Long userId = loginUser.getId(); + //获取抽奖活动的信息 + LuckyDrawInfoVo luckyDrawInfoVo = new LuckyDrawInfoVo(); + AjaxResult ajaxResult = new AjaxResult(); + + ShopActivities shopActivities = shopActivitiesDao.selectOneByCompanyIdAndActTypeAndActStatus(companyId,ShopActivities.ACTIVITIES_TYPE_LUCKYDRAW,ShopActivities.ACTSTATUS_STATUS_ING); + if(ObjectUtil.isEmpty(shopActivities)){ + ajaxResult = AjaxResult.buildFailInstance("活动还没有开始"); + ajaxResult.setData(luckyDrawInfoVo); + return ajaxResult; + } + Long actId = shopActivities.getId(); + luckyDrawInfoVo.setActName(shopActivities.getActName()); + luckyDrawInfoVo.setActCode(shopActivities.getActCode()); + luckyDrawInfoVo.setId(shopActivities.getId()); + String actContent = shopActivities.getActContent(); + LuckyDrawBasicInfoJsonVo luckyDrawBasicInfoJsonVo = JSON.parseObject(actContent, LuckyDrawBasicInfoJsonVo.class); + luckyDrawInfoVo.setLuckyDrawBasicInfoJsonVo(luckyDrawBasicInfoJsonVo); + + List<ActivitySignAwardSetVo> activitySignAwardSetVos = activitySignAwardSetDao + .selectListByActIDAndCompanyId(actId,companyId, ActivitySignAwardSet.AWARDSTATE_WORK); + luckyDrawInfoVo.setActivitySignAwardSetVos(activitySignAwardSetVos); + + /** + * 今日是否能参与 + * 用户今日剩余抽奖次数 + * 今日参与次数<每日允许最大参与次数都可以抽奖 + */ + //获取活动设置的参与次数 + Integer wmkcjjh = luckyDrawBasicInfoJsonVo.getWmkcjjh(); + //获取今日参与次数 + List<ActivitySignRecord> activityRecords = activitySignRecordDao.selectListByActIdAndUserIdLikesignTime(actId,userId,new Date()); + if(CollUtil.isNotEmpty(activityRecords)){ + if(activityRecords.size() >= wmkcjjh){ + luckyDrawInfoVo.setJoinState(LuckyDrawInfoVo.JOINSTATE_NOT); + luckyDrawInfoVo.setLuckyDrawTime(0); + }else{ + luckyDrawInfoVo.setJoinState(LuckyDrawInfoVo.JOINSTATE_YES); + luckyDrawInfoVo.setLuckyDrawTime(wmkcjjh-activityRecords.size()); + } + }else{ + luckyDrawInfoVo.setJoinState(LuckyDrawInfoVo.JOINSTATE_YES); + luckyDrawInfoVo.setLuckyDrawTime(wmkcjjh); + } + + //获取用户当前积分 + int totalScore = scoreVipDetailDao.selectUserTotalScore(userId); + luckyDrawInfoVo.setTotalScore(totalScore); + ajaxResult = AjaxResult.buildSuccessInstance(""); + ajaxResult.setData(luckyDrawInfoVo); + return ajaxResult; + } + + /** + * 点击抽奖 + * + */ + @ApiOperation(value = "点击抽奖", notes = "") + @ApiResponses({ + @ApiResponse(code = 200, message = "ok", response = LuckyDrawSuccessVo.class) + }) + + @GetMapping(value = "/clickLuckyDraw/{actId}") + @ResponseBody + @Transactional + public AjaxResult clickLuckyDraw(@PathVariable("actId") long actId) { + SysVipInfo user = redisUserLoginUtils.getLoginUser(SysVipInfo.class); + Long userId = user.getId(); + Long companyId = user.getCompanyId(); + /** + * 活动是否存在 + * 活动是否已经开始 + * 免费抽奖还是积分抽奖 + * 积分抽奖一次一次换 + * 减少积分 + * 是否中奖 + * 中奖规则 + * 奖品处理 + * + */ + //活动是否存在 + ShopActivities shopActivities = shopActivitiesDao.selectById(actId); + if (ObjectUtil.isEmpty(shopActivities)) { + return AjaxResult.buildFailInstance("活动不存在"); + } + //活动是否已经开始 + Integer actStatus = shopActivities.getActStatus(); + if(ShopActivities.ACTSTATUS_STATUS_ING != actStatus) { + return AjaxResult.buildFailInstance("活动未开始"); + } + //获取今日抽奖总次数 + String actContent = shopActivities.getActContent(); + LuckyDrawBasicInfoJsonVo luckyDrawBasicInfoJsonVo = JSON.parseObject(actContent, LuckyDrawBasicInfoJsonVo.class); + List<ActivitySignRecord> activityRecords = activitySignRecordDao.selectListByActIdAndUserIdLikesignTime(actId,userId, DateUtil.date()); + if(CollUtil.isNotEmpty(activityRecords)){ + Integer wmkcjjh = luckyDrawBasicInfoJsonVo.getWmkcjjh(); + Integer jfdhcs = luckyDrawBasicInfoJsonVo.getJfdhcs(); + if(activityRecords.size() >= (wmkcjjh+jfdhcs)){ + return AjaxResult.buildFailInstance("明天再来抽奖吧"); + } + } + + //生成抽奖记录 + ActivitySignRecord activitySignRecordAdd = new ActivitySignRecord(); + activitySignRecordAdd.setCompanyId(companyId); + activitySignRecordAdd.setCreateBy(user.getVipName()); + activitySignRecordAdd.setCreateTime(DateUtil.date()); + activitySignRecordAdd.setUpdateBy(user.getVipName()); + activitySignRecordAdd.setUpdateTime(DateUtil.date()); + activitySignRecordAdd.setActivityId(actId); + activitySignRecordAdd.setSignTime(DateUtil.date()); + activitySignRecordAdd.setUserId(userId); + activitySignRecordDao.insert(activitySignRecordAdd); + + /** + 获取中奖概率 + 中奖了获取奖品ID + 没有中奖则获取谢谢参与的奖品ID + 每个人最多中奖次数 + */ + + List<LuckyDrawSuccessVo> luckyDrawSuccessVos = new ArrayList<>(); + + //获取谢谢参与奖 + QueryWrapper<ActivitySignAwardSet> queryWrapper = new QueryWrapper<>(); + queryWrapper.eq("award_rule",ActivitySignAwardSet.AWARDRULE_NORMAL); + queryWrapper.eq("company_id",companyId); + queryWrapper.eq("activity_id",actId); + ActivitySignAwardSet activitySignAwardSetNormal = activitySignAwardSetDao.selectOne(queryWrapper); + //每个人最多中奖次数 + Integer zzjcs = luckyDrawBasicInfoJsonVo.getZzjcs(); + QueryWrapper<ActivitySignReceiveRecord> queryWrapperActivitySignReceiveRecord = new QueryWrapper<>(); + queryWrapperActivitySignReceiveRecord.eq("company_id", companyId); + queryWrapperActivitySignReceiveRecord.eq("activity_id", actId); + queryWrapperActivitySignReceiveRecord.eq("user_id", userId); + queryWrapperActivitySignReceiveRecord.ne("award_id", activitySignAwardSetNormal.getId()); + List<ActivitySignReceiveRecord> activitySignReceiveRecordDone = activitySignReceiveRecordDao.selectList(queryWrapperActivitySignReceiveRecord); + if(CollUtil.isNotEmpty(activitySignReceiveRecordDone)){ + if(activitySignReceiveRecordDone.size() >= zzjcs){ + //生成领取记录 + ActivitySignReceiveRecord activitySignReceiveRecord = new ActivitySignReceiveRecord(); + activitySignReceiveRecord.setUserId(userId); + activitySignReceiveRecord.setReceiveTime(DateUtil.date()); + activitySignReceiveRecord.setAwardId(activitySignAwardSetNormal.getId()); + activitySignReceiveRecord.setState(ActivitySignReceiveRecord.STATE_DONE); + activitySignReceiveRecord.setActivityId(actId); + activitySignReceiveRecord.setCompanyId(companyId); + activitySignReceiveRecord.setCreateBy(user.getVipName()); + activitySignReceiveRecord.setCreateTime(new Date()); + activitySignReceiveRecord.setUpdateBy(user.getVipName()); + activitySignReceiveRecord.setUpdateTime(new Date()); + activitySignReceiveRecordDao.insert(activitySignReceiveRecord); + + LuckyDrawSuccessVo luckyDrawSuccessVo = new LuckyDrawSuccessVo(); + luckyDrawSuccessVo.setType(1); + luckyDrawSuccessVo.setAwardName(activitySignAwardSetNormal.getAwardName()); + luckyDrawSuccessVo.setAwardImg(activitySignAwardSetNormal.getIntroduceImg()); + luckyDrawSuccessVos.add(luckyDrawSuccessVo); + + AjaxResult ajaxResult = AjaxResult.buildSuccessInstance(""); + ajaxResult.setData(luckyDrawSuccessVos); + return ajaxResult; + } + } + //总中奖率 + int zzjl = luckyDrawBasicInfoJsonVo.getZzjl(); + int randomInt = RandomUtil.randomInt(1, 100); + //不中奖的分界线 + int failureScope = 100 - zzjl; + if(failureScope >= randomInt){ + //生成领取记录 + ActivitySignReceiveRecord activitySignReceiveRecord = new ActivitySignReceiveRecord(); + activitySignReceiveRecord.setUserId(userId); + activitySignReceiveRecord.setReceiveTime(DateUtil.date()); + activitySignReceiveRecord.setAwardId(activitySignAwardSetNormal.getId()); + activitySignReceiveRecord.setState(ActivitySignReceiveRecord.STATE_DONE); + activitySignReceiveRecord.setActivityId(actId); + activitySignReceiveRecord.setCompanyId(companyId); + activitySignReceiveRecord.setCreateBy(user.getVipName()); + activitySignReceiveRecord.setCreateTime(new Date()); + activitySignReceiveRecord.setUpdateBy(user.getVipName()); + activitySignReceiveRecord.setUpdateTime(new Date()); + activitySignReceiveRecordDao.insert(activitySignReceiveRecord); + + LuckyDrawSuccessVo luckyDrawSuccessVo = new LuckyDrawSuccessVo(); + luckyDrawSuccessVo.setType(1); + luckyDrawSuccessVo.setAwardName(activitySignAwardSetNormal.getAwardName()); + luckyDrawSuccessVo.setAwardImg(activitySignAwardSetNormal.getIntroduceImg()); + luckyDrawSuccessVos.add(luckyDrawSuccessVo); + + AjaxResult ajaxResult = AjaxResult.buildSuccessInstance(""); + ajaxResult.setData(luckyDrawSuccessVos); + return ajaxResult; + } + //中奖 + if(failureScope < randomInt){ + //获取奖品 + ActivitySignAwardSet activitySignAwardSetCumulativeDay = updateShopActivityAndAwardSet(actId); + + if(ObjectUtil.isNotEmpty(activitySignAwardSetCumulativeDay)){ + LuckyDrawSuccessVo luckyDrawSuccessVo = new LuckyDrawSuccessVo(); + luckyDrawSuccessVo.setType(2); + luckyDrawSuccessVo.setAwardType(activitySignAwardSetCumulativeDay.getAwardType()); + luckyDrawSuccessVo.setAwardName(activitySignAwardSetCumulativeDay.getAwardName()); + luckyDrawSuccessVo.setAwardImg(activitySignAwardSetCumulativeDay.getIntroduceImg()); + luckyDrawSuccessVo.setAwardState(activitySignAwardSetCumulativeDay.getAwardState()); + //新增奖品领取记录 + ActivitySignReceiveRecord activitySignReceiveRecord = new ActivitySignReceiveRecord(); + activitySignReceiveRecord.setUserId(userId); + activitySignReceiveRecord.setReceiveTime(DateUtil.date()); + activitySignReceiveRecord.setAwardId(activitySignAwardSetCumulativeDay.getId()); + activitySignReceiveRecord.setActivityId(actId); + activitySignReceiveRecord.setCompanyId(companyId); + activitySignReceiveRecord.setState(ActivitySignReceiveRecord.STATE_DONE); + activitySignReceiveRecord.setCreateBy(user.getVipName()); + activitySignReceiveRecord.setCreateTime(new Date()); + activitySignReceiveRecord.setUpdateBy(user.getVipName()); + activitySignReceiveRecord.setUpdateTime(new Date()); + /** + * 奖项类型(1:自定义产品2:积分3:优惠券4:店铺商品) + * + * todo:4:店铺商品 + */ + //1:自定义产品 + if(ActivitySignAwardSet.AWARDTYPE_CUSTOMIZE == activitySignAwardSetCumulativeDay.getAwardType()) { + activitySignReceiveRecord.setState(ActivitySignReceiveRecord.STATE_ING); + String randomString = StringUtils.getRandomString(8); + activitySignReceiveRecord.setWriteOffCode(randomString); + + /** + * 获取对应奖品的领取方式(兑奖方式(1:线下兑换2:物流配送3:客服兑换) + */ + luckyDrawSuccessVo.setWriteOffCode(randomString); + luckyDrawSuccessVo.setAwardWay(activitySignAwardSetCumulativeDay.getAwardWay()); + //2:物流配送 + luckyDrawSuccessVo.setOperationTip(activitySignAwardSetCumulativeDay.getOperationTip()); + //1:线下兑换 + if(ActivitySignAwardSet.AWARDWAY_ONE == activitySignAwardSetCumulativeDay.getAwardWay()) { + luckyDrawSuccessVo.setIntroduceTip(activitySignAwardSetCumulativeDay.getIntroduceTip()); + luckyDrawSuccessVo.setPrizeAddress(activitySignAwardSetCumulativeDay.getPrizeAddress()); + luckyDrawSuccessVo.setPrizeStartTime(activitySignAwardSetCumulativeDay.getPrizeStartTime()); + luckyDrawSuccessVo.setPrizeEndTime(activitySignAwardSetCumulativeDay.getPrizeEndTime()); + } + //3:客服兑换 + if(ActivitySignAwardSet.AWARDWAY_THREE == activitySignAwardSetCumulativeDay.getAwardWay()) { + luckyDrawSuccessVo.setWechatImg(activitySignAwardSetCumulativeDay.getWechatImg()); + luckyDrawSuccessVo.setPrizeStartTime(activitySignAwardSetCumulativeDay.getPrizeStartTime()); + luckyDrawSuccessVo.setPrizeEndTime(activitySignAwardSetCumulativeDay.getPrizeEndTime()); + } + } + //2:积分 + if(ActivitySignAwardSet.AWARDTYPE_SCORE == activitySignAwardSetCumulativeDay.getAwardType()) { + luckyDrawSuccessVo.setScoreCnt(activitySignAwardSetCumulativeDay.getScoreCnt()); + } + //3:优惠券 + if(ActivitySignAwardSet.AWARDTYPE_COUPON == activitySignAwardSetCumulativeDay.getAwardType()) { + luckyDrawSuccessVo.setCouponName(activitySignAwardSetCumulativeDay.getCouponName()); + //获取优惠券 + int couponId = Integer.parseInt(activitySignAwardSetCumulativeDay.getCouponId()); + ShopCoupon shopCoupon = shopCouponDao.selectById(couponId); + // 如果没有找到该优惠券 + if (shopCoupon == null) { + return new AjaxResult(AjaxResult.STATUS_FAIL, "没有找到该优惠券!"); + } + // 如果优惠券有数量限制并且已经领完 + if (shopCoupon.getMaxQuantity() >= 0 && (shopCoupon.getMaxQuantity() <= shopCoupon.getQuantityReceive())) { + return new AjaxResult(AjaxResult.STATUS_FAIL, "优惠券已领完!"); + } + boolean newPeople = wxShopCouponUtil.verifyIsNewPeople(userId); + // 如果改券是新人专属且当前用户不是新人 + if (AppConstance.COUPON_GET_LIMT_NEW.equals(shopCoupon.getGetLimit()) && !newPeople) { + return new AjaxResult(AjaxResult.STATUS_FAIL, "该优惠券为新人专享优惠券!"); + } + ShopCouponRecord insertRecord = new ShopCouponRecord(); + insertRecord.setCreateBy(AppConstance.SYSTEM_USER); + insertRecord.setUpdateBy(AppConstance.SYSTEM_USER); + insertRecord.setCId(couponId); + insertRecord.setUserId(userId); + insertRecord.setIsUsing(2); + int i = shopCouponRecordDao.insert(insertRecord); + // 如果插入领取记录表失败 + if (i < 0) { + return new AjaxResult(AjaxResult.STATUS_FAIL, "优惠券领取失败!"); + } + shopCoupon.setQuantityReceive(shopCoupon.getQuantityReceive() + 1); + shopCouponDao.updateByModel(shopCoupon); + } + activitySignReceiveRecordDao.insert(activitySignReceiveRecord); + //累计奖励积分,对应用户积分加减 + if(ActivitySignAwardSet.AWARDTYPE_SCORE == activitySignAwardSetCumulativeDay.getAwardType()) { + int awardType = activitySignAwardSetCumulativeDay.getAwardType(); + if(ActivitySignAwardSet.AWARDTYPE_SCORE == awardType){ + int scoreCnt = activitySignAwardSetCumulativeDay.getScoreCnt(); + if(scoreCnt > 0){ + scoreVipDetailService.addScore(userId,null,null,scoreCnt, + activitySignReceiveRecord.getId(), ScoreVipDetail.SCORE_VIP_TYPE_JOIN_ACTIVE,"积分"); + } + } + } + //生成核销记录 + if(ActivitySignAwardSet.AWARDTYPE_CUSTOMIZE == activitySignAwardSetCumulativeDay.getAwardType()) { + ActivitySignWriteoff activitySignWriteoff = new ActivitySignWriteoff(); + //线下兑换和客服兑换 + if(ActivitySignAwardSet.AWARDWAY_ONE == activitySignAwardSetCumulativeDay.getAwardWay() + || ActivitySignAwardSet.AWARDWAY_THREE == activitySignAwardSetCumulativeDay.getAwardWay()) { + activitySignWriteoff.setWriteoffCode(activitySignReceiveRecord.getWriteOffCode()); + } + activitySignWriteoff.setActId(actId); + activitySignWriteoff.setAwardId(activitySignAwardSetCumulativeDay.getId()); + activitySignWriteoff.setWinTime(DateUtil.date()); + if(ActivitySignAwardSet.AWARDWAY_TWO == activitySignAwardSetCumulativeDay.getAwardWay()) { + activitySignWriteoff.setState(ActivitySignWriteoff.STATE_TWO); + }else { + activitySignWriteoff.setState(ActivitySignWriteoff.STATE_ONE); + } + activitySignWriteoff.setUserId(userId); + activitySignWriteoff.setCompanyId(companyId); + activitySignWriteoff.setReceiveId(activitySignReceiveRecord.getId()); + activitySignWriteoff.setCreateBy(user.getVipName()); + activitySignWriteoff.setCreateTime(new Date()); + activitySignWriteoff.setUpdateBy(user.getVipName()); + activitySignWriteoff.setUpdateTime(new Date()); + activitySignWriteoffDao.insert(activitySignWriteoff); + } + luckyDrawSuccessVos.add(luckyDrawSuccessVo); + }else{ + //生成领取记录 + ActivitySignReceiveRecord activitySignReceiveRecord = new ActivitySignReceiveRecord(); + activitySignReceiveRecord.setUserId(userId); + activitySignReceiveRecord.setReceiveTime(DateUtil.date()); + activitySignReceiveRecord.setAwardId(activitySignAwardSetNormal.getId()); + activitySignReceiveRecord.setState(ActivitySignReceiveRecord.STATE_DONE); + activitySignReceiveRecord.setActivityId(actId); + activitySignReceiveRecord.setCompanyId(companyId); + activitySignReceiveRecord.setCreateBy(user.getVipName()); + activitySignReceiveRecord.setCreateTime(new Date()); + activitySignReceiveRecord.setUpdateBy(user.getVipName()); + activitySignReceiveRecord.setUpdateTime(new Date()); + activitySignReceiveRecordDao.insert(activitySignReceiveRecord); + + LuckyDrawSuccessVo luckyDrawSuccessVo = new LuckyDrawSuccessVo(); + luckyDrawSuccessVo.setType(1); + luckyDrawSuccessVo.setAwardName(activitySignAwardSetNormal.getAwardName()); + luckyDrawSuccessVo.setAwardImg(activitySignAwardSetNormal.getIntroduceImg()); + luckyDrawSuccessVos.add(luckyDrawSuccessVo); + + AjaxResult ajaxResult = AjaxResult.buildSuccessInstance(""); + ajaxResult.setData(luckyDrawSuccessVos); + return ajaxResult; + } + } + AjaxResult ajaxResult = AjaxResult.buildSuccessInstance(""); + ajaxResult.setData(luckyDrawSuccessVos); + return ajaxResult; + } + + //获取奖品并索引+1 已领取+1 + public synchronized ActivitySignAwardSet updateShopActivityAndAwardSet(Long actId){ + //通过活动ID获取对应的活动 + ShopActivities shopActivities = shopActivitiesDao.selectById(actId); + String actContent = shopActivities.getActContent(); + LuckyDrawBasicInfoJsonVo luckyDrawBasicInfoJsonVo = JSON.parseObject(actContent, LuckyDrawBasicInfoJsonVo.class); + + //中奖索引 + Integer awrdLineIndex = luckyDrawBasicInfoJsonVo.getAwrdLineIndex(); + //中奖序列 + String awardLine = luckyDrawBasicInfoJsonVo.getAwardLine(); + ActivitySignAwardSet activitySignAwardSet = null; + if(awardLine.length() > 0) { + String substring = awardLine.substring(1, awardLine.length() - 1); + List<String> awardList = StrUtil.splitTrim(substring, ","); + if(awrdLineIndex < awardList.size()){ + //中奖 + Long awardId = Long.parseLong(awardList.get(awrdLineIndex + 1)); + ActivitySignAwardSet activitySignAwardSetGet = activitySignAwardSetDao.selectById(awardId); + //奖项库存数量 + int awardInventoryCnt = activitySignAwardSetGet.getAwardInventoryCnt(); + //已派发数量 + int awardDistributeCnt = activitySignAwardSetGet.getAwardDistributeCnt(); + if(awardDistributeCnt < awardInventoryCnt){ + activitySignAwardSet = activitySignAwardSetGet; + activitySignAwardSetGet.setAwardDistributeCnt(awardDistributeCnt +1); + activitySignAwardSetDao.updateById(activitySignAwardSetGet); + + //将基本信息转换成JSON字符串存储到活动主表的act_content字段 + luckyDrawBasicInfoJsonVo.setAwrdLineIndex(awrdLineIndex + 1); + String json= JSON.toJSONString(luckyDrawBasicInfoJsonVo); + shopActivities.setActContent(json); + shopActivitiesDao.updateByModel(shopActivities); + } + } + } + return activitySignAwardSet; + } + + /** + * 是否可以积分兑换 + * + * @param + * @return + */ + @ApiOperation(value = "是否可以积分兑换", notes = "") + @GetMapping(value = "scoreLuckyDraw/{actId}") + @ResponseBody + public AjaxResult logisticsInsureById(@PathVariable("actId") Long actId) { + SysVipInfo loginUser = redisUserLoginUtils.getLoginUser(SysVipInfo.class); + Long userId = loginUser.getId(); + Long companyId = loginUser.getCompanyId(); + //获取用户总积分 + int scoreAll = scoreVipDetailDao.selectUserTotalScore(userId); + //获取活动的积分换取 + ShopActivities shopActivities = shopActivitiesDao.selectById(actId); + String actContent = shopActivities.getActContent(); + LuckyDrawBasicInfoJsonVo luckyDrawBasicInfoJsonVo = JSON.parseObject(actContent, LuckyDrawBasicInfoJsonVo.class); + Integer dhycjfs = luckyDrawBasicInfoJsonVo.getDhycjfs(); + if(dhycjfs == 0){ + return new AjaxResult(AjaxResult.STATUS_FAIL, "积分兑换不能兑换抽奖次数"); + } + if(scoreAll < dhycjfs){ + return new AjaxResult(AjaxResult.STATUS_FAIL, "积分不足"); + } + //获取今日抽奖总次数 + List<ActivitySignRecord> activityRecords = activitySignRecordDao.selectListByActIdAndUserIdLikesignTime(actId,userId, DateUtil.date()); + if(CollUtil.isNotEmpty(activityRecords)){ + Integer wmkcjjh = luckyDrawBasicInfoJsonVo.getWmkcjjh(); + Integer jfdhcs = luckyDrawBasicInfoJsonVo.getJfdhcs(); + if(activityRecords.size() >= (wmkcjjh+jfdhcs)){ + return AjaxResult.buildFailInstance("明天再来抽奖吧"); + } + } + //换取次数,减去积分 + scoreVipDetailService.deductionScore(userId,null,null,dhycjfs, + null, ScoreVipDetail.SCORE_VIP_TYPE_JOIN_ACTIVE,"兑换抽奖机会"); + return new AjaxResult(AjaxResult.STATUS_SUCCESS, "兑换成功!"); + } + + + + + +} + diff --git a/zq-erp/src/main/java/com/matrix/system/shopXcx/api/vo/LuckyDrawBasicInfoJsonVo.java b/zq-erp/src/main/java/com/matrix/system/shopXcx/api/vo/LuckyDrawBasicInfoJsonVo.java new file mode 100644 index 0000000..2501f29 --- /dev/null +++ b/zq-erp/src/main/java/com/matrix/system/shopXcx/api/vo/LuckyDrawBasicInfoJsonVo.java @@ -0,0 +1,60 @@ +package com.matrix.system.shopXcx.api.vo; + +import io.swagger.annotations.ApiModel; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +@Data +@ApiModel(value = "LuckyDrawBasicInfoJsonVo", description = "活动") +public class LuckyDrawBasicInfoJsonVo { + + @ApiModelProperty(value ="头部图片") + private String imageUrlHead; + @ApiModelProperty(value ="开始按钮") + private String imageUrlTitle; + @ApiModelProperty(value ="转盘背景") + private String imageUrlButton; + @ApiModelProperty(value ="状态图片") + private String imageUrlState; + @ApiModelProperty(value ="奖品划分线") + private String imageLine; + + @ApiModelProperty(value ="规则内容") + private String ruleExplain; + @ApiModelProperty(value ="字体颜色") + private String typographyColor; + @ApiModelProperty(value ="背景颜色") + private String backgroundColor; + @ApiModelProperty(value ="字体大小") + private Integer typographyNum; + @ApiModelProperty(value ="字体透明度") + private Integer typographyLight; + + + //@ApiModelProperty(value ="中奖顺序") + private String awardLine; + //@ApiModelProperty(value ="中奖顺序索引") + private Integer awrdLineIndex; + + /** + * 抽奖规则 + */ + //每人每日有10次无门槛抽奖机会 + private Integer wmkcjjh; + //可用积分兑换1次抽奖机会, + private Integer dhycjfs; + // 每日最多兑换 + //10 + //次抽奖机会 + private Integer jfdhcs; + // 每人最多可中奖 + //10 + //次 + private Integer zzjcs; + // 总中奖率 + //10 + //% + private Integer zzjl; + + +} diff --git a/zq-erp/src/main/java/com/matrix/system/shopXcx/api/vo/LuckyDrawInfoVo.java b/zq-erp/src/main/java/com/matrix/system/shopXcx/api/vo/LuckyDrawInfoVo.java new file mode 100644 index 0000000..31f40da --- /dev/null +++ b/zq-erp/src/main/java/com/matrix/system/shopXcx/api/vo/LuckyDrawInfoVo.java @@ -0,0 +1,44 @@ +package com.matrix.system.shopXcx.api.vo; + +import com.fasterxml.jackson.annotation.JsonFormat; +import io.swagger.annotations.ApiModel; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +import java.util.Date; +import java.util.List; + +@Data + +@ApiModel(value = "LuckyDrawInfoVo", description = "抽奖活动") +public class LuckyDrawInfoVo { + /** + * 主键 + */ + private Long id; + @ApiModelProperty(value ="活动今日是否可参与 1:是 2:否") + private int joinState; + @ApiModelProperty(value ="用户总积分") + private int totalScore; + + @ApiModelProperty(value ="用户今日剩余抽奖次数") + private int luckyDrawTime; + + public static final int JOINSTATE_YES = 1; + public static final int JOINSTATE_NOT = 2; + + @ApiModelProperty(value ="活动名称") + private String actName; + @ApiModelProperty(value ="活动编码") + private String actCode; + @ApiModelProperty(value ="活动开始时间") + @JsonFormat(pattern = "yyyy-MM-dd hh:mm:ss", timezone="GMT+8") + private Date beginTime; + @ApiModelProperty(value ="活动结束时间") + @JsonFormat(pattern = "yyyy-MM-dd hh:mm:ss", timezone="GMT+8") + private Date endTime; + @ApiModelProperty(value ="活动基本参数") + private LuckyDrawBasicInfoJsonVo luckyDrawBasicInfoJsonVo; + @ApiModelProperty(value ="奖品信息") + private List<ActivitySignAwardSetVo> activitySignAwardSetVos; +} diff --git a/zq-erp/src/main/java/com/matrix/system/shopXcx/api/vo/LuckyDrawSuccessVo.java b/zq-erp/src/main/java/com/matrix/system/shopXcx/api/vo/LuckyDrawSuccessVo.java new file mode 100644 index 0000000..3e2573e --- /dev/null +++ b/zq-erp/src/main/java/com/matrix/system/shopXcx/api/vo/LuckyDrawSuccessVo.java @@ -0,0 +1,150 @@ +package com.matrix.system.shopXcx.api.vo; + +import com.fasterxml.jackson.annotation.JsonFormat; +import io.swagger.annotations.ApiModel; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +import java.util.Date; +@Data + +@ApiModel(value = "LuckyDrawSuccessVo", description = "抽奖活动") +public class LuckyDrawSuccessVo { + + @ApiModelProperty(value ="奖励类型 1:日常奖励 2:累计奖励") + private int type; + + @ApiModelProperty(value ="累计奖励名称") + private String awardName; + @ApiModelProperty(value ="累计奖励图片") + private String awardImg; + @ApiModelProperty(value ="累计奖励核销码") + private String writeOffCode; + + @ApiModelProperty(value ="奖项类型(1:自定义产品2:积分3:优惠券4:店铺商品)") + private int awardType; + + + public static final int AWARDTYPE_CUSTOMIZE = 1; + public static final int AWARDTYPE_SCORE = 2; + public static final int AWARDTYPE_COUPON = 3; + public static final int AWARDTYPE_GOODS = 4; + + @ApiModelProperty(value ="文字介绍") + private String introduceTip; + + /** + * 奖项库存数量 + */ + + + @ApiModelProperty(value ="奖项库存数量") + private int awardInventoryCnt; + + /** + * 已派发数量 + */ + + + @ApiModelProperty(value ="已派发数量") + private int awardDistributeCnt; + + /** + * 兑奖方式(1:线下兑换2:物流配送3:客服兑换) + */ + + + @ApiModelProperty(value ="兑奖方式(1:线下兑换2:物流配送3:客服兑换)") + private int awardWay; + + /** + * 奖品是否有效(1:有效 2:无效) + */ + @ApiModelProperty(value ="奖品是否有效(1:有效 2:无效)") + private int awardState; + public static final int AWARDSTATE_WORK = 1; + public static final int AWARDSTATE_UNWORK = 2; + + /** + * 操作提示 + */ + + @ApiModelProperty(value ="操作提示") + private String operationTip; + + /** + * 兑奖地址 + */ + + @ApiModelProperty(value ="兑奖地址") + private String prizeAddress; + + /** + * 兑奖期限开始日期 + */ + + + @ApiModelProperty(value ="兑奖期限开始日期") + @JsonFormat(pattern = "yyyy-MM-dd hh:mm:ss", timezone="GMT+8") + private Date prizeStartTime; + + /** + * 兑奖期限结束日期 + */ + + @ApiModelProperty(value ="兑奖期限结束日期") + @JsonFormat(pattern = "yyyy-MM-dd hh:mm:ss", timezone="GMT+8") + private Date prizeEndTime; + + /** + * 客服微信 + */ + + @ApiModelProperty(value ="客服微信") + private String wechatImg; + + /** + * 积分数量 + */ + + + @ApiModelProperty(value ="积分数量") + private int scoreCnt; + + /** + * 优惠券ID + */ + + @ApiModelProperty(value ="优惠券") + private String couponName; + + @ApiModelProperty(value ="优惠券ID") + private String couponId; + + /** + * 商品ID + */ + + @ApiModelProperty(value ="商品") + private String goodsName; + + @ApiModelProperty(value ="商品ID") + private String goodsId; + + /** + * 活动主表ID + */ + + + @ApiModelProperty(value ="活动主表ID") + private Long activityId; + + /** + * 公司ID + */ + + + @ApiModelProperty(value ="公司ID") + private Long companyId; + +} diff --git a/zq-erp/src/main/java/com/matrix/system/shopXcx/bean/ShopActivities.java b/zq-erp/src/main/java/com/matrix/system/shopXcx/bean/ShopActivities.java index 5cbb9a8..84d0d00 100644 --- a/zq-erp/src/main/java/com/matrix/system/shopXcx/bean/ShopActivities.java +++ b/zq-erp/src/main/java/com/matrix/system/shopXcx/bean/ShopActivities.java @@ -34,6 +34,10 @@ * 活动类型 签到 */ public static final int ACTIVITIES_TYPE_SIGN = 4; + /** + * 活动类型转盘抽奖 + */ + public static final int ACTIVITIES_TYPE_LUCKYDRAW = 5; /** * 活动状态 开启 @@ -86,7 +90,7 @@ private Integer actStatus; //未发布 - public static final int ACTSTATUS_STATUS_RELEASE = 2; + public static final int ACTSTATUS_STATUS_RELEASE = 1; //未开始 public static final int ACTSTATUS_STATUS_READY = 2; //进行中 diff --git a/zq-erp/src/main/resources/mybatis/mapper/activity/ActivitySignAwardSetDao.xml b/zq-erp/src/main/resources/mybatis/mapper/activity/ActivitySignAwardSetDao.xml index 886a2fe..6d8b000 100644 --- a/zq-erp/src/main/resources/mybatis/mapper/activity/ActivitySignAwardSetDao.xml +++ b/zq-erp/src/main/resources/mybatis/mapper/activity/ActivitySignAwardSetDao.xml @@ -15,4 +15,28 @@ and a.award_state = #{awardState} </select> + <select id="selectListByActIDAndCompanyIdAndAwardType" resultType="com.matrix.system.shopXcx.api.vo.ActivitySignAwardSetVo"> + SELECT + * + FROM + activity_sign_award_set a + where + a.activity_id = #{actId} + and a.company_id = #{companyId} + and a.award_state = #{awardState} + and a.award_rule = #{awardRule} + </select> + + <select id="selectActivitySignAwardSetByActIDAndCompanyIdAndAwardType" resultType="com.matrix.system.activity.entity.ActivitySignAwardSet"> + SELECT + * + FROM + activity_sign_award_set a + where + a.activity_id = #{actId} + and a.company_id = #{companyId} + and a.award_state = #{awardState} + and a.award_rule = #{awardRule} + </select> + </mapper> \ No newline at end of file diff --git a/zq-erp/src/main/resources/mybatis/mapper/activity/ActivitySignRecordDao.xml b/zq-erp/src/main/resources/mybatis/mapper/activity/ActivitySignRecordDao.xml index f84a474..140d8ff 100644 --- a/zq-erp/src/main/resources/mybatis/mapper/activity/ActivitySignRecordDao.xml +++ b/zq-erp/src/main/resources/mybatis/mapper/activity/ActivitySignRecordDao.xml @@ -24,4 +24,15 @@ and a.user_id = #{userId} </select> + <select id="selectListByActIdAndUserIdLikesignTime" resultType="com.matrix.system.activity.entity.ActivitySignRecord"> + SELECT + * + FROM + activity_sign_record a + where + a.activity_id = #{actId} + and a.user_id = #{userId} + and a.sign_time like concat('%',DATE(#{format}),'%') +</select> + </mapper> \ No newline at end of file diff --git a/zq-erp/src/main/resources/templates/views/admin/activity/activity-list.html b/zq-erp/src/main/resources/templates/views/admin/activity/activity-list.html index a0a285b..8dfafa6 100644 --- a/zq-erp/src/main/resources/templates/views/admin/activity/activity-list.html +++ b/zq-erp/src/main/resources/templates/views/admin/activity/activity-list.html @@ -88,22 +88,23 @@ <span v-if="scope.row.actType == 2">秒杀</span> <span v-if="scope.row.actType == 3">沙龙</span> <span v-if="scope.row.actType == 4">每日签到</span> + <span v-if="scope.row.actType == 5">转盘抽奖</span> </template> </el-table-column> <el-table-column label="状态"> <template slot-scope="scope"> - <div v-if="scope.row.actType == 4"> + <div v-if="scope.row.actType == 4 || scope.row.actType == 5"> <span v-if="scope.row.actStatus == 1">未发布</span> </div> - <div v-if="scope.row.actType != 4"> + <div v-if="scope.row.actType != 4 && scope.row.actType != 5"> <span v-if="scope.row.actStatus == 1">开启</span> </div> - <div v-if="scope.row.actType == 4"> + <div v-if="scope.row.actType == 4 || scope.row.actType == 5"> <span v-if="scope.row.actStatus == 2">未开始</span> </div> - <div v-if="scope.row.actType != 4"> + <div v-if="scope.row.actType != 4 && scope.row.actType != 5"> <span v-if="scope.row.actStatus == 2">关闭</span> </div> <span v-if="scope.row.actStatus == 3">进行中</span> @@ -133,7 +134,7 @@ </el-table-column> <el-table-column label="操作" width="400"> <template slot-scope="scope"> - <el-row style="display:flex;" v-if="scope.row.actType == 4"> + <el-row style="display:flex;" v-if="[4].includes(scope.row.actType)"> <el-button type="primary" v-if="scope.row.actStatus == 1" size="mini" @click="beReady(scope.row)">发布</el-button> <el-button type="primary" v-if="[1,2,3].includes(scope.row.actStatus)" @click="beUpdate(scope.row)" size="mini">修改</el-button> <el-button type="primary" v-if="scope.row.actStatus == 3" size="mini">推广</el-button> @@ -141,7 +142,15 @@ <el-button type="primary" v-if="scope.row.actStatus == 3" @click="beClose(scope.row)" size="mini">关闭</el-button> <el-button type="danger" v-if="scope.row.actStatus != 5" size="mini" @click="delRow(scope.row)">删除</el-button> </el-row> - <el-row style="display:flex;" v-if="scope.row.actType != 4"> + <el-row style="display:flex;" v-if="[5].includes(scope.row.actType)"> + <el-button type="primary" v-if="scope.row.actStatus == 1" size="mini" @click="beReady(scope.row)">发布</el-button> + <el-button type="primary" v-if="[1,2,3].includes(scope.row.actStatus)" @click="beUpdateLuckdraw(scope.row)" size="mini">修改</el-button> + <el-button type="primary" v-if="scope.row.actStatus == 3" size="mini">推广</el-button> + <el-button type="primary" v-if="[3,4,5].includes(scope.row.actStatus)" @click="openSignReceive(scope.row)" size="mini">活动统计</el-button> + <el-button type="primary" v-if="scope.row.actStatus == 3" @click="beClose(scope.row)" size="mini">关闭</el-button> + <el-button type="danger" v-if="scope.row.actStatus != 5" size="mini" @click="delRow(scope.row)">删除</el-button> + </el-row> + <el-row style="display:flex;" v-if="[1,2,3].includes(scope.row.actType)"> <el-button type="primary" @click="openEdit(scope.row)" size="mini">编辑</el-button> <el-button type="primary" @click="activityStatistics(scope.row)" size="mini">活动统计</el-button> <el-button type="primary" @click="closeAct(scope.row)" size="mini">关闭</el-button> @@ -345,6 +354,17 @@ content : [ basePath + '/admin/redirect/activity/activity-sign-update?actId=' + row.id] })); }, + //修改 + beUpdateLuckdraw(row){ + layer.full(layer.open({ + type: 2, + title: "修改", + maxmin: true, + area: [MUI.SIZE_L, '500px'], + content : [ basePath + '/admin/redirect/activity/activity-luckyDraw-update?actId=' + row.id] + })); + }, + //活动统计 openSignReceive(row){ layer.full(layer.open({ diff --git a/zq-erp/src/main/resources/templates/views/admin/activity/activity-luckyDraw-update.html b/zq-erp/src/main/resources/templates/views/admin/activity/activity-luckyDraw-update.html new file mode 100644 index 0000000..3bea879 --- /dev/null +++ b/zq-erp/src/main/resources/templates/views/admin/activity/activity-luckyDraw-update.html @@ -0,0 +1,1123 @@ +<!DOCTYPE HTML> +<html xmlns:th="http://www.thymeleaf.org" xmlns:matrix="http://www.w3.org/1999/xhtml"> +<head> + <meta charset="utf-8"> + <META HTTP-EQUIV="Pragma" CONTENT="no-cache"> + <meta name="renderer" content="webkit|ie-comp|ie-stand"> + <meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1"> + <meta name="viewport" + content="width=device-width,initial-scale=1,minimum-scale=1.0,maximum-scale=1.0,user-scalable=no"/> + <meta http-equiv="Cache-Control" content="no-siteapp"/> + <!-- 本框架基本脚本和样式 --> + <script type="text/javascript" th:src="@{/js/systools/MBaseVue.js}"></script> + <link rel="stylesheet" th:href="@{/plugin/element-ui/index.css}"> + <link rel="stylesheet" th:href="@{/plugin/bootstrap-3.3.5/css/bootstrap.min.css}"> + <link th:href="@{/css/styleOne/style.min.css}" rel="stylesheet" type="text/css"/> + + <!-- 富文本编辑器 --> + <script type="text/javascript" charset="utf-8" + th:src="@{/plugin/beditor/ueditor.config.js}"></script> + <script type="text/javascript" charset="utf-8" + th:src="@{/plugin/beditor/ueditor.all.js}"> + </script> + <script type="text/javascript" charset="utf-8" + th:src="@{/plugin/beditor/lang/zh-cn/zh-cn.js}"></script> + <style> + + .el-aside { + background-color: #D3DCE6; + color: #333; + text-align: center; + } + .el-main { + background-color: #E9EEF3; + color: #333; + } + body > .el-container { + margin-bottom: 1000px; + } + .button { + padding: 5px; + text-align: center; + } + + .imageOne { + display: block; + height: 50px; + padding: 5px 5px; + text-align: center; + } + .imageTwo { + display: block; + height: 280px; + padding: 5px 5px; + text-align: center; + } + .imageThree { + display: block; + padding: 5px 5px; + text-align: center; + } + + .box-card { + padding: 5px 5px; + } + + </style> +</head> + +<body> +<div class="panel-body" id="app" v-cloak> + <el-form :model="ruleForm" :rules="rules" class="form-horizontal" id="dataform" ref="ruleForm" label-width="120px"> + + <el-container> + <el-aside width="30%"> + <el-card class="box-card" :body-style="{ padding: '10px 10px'}"> + <el-row> + <div @click="uploadImg()" class="imageTwo" > + <img v-if="imageUrlHead" :src="imageUrlHead" style="width: 100%;height: 100%"> + <el-button type="primary" v-show="imageUrlHead == ''" round><span style="font-size: 20px;">头部</span><span style="padding:5px;font-size: 15px;color: red;">(上传图片)</span></span></el-button> + </div> + </el-row> + <el-row style="display:flex;"> + <el-col> + <div style="padding:5px;font-size: 15px;text-align: left;"> + <el-button type="primary" size="mini" round> + <span>拥有积分:</span> + </el-button> + </div> + </el-col> + <el-col> + <div style="padding:5px;font-size: 15px;text-align: right;"> + <el-button type="primary" size="mini" round> + <span>抽奖记录</span> + </el-button> + </div> + </el-col> + </el-row> + + <el-row> + <div @click="uploadImg()" class="imageThree" > + <el-button type="primary" v-show="imageUrlButton == ''" round><span style="font-size: 20px;">签到按钮</span><span style="padding:5px;font-size: 15px;color: red;">(上传图片)</span></span></el-button> + <img v-if="imageUrlButton" :src="imageUrlButton" style="width: 100%;"> + </div> + </el-row> + + + <el-row> + <div style="text-align: center;padding: 5px;" @click="gzsmSet()"> + <div class="col-sm-8 col-sm-offset-2" style="text-align: left;"> + <span style="padding:5px;font-size: 30px;">-- 规则说明--</span> + </div> + <div class="el-col-sm-24" style="text-align: center;"> + <span style="padding:5px;font-size: 15px;color: red;">(点击,编辑规则内容,背景颜色,字体颜色、大小、透明度)</span> + </div> + <div class="col-sm-8 col-sm-offset-2" style="text-align: left;"> + <span style="padding:5px;font-size: 15px;">1、每天参与签到可获得积分换取抽奖机会</span> + </div> + <div class="col-sm-8 col-sm-offset-2" style="text-align: left;"> + <span style="padding:5px;font-size: 15px;">2、每天参与签到可获得积分换取抽奖机会</span> + </div> + <div class="col-sm-8 col-sm-offset-2" style="text-align: left;"> + <span style="padding:5px;font-size: 15px;">3、每天参与签到可获得积分换取抽奖机会</span> + </div> + </div> + </el-row> + </el-card> + </el-aside> + + <el-main width="70%"> + <div> + <el-tabs v-model="activeName" @tab-click="clickSecondTab"> + <el-tab-pane label="活动设置" name="first"> + <div class="col-sm-8 col-sm-offset-1" style="padding: 10px"> + <el-form-item label="活动名称" prop="actName"> + <el-input v-model="ruleForm.actName" placeholder="请输入活动名称"></el-input> + </el-form-item> + </div> + <div class="col-sm-8 col-sm-offset-1" style="padding: 10px"> + <el-form-item label="活动编码" prop="actCode"> + <el-input v-model.number="ruleForm.actCode" placeholder="请输入最大开团数量"></el-input> + </el-form-item> + </div> + <div class="col-sm-4 col-sm-offset-1" style="padding: 10px"> + <el-form-item label="活动时间" prop="actTime"> + <div class="block"> + <el-date-picker + v-model="ruleForm.actTime" + type="daterange" + range-separator="至" + start-placeholder="开始日期" + end-placeholder="结束日期"> + </el-date-picker> + </div> + </el-form-item> + </div> + <div class="col-sm-8 col-sm-offset-1" style="padding: 10px"> + <p class="el-big-title" style="text-align: left;">抽奖规则</p> + </div> + <div class="col-sm-8 col-sm-offset-1" style="padding: 10px"> + <el-form-item label="每日抽奖机会"> + <el-form-item label="每人每日有" prop="wmkcjjh"> + <el-input-number v-model="ruleForm.wmkcjjh" :min="1" :max="10" label="描述文字"></el-input-number> 次无门槛抽奖机会 + </el-form-item> + </el-form-item> + <el-form-item> + <el-form-item label="可用" prop="dhycjfs"> + <el-input-number v-model="ruleForm.dhycjfs" :min="1" :max="200" label="描述文字"></el-input-number> 积分兑换1次抽奖机会,每日最多兑换 + </el-form-item> + </el-form-item> + <el-form-item> + <el-form-item label="每日最多兑换" prop="jfdhcs"> + <el-input-number v-model="ruleForm.jfdhcs" :min="1" :max="10" label="描述文字"></el-input-number> 次抽奖机会 + </el-form-item> + </el-form-item> + </div> + <div class="col-sm-8 col-sm-offset-1" style="padding: 10px"> + <el-form-item label="中奖概率"> + <el-form-item label="每人最多中奖" prop="zzjcs"> + <el-input-number v-model="ruleForm.zzjcs" :min="1" :max="100" label="描述文字"></el-input-number> 次 + </el-form-item> + </el-form-item> + <el-form-item> + <el-form-item label="总中奖率" prop="zzjl"> + <el-input-number v-model="ruleForm.zzjl" :min="1" :max="100" label="描述文字"></el-input-number> % + </el-form-item> + </el-form-item> + </div> + </el-tab-pane> + + <el-tab-pane label="奖品设置" name="second"> + <el-row style="display:flex;"> + <el-col :span="20"> + <el-tabs v-model="editableTabsValue" type="card" closable @tab-click="clickTab" @tab-remove="removeTab"> + <el-tab-pane v-for="(item, index) in editableTabs" :key="item.name" :label="item.title" :name="item.name"> + <el-row v-show="editableTabsValue !== '1'"> + </el-row> + <el-row > + <el-col> + <el-form-item label="奖项名称"> + <el-input v-model="item.content.awardName" placeholder="奖项名称"></el-input> + </el-form-item> + </el-col> + </el-row> + <el-row > + <el-col> + <el-form-item label="图片介绍"> + <el-upload + action="/admin/multipleUploadFile/doUpload" + :show-file-list="false" + :on-success="introduceImgSuccess"> + <img v-if="item.content.introduceImg" :src="item.content.introduceImg" style="max-width: 200px;"> + </el-upload> + </el-form-item> + </el-col> + </el-row> + <div v-show="item.name !== '1'"> + <el-row> + <el-form-item label="奖项类型"> + <el-col> + <el-radio-group v-model="item.content.awardType" @change="jxlxChange"> + <el-radio :label="1">自定义奖品</el-radio> + <el-radio :label="2">积分</el-radio> + <el-radio :label="3">优惠券</el-radio> + <el-radio :label="4">商品</el-radio> + </el-radio-group> + </el-col> + </el-form-item > + </el-row> + + <div> + <el-row style="display:flex;"> + <el-col> + <el-form-item label="奖项库存"> + <el-input v-model="item.content.awardInventoryCnt" oninput ="value=value.replace(/[^0-9.]/g,'')"></el-input> + </el-form-item> + </el-col> + <el-col> + <el-form-item label="已派发"> + <el-input v-model="item.content.awardDistributeCnt"></el-input> + </el-form-item> + </el-col> + </el-row> + </div> + <div v-show="item.content.awardType === 1"> + <el-row > + <el-col> + <el-form-item label="文字介绍"> + <el-input type="textarea" v-model="item.content.introduceTip"></el-input> + </el-form-item> + </el-col> + </el-row> + <el-row > + <el-col> + <el-form-item label="兑奖方式"> + <el-col> + <el-radio-group v-model="item.content.awardWay" @change="awardWayChange"> + <el-radio :label="'1'">线下兑换</el-radio> + <el-radio :label="'2'">物流配送</el-radio> + <el-radio :label="'3'">客服兑换</el-radio> + </el-radio-group> + </el-col> + </el-form-item > + </el-col> + </el-row> + <el-row > + <el-col> + <el-form-item label="操作提示"> + <el-input v-model="item.content.operationTip"></el-input> + </el-form-item> + </el-col> + </el-row> + <div v-show="item.content.awardWay === '1'"> + <el-row > + <el-col> + <el-form-item label="兑奖地址"> + <el-input v-model="item.content.prizeAddress"></el-input> + </el-form-item> + </el-col> + </el-row> + + </div> + <div v-show="item.content.awardWay === '3'"> + <el-row > + <el-col> + <el-form-item label="客服微信"> + <el-upload + action="/admin/multipleUploadFile/doUpload" + :show-file-list="false" + :on-success="wechatImgSuccess"> + <img v-if="item.content.wechatImg" :src="item.content.wechatImg" style="max-width: 200px;"> + </el-upload> + </el-form-item> + </el-col> + </el-row> + </div> + <div v-show="[1,3].includes(item.content.awardWay)"> + <el-row > + <el-col> + <el-form-item label="客服电话"> + <el-input v-model="item.content.customerPhone"></el-input> + </el-form-item> + </el-col> + </el-row> + </div> + <div v-show="item.content.awardWay !== '2'"> + <el-row > + <el-col> + <el-form-item label="兑奖期限"> + <div class="block"> + <el-date-picker + v-model="item.content.prizeTime" + type="daterange" + range-separator="至" + start-placeholder="开始日期" + end-placeholder="结束日期"> + </el-date-picker> + </div> + </el-form-item> + </el-col> + </el-row> + </div> + </div> + <div v-show="item.content.awardType === 2"> + <el-row > + <el-col> + <el-form-item label="积分数量"> + <el-input v-model="item.content.scoreCnt" oninput ="value=value.replace(/[^0-9.]/g,'')"></el-input> + </el-form-item> + </el-col> + </el-row> + </div> + <div v-show="item.content.awardType === 3"> + <el-row style="display:flex;"> + <el-col> + <el-form-item label="优惠券名称"> + <el-input v-model="item.content.couponName"></el-input> + </el-form-item> + </el-col> + <el-col> + <el-form-item label="优惠券"> + <el-input v-model="item.content.couponId"></el-input> + </el-form-item> + </el-col> + <el-col> + <el-button type="primary" @click="chooseCoupon(item.content.couponName,item.name)"> + 选择优惠券 + </el-button> + </el-col> + </el-row> + + <el-drawer + title="选择商城优惠券" + :visible.sync="drawerCoupon" + :direction="directionCoupon" + size="90%"> + <el-row style="margin-left: 50px;"> + <el-col :span="24"> + <el-row> + <el-form ref="formCoupon" :model="formCoupon" inline > + <el-form-item prop="yhjmc"> + <el-input v-model="formCoupon.yhjmc" placeholder="请输入优惠券名称"></el-input> + </el-form-item> + <el-button type="primary" @click="searchFormCoupon" >搜索</el-button> + <el-button @click="resetFormCoupon('formCoupon')">重置</el-button> + </el-form> + </el-row> + + <el-row class="table-style" > + <el-table ref="multipleTable" + :data="couponList.rows" + :height="tableHeightCoupon" + stripe:true + style="width: 100%"> + <el-table-column + prop="cname" + label="优惠券名称" + show-overflow-tooltip> + </el-table-column> + <el-table-column + prop="endTime" + label="截止日期" + show-overflow-tooltip> + </el-table-column> + <el-table-column + prop="address" + label="操作"> + <template slot-scope="scope"> + <el-button type="primary" + size="mini" + @click="chooseOneCoupon(scope.row)">选择 + </el-button> + </template> + </el-table-column> + </el-table> + </el-row> + <el-row class="paginationStyle" > + <el-pagination background + @size-change="changePageSizeCoupon" + @current-change="changeCurrentPageCoupon" + :current-page="couponList.currentPage" + :page-sizes="[10, 20, 30, 50]" + :page-size="couponList.pageSize" + layout="total, sizes, prev, pager, next, jumper" + :total="couponList.total"> + </el-pagination> + </el-row> + </el-col> + </el-row> + </el-drawer> + </div> + <div v-show="item.content.awardType === 4"> + <el-row style="display:flex;"> + <el-col> + <el-form-item label="品项名称"> + <el-input v-model="item.content.goodsName"></el-input> + </el-form-item> + </el-col> + <el-col> + <el-form-item label="品项"> + <el-input v-model="item.content.goodsId"></el-input> + </el-form-item> + </el-col> + <el-col> + <el-button type="primary" @click="chooseGoods(item.content.goodsName,item.name)"> + 选择品项 + </el-button> + </el-col> + </el-row> + + <el-drawer + title="选择ERP产品" + :visible.sync="drawerGoods" + :direction="directionGoods" + size="90%"> + <el-row style="margin-left: 50px;"> + <el-col :span="24"> + <el-row> + <el-form ref="formGoods" :model="formGoods" inline > + <el-form-item prop="cpmc"> + <el-input v-model="formGoods.cpmc" placeholder="请输入产品名称"></el-input> + </el-form-item> + <el-button type="primary" @click="searchFormGoods" >搜索</el-button> + <el-button @click="resetFormGoods('formGoods')">重置</el-button> + </el-form> + </el-row> + + <el-row class="table-style" > + <el-table ref="multipleTable" + :data="goodsList.rows" + :height="tableHeightGoods" + stripe:true + style="width: 100%"> + <el-table-column + prop="name" + label="名称" + show-overflow-tooltip> + </el-table-column> + <el-table-column + prop="address" + label="操作"> + <template slot-scope="scope"> + <el-button type="primary" + size="mini" + @click="chooseOneGoods(scope.row)">选择 + </el-button> + </template> + </el-table-column> + </el-table> + </el-row> + <el-row class="paginationStyle" > + <el-pagination background + @size-change="changePageSizeGoods" + @current-change="changeCurrentPageGoods" + :current-page="goodsList.currentPage" + :page-sizes="[10, 20, 30, 50]" + :page-size="goodsList.pageSize" + layout="total, sizes, prev, pager, next, jumper" + :total="goodsList.total"> + </el-pagination> + </el-row> + </el-col> + </el-row> + </el-drawer> + </div> + </div> + </el-tab-pane> + </el-tabs> + </el-col> + <el-col :span="4"> + <el-button type="primary" @click="addTab(editableTabsValue)"> + 新增奖品 + </el-button> + </el-col> + </el-row> + </el-tab-pane> + + <el-tab-pane label="背景图片上传" name="third"> + <!--<div class="col-sm-8 col-sm-offset-1" style="padding: 10px"> + <el-form-item label="标题"> + <el-upload + action="/admin/multipleUploadFile/doUpload" + :show-file-list="false" + :on-success="imageUrlTitleSuccess"> + <img v-if="imageUrlTitle" :src="imageUrlTitle" style="max-width: 300px;"> + </el-upload> + </el-form-item> + </div>--> + <div class="col-sm-8 col-sm-offset-1" style="padding: 10px"> + <el-form-item label="头部"> + <el-upload + action="/admin/multipleUploadFile/doUpload" + :show-file-list="false" + :on-success="imageUrlHeadSuccess"> + <img v-if="imageUrlHead" :src="imageUrlHead" style="max-width: 300px;"> + </el-upload> + </el-form-item> + </div> + <div class="col-sm-8 col-sm-offset-1" style="padding: 10px"> + <el-form-item label="开始按钮"> + <el-upload + action="/admin/multipleUploadFile/doUpload" + :show-file-list="false" + :on-success="imageUrlTitleSuccess"> + <img v-if="imageUrlTitle" :src="imageUrlTitle" style="max-width: 300px;"> + </el-upload> + </el-form-item> + </div> + <div class="col-sm-8 col-sm-offset-1" style="padding: 10px"> + <el-form-item label="奖品划分线"> + <el-upload + action="/admin/multipleUploadFile/doUpload" + :show-file-list="false" + :on-success="imageLineSuccess"> + <img v-if="imageLine" :src="imageLine" style="max-width: 300px;"> + </el-upload> + </el-form-item> + </div> + + <div class="col-sm-8 col-sm-offset-1" style="padding: 10px"> + <el-form-item label="转盘背景"> + <el-upload + action="/admin/multipleUploadFile/doUpload" + :show-file-list="false" + :on-success="imageUrlButtonSuccess"> + <img v-if="imageUrlButton" :src="imageUrlButton" style="max-width: 300px;"> + <i v-else></i> + </el-upload> + </el-form-item> + </div> + </el-tab-pane> + + <el-tab-pane label="规则说明" name="fourth"> + <div class="col-sm-8 col-sm-offset-1"> + <el-form-item label="规则内容" prop="ruleExplain" style="padding: 10px"> + <el-input type="textarea" v-model="ruleForm.ruleExplain"></el-input> + </el-form-item> + <el-form-item label="背景颜色" style="padding: 10px"> + <el-color-picker v-model="backgroundColor"></el-color-picker> + </el-form-item> + <el-form-item label="字体颜色" style="padding: 10px"> + <el-color-picker v-model="typographyColor"></el-color-picker> + </el-form-item> + <el-form-item label="字体大小" style="padding: 10px"> + <el-input-number v-model="typographyNum" :min="10" :max="50" label="描述文字"></el-input-number> + </el-form-item> + <!--<el-form-item label="字体透明度" style="padding: 10px"> + <el-input-number v-model="typographyLight" :min="1" :max="100" label="描述文字">%</el-input-number> + </el-form-item>--> + </div> + </el-tab-pane> + </el-tabs> + </div> + + <div class="form-group "> + <div class="col-sm-12 text-center"> + <el-button type="primary" @click="updateSignAwardSet('ruleForm')">保存</el-button> + <el-button type="danger" @click="cancelSubmit">关闭</el-button> + </div> + </div> + </el-main> + + </el-container> + + </el-form> +</div> +</body> +<script type="text/javascript" th:src="@{/js/plugin/jquery-2.1.4.min.js}"></script> +<script type="text/javascript" th:src="@{/js/plugin/jquery.query.js}"></script> +<script type="text/javascript" th:src="@{/plugin/bootstrap-3.3.5/js/bootstrap.min.js}"></script> +<script type="text/javascript" th:src="@{/js/systools/AjaxProxyVue.js}"></script> +<script type="text/javascript" th:src="@{/js/plugin/vue.js}"></script> +<script type="text/javascript" th:src="@{/plugin/element-ui/index.js}"></script> +<script type="text/javascript" th:src="@{/js/systools/MJsBase.js}"></script> +<script type="text/javascript" th:src="@{/plugin/layer/layer.js}"></script> +<script type="text/javascript" th:src="@{/plugin/moment.min.js}"></script> + +<script> + //获取传输的活动对象 + var actId = $.query.get("actId"); + const prize = { + //奖品基本信息 + id:'', + cumulativeDay:'', + awardType:1, + awardName:'', + introduceImg:'', + introduceTip:'', + awardInventoryCnt:'', + awardDistributeCnt:'', + awardWay:1, + operationTip:'', + prizeAddress:'', + prizeTime: '', + wechatImg:'', + scoreCnt:'', + couponId:'', + customerPhone:'', + goodsId:'', + couponName:'', + goodsName:'', + } + var app = new Vue({ + el: '#app', + data: { + activeName: 'first', + formLabelWidth: '120px', + //标题图片 + imageUrlTitle: '', + imageLine: '', + imageUrlHead: "../../../images/sign/signHead.png", + imageUrlButton: "../../../images/sign/signButton.png", + + activeClickTab:0, + + //优惠券搜索弹出 + drawerCoupon: false, + directionCoupon: 'rtl', + tableHeightCoupon: 500, + //--优惠券 + formCoupon:{ + yhjmc:'', + order:'', + sort:'' + }, + couponList:{ + rows:[], + total:0, + pageSize:10, + currentPage:1, + }, + + //品项搜索弹出 + drawerGoods: false, + directionGoods: 'rtl', + tableHeightGoods: 500, + //--品项 + formGoods:{ + cpmc:'', + order:'', + sort:'' + }, + goodsList:{ + rows:[], + total:0, + pageSize:10, + currentPage:1, + }, + + //字体颜色 + typographyColor: '#409EFF', + //背景颜色 + backgroundColor: '#409EFF', + //字体大小 + typographyNum: '5', + //字体透明度 + typographyLight: '50', + //奖品设置 + prize:JSON.parse(JSON.stringify(prize)), + editableTabsValue: '1', + editableTabs: [{ + title: '谢谢参与', + name: '1', + content: JSON.parse(JSON.stringify(prize)) + }], + tabIndex: 1, + + ruleForm : { + //商品基本信息 + actName : '', + actCode : '', + actTime : '', + //抽奖规则 + wmkcjjh : '5', + dhycjfs : '20', + jfdhcs : '10', + zzjcs : '5', + zzjl : '10', + //规则说明 + ruleExplain : '', + }, + rules : { + //商品基本信息 + actName : [ + { required: true, message: '请输入活动名称', trigger: 'blur' } + ], + actCode : [ + { required: true, message: '请输入活动编码', trigger: 'blur' } + ], + actTime : [ + { required: true, message: '请选择日期', trigger: 'change' } + ], + wmkcjjh : [ + { required: true, message: '请输入1到10的数字', trigger: 'blur' } + ], + dhycjfs : [ + { required: true, message: '请输入1到200的数字', trigger: 'blur' } + ], + jfdhcs : [ + { required: true, message: '请输入1到10的数字', trigger: 'blur' } + ], + zzjcs : [ + { required: true, message: '请输入1到100的数字', trigger: 'blur' } + ], + zzjl : [ + { required: true, message: '请输入1到100的数字', trigger: 'blur' } + ], + ruleExplain : [ + { required: true, message: '请输入规则内容', trigger: 'blur' } + ] + }, + }, + created: function () { + this.loadInfo(); + }, + methods: { + //选择优惠券 + chooseCoupon(val,name){ + let _this = this; + _this.drawerCoupon = true; + _this.activeClickTab = parseInt(name); + + console.log(_this.activeClickTab); + _this.formCoupon.yhjmc = val; + _this.loadCouponList(); + }, + //--优惠券 + loadCouponList() { + let _this = this; + let data=_this.getRequestParamCoupon(); + data.pageSize=_this.couponList.pageSize; + data.pageNum=_this.couponList.currentPage; + AjaxProxy.requst({ + app: _this, + data:data, + url: basePath + '/admin/activitySignAwardSet/selectCouponList', + callback: function (data) { + _this.couponList.rows = data.rows; + _this.couponList.total = data.total; + } + }); + }, + //查询参数 + getRequestParamCoupon(){ + let _this = this; + return { + yhjmc:_this.formCoupon.yhjmc, + order:_this.formCoupon.order, + sort:_this.formCoupon.sort, + } + }, + //查询 + searchFormCoupon:function(){ + this.couponList.currentPage=1; + this.loadCouponList(); + }, + //重置 + resetFormCoupon(formName) { + (this.$refs[formName])[0].resetFields(); + }, + changePageSizeCoupon(val) { + this.couponList.pageSize = val; + this.loadCouponList(); + }, + changeCurrentPageCoupon(val) { + this.couponList.currentPage = val; + this.loadCouponList(); + }, + //选择 + chooseOneCoupon(row) { + let _this = this; + _this.editableTabs[_this.activeClickTab-1].content.couponId = row.id; + _this.editableTabs[_this.activeClickTab-1].content.couponName = row.cname; + _this.drawerCoupon = false; + }, + + //选择品项 + chooseGoods(val,name){ + let _this = this; + _this.drawerGoods = true; + _this.activeClickTab = parseInt(name); + _this.formGoods.cpmc = val; + _this.loadGoodsList(); + }, + //--品项 + loadGoodsList() { + let _this = this; + let data=_this.getRequestParamGoods(); + data.pageSize=_this.goodsList.pageSize; + data.pageNum=_this.goodsList.currentPage; + AjaxProxy.requst({ + app: _this, + data:data, + url: basePath + '/admin/activitySignAwardSet/selectGoodsList', + callback: function (data) { + _this.goodsList.rows = data.rows; + _this.goodsList.total = data.total; + } + }); + }, + //查询参数 + getRequestParamGoods(){ + let _this = this; + return { + cpmc:_this.formCoupon.cpmc, + order:_this.formCoupon.order, + sort:_this.formCoupon.sort, + } + }, + //查询 + searchFormGoods:function(){ + this.goodsList.currentPage=1; + this.loadGoodsList(); + }, + //重置 + resetFormGoods(formName) { + (this.$refs[formName])[0].resetFields(); + }, + changePageSizeGoods(val) { + this.goodsList.pageSize = val; + this.loadGoodsList(); + }, + changeCurrentPageGoods(val) { + this.goodsList.currentPage = val; + this.loadGoodsList(); + }, + //选择 + chooseOneGoods(row) { + let _this = this; + _this.editableTabs[_this.activeClickTab-1].content.goodsId = row.id; + _this.editableTabs[_this.activeClickTab-1].content.goodsName = row.name; + _this.drawerGoods = false; + }, + + //加载活动详情 + loadInfo() { + let _this = this; + _this.loadSign(); + }, + loadSign() { + let _this = this; + let data={ + actId:actId, + }; + AjaxProxy.requst({ + app: _this, + data:data, + url: basePath + '/admin/activitySignAwardSet/findLuckyDrawForUpdate', + callback: function (data) { + _this.ruleForm.actName = data.mapInfo.addLuckyDrawSetVo.actName; + _this.ruleForm.actCode = data.mapInfo.addLuckyDrawSetVo.actCode; + let arrayObj = new Array(); + arrayObj.push(new Date(data.mapInfo.addLuckyDrawSetVo.beginTime)); + arrayObj.push(new Date(data.mapInfo.addLuckyDrawSetVo.endTime)); + _this.ruleForm.actTime = arrayObj; + //抽奖规则 + _this.ruleForm.wmkcjjh = data.mapInfo.addLuckyDrawSetVo.luckyDrawBasicJsonVo.wmkcjjh; + _this.ruleForm.dhycjfs = data.mapInfo.addLuckyDrawSetVo.luckyDrawBasicJsonVo.dhycjfs; + _this.ruleForm.jfdhcs = data.mapInfo.addLuckyDrawSetVo.luckyDrawBasicJsonVo.jfdhcs; + _this.ruleForm.zzjcs = data.mapInfo.addLuckyDrawSetVo.luckyDrawBasicJsonVo.zzjcs; + _this.ruleForm.zzjl = data.mapInfo.addLuckyDrawSetVo.luckyDrawBasicJsonVo.zzjl; + //字体颜色 + _this.ruleForm.ruleExplain = data.mapInfo.addLuckyDrawSetVo.luckyDrawBasicJsonVo.ruleExplain; + _this.typographyColor = data.mapInfo.addLuckyDrawSetVo.luckyDrawBasicJsonVo.typographyColor; + _this.backgroundColor = data.mapInfo.addLuckyDrawSetVo.luckyDrawBasicJsonVo.backgroundColor; + _this.typographyNum = data.mapInfo.addLuckyDrawSetVo.luckyDrawBasicJsonVo.typographyNum; + _this.typographyLight = data.mapInfo.addLuckyDrawSetVo.luckyDrawBasicJsonVo.typographyLight; + _this.imageUrlTitle = data.mapInfo.addLuckyDrawSetVo.luckyDrawBasicJsonVo.imageUrlTitle; + _this.imageUrlHead = data.mapInfo.addLuckyDrawSetVo.luckyDrawBasicJsonVo.imageUrlHead; + _this.imageUrlButton = data.mapInfo.addLuckyDrawSetVo.luckyDrawBasicJsonVo.imageUrlButton; + _this.imageUrlState = data.mapInfo.addLuckyDrawSetVo.luckyDrawBasicJsonVo.imageUrlState; + _this.imageLine = data.mapInfo.addLuckyDrawSetVo.luckyDrawBasicJsonVo.imageLine; + + for (let i = 0; i < data.mapInfo.addLuckyDrawSetVo.activityluckyDrawSets.length; i++) { + _this.tabIndex = data.mapInfo.addLuckyDrawSetVo.activityluckyDrawSets.length; + let prizeVo = data.mapInfo.addLuckyDrawSetVo.activityluckyDrawSets[i]; + let arrayObjs = new Array(); + arrayObjs.push(new Date(prizeVo.prizeStartTime)); + arrayObjs.push(new Date(prizeVo.prizeEndTime)); + let content = JSON.parse(JSON.stringify(prize)); + content = { + id: prizeVo.id, + cumulativeDay: prizeVo.cumulativeDay, + awardType: parseInt(prizeVo.awardType), + awardName: prizeVo.awardName, + introduceImg: prizeVo.introduceImg, + customerPhone: prizeVo.customerPhone, + introduceTip: prizeVo.introduceTip, + awardInventoryCnt: prizeVo.awardInventoryCnt, + awardDistributeCnt: prizeVo.awardDistributeCnt, + awardWay: parseInt(prizeVo.awardWay), + operationTip: prizeVo.operationTip, + prizeAddress: prizeVo.prizeAddress, + wechatImg: prizeVo.wechatImg, + scoreCnt: prizeVo.scoreCnt, + couponId: prizeVo.couponId, + goodsId: prizeVo.goodsId, + couponName: prizeVo.couponName, + goodsName: prizeVo.goodsName, + prizeTime: arrayObjs, + } + if(i === 0){ + _this.editableTabs[0].content = content; + }else{ + let newTabName = i+1 +''; + _this.editableTabs.push({ + title: "商品奖励"+"("+newTabName+")", + name: newTabName, + content: content, + }); + this.editableTabsValue = newTabName; + } + } + } + }); + }, + //保存 + updateSignAwardSet : function(formName) { + const _this = this; + let flag = false; + _this.$refs[formName].validate((valid) => { + if (!valid) { + _this.$notify({ + title: '提示', + message: '请完善转盘抽奖活动信息', + type: 'warning' + }); + flag = true; + return; + } + }); + if (flag) { + return; + } + //活动基本信息 + let luckyDrawBasicJsonDto = { + ruleExplain: _this.ruleForm.ruleExplain, + //字体颜色 + typographyColor: _this.typographyColor, + //背景颜色 + backgroundColor: _this.backgroundColor, + //字体大小 + typographyNum: _this.typographyNum, + //标题图片 + imageUrlTitle: _this.imageUrlTitle, + imageLine: _this.imageLine, + imageUrlHead: _this.imageUrlHead, + imageUrlButton: _this.imageUrlButton, + //抽奖规则 + wmkcjjh: _this.ruleForm.wmkcjjh, + dhycjfs: _this.ruleForm.dhycjfs, + jfdhcs: _this.ruleForm.jfdhcs, + zzjcs: _this.ruleForm.zzjcs, + zzjl: _this.ruleForm.zzjl, + } + //奖品信息 + let activityAwardSets = []; + for (let i = 0; i < _this.editableTabs.length; i++) { + let prize = _this.editableTabs[i].content; + let name = _this.editableTabs[i].title; + let awardRule = 2; + if(name == "谢谢参与"){ + awardRule = 1; + } + let activitySignAwardSet = { + id: prize.id, + cumulativeDay: prize.cumulativeDay, + awardRule: awardRule, + awardType: prize.awardType, + awardName: prize.awardName, + introduceImg: prize.introduceImg, + introduceTip: prize.introduceTip, + awardInventoryCnt: prize.awardInventoryCnt, + awardDistributeCnt: prize.awardDistributeCnt, + awardWay: prize.awardWay, + operationTip: prize.operationTip, + customerPhone: prize.customerPhone, + prizeAddress: prize.prizeAddress, + wechatImg: prize.wechatImg, + scoreCnt: prize.scoreCnt, + couponId: prize.couponId, + goodsId: prize.goodsId, + couponName: prize.couponName, + goodsName: prize.goodsName, + prizeStartTime: prize.prizeTime[0], + prizeEndTime: prize.prizeTime[1], + } + activityAwardSets.push(activitySignAwardSet); + } + let resultData = { + actMainId: actId, + actName: _this.ruleForm.actName, + actCode: _this.ruleForm.actCode, + beginTime : _this.ruleForm.actTime[0], + endTime : _this.ruleForm.actTime[1], + luckyDrawBasicJsonDto, + activityAwardSets, + } + AjaxProxy.requst({ + app: _this, + data: resultData, + url: basePath + '/admin/activitySignAwardSet/updateLuckyDrawSet', + callback: function (data) { + _this.$message({ + message: data.info, + type: 'success', + }); + } + }); + }, + //奖品设置 + addTab(targetName) { + let newTabName = ++this.tabIndex + ''; + this.editableTabs.push({ + title: "转盘奖品"+"("+newTabName+")", + name: newTabName, + content: JSON.parse(JSON.stringify(prize)), + }); + this.editableTabsValue = newTabName; + this.activeClickTab = parseInt(newTabName); + }, + clickSecondTab(targetName) { + this.activeClickTab = 1; + }, + clickTab(targetName) { + console.log(targetName.name); + this.activeClickTab = parseInt(targetName.name); + }, + removeTab(targetName) { + let tabs = this.editableTabs; + let activeName = this.editableTabsValue; + if(activeName === '1' || targetName === '1'){ + this.$notify({ + title: '提示', + message: '【谢谢参与】不能删除', + type: 'warning' + }); + }else{ + if (activeName === targetName) { + tabs.forEach((tab, index) => { + if (tab.name === targetName && tab.title !== "谢谢参与") { + let nextTab = tabs[index + 1] || tabs[index - 1]; + if (nextTab) { + activeName = nextTab.name; + } + } + }); + } + this.editableTabsValue = activeName; + this.editableTabs = tabs.filter(tab => tab.name !== targetName); + this.tabIndex = this.editableTabs.length; + } + }, + //切换奖项类型,显示不同内容 + jxlxChange(val){ + let _this = this; + _this.isShow=val; + }, + //切换兑奖方式,显示不同内容 + awardWayChange(val){ + let _this = this; + _this.isShow=val; + }, + //跳转到图片上传 + uploadImg(){ + this.activeName = 'third'; + }, + //跳转到规则说明 + gzsmSet(){ + this.activeName = 'fourth'; + }, + //标题图片 + imageUrlTitleSuccess(res, file) { + this.imageUrlTitle = res.path; + }, + imageLineSuccess(res, file) { + this.imageLine = res.path; + }, + imageUrlHeadSuccess(res, file) { + this.imageUrlHead = res.path; + }, + imageUrlButtonSuccess(res, file) { + this.imageUrlButton = res.path; + }, + //奖品设置的图片介绍 + introduceImgSuccess(res, file) { + this.editableTabs[this.activeClickTab-1].content.introduceImg = res.path; + }, + //奖品设置的客服微信 + wechatImgSuccess(res, file) { + this.editableTabs[this.activeClickTab-1].content.wechatImg = res.path; + }, + cancelSubmit() { + this.closeFrame(); + }, + closeFrame() { + parent.layer.close(parent.layer.getFrameIndex(window.name)); + }, + } + }) +</script> + +</body> +</html> \ No newline at end of file diff --git a/zq-erp/src/main/resources/templates/views/admin/activity/activity-luckyDraw.html b/zq-erp/src/main/resources/templates/views/admin/activity/activity-luckyDraw.html new file mode 100644 index 0000000..90abbfc --- /dev/null +++ b/zq-erp/src/main/resources/templates/views/admin/activity/activity-luckyDraw.html @@ -0,0 +1,1034 @@ +<!DOCTYPE HTML> +<html xmlns:th="http://www.thymeleaf.org" xmlns:matrix="http://www.w3.org/1999/xhtml"> +<head> + <meta charset="utf-8"> + <META HTTP-EQUIV="Pragma" CONTENT="no-cache"> + <meta name="renderer" content="webkit|ie-comp|ie-stand"> + <meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1"> + <meta name="viewport" + content="width=device-width,initial-scale=1,minimum-scale=1.0,maximum-scale=1.0,user-scalable=no"/> + <meta http-equiv="Cache-Control" content="no-siteapp"/> + <!-- 本框架基本脚本和样式 --> + <script type="text/javascript" th:src="@{/js/systools/MBaseVue.js}"></script> + <link rel="stylesheet" th:href="@{/plugin/element-ui/index.css}"> + <link rel="stylesheet" th:href="@{/plugin/bootstrap-3.3.5/css/bootstrap.min.css}"> + <link th:href="@{/css/styleOne/style.min.css}" rel="stylesheet" type="text/css"/> + + <!-- 富文本编辑器 --> + <script type="text/javascript" charset="utf-8" + th:src="@{/plugin/beditor/ueditor.config.js}"></script> + <script type="text/javascript" charset="utf-8" + th:src="@{/plugin/beditor/ueditor.all.js}"> + </script> + <script type="text/javascript" charset="utf-8" + th:src="@{/plugin/beditor/lang/zh-cn/zh-cn.js}"></script> + <style> + + .paginationStyle{ + background: #ffffff; + padding: 10px 10px; + margin: 0px 0px 10px 0px; + text-align: right; + } + + .el-aside { + background-color: #D3DCE6; + color: #333; + text-align: center; + } + .el-main { + background-color: #E9EEF3; + color: #333; + } + body > .el-container { + margin-bottom: 1000px; + } + .button { + padding: 5px; + text-align: center; + } + + .imageOne { + display: block; + height: 50px; + padding: 5px 5px; + text-align: center; + } + .imageTwo { + display: block; + height: 280px; + padding: 5px 5px; + text-align: center; + } + .imageThree { + display: block; + padding: 5px 5px; + text-align: center; + } + + .box-card { + padding: 5px 5px; + } + + </style> +</head> + +<body> +<div class="panel-body" id="app" v-cloak> + <el-form :model="ruleForm" :rules="rules" class="form-horizontal" id="dataform" ref="ruleForm" label-width="120px"> + + <el-container> + <el-aside width="30%"> + <el-card class="box-card" :body-style="{ padding: '10px 10px'}"> + <el-row> + <div @click="uploadImg()" class="imageTwo" > + <img v-if="imageUrlHead" :src="imageUrlHead" style="width: 100%;height: 100%"> + <el-button type="primary" v-show="imageUrlHead == ''" round><span style="font-size: 20px;">头部</span><span style="padding:5px;font-size: 15px;color: red;">(上传图片)</span></span></el-button> + </div> + </el-row> + <el-row style="display:flex;"> + <el-col> + <div style="padding:5px;font-size: 15px;text-align: left;"> + <el-button type="primary" size="mini" round> + <span>拥有积分:</span> + </el-button> + </div> + </el-col> + <el-col> + <div style="padding:5px;font-size: 15px;text-align: right;"> + <el-button type="primary" size="mini" round> + <span>抽奖记录</span> + </el-button> + </div> + </el-col> + </el-row> + + <el-row> + <div @click="uploadImg()" class="imageThree" > + <el-button type="primary" v-show="imageUrlButton == ''" round><span style="font-size: 20px;">签到按钮</span><span style="padding:5px;font-size: 15px;color: red;">(上传图片)</span></span></el-button> + <img v-if="imageUrlButton" :src="imageUrlButton" style="width: 100%;"> + </div> + </el-row> + + + <el-row> + <div style="text-align: center;padding: 5px;" @click="gzsmSet()"> + <div class="col-sm-8 col-sm-offset-2" style="text-align: left;"> + <span style="padding:5px;font-size: 30px;">-- 规则说明--</span> + </div> + <div class="el-col-sm-24" style="text-align: center;"> + <span style="padding:5px;font-size: 15px;color: red;">(点击,编辑规则内容,背景颜色,字体颜色、大小、透明度)</span> + </div> + <div class="col-sm-8 col-sm-offset-2" style="text-align: left;"> + <span style="padding:5px;font-size: 15px;">1、每天参与签到可获得积分换取抽奖机会</span> + </div> + <div class="col-sm-8 col-sm-offset-2" style="text-align: left;"> + <span style="padding:5px;font-size: 15px;">2、每天参与签到可获得积分换取抽奖机会</span> + </div> + <div class="col-sm-8 col-sm-offset-2" style="text-align: left;"> + <span style="padding:5px;font-size: 15px;">3、每天参与签到可获得积分换取抽奖机会</span> + </div> + </div> + </el-row> + </el-card> + </el-aside> + + <el-main width="70%"> + <div> + <el-tabs v-model="activeName" @tab-click="clickSecondTab"> + <el-tab-pane label="活动设置" name="first"> + <div class="col-sm-8 col-sm-offset-1" style="padding: 10px"> + <el-form-item label="活动名称" prop="actName"> + <el-input v-model="ruleForm.actName" placeholder="请输入活动名称"></el-input> + </el-form-item> + </div> + <div class="col-sm-8 col-sm-offset-1" style="padding: 10px"> + <el-form-item label="活动编码" prop="actCode"> + <el-input v-model.number="ruleForm.actCode" placeholder="请输入最大开团数量"></el-input> + </el-form-item> + </div> + <div class="col-sm-4 col-sm-offset-1" style="padding: 10px"> + <el-form-item label="活动时间" prop="actTime"> + <div class="block"> + <el-date-picker + v-model="ruleForm.actTime" + type="daterange" + range-separator="至" + start-placeholder="开始日期" + end-placeholder="结束日期"> + </el-date-picker> + </div> + </el-form-item> + </div> + <div class="col-sm-8 col-sm-offset-1" style="padding: 10px"> + <p class="el-big-title" style="text-align: left;">抽奖规则</p> + </div> + <div class="col-sm-8 col-sm-offset-1" style="padding: 10px"> + <el-form-item label="每日抽奖机会"> + <el-form-item label="每人每日有" prop="wmkcjjh"> + <el-input-number v-model="ruleForm.wmkcjjh" :min="1" :max="10" label="描述文字"></el-input-number> 次无门槛抽奖机会 + </el-form-item> + </el-form-item> + <el-form-item> + <el-form-item label="可用" prop="dhycjfs"> + <el-input-number v-model="ruleForm.dhycjfs" :min="1" :max="200" label="描述文字"></el-input-number> 积分兑换1次抽奖机会,每日最多兑换 + </el-form-item> + </el-form-item> + <el-form-item> + <el-form-item label="每日最多兑换" prop="jfdhcs"> + <el-input-number v-model="ruleForm.jfdhcs" :min="1" :max="10" label="描述文字"></el-input-number> 次抽奖机会 + </el-form-item> + </el-form-item> + </div> + <div class="col-sm-8 col-sm-offset-1" style="padding: 10px"> + <el-form-item label="中奖概率"> + <el-form-item label="每人最多中奖" prop="zzjcs"> + <el-input-number v-model="ruleForm.zzjcs" :min="1" :max="100" label="描述文字"></el-input-number> 次 + </el-form-item> + </el-form-item> + <el-form-item> + <el-form-item label="总中奖率" prop="zzjl"> + <el-input-number v-model="ruleForm.zzjl" :min="1" :max="100" label="描述文字"></el-input-number> % + </el-form-item> + </el-form-item> + </div> + </el-tab-pane> + + <el-tab-pane label="奖品设置" name="second"> + <el-row style="display:flex;"> + <el-col :span="20"> + <el-tabs v-model="editableTabsValue" type="card" closable @tab-click="clickTab" @tab-remove="removeTab"> + <el-tab-pane v-for="(item, index) in editableTabs" :key="item.name" :label="item.title" :name="item.name"> + <el-row v-show="editableTabsValue !== '1'"> + </el-row> + <el-row > + <el-col> + <el-form-item label="奖项名称"> + <el-input v-model="item.content.awardName" placeholder="奖项名称"></el-input> + </el-form-item> + </el-col> + </el-row> + <el-row > + <el-col> + <el-form-item label="图片介绍"> + <el-upload + action="/admin/multipleUploadFile/doUpload" + :show-file-list="false" + :on-success="introduceImgSuccess"> + <img v-if="item.content.introduceImg" :src="item.content.introduceImg" style="max-width: 200px;"> + </el-upload> + </el-form-item> + </el-col> + </el-row> + <div v-show="item.name !== '1'"> + <el-row> + <el-form-item label="奖项类型"> + <el-col> + <el-radio-group v-model="item.content.awardType" @change="jxlxChange"> + <el-radio :label="'1'">自定义奖品</el-radio> + <el-radio :label="'2'">积分</el-radio> + <el-radio :label="'3'">优惠券</el-radio> + <el-radio :label="'4'">商品</el-radio> + </el-radio-group> + </el-col> + </el-form-item > + </el-row> + + <div> + <el-row style="display:flex;"> + <el-col> + <el-form-item label="奖项库存"> + <el-input v-model="item.content.awardInventoryCnt" oninput ="value=value.replace(/[^0-9.]/g,'')"></el-input> + </el-form-item> + </el-col> + <el-col> + <el-form-item label="已派发"> + <el-input v-model="item.content.awardDistributeCnt"></el-input> + </el-form-item> + </el-col> + </el-row> + </div> + <div v-show="item.content.awardType === '1'"> + <el-row > + <el-col> + <el-form-item label="文字介绍"> + <el-input type="textarea" v-model="item.content.introduceTip"></el-input> + </el-form-item> + </el-col> + </el-row> + <el-row > + <el-col> + <el-form-item label="兑奖方式"> + <el-col> + <el-radio-group v-model="item.content.awardWay" @change="awardWayChange"> + <el-radio :label="'1'">线下兑换</el-radio> + <el-radio :label="'2'">物流配送</el-radio> + <el-radio :label="'3'">客服兑换</el-radio> + </el-radio-group> + </el-col> + </el-form-item > + </el-col> + </el-row> + <el-row > + <el-col> + <el-form-item label="操作提示"> + <el-input v-model="item.content.operationTip"></el-input> + </el-form-item> + </el-col> + </el-row> + <div v-show="item.content.awardWay === '1'"> + <el-row > + <el-col> + <el-form-item label="兑奖地址"> + <el-input v-model="item.content.prizeAddress"></el-input> + </el-form-item> + </el-col> + </el-row> + + </div> + <div v-show="item.content.awardWay === '3'"> + <el-row > + <el-col> + <el-form-item label="客服微信"> + <el-upload + action="/admin/multipleUploadFile/doUpload" + :show-file-list="false" + :on-success="wechatImgSuccess"> + <img v-if="item.content.wechatImg" :src="item.content.wechatImg" style="max-width: 200px;"> + </el-upload> + </el-form-item> + </el-col> + </el-row> + </div> + <div v-show="[1,3].includes(item.content.awardWay)"> + <el-row > + <el-col> + <el-form-item label="客服电话"> + <el-input v-model="item.content.customerPhone"></el-input> + </el-form-item> + </el-col> + </el-row> + </div> + <div v-show="item.content.awardWay !== '2'"> + <el-row > + <el-col> + <el-form-item label="兑奖期限"> + <div class="block"> + <el-date-picker + v-model="item.content.prizeTime" + type="daterange" + range-separator="至" + start-placeholder="开始日期" + end-placeholder="结束日期"> + </el-date-picker> + </div> + </el-form-item> + </el-col> + </el-row> + </div> + </div> + <div v-show="item.content.awardType === '2'"> + <el-row > + <el-col> + <el-form-item label="积分数量"> + <el-input v-model="item.content.scoreCnt" oninput ="value=value.replace(/[^0-9.]/g,'')"></el-input> + </el-form-item> + </el-col> + </el-row> + </div> + <div v-show="item.content.awardType === '3'"> + <el-row style="display:flex;"> + <el-col> + <el-form-item label="优惠券名称"> + <el-input v-model="item.content.couponName"></el-input> + </el-form-item> + </el-col> + <el-col> + <el-form-item label="优惠券"> + <el-input v-model="item.content.couponId"></el-input> + </el-form-item> + </el-col> + <el-col> + <el-button type="primary" @click="chooseCoupon(item.content.couponName,item.name)"> + 选择优惠券 + </el-button> + </el-col> + </el-row> + + <el-drawer + title="选择商城优惠券" + :visible.sync="drawerCoupon" + :direction="directionCoupon" + size="90%"> + <el-row style="margin-left: 50px;"> + <el-col :span="24"> + <el-row> + <el-form ref="formCoupon" :model="formCoupon" inline > + <el-form-item prop="yhjmc"> + <el-input v-model="formCoupon.yhjmc" placeholder="请输入优惠券名称"></el-input> + </el-form-item> + <el-button type="primary" @click="searchFormCoupon" >搜索</el-button> + <el-button @click="resetFormCoupon('formCoupon')">重置</el-button> + </el-form> + </el-row> + + <el-row class="table-style" > + <el-table ref="multipleTable" + :data="couponList.rows" + :height="tableHeightCoupon" + stripe:true + style="width: 100%"> + <el-table-column + prop="cname" + label="优惠券名称" + show-overflow-tooltip> + </el-table-column> + <el-table-column + prop="endTime" + label="截止日期" + show-overflow-tooltip> + </el-table-column> + <el-table-column + prop="address" + label="操作"> + <template slot-scope="scope"> + <el-button type="primary" + size="mini" + @click="chooseOneCoupon(scope.row)">选择 + </el-button> + </template> + </el-table-column> + </el-table> + </el-row> + <el-row class="paginationStyle" > + <el-pagination background + @size-change="changePageSizeCoupon" + @current-change="changeCurrentPageCoupon" + :current-page="couponList.currentPage" + :page-sizes="[10, 20, 30, 50]" + :page-size="couponList.pageSize" + layout="total, sizes, prev, pager, next, jumper" + :total="couponList.total"> + </el-pagination> + </el-row> + </el-col> + </el-row> + </el-drawer> + </div> + <div v-show="item.content.awardType === '4'"> + <el-row style="display:flex;"> + <el-col> + <el-form-item label="品项名称"> + <el-input v-model="item.content.goodsName"></el-input> + </el-form-item> + </el-col> + <el-col> + <el-form-item label="品项"> + <el-input v-model="item.content.goodsId"></el-input> + </el-form-item> + </el-col> + <el-col> + <el-button type="primary" @click="chooseGoods(item.content.goodsName,item.name)"> + 选择品项 + </el-button> + </el-col> + </el-row> + + <el-drawer + title="选择ERP产品" + :visible.sync="drawerGoods" + :direction="directionGoods" + size="90%"> + <el-row style="margin-left: 50px;"> + <el-col :span="24"> + <el-row> + <el-form ref="formGoods" :model="formGoods" inline > + <el-form-item prop="cpmc"> + <el-input v-model="formGoods.cpmc" placeholder="请输入产品名称"></el-input> + </el-form-item> + <el-button type="primary" @click="searchFormGoods" >搜索</el-button> + <el-button @click="resetFormGoods('formGoods')">重置</el-button> + </el-form> + </el-row> + + <el-row class="table-style" > + <el-table ref="multipleTable" + :data="goodsList.rows" + :height="tableHeightGoods" + stripe:true + style="width: 100%"> + <el-table-column + prop="name" + label="名称" + show-overflow-tooltip> + </el-table-column> + <el-table-column + prop="address" + label="操作"> + <template slot-scope="scope"> + <el-button type="primary" + size="mini" + @click="chooseOneGoods(scope.row)">选择 + </el-button> + </template> + </el-table-column> + </el-table> + </el-row> + <el-row class="paginationStyle" > + <el-pagination background + @size-change="changePageSizeGoods" + @current-change="changeCurrentPageGoods" + :current-page="goodsList.currentPage" + :page-sizes="[10, 20, 30, 50]" + :page-size="goodsList.pageSize" + layout="total, sizes, prev, pager, next, jumper" + :total="goodsList.total"> + </el-pagination> + </el-row> + </el-col> + </el-row> + </el-drawer> + </div> + </div> + </el-tab-pane> + </el-tabs> + </el-col> + <el-col :span="4"> + <el-button type="primary" @click="addTab(editableTabsValue)"> + 新增奖品 + </el-button> + </el-col> + </el-row> + </el-tab-pane> + + <el-tab-pane label="背景图片上传" name="third"> + <div class="col-sm-8 col-sm-offset-1" style="padding: 10px"> + <el-form-item label="头部"> + <el-upload + action="/admin/multipleUploadFile/doUpload" + :show-file-list="false" + :on-success="imageUrlHeadSuccess"> + <img v-if="imageUrlHead" :src="imageUrlHead" style="max-width: 300px;"> + </el-upload> + </el-form-item> + </div> + <div class="col-sm-8 col-sm-offset-1" style="padding: 10px"> + <el-form-item label="开始按钮"> + <el-upload + action="/admin/multipleUploadFile/doUpload" + :show-file-list="false" + :on-success="imageUrlTitleSuccess"> + <img v-if="imageUrlTitle" :src="imageUrlTitle" style="max-width: 300px;"> + </el-upload> + </el-form-item> + </div> + <div class="col-sm-8 col-sm-offset-1" style="padding: 10px"> + <el-form-item label="奖品划分线"> + <el-upload + action="/admin/multipleUploadFile/doUpload" + :show-file-list="false" + :on-success="imageLineSuccess"> + <img v-if="imageLine" :src="imageLine" style="max-width: 300px;"> + </el-upload> + </el-form-item> + </div> + + <div class="col-sm-8 col-sm-offset-1" style="padding: 10px"> + <el-form-item label="转盘背景"> + <el-upload + action="/admin/multipleUploadFile/doUpload" + :show-file-list="false" + :on-success="imageUrlButtonSuccess"> + <img v-if="imageUrlButton" :src="imageUrlButton" style="max-width: 300px;"> + <i v-else></i> + </el-upload> + </el-form-item> + </div> + </el-tab-pane> + + <el-tab-pane label="规则说明" name="fourth"> + <div class="col-sm-8 col-sm-offset-1"> + <el-form-item label="规则内容" prop="ruleExplain" style="padding: 10px"> + <el-input type="textarea" v-model="ruleForm.ruleExplain"></el-input> + </el-form-item> + <el-form-item label="背景颜色" style="padding: 10px"> + <el-color-picker v-model="backgroundColor"></el-color-picker> + </el-form-item> + <el-form-item label="字体颜色" style="padding: 10px"> + <el-color-picker v-model="typographyColor"></el-color-picker> + </el-form-item> + <el-form-item label="字体大小" style="padding: 10px"> + <el-input-number v-model="typographyNum" :min="10" :max="50" label="描述文字"></el-input-number> + </el-form-item> + <!--<el-form-item label="字体透明度" style="padding: 10px"> + <el-input-number v-model="typographyLight" :min="1" :max="100" label="描述文字">%</el-input-number> + </el-form-item>--> + </div> + </el-tab-pane> + </el-tabs> + </div> + + <div class="form-group "> + <div class="col-sm-12 text-center"> + <el-button type="primary" @click="dataSubmit('ruleForm')">保存</el-button> + <el-button type="danger" @click="cancelSubmit">关闭</el-button> + </div> + </div> + </el-main> + + </el-container> + + </el-form> +</div> +</body> +<script type="text/javascript" th:src="@{/js/plugin/jquery-2.1.4.min.js}"></script> +<script type="text/javascript" th:src="@{/js/plugin/jquery.query.js}"></script> +<script type="text/javascript" th:src="@{/plugin/bootstrap-3.3.5/js/bootstrap.min.js}"></script> +<script type="text/javascript" th:src="@{/js/systools/AjaxProxyVue.js}"></script> +<script type="text/javascript" th:src="@{/js/plugin/vue.js}"></script> +<script type="text/javascript" th:src="@{/plugin/element-ui/index.js}"></script> +<script type="text/javascript" th:src="@{/js/systools/MJsBase.js}"></script> +<script type="text/javascript" th:src="@{/plugin/layer/layer.js}"></script> +<script type="text/javascript" th:src="@{/plugin/moment.min.js}"></script> + +<script> + //获取传输的活动对象 + var actId = $.query.get("actId"); + const prize = { + //奖品基本信息 + awardType:'1', + awardName:'', + introduceImg:'', + introduceTip:'', + awardInventoryCnt:'', + awardDistributeCnt:'', + awardWay:'1', + operationTip:'', + prizeAddress:'', + prizeTime: '', + wechatImg:'', + scoreCnt:'', + couponId:'', + goodsId:'', + couponName:'', + customerPhone:'', + goodsName:'', + } + var app = new Vue({ + el: '#app', + data: { + activeName: 'first', + formLabelWidth: '120px', + + activeClickTab:0, + //优惠券搜索弹出 + drawerCoupon: false, + directionCoupon: 'rtl', + tableHeightCoupon: 500, + //--优惠券 + formCoupon:{ + yhjmc:'', + order:'', + sort:'' + }, + couponList:{ + rows:[], + total:0, + pageSize:10, + currentPage:1, + }, + + //品项搜索弹出 + drawerGoods: false, + directionGoods: 'rtl', + tableHeightGoods: 500, + //--品项 + formGoods:{ + cpmc:'', + order:'', + sort:'' + }, + goodsList:{ + rows:[], + total:0, + pageSize:10, + currentPage:1, + }, + + //标题图片 + imageUrlTitle: '', + imageLine: '', + imageUrlHead: "../../../images/sign/signHead.png", + imageUrlButton: "../../../images/sign/signButton.png", + + //字体颜色 + typographyColor: '#409EFF', + //背景颜色 + backgroundColor: '#409EFF', + //字体大小 + typographyNum: '5', + //字体透明度 + typographyLight: '50', + //奖品设置 + prize:JSON.parse(JSON.stringify(prize)), + editableTabsValue: '1', + editableTabs: [{ + title: '谢谢参与', + name: '1', + content: JSON.parse(JSON.stringify(prize)) + }], + tabIndex: 1, + + ruleForm : { + //商品基本信息 + actName : '', + actCode : '', + actTime : '', + //抽奖规则 + wmkcjjh : '5', + dhycjfs : '20', + jfdhcs : '10', + zzjcs : '5', + zzjl : '10', + + //规则说明 + ruleExplain : '', + }, + rules : { + //商品基本信息 + actName : [ + { required: true, message: '请输入活动名称', trigger: 'blur' } + ], + actCode : [ + { required: true, message: '请输入活动编码', trigger: 'blur' } + ], + actTime : [ + { required: true, message: '请选择日期', trigger: 'change' } + ], + wmkcjjh : [ + { required: true, message: '请输入1到10的数字', trigger: 'blur' } + ], + dhycjfs : [ + { required: true, message: '请输入1到200的数字', trigger: 'blur' } + ], + jfdhcs : [ + { required: true, message: '请输入1到10的数字', trigger: 'blur' } + ], + zzjcs : [ + { required: true, message: '请输入1到100的数字', trigger: 'blur' } + ], + zzjl : [ + { required: true, message: '请输入1到100的数字', trigger: 'blur' } + ], + ruleExplain : [ + { required: true, message: '请输入规则内容', trigger: 'blur' } + ] + }, + }, + created: function () { + }, + methods: { + //选择优惠券 + chooseCoupon(val,name){ + let _this = this; + _this.drawerCoupon = true; + _this.activeClickTab = parseInt(name); + _this.formCoupon.yhjmc = val; + _this.loadCouponList(); + }, + //--优惠券 + loadCouponList() { + let _this = this; + let data=_this.getRequestParamCoupon(); + data.pageSize=_this.couponList.pageSize; + data.pageNum=_this.couponList.currentPage; + AjaxProxy.requst({ + app: _this, + data:data, + url: basePath + '/admin/activitySignAwardSet/selectCouponList', + callback: function (data) { + _this.couponList.rows = data.rows; + _this.couponList.total = data.total; + } + }); + }, + //查询参数 + getRequestParamCoupon(){ + let _this = this; + return { + yhjmc:_this.formCoupon.yhjmc, + order:_this.formCoupon.order, + sort:_this.formCoupon.sort, + } + }, + //查询 + searchFormCoupon:function(){ + this.couponList.currentPage=1; + this.loadCouponList(); + }, + //重置 + resetFormCoupon(formName) { + // this.formCoupon.yhjmc = '' + // console.log(this.$refs[formName].resetFields) + (this.$refs[formName])[0].resetFields(); + }, + changePageSizeCoupon(val) { + this.couponList.pageSize = val; + this.loadCouponList(); + }, + changeCurrentPageCoupon(val) { + this.couponList.currentPage = val; + this.loadCouponList(); + }, + //选择 + chooseOneCoupon(row) { + let _this = this; + _this.editableTabs[_this.activeClickTab-1].content.couponId = row.id; + _this.editableTabs[_this.activeClickTab-1].content.couponName = row.cname; + _this.drawerCoupon = false; + }, + + //选择品项 + chooseGoods(val,name){ + let _this = this; + _this.drawerGoods = true; + _this.activeClickTab = parseInt(name); + _this.formGoods.cpmc = val; + _this.loadGoodsList(); + }, + //--品项 + loadGoodsList() { + let _this = this; + let data=_this.getRequestParamGoods(); + data.pageSize=_this.goodsList.pageSize; + data.pageNum=_this.goodsList.currentPage; + AjaxProxy.requst({ + app: _this, + data:data, + url: basePath + '/admin/activitySignAwardSet/selectGoodsList', + callback: function (data) { + _this.goodsList.rows = data.rows; + _this.goodsList.total = data.total; + } + }); + }, + //查询参数 + getRequestParamGoods(){ + let _this = this; + return { + cpmc:_this.formCoupon.cpmc, + order:_this.formCoupon.order, + sort:_this.formCoupon.sort, + } + }, + //查询 + searchFormGoods:function(){ + this.goodsList.currentPage=1; + this.loadGoodsList(); + }, + //重置 + resetFormGoods(formName) { + (this.$refs[formName])[0].resetFields(); + }, + changePageSizeGoods(val) { + this.goodsList.pageSize = val; + this.loadGoodsList(); + }, + changeCurrentPageGoods(val) { + this.goodsList.currentPage = val; + this.loadGoodsList(); + }, + //选择 + chooseOneGoods(row) { + let _this = this; + _this.editableTabs[_this.activeClickTab-1].content.goodsId = row.id; + _this.editableTabs[_this.activeClickTab-1].content.goodsName = row.name; + _this.drawerGoods = false; + }, + + //保存 + dataSubmit : function(formName) { + const _this = this; + let flag = false; + _this.$refs[formName].validate((valid) => { + if (!valid) { + _this.$notify({ + title: '提示', + message: '请完善转盘抽奖活动信息', + type: 'warning' + }); + flag = true; + return; + } + }); + if (flag) { + return; + } + //活动基本信息 + let luckyDrawBasicJsonDto = { + ruleExplain: _this.ruleForm.ruleExplain, + //字体颜色 + typographyColor: _this.typographyColor, + //背景颜色 + backgroundColor: _this.backgroundColor, + //字体大小 + typographyNum: _this.typographyNum, + //标题图片 + imageUrlTitle: _this.imageUrlTitle, + imageLine: _this.imageLine, + imageUrlHead: _this.imageUrlHead, + imageUrlButton: _this.imageUrlButton, + //抽奖规则 + wmkcjjh: _this.ruleForm.wmkcjjh, + dhycjfs: _this.ruleForm.dhycjfs, + jfdhcs: _this.ruleForm.jfdhcs, + zzjcs: _this.ruleForm.zzjcs, + zzjl: _this.ruleForm.zzjl, + } + //奖品信息 + let luckyDrawAwardSets = []; + for (let i = 0; i < _this.editableTabs.length; i++) { + let prize = _this.editableTabs[i].content; + let name = _this.editableTabs[i].title; + let awardRule = 2; + if(name == "谢谢参与"){ + awardRule = 1; + } + let activitySignAwardSet = { + awardRule: awardRule, + awardType: prize.awardType, + awardName: prize.awardName, + introduceImg: prize.introduceImg, + introduceTip: prize.introduceTip, + awardInventoryCnt: prize.awardInventoryCnt, + awardDistributeCnt: prize.awardDistributeCnt, + awardWay: prize.awardWay, + operationTip: prize.operationTip, + prizeAddress: prize.prizeAddress, + wechatImg: prize.wechatImg, + customerPhone: prize.customerPhone, + scoreCnt: prize.scoreCnt, + couponId: prize.couponId, + goodsId: prize.goodsId, + couponName: prize.couponName, + goodsName: prize.goodsName, + prizeStartTime: prize.prizeTime[0], + prizeEndTime: prize.prizeTime[1], + } + luckyDrawAwardSets.push(activitySignAwardSet); + } + let resultData = { + actName: _this.ruleForm.actName, + actCode: _this.ruleForm.actCode, + beginTime : _this.ruleForm.actTime[0], + endTime : _this.ruleForm.actTime[1], + luckyDrawBasicJsonDto, + luckyDrawAwardSets, + } + AjaxProxy.requst({ + app: _this, + data: resultData, + url: basePath + '/admin/activitySignAwardSet/addLuckyDrawSet', + callback: function (data) { + _this.$message({ + message: data.info, + type: 'success', + }); + parent.layer.close(parent.layer.getFrameIndex(window.name)); + } + }); + }, + //奖品设置 + addTab(targetName) { + let newTabName = ++this.tabIndex + ''; + this.editableTabs.push({ + title: "转盘奖品"+"("+newTabName+")", + name: newTabName, + content: JSON.parse(JSON.stringify(prize)), + }); + this.editableTabsValue = newTabName; + this.activeClickTab = parseInt(newTabName); + }, + clickSecondTab(targetName) { + this.activeClickTab = 1; + }, + clickTab(targetName) { + console.log(targetName.name); + this.activeClickTab = parseInt(targetName.name); + }, + removeTab(targetName) { + let tabs = this.editableTabs; + let activeName = this.editableTabsValue; + if(activeName === '1' || targetName === '1'){ + this.$notify({ + title: '提示', + message: '【谢谢参与】不能删除', + type: 'warning' + }); + }else{ + if (activeName === targetName) { + tabs.forEach((tab, index) => { + if (tab.name === targetName && tab.title !== "谢谢参与") { + let nextTab = tabs[index + 1] || tabs[index - 1]; + if (nextTab) { + activeName = nextTab.name; + } + } + }); + } + this.editableTabsValue = activeName; + this.editableTabs = tabs.filter(tab => tab.name !== targetName); + this.tabIndex = this.editableTabs.length; + } + }, + //切换奖项类型,显示不同内容 + jxlxChange(val){ + let _this = this; + _this.isShow=val; + }, + //切换兑奖方式,显示不同内容 + awardWayChange(val){ + let _this = this; + _this.isShow=val; + }, + //跳转到图片上传 + uploadImg(){ + this.activeName = 'third'; + }, + //跳转到规则说明 + gzsmSet(){ + this.activeName = 'fourth'; + }, + //标题图片 + imageUrlTitleSuccess(res, file) { + this.imageUrlTitle = res.path; + }, + imageLineSuccess(res, file) { + this.imageLine = res.path; + }, + imageUrlHeadSuccess(res, file) { + this.imageUrlHead = res.path; + }, + imageUrlButtonSuccess(res, file) { + this.imageUrlButton = res.path; + }, + //奖品设置的图片介绍 + introduceImgSuccess(res, file) { + this.editableTabs[this.activeClickTab-1].content.introduceImg = res.path; + }, + //奖品设置的客服微信 + wechatImgSuccess(res, file) { + this.editableTabs[this.activeClickTab-1].content.wechatImg = res.path; + }, + cancelSubmit() { + this.closeFrame(); + }, + closeFrame() { + parent.layer.close(parent.layer.getFrameIndex(window.name)); + }, + } + }) +</script> + +</body> +</html> \ No newline at end of file diff --git a/zq-erp/src/main/resources/templates/views/admin/activity/activity-market.html b/zq-erp/src/main/resources/templates/views/admin/activity/activity-market.html index f235797..f168fe5 100644 --- a/zq-erp/src/main/resources/templates/views/admin/activity/activity-market.html +++ b/zq-erp/src/main/resources/templates/views/admin/activity/activity-market.html @@ -54,7 +54,7 @@ <body> <div class="panel-body" id="app" v-cloak> - <el-row> + <el-row style="padding:20px;"> <el-col :span="4"> <el-card class="box-card" :body-style="{ padding: '10px 10px'}"> <img src="../../../images/sign/meiriqiandao.png" class="image"> @@ -100,6 +100,19 @@ </el-card> </el-col> </el-row> + <el-row style="padding:20px;"> + <el-col :span="4"> + <el-card class="box-card" :body-style="{ padding: '10px 10px'}"> + <img src="../../../images/sign/meiriqiandao.png" class="image"> + <div style="padding: 5px;"> + <span style="padding:5px;font-size: 18px;">转盘抽奖</span> + <div class="bottom clearfix"> + <el-button type="primary" size="mini" class="button" @click="createLuckyDraw()" round>马上创建</el-button> + </div> + </div> + </el-card> + </el-col> + </el-row> </div> </body> @@ -125,6 +138,25 @@ created: function () { }, methods: { + //跳转到设置转盘抽奖 + createLuckyDraw(){ + $.AjaxProxy().invoke(basePath + "/admin/activitySignAwardSet/createLuckyDrawSet", function(loj) { + if (loj[0].result.status == '200') { + layer.full(layer.open({ + type: 2, + title: "转盘抽奖管理", + maxmin: true, + area: [MUI.SIZE_L, '500px'], + content : [ basePath + '/admin/redirect/activity/activity-luckyDraw'] + })); + }else{ + _this.$message({ + message: data.info, + type: 'success', + }); + } + }); + }, //跳转到设置签到活动 createSign(){ $.AjaxProxy().invoke(basePath + "/admin/activitySignAwardSet/createSignAwardSet", function(loj) { @@ -170,7 +202,7 @@ openSalon() { layer.full(layer.open({ type : 2, - title : "新建秒杀", + title : "新建沙龙", area : [ MUI.SIZE_L, MUI.SIZE_L ], maxmin : true, content : [ basePath+'/admin/redirect/shop/activities/activitiesSalon-form'] -- Gitblit v1.9.1