facade-lucky/src/main/java/com/ks/lucky/pojo/DO/LuckyActivityAwards.java
@@ -1,5 +1,6 @@ package com.ks.lucky.pojo.DO; import com.ks.lucky.pojo.DTO.ActivityAwardParams; import org.springframework.data.annotation.Transient; import org.yeshi.utils.generater.mybatis.Table; facade-lucky/src/main/java/com/ks/lucky/pojo/DO/LuckySponsors.java
@@ -19,8 +19,15 @@ private Long id; public LuckySponsors(Long id) { this.id = id; } public LuckySponsors() { } @NotEmpty(message = "账号不能为空") @Pattern(regexp = "^(\\w|@|_|\\.){3,64}$",message = "账号只能包含英文、数字、@、_") @Pattern(regexp = "^(\\w|@|_|\\.){3,64}$", message = "账号只能包含英文、数字、@、_") private String account; @NotEmpty(message = "密码不能为空") facade-lucky/src/main/java/com/ks/lucky/remote/service/LuckyActivityAwardMaterialService.java
@@ -18,7 +18,7 @@ * @param awardMaterial * @throws LuckyActivityAwardMaterialException */ public void addAwardMaterial(@Valid LuckyActivityAwardMaterial awardMaterial) throws ParamsException,LuckyActivityAwardMaterialException; public String addAwardMaterial(@Valid LuckyActivityAwardMaterial awardMaterial) throws ParamsException,LuckyActivityAwardMaterialException; /** facade-lucky/src/main/java/com/ks/lucky/remote/service/LuckyActivityAwardService.java
@@ -2,6 +2,7 @@ import com.ks.lib.common.exception.ParamsException; import com.ks.lucky.exception.LuckyActivityAwardException; import com.ks.lucky.exception.LuckyActivityAwardMaterialException; import com.ks.lucky.pojo.DO.LuckyActivityAwards; import javax.validation.Valid; @@ -18,7 +19,7 @@ * @param award * @throws LuckyActivityAwardException */ public Long addAward(@Valid LuckyActivityAwards award) throws ParamsException,LuckyActivityAwardException; public Long addAward(@Valid LuckyActivityAwards award) throws ParamsException, LuckyActivityAwardException, LuckyActivityAwardMaterialException; /** facade-lucky/src/main/java/com/ks/lucky/remote/service/LuckyActivityService.java
@@ -1,7 +1,7 @@ package com.ks.lucky.remote.service; import com.ks.lib.common.exception.ParamsException; import com.ks.lucky.exception.LuckyActivityException; import com.ks.lucky.exception.*; import com.ks.lucky.pojo.DO.LuckyActivity; import javax.validation.Valid; @@ -11,6 +11,8 @@ * 抽奖活动服务 */ public interface LuckyActivityService { public Long addActivity(LuckyActivity activity) throws ParamsException, LuckyActivityException, LuckyActivitySponsorInfoException, LuckyActivityAwardException, LuckyActivityOpenInfoException, LuckySponsorAdException, LuckyActivityAwardMaterialException; /** * 获取有效的活动列表 @@ -27,6 +29,7 @@ /** * 获取有效的活动列表 * * @param appId * @param sponsorId * @param stateList @@ -51,6 +54,7 @@ /** * 有效的活动计数 * * @param appId * @param sponsorId * @param stateList @@ -59,8 +63,6 @@ * @return */ public long countActivity(Long appId, Long sponsorId, List<Integer> stateList, String key, List<Long> excludeActivityIds); /** facade-lucky/src/main/java/com/ks/lucky/remote/service/LuckyActivitySponsorInfoService.java
@@ -2,6 +2,7 @@ import com.ks.lib.common.exception.ParamsException; import com.ks.lucky.exception.LuckyActivitySponsorInfoException; import com.ks.lucky.exception.LuckySponsorAdException; import com.ks.lucky.pojo.DO.LuckyActivitySponsorInfo; import javax.validation.Valid; @@ -18,7 +19,7 @@ * @param sponsorInfo * @throws LuckyActivitySponsorInfoException */ public Long addSponsorInfo(@Valid LuckyActivitySponsorInfo sponsorInfo) throws ParamsException,LuckyActivitySponsorInfoException; public Long addSponsorInfo(@Valid LuckyActivitySponsorInfo sponsorInfo) throws ParamsException, LuckyActivitySponsorInfoException, LuckySponsorAdException; /** * 修改赞助信息 facade-lucky/src/main/java/com/ks/lucky/remote/service/LuckySponsorAdService.java
@@ -68,7 +68,7 @@ * @param ad * @throws LuckySponsorAdException */ public void addSponsorAd(@Valid LuckySponsorAd ad) throws ParamsException,LuckySponsorAdException; public String addSponsorAd(@Valid LuckySponsorAd ad) throws ParamsException,LuckySponsorAdException; /** service-daylucky/src/main/java/com/ks/daylucky/controller/admin/AdminActivityController.java
New file @@ -0,0 +1,78 @@ package com.ks.daylucky.controller.admin; import com.google.gson.Gson; import com.ks.daylucky.pojo.DO.ActivityExtraInfo; import com.ks.daylucky.pojo.VO.admin.ActivityAdminVo; import com.ks.daylucky.service.ActivityExtraInfoService; import com.ks.daylucky.util.factory.vo.LuckyActivityFactory; import com.ks.lib.common.exception.ParamsException; import com.ks.lucky.exception.*; import com.ks.lucky.pojo.DO.LuckyActivity; import com.ks.lucky.remote.service.LuckyActivityService; import net.sf.json.JSONObject; import org.apache.dubbo.config.annotation.Reference; import org.springframework.stereotype.Controller; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.ResponseBody; import org.yeshi.utils.JsonUtil; import javax.annotation.Resource; import javax.servlet.http.HttpServletRequest; @Controller @RequestMapping("/admin/activity") public class AdminActivityController { @Reference(version = "1.0.0") private LuckyActivityService luckyActivityService; @Resource private ActivityExtraInfoService activityExtraInfoService; /** * 添加活动 * * @param request * @param data * @return */ @ResponseBody @RequestMapping("addActivity") public String addActivity(HttpServletRequest request, String data) { ActivityAdminVo vo = new Gson().fromJson(data, ActivityAdminVo.class); Long sponsorId = 1L; Long appId = 4L; LuckyActivity activity = LuckyActivityFactory.create(sponsorId, vo); activity.setAppId(appId); try { Long activityId = luckyActivityService.addActivity(activity); ActivityExtraInfo extraInfo = LuckyActivityFactory.getActivityExtra(vo.getOpenInfo()); extraInfo.setActivityId(activityId); activityExtraInfoService.add(extraInfo); JSONObject result = new JSONObject(); result.put("id", activityId); return JsonUtil.loadTrueResult(result); } catch (ParamsException e) { e.printStackTrace(); return JsonUtil.loadFalseResult("参数不完整"); } catch (LuckyActivityException e) { e.printStackTrace(); } catch (LuckyActivitySponsorInfoException e) { e.printStackTrace(); } catch (LuckyActivityAwardException e) { e.printStackTrace(); } catch (LuckyActivityOpenInfoException e) { e.printStackTrace(); } catch (LuckySponsorAdException e) { e.printStackTrace(); } catch (LuckyActivityAwardMaterialException e) { e.printStackTrace(); } return JsonUtil.loadFalseResult("添加出错"); } } service-daylucky/src/main/java/com/ks/daylucky/pojo/DO/ActivityExtraInfo.java
@@ -11,9 +11,19 @@ private Long activityId; //活动分享图 private String shareImageLink; //活动有效天数 private Integer validDay; private Date createTime; private Date updateTime; public Integer getValidDay() { return validDay; } public void setValidDay(Integer validDay) { this.validDay = validDay; } public Long getActivityId() { return activityId; } service-daylucky/src/main/java/com/ks/daylucky/pojo/VO/admin/ActivityAdminVo.java
New file @@ -0,0 +1,318 @@ package com.ks.daylucky.pojo.VO.admin; import java.math.BigDecimal; import java.util.List; public class ActivityAdminVo { private Long id; private ActivityBean activity; private JoinInfoBean joinInfo; private OpenInfoBean openInfo; private List<AwardInfoBean> awardInfo; public Long getId() { return id; } public void setId(Long id) { this.id = id; } public ActivityBean getActivity() { return activity; } public void setActivity(ActivityBean activity) { this.activity = activity; } public JoinInfoBean getJoinInfo() { return joinInfo; } public void setJoinInfo(JoinInfoBean joinInfo) { this.joinInfo = joinInfo; } public OpenInfoBean getOpenInfo() { return openInfo; } public void setOpenInfo(OpenInfoBean openInfo) { this.openInfo = openInfo; } public List<AwardInfoBean> getAwardInfo() { return awardInfo; } public void setAwardInfo(List<AwardInfoBean> awardInfo) { this.awardInfo = awardInfo; } public static class ActivityBean { /** * poster : https://daylucky-1255749512.cos.ap-nanjing.myqcloud.com/image/activity/poster/4dad5e05-9fa8-4f47-8b40-f5b5255ee4fc.png */ private String poster; private List<BannerBean> bannerList; public List<BannerBean> getBannerList() { return bannerList; } public void setBannerList(List<BannerBean> bannerList) { this.bannerList = bannerList; } public String getPoster() { return poster; } public void setPoster(String poster) { this.poster = poster; } public static class BannerBean { private String id; private String url; public String getUrl() { return url; } public void setUrl(String url) { this.url = url; } public String getId() { return id; } public void setId(String id) { this.id = id; } } } public static class JoinInfoBean { /** * adInfo : {"data":{"icon":"https://daylucky-1255749512.cos.ap-nanjing.myqcloud.com/image/activity/sponsorad/79e3c033-ac7c-4b7d-9aa2-5dbce85ee6ea.png","name":"2133322222","sceneId":"213213321","desc":""},"type":"alipayLife"} * must : 0 * desc : 参与条件说明 */ private AdInfoBean adInfo; private Integer must; private String desc; public AdInfoBean getAdInfo() { return adInfo; } public void setAdInfo(AdInfoBean adInfo) { this.adInfo = adInfo; } public Integer getMust() { return must; } public void setMust(Integer must) { this.must = must; } public String getDesc() { return desc; } public void setDesc(String desc) { this.desc = desc; } public static class AdInfoBean { /** * data : {"icon":"https://daylucky-1255749512.cos.ap-nanjing.myqcloud.com/image/activity/sponsorad/79e3c033-ac7c-4b7d-9aa2-5dbce85ee6ea.png","name":"2133322222","sceneId":"213213321","desc":""} * type : alipayLife */ private DataBean data; private String type; public DataBean getData() { return data; } public void setData(DataBean data) { this.data = data; } public String getType() { return type; } public void setType(String type) { this.type = type; } public static class DataBean { /** * icon : https://daylucky-1255749512.cos.ap-nanjing.myqcloud.com/image/activity/sponsorad/79e3c033-ac7c-4b7d-9aa2-5dbce85ee6ea.png * name : 2133322222 * sceneId : 213213321 * desc : */ private String icon; private String name; private String sceneId; private String desc; public String getIcon() { return icon; } public void setIcon(String icon) { this.icon = icon; } public String getName() { return name; } public void setName(String name) { this.name = name; } public String getSceneId() { return sceneId; } public void setSceneId(String sceneId) { this.sceneId = sceneId; } public String getDesc() { return desc; } public void setDesc(String desc) { this.desc = desc; } } } } public static class OpenInfoBean { /** * minPersonCount : 1000 * day : 2 */ private Integer minPersonCount; private Integer day; public Integer getMinPersonCount() { return minPersonCount; } public void setMinPersonCount(Integer minPersonCount) { this.minPersonCount = minPersonCount; } public Integer getDay() { return day; } public void setDay(Integer day) { this.day = day; } } public static class AwardInfoBean { /** * title : 奖项一 * data : {"total":"100","count":"1000","type":2} * selected : true */ private String title; private DataBeanX data; private String type; private boolean selected; public String getType() { return type; } public void setType(String type) { this.type = type; } public String getTitle() { return title; } public void setTitle(String title) { this.title = title; } public DataBeanX getData() { return data; } public void setData(DataBeanX data) { this.data = data; } public boolean isSelected() { return selected; } public void setSelected(boolean selected) { this.selected = selected; } public static class DataBeanX { /** * total : 100 * count : 1000 * type : 2 */ private BigDecimal total; private Integer count; private int type; public BigDecimal getTotal() { return total; } public void setTotal(BigDecimal total) { this.total = total; } public Integer getCount() { return count; } public void setCount(Integer count) { this.count = count; } public int getType() { return type; } public void setType(int type) { this.type = type; } } } } service-daylucky/src/main/java/com/ks/daylucky/util/factory/vo/LuckyActivityFactory.java
New file @@ -0,0 +1,165 @@ package com.ks.daylucky.util.factory.vo; import com.google.gson.Gson; import com.ks.daylucky.pojo.DO.ActivityExtraInfo; import com.ks.daylucky.pojo.VO.admin.ActivityAdminVo; import com.ks.lucky.pojo.DO.*; import com.ks.lucky.pojo.DTO.ActivityAwardParams; import com.ks.lucky.pojo.DTO.sponsorad.AlipayLifeAdInfo; import java.math.BigDecimal; import java.math.RoundingMode; import java.util.ArrayList; import java.util.List; public class LuckyActivityFactory { public static LuckyActivity create(Long sponsorId, ActivityAdminVo vo) { LuckyActivity activity = createActivity(sponsorId, vo.getActivity()); activity.setAwardsList(createAwards(vo.getAwardInfo())); activity.setSponsorInfo(createSponsorInfo(sponsorId, vo.getJoinInfo())); activity.setOpenInfo(createOpenInfo(vo.getOpenInfo())); return activity; } /** * 附加信息 * * @param bean * @return */ public static ActivityExtraInfo getActivityExtra(ActivityAdminVo.OpenInfoBean bean) { ActivityExtraInfo info = new ActivityExtraInfo(); info.setValidDay(bean.getDay()); return info; } /** * 主活动 * * @param sponsorId * @param bean * @return */ private static LuckyActivity createActivity(Long sponsorId, ActivityAdminVo.ActivityBean bean) { LuckyActivity activity = new LuckyActivity(); activity.setSponsorId(sponsorId); activity.setMaterialPoster(bean.getPoster()); activity.setMaxPersonCount(100000); activity.setBannerList(createBannerList(bean)); return activity; } /** * 奖项信息 * * @param awardInfo * @return */ private static List<LuckyActivityAwards> createAwards(List<ActivityAdminVo.AwardInfoBean> awardInfo) { List<LuckyActivityAwards> awardsList = new ArrayList<>(); int level = 0; for (ActivityAdminVo.AwardInfoBean bean : awardInfo) { LuckyActivityAwards awards = new LuckyActivityAwards(); awards.setMaterial(createAwardMaterial(bean)); awards.setLevel(level++); awards.setCount(bean.getData().getCount()); awards.setAwardWay(bean.getData().getType()); //支付宝红包 if (bean.getType().equalsIgnoreCase(LuckyActivityAwardMaterial.ActivityAwardMaterialType.alipayRedPackage.name())) { String awardName = null; switch (bean.getData().getType()) { case LuckyActivityAwards.AWARD_WAY_DIVIDE: BigDecimal percent = bean.getData().getTotal().divide(new BigDecimal(bean.getData().getCount()), 2, RoundingMode.FLOOR); awardName = String.format("固定金额红包%s元×%s份", percent, bean.getData().getCount()); break; case LuckyActivityAwards.AWARD_WAY_RANDOM: awardName = String.format("随机金额红包共%s元,%s份", bean.getData().getTotal(), bean.getData().getCount()); break; } awards.setAwardName(awardName); ActivityAwardParams params = new ActivityAwardParams(ActivityAwardParams.ActivityAwardTypeEnum.alipayRedPackage, bean.getData().getTotal()); awards.setAwardParams(new Gson().toJson(params)); } awardsList.add(awards); } return awardsList; } /** * 赞助信息 * * @param sponsorId * @param bean * @return */ private static LuckyActivitySponsorInfo createSponsorInfo(Long sponsorId, ActivityAdminVo.JoinInfoBean bean) { LuckyActivitySponsorInfo sponsorInfo = new LuckyActivitySponsorInfo(); sponsorInfo.setSponsorId(sponsorId); sponsorInfo.setAd(createSponsorAd(sponsorId, bean)); sponsorInfo.setSponsors(new LuckySponsors(sponsorId)); return sponsorInfo; } /** * 开奖信息 * * @param bean * @return */ private static LuckyActivityOpenInfo createOpenInfo(ActivityAdminVo.OpenInfoBean bean) { LuckyActivityOpenInfo openInfo = new LuckyActivityOpenInfo(); openInfo.setOpenType(LuckyActivityOpenInfo.OPEN_TYPE_PERSON_AND_TIME); openInfo.setMinPersonCount(bean.getMinPersonCount()); return openInfo; } private static List<LuckyActivityImage> createBannerList(ActivityAdminVo.ActivityBean bean) { List<LuckyActivityImage> list = new ArrayList<>(); int count = bean.getBannerList().size(); for (ActivityAdminVo.ActivityBean.BannerBean banner : bean.getBannerList()) { LuckyActivityImage image = new LuckyActivityImage(); image.setId(banner.getId()); image.setUrl(banner.getUrl()); image.setType(LuckyActivityImage.LuckyImageType.banner); image.setWeight(count--); list.add(image); } return list; } private static LuckySponsorAd createSponsorAd(Long sponsorId, ActivityAdminVo.JoinInfoBean bean) { LuckySponsorAd ad = new LuckySponsorAd(); //关注支付宝生活号 if (bean.getAdInfo().getType().equalsIgnoreCase(LuckySponsorAd.SponsorAdType.alipayLife.name())) { AlipayLifeAdInfo alipayLifeAdInfo = new AlipayLifeAdInfo(); alipayLifeAdInfo.setMustAttention(bean.getMust() > 0); alipayLifeAdInfo.setName(bean.getAdInfo().getData().getName()); alipayLifeAdInfo.setIcon(bean.getAdInfo().getData().getIcon()); alipayLifeAdInfo.setDesc(bean.getAdInfo().getData().getDesc()); alipayLifeAdInfo.setSceneId(bean.getAdInfo().getData().getSceneId()); ad.setAlipayLifeAdInfo(alipayLifeAdInfo); } ad.setAdType(LuckySponsorAd.SponsorAdType.valueOf(bean.getAdInfo().getType())); ad.setSponsorId(sponsorId); return ad; } private static LuckyActivityAwardMaterial createAwardMaterial(ActivityAdminVo.AwardInfoBean bean) { LuckyActivityAwardMaterial material = new LuckyActivityAwardMaterial(); material.setType(LuckyActivityAwardMaterial.ActivityAwardMaterialType.valueOf(bean.getType())); return material; } } service-daylucky/src/main/resources/static/activity-add.html
@@ -20,6 +20,8 @@ <!--[if lt IE 9]> <script src="https://cdn.staticfile.org/html5shiv/r29/html5.min.js"></script> <script src="https://cdn.staticfile.org/respond.js/1.4.2/respond.min.js"></script> <script src="js/http.js"></script> <![endif]--> <style> @@ -137,7 +139,7 @@ </div> </div> <button class="layui-btn layui-btn-radius layui-btn-normal" <button class="layui-btn layui-btn-radius layui-btn-normal hidden" id="saveActivityInfo" lay-submit="">保存 </button> @@ -192,7 +194,7 @@ </div> </div> </div> <button class="layui-btn layui-btn-radius layui-btn-normal" id="saveAwardInfo" lay-submit="">保存 <button class="layui-btn layui-btn-radius layui-btn-normal hidden" id="saveAwardInfo" lay-submit="">保存 </button> @@ -259,7 +261,7 @@ autocomplete="off" class="layui-textarea" maxlength="256"></textarea></div> </div> <button class="layui-btn layui-btn-radius layui-btn-normal" id="saveJoinInfo" <button class="layui-btn layui-btn-radius layui-btn-normal hidden" id="saveJoinInfo" lay-filter="save-activity" lay-submit="">保存 </button> </form> @@ -307,8 +309,7 @@ </div> </div> <button class="layui-btn layui-btn-radius layui-btn-normal" id="saveOpenInfo" lay-filter="save-activity" lay-submit="">保存 <button class="layui-btn layui-btn-radius layui-btn-normal hidden" id="saveOpenInfo" lay-submit="">保存 </button> </form> </div> @@ -316,133 +317,148 @@ <button class="layui-btn layui-btn-warm layui-btn-lg" v-on:click="submit">立即提交</button> </div> </div> <script src="js/lodash.js"></script> <script src="js/common.js"></script> <script> //验证管理器 var validManager = { //验证抽奖信息 verifyActivityInfo() { const field = common.layuiForm.val('form-activity-info'); if (!$("#poster").attr("src")) { common.notify.error("请选择封面图片"); return false; } //判断条件 if (field.showBanner == 1 && $(".banner").find("img").length == 0) { common.notify.error("请选择banner图片"); return false; } if (field.showBanner == 1 && $(".banner").find("img").length > 3) { common.notify.error("banner图最多3张"); return false; } return true; }, //验证奖品信息 verifyAwardInfo() { console.log("verifyAwardInfo"); if (app.tempAwardsList == null || app.tempAwardsList.length == 0) { common.notify.error("请添加奖项"); return false; } var hasAward = false; for (var i = 0; i < app.tempAwardsList.length; i++) { if (app.tempAwardsList[i].data && app.tempAwardsList[i].data.type) { hasAward = true; break; } } if (!hasAward) { common.notify.error("请选择奖项类型"); return false; } const field = common.layuiForm.val('form-award-info'); return true; }, //验证参与信息 verifyJoinInfo() { const field = common.layuiForm.val('form-join-info'); console.log(field); if (!app.joinInfo.adInfo.data) { common.notify.error("请选择参与条件-跳转链路"); return false; } return true; }, //验证开奖条件 verifyOpenInfo() { const field = common.layuiForm.val('form-open-info'); console.log(field); if (parseInt(field.minPersonCount) < 1000 || parseInt(field.minPersonCount) > 10000) { common.notify.error("至少参与人数的范围为:1000-10000"); return false; } if (parseInt(field.day) < 1 || parseInt(field.day) > 7) { common.notify.error("活动有效期的范围为:1-7"); return false; } return true; }, verify(es) { for (var i = 0; i < es.length; i++) { if (!es[i]()) { return false; } } return true; }, verifyAll() { return this.verify([this.verifyActivityInfo, this.verifyAwardInfo, this.verifyJoinInfo, this.verifyOpenInfo]); } }; var formManager = { //保存到临时变量 saveActivityInfoToTemp() { app.temp.activity = app.activity; }, saveAwardInfoToTemp() { app.temp.awardInfo = app.tempAwardsList; }, saveJoinInfoToTemp() { //赋值 const field = common.layuiForm.val('form-join-info'); var joinInfo = app.joinInfo; joinInfo.must = field.must; joinInfo.desc = field.desc; app.temp.joinInfo = joinInfo; }, saveOpenInfoToTemp() { const field = common.layuiForm.val('form-open-info'); var openInfo = app.openInfo; for (key in field) { openInfo[key] = field[key]; } app.temp.openInfo = openInfo; }, saveToTemp() { this.saveActivityInfoToTemp(); this.saveAwardInfoToTemp(); this.saveJoinInfoToTemp(); this.saveOpenInfoToTemp(); <script>; //验证管理器 var validManager = { //验证抽奖信息 verifyActivityInfo() { console.log("验证抽奖信息"); const field = common.layuiForm.val('form-activity-info'); if (!$("#poster").attr("src")) { common.notify.error("请选择封面图片"); return false; } }; //判断条件 if (field.showBanner == 1 && $(".banner").find("img").length == 0) { common.notify.error("请选择banner图片"); return false; } if (field.showBanner == 1 && $(".banner").find("img").length > 3) { common.notify.error("banner图最多3张"); return false; } return true; }, //验证奖品信息 verifyAwardInfo() { console.log("验证奖品信息"); if (app.tempAwardsList == null || app.tempAwardsList.length == 0) { common.notify.error("请添加奖项"); return false; } var hasAward = false; for (var i = 0; i < app.tempAwardsList.length; i++) { if (app.tempAwardsList[i].data && app.tempAwardsList[i].data.type) { hasAward = true; break; } } if (!hasAward) { common.notify.error("请选择奖项类型"); return false; } const field = common.layuiForm.val('form-award-info'); return true; }, //验证参与信息 verifyJoinInfo() { console.log("验证参与条件"); const field = common.layuiForm.val('form-join-info'); console.log(field); if (!app.joinInfo.adInfo.data) { common.notify.error("请选择参与条件-跳转链路"); return false; } return true; }, //验证开奖条件 verifyOpenInfo() { console.log("验证开奖条件"); const field = common.layuiForm.val('form-open-info'); console.log(field); alert(parseInt(field.minPersonCount)); alert(parseInt(field.day)); if (!parseInt(field.minPersonCount)) { common.notify.error("请填写正确的参与人数"); return false; } if (!parseInt(field.day)) { common.notify.error("请填写正确的天数"); return false; } if (parseInt(field.minPersonCount) < 1000 || parseInt(field.minPersonCount) > 10000) { common.notify.error("至少参与人数的范围为:1000-10000"); return false; } if (parseInt(field.day) < 1 || parseInt(field.day) > 7) { common.notify.error("活动有效期的范围为:1-7"); return false; } return true; }, verify(es) { for (var i = 0; i < es.length; i++) { if (!es[i]()) { return false; } } return true; }, verifyAll() { return this.verify([this.verifyActivityInfo, this.verifyAwardInfo, this.verifyJoinInfo, this.verifyOpenInfo]); } }; var formManager = { //保存到临时变量 saveActivityInfoToTemp() { app.temp.activity = app.activity; }, saveAwardInfoToTemp() { app.temp.awardInfo = app.tempAwardsList; }, saveJoinInfoToTemp() { //赋值 const field = common.layuiForm.val('form-join-info'); var joinInfo = app.joinInfo; joinInfo.must = field.must; joinInfo.desc = field.desc; app.temp.joinInfo = joinInfo; }, saveOpenInfoToTemp() { const field = common.layuiForm.val('form-open-info'); var openInfo = app.openInfo; for (key in field) { openInfo[key] = field[key]; } app.temp.openInfo = openInfo; }, saveToTemp() { this.saveActivityInfoToTemp(); this.saveAwardInfoToTemp(); this.saveJoinInfoToTemp(); this.saveOpenInfoToTemp(); } }; </script> @@ -450,25 +466,40 @@ //文件上传初始化 var uploadPoster; var uploadBanner; var posterFileList; var bannerFileList; common.initLayui(function () { //layui相关初始化成功 app.initData(); uploadPoster = common.initUploadImagePlugin({ const uploadPosterParams = { elem: "#choicePoster", showElem: "#poster", uploadUrl: "/admin/upload/image?from=activity", dir: 'poster', field: "image", choose(obj) { var files = posterFileList = obj.pushFile(); obj.preview(function (index, file, result) { $("#poster").attr("src", result); }); }, uploadSuccess: function (res) { app.posterUploadSuccess(res.data); //重置文件传输 for (key in posterFileList) { delete posterFileList[key]; } } }); }; uploadPoster = common.initUploadImagePlugin(uploadPosterParams); var bannerUrlList = new Array(); uploadBanner = common.initUploadImagePlugin({ var uploadBannerParams = { elem: "#choiceBanner", uploadUrl: "/admin/upload/image?from=activity", dir: 'banner', @@ -496,12 +527,18 @@ count++; } bannerUrlList.push(res.data); }, allDone: function (res) { //文件上传完毕 if (bannerUrlList.length == count) { app.bannerUploadSuccess(bannerUrlList); app.bannerUploadSuccess(bannerUrlList); for (key in bannerFileList) { delete bannerFileList[key]; } } }); } uploadBanner = common.initUploadImagePlugin(uploadBannerParams); console.log(uploadBanner); }); @@ -520,8 +557,10 @@ data: { activity: {}, tempAwardsList: [], openInfo: {}, joinInfo: {adInfo: {}}, openInfo: { }, joinInfo: { adInfo: {}}, temp: {//临时数据,用于提交到服务端 }, @@ -547,26 +586,35 @@ this.addAward(); }, methods: { //设置数据 setTempData(temp) { //活动信息赋值(深拷贝) this.activity = _.cloneDeep(temp.activity); this.tempAwardsList = _.cloneDeep(temp.awardInfo); this.openInfo = _.cloneDeep(temp.openInfo); this.joinInfo = _.cloneDeep(temp.joinInfo); }, //初始化数据 initData() { $this = this; /**************初始化抽奖信息************/ if (this.activity.poster) $("#poster").attr("src", this.activity.poster); if (this.activity.banner && this.activity.banner.length > 0) { for (var i = 0; i < this.activity.banner.length; i++) { var url = this.activity.banner[i].img; var item = getBannerItemHtml(url); item.find("i").on('click', function () { //删除当前数据 app.activity.banner.splice(i, 1); item.remove(); }); $(".banner").append(item); } //删除所有选择的文件 for (key in posterFileList) { delete posterFileList[key]; } //选择banner for (key in bannerFileList) { delete bannerFileList[key]; } $(".banner").empty(); if (this.activity.poster) $("#poster").attr("src", this.activity.poster); //选择banner监听 common.layuiForm.on('radio(banner)', function (data) { if (data.value == 1) { $(".banner-container").css("display", "block"); @@ -575,11 +623,31 @@ } }); if (this.activity.bannerList && this.activity.bannerList.length > 0) { for (var i = 0; i < this.activity.bannerList.length; i++) { var url = this.activity.bannerList[i].url; var item = getBannerItemHtml(url); item.find("i").on('click', function () { //删除当前数据 app.activity.bannerList.splice(i, 1); item.remove(); }); $(".banner").append(item); } //设置选项 $("input[name=showBanner][value=1]").prop("checked", "true"); } else { console.log("选择banner"); $("input[name=showBanner][value=0]").prop("checked", "true"); } common.layuiForm.on('submit(form-activity-info)', function (data) { field = common.layuiForm.val('form-activity-info'); if (!validManager.verifyActivityInfo()) if (!validManager.verifyActivityInfo()) { app.finishSubmit(); return false; } // 数据暂存 app.tempField.activity = field; //有封面图 @@ -595,8 +663,14 @@ common.layuiForm.on('submit(form-award-info)', function (data) { console.log("提交奖品信息"); if (!validManager.verifyAwardInfo()) if (!validManager.verifyAwardInfo()) { app.finishSubmit(); return false; } //暂存 formManager.saveAwardInfoToTemp() //赋值 $("#saveJoinInfo").click(); @@ -607,28 +681,46 @@ common.layuiForm.on('submit(form-join-info)', function (data) { console.log("提交参与条件"); if (!validManager.verifyJoinInfo()) if (!validManager.verifyJoinInfo()) { app.finishSubmit(); return false; $("#saveOpenInfo").click(); } //暂存 formManager.saveJoinInfoToTemp(); $("form[lay-filter=form-open-info]").submit() return false; }); //初始化表单的值 common.layuiForm.val("form-join-info", this.joinInfo); /**************初始化开奖条件************/ common.layuiForm.on('submit(form-open-info)', function (data) { console.log("提交开奖条件"); if (!validManager.verifyOpenInfo()) if (!validManager.verifyOpenInfo()) { app.finishSubmit(); return false; } //暂存 formManager.saveOpenInfoToTemp(); app.finishSubmit(true); return false; }); common.layuiForm.val("form-open-info", this.openInfo); common.layuiForm.render(); }, //封面图上传成功 posterUploadSuccess(res) { console.log("封面图上传成功"); console.log(res); if (res) {//上传了文件 $("#poster").attr("src", res); this.activity.poster = res; } //上传文件 var bannerEmpty = true; for (key in bannerFileList) { @@ -657,32 +749,23 @@ this.activity.bannerList.push(banner); } } //暂存活动信息 formManager.saveActivityInfoToTemp(); //提交奖项 $("#saveAwardInfo").click(); }, //添加 requestAdd: function () { //组装数据 if (this.data.awardsList.length == 0) { return; } if (this.data.poster == null || this.data.poster.length == 0) { return; } requestAdd: function (data) { var params = { activity: this.data.activity, awardsList: this.data.awardsList, openInfo: this.data.openInfo, adInfo: this.data.adInfo, data: data, } this.activity.poster = this.data.poster; //发异步,把数据提交给php ksapp.post('/admin/api/app/add', params, function (res) { ksapp.post('/admin/activity/addActivity', params, function (res) { if (res.code == 0) { layer.alert("增加成功", { icon: 6 @@ -706,17 +789,24 @@ if (!validManager.verifyAll()) { return; } var loading = layer.load(0, {shade: false}); app.submitLoading = loading; //触发表单提交 $("#saveActivityInfo").click(); //保存临时变量 formManager.saveToTemp(); console.log("临时变量") //将数据提交到服务器 var temp = this.temp; console.log(this.temp); }, finishSubmit: function (finish) { console.log(JSON.stringify(this.temp)); if (app.submitLoading) { layer.close(app.submitLoading) } //所有数据已经取完 if (finish) { console.log("获取到的结果"); console.log(this.temp); app.setTempData(this.temp); app.initData(); //this.requestAdd(JSON.stringify(this.temp)); } }, /** @@ -837,9 +927,10 @@ title: params.title, width: 500, height: 400, content: params.url + "?data=" + encodeURIComponent(JSON.stringify(award)), content: params.url + "?data=" + escape(JSON.stringify(award)), submit(res) { var award = app.tempAwardsList[index]; award.type = "alipayRedPackage"; var data = award.data; data.total = res.total; data.count = res.count; service-daylucky/src/main/resources/static/js/common.js
@@ -61,9 +61,11 @@ } , getQueryString(name) { console.log(window.location.search) var reg = new RegExp("(^|&)" + name + "=([^&]*)(&|$)", "i"); var r = window.location.search.substr(1).match(reg); if (r != null) return unescape(r[2]); if (r != null) return unescape(decodeURI(r[2])); return null; } , @@ -74,6 +76,7 @@ dir: params.dir } //普通图片上传 var layerIndex; var uploadInst = common.layuiUpload.render({ elem: params.elem, //自动上传图片 @@ -94,7 +97,18 @@ $(params.showElem).attr('src', result); //图片链接(base64) }); }, before: function (obj) { if (params.showLoading) layerIndex = layer.load(0, {shade: false}); }, allDone: function (obj) { if (params.allDone) { params.allDone(obj); } }, done: function (res, index, upload) { //上传后的回调 if (layerIndex) layer.close(layerIndex); console.log("上传成功"); console.log(res); if (res.code == 0) { @@ -104,6 +118,7 @@ } }, error: function () { layer.close(index); layer.alert("图片上传失败", {icon: 5}, null); if (params.uploadFail) { params.uploadFail(); service-daylucky/src/main/resources/static/js/lodash.js
New file Diff too large service-daylucky/src/main/resources/static/sponsor-ad-alipaylife.html
@@ -126,6 +126,7 @@ uploadUrl: "/admin/upload/image?from=activity", dir: 'sponsorad', field: "image", showLoading:true, uploadSuccess: function (res) { app.uploadSuccess(res.data); } @@ -153,7 +154,8 @@ sceneId: "" }, created: function () { var data = JSON.parse(decodeURIComponent(common.getQueryString("data"))); console.log("得到的值为:"+common.getQueryString("data")); var data = JSON.parse(common.getQueryString("data")); this.icon = data.icon; this.name = data.name; this.desc = data.desc; service-lucky/src/main/java/com/ks/lucky/service/impl/LuckyActivityAwardManager.java
@@ -1,11 +1,14 @@ package com.ks.lucky.service.impl; import com.ks.lib.common.exception.ParamsException; import com.ks.lucky.dao.LuckyActivityAwardMaterialDao; import com.ks.lucky.exception.LuckyActivityAwardException; import com.ks.lucky.exception.LuckyActivityAwardMaterialException; import com.ks.lucky.mapper.LuckyActivityAwardsMapper; import com.ks.lucky.pojo.DO.LuckyActivityAwardMaterial; import com.ks.lucky.pojo.DO.LuckyActivityAwards; import com.ks.lucky.query.ActivityAwardQuery; import com.ks.lucky.remote.service.LuckyActivityAwardMaterialService; import com.ks.lucky.util.annotation.RedisCache; import com.ks.lucky.util.annotation.RedisCacheEvict; import org.springframework.stereotype.Component; @@ -28,6 +31,9 @@ @Resource private LuckyActivityAwardMaterialDao luckyActivityAwardMaterialDao; @Resource private LuckyActivityAwardMaterialService luckyActivityAwardMaterialService; /** * 添加奖项 * @@ -35,7 +41,7 @@ * @throws LuckyActivityAwardException */ @Validated public void addAward(LuckyActivityAwards award) throws LuckyActivityAwardException { public void addAward(LuckyActivityAwards award) throws LuckyActivityAwardException, LuckyActivityAwardMaterialException, ParamsException { if (award.getCreateTime() == null) { award.setCreateTime(new Date()); } @@ -48,6 +54,12 @@ throw new LuckyActivityAwardException(LuckyActivityAwardException.CODE_EXIST, "同等级的奖项已经存在"); } if (award.getMaterial() != null && award.getMaterial().getId() == null) { String id = luckyActivityAwardMaterialService.addAwardMaterial(award.getMaterial()); award.getMaterial().setId(id); award.setMaterialId(id); } luckyActivityAwardsMapper.insertSelective(award); } service-lucky/src/main/java/com/ks/lucky/service/impl/LuckyActivitySponsorInfoManager.java
@@ -1,13 +1,16 @@ package com.ks.lucky.service.impl; import com.ks.lib.common.exception.ParamsException; import com.ks.lucky.dao.LuckySponsorAdDao; import com.ks.lucky.exception.LuckyActivitySponsorInfoException; import com.ks.lucky.exception.LuckySponsorAdException; import com.ks.lucky.mapper.LuckyActivitySponsorInfoMapper; import com.ks.lucky.mapper.LuckySponsorsMapper; import com.ks.lucky.pojo.DO.LuckyActivitySponsorInfo; import com.ks.lucky.pojo.DO.LuckySponsorAd; import com.ks.lucky.pojo.DO.LuckySponsors; import com.ks.lucky.query.ActivitySponsorInfoQuery; import com.ks.lucky.remote.service.LuckySponsorAdService; import com.ks.lucky.util.annotation.RedisCache; import com.ks.lucky.util.annotation.RedisCacheEvict; import org.springframework.stereotype.Component; @@ -30,6 +33,9 @@ private LuckySponsorAdDao luckySponsorAdDao; @Resource private LuckySponsorAdService luckySponsorAdService; @Resource private LuckySponsorsMapper luckySponsorsMapper; @@ -40,7 +46,7 @@ * @throws LuckyActivitySponsorInfoException */ @Validated public void addSponsorInfo(LuckyActivitySponsorInfo sponsorInfo) throws LuckyActivitySponsorInfoException { public void addSponsorInfo(LuckyActivitySponsorInfo sponsorInfo) throws LuckyActivitySponsorInfoException, LuckySponsorAdException, ParamsException { ActivitySponsorInfoQuery query = new ActivitySponsorInfoQuery(); query.activityId = sponsorInfo.getActivityId(); query.start = 0; @@ -54,6 +60,17 @@ if (sponsorInfo.getCreateTime() == null) { sponsorInfo.setCreateTime(new Date()); } if (sponsorInfo.getAd() != null) { if (sponsorInfo.getAd().getId() == null) { //添加广告 String id = luckySponsorAdService.addSponsorAd(sponsorInfo.getAd()); sponsorInfo.getAd().setId(id); sponsorInfo.setSponsorAdId(id); } } luckyActivitySponsorInfoMapper.insertSelective(sponsorInfo); } service-lucky/src/main/java/com/ks/lucky/service/impl/remote/LuckyActivityAwardMaterialServiceImpl.java
@@ -10,6 +10,7 @@ import javax.annotation.Resource; import java.util.Date; import java.util.UUID; @Service(version = "1.0.0") public class LuckyActivityAwardMaterialServiceImpl implements LuckyActivityAwardMaterialService { @@ -20,11 +21,17 @@ @Validated @Override public void addAwardMaterial(LuckyActivityAwardMaterial awardMaterial) throws ParamsException,LuckyActivityAwardMaterialException { public String addAwardMaterial(LuckyActivityAwardMaterial awardMaterial) throws ParamsException, LuckyActivityAwardMaterialException { if (awardMaterial.getCreateTime() == null) { awardMaterial.setCreateTime(new Date()); } if (awardMaterial.getId() == null) { awardMaterial.setId(UUID.randomUUID().toString()); } luckyActivityAwardMaterialDao.save(awardMaterial); return awardMaterial.getId(); } @Override service-lucky/src/main/java/com/ks/lucky/service/impl/remote/LuckyActivityAwardServiceImpl.java
@@ -2,6 +2,7 @@ import com.ks.lib.common.exception.ParamsException; import com.ks.lucky.exception.LuckyActivityAwardException; import com.ks.lucky.exception.LuckyActivityAwardMaterialException; import com.ks.lucky.pojo.DO.LuckyActivityAwards; import com.ks.lucky.remote.service.LuckyActivityAwardService; import com.ks.lucky.service.impl.LuckyActivityAwardManager; @@ -19,7 +20,7 @@ @Validated @Override public Long addAward(LuckyActivityAwards award) throws ParamsException, LuckyActivityAwardException { public Long addAward(LuckyActivityAwards award) throws ParamsException, LuckyActivityAwardException, LuckyActivityAwardMaterialException { luckyActivityAwardManager.addAward(award); return award.getId(); } service-lucky/src/main/java/com/ks/lucky/service/impl/remote/LuckyActivityServiceImpl.java
@@ -1,8 +1,7 @@ package com.ks.lucky.service.impl.remote; import com.ks.lib.common.exception.ParamsException; import com.ks.lucky.exception.LuckyActivityException; import com.ks.lucky.exception.LuckyMQException; import com.ks.lucky.exception.*; import com.ks.lucky.mapper.LuckyActivityMapper; import com.ks.lucky.pojo.DO.*; import com.ks.lucky.query.ActivityDaoQuery; @@ -57,6 +56,34 @@ } } @Validated @Transactional(rollbackFor = Exception.class) @Override public Long addActivity(LuckyActivity activity) throws ParamsException, LuckyActivityException, LuckyActivitySponsorInfoException, LuckyActivityAwardException, LuckyActivityOpenInfoException, LuckySponsorAdException, LuckyActivityAwardMaterialException { Long activityId = createActivity(activity); //添加banner图片 if (activity.getBannerList() != null) { for (LuckyActivityImage image : activity.getBannerList()) { image.setActivityId(activityId); luckyActivityImageService.add(image); } } //添加赞助活动 activity.getSponsorInfo().setActivityId(activityId); luckyActivitySponsorInfoManager.addSponsorInfo(activity.getSponsorInfo()); //添加奖项 for (LuckyActivityAwards awards : activity.getAwardsList()) { awards.setActivityId(activityId); luckyActivityAwardManager.addAward(awards); } //添加开奖信息 activity.getOpenInfo().setActivityId(activityId); luckyActivityOpenInfoManager.addOpenInfo(activity.getOpenInfo()); return activityId; } @Override public List<LuckyActivity> getActivityList(Long appId, Long sponsorId, List<Integer> stateList, String key, int page, int pageSize) { ActivityDaoQuery query = new ActivityDaoQuery(); service-lucky/src/main/java/com/ks/lucky/service/impl/remote/LuckyActivitySponsorInfoServiceImpl.java
@@ -2,6 +2,7 @@ import com.ks.lib.common.exception.ParamsException; import com.ks.lucky.exception.LuckyActivitySponsorInfoException; import com.ks.lucky.exception.LuckySponsorAdException; import com.ks.lucky.pojo.DO.LuckyActivitySponsorInfo; import com.ks.lucky.remote.service.LuckyActivitySponsorInfoService; import com.ks.lucky.service.impl.LuckyActivitySponsorInfoManager; @@ -19,7 +20,7 @@ @Validated @Override public Long addSponsorInfo(LuckyActivitySponsorInfo sponsorInfo) throws ParamsException, LuckyActivitySponsorInfoException { public Long addSponsorInfo(LuckyActivitySponsorInfo sponsorInfo) throws ParamsException, LuckyActivitySponsorInfoException, LuckySponsorAdException { luckyActivitySponsorInfoManager.addSponsorInfo(sponsorInfo); return sponsorInfo.getId(); } service-lucky/src/main/java/com/ks/lucky/service/impl/remote/LuckySponsorAdServiceImpl.java
@@ -81,7 +81,7 @@ @Validated @Override public void addSponsorAd(LuckySponsorAd ad) throws ParamsException,LuckySponsorAdException { public String addSponsorAd(LuckySponsorAd ad) throws ParamsException, LuckySponsorAdException { ad.setId(ad.getSponsorId() + "-" + System.currentTimeMillis()); if (ad.getCreateTime() == null) { @@ -90,6 +90,7 @@ ad.setState(LuckySponsorAd.STATE_WAIT_VERIFY); ad.setStateDesc("待审核"); luckySponsorAdDao.save(ad); return ad.getId(); } @Override service-lucky/src/test/java/com/ks/lucky/ActivityTest.java
@@ -128,6 +128,8 @@ e.printStackTrace(); } catch (LuckyActivitySponsorInfoException e) { e.printStackTrace(); } catch (LuckySponsorAdException e) { e.printStackTrace(); } } @@ -202,6 +204,8 @@ e.printStackTrace(); } catch (LuckyActivityAwardException e) { e.printStackTrace(); } catch (LuckyActivityAwardMaterialException e) { e.printStackTrace(); } }