admin
2021-01-15 5405154d6979f1b50ce2d881bb164b1acca80b6d
修改相关bug
3 文件已重命名
85个文件已修改
18个文件已添加
2433 ■■■■ 已修改文件
facade-app/src/main/java/com/ks/app/entity/AppAlipayInfo.java 2 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
facade-app/src/main/java/com/ks/app/entity/AppInfo.java 2 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
facade-app/src/main/java/com/ks/app/entity/AppWXInfo.java 3 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
facade-app/src/main/java/com/ks/app/util/AlipayAppUtil.java 19 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
facade-lucky/src/main/java/com/ks/lucky/exception/LuckyActivityOpenException.java 4 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
facade-lucky/src/main/java/com/ks/lucky/exception/LuckySponsorMoneyRecordException.java 13 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
facade-lucky/src/main/java/com/ks/lucky/pojo/DO/BaseUser.java 1 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
facade-lucky/src/main/java/com/ks/lucky/pojo/DO/LuckyActivity.java 21 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
facade-lucky/src/main/java/com/ks/lucky/pojo/DO/LuckyActivityAwardMaterial.java 2 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
facade-lucky/src/main/java/com/ks/lucky/pojo/DO/LuckyActivityAwardResultExtra.java 3 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
facade-lucky/src/main/java/com/ks/lucky/pojo/DO/LuckyActivityAwards.java 13 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
facade-lucky/src/main/java/com/ks/lucky/pojo/DO/LuckyActivityImage.java 3 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
facade-lucky/src/main/java/com/ks/lucky/pojo/DO/LuckyActivityJoinAssist.java 1 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
facade-lucky/src/main/java/com/ks/lucky/pojo/DO/LuckyActivityOpenInfo.java 16 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
facade-lucky/src/main/java/com/ks/lucky/pojo/DO/LuckyActivitySponsorInfo.java 1 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
facade-lucky/src/main/java/com/ks/lucky/pojo/DO/LuckyActivityUserWeightRecord.java 1 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
facade-lucky/src/main/java/com/ks/lucky/pojo/DO/LuckySponsorAd.java 16 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
facade-lucky/src/main/java/com/ks/lucky/pojo/DO/LuckySponsorMoneyRecord.java 126 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
facade-lucky/src/main/java/com/ks/lucky/pojo/DO/LuckySponsors.java 2 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
facade-lucky/src/main/java/com/ks/lucky/pojo/DTO/ActivityAwardParams.java 9 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
facade-lucky/src/main/java/com/ks/lucky/pojo/DTO/ActivityDrawnProbabilityStatistic.java 1 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
facade-lucky/src/main/java/com/ks/lucky/pojo/DTO/ActivityDrawnReceiveParams.java 17 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
facade-lucky/src/main/java/com/ks/lucky/pojo/DTO/ActivityJoinStatisticInfo.java 2 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
facade-lucky/src/main/java/com/ks/lucky/pojo/DTO/JoinInfo.java 2 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
facade-lucky/src/main/java/com/ks/lucky/pojo/DTO/mq/ActivityAssistMsgDTO.java 16 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
facade-lucky/src/main/java/com/ks/lucky/pojo/DTO/mq/BaseMQMsg.java 2 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
facade-lucky/src/main/java/com/ks/lucky/pojo/DTO/sponsorad/AlipayLifeAdInfo.java 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
facade-lucky/src/main/java/com/ks/lucky/remote/service/LuckyActivityAwardResultService.java 8 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
facade-lucky/src/main/java/com/ks/lucky/remote/service/LuckyActivityJoinAssistService.java 3 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
facade-lucky/src/main/java/com/ks/lucky/remote/service/LuckyActivityOpenService.java 3 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
facade-lucky/src/main/java/com/ks/lucky/remote/service/LuckyActivityService.java 12 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
facade-lucky/src/main/java/com/ks/lucky/remote/service/LuckySponsorMoneyRecordService.java 8 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
service-daylucky/src/main/java/com/ks/daylucky/config/CMQConsumeConfig.java 9 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
service-daylucky/src/main/java/com/ks/daylucky/controller/admin/AdminActivityController.java 26 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
service-daylucky/src/main/java/com/ks/daylucky/controller/admin/AdminSponsorController.java 57 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
service-daylucky/src/main/java/com/ks/daylucky/controller/api/client/ActivityAssistController.java 13 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
service-daylucky/src/main/java/com/ks/daylucky/controller/api/client/ActivityAwardsController.java 37 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
service-daylucky/src/main/java/com/ks/daylucky/controller/api/client/ActivityController.java 22 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
service-daylucky/src/main/java/com/ks/daylucky/controller/api/client/ActivityJoinController.java 17 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
service-daylucky/src/main/java/com/ks/daylucky/controller/api/client/ConfigController.java 8 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
service-daylucky/src/main/java/com/ks/daylucky/controller/api/client/UserController.java 7 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
service-daylucky/src/main/java/com/ks/daylucky/pojo/DO/UserMsg.java 8 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
service-daylucky/src/main/java/com/ks/daylucky/pojo/DTO/ConfigKeyEnum.java 5 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
service-daylucky/src/main/java/com/ks/daylucky/pojo/DTO/SimpleShareInfo.java 23 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
service-daylucky/src/main/java/com/ks/daylucky/pojo/DTO/UserMsgSettings.java 1 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
service-daylucky/src/main/java/com/ks/daylucky/pojo/VO/AssistFriendVO.java 10 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
service-daylucky/src/main/java/com/ks/daylucky/pojo/VO/UserMsgVO.java 9 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
service-daylucky/src/main/java/com/ks/daylucky/pojo/VO/admin/ActivityAdminVo.java 10 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
service-daylucky/src/main/java/com/ks/daylucky/service/UserInfoExtraService.java 11 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
service-daylucky/src/main/java/com/ks/daylucky/service/impl/ActivityServiceImpl.java 3 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
service-daylucky/src/main/java/com/ks/daylucky/service/impl/AlipayTemplateMsgManager.java 69 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
service-daylucky/src/main/java/com/ks/daylucky/service/impl/remote/UserInfoExtraServiceImpl.java 12 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
service-daylucky/src/main/java/com/ks/daylucky/service/impl/remote/UserMsgServiceImpl.java 9 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
service-daylucky/src/main/java/com/ks/daylucky/util/activity/ActivityUtil.java 7 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
service-daylucky/src/main/java/com/ks/daylucky/util/factory/LuckyMsgContentFactory.java 30 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
service-daylucky/src/main/java/com/ks/daylucky/util/factory/vo/ActivityDetailVOFactory.java 19 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
service-daylucky/src/main/java/com/ks/daylucky/util/factory/vo/ActivityListItemInfoVOFactory.java 12 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
service-daylucky/src/main/java/com/ks/daylucky/util/factory/vo/LuckyActivityFactory.java 5 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
service-daylucky/src/main/java/com/ks/daylucky/util/factory/vo/UserMsgVOFactory.java 9 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
service-daylucky/src/main/java/com/ks/daylucky/util/mq/consumer/ActivityDrawnNotifyConsumer.java 15 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
service-daylucky/src/main/java/com/ks/daylucky/util/mq/consumer/MsgConsumer.java 98 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
service-daylucky/src/main/resources/static/activity-add.html 19 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
service-daylucky/src/main/resources/static/award-type-redpacket-divide.html 12 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
service-daylucky/src/main/resources/static/award-type-redpacket-random.html 13 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
service-daylucky/src/test/java/com/ks/VisualUserTest.java 271 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
service-daylucky/src/test/java/com/ks/daylucky/MsgTest.java 39 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
service-lucky/pom.xml 18 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
service-lucky/src/main/java/com/ks/lucky/config/CMQConsumeConfig.java 11 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
service-lucky/src/main/java/com/ks/lucky/mapper/LuckyActivityJoinAssistMapper.java 3 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
service-lucky/src/main/java/com/ks/lucky/mapper/LuckyActivityJoinRecordMapper.java 3 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
service-lucky/src/main/java/com/ks/lucky/mapper/LuckySponsorMoneyRecordMapper.java 8 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
service-lucky/src/main/java/com/ks/lucky/mapper/LuckySponsorsMapper.java 2 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
service-lucky/src/main/java/com/ks/lucky/pojo/DTO/RedPackage.java 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
service-lucky/src/main/java/com/ks/lucky/service/LuckySponsorMoneyService.java 32 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
service-lucky/src/main/java/com/ks/lucky/service/impl/LuckyActivityAwardManager.java 23 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
service-lucky/src/main/java/com/ks/lucky/service/impl/LuckyActivityAwardResultManager.java 79 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
service-lucky/src/main/java/com/ks/lucky/service/impl/LuckyActivityManager.java 7 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
service-lucky/src/main/java/com/ks/lucky/service/impl/LuckyMQServiceImpl.java 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
service-lucky/src/main/java/com/ks/lucky/service/impl/LuckySponsorMoneyRecordManager.java 31 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
service-lucky/src/main/java/com/ks/lucky/service/impl/LuckySponsorMoneyServiceImpl.java 94 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
service-lucky/src/main/java/com/ks/lucky/service/impl/remote/LuckyActivityAwardResultServiceImpl.java 13 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
service-lucky/src/main/java/com/ks/lucky/service/impl/remote/LuckyActivityJoinAssistServiceImpl.java 39 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
service-lucky/src/main/java/com/ks/lucky/service/impl/remote/LuckyActivityJoinServiceImpl.java 13 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
service-lucky/src/main/java/com/ks/lucky/service/impl/remote/LuckyActivityOpenServiceImpl.java 42 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
service-lucky/src/main/java/com/ks/lucky/service/impl/remote/LuckyActivityServiceImpl.java 45 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
service-lucky/src/main/java/com/ks/lucky/service/impl/remote/LuckySponsorMoneyRecordServiceImpl.java 17 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
service-lucky/src/main/java/com/ks/lucky/util/LoggerUtil.java 9 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
service-lucky/src/main/java/com/ks/lucky/util/RedPackageUtil.java 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
service-lucky/src/main/java/com/ks/lucky/util/mq/CMQManager.java 27 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
service-lucky/src/main/java/com/ks/lucky/util/mq/LuckyMQFactory.java 13 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
service-lucky/src/main/java/com/ks/lucky/util/mq/consumer/ActivityConsumer.java 20 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
service-lucky/src/main/java/com/ks/lucky/util/mq/consumer/JobConsumer.java 38 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
service-lucky/src/main/resources/application.yml 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
service-lucky/src/main/resources/generatorConfig.xml 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
service-lucky/src/main/resources/logback.xml 21 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
service-lucky/src/main/resources/mapper/LuckyActivityJoinAssistMapper.xml 45 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
service-lucky/src/main/resources/mapper/LuckyActivityMapper.xml 14 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
service-lucky/src/main/resources/mapper/LuckyActivityOpenInfoMapper.xml 206 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
service-lucky/src/main/resources/mapper/LuckySponsorMoneyRecordMapper.xml 141 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
service-lucky/src/main/resources/mapper/LuckySponsorsMapper.xml 10 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
service-lucky/src/test/java/com/ks/MyBatisTest.java 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
service-lucky/src/test/java/com/ks/lucky/ActivityTest.java 28 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
service-lucky/src/test/java/com/ks/lucky/DaoTest.java 13 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
service-lucky/src/test/java/com/ks/lucky/GeneralTest.java 55 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
service-lucky/src/test/java/com/ks/lucky/JoinTest.java 8 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
service-lucky/src/test/java/com/ks/lucky/MapperTest.java 44 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
facade-app/src/main/java/com/ks/app/entity/AppAlipayInfo.java
@@ -3,6 +3,8 @@
import java.io.Serializable;
public class AppAlipayInfo  implements Serializable {
    private static final long serialVersionUID = 1L;
    private Long appId;
    private String alipayAppId;
facade-app/src/main/java/com/ks/app/entity/AppInfo.java
@@ -10,6 +10,8 @@
@Valid
public class AppInfo implements Serializable {
    private static final long serialVersionUID = 1L;
    public enum AppType {
        wxXCX("微信小程序"), alipayXCX("支付宝小程序");
facade-app/src/main/java/com/ks/app/entity/AppWXInfo.java
@@ -4,6 +4,9 @@
import java.util.Date;
public class AppWXInfo implements Serializable {
    private static final long serialVersionUID = 1L;
    private Long appId;
    private String wxAppId;
facade-app/src/main/java/com/ks/app/util/AlipayAppUtil.java
New file
@@ -0,0 +1,19 @@
package com.ks.app.util;
import com.ks.app.entity.AppAlipayInfoWithBLOBs;
import org.yeshi.utils.entity.alipay.AlipayAppInfo;
import org.yeshi.utils.entity.alipay.AlipayCertInfo;
import java.io.ByteArrayInputStream;
import java.io.InputStream;
public class AlipayAppUtil {
    public static AlipayAppInfo getAlipayAppInfo(AppAlipayInfoWithBLOBs alipayInfo) {
        InputStream appCert = new ByteArrayInputStream(alipayInfo.getAlipayAppCertPublicKey());
        InputStream publicCert = new ByteArrayInputStream(alipayInfo.getAlipayPublicCert());
        InputStream rootCert = new ByteArrayInputStream(alipayInfo.getAlipayRootCert());
        AlipayAppInfo appInfo = new AlipayAppInfo(alipayInfo.getAlipayAppId(), alipayInfo.getAlipayPrivateKey(), new AlipayCertInfo(appCert, publicCert, rootCert));
        return appInfo;
    }
}
facade-lucky/src/main/java/com/ks/lucky/exception/LuckyActivityOpenException.java
@@ -4,6 +4,10 @@
public class LuckyActivityOpenException extends BaseException {
    //没有达到最低开奖人数
    public final static int CODE_NOT_REACH_OPEN_PERSON_COUNT=300001;
    public LuckyActivityOpenException(int code, String msg) {
        super(code, msg);
    }
facade-lucky/src/main/java/com/ks/lucky/exception/LuckySponsorMoneyRecordException.java
New file
@@ -0,0 +1,13 @@
package com.ks.daylucky.exception;
import com.ks.lib.common.exception.BaseException;
public class LuckySponsorMoneyRecordException extends BaseException{
 public LuckySponsorMoneyRecordException(int code, String msg) {
        super(code, msg);
 }
}
facade-lucky/src/main/java/com/ks/lucky/pojo/DO/BaseUser.java
@@ -3,6 +3,7 @@
import java.io.Serializable;
public class BaseUser implements Serializable {
    private static final long serialVersionUID = 1L;
    private Long appId;
    private String uid;
facade-lucky/src/main/java/com/ks/lucky/pojo/DO/LuckyActivity.java
@@ -15,6 +15,7 @@
@Valid
public class LuckyActivity implements Serializable {
    private static final long serialVersionUID = 1L;
    //未提交审核
    public final static int STATE_NOT_SUBMIT_VERIFY = -2;
@@ -108,11 +109,6 @@
    @Column(name = "actual_finish_time")
    private Date actualFinishTime;
    @Column(name = "pre_open_time")
    private Date preOpenTime;
    @Column(name = "actual_open_time")
    private Date actualOpenTime;
    @Column(name = "create_time")
    private Date createTime;
@@ -200,13 +196,6 @@
        this.sponsorId = sponsorId;
    }
    public Date getActualOpenTime() {
        return actualOpenTime;
    }
    public void setActualOpenTime(Date actualOpenTime) {
        this.actualOpenTime = actualOpenTime;
    }
    public String getName() {
        return name;
@@ -270,14 +259,6 @@
    public void setStateRemarks(String stateRemarks) {
        this.stateRemarks = stateRemarks == null ? null : stateRemarks.trim();
    }
    public Date getPreOpenTime() {
        return preOpenTime;
    }
    public void setPreOpenTime(Date preOpenTime) {
        this.preOpenTime = preOpenTime;
    }
    public Date getCreateTime() {
facade-lucky/src/main/java/com/ks/lucky/pojo/DO/LuckyActivityAwardMaterial.java
@@ -15,6 +15,8 @@
@Valid
public class LuckyActivityAwardMaterial  implements Serializable {
    private static final long serialVersionUID = 1L;
    public enum ActivityAwardMaterialType {
        alipayRedPackage("支付宝红包");
facade-lucky/src/main/java/com/ks/lucky/pojo/DO/LuckyActivityAwardResultExtra.java
@@ -10,6 +10,9 @@
@Table("lucky_activity_award_result_extra")
public class LuckyActivityAwardResultExtra  implements Serializable {
    private static final long serialVersionUID = 1L;
    @Column(name = "id")
    private Long id;
    @Column(name = "award_result_id")
facade-lucky/src/main/java/com/ks/lucky/pojo/DO/LuckyActivityAwards.java
@@ -13,6 +13,7 @@
@Table("lucky_activity_awards")
@Valid
public class LuckyActivityAwards implements Serializable {
    private static final long serialVersionUID = 1L;
    //平分
    public final static int AWARD_WAY_DIVIDE = 1;
@@ -59,6 +60,18 @@
    private LuckyActivityAwardMaterial material;
    @Transient
    private ActivityAwardParams activityAwardParams;
    public ActivityAwardParams getActivityAwardParams() {
        return activityAwardParams;
    }
    public void setActivityAwardParams(ActivityAwardParams activityAwardParams) {
        this.activityAwardParams = activityAwardParams;
    }
    public LuckyActivityAwardMaterial getMaterial() {
        return material;
    }
facade-lucky/src/main/java/com/ks/lucky/pojo/DO/LuckyActivityImage.java
@@ -10,6 +10,9 @@
@Document(collection = "luckyActivityImage")
public class LuckyActivityImage implements Serializable {
    private static final long serialVersionUID = 1L;
    public enum LuckyImageType {
        banner("banner");
facade-lucky/src/main/java/com/ks/lucky/pojo/DO/LuckyActivityJoinAssist.java
@@ -4,6 +4,7 @@
import java.util.Date;
public class LuckyActivityJoinAssist implements Serializable {
    private static final long serialVersionUID = 1L;
    private Long id;
facade-lucky/src/main/java/com/ks/lucky/pojo/DO/LuckyActivityOpenInfo.java
@@ -1,10 +1,15 @@
package com.ks.lucky.pojo.DO;
import org.yeshi.utils.generater.mybatis.Table;
import javax.validation.constraints.NotNull;
import java.io.Serializable;
import java.util.Date;
@Table("lucky_activity_open_info")
public class LuckyActivityOpenInfo implements Serializable {
    private static final long serialVersionUID = 1L;
    //达到开奖人数后开奖
    public final static int OPEN_TYPE_PERSON = 1;
@@ -26,10 +31,21 @@
    private Date actualOpenTime;
    private String remarks;
    private Date createTime;
    private Date updateTime;
    public String getRemarks() {
        return remarks;
    }
    public void setRemarks(String remarks) {
        this.remarks = remarks;
    }
    public Long getId() {
        return id;
    }
facade-lucky/src/main/java/com/ks/lucky/pojo/DO/LuckyActivitySponsorInfo.java
@@ -7,6 +7,7 @@
import java.util.Date;
public class LuckyActivitySponsorInfo  implements Serializable {
    private static final long serialVersionUID = 1L;
    private Long id;
    @NotNull(message = "活动ID不能为空")
facade-lucky/src/main/java/com/ks/lucky/pojo/DO/LuckyActivityUserWeightRecord.java
@@ -6,6 +6,7 @@
import java.util.Date;
public class LuckyActivityUserWeightRecord implements Serializable {
    private static final long serialVersionUID = 1L;
    private Long id;
    @NotNull(message = "活动ID不能为空")
facade-lucky/src/main/java/com/ks/lucky/pojo/DO/LuckySponsorAd.java
@@ -14,6 +14,7 @@
@Valid
@Document(collection = "luckySponsorAd")
public class LuckySponsorAd implements Serializable {
    private static final long serialVersionUID = 1L;
    //待审核
    public final static int STATE_WAIT_VERIFY = 0;
@@ -39,15 +40,20 @@
    private String id;
    @NotNull(message = "请指定广告类型")
    private SponsorAdType adType;//广告类型
    //广告类型
    private SponsorAdType adType;
    @NotNull(message = "请指定赞助商")
    private Long sponsorId;
    //说明
    private String desc;
    private Integer state;
    private String stateDesc;
    private Date verifyTime;
    private Date verifySuccessTime;
    private Date createTime;
    private Date updateTime;
    //支付宝生活号
    private AlipayLifeAdInfo alipayLifeAdInfo;
@@ -131,4 +137,12 @@
    public void setUpdateTime(Date updateTime) {
        this.updateTime = updateTime;
    }
    public String getDesc() {
        return desc;
    }
    public void setDesc(String desc) {
        this.desc = desc;
    }
}
facade-lucky/src/main/java/com/ks/lucky/pojo/DO/LuckySponsorMoneyRecord.java
New file
@@ -0,0 +1,126 @@
package com.ks.lucky.pojo.DO;
import javax.validation.constraints.NotNull;
import java.math.BigDecimal;
import java.util.Date;
public class LuckySponsorMoneyRecord {
    public enum RecordType {
        publishActivity("发布活动"),
        drawnNotReceive("中奖未领取");
        private RecordType(String name) {
        }
    }
    private Long id;
    @NotNull(message = "赞助商ID不能为空")
    private Long sponsorId;
    @NotNull(message = "记录类型不能为空")
    private RecordType type;
    @NotNull(message = "金额不能为空")
    private BigDecimal money;
    private Long activityId;
    private String extraParams;
    private String remarks;
    private Date createTime;
    private Date updateTime;
    public Long getId() {
        return id;
    }
    public void setId(Long id) {
        this.id = id;
    }
    public Long getSponsorId() {
        return sponsorId;
    }
    public void setSponsorId(Long sponsorId) {
        this.sponsorId = sponsorId;
    }
    public RecordType getType() {
        return type;
    }
    public void setType(RecordType type) {
        this.type = type;
    }
    public BigDecimal getMoney() {
        return money;
    }
    public void setMoney(BigDecimal money) {
        this.money = money;
    }
    public Long getActivityId() {
        return activityId;
    }
    public void setActivityId(Long activityId) {
        this.activityId = activityId;
    }
    public String getExtraParams() {
        return extraParams;
    }
    public void setExtraParams(String extraParams) {
        this.extraParams = extraParams == null ? null : extraParams.trim();
    }
    public String getRemarks() {
        return remarks;
    }
    public void setRemarks(String remarks) {
        this.remarks = remarks == null ? null : remarks.trim();
    }
    public Date getCreateTime() {
        return createTime;
    }
    public void setCreateTime(Date createTime) {
        this.createTime = createTime;
    }
    public Date getUpdateTime() {
        return updateTime;
    }
    public void setUpdateTime(Date updateTime) {
        this.updateTime = updateTime;
    }
    public static class DrawnInfo {
        private Long id;
        public DrawnInfo(Long id) {
            this.id = id;
        }
        public Long getId() {
            return id;
        }
        public void setId(Long id) {
            this.id = id;
        }
    }
}
facade-lucky/src/main/java/com/ks/lucky/pojo/DO/LuckySponsors.java
@@ -12,6 +12,8 @@
@Valid
public class LuckySponsors implements Serializable {
    private static final long serialVersionUID = 1L;
    //正常
    public final static int STATE_NORMAL = 0;
    //封禁
facade-lucky/src/main/java/com/ks/lucky/pojo/DTO/ActivityAwardParams.java
@@ -2,12 +2,15 @@
import com.google.gson.Gson;
import java.io.Serializable;
import java.math.BigDecimal;
/**
 * 活动奖项参数
 */
public class ActivityAwardParams {
public class ActivityAwardParams implements Serializable {
    private static final long serialVersionUID = 1L;
    public enum ActivityAwardTypeEnum {
        alipayRedPackage("支付宝红包"),
@@ -53,4 +56,8 @@
    public String toString() {
        return new Gson().toJson(this);
    }
    public static ActivityAwardParams getBean(String params) {
        return new Gson().fromJson(params, ActivityAwardParams.class);
    }
}
facade-lucky/src/main/java/com/ks/lucky/pojo/DTO/ActivityDrawnProbabilityStatistic.java
@@ -7,6 +7,7 @@
 * 活动中奖率统计
 */
public class ActivityDrawnProbabilityStatistic implements Serializable {
    private static final long serialVersionUID = 1L;
    private Long activityId;
facade-lucky/src/main/java/com/ks/lucky/pojo/DTO/ActivityDrawnReceiveParams.java
New file
@@ -0,0 +1,17 @@
package com.ks.lucky.pojo.DTO;
import java.io.Serializable;
public class ActivityDrawnReceiveParams implements Serializable {
    private final static long serialVersionUID = 1L;
    private String alipayUid;
    public String getAlipayUid() {
        return alipayUid;
    }
    public void setAlipayUid(String alipayUid) {
        this.alipayUid = alipayUid;
    }
}
facade-lucky/src/main/java/com/ks/lucky/pojo/DTO/ActivityJoinStatisticInfo.java
@@ -7,6 +7,8 @@
 */
public class ActivityJoinStatisticInfo implements Serializable {
    private static final long serialVersionUID = 1L;
    private Long activityId;
    private Integer myPosition;
    private Integer totalJoiner;
facade-lucky/src/main/java/com/ks/lucky/pojo/DTO/JoinInfo.java
@@ -6,6 +6,8 @@
public class JoinInfo implements Serializable {
    private static final long serialVersionUID = 1L;
    /**
     * 支付宝用户ID
     */
facade-lucky/src/main/java/com/ks/lucky/pojo/DTO/mq/ActivityAssistMsgDTO.java
@@ -1,5 +1,6 @@
package com.ks.lucky.pojo.DTO.mq;
import com.ks.lucky.pojo.DO.ActivityJoinAssistEvent;
import com.ks.lucky.utils.LuckyCMQConstant;
import java.util.Date;
@@ -21,17 +22,30 @@
    //发生时间
    private Date dateTime;
    //事件
    private ActivityJoinAssistEvent assistEvent;
    public ActivityAssistMsgDTO(Long activityId, Long appId, String uid, String targetUid, Boolean success, Date dateTime) {
    public ActivityAssistMsgDTO(Long activityId, Long appId, String uid, String targetUid, Boolean success, Date dateTime, ActivityJoinAssistEvent assistEvent) {
        this.activityId = activityId;
        this.appId = appId;
        this.uid = uid;
        this.targetUid = targetUid;
        this.success = success;
        this.dateTime = dateTime;
        this.assistEvent = assistEvent;
        this.setCmqMsgTag(LuckyCMQConstant.TAG_ASSIST);
    }
    public ActivityJoinAssistEvent getAssistEvent() {
        return assistEvent;
    }
    public void setAssistEvent(ActivityJoinAssistEvent assistEvent) {
        this.assistEvent = assistEvent;
    }
    public Boolean getSuccess() {
        return success;
    }
facade-lucky/src/main/java/com/ks/lucky/pojo/DTO/mq/BaseMQMsg.java
@@ -3,6 +3,8 @@
import java.io.Serializable;
public class BaseMQMsg implements Serializable {
    private static final long serialVersionUID = 1L;
    private String cmqMsgTag;
    public String getCmqMsgTag() {
facade-lucky/src/main/java/com/ks/lucky/pojo/DTO/sponsorad/AlipayLifeAdInfo.java
@@ -5,7 +5,7 @@
import java.io.Serializable;
public class AlipayLifeAdInfo implements Serializable {
    private static final long serialVersionUID = 1L;
    /**
     * 图标
     */
facade-lucky/src/main/java/com/ks/lucky/remote/service/LuckyActivityAwardResultService.java
@@ -4,6 +4,7 @@
import com.ks.lucky.exception.LuckyActivityAwardResultException;
import com.ks.lucky.exception.LuckyActivityException;
import com.ks.lucky.pojo.DO.LuckyActivityAwardResult;
import com.ks.lucky.pojo.DTO.ActivityDrawnReceiveParams;
import java.util.Date;
import java.util.List;
@@ -26,12 +27,15 @@
    /**
     * 领奖
     *
     * @param appId
     * @param uid
     * @param activityId
     * @param params
     * @throws LuckyActivityException
     * @throws LuckyActivityAwardException
     * @throws LuckyActivityAwardResultException
     */
    public void recieveAward(Long appId, String uid, Long activityId) throws LuckyActivityException, LuckyActivityAwardException, LuckyActivityAwardResultException;
    public void recieveAward(Long appId, String uid, Long activityId, ActivityDrawnReceiveParams params) throws LuckyActivityException, LuckyActivityAwardException, LuckyActivityAwardResultException;
    /**
facade-lucky/src/main/java/com/ks/lucky/remote/service/LuckyActivityJoinAssistService.java
@@ -45,12 +45,13 @@
     * 获取助力记录
     *
     * @param joinId
     * @param activityId  joinId与activityId二选一
     * @param appId
     * @param uid
     * @param eventKey
     * @return
     */
    public LuckyActivityJoinAssist getRecord(@NotNull Long joinId, @NotNull Long appId, @NotEmpty String uid, @NotNull ActivityJoinAssistEvent eventKey);
    public LuckyActivityJoinAssist getRecord(Long joinId, Long activityId, @NotNull Long appId, @NotEmpty String uid, @NotNull ActivityJoinAssistEvent eventKey);
    /**
facade-lucky/src/main/java/com/ks/lucky/remote/service/LuckyActivityOpenService.java
@@ -3,6 +3,7 @@
import com.ks.lucky.exception.LuckyActivityAwardException;
import com.ks.lucky.exception.LuckyActivityException;
import com.ks.lucky.exception.LuckyActivityOpenException;
import com.ks.lucky.exception.LuckyActivityOpenInfoException;
/**
 * 开奖服务
@@ -23,7 +24,7 @@
     *
     * @param activityId
     */
    public void showOpenAward(Long activityId) throws LuckyActivityException;
    public void showOpenAward(Long activityId) throws LuckyActivityException, LuckyActivityOpenInfoException;
facade-lucky/src/main/java/com/ks/lucky/remote/service/LuckyActivityService.java
@@ -5,6 +5,7 @@
import com.ks.lucky.pojo.DO.LuckyActivity;
import javax.validation.Valid;
import java.util.Date;
import java.util.List;
/**
@@ -104,6 +105,17 @@
    /**
     * 发布活动
     *
     * @param activityId
     * @param startTime
     * @param finishTime
     * @throws LuckyActivityException
     */
    public void publishActivity(Long activityId, Date startTime, Date finishTime) throws LuckyActivityException;
    /**
     * 开始活动
     *
     * @param activityId
facade-lucky/src/main/java/com/ks/lucky/remote/service/LuckySponsorMoneyRecordService.java
New file
@@ -0,0 +1,8 @@
package com.ks.lucky.remote.service;
public interface LuckySponsorMoneyRecordService {
}
service-daylucky/src/main/java/com/ks/daylucky/config/CMQConsumeConfig.java
@@ -1,5 +1,6 @@
package com.ks.daylucky.config;
import com.ks.daylucky.util.mq.consumer.ActivityDrawnNotifyConsumer;
import com.ks.daylucky.util.mq.consumer.MsgConsumer;
import com.ks.lucky.utils.mq.CMQConsumeRunner;
import org.slf4j.Logger;
@@ -25,4 +26,12 @@
        CMQConsumeRunner runner = new MsgConsumer();
        return runner;
    }
    @Bean(initMethod = "start", destroyMethod = "destroy")
    public CMQConsumeRunner drawnNorifyConsumer() {
        //订阅活动状态改变主题与助力主题
        CMQConsumeRunner runner = new ActivityDrawnNotifyConsumer();
        return runner;
    }
}
service-daylucky/src/main/java/com/ks/daylucky/controller/admin/AdminActivityController.java
@@ -18,6 +18,7 @@
import javax.annotation.Resource;
import javax.servlet.http.HttpServletRequest;
import java.util.Date;
@Controller
@RequestMapping("/admin/activity")
@@ -39,7 +40,7 @@
     */
    @ResponseBody
    @RequestMapping("addActivity")
    public String addActivity(HttpServletRequest request, String data) {
    public String addActivity(HttpServletRequest request, String data, String type) {
        ActivityAdminVo vo = new Gson().fromJson(data, ActivityAdminVo.class);
        Long sponsorId = 1L;
        Long appId = 4L;
@@ -51,6 +52,29 @@
            extraInfo.setActivityId(activityId);
            activityExtraInfoService.add(extraInfo);
            switch (type) {
                //保存
                case "save":
                    //提交审核
                    luckyActivityService.submitVerify(activityId);
                    //通过审核
                    luckyActivityService.verifyActivity(activityId, true, "系统自动通过审核");
                    break;
                //发布
                case "publish":
                    //提交审核
                    luckyActivityService.submitVerify(activityId);
                    //通过审核
                    luckyActivityService.verifyActivity(activityId, true, "系统自动通过审核");
                    //1分钟后开始
                    Date startTime = new Date(System.currentTimeMillis() + 1000 * 60L);
                    Date finishTime = new Date(startTime.getTime() + 1000 * 60 * 60 * 24L * extraInfo.getValidDay());
                    luckyActivityService.publishActivity(activityId, startTime, finishTime);
                    break;
                default:
                    break;
            }
            JSONObject result = new JSONObject();
            result.put("id", activityId);
            return JsonUtil.loadTrueResult(result);
service-daylucky/src/main/java/com/ks/daylucky/controller/admin/AdminSponsorController.java
New file
@@ -0,0 +1,57 @@
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.pojo.DO.LuckySponsors;
import com.ks.lucky.remote.service.LuckyActivityService;
import com.ks.lucky.remote.service.LuckySponsorService;
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;
import java.util.Date;
/**
 * 赞助商管理
 */
@Controller
@RequestMapping("/admin/sponsor")
public class AdminSponsorController {
    @Reference(version = "1.0.0")
    private LuckySponsorService luckySponsorService;
    /**
     * 获取余额
     *
     * @param request
     * @return
     */
    @ResponseBody
    @RequestMapping("getBalance")
    public String getBalance(HttpServletRequest request) {
        Long sponsorId = 1L;
        LuckySponsors sponsor = luckySponsorService.getSponsorDetail(sponsorId);
        if (sponsor == null) {
            return JsonUtil.loadFalseResult("赞助商不存在");
        }
        JSONObject data = new JSONObject();
        data.put("balance", sponsor.getBalance().setScale(2).toString());
        return JsonUtil.loadTrueResult(data);
    }
}
service-daylucky/src/main/java/com/ks/daylucky/controller/api/client/ActivityAssistController.java
@@ -1,5 +1,6 @@
package com.ks.daylucky.controller.api.client;
import com.google.gson.Gson;
import com.ks.daylucky.pojo.DO.UserInfo;
import com.ks.daylucky.pojo.DTO.AssistJoinInfoDTO;
import com.ks.daylucky.pojo.VO.*;
@@ -35,13 +36,13 @@
@RequestMapping("api/client/activity/assist")
public class ActivityAssistController {
    @Reference(version = "1.0.0",check = false)
    @Reference(version = "1.0.0", check = false)
    private LuckyActivityJoinAssistService luckyActivityJoinAssistService;
    @Reference(version = "1.0.0",check = false)
    @Reference(version = "1.0.0", check = false)
    private LuckyActivityJoinService luckyActivityJoinService;
    @Reference(version = "1.0.0",check = false)
    @Reference(version = "1.0.0", check = false)
    private LuckyActivityService luckyActivityService;
    @Resource
@@ -99,12 +100,14 @@
            if (uidList.size() > 0) {
                Map<Long, UserInfo> userInfoMap = userInfoService.listUserInfoAsMap(UserInfoUtil.getBaseUserList(recordList));
                for (ActivityAssistFriend assistFriend : recordList) {
                    list.add(new AssistFriendVO(userInfoMap.get(Long.parseLong(assistFriend.getUid())), assistFriend.getAssistCount()));
                    UserInfo user = userInfoMap.get(Long.parseLong(assistFriend.getUid()));
                    list.add(new AssistFriendVO(new SimpleUser(user.getId(), user.getNickName(), user.getPortrait()), assistFriend.getAssistCount()));
                }
            }
        }
        JSONObject data = new JSONObject();
        data.put("data", JsonUtil.getApiCommonGson().toJson(list));
        data.put("data", new Gson().toJson(list));
        data.put("count", count);
        return JsonUtil.loadTrueResult(data);
    }
service-daylucky/src/main/java/com/ks/daylucky/controller/api/client/ActivityAwardsController.java
@@ -7,15 +7,20 @@
import com.ks.daylucky.service.UserInfoService;
import com.ks.daylucky.util.Constant;
import com.ks.daylucky.util.UserInfoUtil;
import com.ks.daylucky.util.activity.ActivityUtil;
import com.ks.daylucky.util.factory.vo.ActivityDetailVOFactory;
import com.ks.daylucky.util.factory.vo.ActivityListItemInfoVOFactory;
import com.ks.lucky.exception.LuckyActivityAwardException;
import com.ks.lucky.exception.LuckyActivityAwardResultException;
import com.ks.lucky.exception.LuckyActivityException;
import com.ks.lucky.pojo.DO.LuckyActivity;
import com.ks.lucky.pojo.DO.LuckyActivityAwardResult;
import com.ks.lucky.pojo.DO.LuckyActivityAwards;
import com.ks.lucky.pojo.DTO.ActivityAwardParams;
import com.ks.lucky.pojo.DTO.ActivityDrawnReceiveParams;
import com.ks.lucky.remote.service.LuckyActivityAwardResultService;
import com.ks.lucky.remote.service.LuckyActivityAwardService;
import com.ks.lucky.remote.service.LuckyActivityService;
import net.sf.json.JSONArray;
import net.sf.json.JSONObject;
import org.apache.dubbo.config.annotation.Reference;
@@ -35,11 +40,14 @@
@RequestMapping("api/client/activity/awards")
public class ActivityAwardsController {
    @Reference(version = "1.0.0",check = false)
    @Reference(version = "1.0.0", check = false)
    private LuckyActivityAwardResultService luckyActivityAwardResultService;
    @Reference(version = "1.0.0",check = false)
    @Reference(version = "1.0.0", check = false)
    private LuckyActivityAwardService luckyActivityAwardService;
    @Reference(version = "1.0.0", check = false)
    private LuckyActivityService luckyActivityService;
    @Resource
    private UserInfoService userInfoService;
@@ -69,7 +77,7 @@
            List<SimpleUser> userList = new ArrayList<>();
            Map<Long, UserInfo> userMap = userInfoService.listUserInfoAsMap(UserInfoUtil.getBaseUserList(awardResults));
            for (LuckyActivityAwardResult info : awardResults) {
                UserInfo user = userMap.get(info.getUid());
                UserInfo user = userMap.get(Long.parseLong(info.getUid()));
                if (user != null) {
                    userList.add(new SimpleUser(user.getId(), user.getNickName(), user.getPortrait()));
                }
@@ -134,10 +142,11 @@
        ActivityDrawnRecieveNotifyInfo info = activityDrawnRecieveNotifyInfoService.getShowNotifyInfo(acceptData.getApp().getId(), acceptData.getUid(), activityId);
        if (info != null) {
            UserActivityUnRecievedAwardVO vo = new UserActivityUnRecievedAwardVO();
            LuckyActivityAwards award = info.getAwards();
            LuckyActivityAwards award = luckyActivityAwardService.getAwardDetail(info.getAwards().getId());
            LuckyActivity activity = luckyActivityService.getActivity(award.getActivityId());
            vo.setTitle("活动期号:NO." + award.getActivityId());
            vo.setActivityId(activityId);
            vo.setTitle("活动期号:" + ActivityUtil.getActivityDateNumber(award.getActivityId(), activity.getCreateTime()));
            vo.setActivityId(info.getAwards().getActivityId());
            vo.setType(info.getType());
            vo.setId(info.getId());
@@ -204,8 +213,22 @@
        if (result == null) {
            return JsonUtil.loadFalseResult("未找到中奖记录");
        }
        /**
         * 填充必要的参数
         */
        ActivityDrawnReceiveParams params = new ActivityDrawnReceiveParams();
        LuckyActivityAwards luckyActivityAward = luckyActivityAwardService.getAwardDetail(result.getAwardId());
        //支付宝红包类型
        if (luckyActivityAward.getActivityAwardParams().getType() == ActivityAwardParams.ActivityAwardTypeEnum.alipayRedPackage) {
            //需要获取支付宝的ID
            UserInfo userInfo = userInfoService.getUserDetail(acceptData.getUid());
            params.setAlipayUid(userInfo.getAlipayUid());
        }
        try {
            luckyActivityAwardResultService.recieveAward(acceptData.getApp().getId(), acceptData.getUid() + "", activityId);
            luckyActivityAwardResultService.recieveAward(acceptData.getApp().getId(), acceptData.getUid() + "", activityId, params);
            return JsonUtil.loadTrueResult("领取成功");
        } catch (LuckyActivityException e) {
            e.printStackTrace();
service-daylucky/src/main/java/com/ks/daylucky/controller/api/client/ActivityController.java
@@ -1,7 +1,9 @@
package com.ks.daylucky.controller.api.client;
import com.google.gson.Gson;
import com.ks.daylucky.pojo.DO.ActivityScanRecord;
import com.ks.daylucky.pojo.DO.AppConfig;
import com.ks.daylucky.pojo.DTO.SimpleShareInfo;
import com.ks.daylucky.pojo.VO.AlipayXCXShareInfoVO;
import com.ks.daylucky.pojo.DTO.ConfigKeyEnum;
import com.ks.daylucky.pojo.VO.AcceptData;
@@ -24,6 +26,7 @@
import org.yeshi.utils.JsonUtil;
import javax.annotation.Resource;
import java.net.URLEncoder;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
@@ -95,10 +98,13 @@
            e.printStackTrace();
        }
        AppConfig appConfig = appConfigService.getConfigCache(acceptData.getApp().getId(), ConfigKeyEnum.activityShareInfo, acceptData.getVersion());
        SimpleShareInfo info = new Gson().fromJson(appConfig.getValue(), SimpleShareInfo.class);
        AlipayXCXShareInfoVO shareInfoDTO = new AlipayXCXShareInfoVO();
        shareInfoDTO.setPath(String.format("/pages/activity-detail/activity-detail?id=%s&joinInfo=%s", activityId, ActivityUtil.getShareJoinInfo(acceptData.getUid(), activityId)));
        shareInfoDTO.setTitle("测试标题");
        shareInfoDTO.setDesc("测试简介");
        shareInfoDTO.setTitle(info.getTitle());
        shareInfoDTO.setDesc(info.getDesc());
        shareInfoDTO.setBgImgUrl(activityShareImage);
        vo.setShareInfo(shareInfoDTO);
@@ -112,11 +118,10 @@
                } catch (Exception e) {
                    e.printStackTrace();
                }
                shareInfoDTO = new AlipayXCXShareInfoVO();
                shareInfoDTO.setPath(String.format("/pages/activity-detail/activity-detail?id=%s&joinInfo=%s", activityId, ActivityUtil.getShareJoinInfo(acceptData.getUid(), activityId)));
                shareInfoDTO.setTitle("测试标题");
                shareInfoDTO.setDesc("测试简介");
                shareInfoDTO.setPath(String.format("/pages/activity-detail/activity-detail?id=%s&joinInfo=%s", activityId, URLEncoder.encode(ActivityUtil.getShareJoinInfo(acceptData.getUid(), activityId))));
                shareInfoDTO.setTitle(info.getTitle());
                shareInfoDTO.setDesc(info.getDesc());
                shareInfoDTO.setBgImgUrl(assistShareImage);
                vo.setAssistShareInfo(shareInfoDTO);
            }
@@ -157,11 +162,6 @@
            }
        }
        List<ActivityDetailInfoDTO> dtoList = activityService.getActivityDetail(activityIds, acceptData.getApp().getId(), acceptData.getUid(), false);
//        //TODO 测试
//        for (int i = 0; i < 20; i++) {
//            dtoList.add(dtoList.get(0));
//        }
        JSONObject data = new JSONObject();
        data.put("data", JsonUtil.getSimpleGson().toJson(ActivityListItemInfoVOFactory.create(dtoList)));
service-daylucky/src/main/java/com/ks/daylucky/controller/api/client/ActivityJoinController.java
@@ -7,13 +7,16 @@
import com.ks.daylucky.service.UserInfoService;
import com.ks.daylucky.util.Constant;
import com.ks.daylucky.util.UserInfoUtil;
import com.ks.daylucky.util.activity.ActivityUtil;
import com.ks.daylucky.util.factory.vo.ActivityListItemInfoVOFactory;
import com.ks.lucky.exception.LuckyActivityException;
import com.ks.lucky.exception.LuckyActivityJoinException;
import com.ks.lucky.pojo.DO.LuckyActivity;
import com.ks.lucky.pojo.DO.LuckyActivityJoinRecord;
import com.ks.lucky.pojo.DTO.*;
import com.ks.lucky.remote.service.LuckyActivityAwardResultService;
import com.ks.lucky.remote.service.LuckyActivityJoinService;
import com.ks.lucky.remote.service.LuckyActivityService;
import net.sf.json.JSONObject;
import org.apache.dubbo.config.annotation.Reference;
import org.springframework.stereotype.Controller;
@@ -31,11 +34,14 @@
@RequestMapping("api/client/activity/join")
public class ActivityJoinController {
    @Reference(version = "1.0.0",check = false)
    @Reference(version = "1.0.0", check = false)
    private LuckyActivityJoinService luckyActivityJoinService;
    @Reference(version = "1.0.0",check = false)
    @Reference(version = "1.0.0", check = false)
    private LuckyActivityAwardResultService luckyActivityAwardResultService;
    @Reference(version = "1.0.0", check = false)
    private LuckyActivityService luckyActivityService;
    @Resource
    private UserInfoService userInfoService;
@@ -57,7 +63,7 @@
    public String getRankList(AcceptData acceptData, Long activityId, int page) {
        List<ActivityJoinerRankInfoVO> voList = new ArrayList<>();
        List<ActivityJoinerRankInfo> list = luckyActivityJoinService.getWeightRankList(activityId, page, Constant.PAGE_SIZE);
        List<ActivityJoinerRankInfo> list = luckyActivityJoinService.getWeightRankList(activityId, page,10);
        if (list != null && list.size() > 0) {
            Map<Long, UserInfo> userInfoMap = userInfoService.listUserInfoAsMap(UserInfoUtil.getBaseUserList(list));
            for (ActivityJoinerRankInfo info : list) {
@@ -148,7 +154,7 @@
    public String getJoinerList(AcceptData acceptData, Long activityId, int page) {
        List<SimpleUser> voList = new ArrayList<>();
        List<ActivitySimpleUser> list = luckyActivityJoinService.getJoinerList(activityId,null, page, Constant.PAGE_SIZE);
        List<ActivitySimpleUser> list = luckyActivityJoinService.getJoinerList(activityId, null, page, Constant.PAGE_SIZE);
        if (list != null && list.size() > 0) {
            Map<Long, UserInfo> userInfoMap = userInfoService.listUserInfoAsMap(UserInfoUtil.getBaseUserList(list));
            for (ActivitySimpleUser info : list) {
@@ -229,8 +235,9 @@
            int weight = 1;
            luckyActivityJoinService.join(activityId, acceptData.getApp().getId(), acceptData.getUid() + "", 1, joinInfo, LuckyActivityJoinRecord.USER_TYPE_REAL);
            LuckyActivity activity = luckyActivityService.getActivity(activityId);
            //TODO 抽奖活动的类型需要替换
            return JsonUtil.loadTrueResult(new JoinResultInfoVO(weight, String.format("活动期号:NO.%s\n抽奖活动", activityId)));
            return JsonUtil.loadTrueResult(new JoinResultInfoVO(weight, String.format("活动期号:%s\n抽奖活动", ActivityUtil.getActivityDateNumber(activityId, activity.getCreateTime()))));
        } catch (LuckyActivityException e) {
            return JsonUtil.loadFalseResult(e.getMsg());
        } catch (LuckyActivityJoinException e) {
service-daylucky/src/main/java/com/ks/daylucky/controller/api/client/ConfigController.java
@@ -1,9 +1,11 @@
package com.ks.daylucky.controller.api.client;
import com.google.gson.Gson;
import com.ks.daylucky.pojo.DO.AdviceRecord;
import com.ks.daylucky.pojo.DO.AppConfig;
import com.ks.daylucky.pojo.DO.SponsorSignUpRecord;
import com.ks.daylucky.pojo.DTO.ConfigKeyEnum;
import com.ks.daylucky.pojo.DTO.SimpleShareInfo;
import com.ks.daylucky.pojo.VO.AcceptData;
import com.ks.daylucky.pojo.VO.AlipayXCXShareInfoVO;
import com.ks.daylucky.service.AdviceService;
@@ -48,10 +50,12 @@
        //获取应用分享图
        AppConfig config = appConfigService.getConfigCache(acceptData.getApp().getId(), ConfigKeyEnum.shareImageLink, acceptData.getVersion());
        if (config != null) {
            AppConfig appConfig = appConfigService.getConfigCache(acceptData.getApp().getId(), ConfigKeyEnum.appShareInfo, acceptData.getVersion());
            SimpleShareInfo info = new Gson().fromJson(appConfig.getValue(), SimpleShareInfo.class);
            AlipayXCXShareInfoVO shareInfoDTO = new AlipayXCXShareInfoVO();
            shareInfoDTO.setPath("/pages/rewards/rewards");
            shareInfoDTO.setTitle("测试标题");
            shareInfoDTO.setDesc("测试简介");
            shareInfoDTO.setTitle(info.getTitle());
            shareInfoDTO.setDesc(info.getDesc());
            shareInfoDTO.setBgImgUrl(config.getValue());
            data.put("shareInfo", shareInfoDTO);
        }
service-daylucky/src/main/java/com/ks/daylucky/controller/api/client/UserController.java
@@ -229,6 +229,13 @@
        JSONObject data = new JSONObject();
        data.put("data", gson.toJson(voList));
        data.put("count", count);
        //设置消息已读
        try {
            userInfoExtraService.setMsgRead(acceptData.getUid());
        } catch (UserInfoExtraException e) {
            e.printStackTrace();
        }
        return JsonUtil.loadTrueResult(data);
    }
service-daylucky/src/main/java/com/ks/daylucky/pojo/DO/UserMsg.java
@@ -12,18 +12,24 @@
public class UserMsg {
    public enum UserMsgType {
        lucky("抽奖消息", "");
        lucky("抽奖消息", "https://daylucky-1255749512.cos.ap-nanjing.myqcloud.com/image/icon/icon_msg_lucky.png");
        private String name;
        private String icon;
        private UserMsgType(String name, String icon) {
            this.name = name;
            this.icon = icon;
        }
        public String getName() {
            return name;
        }
        public String getIcon() {
            return icon;
        }
    }
    public static String createId(Long uid) {
service-daylucky/src/main/java/com/ks/daylucky/pojo/DTO/ConfigKeyEnum.java
@@ -7,10 +7,13 @@
    activityDetailHelp("activity_detail_help_link", "活动详情帮助链接"),
    disclaimers("disclaimers", "免责声明"),
    shareImageLink("share_image_link", "应用分享图"),
    appShareInfo("app_share_info", "应用分享信息"),
    activityShareImageBg("activity_share_image_bg", "活动分享底图"),
    assistShareImageBg("assist_share_image_bg", "助力分享底图"),
    activityShareInfo("activity_share_info", "活动分享信息"),
    defaultPortrait("default_portrait", "默认头像"),
    defaultNickNamePrefix("default_nick_name_prefix", "默认昵称");
    defaultNickNamePrefix("default_nick_name_prefix", "默认昵称"),
    luckyResultMsgTemplateId("lucky_result_msg_template_id", "中奖结果消息模板ID");
    private String key;
service-daylucky/src/main/java/com/ks/daylucky/pojo/DTO/SimpleShareInfo.java
New file
@@ -0,0 +1,23 @@
package com.ks.daylucky.pojo.DTO;
public class SimpleShareInfo {
    private String title;
    private String desc;
    public String getTitle() {
        return title;
    }
    public void setTitle(String title) {
        this.title = title;
    }
    public String getDesc() {
        return desc;
    }
    public void setDesc(String desc) {
        this.desc = desc;
    }
}
service-daylucky/src/main/java/com/ks/daylucky/pojo/DTO/UserMsgSettings.java
@@ -67,6 +67,7 @@
    }
    public Boolean getAssistSuccessMsg() {
        return assistSuccessMsg;
    }
service-daylucky/src/main/java/com/ks/daylucky/pojo/VO/AssistFriendVO.java
@@ -1,21 +1,21 @@
package com.ks.daylucky.pojo.VO;
import com.ks.daylucky.pojo.DO.UserInfo;
import com.google.gson.annotations.Expose;
public class AssistFriendVO {
    private UserInfo user;
    private SimpleUser user;
    private int count;
    public AssistFriendVO(UserInfo user, int count) {
    public AssistFriendVO(SimpleUser user, int count) {
        this.user = user;
        this.count = count;
    }
    public UserInfo getUser() {
    public SimpleUser getUser() {
        return user;
    }
    public void setUser(UserInfo user) {
    public void setUser(SimpleUser user) {
        this.user = user;
    }
service-daylucky/src/main/java/com/ks/daylucky/pojo/VO/UserMsgVO.java
@@ -4,12 +4,21 @@
import java.util.List;
public class UserMsgVO {
    private String id;
    private String icon;
    private String name;
    private List<UserMsgContentVO> contentList;
    private Date time;
    public String getId() {
        return id;
    }
    public void setId(String id) {
        this.id = id;
    }
    public String getIcon() {
        return icon;
    }
service-daylucky/src/main/java/com/ks/daylucky/pojo/VO/admin/ActivityAdminVo.java
@@ -216,6 +216,16 @@
        private Integer minPersonCount;
        private Integer day;
        private String desc;
        public String getDesc() {
            return desc;
        }
        public void setDesc(String desc) {
            this.desc = desc;
        }
        public Integer getMinPersonCount() {
            return minPersonCount;
service-daylucky/src/main/java/com/ks/daylucky/service/UserInfoExtraService.java
@@ -9,6 +9,7 @@
    /**
     * 初始化
     *
     * @param uid
     */
    public void init(Long uid);
@@ -31,6 +32,7 @@
    /**
     * 消息设置
     *
     * @param uid
     * @param setting
     */
@@ -45,4 +47,13 @@
    public UserMsgSettings getUserMsgSettings(Long uid);
    /**
     * 添加未读消息的数量
     *
     * @param uid
     * @param count
     */
    public void addMsgUnReadCount(Long uid, int count);
}
service-daylucky/src/main/java/com/ks/daylucky/service/impl/ActivityServiceImpl.java
@@ -93,7 +93,8 @@
        if (needAwardResult) {
            LuckyActivityAwardResult result = luckyActivityAwardResultService.getResult(appId, uid + "", activityId);
            if (result != null) {
                vo.setAwards(luckyActivityAwardService.getAwardDetail(result.getAwardId()));
                result.setAward(luckyActivityAwardService.getAwardDetail(result.getAwardId()));
                vo.setAwardResult(result);
            }
        }
        vo.setActivity(activity);
service-daylucky/src/main/java/com/ks/daylucky/service/impl/AlipayTemplateMsgManager.java
New file
@@ -0,0 +1,69 @@
package com.ks.daylucky.service.impl;
import com.alipay.api.AlipayApiException;
import com.ks.app.entity.AppInfo;
import com.ks.app.util.AlipayAppUtil;
import com.ks.daylucky.pojo.DO.UserInfo;
import com.ks.daylucky.pojo.DTO.ConfigKeyEnum;
import com.ks.daylucky.service.AppConfigService;
import com.ks.daylucky.service.UserInfoService;
import com.ks.daylucky.util.activity.ActivityUtil;
import com.ks.lucky.pojo.DO.LuckyActivity;
import org.springframework.stereotype.Component;
import org.yeshi.utils.alipay.AlipayXcxUtil;
import org.yeshi.utils.exception.AlipayXcxException;
import javax.annotation.Resource;
@Component
public class AlipayTemplateMsgManager {
    @Resource
    private UserInfoService userInfoService;
    @Resource
    private AppManager appManager;
    @Resource
    private AppConfigService appConfigService;
    /**
     * 发送中奖消息
     *
     * @param activity
     * @param uid
     */
    public void sendDrawnMsg(LuckyActivity activity, Long uid) {
        //如果是中奖消息要发送模板消息
        UserInfo userInfo = userInfoService.getUserDetail(uid);
        AppInfo appInfo = appManager.getAppDetail(userInfo.getAppId());
        String templateId = appConfigService.getConfigCache(userInfo.getAppId(), ConfigKeyEnum.luckyResultMsgTemplateId, null).getValue();
        try {
            AlipayXcxUtil.sendTemplateMsg(AlipayAppUtil.getAlipayAppInfo(appInfo.getAlipayInfo()), templateId, "pages/activity-detail/activity-detail?id=" + activity.getId(), userInfo.getAlipayUid(), null, "恭喜您,中奖了!", ActivityUtil.getActivityDateNumber(activity.getId(), activity.getCreateTime()));
        } catch (AlipayApiException e) {
            e.printStackTrace();
        } catch (AlipayXcxException e) {
            e.printStackTrace();
        }
    }
    /**
     * 发送未中奖消息
     *
     * @param activity
     * @param uid
     */
    public void sendUnDrawnMsg(LuckyActivity activity, Long uid) {
        //如果是中奖消息要发送模板消息
        UserInfo userInfo = userInfoService.getUserDetail(uid);
        AppInfo appInfo = appManager.getAppDetail(userInfo.getAppId());
        String templateId = appConfigService.getConfigCache(userInfo.getAppId(), ConfigKeyEnum.luckyResultMsgTemplateId, null).getValue();
        try {
            AlipayXcxUtil.sendTemplateMsg(AlipayAppUtil.getAlipayAppInfo(appInfo.getAlipayInfo()), templateId, "pages/rewards/rewards", userInfo.getAlipayUid(), null, "很遗憾,您未中奖!", ActivityUtil.getActivityDateNumber(activity.getId(), activity.getCreateTime()));
        } catch (AlipayApiException e) {
            e.printStackTrace();
        } catch (AlipayXcxException e) {
            e.printStackTrace();
        }
    }
}
service-daylucky/src/main/java/com/ks/daylucky/service/impl/remote/UserInfoExtraServiceImpl.java
@@ -6,6 +6,7 @@
import com.ks.daylucky.pojo.DTO.UserMsgSettings;
import com.ks.daylucky.service.UserInfoExtraService;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import javax.annotation.Resource;
import java.util.Date;
@@ -83,4 +84,15 @@
        String msg = userInfoExtra.getMsgSetting();
        return UserMsgSettings.parse(msg);
    }
    @Transactional(rollbackFor = Exception.class)
    @Override
    public void addMsgUnReadCount(Long uid, int count) {
        UserInfoExtra userInfoExtra = userInfoExtraMapper.selectByPrimaryKeyForUpdate(uid);
        UserInfoExtra update = new UserInfoExtra();
        update.setUid(uid);
        update.setMsgUnreadCount(userInfoExtra.getMsgUnreadCount() + count);
        update.setUpdateTime(new Date());
        userInfoExtraMapper.updateByPrimaryKeySelective(update);
    }
}
service-daylucky/src/main/java/com/ks/daylucky/service/impl/remote/UserMsgServiceImpl.java
@@ -3,10 +3,13 @@
import com.ks.daylucky.dao.UserMsgDao;
import com.ks.daylucky.exception.UserMsgException;
import com.ks.daylucky.pojo.DO.UserMsg;
import com.ks.daylucky.pojo.DTO.msg.LuckyMsgContent;
import com.ks.daylucky.query.UserMsgQuery;
import com.ks.daylucky.service.UserInfoExtraService;
import com.ks.daylucky.service.UserMsgService;
import org.springframework.stereotype.Service;
import org.springframework.validation.annotation.Validated;
import org.yeshi.utils.alipay.AlipayXcxUtil;
import javax.annotation.Resource;
import javax.validation.Valid;
@@ -19,6 +22,9 @@
    @Resource
    private UserMsgDao userMsgDao;
    @Resource
    private UserInfoExtraService userInfoExtraService;
    @Validated
    @Override
    public void addMsg(@Valid UserMsg userMsg) throws UserMsgException {
@@ -28,6 +34,9 @@
        userMsg.setId(UserMsg.createId(userMsg.getUid()));
        userMsgDao.save(userMsg);
        //添加未读提醒
        userInfoExtraService.addMsgUnReadCount(userMsg.getUid(), 1);
    }
    @Override
service-daylucky/src/main/java/com/ks/daylucky/util/activity/ActivityUtil.java
@@ -4,9 +4,11 @@
import com.ks.daylucky.pojo.DTO.AssistJoinInfoDTO;
import com.ks.lucky.pojo.DO.LuckyActivity;
import org.yeshi.utils.JsonUtil;
import org.yeshi.utils.TimeUtil;
import org.yeshi.utils.encrypt.AESUtil;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;
public class ActivityUtil {
@@ -16,10 +18,11 @@
     * 返回活动期号
     *
     * @param id
     * @param createTime 创建时间
     * @return
     */
    public static String getActivityDateNumber(Long id) {
        return String.format("NO.%s", id + "");
    public static String getActivityDateNumber(Long id, Date createTime) {
        return String.format("NO.%s", TimeUtil.getGernalTime(createTime.getTime(), "yyyyMMdd") + id);
    }
    /**
service-daylucky/src/main/java/com/ks/daylucky/util/factory/LuckyMsgContentFactory.java
@@ -4,6 +4,8 @@
import com.ks.daylucky.pojo.VO.SimpleUser;
import com.ks.daylucky.util.activity.ActivityUtil;
import java.util.Date;
public class LuckyMsgContentFactory {
@@ -13,11 +15,11 @@
     * @param activityId
     * @return
     */
    public static LuckyMsgContent createJoinSuccess(Long activityId) {
    public static LuckyMsgContent createJoinSuccess(Long activityId, Date activityCreateTime) {
        LuckyMsgContent msgContent = new LuckyMsgContent();
        msgContent.setLuckyMsgType(LuckyMsgContent.LuckyMsgType.joinSuccess);
        msgContent.setActivityId(activityId);
        msgContent.setDateNumber(ActivityUtil.getActivityDateNumber(activityId));
        msgContent.setDateNumber(ActivityUtil.getActivityDateNumber(activityId,activityCreateTime));
        msgContent.setRemarks("无");
        return msgContent;
    }
@@ -28,11 +30,11 @@
     * @param activityId
     * @return
     */
    public static LuckyMsgContent createNotDrawn(Long activityId) {
    public static LuckyMsgContent createNotDrawn(Long activityId,Date activityCreateTime) {
        LuckyMsgContent msgContent = new LuckyMsgContent();
        msgContent.setLuckyMsgType(LuckyMsgContent.LuckyMsgType.notDrawn);
        msgContent.setActivityId(activityId);
        msgContent.setDateNumber(ActivityUtil.getActivityDateNumber(activityId));
        msgContent.setDateNumber(ActivityUtil.getActivityDateNumber(activityId,activityCreateTime));
        msgContent.setRemarks("无");
        msgContent.setOpenState("已开奖");
        msgContent.setDrawnState("很遗憾,未中奖");
@@ -45,11 +47,11 @@
     * @param activityId
     * @return
     */
    public static LuckyMsgContent createDrawn(Long activityId, String awardName) {
    public static LuckyMsgContent createDrawn(Long activityId,Date activityCreateTime, String awardName) {
        LuckyMsgContent msgContent = new LuckyMsgContent();
        msgContent.setLuckyMsgType(LuckyMsgContent.LuckyMsgType.joinSuccess);
        msgContent.setActivityId(activityId);
        msgContent.setDateNumber(ActivityUtil.getActivityDateNumber(activityId));
        msgContent.setDateNumber(ActivityUtil.getActivityDateNumber(activityId,activityCreateTime));
        msgContent.setRemarks("无");
        msgContent.setOpenState("已开奖");
        msgContent.setAwardName(awardName);
@@ -64,11 +66,11 @@
     * @param activityId
     * @return
     */
    public static LuckyMsgContent createOpenFail(Long activityId) {
    public static LuckyMsgContent createOpenFail(Long activityId,Date activityCreateTime) {
        LuckyMsgContent msgContent = new LuckyMsgContent();
        msgContent.setLuckyMsgType(LuckyMsgContent.LuckyMsgType.openFail);
        msgContent.setActivityId(activityId);
        msgContent.setDateNumber(ActivityUtil.getActivityDateNumber(activityId));
        msgContent.setDateNumber(ActivityUtil.getActivityDateNumber(activityId,activityCreateTime));
        msgContent.setRemarks("无");
        msgContent.setOpenState("未能满足开奖条件,已结束。");
        return msgContent;
@@ -83,11 +85,11 @@
     * @param weight
     * @return
     */
    public static LuckyMsgContent createAssist(Long activityId, SimpleUser user, int weight) {
    public static LuckyMsgContent createAssist(Long activityId,Date activityCreateTime, SimpleUser user, int weight) {
        LuckyMsgContent msgContent = new LuckyMsgContent();
        msgContent.setLuckyMsgType(LuckyMsgContent.LuckyMsgType.assist);
        msgContent.setActivityId(activityId);
        msgContent.setDateNumber(ActivityUtil.getActivityDateNumber(activityId));
        msgContent.setDateNumber(ActivityUtil.getActivityDateNumber(activityId,activityCreateTime));
        msgContent.setRemarks("无");
        msgContent.setWeight(weight);
        msgContent.setAssistUser(user);
@@ -102,11 +104,11 @@
     * @param weight
     * @return
     */
    public static LuckyMsgContent createAssistAndJoin(Long activityId, SimpleUser user, int weight) {
    public static LuckyMsgContent createAssistAndJoin(Long activityId,Date activityCreateTime, SimpleUser user, int weight) {
        LuckyMsgContent msgContent = new LuckyMsgContent();
        msgContent.setLuckyMsgType(LuckyMsgContent.LuckyMsgType.assistAndJoin);
        msgContent.setActivityId(activityId);
        msgContent.setDateNumber(ActivityUtil.getActivityDateNumber(activityId));
        msgContent.setDateNumber(ActivityUtil.getActivityDateNumber(activityId,activityCreateTime));
        msgContent.setRemarks("无");
        msgContent.setWeight(weight);
        msgContent.setAssistUser(user);
@@ -119,11 +121,11 @@
     * @param activityId
     * @return
     */
    public static LuckyMsgContent createReceiveOutDate(Long activityId) {
    public static LuckyMsgContent createReceiveOutDate(Long activityId,Date activityCreateTime) {
        LuckyMsgContent msgContent = new LuckyMsgContent();
        msgContent.setLuckyMsgType(LuckyMsgContent.LuckyMsgType.receiveOutDate);
        msgContent.setActivityId(activityId);
        msgContent.setDateNumber(ActivityUtil.getActivityDateNumber(activityId));
        msgContent.setDateNumber(ActivityUtil.getActivityDateNumber(activityId,activityCreateTime));
        msgContent.setRemarks("无");
        msgContent.setReceiveState("本抽奖活动你中奖了,过期未领");
        msgContent.setOutDateAwardState("已原路退回赞助商");
service-daylucky/src/main/java/com/ks/daylucky/util/factory/vo/ActivityDetailVOFactory.java
@@ -41,8 +41,8 @@
        vo.setHelpLink(helpLink);
        vo.setAssistCount(assistCount);
        vo.setSponsorActivityCount(sponsorActivityCount <= 1 ? 0 : sponsorActivityCount - 1);
        if (dto.getActivity().getActualOpenTime() != null) {
            vo.setActualOpenDate(TimeUtil.getGernalTime(dto.getActivity().getActualOpenTime().getTime(), "yyyy.MM.dd HH:mm"));
        if (dto.getActivity().getOpenInfo().getActualOpenTime() != null) {
            vo.setActualOpenDate(TimeUtil.getGernalTime(dto.getActivity().getOpenInfo().getActualOpenTime().getTime(), "yyyy.MM.dd HH:mm"));
        }
        return vo;
@@ -65,9 +65,12 @@
        bean.setId(activity.getId());
        //设置了预计结束时间
        if (activity.getPreFinishTime() != null) {
            long leftTime = activity.getPreFinishTime().getTime() - System.currentTimeMillis();
            if (leftTime < 0) {
                leftTime = 0L;
            long leftTime = 0;
            if (activity.getState() == LuckyActivity.STATE_STARTED) {
                leftTime = activity.getPreFinishTime().getTime() - System.currentTimeMillis();
                if (leftTime < 0) {
                    leftTime = 0L;
                }
            }
            bean.setLeftTime(leftTime);
        }
@@ -83,7 +86,7 @@
        }
        bean.setSponsor(ActivityListItemInfoVOFactory.create(activity.getSponsorInfo().getSponsors()));
        bean.setSponsorAd(create(activity.getSponsorInfo()));
        bean.setDateNumber("活动期号:" + ActivityUtil.getActivityDateNumber(activity.getId()));
        bean.setDateNumber("活动期号:" + ActivityUtil.getActivityDateNumber(activity.getId(), activity.getCreateTime()));
        return bean;
    }
@@ -102,7 +105,7 @@
            bean.setConditions(conditions);
            bean.setConditionsDesc(descList);
            bean.setMarks("注:系统将会由\"支付宝首页-服务提醒\"给用户下发是否中奖提醒消息提醒消息提醒消息提醒消息提醒消息提醒消息提醒醒消息提醒醒消息提醒醒消息提醒醒");
            bean.setMarks(sponsorInfo.getAd().getDesc());
        }
        return bean;
@@ -117,7 +120,7 @@
        }
        conditions.add(String.format("参与者到达%s人自动开奖", openInfo.getMinPersonCount()));
        bean.setConditions(conditions);
        bean.setMarks("注:系统将会由\"支付宝首页-服务提醒\"给用户下发是否中奖提醒消息提醒消息提醒消息提醒消息提醒消息提醒消息提醒醒消息提醒醒...\n");
        bean.setMarks(openInfo.getRemarks());
        return bean;
    }
service-daylucky/src/main/java/com/ks/daylucky/util/factory/vo/ActivityListItemInfoVOFactory.java
@@ -47,6 +47,10 @@
        List<ActivityAwardVO> list = new ArrayList<>();
        int p = 0;
        for (LuckyActivityAwards awards : activity.getAwardsList()) {
            //最多显示3个奖项
            if (list.size() >= 3) {
                break;
            }
            list.add(create(awards, p++));
        }
        bean.setId(activity.getId());
@@ -59,7 +63,7 @@
    public static ActivityAwardVO create(LuckyActivityAwards awards, Integer position) {
        String[] pdescs = new String[]{
                "一", " 二", "三", "四", "五", "六", "七", "八", "九", "十"
                "一", "二", "三", "四", "五", "六", "七", "八", "九", "十"
        };
        ActivityAwardVO bean = new ActivityAwardVO();
        if (awards.getMaterial() != null) {
@@ -120,15 +124,15 @@
                            bean.setTitle("很遗憾,领取失败。");
                            break;
                    }
                    bean.setSubTitle(String.format("(活动期号 %s)", ActivityUtil.getActivityDateNumber(activity.getId())));
                    bean.setSubTitle(String.format("(活动期号 %s)", ActivityUtil.getActivityDateNumber(activity.getId(), activity.getCreateTime())));
                } else {//未中奖
                    bean.setTitle("本活动,未中奖!");
                    bean.setSubTitle(String.format("(活动期号 %s)", ActivityUtil.getActivityDateNumber(activity.getId())));
                    bean.setSubTitle(String.format("(活动期号 %s)", ActivityUtil.getActivityDateNumber(activity.getId(), activity.getCreateTime())));
                }
                break;
            default:
                bean.setTitle("本活动,暂未开奖!");
                bean.setSubTitle(String.format("(活动期号 %s)", ActivityUtil.getActivityDateNumber(activity.getId())));
                bean.setSubTitle(String.format("(活动期号 %s)", ActivityUtil.getActivityDateNumber(activity.getId(), activity.getCreateTime())));
        }
service-daylucky/src/main/java/com/ks/daylucky/util/factory/vo/LuckyActivityFactory.java
@@ -118,12 +118,16 @@
        LuckyActivityOpenInfo openInfo = new LuckyActivityOpenInfo();
        openInfo.setOpenType(LuckyActivityOpenInfo.OPEN_TYPE_PERSON_AND_TIME);
        openInfo.setMinPersonCount(bean.getMinPersonCount());
        openInfo.setRemarks(bean.getDesc());
        return openInfo;
    }
    private static List<LuckyActivityImage> createBannerList(ActivityAdminVo.ActivityBean bean) {
        List<LuckyActivityImage> list = new ArrayList<>();
        if (bean.getBannerList() == null || bean.getBannerList().size() == 0) {
            return list;
        }
        int count = bean.getBannerList().size();
        for (ActivityAdminVo.ActivityBean.BannerBean banner : bean.getBannerList()) {
            LuckyActivityImage image = new LuckyActivityImage();
@@ -149,6 +153,7 @@
            alipayLifeAdInfo.setSceneId(bean.getAdInfo().getData().getSceneId());
            ad.setAlipayLifeAdInfo(alipayLifeAdInfo);
        }
        ad.setDesc(bean.getDesc());
        ad.setAdType(LuckySponsorAd.SponsorAdType.valueOf(bean.getAdInfo().getType()));
        ad.setSponsorId(sponsorId);
        return ad;
service-daylucky/src/main/java/com/ks/daylucky/util/factory/vo/UserMsgVOFactory.java
@@ -14,7 +14,8 @@
    public static UserMsgVO create(UserMsg msg) {
        UserMsgVO vo = new UserMsgVO();
        vo.setIcon("");
        vo.setId(msg.getId());
        vo.setIcon(msg.getMsgType().getIcon());
        vo.setName(msg.getMsgType().getName());
        vo.setTime(msg.getCreateTime());
        if (msg.getMsgType() == UserMsg.UserMsgType.lucky) {
@@ -25,7 +26,7 @@
    private static String getDateNumber(String dateNumber) {
        StringBuilder builder = new StringBuilder();
        builder.append("  <div style=\"display: flex;justify-content: space-between;\">");
        builder.append("<div style=\"display: flex;justify-content: space-between;\">");
        builder.append("<span>" + dateNumber + "</span>");
        builder.append("<a style='color:#theme'>查看详情</a>");
        builder.append("</div>");
@@ -45,10 +46,10 @@
            voList.add(new UserMsgContentVO("领取状态", luckyMsgContent.getReceiveState()));
            voList.add(new UserMsgContentVO("奖品权益", luckyMsgContent.getOutDateAwardState()));
        } else if (luckyMsgType == LuckyMsgContent.LuckyMsgType.assistAndJoin) {
            voList.add(new UserMsgContentVO("助力状态", "助力好友<img src='" + luckyMsgContent.getAssistUser().getPortrait() + "'>成功参与了抽奖"));
            voList.add(new UserMsgContentVO("助力状态", "<div style='display:flex; align-items: center;'>助力好友<img style='width: 48rpx;height: 48rpx;border-radius: 50%;' src='" + luckyMsgContent.getAssistUser().getPortrait() + "' />成功参与了抽奖</div>"));
            voList.add(new UserMsgContentVO("幸运券数", String.format("+%s张", luckyMsgContent.getWeight())));
        } else if (luckyMsgType == LuckyMsgContent.LuckyMsgType.assist) {
            voList.add(new UserMsgContentVO("助力状态", "好友<img src='" + luckyMsgContent.getAssistUser().getPortrait() + "'>助力成功"));
            voList.add(new UserMsgContentVO("助力状态", "<div style='display:flex; align-items: center;'>好友<img style='width: 48rpx;height: 48rpx;border-radius: 50%;' src='" + luckyMsgContent.getAssistUser().getPortrait() + "' />助力成功</div>"));
            voList.add(new UserMsgContentVO("幸运券数", String.format("+%s张", luckyMsgContent.getWeight())));
        } else if (luckyMsgType == LuckyMsgContent.LuckyMsgType.openFail) {
            voList.add(new UserMsgContentVO("开奖状态", luckyMsgContent.getOpenState()));
service-daylucky/src/main/java/com/ks/daylucky/util/mq/consumer/ActivityDrawnNotifyConsumer.java
@@ -1,5 +1,6 @@
package com.ks.daylucky.util.mq.consumer;
import com.ks.daylucky.exception.ActivityDrawnRecieveNotifyInfoException;
import com.ks.daylucky.pojo.DO.ActivityDrawnRecieveNotifyInfo;
import com.ks.daylucky.service.ActivityDrawnRecieveNotifyInfoService;
import com.ks.daylucky.util.mq.CMQManager;
@@ -23,13 +24,12 @@
import java.util.Vector;
public class ActivityDrawnNotifyConsumer implements CMQConsumeRunner {
    Logger logger = LoggerFactory.getLogger(ActivityDrawnNotifyConsumer.class);
    @Reference(version = "1.0.0",check = false)
    @Reference(version = "1.0.0", check = false)
    private LuckyActivityAwardResultService luckyActivityAwardResultService;
    @Reference(version = "1.0.0",check = false)
    @Reference(version = "1.0.0", check = false)
    private LuckyActivityAwardService luckyActivityAwardService;
    @Resource
@@ -40,11 +40,12 @@
        new JobThreadExecutorServiceImpl().run(new Runnable() {
            @Override
            public void run() {
                List<Message> messageList = CMQManager.getInstance().consumeMsgMsg(16);
                logger.info("接收消息");
                List<Message> messageList = CMQManager.getInstance().consumeActivityDrawnMsg(16);
                if (messageList != null) {
                    for (Message message : messageList) {
                        BaseMQMsg mqMsg = JsonUtil.getSimpleGson().fromJson(message.msgBody, BaseMQMsg.class);
                        String tag=mqMsg.getCmqMsgTag();
                        String tag = mqMsg.getCmqMsgTag();
                        if (tag.equalsIgnoreCase(LuckyCMQConstant.TAG_ACTIVITY_DRAWN)) {
                            try {
@@ -80,7 +81,9 @@
                                    default:
                                        break;
                                }
                                CMQManager.getInstance().deleteMsgMsg(message.receiptHandle);
                                CMQManager.getInstance().deleteActivityDrawnMsg(message.receiptHandle);
                            } catch (ActivityDrawnRecieveNotifyInfoException e) {
                                CMQManager.getInstance().deleteActivityDrawnMsg(message.receiptHandle);
                            } catch (Exception e) {
                                logger.error("通知消费出错:" + e.getMessage());
                            }
service-daylucky/src/main/java/com/ks/daylucky/util/mq/consumer/MsgConsumer.java
@@ -1,21 +1,30 @@
package com.ks.daylucky.util.mq.consumer;
import com.alipay.api.AlipayApiException;
import com.ks.app.entity.AppInfo;
import com.ks.app.util.AlipayAppUtil;
import com.ks.daylucky.exception.UserMsgException;
import com.ks.daylucky.pojo.DO.UserInfo;
import com.ks.daylucky.pojo.DO.UserMsg;
import com.ks.daylucky.pojo.DTO.UserMsgSettings;
import com.ks.daylucky.pojo.DTO.msg.LuckyMsgContent;
import com.ks.daylucky.pojo.VO.SimpleUser;
import com.ks.daylucky.service.UserInfoExtraService;
import com.ks.daylucky.service.UserInfoService;
import com.ks.daylucky.service.UserMsgService;
import com.ks.daylucky.service.impl.AlipayTemplateMsgManager;
import com.ks.daylucky.service.impl.AppManager;
import com.ks.daylucky.util.UserInfoUtil;
import com.ks.daylucky.util.activity.ActivityUtil;
import com.ks.daylucky.util.factory.LuckyMsgContentFactory;
import com.ks.daylucky.util.factory.UserMsgFactory;
import com.ks.daylucky.util.mq.CMQManager;
import com.ks.lucky.exception.LuckyActivityException;
import com.ks.lucky.exception.LuckyActivityJoinAssistException;
import com.ks.lucky.pojo.DO.*;
import com.ks.lucky.pojo.DTO.ActivitySimpleUser;
import com.ks.lucky.pojo.DTO.mq.*;
import com.ks.lucky.remote.service.LuckyActivityAwardResultService;
import com.ks.lucky.remote.service.LuckyActivityAwardService;
import com.ks.lucky.remote.service.LuckyActivityJoinAssistService;
import com.ks.lucky.remote.service.LuckyActivityJoinService;
import com.ks.lucky.remote.service.*;
import com.ks.lucky.utils.LuckyCMQConstant;
import com.ks.lucky.utils.mq.CMQConsumeRunner;
import com.qcloud.cmq.Message;
@@ -23,6 +32,8 @@
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.yeshi.utils.JsonUtil;
import org.yeshi.utils.alipay.AlipayXcxUtil;
import org.yeshi.utils.exception.AlipayXcxException;
import org.yeshi.utils.mq.JobThreadExecutorServiceImpl;
import javax.annotation.Resource;
@@ -39,17 +50,26 @@
    @Resource
    private UserInfoService userInfoService;
    @Reference(version = "1.0.0",check = false)
    @Reference(version = "1.0.0", check = false)
    private LuckyActivityJoinAssistService luckyActivityJoinAssistService;
    @Reference(version = "1.0.0",check = false)
    @Reference(version = "1.0.0", check = false)
    private LuckyActivityJoinService luckyActivityJoinService;
    @Reference(version = "1.0.0",check = false)
    @Reference(version = "1.0.0", check = false)
    private LuckyActivityAwardResultService luckyActivityAwardResultService;
    @Reference(version = "1.0.0",check = false)
    @Reference(version = "1.0.0", check = false)
    private LuckyActivityAwardService luckyActivityAwardService;
    @Reference(version = "1.0.0", check = false)
    private LuckyActivityService luckyActivityService;
    @Resource
    private AppManager appManager;
    @Resource
    private AlipayTemplateMsgManager alipayTemplateMsgManager;
    @Resource
    private UserMsgService userMsgService;
@@ -82,6 +102,7 @@
        new JobThreadExecutorServiceImpl().run(new Runnable() {
            @Override
            public void run() {
                logger.info("读取消息队列数据");
                List<Message> messageList = CMQManager.getInstance().consumeMsgMsg(16);
                if (messageList != null) {
                    for (Message message : messageList) {
@@ -100,25 +121,32 @@
                                    for (ActivitySimpleUser user : userList) {
                                        //判断是否中奖
                                        UserMsgSettings settings = getUserMsgSetting(Long.parseLong(user.getUid()));
                                        LuckyActivity activity = luckyActivityService.getActivity(dto.getActivityId());
                                        LuckyActivityAwardResult result = luckyActivityAwardResultService.getResult(user.getAppId(), user.getUid(), dto.getActivityId());
                                        if (result != null) {
                                            if (settings.getDrawnMsg()) {
                                            if (settings.getDrawnMsg() != null && settings.getDrawnMsg()) {
                                                LuckyActivityAwards awards = luckyActivityAwardService.getAwardDetail(result.getAwardId());
                                                try {
                                                    userMsgService.addMsg(UserMsgFactory.createLuckyMsg(Long.parseLong(result.getUid()), LuckyMsgContentFactory.createDrawn(dto.getActivityId(), awards.getAwardName())));
                                                    userMsgService.addMsg(UserMsgFactory.createLuckyMsg(Long.parseLong(result.getUid()), LuckyMsgContentFactory.createDrawn(dto.getActivityId(), activity.getCreateTime(), awards.getAwardName())));
                                                } catch (UserMsgException e) {
                                                    logger.error("添加中奖消息出错", e.getMessage(), result.getId());
                                                }
                                                //发送中奖模板消息
                                                alipayTemplateMsgManager.sendDrawnMsg(activity, Long.parseLong(result.getUid()));
                                            }
                                        } else {
                                            if (settings.getNotDrawnMsg()) {
                                            if (settings.getNotDrawnMsg() != null && settings.getNotDrawnMsg()) {
                                                try {
                                                    userMsgService.addMsg(UserMsgFactory.createLuckyMsg(Long.parseLong(user.getUid()), LuckyMsgContentFactory.createNotDrawn(dto.getActivityId())));
                                                    userMsgService.addMsg(UserMsgFactory.createLuckyMsg(Long.parseLong(user.getUid()), LuckyMsgContentFactory.createNotDrawn(dto.getActivityId(), activity.getCreateTime())));
                                                } catch (UserMsgException e) {
                                                    logger.error("添加未中奖消息出错", e.getMessage(), user.getUid(), dto.getActivityId());
                                                }
                                                //发送未中奖模板消息
                                                alipayTemplateMsgManager.sendUnDrawnMsg(activity, Long.parseLong(result.getUid()));
                                            }
                                        }
                                    }
@@ -126,12 +154,13 @@
                                case LuckyActivity.STATE_OPEN_FAIL:
                                    userList = getValidJoinerList(dto.getActivityId());
                                    LuckyActivity activity = luckyActivityService.getActivity(dto.getActivityId());
                                    for (ActivitySimpleUser user : userList) {
                                        //判断是否中奖
                                        UserMsgSettings settings = getUserMsgSetting(Long.parseLong(user.getUid()));
                                        if (settings.getNotOpenActivityMsg()) {
                                        if (settings.getNotOpenActivityMsg() != null && settings.getNotOpenActivityMsg()) {
                                            try {
                                                userMsgService.addMsg(UserMsgFactory.createLuckyMsg(Long.parseLong(user.getUid()), LuckyMsgContentFactory.createOpenFail(dto.getActivityId())));
                                                userMsgService.addMsg(UserMsgFactory.createLuckyMsg(Long.parseLong(user.getUid()), LuckyMsgContentFactory.createOpenFail(dto.getActivityId(), activity.getCreateTime())));
                                            } catch (UserMsgException e) {
                                                logger.error("添加未开奖消息出错", e.getMessage(), user.getUid(), dto.getActivityId());
                                            }
@@ -145,30 +174,29 @@
                        } else if (tag.equalsIgnoreCase(LuckyCMQConstant.TAG_ACTIVITY_JOIN)) {
                            ActivityJoinMsgDTO dto = JsonUtil.getSimpleGson().fromJson(message.msgBody, ActivityJoinMsgDTO.class);
                            LuckyActivity activity = luckyActivityService.getActivity(dto.getActivityId());
                            UserMsgSettings settings = getUserMsgSetting(Long.parseLong(dto.getUid()));
                            if (settings.getJoinActivityMsg()) {
                            if (settings.getJoinActivityMsg() != null && settings.getJoinActivityMsg()) {
                                try {
                                    userMsgService.addMsg(UserMsgFactory.createLuckyMsg(Long.parseLong(dto.getUid()), LuckyMsgContentFactory.createJoinSuccess(dto.getActivityId())));
                                    userMsgService.addMsg(UserMsgFactory.createLuckyMsg(Long.parseLong(dto.getUid()), LuckyMsgContentFactory.createJoinSuccess(dto.getActivityId(), activity.getCreateTime())));
                                } catch (UserMsgException e) {
                                    logger.error("添加参与成功消息出错", e.getMessage(), dto.getUid(), dto.getActivityId());
                                }
                            }
                            //查询是否有助力别人
                            LuckyActivityJoinAssist assist = luckyActivityJoinAssistService.getRecord(dto.getJoinId(), dto.getAppId(), dto.getUid(), ActivityJoinAssistEvent.assistJoin);
                            //查询本活动是否有助力别人
                            LuckyActivityJoinAssist assist = luckyActivityJoinAssistService.getRecord(null, dto.getActivityId(), dto.getAppId(), dto.getUid(), ActivityJoinAssistEvent.assist);
                            if (assist != null) {
                                //是否助力过别人
                                LuckyActivityJoinRecord joinRecord = luckyActivityJoinService.getJoinRecord(assist.getJoinId());
                                if (joinRecord != null) {
                                    settings = getUserMsgSetting(Long.parseLong(joinRecord.getUid()));
                                    if (settings.getAssistSuccessMsg()) {
                                        SimpleUser user = userInfoService.getSimpleUser(Long.parseLong(dto.getUid()));
                                        try {
                                            userMsgService.addMsg(UserMsgFactory.createLuckyMsg(Long.parseLong(joinRecord.getUid()), LuckyMsgContentFactory.createAssistAndJoin(dto.getActivityId(), user, assist.getWeight())));
                                        } catch (UserMsgException e) {
                                            logger.error("添加助力成功且自己参加消息出错", e.getMessage(), dto.getUid(), dto.getActivityId());
                                        }
                                    //得幸运券
                                    try {
                                        luckyActivityJoinAssistService.assist(activity.getId(), dto.getAppId(), dto.getUid(), joinRecord.getUid(), ActivityJoinAssistEvent.assistJoin, 1);
                                    } catch (LuckyActivityException e) {
                                        e.printStackTrace();
                                    } catch (LuckyActivityJoinAssistException e) {
                                        e.printStackTrace();
                                    }
                                }
                            }
@@ -177,14 +205,19 @@
                        } else if (tag.equalsIgnoreCase(LuckyCMQConstant.TAG_ASSIST)) {
                            //助力
                            ActivityAssistMsgDTO dto = JsonUtil.getSimpleGson().fromJson(message.msgBody, ActivityAssistMsgDTO.class);
                            UserMsgSettings settings = getUserMsgSetting(Long.parseLong(dto.getUid()));
                            if (settings.getAssistSuccessMsg()) {
                            LuckyActivity activity = luckyActivityService.getActivity(dto.getActivityId());
                            UserMsgSettings settings = getUserMsgSetting(Long.parseLong(dto.getTargetUid()));
                            if (settings.getAssistSuccessMsg() != null && settings.getAssistSuccessMsg()) {
                                LuckyActivityJoinRecord record = luckyActivityJoinService.getJoinInfo(dto.getActivityId(), dto.getAppId(), dto.getTargetUid());
                                if (record != null) {
                                    LuckyActivityJoinAssist assist = luckyActivityJoinAssistService.getRecord(record.getId(), dto.getAppId(), dto.getUid(), ActivityJoinAssistEvent.assist);
                                    LuckyActivityJoinAssist assist = luckyActivityJoinAssistService.getRecord(record.getId(), null, dto.getAppId(), dto.getUid(), dto.getAssistEvent());
                                    SimpleUser user = userInfoService.getSimpleUser(Long.parseLong(dto.getUid()));
                                    try {
                                        userMsgService.addMsg(UserMsgFactory.createLuckyMsg(Long.parseLong(dto.getTargetUid()), LuckyMsgContentFactory.createAssist(dto.getActivityId(), user, assist.getWeight())));
                                        if (dto.getAssistEvent() == ActivityJoinAssistEvent.assist) {
                                            userMsgService.addMsg(UserMsgFactory.createLuckyMsg(Long.parseLong(dto.getTargetUid()), LuckyMsgContentFactory.createAssist(dto.getActivityId(), activity.getCreateTime(), user, assist.getWeight())));
                                        } else if (dto.getAssistEvent() == ActivityJoinAssistEvent.assistJoin) {
                                            userMsgService.addMsg(UserMsgFactory.createLuckyMsg(Long.parseLong(dto.getTargetUid()), LuckyMsgContentFactory.createAssistAndJoin(dto.getActivityId(), activity.getCreateTime(), user, assist.getWeight())));
                                        }
                                    } catch (UserMsgException e) {
                                        logger.error("添加助力成功消息出错", e.getMessage(), dto.getUid(), dto.getActivityId());
                                    }
@@ -193,10 +226,11 @@
                        } else if (tag.equalsIgnoreCase(LuckyCMQConstant.TAG_ACTIVITY_DRAWN)) {
                            ActivityDrawnMsgDTO dto = JsonUtil.getSimpleGson().fromJson(message.msgBody, ActivityDrawnMsgDTO.class);
                            LuckyActivity activity = luckyActivityService.getActivity(dto.getActivityId());
                            switch (dto.getAwardResultState()) {
                                case LuckyActivityAwardResult.STATE_OUT_OF_DATE:
                                    try {
                                        userMsgService.addMsg(UserMsgFactory.createLuckyMsg(Long.parseLong(dto.getUid()), LuckyMsgContentFactory.createReceiveOutDate(dto.getActivityId())));
                                        userMsgService.addMsg(UserMsgFactory.createLuckyMsg(Long.parseLong(dto.getUid()), LuckyMsgContentFactory.createReceiveOutDate(dto.getActivityId(), activity.getCreateTime())));
                                    } catch (UserMsgException e) {
                                        logger.error("添加过期未领消息出错", e.getMessage(), dto.getUid(), dto.getActivityId());
                                    }
service-daylucky/src/main/resources/static/activity-add.html
@@ -86,6 +86,7 @@
        .hidden {
            display: none;
        }
@@ -304,7 +305,7 @@
                        <div class="layui-input-inline">
                            <label class="desc">最多150个字符,可换行且兼容符号表情</label>
                            <div class="flex-row flex-center">
                                <textarea class="layui-textarea" maxlength="150"></textarea>
                                <textarea class="layui-textarea" name="desc" maxlength="150"></textarea>
                            </div>
                        </div>
                    </div>
@@ -388,8 +389,6 @@
        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("请填写正确的参与人数");
@@ -759,9 +758,10 @@
            },
            //添加
            requestAdd: function (data) {
            requestAdd: function (data,type) {
                var params = {
                    data: data,
                    type:type
                }
                //发异步,把数据提交给php
@@ -771,10 +771,7 @@
                                icon: 6
                            },
                            function () {
                                //关闭当前frame
                                xadmin.close();
                                // 可以对父窗口进行刷新
                                xadmin.father_reload();
                             layer.close(this);
                            });
                    } else {
                        layer.msg(res.msg);
@@ -803,9 +800,9 @@
                if (finish) {
                    console.log("获取到的结果");
                    console.log(this.temp);
                    app.setTempData(this.temp);
                    app.initData();
                    //this.requestAdd(JSON.stringify(this.temp));
                    // app.setTempData(this.temp);
                    // app.initData();
                    this.requestAdd(JSON.stringify(this.temp),'publish');
                }
            },
service-daylucky/src/main/resources/static/award-type-redpacket-divide.html
@@ -54,7 +54,7 @@
                <label class="layui-form-label">
                    当前账户余额:</label>
                <div class="layui-input-inline">
                    <span style="font-size: 16px;">  1000.00元</span>
                    <span style="font-size: 16px;">  {{balance}}元</span>
                    <a style="float: right;" class="layui-btn">充值</a>
                </div>
            </div>
@@ -99,6 +99,7 @@
    </div>
</div>
<script src="js/common.js"></script>
<script src="js/http.js"></script>
<script>
    var listener;
@@ -114,14 +115,23 @@
            total: "",
            count: "",
            result: "",
            balance: 0,
        },
        created: function () {
            var $this = this;
            var data = JSON.parse(decodeURIComponent(common.getQueryString("data")));
            this.total = data.total;
            this.count = data.count;
            setTimeout(function () {
                app.render();
            });
            ksapp.post("/admin/sponsor/getBalance", {}, function (res) {
                if (res.code == 0) {
                    $this.balance = res.data.balance;
                }
            }, null);
        },
        watch: {
            total: function (e) {
service-daylucky/src/main/resources/static/award-type-redpacket-random.html
@@ -53,7 +53,7 @@
                <label class="layui-form-label">
                    当前账户余额:</label>
                <div class="layui-input-inline">
                    <span style="font-size: 16px;">1000.00元</span>
                    <span style="font-size: 16px;">{{balance}}元</span>
                    <a style="float: right;" class="layui-btn">充值</a>
                </div>
            </div>
@@ -105,10 +105,11 @@
        el: '.layui-form',
        data: {
            total: "",
            count: ""
            count: "",
            balance: 0.00
        },
        created: function () {
            var $this = this;
            var data = JSON.parse(decodeURIComponent(common.getQueryString("data")));
            this.total = data.total;
            this.count = data.count;
@@ -116,6 +117,12 @@
                app.render();
            });
            ksapp.post("/admin/sponsor/getBalance", {}, function (res) {
                if (res.code == 0) {
                    $this.balance = res.data.balance;
                }
            }, null);
        },
        watch: {},
service-daylucky/src/test/java/com/ks/VisualUserTest.java
New file
@@ -0,0 +1,271 @@
package com.ks;
import org.apache.commons.io.IOUtils;
import org.jsoup.Jsoup;
import org.jsoup.nodes.Document;
import org.jsoup.nodes.Element;
import org.jsoup.select.Elements;
import org.junit.Test;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.yeshi.utils.HttpUtil;
import org.yeshi.utils.StringUtil;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import java.util.ArrayList;
import java.util.List;
public class VisualUserTest {
    Logger logger = LoggerFactory.getLogger(VisualUserTest.class);
    @Test
    public void getPortrait0() {
        for (int p = 2; p < 1000; p++) {
            try {
                List<String> list = new ArrayList<>();
                Document doc = Jsoup.connect("https://www.woyaogexing.com/touxiang/index_" + p + ".html").timeout(10000).get();
                Elements els = doc.getElementsByAttributeValue("class", "pMain").get(0).getElementsByAttributeValue("class", "txList");
                for (int i = 0; i < els.size(); i++) {
                    String img = els.get(i).getElementsByTag("img").get(0).attr("src");
                    if (!StringUtil.isNullOrEmpty(img)) {
                        list.add("http:" + img);
                    }
                    logger.info(img);
                }
                if (list.size() > 0) {
                    String fileName = "D:/portrait/0/" + p + ".txt";
                    if (!new File(fileName).getParentFile().exists()) {
                        new File(fileName).getParentFile().mkdirs();
                    }
                    IOUtils.writeLines(list, "\r\n", new FileOutputStream("D:/portrait/0/" + p + ".txt"));
                }
            } catch (IOException e) {
                e.printStackTrace();
            }
            try {
                Thread.sleep(2000);
            } catch (InterruptedException e) {
                e.printStackTrace();
            }
        }
    }
    @Test
    public void getPortrait1() {
        String[] classes = new String[]{
                "qinglv", "nv", "nan", "dongman", "weixin"
        };
        for (String clz : classes) {
            if (clz.equalsIgnoreCase(classes[0]))
                continue;
            for (int p = 2; p < 120; p++) {
                try {
                    List<String> list = new ArrayList<>();
                    Document doc = Jsoup.connect("http://www.crcz.com/touxiang/" + clz + "/list_" + p + ".html").timeout(10000).get();
                    Elements els = doc.getElementsByAttributeValue("class", "tx_list").get(0).getElementsByTag("li");
                    for (int i = 0; i < els.size(); i++) {
                        String img = els.get(i).getElementsByTag("img").get(0).attr("src");
                        if (!StringUtil.isNullOrEmpty(img)) {
                            list.add(img);
                        }
                        logger.info(img);
                    }
                    if (list.size() > 0) {
                        String fileName = "D:/portrait/1/" + clz + "_" + p + ".txt";
                        if (!new File(fileName).getParentFile().exists()) {
                            new File(fileName).getParentFile().mkdirs();
                        }
                        IOUtils.writeLines(list, "\r\n", new FileOutputStream(fileName));
                    }
                } catch (Exception e) {
                    e.printStackTrace();
                }
                try {
                    Thread.sleep(2000);
                } catch (InterruptedException e) {
                    e.printStackTrace();
                }
            }
        }
    }
    private String getNextPageUrl2(String url, Document doc, String containerClass, String activeClass) {
        Element next = doc.getElementsByClass(containerClass).get(0).getElementsByClass(activeClass).get(0).nextElementSibling();
        String href = next.attr("href");
        if (!StringUtil.isNullOrEmpty(href)) {
            return url.substring(0, url.lastIndexOf("/") + 1) + href;
        }
        return null;
    }
    @Test
    public void getPortrait2() {
        String[] classes = new String[]{
                "fengjing", "katong", "keai", "weimei", "xiaoqingxin", "yijing", "gaoxiao", "dongwu", "qiche", "wupin", "xingzuo", "zhiwu", "shouhui", "jianzhu"
        };
        for (String clz : classes) {
            String url = "http://www.imeitou.com/" + clz + "/";
            int p = 1;
            while (!StringUtil.isNullOrEmpty(url)) {
                try {
                    List<String> list = new ArrayList<>();
                    Document doc = Jsoup.connect(url).timeout(10000).get();
                    Elements els = doc.getElementsByAttributeValue("class", "g-gxlist-imgbox").get(0).getElementsByTag("li");
                    for (int i = 0; i < els.size(); i++) {
                        String img = els.get(i).getElementsByTag("img").get(0).attr("src");
                        if (!StringUtil.isNullOrEmpty(img)) {
                            list.add(img);
                        }
                        logger.info(img);
                    }
                    if (list.size() > 0) {
                        String fileName = "D:/portrait/2/" + clz + "_" + p + ".txt";
                        if (!new File(fileName).getParentFile().exists()) {
                            new File(fileName).getParentFile().mkdirs();
                        }
                        IOUtils.writeLines(list, "\r\n", new FileOutputStream(fileName));
                    }
                    url = getNextPageUrl2(url, doc, "pagelist", "current");
                    p++;
                } catch (Exception e) {
                    e.printStackTrace();
                }
                try {
                    Thread.sleep(2000);
                } catch (InterruptedException e) {
                    e.printStackTrace();
                }
            }
        }
    }
    private String getNextPageUrl3(String url, Document doc, String containerClass, String activeTag) {
        Element next = doc.getElementsByClass(containerClass).get(0).getElementsByTag(activeTag).get(0).nextElementSibling();
        String href = next.attr("href");
        if (!StringUtil.isNullOrEmpty(href)) {
            return url.substring(0, url.lastIndexOf("/") + 1) + href;
        }
        return null;
    }
    @Test
    public void getPortrait3() {
        String[][] classes = new String[][]{
                new String[]{"dongman", "list_219_1.html"},
                new String[]{"katong", "list_220_1.html"},
                new String[]{"gexing", "list_225_1.html"},
                new String[]{"keai", "list_226_1.html"},
                new String[]{"fengjing", "list_229_1.html"},
        };
        for (String[] clz : classes) {
            String url = "http://www.jj20.com/tx/" + clz[0] + "/" + clz[1];
            int p = 1;
            while (!StringUtil.isNullOrEmpty(url)) {
                try {
                    List<String> list = new ArrayList<>();
                    Document doc = Jsoup.connect(url).timeout(10000).get();
                    Elements els = doc.getElementsByAttributeValue("class", "g-select-img").get(1).getElementsByTag("li");
                    for (int i = 0; i < els.size(); i++) {
                        String img = els.get(i).getElementsByTag("img").get(0).attr("src");
                        if (!StringUtil.isNullOrEmpty(img)) {
                            list.add(img);
                        }
                        logger.info(img);
                    }
                    if (list.size() > 0) {
                        String fileName = "D:/portrait/3/" + clz[0] + "_" + p + ".txt";
                        if (!new File(fileName).getParentFile().exists()) {
                            new File(fileName).getParentFile().mkdirs();
                        }
                        IOUtils.writeLines(list, "\r\n", new FileOutputStream(fileName));
                    }
                    url = getNextPageUrl3(url, doc, "tsp_nav", "b");
                    p++;
                } catch (Exception e) {
                    e.printStackTrace();
                }
                try {
                    Thread.sleep(2000);
                } catch (InterruptedException e) {
                    e.printStackTrace();
                }
            }
        }
    }
        @Test
        public void downloadPortrait () {
            try {
                File file = new File("D://portrait");
                File[] fs = file.listFiles();
                for (File f : fs) {
                    if (!f.getName().contains("3")) {
                        continue;
                    }
                    if (!f.getName().contains("download")) {
                        String downloadDir = file.getAbsolutePath() + "/download/" + f.getName();
                        if (!new File(downloadDir).exists()) {
                            new File(downloadDir).mkdirs();
                        }
                        File[] cfs = f.listFiles();
                        for (File cf : cfs) {
                            List<String> list = IOUtils.readLines(new FileInputStream(cf));
                            for (int i = 0; i < list.size(); i++) {
                                String fileName = cf.getName().replace(".txt", "_") + i + ".jpg";
                                if (!new File(downloadDir, fileName).exists()) {
                                    try {
                                        IOUtils.write(IOUtils.toByteArray(HttpUtil.getAsInputStream(list.get(i))), new FileOutputStream(new File(downloadDir, fileName)));
                                        Thread.sleep(100);
                                    } catch (Exception e) {
                                        e.printStackTrace();
                                    }
                                }
                            }
                        }
                    }
                }
            } catch (Exception e) {
                e.printStackTrace();
            }
        }
    }
service-daylucky/src/test/java/com/ks/daylucky/MsgTest.java
@@ -1,26 +1,63 @@
package com.ks.daylucky;
import com.alipay.api.AlipayApiException;
import com.ks.app.entity.AppInfo;
import com.ks.app.util.AlipayAppUtil;
import com.ks.daylucky.exception.UserMsgException;
import com.ks.daylucky.pojo.DO.UserInfo;
import com.ks.daylucky.service.UserInfoService;
import com.ks.daylucky.service.UserMsgService;
import com.ks.daylucky.service.impl.AppManager;
import com.ks.daylucky.util.activity.ActivityUtil;
import com.ks.daylucky.util.factory.LuckyMsgContentFactory;
import com.ks.daylucky.util.factory.UserMsgFactory;
import com.ks.lucky.pojo.DO.LuckyActivity;
import com.ks.lucky.remote.service.LuckyActivityService;
import org.apache.dubbo.config.annotation.Reference;
import org.junit.jupiter.api.Test;
import org.springframework.boot.test.context.SpringBootTest;
import org.yeshi.utils.alipay.AlipayXcxUtil;
import org.yeshi.utils.exception.AlipayXcxException;
import javax.annotation.Resource;
import java.util.Date;
@SpringBootTest
public class MsgTest {
    @Resource
    private UserMsgService userMsgService;
    @Resource
    private UserInfoService userInfoService;
    @Resource
    private AppManager appManager;
    @Reference(version = "1.0.0")
    private LuckyActivityService luckyActivityService;
    @Test
    public void addMsg() {
        try {
            userMsgService.addMsg(UserMsgFactory.createLuckyMsg(4L, LuckyMsgContentFactory.createJoinSuccess(7L)));
            userMsgService.addMsg(UserMsgFactory.createLuckyMsg(4L, LuckyMsgContentFactory.createJoinSuccess(7L, new Date())));
        } catch (UserMsgException e) {
        }
    }
    @Test
    public void sendTemplateMsg() {
        //如果是中奖消息要发送模板消息
        UserInfo userInfo = userInfoService.getUserDetail(4L);
        AppInfo appInfo = appManager.getAppDetail(userInfo.getAppId());
        LuckyActivity activity = luckyActivityService.getActivity(10029L);
        try {
            AlipayXcxUtil.sendTemplateMsg(AlipayAppUtil.getAlipayAppInfo(appInfo.getAlipayInfo()), "677118be3b914b98be8cc58d4addc0db", "pages/activity-detail/activity-detail", userInfo.getAlipayUid(), "123", "中奖啦,快去看看你中了什么大奖", ActivityUtil.getActivityDateNumber(activity.getId(), activity.getCreateTime()));
        } catch (AlipayApiException e) {
            e.printStackTrace();
        } catch (AlipayXcxException e) {
            e.printStackTrace();
        }
    }
}
service-lucky/pom.xml
@@ -195,16 +195,16 @@
                <!--</dependencies>-->
            <!--</plugin>-->
            <plugin>
                <groupId>com.ks</groupId>
                <artifactId>generater-maven-plugin</artifactId>
                <version>1.0.0</version>
                <configuration>
                    <!--配置文件的位置-->
                    <configurationFile>src/main/resources/generatorConfig.xml</configurationFile>
                </configuration>
            <!--<plugin>-->
                <!--<groupId>com.ks</groupId>-->
                <!--<artifactId>generater-maven-plugin</artifactId>-->
                <!--<version>1.0.0</version>-->
                <!--<configuration>-->
                    <!--&lt;!&ndash;配置文件的位置&ndash;&gt;-->
                    <!--<configurationFile>src/main/resources/generatorConfig.xml</configurationFile>-->
                <!--</configuration>-->
            </plugin>
            <!--</plugin>-->
        </plugins>
    </build>
service-lucky/src/main/java/com/ks/lucky/config/CMQConsumeConfig.java
@@ -1,7 +1,8 @@
package com.ks.lucky.config;
import com.ks.lucky.util.mq.consumer.AcitivtyConsumer;
import com.ks.lucky.util.mq.consumer.ActivityConsumer;
import com.ks.lucky.util.mq.consumer.AcitivtyDrawnRecieveOutDateConsumer;
import com.ks.lucky.util.mq.consumer.JobConsumer;
import com.ks.lucky.utils.mq.CMQConsumeRunner;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
@@ -16,7 +17,7 @@
    @Bean(initMethod = "start", destroyMethod = "destroy")
    public CMQConsumeRunner activityConsumer() {
        CMQConsumeRunner runner = new AcitivtyConsumer();
        CMQConsumeRunner runner = new ActivityConsumer();
        return runner;
    }
@@ -26,5 +27,11 @@
        return runner;
    }
    @Bean(initMethod = "start", destroyMethod = "destroy")
    public CMQConsumeRunner job() {
        CMQConsumeRunner runner = new JobConsumer();
        return runner;
    }
}
service-lucky/src/main/java/com/ks/lucky/mapper/LuckyActivityJoinAssistMapper.java
@@ -14,6 +14,9 @@
    List<LuckyActivityJoinAssist> list(@Param("query") ActivityJoinAssistQuery query);
    List<LuckyActivityJoinAssist> listByActivityId(@Param("query") ActivityJoinAssistQuery query,@Param("activityId") Long activityId);
    long count(@Param("query") ActivityJoinAssistQuery query);
service-lucky/src/main/java/com/ks/lucky/mapper/LuckyActivityJoinRecordMapper.java
@@ -19,7 +19,7 @@
    void addWeight(@Param("id") Long id, @Param("weight") int weight);
    int updateSelectiveWithQuery(LuckyActivityJoinRecord record, ActivityJoinRecordQuery query);
    int updateSelectiveWithQuery(@Param("record") LuckyActivityJoinRecord record, @Param("query") ActivityJoinRecordQuery query);
    List<LuckyActivityJoinRecord> listWithActivityState(@Param("query") ActivityJoinRecordQuery query, @Param("activityStateList") List<Integer> activityStateList);
@@ -49,6 +49,7 @@
    /**
     * 排序列表
     *
     * @param activityId
     * @param start
     * @param count
service-lucky/src/main/java/com/ks/lucky/mapper/LuckySponsorMoneyRecordMapper.java
New file
@@ -0,0 +1,8 @@
package com.ks.lucky.mapper;
import com.ks.lib.common.dao.BaseMapper;
import com.ks.lucky.pojo.DO.LuckySponsorMoneyRecord;
public interface LuckySponsorMoneyRecordMapper extends BaseMapper<LuckySponsorMoneyRecord> {
}
service-lucky/src/main/java/com/ks/lucky/mapper/LuckySponsorsMapper.java
@@ -9,6 +9,8 @@
public interface LuckySponsorsMapper extends BaseMapper<LuckySponsors> {
    LuckySponsors   selectByPrimaryKeyForUpdate(Long id);
    List<LuckySponsors> list(@Param("query") LuckySponsorQuery query);
    long count(@Param("query") LuckySponsorQuery query);
service-lucky/src/main/java/com/ks/lucky/pojo/DTO/RedPackage.java
File was renamed from service-lucky/src/test/java/com/ks/lucky/dto/RedPackage.java
@@ -1,4 +1,4 @@
package com.ks.lucky.dto;
package com.ks.lucky.pojo.DTO;
public class RedPackage {
    public double remainMoney;
service-lucky/src/main/java/com/ks/lucky/service/LuckySponsorMoneyService.java
New file
@@ -0,0 +1,32 @@
package com.ks.lucky.service;
import com.ks.daylucky.exception.LuckySponsorMoneyRecordException;
import com.ks.lib.common.exception.ParamsException;
import com.ks.lucky.exception.LuckySponsorException;
import java.math.BigDecimal;
/**
 * 赞助商资金服务
 */
public interface LuckySponsorMoneyService {
    /**
     * 发布活动
     *
     * @param sponsorId
     * @param activityId
     * @param money
     */
    public void publishActivity(Long sponsorId, Long activityId, BigDecimal money) throws LuckySponsorException, LuckySponsorMoneyRecordException, ParamsException;
    /**
     * @param sponsorId
     * @param activityId
     * @param money
     * @param drawnId    中奖ID
     */
    public void drawnNotReceive(Long sponsorId, Long activityId, BigDecimal money, Long drawnId)throws LuckySponsorException, LuckySponsorMoneyRecordException, ParamsException;
}
service-lucky/src/main/java/com/ks/lucky/service/impl/LuckyActivityAwardManager.java
@@ -7,6 +7,7 @@
import com.ks.lucky.mapper.LuckyActivityAwardsMapper;
import com.ks.lucky.pojo.DO.LuckyActivityAwardMaterial;
import com.ks.lucky.pojo.DO.LuckyActivityAwards;
import com.ks.lucky.pojo.DTO.ActivityAwardParams;
import com.ks.lucky.query.ActivityAwardQuery;
import com.ks.lucky.remote.service.LuckyActivityAwardMaterialService;
import com.ks.lucky.util.annotation.RedisCache;
@@ -16,6 +17,7 @@
import org.yeshi.utils.StringUtil;
import javax.annotation.Resource;
import java.math.BigDecimal;
import java.util.Date;
import java.util.List;
@@ -115,6 +117,7 @@
                awards.setMaterial(material);
            }
        }
        awards.setActivityAwardParams(ActivityAwardParams.getBean(awards.getAwardParams()));
        return awards;
    }
@@ -136,4 +139,24 @@
    }
    /**
     * 计算奖项支出
     *
     * @param activityId
     * @return
     */
    public BigDecimal computeAwardsMoney(Long activityId) {
        BigDecimal money = new BigDecimal(0);
        List<LuckyActivityAwards> list = getAwardList(activityId);
        for (LuckyActivityAwards awards : list) {
            ActivityAwardParams params = ActivityAwardParams.getBean(awards.getAwardParams());
            if (params.getType() == ActivityAwardParams.ActivityAwardTypeEnum.alipayRedPackage) {
                money = money.add(params.getRedPackage());
            }
        }
        return money;
    }
}
service-lucky/src/main/java/com/ks/lucky/service/impl/LuckyActivityAwardResultManager.java
@@ -4,6 +4,7 @@
import com.google.gson.Gson;
import com.ks.app.entity.AppAlipayInfoWithBLOBs;
import com.ks.app.entity.AppInfo;
import com.ks.app.util.AlipayAppUtil;
import com.ks.lucky.exception.LuckyActivityAwardException;
import com.ks.lucky.exception.LuckyActivityAwardResultException;
import com.ks.lucky.exception.LuckyMQException;
@@ -14,10 +15,12 @@
import com.ks.lucky.pojo.DO.LuckyActivityAwards;
import com.ks.lucky.pojo.DO.LuckyMQ;
import com.ks.lucky.pojo.DTO.ActivityAwardParams;
import com.ks.lucky.pojo.DTO.RedPackage;
import com.ks.lucky.pojo.DTO.mq.ActivityDrawnMsgDTO;
import com.ks.lucky.query.ActivityAwardResultQuery;
import com.ks.lucky.service.LuckyMQService;
import com.ks.lucky.util.Constant;
import com.ks.lucky.util.RedPackageUtil;
import com.ks.lucky.util.mq.CMQManager;
import com.ks.lucky.util.mq.LuckyMQFactory;
import org.slf4j.Logger;
@@ -37,9 +40,8 @@
import java.io.ByteArrayInputStream;
import java.io.InputStream;
import java.math.BigDecimal;
import java.util.Date;
import java.util.List;
import java.util.Set;
import java.math.RoundingMode;
import java.util.*;
/**
 * 奖项管理
@@ -64,6 +66,9 @@
    @Resource
    private LuckyMQService luckyMQService;
    @Resource
    private LuckyActivityAwardResultManager luckyActivityAwardResultManager;
    /**
     * 添加记录
@@ -74,6 +79,29 @@
     */
    @Transactional(rollbackFor = Exception.class)
    public void addRecord(Set<String> uids, Long activityId, long awardId) {
        LuckyActivityAwards award = luckyActivityAwardManager.getAwardDetail(awardId);
        Map<String, BigDecimal> moneyMap = new HashMap<>();
        //计算每个人的支付宝红包金额
        if (award.getActivityAwardParams().getType() == ActivityAwardParams.ActivityAwardTypeEnum.alipayRedPackage) {
            switch (award.getAwardWay()) {
                //随机
                case LuckyActivityAwards.AWARD_WAY_RANDOM:
                    RedPackage redPackage = new RedPackage(award.getActivityAwardParams().getRedPackage().doubleValue(), award.getCount());
                    for (String uid : uids) {
                        double money = RedPackageUtil.getRandomPackage(redPackage);
                        moneyMap.put(uid, new BigDecimal(money));
                    }
                    break;
                //平分
                case LuckyActivityAwards.AWARD_WAY_DIVIDE:
                    BigDecimal permoney = award.getActivityAwardParams().getRedPackage().divide(new BigDecimal(award.getCount()), 2, RoundingMode.FLOOR);
                    for (String uid : uids) {
                        moneyMap.put(uid, permoney);
                    }
                    break;
            }
        }
        for (String uidStr : uids) {
            long appId = Long.parseLong(uidStr.split("#")[0]);
@@ -92,6 +120,7 @@
            LuckyActivityAwardResultExtra extra = new LuckyActivityAwardResultExtra();
            extra.setAwardResultId(result.getId());
            extra.setCreateTime(new Date());
            extra.setRedPackage(moneyMap.get(uidStr));
            luckyActivityAwardResultExtraMapper.insertSelective(extra);
            //添加通知
@@ -114,12 +143,14 @@
     */
    @Transactional(rollbackFor = Exception.class)
    public void sendAward(LuckyActivityAwardResult result, LuckyActivityAwardResultExtra extra) throws LuckyActivityAwardException, LuckyActivityAwardResultException {
        //加行锁
        luckyActivityAwardResultMapper.selectByPrimaryKeyForUpdate(result.getId());
        LuckyActivityAwards awards = luckyActivityAwardManager.getAwardDetail(result.getAwardId());
        if (awards == null) {
            throw new LuckyActivityAwardException(LuckyActivityAwardException.CODE_NOT_EXIST, "奖项不存在");
        }
        String paramsStr = awards.getAwardParams();
        ActivityAwardParams params = new Gson().fromJson(paramsStr, ActivityAwardParams.class);
        ActivityAwardParams params = ActivityAwardParams.getBean(paramsStr);
        AppInfo app = appManager.getAppDetail(result.getAppId());
        if (params.getType() == ActivityAwardParams.ActivityAwardTypeEnum.alipayRedPackage) {
@@ -133,7 +164,6 @@
                throw new LuckyActivityAwardResultException(LuckyActivityAwardResultException.CODE_PARAMS_NOT_ENOUGH, "参数不完整,缺少alipayUid与redPackage参数");
            }
            String orderId = alipayInfo.getAlipayAppId() + "_award_" + result.getId();
            BigDecimal money = extra.getRedPackage();
            String alipayUid = extra.getAlipyUid();
@@ -145,15 +175,13 @@
            } catch (AlipayApiException e) {
                throw new LuckyActivityAwardResultException(1, e.getErrMsg());
            }
            luckyActivityAwardResultManager.setResultReceived(result.getId());
            LuckyActivityAwardResult update = new LuckyActivityAwardResult();
            update.setId(result.getId());
            update.setState(LuckyActivityAwardResult.STATE_RECIEVED);
            update.setStateDesc("已领取");
            update.setUpdateTime(new Date());
        } else if (params.getType() == ActivityAwardParams.ActivityAwardTypeEnum.wxRedPackage) {
            //TODO 微信发红包
        }
        //删除通知
    }
@@ -163,11 +191,7 @@
     * 发支付宝红包
     */
    private void sendAlipayRedPackage(String outBizNo, String alipayUid, String orderTitle, BigDecimal money, AppAlipayInfoWithBLOBs alipayInfo) throws AlipayTransferException, AlipayApiException {
        InputStream appCert = new ByteArrayInputStream(alipayInfo.getAlipayAppCertPublicKey());
        InputStream publicCert = new ByteArrayInputStream(alipayInfo.getAlipayPublicCert());
        InputStream rootCert = new ByteArrayInputStream(alipayInfo.getAlipayRootCert());
        AlipayAppInfo appInfo = new AlipayAppInfo(alipayInfo.getAlipayAppId(), alipayInfo.getAlipayPrivateKey(), new AlipayCertInfo(appCert, publicCert, rootCert));
        AlipayAppInfo appInfo = AlipayAppUtil.getAlipayAppInfo(alipayInfo);
        AlipayTransferInfo transferInfo = new AlipayTransferInfo();
        transferInfo.setAccount(new AlipayTransferAccount(alipayUid));
        transferInfo.setMoney(money);
@@ -231,4 +255,29 @@
        CMQManager.getInstance().publishActivityDrawnMsg(ActivityDrawnMsgDTO.create(result));
    }
    /**
     * 领取
     *
     * @param resultId
     */
    @Transactional(rollbackFor = Exception.class)
    public void setResultReceived(Long resultId) {
        LuckyActivityAwardResult result = luckyActivityAwardResultMapper.selectByPrimaryKeyForUpdate(resultId);
        if (result.getState() != LuckyActivityAwardResult.STATE_NOT_RECIEVE) {
            return;
        }
        LuckyActivityAwardResult update = new LuckyActivityAwardResult();
        update.setId(resultId);
        update.setState(LuckyActivityAwardResult.STATE_RECIEVED);
        update.setStateDesc("已领取");
        update.setUpdateTime(new Date());
        luckyActivityAwardResultMapper.updateByPrimaryKeySelective(update);
        result.setStateDesc(update.getStateDesc());
        result.setState(update.getState());
        //发布消息
        CMQManager.getInstance().publishActivityDrawnMsg(ActivityDrawnMsgDTO.create(result));
    }
}
service-lucky/src/main/java/com/ks/lucky/service/impl/LuckyActivityManager.java
@@ -235,7 +235,12 @@
        //强制结束的不开奖
        if (!force) {
            //添加开奖消息
            LuckyMQ mq = LuckyMQFactory.createOpenActivity(activity);
            LuckyActivityOpenInfo openInfo = luckyActivityOpenInfoManager.getOpenInfo(activityId);
            Date openTime = openInfo.getPreOpenTime();
            if (openTime == null) {
                openTime = new Date();
            }
            LuckyMQ mq = LuckyMQFactory.createOpenActivity(activityId, openTime);
            luckyMQService.addMQ(mq);
        }
        //尝试删除消息
service-lucky/src/main/java/com/ks/lucky/service/impl/LuckyMQServiceImpl.java
@@ -60,7 +60,7 @@
            return;
        }
        if (old.getState() != LuckyMQ.STATE_NOT_SEND) {
            throw new LuckyMQException(1, "消息不是待发送状态");
            return;
        }
        luckyMQMapper.deleteByPrimaryKey(old.getId());
    }
service-lucky/src/main/java/com/ks/lucky/service/impl/LuckySponsorMoneyRecordManager.java
New file
@@ -0,0 +1,31 @@
package com.ks.lucky.service.impl;
import com.ks.lib.common.exception.ParamsException;
import com.ks.lucky.mapper.LuckySponsorMoneyRecordMapper;
import com.ks.lucky.pojo.DO.LuckySponsorMoneyRecord;
import org.springframework.stereotype.Component;
import org.springframework.transaction.annotation.Transactional;
import org.springframework.validation.annotation.Validated;
import org.yeshi.utils.generater.entity.ExceptionData;
import javax.annotation.Resource;
import javax.validation.Valid;
import java.util.Date;
@Component
public class LuckySponsorMoneyRecordManager {
    @Resource
    private LuckySponsorMoneyRecordMapper luckySponsorMoneyRecordMapper;
    @Validated
    @Transactional(rollbackFor = Exception.class)
    public void addRecord(@Valid LuckySponsorMoneyRecord record) throws ParamsException {
        if (record.getCreateTime() == null) {
            record.setCreateTime(new Date());
        }
        luckySponsorMoneyRecordMapper.insertSelective(record);
    }
}
service-lucky/src/main/java/com/ks/lucky/service/impl/LuckySponsorMoneyServiceImpl.java
New file
@@ -0,0 +1,94 @@
package com.ks.lucky.service.impl;
import com.google.gson.Gson;
import com.ks.daylucky.exception.LuckySponsorMoneyRecordException;
import com.ks.lib.common.exception.ParamsException;
import com.ks.lucky.exception.LuckySponsorException;
import com.ks.lucky.mapper.LuckySponsorsMapper;
import com.ks.lucky.pojo.DO.LuckySponsorMoneyRecord;
import com.ks.lucky.pojo.DO.LuckySponsors;
import com.ks.lucky.service.LuckySponsorMoneyService;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import javax.annotation.Resource;
import java.math.BigDecimal;
import java.util.Date;
@Service
public class LuckySponsorMoneyServiceImpl implements LuckySponsorMoneyService {
    @Resource
    private LuckySponsorsMapper luckySponsorsMapper;
    @Resource
    private LuckySponsorMoneyRecordManager luckySponsorMoneyRecordManager;
    /**
     * 设置余额
     *
     * @param sponsorId
     * @param balance
     */
    private void setMoney(Long sponsorId, BigDecimal balance) {
        //扣资金
        LuckySponsors update = new LuckySponsors();
        update.setId(sponsorId);
        update.setBalance(balance);
        update.setUpdateTime(new Date());
        luckySponsorsMapper.updateByPrimaryKeySelective(update);
    }
    @Transactional(rollbackFor = Exception.class)
    @Override
    public void publishActivity(Long sponsorId, Long activityId, BigDecimal money) throws LuckySponsorException, LuckySponsorMoneyRecordException {
        LuckySponsors sponsor = luckySponsorsMapper.selectByPrimaryKeyForUpdate(sponsorId);
        if (sponsor == null) {
            throw new LuckySponsorException(LuckySponsorException.CODE_NOT_EXIST, "赞助商不存在");
        }
        if (sponsor.getBalance().compareTo(money) < 0) {
            throw new LuckySponsorException(1, "赞助商余额不足");
        }
        setMoney(sponsorId, sponsor.getBalance().subtract(money));
        //加记录
        LuckySponsorMoneyRecord record = new LuckySponsorMoneyRecord();
        record.setActivityId(activityId);
        record.setMoney(new BigDecimal(0).subtract(money));
        record.setType(LuckySponsorMoneyRecord.RecordType.publishActivity);
        record.setSponsorId(sponsorId);
        record.setRemarks("发布活动");
        try {
            luckySponsorMoneyRecordManager.addRecord(record);
        } catch (ParamsException e) {
            throw new LuckySponsorException(ParamsException.CODE_PARAMS_NOT_ENOUGH, e.getMsg());
        }
    }
    @Override
    public void drawnNotReceive(Long sponsorId, Long activityId, BigDecimal money, Long drawnId) throws LuckySponsorException, LuckySponsorMoneyRecordException, ParamsException {
        LuckySponsors sponsor = luckySponsorsMapper.selectByPrimaryKeyForUpdate(sponsorId);
        if (sponsor == null) {
            throw new LuckySponsorException(LuckySponsorException.CODE_NOT_EXIST, "赞助商不存在");
        }
        setMoney(sponsorId, sponsor.getBalance().add(money));
        //加记录
        LuckySponsorMoneyRecord record = new LuckySponsorMoneyRecord();
        record.setActivityId(activityId);
        record.setMoney(money);
        record.setType(LuckySponsorMoneyRecord.RecordType.drawnNotReceive);
        record.setSponsorId(sponsorId);
        record.setRemarks("中奖未领取");
        record.setExtraParams(new Gson().toJson(new LuckySponsorMoneyRecord.DrawnInfo(drawnId)));
        try {
            luckySponsorMoneyRecordManager.addRecord(record);
        } catch (
                ParamsException e) {
            throw new LuckySponsorException(ParamsException.CODE_PARAMS_NOT_ENOUGH, e.getMsg());
        }
    }
}
service-lucky/src/main/java/com/ks/lucky/service/impl/remote/LuckyActivityAwardResultServiceImpl.java
@@ -8,6 +8,7 @@
import com.ks.lucky.pojo.DO.LuckyActivity;
import com.ks.lucky.pojo.DO.LuckyActivityAwardResult;
import com.ks.lucky.pojo.DO.LuckyActivityAwardResultExtra;
import com.ks.lucky.pojo.DTO.ActivityDrawnReceiveParams;
import com.ks.lucky.query.ActivityAwardResultQuery;
import com.ks.lucky.remote.service.LuckyActivityAwardResultService;
import com.ks.lucky.service.impl.AppManager;
@@ -62,7 +63,7 @@
    @Transactional(rollbackFor = Exception.class)
    @Override
    public void recieveAward(Long appId, String uid, Long activityId) throws LuckyActivityException, LuckyActivityAwardException, LuckyActivityAwardResultException {
    public void recieveAward(Long appId, String uid, Long activityId, ActivityDrawnReceiveParams params) throws LuckyActivityException, LuckyActivityAwardException, LuckyActivityAwardResultException {
        //----------验证开始-----------
        LuckyActivity activity = luckyActivityManager.selectByPrimaryKey(activityId);
        if (activity == null) {
@@ -89,7 +90,17 @@
        if (result.getState() != LuckyActivityAwardResult.STATE_NOT_RECIEVE) {
            throw new LuckyActivityAwardException(1, "尚未处于可领取状态");
        }
        LuckyActivityAwardResultExtra extra = luckyActivityAwardResultExtraMapper.selectByAwardResultId(result.getId());
        LuckyActivityAwardResultExtra extraUpdate = new LuckyActivityAwardResultExtra();
        extraUpdate.setId(extra.getId());
        if (params.getAlipayUid() != null) {
            extraUpdate.setAlipyUid(params.getAlipayUid());
            extra.setAlipyUid(params.getAlipayUid());
        }
        luckyActivityAwardResultExtraMapper.updateByPrimaryKeySelective(extraUpdate);
        //----------验证结束-----------
        //发奖
service-lucky/src/main/java/com/ks/lucky/service/impl/remote/LuckyActivityJoinAssistServiceImpl.java
@@ -94,7 +94,7 @@
        luckyActivityJoinAssistMapper.insertSelective(assist);
        LuckyActivityUserWeightRecord weightRecord = LuckyActivityUserWeightRecordFactory.createAssist(activityId, appId, uid, eventKey, weight);
        LuckyActivityUserWeightRecord weightRecord = LuckyActivityUserWeightRecordFactory.createAssist(activityId, appId, targetUid, eventKey, weight);
        try {
            luckyActivityUserWeightRecordManager.addRecord(weightRecord);
        } catch (ParamsException e) {
@@ -102,7 +102,7 @@
        }
        //助力消息
        CMQManager.getInstance().publishActivityAssistMsg(new ActivityAssistMsgDTO(activityId, appId, uid, targetUid, true, assist.getCreateTime()));
        CMQManager.getInstance().publishActivityAssistMsg(new ActivityAssistMsgDTO(activityId, appId, uid, targetUid, true, assist.getCreateTime(),eventKey));
    }
    @Override
@@ -116,18 +116,31 @@
    }
    @Override
    public LuckyActivityJoinAssist getRecord(@NotNull Long joinId, @NotNull Long appId, @NotEmpty String uid, @NotNull ActivityJoinAssistEvent eventKey) {
        ActivityJoinAssistQuery query = new ActivityJoinAssistQuery();
        query.joinId = joinId;
        query.appId = appId;
        query.uid = uid;
        query.eventKey = eventKey;
        query.count = 1;
        List<LuckyActivityJoinAssist> assistList = luckyActivityJoinAssistMapper.list(query);
        if (assistList == null || assistList.size() == 0) {
            return null;
    public LuckyActivityJoinAssist getRecord(Long joinId, Long activityId, @NotNull Long appId, @NotEmpty String uid, @NotNull ActivityJoinAssistEvent eventKey) {
        if (joinId != null) {
            ActivityJoinAssistQuery query = new ActivityJoinAssistQuery();
            query.joinId = joinId;
            query.appId = appId;
            query.uid = uid;
            query.eventKey = eventKey;
            query.count = 1;
            List<LuckyActivityJoinAssist> assistList = luckyActivityJoinAssistMapper.list(query);
            if (assistList == null || assistList.size() == 0) {
                return null;
            }
            return assistList.get(0);
        } else {
            ActivityJoinAssistQuery query = new ActivityJoinAssistQuery();
            query.appId = appId;
            query.uid = uid;
            query.eventKey = eventKey;
            query.count = 1;
            List<LuckyActivityJoinAssist> assistList = luckyActivityJoinAssistMapper.listByActivityId(query, activityId);
            if (assistList == null || assistList.size() == 0) {
                return null;
            }
            return assistList.get(0);
        }
        return assistList.get(0);
    }
    @Override
service-lucky/src/main/java/com/ks/lucky/service/impl/remote/LuckyActivityJoinServiceImpl.java
@@ -16,6 +16,7 @@
import com.ks.lucky.service.impl.LuckyActivityManager;
import com.ks.lucky.service.impl.LuckyActivityOpenInfoManager;
import com.ks.lucky.service.impl.LuckyActivityUserWeightRecordManager;
import com.ks.lucky.util.LoggerUtil;
import com.ks.lucky.util.factory.LuckyActivityUserWeightRecordFactory;
import com.ks.lucky.util.mq.CMQManager;
import org.apache.dubbo.config.annotation.Service;
@@ -56,7 +57,7 @@
    @Transactional(rollbackFor = Exception.class)
    @Validated
    @Override
    public void join(Long activityId, Long appId, String uid, Integer weight, JoinInfo joinInfo,int userType) throws LuckyActivityException, LuckyActivityJoinException {
    public void join(Long activityId, Long appId, String uid, Integer weight, JoinInfo joinInfo, int userType) throws LuckyActivityException, LuckyActivityJoinException {
        luckyActivityManager.canJoin(activityId);
        LuckyActivityJoinRecord record = luckyActivityJoinManager.getRecord(activityId, appId, uid);
        if (record != null) {
@@ -86,6 +87,8 @@
        } catch (ParamsException e) {
            throw new LuckyActivityJoinException(1, "添加记录出错");
        }
        LoggerUtil.activityLogger.info("参加活动成功", activityId, uid);
        CMQManager.getInstance().publishActivityJoinMsg(ActivityJoinMsgDTO.create(record));
    }
@@ -188,11 +191,11 @@
    }
    @Override
    public List<ActivitySimpleUser> getJoinerList(Long activityId,Integer userType, int page, int count) {
    public List<ActivitySimpleUser> getJoinerList(Long activityId, Integer userType, int page, int count) {
        ActivityJoinRecordQuery query = new ActivityJoinRecordQuery();
        query.activityId = activityId;
        query.sortList = Arrays.asList(new String[]{"id asc"});
        query.userType=userType;
        query.userType = userType;
        query.count = count;
        query.start = (page - 1) * count;
@@ -207,10 +210,10 @@
    }
    @Override
    public long countJoiner(Long activityId,Integer userType) {
    public long countJoiner(Long activityId, Integer userType) {
        ActivityJoinRecordQuery query = new ActivityJoinRecordQuery();
        query.activityId = activityId;
        query.userType=userType;
        query.userType = userType;
        return luckyActivityJoinRecordMapper.count(query);
    }
service-lucky/src/main/java/com/ks/lucky/service/impl/remote/LuckyActivityOpenServiceImpl.java
@@ -1,9 +1,6 @@
package com.ks.lucky.service.impl.remote;
import com.ks.lucky.exception.LuckyActivityAwardException;
import com.ks.lucky.exception.LuckyActivityException;
import com.ks.lucky.exception.LuckyActivityOpenException;
import com.ks.lucky.exception.LuckyMQException;
import com.ks.lucky.exception.*;
import com.ks.lucky.mapper.LuckyActivityMapper;
import com.ks.lucky.pojo.DO.LuckyActivity;
import com.ks.lucky.pojo.DO.LuckyActivityAwards;
@@ -51,7 +48,7 @@
     * @param activity
     * @return
     */
    private boolean canOpen(LuckyActivity activity) throws LuckyActivityException {
    private boolean canOpen(LuckyActivity activity) throws LuckyActivityException, LuckyActivityOpenException {
        long now = System.currentTimeMillis();
        if (activity.getState() != LuckyActivity.STATE_FINISH) {
            throw new LuckyActivityException(1, "活动尚未结束");
@@ -59,16 +56,19 @@
        LuckyActivityOpenInfo openInfo = luckyActivityOpenInfoManager.getOpenInfo(activity.getId());
        //未达到最低开奖人数
        if (activity.getCurrentPersonCount() < openInfo.getMinPersonCount()) {
            throw new LuckyActivityException(2, "尚未达到最低开奖人数");
        }
        //到达最低开奖人数就开奖
        if (activity.getPreOpenTime() != null) {
            if (activity.getPreOpenTime().getTime() > now) {
        if (openInfo.getPreOpenTime() != null) {
            if (openInfo.getPreOpenTime().getTime() > now) {
                throw new LuckyActivityException(2, "尚未达到开奖时间");
            }
        } else {
            throw new LuckyActivityException(2, "尚未达到开奖时间");
        }
        //未达到最低开奖人数
        if (activity.getCurrentPersonCount() < openInfo.getMinPersonCount()) {
            throw new LuckyActivityOpenException(LuckyActivityOpenException.CODE_NOT_REACH_OPEN_PERSON_COUNT, "尚未达到最低开奖人数");
        }
        return true;
    }
@@ -86,6 +86,14 @@
        //判断是否达到开奖条件
        try {
            canOpen(activity);
        } catch (LuckyActivityOpenException e) {
            if (e.getCode() == LuckyActivityOpenException.CODE_NOT_REACH_OPEN_PERSON_COUNT) {
                //开奖失败
                luckyActivityManager.setState(activityId, LuckyActivity.STATE_OPEN_FAIL, "人数未达到开奖人数,开奖失败");
                return;
            } else {
                throw new LuckyActivityOpenException(1, "尚未达到开奖条件");
            }
        } catch (LuckyActivityException e) {
            throw new LuckyActivityOpenException(1, "尚未达到开奖条件");
        }
@@ -120,7 +128,7 @@
    @Transactional(rollbackFor = Exception.class)
    @Override
    public void showOpenAward(Long activityId) throws LuckyActivityException {
    public void showOpenAward(Long activityId) throws LuckyActivityException, LuckyActivityOpenInfoException {
        LuckyActivity activity = luckyActivityMapper.selectByPrimaryKeyForUpdate(activityId);
        if (activity.getState() != LuckyActivity.STATE_PRE_OPENED) {
            throw new LuckyActivityException(1, "尚未开奖");
@@ -132,6 +140,13 @@
        update.setState(LuckyActivity.STATE_OPENED);
        update.setStateRemarks("已开奖");
        luckyActivityManager.updateSelectiveByPrimaryKey(update);
        //设置实际开奖时间
        LuckyActivityOpenInfo openInfo = luckyActivityOpenInfoManager.getOpenInfo(activityId);
        LuckyActivityOpenInfo updateOpenInfo = new LuckyActivityOpenInfo();
        updateOpenInfo.setId(openInfo.getId());
        updateOpenInfo.setActualOpenTime(new Date());
        luckyActivityOpenInfoManager.updateOpenInfo(updateOpenInfo, activityId);
        //先设置所有记录未中奖
        luckyActivityJoinManager.setActivityAllJoinerUnDraw(activityId);
@@ -152,7 +167,8 @@
            throw new LuckyActivityException(LuckyActivityException.CODE_NOT_EXIST, "活动不存在");
        }
        //如果未设置开奖时间,且活动正在进行,就判断是否达到最低人数
        if (activity.getPreOpenTime() == null) {
        LuckyActivityOpenInfo openInfo = luckyActivityOpenInfoManager.getOpenInfo(activityId);
        if (openInfo.getPreOpenTime() == null) {
            if (activity.getState() == LuckyActivity.STATE_STARTED) {
                try {
                    luckyActivityManager.finishActivity(activityId, false, "达到最低开奖人数");
service-lucky/src/main/java/com/ks/lucky/service/impl/remote/LuckyActivityServiceImpl.java
@@ -1,5 +1,6 @@
package com.ks.lucky.service.impl.remote;
import com.ks.daylucky.exception.LuckySponsorMoneyRecordException;
import com.ks.lib.common.exception.ParamsException;
import com.ks.lucky.exception.*;
import com.ks.lucky.mapper.LuckyActivityMapper;
@@ -8,6 +9,7 @@
import com.ks.lucky.remote.service.LuckyActivityService;
import com.ks.lucky.service.LuckyActivityImageService;
import com.ks.lucky.service.LuckyMQService;
import com.ks.lucky.service.LuckySponsorMoneyService;
import com.ks.lucky.service.impl.*;
import com.ks.lucky.util.annotation.RedisCache;
import com.ks.lucky.util.annotation.RedisCacheEvict;
@@ -17,6 +19,7 @@
import org.springframework.validation.annotation.Validated;
import javax.annotation.Resource;
import java.math.BigDecimal;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Date;
@@ -49,6 +52,8 @@
    @Resource
    private LuckyActivityImageService luckyActivityImageService;
    @Resource
    private LuckySponsorMoneyService luckySponsorMoneyService;
    private void notNull(LuckyActivity activity) throws LuckyActivityException {
        if (activity == null) {
@@ -216,9 +221,21 @@
    public void publishActivity(Long activityId) throws LuckyActivityException {
        LuckyActivity activity = luckyActivityMapper.selectByPrimaryKeyForUpdate(activityId);
        checkActivityForPublish(activity);
        BigDecimal money = luckyActivityAwardManager.computeAwardsMoney(activityId);
        if (money.compareTo(new BigDecimal(0)) > 0) {
            try {
                luckySponsorMoneyService.publishActivity(activity.getSponsorId(), activityId, money);
            } catch (LuckySponsorException e) {
                throw new LuckyActivityException(e.getCode(), e.getMsg());
            } catch (LuckySponsorMoneyRecordException e) {
                throw new LuckyActivityException(e.getCode(), e.getMsg());
            } catch (ParamsException e) {
                throw new LuckyActivityException(e.getCode(), e.getMsg());
            }
        }
        luckyActivityManager.setState(activityId, LuckyActivity.STATE_NOT_STARTED, "已发布");
        //加入代发消息列表
        try {
@@ -230,6 +247,32 @@
    @Transactional(rollbackFor = Exception.class)
    @Override
    public void publishActivity(Long activityId, Date startTime, Date finishTime) throws LuckyActivityException {
        //设置开始时间与结束时间
        LuckyActivity activity = new LuckyActivity();
        activity.setId(activityId);
        activity.setPreStartTime(startTime);
        activity.setPreFinishTime(finishTime);
        activity.setUpdateTime(new Date());
        luckyActivityManager.updateSelectiveByPrimaryKey(activity);
        //设置开奖时间
        LuckyActivityOpenInfo openInfo = luckyActivityOpenInfoManager.getOpenInfo(activityId);
        if (openInfo != null && openInfo.getPreOpenTime() == null) {
            LuckyActivityOpenInfo updateOpenInfo = new LuckyActivityOpenInfo();
            updateOpenInfo.setId(openInfo.getId());
            //结束后5分钟开奖
            updateOpenInfo.setPreOpenTime(new Date(finishTime.getTime() + 1000 * 60 * 5));
            try {
                luckyActivityOpenInfoManager.updateOpenInfo(updateOpenInfo, activityId);
            } catch (LuckyActivityOpenInfoException e) {
            }
        }
        publishActivity(activityId);
    }
    @Transactional(rollbackFor = Exception.class)
    @Override
    public void startActivity(Long activityId, String remarks) throws LuckyActivityException {
        LuckyActivity activity = luckyActivityMapper.selectByPrimaryKeyForUpdate(activityId);
        if (activity.getState() != LuckyActivity.STATE_NOT_STARTED) {
service-lucky/src/main/java/com/ks/lucky/service/impl/remote/LuckySponsorMoneyRecordServiceImpl.java
New file
@@ -0,0 +1,17 @@
package com.ks.lucky.service.impl;
import com.ks.lucky.mapper.LuckySponsorMoneyRecordMapper;
import com.ks.lucky.remote.service.LuckySponsorMoneyRecordService;
import org.apache.dubbo.config.annotation.Service;
import javax.annotation.Resource;
@Service(version = "1.0.0")
public class LuckySponsorMoneyRecordServiceImpl implements LuckySponsorMoneyRecordService{
  @Resource
  private LuckySponsorMoneyRecordMapper luckySponsorMoneyRecordMapper;
}
service-lucky/src/main/java/com/ks/lucky/util/LoggerUtil.java
New file
@@ -0,0 +1,9 @@
package com.ks.lucky.util;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
public class LoggerUtil {
    public static Logger activityLogger = LoggerFactory.getLogger("activityLogger");
}
service-lucky/src/main/java/com/ks/lucky/util/RedPackageUtil.java
File was renamed from service-lucky/src/test/java/com/ks/lucky/util/RedPackageUtil.java
@@ -1,6 +1,6 @@
package com.ks.lucky.util;
import com.ks.lucky.dto.RedPackage;
import com.ks.lucky.pojo.DTO.RedPackage;
import java.util.Random;
service-lucky/src/main/java/com/ks/lucky/util/mq/CMQManager.java
@@ -9,6 +9,8 @@
import com.ks.lucky.pojo.DTO.mq.ActivityStateChangeMsgDTO;
import com.ks.lucky.utils.LuckyCMQConstant;
import com.qcloud.cmq.Message;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.yeshi.utils.CMQUtil;
import org.yeshi.utils.JsonUtil;
@@ -19,6 +21,7 @@
public class CMQManager {
    private final static Logger logger = LoggerFactory.getLogger(CMQManager.class);
    private static String secretId = "AKIDTlpgJhLjOozvd6QI2XnpfGbgV4NQJk25";
    private static String secretKey = "xhCSUHo55oHUQ6XicFcmfIgspX0EEzWo";
@@ -151,8 +154,8 @@
     */
    public void publishActivityStateChangeMsg(ActivityStateChangeMsgDTO dto) {
        List<String> tagList = new ArrayList<>();
        tagList.add(LuckyCMQConstant.TAG_ACTIVITY_STATE_CHANGE);
        cmqUtil.publishTopicMessage(LuckyCMQConstant.TOPIC_ACTIVITY_STATE_CHANGE, tagList, JsonUtil.getSimpleGson().toJson(dto));
//        tagList.add(LuckyCMQConstant.TAG_ACTIVITY_STATE_CHANGE);
        cmqUtil.publishTopicMessage(LuckyCMQConstant.TOPIC_ACTIVITY_STATE_CHANGE, JsonUtil.getSimpleGson().toJson(dto));
    }
@@ -163,8 +166,9 @@
     */
    public void publishActivityAssistMsg(ActivityAssistMsgDTO dto) {
        List<String> tagList = new ArrayList<>();
        tagList.add(LuckyCMQConstant.TAG_ASSIST);
        cmqUtil.publishTopicMessage(LuckyCMQConstant.TOPIC_ASSIST, tagList, JsonUtil.getSimpleGson().toJson(dto));
//        tagList.add(LuckyCMQConstant.TAG_ASSIST);
        String msgId = cmqUtil.publishTopicMessage(LuckyCMQConstant.TOPIC_ASSIST, JsonUtil.getSimpleGson().toJson(dto));
        logger.info("publishActivityJoinMsg:" + msgId);
    }
    /**
@@ -173,20 +177,23 @@
     * @param dto
     */
    public void publishActivityDrawnMsg(ActivityDrawnMsgDTO dto) {
        List<String> tagList = new ArrayList<>();
        tagList.add(LuckyCMQConstant.TAG_ACTIVITY_DRAWN);
        cmqUtil.publishTopicMessage(LuckyCMQConstant.TOPIC_ACTIVITY_DRAWN, tagList, JsonUtil.getSimpleGson().toJson(dto));
//        List<String> tagList = new ArrayList<>();
//        tagList.add(LuckyCMQConstant.TAG_ACTIVITY_DRAWN);
        String msgId = cmqUtil.publishTopicMessage(LuckyCMQConstant.TOPIC_ACTIVITY_DRAWN, JsonUtil.getSimpleGson().toJson(dto));
        logger.info("publishActivityDrawnMsg:" + msgId);
    }
    /**
     * 活动参与信息
     *
     * @param dto
     */
    public void publishActivityJoinMsg(ActivityJoinMsgDTO dto) {
        List<String> tagList = new ArrayList<>();
        tagList.add(LuckyCMQConstant.TAG_ACTIVITY_JOIN);
        cmqUtil.publishTopicMessage(LuckyCMQConstant.TOPIC_ACTIVITY_JOIN, tagList, JsonUtil.getSimpleGson().toJson(dto));
//        List<String> tagList = new ArrayList<>();
//        tagList.add(LuckyCMQConstant.TAG_ACTIVITY_JOIN);
        String msgId = cmqUtil.publishTopicMessage(LuckyCMQConstant.TOPIC_ACTIVITY_JOIN, JsonUtil.getSimpleGson().toJson(dto));
        logger.info("publishActivityJoinMsg:" + msgId);
    }
}
service-lucky/src/main/java/com/ks/lucky/util/mq/LuckyMQFactory.java
@@ -2,6 +2,7 @@
import com.google.gson.Gson;
import com.ks.lucky.pojo.DO.LuckyActivity;
import com.ks.lucky.pojo.DO.LuckyActivityOpenInfo;
import com.ks.lucky.pojo.DO.LuckyMQ;
import com.ks.lucky.pojo.DTO.ActivityDrwanOutDateMsg;
import com.ks.lucky.pojo.DTO.ActivityMQMsg;
@@ -36,19 +37,15 @@
    }
    public static LuckyMQ createOpenActivity(LuckyActivity activity) {
    public static LuckyMQ createOpenActivity(Long activityId, Date preOpenTime) {
        LuckyMQ mq = new LuckyMQ();
        mq.setState(LuckyMQ.STATE_NOT_SEND);
        mq.setCreateTime(new Date());
        //设置开奖时间
        if (activity.getPreOpenTime() != null) {
            mq.setPreSendTime(activity.getPreOpenTime());
        } else {
            mq.setPreSendTime(activity.getActualFinishTime());
        }
        mq.setQueueContent(new Gson().toJson(new ActivityMQMsg(activity.getId(), ActivityMQMsg.TYPE_EXEC_OPEN, new Date())));
        mq.setPreSendTime(preOpenTime);
        mq.setQueueContent(new Gson().toJson(new ActivityMQMsg(activityId, ActivityMQMsg.TYPE_EXEC_OPEN, new Date())));
        mq.setQueueName(CMQManager.QUEUENAME_LUCKY_ACTIVITY);
        mq.setTaskId("open-activity-" + activity.getId());
        mq.setTaskId("open-activity-" + activityId);
        mq.setTaskName("活动开奖");
        return mq;
    }
service-lucky/src/main/java/com/ks/lucky/util/mq/consumer/ActivityConsumer.java
File was renamed from service-lucky/src/main/java/com/ks/lucky/util/mq/consumer/AcitivtyConsumer.java
@@ -1,12 +1,10 @@
package com.ks.lucky.util.mq.consumer;
import com.ks.lucky.exception.LuckyActivityAwardException;
import com.ks.lucky.exception.LuckyActivityException;
import com.ks.lucky.exception.LuckyActivityOpenException;
import com.ks.lucky.exception.LuckyMQException;
import com.ks.lucky.exception.*;
import com.ks.lucky.pojo.DTO.ActivityMQMsg;
import com.ks.lucky.remote.service.LuckyActivityOpenService;
import com.ks.lucky.service.impl.LuckyActivityManager;
import com.ks.lucky.util.LoggerUtil;
import com.ks.lucky.util.mq.CMQManager;
import com.ks.lucky.utils.mq.CMQConsumeRunner;
import org.yeshi.utils.mq.JobThreadExecutorServiceImpl;
@@ -15,7 +13,7 @@
import java.util.Iterator;
import java.util.Map;
public class AcitivtyConsumer implements CMQConsumeRunner {
public class ActivityConsumer implements CMQConsumeRunner {
    @Resource
    private LuckyActivityManager luckyActivityManager;
@@ -51,11 +49,13 @@
                        if (msg != null) {
                            switch (msg.getType()) {
                                case ActivityMQMsg.TYPE_EXEC_START:
                                    LoggerUtil.activityLogger.info("执行启动活动:"+msg.getActivityId());
                                    //启动活动
                                    try {
                                        luckyActivityManager.startUpActivity(msg.getActivityId());
                                        CMQManager.getInstance().deleteActivityMsg(handler);
                                    } catch (LuckyActivityException e) {
                                        CMQManager.getInstance().deleteActivityMsg(handler);
                                        e.printStackTrace();
                                    } catch (LuckyMQException e) {
                                        e.printStackTrace();
@@ -63,6 +63,7 @@
                                    break;
                                case ActivityMQMsg.TYPE_EXEC_FINSIH:
                                    LoggerUtil.activityLogger.info("执行结束活动:"+msg.getActivityId());
                                    //结束活动
                                    try {
                                        luckyActivityManager.finishActivity(msg.getActivityId(), false, "定时结束");
@@ -77,6 +78,7 @@
                                case ActivityMQMsg.TYPE_REACH_MIN_PERSON:
                                    LoggerUtil.activityLogger.info("参与人数到达最低开奖人数:"+msg.getActivityId());
                                    try {
                                        luckyActivityOpenService.reachMinPerson(msg.getActivityId());
                                        CMQManager.getInstance().deleteActivityMsg(handler);
@@ -86,6 +88,7 @@
                                    break;
                                case ActivityMQMsg.TYPE_REACH_MAX_PERSON:
                                    LoggerUtil.activityLogger.info("参与人数到达最大参与人数:"+msg.getActivityId());
                                    try {
                                        luckyActivityManager.finishActivity(msg.getActivityId(), false, "活动达到最大开奖人数");
                                        CMQManager.getInstance().deleteActivityMsg(handler);
@@ -99,6 +102,7 @@
                                    break;
                                case ActivityMQMsg.TYPE_REACH_OPEN_TIME:
                                    LoggerUtil.activityLogger.info("活动达到开奖时间:"+msg.getActivityId());
                                    try {
                                        luckyActivityManager.finishActivity(msg.getActivityId(), false, "活动达到开奖时间");
                                        CMQManager.getInstance().deleteActivityMsg(handler);
@@ -110,21 +114,23 @@
                                    break;
                                case ActivityMQMsg.TYPE_OPEN_SHOW:
                                    LoggerUtil.activityLogger.info("显示开奖结果:"+msg.getActivityId());
                                    try {
                                        luckyActivityOpenService.showOpenAward(msg.getActivityId());
                                        CMQManager.getInstance().deleteActivityMsg(handler);
                                    } catch (LuckyActivityException e) {
                                        e.printStackTrace();
                                    } catch (LuckyActivityOpenInfoException e) {
                                        e.printStackTrace();
                                    }
                                    break;
                                case ActivityMQMsg.TYPE_EXEC_OPEN:
                                    LoggerUtil.activityLogger.info("执行预开奖:"+msg.getActivityId());
                                    preOpen(msg.getActivityId(), handler);
                                    break;
                            }
                        }
                    }
                }
            }
service-lucky/src/main/java/com/ks/lucky/util/mq/consumer/JobConsumer.java
New file
@@ -0,0 +1,38 @@
package com.ks.lucky.util.mq.consumer;
import com.ks.lucky.job.MQJob;
import com.ks.lucky.utils.mq.CMQConsumeRunner;
import org.yeshi.utils.mq.JobThreadExecutorServiceImpl;
import javax.annotation.Resource;
public class JobConsumer implements CMQConsumeRunner {
    @Resource
    private MQJob mqJob;
    @Override
    public void start() {
        new JobThreadExecutorServiceImpl().run(new Runnable() {
            @Override
            public void run() {
                try {
                    mqJob.sendMQ("");
                } catch (Exception e) {
                    e.printStackTrace();
                }
                try {
                    Thread.sleep(10000);
                } catch (InterruptedException e) {
                    e.printStackTrace();
                }
            }
        });
    }
    @Override
    public void destroy() {
    }
}
service-lucky/src/main/resources/application.yml
@@ -1,5 +1,5 @@
server:
  port: 8084
  port: 8085
  tomcat:
    uri-encoding: UTF-8
service-lucky/src/main/resources/generatorConfig.xml
@@ -87,7 +87,7 @@
        <!--enableDeleteByExample="false" enableSelectByExample="false"-->
        <!--selectByExampleQueryId="false"></table>-->
        <table schema="" domainObjectName="LuckyActivityUserWeightRecord" tableName="lucky_activity_weight_record"   enableCountByExample="false" enableUpdateByExample="false"
        <table schema="" domainObjectName="LuckySponsorMoneyRecord" tableName="lucky_sponsor_money_record"   enableCountByExample="false" enableUpdateByExample="false"
        enableDeleteByExample="false" enableSelectByExample="false"
        selectByExampleQueryId="false"></table>
service-lucky/src/main/resources/logback.xml
@@ -13,7 +13,7 @@
    <property name="log.maxHistory" value="30"/>
    <!--日志存储的根路径 ${catalina.base}指向每个Tomcat目录私有信息的位置,
             就是conf、logs、temp、webapps和work的父目录-->
    <property name="log.filePath" value="E:/logback"/>
    <property name="log.filePath" value="E:/logback/lucky"/>
    <!--日志展示的格式-->
    <property name="log.pattern" value="%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger{50} - %msg%n"/>
@@ -45,6 +45,20 @@
        </filter>
    </appender>
    <!-- 活动日志记录 -->
    <appender name="activityAppender" class="ch.qos.logback.core.rolling.RollingFileAppender">
        <file>${log.filePath}/activity/info.log</file>
        <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
            <fileNamePattern>${log.filePath}/activity/info.log.zip.%d{yyyy-MM-dd}</fileNamePattern>
            <maxHistory>${log.maxHistory}</maxHistory>
        </rollingPolicy>
        <encoder>
            <pattern>${log.pattern}</pattern>
        </encoder>
    </appender>
    <!--name表示为哪一个logger指定层级和输出的方式
       additivity表示叠加祖先的输出方式(默认为true,会叠加),所以com.lxc.o2o以及其子类都会输出在控制台中,因为这个logger继承了root中的appender
       level表示级别大于等于${log.level}的信息才会输出,输出方式为配置的appender,
@@ -56,6 +70,11 @@
           error日志会输出到errorAppender指定的文件中-->
    <!-- 一切logger都会继承自root,root默认的层级level为debug -->
    <logger name="activityLogger" level="INFO" additivity="false">
        <appender-ref ref="activityAppender"></appender-ref>
    </logger>
    <root level="INFO">
        <!--在控制台中输出所在层级对应level(以及大于level)的日志信息,因为这里并没有设置LevelFilter-->
        <appender-ref ref="STDOUT"></appender-ref>
service-lucky/src/main/resources/mapper/LuckyActivityJoinAssistMapper.xml
@@ -24,13 +24,13 @@
        <result column="app_id" jdbcType="BIGINT" property="appId"/>
        <result column="weight" jdbcType="INTEGER" property="weight"/>
        <result column="join_id" jdbcType="BIGINT" property="joinerId"/>
        <association property="eventList" column="join_id"
                     javaType="com.ks.lucky.pojo.DO.ActivityJoinAssistEvent"
                     select="selectEventkeyWithJoinId"></association>
        <collection property="eventList" column="{joinId=join_id,appId=app_id,uid=uid}"
                    javaType="java.util.List"
                    select="selectEventkeyWithJoinId"></collection>
    </resultMap>
    <select id="selectEventkeyWithJoinId" parameterType="java.lang.Long"
            resultType="com.ks.lucky.pojo.DO.LuckyActivityJoinAssist">
    <select id="selectEventkeyWithJoinId" parameterType="java.util.Map"
            resultType="com.ks.lucky.pojo.DO.ActivityJoinAssistEvent">
        SELECT a.`event_key` FROM `lucky_activity_join_assist` a WHERE a.`join_id`=#{joinId} AND app_id=#{appId} AND uid=#{uid}
@@ -44,23 +44,40 @@
    </select>
    <!-- 非模板 -->
    <sql id="listWhere">
        <if test="query.joinId!=null">and join_id=#{query.joinId}</if>
        <if test="query.appId!=null">and app_id=#{query.appId}</if>
        <if test="query.uid!=null">and uid=#{query.uid}</if>
        <if test="query.eventKey!=null">and event_key=#{query.eventKey}</if>
        <if test="query.minCreateTime!=null">and create_time&gt;=#{query.minCreateTime}</if>
        <if test="query.maxCreateTime!=null">and #{query.maxCreateTime}&gt;create_time</if>
        <if test="query.joinId!=null">and a.join_id=#{query.joinId}</if>
        <if test="query.appId!=null">and a.app_id=#{query.appId}</if>
        <if test="query.uid!=null">and a.uid=#{query.uid}</if>
        <if test="query.eventKey!=null">and a.event_key=#{query.eventKey}</if>
        <if test="query.minCreateTime!=null">and a.create_time&gt;=#{query.minCreateTime}</if>
        <if test="query.maxCreateTime!=null">and #{query.maxCreateTime}&gt;a.create_time</if>
    </sql>
    <select id="list" resultMap="BaseResultMap">select
        <include refid="Base_Column_List"/>
        from lucky_activity_join_assist where 1=1
        from lucky_activity_join_assist a where 1=1
        <include refid="listWhere"/>
        <if test="query.sortList!=null">
            <foreach collection="query.sortList" item="item" separator="," open=" order by "> ${item}</foreach>
            <foreach collection="query.sortList" item="item" separator="," open=" order by ">${item}</foreach>
        </if>
        limit #{query.start},#{query.count}
    </select>
    <select id="count" resultType="java.lang.Long">select count(*) from lucky_activity_join_assist where 1=1
    <select id="listByActivityId" resultMap="BaseResultMap">select
        a.*
        from lucky_activity_join_assist a left join lucky_activity_join_record r on r.id=a.join_id where 1=1
        <if test="activityId!=null">
            and r.activity_id=#{activityId}
        </if>
        <include refid="listWhere"/>
        limit #{query.start},#{query.count}
    </select>
    <select id="count" resultType="java.lang.Long">select count(*) from lucky_activity_join_assist a where 1=1
        <include refid="listWhere"/>
    </select>
    <select id="listAssistFriends"
service-lucky/src/main/resources/mapper/LuckyActivityMapper.xml
@@ -17,14 +17,12 @@
        <result column="state_remarks" jdbcType="VARCHAR" property="stateRemarks"/>
        <result column="pre_finish_time" jdbcType="TIMESTAMP" property="preFinishTime"/>
        <result column="actual_finish_time" jdbcType="TIMESTAMP" property="actualFinishTime"/>
        <result column="pre_open_time" jdbcType="TIMESTAMP" property="preOpenTime"/>
        <result column="actual_open_time" jdbcType="TIMESTAMP" property="actualOpenTime"/>
        <result column="create_time" jdbcType="TIMESTAMP" property="createTime"/>
        <result column="update_time" jdbcType="TIMESTAMP" property="updateTime"/>
        <result column="pre_start_time" property="preStartTime" jdbcType="TIMESTAMP"/>
        <result column="actual_start_time" property="actualStartTime" jdbcType="TIMESTAMP"/>
    </resultMap>
    <sql id="Base_Column_List">id, app_id, sponsor_id, `name`, material_poster, material_tag_image, material_, `desc`, max_person_count,current_person_count, state, state_remarks, pre_finish_time,actual_finish_time, pre_open_time,actual_open_time, create_time, update_time,pre_start_time,actual_start_time</sql>
    <sql id="Base_Column_List">id, app_id, sponsor_id, `name`, material_poster, material_tag_image, material_, `desc`, max_person_count,current_person_count, state, state_remarks, pre_finish_time,actual_finish_time, create_time, update_time,pre_start_time,actual_start_time</sql>
    <select id="selectByPrimaryKey" parameterType="java.lang.Long" resultMap="BaseResultMap">select
        <include refid="Base_Column_List"/>
        from lucky_activity where id = #{id,jdbcType=BIGINT}
@@ -36,7 +34,7 @@
    <delete id="deleteByPrimaryKey"
            parameterType="java.lang.Long">delete from lucky_activity where id = #{id,jdbcType=BIGINT}</delete>
    <insert id="insert" useGeneratedKeys="true" keyProperty="id"
            parameterType="com.ks.lucky.pojo.DO.LuckyActivity">insert into lucky_activity (id, app_id, sponsor_id, `name`, material_poster, material_tag_image, material_, `desc`, max_person_count, current_person_count, state, state_remarks, pre_finish_time,actual_finish_time, pre_open_time, actual_open_time,create_time, update_time,id,pre_start_time,actual_start_time) values (#{id,jdbcType=BIGINT}, #{appId,jdbcType=BIGINT}, #{sponsorId,jdbcType=BIGINT}, #{name,jdbcType=VARCHAR}, #{materialPoster,jdbcType=VARCHAR}, #{materialTagImage,jdbcType=VARCHAR}, #{material,jdbcType=VARCHAR}, #{desc,jdbcType=VARCHAR}, #{maxPersonCount,jdbcType=INTEGER}, #{currentPersonCount,jdbcType=INTEGER}, #{state,jdbcType=INTEGER}, #{stateRemarks,jdbcType=VARCHAR}, #{preFinishTime,jdbcType=TIMESTAMP}, #{actualFinishTime,jdbcType=TIMESTAMP}, #{preOpenTime,jdbcType=TIMESTAMP}, #{actualOpenTime,jdbcType=TIMESTAMP}, #{createTime,jdbcType=TIMESTAMP}, #{updateTime,jdbcType=TIMESTAMP},#{id,jdbcType=BIGINT},#{preStartTime,jdbcType=TIMESTAMP},#{actualStartTime,jdbcType=TIMESTAMP})</insert>
            parameterType="com.ks.lucky.pojo.DO.LuckyActivity">insert into lucky_activity (id, app_id, sponsor_id, `name`, material_poster, material_tag_image, material_, `desc`, max_person_count, current_person_count, state, state_remarks, pre_finish_time,actual_finish_time,create_time, update_time,id,pre_start_time,actual_start_time) values (#{id,jdbcType=BIGINT}, #{appId,jdbcType=BIGINT}, #{sponsorId,jdbcType=BIGINT}, #{name,jdbcType=VARCHAR}, #{materialPoster,jdbcType=VARCHAR}, #{materialTagImage,jdbcType=VARCHAR}, #{material,jdbcType=VARCHAR}, #{desc,jdbcType=VARCHAR}, #{maxPersonCount,jdbcType=INTEGER}, #{currentPersonCount,jdbcType=INTEGER}, #{state,jdbcType=INTEGER}, #{stateRemarks,jdbcType=VARCHAR}, #{preFinishTime,jdbcType=TIMESTAMP}, #{actualFinishTime,jdbcType=TIMESTAMP},  #{createTime,jdbcType=TIMESTAMP}, #{updateTime,jdbcType=TIMESTAMP},#{id,jdbcType=BIGINT},#{preStartTime,jdbcType=TIMESTAMP},#{actualStartTime,jdbcType=TIMESTAMP})</insert>
    <insert id="insertSelective" useGeneratedKeys="true" keyProperty="id"
            parameterType="com.ks.lucky.pojo.DO.LuckyActivity">insert into lucky_activity
        <trim prefix="(" suffix=")" suffixOverrides=",">
@@ -54,8 +52,6 @@
            <if test="stateRemarks != null">state_remarks,</if>
            <if test="preFinishTime != null">pre_finish_time,</if>
            <if test="actualFinishTime != null">actual_finish_time,</if>
            <if test="preOpenTime != null">pre_open_time,</if>
            <if test="actualOpenTime != null">actual_open_time,</if>
            <if test="createTime != null">create_time,</if>
            <if test="updateTime != null">update_time,</if>
            <if test="preStartTime != null">pre_start_time,</if>
@@ -76,8 +72,6 @@
            <if test="stateRemarks != null">#{stateRemarks,jdbcType=VARCHAR},</if>
            <if test="preFinishTime != null">#{preFinishTime,jdbcType=TIMESTAMP},</if>
            <if test="actualFinishTime != null">#{actualFinishTime,jdbcType=TIMESTAMP},</if>
            <if test="preOpenTime != null">#{preOpenTime,jdbcType=TIMESTAMP},</if>
            <if test="actualOpenTime != null">#{actualOpenTime,jdbcType=TIMESTAMP},</if>
            <if test="createTime != null">#{createTime,jdbcType=TIMESTAMP},</if>
            <if test="updateTime != null">#{updateTime,jdbcType=TIMESTAMP},</if>
            <if test="preStartTime != null">#{preStartTime,jdbcType=TIMESTAMP},</if>
@@ -99,8 +93,6 @@
            <if test="stateRemarks != null">state_remarks = #{stateRemarks,jdbcType=VARCHAR},</if>
            <if test="preFinishTime != null">pre_finish_time = #{preFinishTime,jdbcType=TIMESTAMP},</if>
            <if test="actualFinishTime != null">actual_finish_time = #{actualFinishTime,jdbcType=TIMESTAMP},</if>
            <if test="preOpenTime != null">pre_open_time = #{preOpenTime,jdbcType=TIMESTAMP},</if>
            <if test="actualOpenTime != null">actual_open_time = #{actualOpenTime,jdbcType=TIMESTAMP},</if>
            <if test="createTime != null">create_time = #{createTime,jdbcType=TIMESTAMP},</if>
            <if test="updateTime != null">update_time = #{updateTime,jdbcType=TIMESTAMP},</if>
            <if test="preStartTime !=null">pre_start_time =#{preStartTime,jdbcType=TIMESTAMP},</if>
@@ -109,7 +101,7 @@
        where id = #{id,jdbcType=BIGINT}
    </update>
    <update id="updateByPrimaryKey" parameterType="com.ks.lucky.pojo.DO.LuckyActivity">
update lucky_activity set app_id = #{appId,jdbcType=BIGINT}, sponsor_id = #{sponsorId,jdbcType=BIGINT}, `name` = #{name,jdbcType=VARCHAR}, material_poster = #{materialPoster,jdbcType=VARCHAR}, material_tag_image = #{materialTagImage,jdbcType=VARCHAR}, material_ = #{material,jdbcType=VARCHAR}, `desc` = #{desc,jdbcType=VARCHAR}, max_person_count = #{maxPersonCount,jdbcType=INTEGER}, current_person_count = #{currentPersonCount,jdbcType=INTEGER}, state = #{state,jdbcType=INTEGER}, state_remarks = #{stateRemarks,jdbcType=VARCHAR}, pre_finish_time = #{preFinishTime,jdbcType=TIMESTAMP}, actual_finish_time = #{actualFinishTime,jdbcType=TIMESTAMP}, pre_open_time = #{preOpenTime,jdbcType=TIMESTAMP}, actual_open_time = #{actualOpenTime,jdbcType=TIMESTAMP}, create_time = #{createTime,jdbcType=TIMESTAMP}, update_time = #{updateTime,jdbcType=TIMESTAMP} ,pre_start_time =#{preStartTime,jdbcType=TIMESTAMP} ,actual_start_time =#{actualStartTime,jdbcType=TIMESTAMP} where id = #{id,jdbcType=BIGINT}</update>
update lucky_activity set app_id = #{appId,jdbcType=BIGINT}, sponsor_id = #{sponsorId,jdbcType=BIGINT}, `name` = #{name,jdbcType=VARCHAR}, material_poster = #{materialPoster,jdbcType=VARCHAR}, material_tag_image = #{materialTagImage,jdbcType=VARCHAR}, material_ = #{material,jdbcType=VARCHAR}, `desc` = #{desc,jdbcType=VARCHAR}, max_person_count = #{maxPersonCount,jdbcType=INTEGER}, current_person_count = #{currentPersonCount,jdbcType=INTEGER}, state = #{state,jdbcType=INTEGER}, state_remarks = #{stateRemarks,jdbcType=VARCHAR}, pre_finish_time = #{preFinishTime,jdbcType=TIMESTAMP}, actual_finish_time = #{actualFinishTime,jdbcType=TIMESTAMP},  create_time = #{createTime,jdbcType=TIMESTAMP}, update_time = #{updateTime,jdbcType=TIMESTAMP} ,pre_start_time =#{preStartTime,jdbcType=TIMESTAMP} ,actual_start_time =#{actualStartTime,jdbcType=TIMESTAMP} where id = #{id,jdbcType=BIGINT}</update>
    <sql id="queryWhere">
        <if test="query.key!=null">and `name` like '${query.key}%'</if>
        <if test="query.appId!=null">and app_id=#{query.appId}</if>
service-lucky/src/main/resources/mapper/LuckyActivityOpenInfoMapper.xml
@@ -1,138 +1,70 @@
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd" >
<mapper namespace="com.ks.lucky.mapper.LuckyActivityOpenInfoMapper" >
  <resultMap id="BaseResultMap" type="com.ks.lucky.pojo.DO.LuckyActivityOpenInfo" >
    <id column="id" property="id" jdbcType="BIGINT" />
    <result column="activity_id" property="activityId" jdbcType="BIGINT" />
    <result column="open_type" property="openType" jdbcType="INTEGER" />
    <result column="min_person_count" property="minPersonCount" jdbcType="INTEGER" />
    <result column="pre_open_time" property="preOpenTime" jdbcType="DATE" />
    <result column="actual_open_time" property="actualOpenTime" jdbcType="DATE" />
    <result column="create_time" property="createTime" jdbcType="DATE" />
    <result column="update_time" property="updateTime" jdbcType="DATE" />
  </resultMap>
  <sql id="Base_Column_List" >
    id, activity_id, open_type, min_person_count, pre_open_time, actual_open_time, create_time,
    update_time
  </sql>
  <select id="selectByPrimaryKey" resultMap="BaseResultMap" parameterType="java.lang.Long" >
    select
    <include refid="Base_Column_List" />
    from lucky_activity_open_info
    where id = #{id,jdbcType=BIGINT}
  </select>
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
  <select id="selectByActivityId" resultMap="BaseResultMap" parameterType="java.lang.Long" >
    select
    <include refid="Base_Column_List" />
    from lucky_activity_open_info
    where activity_id = #{0}
  </select>
  <delete id="deleteByPrimaryKey" parameterType="java.lang.Long" >
    delete from lucky_activity_open_info
    where id = #{id,jdbcType=BIGINT}
  </delete>
  <insert id="insert"  useGeneratedKeys="true" keyProperty="id" parameterType="com.ks.lucky.pojo.DO.LuckyActivityOpenInfo" >
    insert into lucky_activity_open_info (id, activity_id, open_type,
      min_person_count, pre_open_time, actual_open_time,
      create_time, update_time)
    values (#{id,jdbcType=BIGINT}, #{activityId,jdbcType=BIGINT}, #{openType,jdbcType=INTEGER},
      #{minPersonCount,jdbcType=INTEGER}, #{preOpenTime,jdbcType=DATE}, #{actualOpenTime,jdbcType=DATE},
      #{createTime,jdbcType=DATE}, #{updateTime,jdbcType=DATE})
  </insert>
  <insert id="insertSelective"  useGeneratedKeys="true" keyProperty="id" parameterType="com.ks.lucky.pojo.DO.LuckyActivityOpenInfo" >
    insert into lucky_activity_open_info
    <trim prefix="(" suffix=")" suffixOverrides="," >
      <if test="id != null" >
        id,
      </if>
      <if test="activityId != null" >
        activity_id,
      </if>
      <if test="openType != null" >
        open_type,
      </if>
      <if test="minPersonCount != null" >
        min_person_count,
      </if>
      <if test="preOpenTime != null" >
        pre_open_time,
      </if>
      <if test="actualOpenTime != null" >
        actual_open_time,
      </if>
      <if test="createTime != null" >
        create_time,
      </if>
      <if test="updateTime != null" >
        update_time,
      </if>
    </trim>
    <trim prefix="values (" suffix=")" suffixOverrides="," >
      <if test="id != null" >
        #{id,jdbcType=BIGINT},
      </if>
      <if test="activityId != null" >
        #{activityId,jdbcType=BIGINT},
      </if>
      <if test="openType != null" >
        #{openType,jdbcType=INTEGER},
      </if>
      <if test="minPersonCount != null" >
        #{minPersonCount,jdbcType=INTEGER},
      </if>
      <if test="preOpenTime != null" >
        #{preOpenTime,jdbcType=DATE},
      </if>
      <if test="actualOpenTime != null" >
        #{actualOpenTime,jdbcType=DATE},
      </if>
      <if test="createTime != null" >
        #{createTime,jdbcType=DATE},
      </if>
      <if test="updateTime != null" >
        #{updateTime,jdbcType=DATE},
      </if>
    </trim>
  </insert>
  <update id="updateByPrimaryKeySelective" parameterType="com.ks.lucky.pojo.DO.LuckyActivityOpenInfo" >
    update lucky_activity_open_info
    <set >
      <if test="activityId != null" >
        activity_id = #{activityId,jdbcType=BIGINT},
      </if>
      <if test="openType != null" >
        open_type = #{openType,jdbcType=INTEGER},
      </if>
      <if test="minPersonCount != null" >
        min_person_count = #{minPersonCount,jdbcType=INTEGER},
      </if>
      <if test="preOpenTime != null" >
        pre_open_time = #{preOpenTime,jdbcType=DATE},
      </if>
      <if test="actualOpenTime != null" >
        actual_open_time = #{actualOpenTime,jdbcType=DATE},
      </if>
      <if test="createTime != null" >
        create_time = #{createTime,jdbcType=DATE},
      </if>
      <if test="updateTime != null" >
        update_time = #{updateTime,jdbcType=DATE},
      </if>
    </set>
    where id = #{id,jdbcType=BIGINT}
  </update>
  <update id="updateByPrimaryKey" parameterType="com.ks.lucky.pojo.DO.LuckyActivityOpenInfo" >
    update lucky_activity_open_info
    set activity_id = #{activityId,jdbcType=BIGINT},
      open_type = #{openType,jdbcType=INTEGER},
      min_person_count = #{minPersonCount,jdbcType=INTEGER},
      pre_open_time = #{preOpenTime,jdbcType=DATE},
      actual_open_time = #{actualOpenTime,jdbcType=DATE},
      create_time = #{createTime,jdbcType=DATE},
      update_time = #{updateTime,jdbcType=DATE}
    where id = #{id,jdbcType=BIGINT}
  </update>
</mapper>
<mapper namespace="com.ks.lucky.mapper.LuckyActivityOpenInfoMapper">
    <resultMap id="BaseResultMap" type="com.ks.lucky.pojo.DO.LuckyActivityOpenInfo">
        <id column="id" property="id" jdbcType="BIGINT"/>
        <result column="activity_id" property="activityId" jdbcType="BIGINT"/>
        <result column="open_type" property="openType" jdbcType="INTEGER"/>
        <result column="min_person_count" property="minPersonCount" jdbcType="INTEGER"/>
        <result column="pre_open_time" property="preOpenTime" jdbcType="TIMESTAMP"/>
        <result column="actual_open_time" property="actualOpenTime" jdbcType="TIMESTAMP"/>
        <result column="create_time" property="createTime" jdbcType="TIMESTAMP"/>
        <result column="update_time" property="updateTime" jdbcType="TIMESTAMP"/>
        <result column="remarks" property="remarks" jdbcType="VARCHAR"/>
    </resultMap>
    <sql id="Base_Column_List">id, activity_id, open_type, min_person_count, pre_open_time, actual_open_time, create_time, update_time,remarks</sql>
    <select id="selectByPrimaryKey" resultMap="BaseResultMap" parameterType="java.lang.Long">select
        <include refid="Base_Column_List"/>
        from lucky_activity_open_info where id = #{id,jdbcType=BIGINT}
    </select>
    <select id="selectByActivityId" resultMap="BaseResultMap" parameterType="java.lang.Long">select
        <include refid="Base_Column_List"/>
        from lucky_activity_open_info where activity_id = #{0}
    </select>
    <delete id="deleteByPrimaryKey"
            parameterType="java.lang.Long">delete from lucky_activity_open_info where id = #{id,jdbcType=BIGINT}</delete>
    <insert id="insert" useGeneratedKeys="true" keyProperty="id"
            parameterType="com.ks.lucky.pojo.DO.LuckyActivityOpenInfo">insert into lucky_activity_open_info (id, activity_id, open_type, min_person_count, pre_open_time, actual_open_time, create_time, update_time,remarks) values (#{id,jdbcType=BIGINT}, #{activityId,jdbcType=BIGINT}, #{openType,jdbcType=INTEGER}, #{minPersonCount,jdbcType=INTEGER}, #{preOpenTime,jdbcType=TIMESTAMP}, #{actualOpenTime,jdbcType=TIMESTAMP}, #{createTime,jdbcType=TIMESTAMP}, #{updateTime,jdbcType=TIMESTAMP},#{remarks,jdbcType=VARCHAR})</insert>
    <insert id="insertSelective" useGeneratedKeys="true" keyProperty="id"
            parameterType="com.ks.lucky.pojo.DO.LuckyActivityOpenInfo">insert into lucky_activity_open_info
        <trim prefix="(" suffix=")" suffixOverrides=",">
            <if test="id != null">id,</if>
            <if test="activityId != null">activity_id,</if>
            <if test="openType != null">open_type,</if>
            <if test="minPersonCount != null">min_person_count,</if>
            <if test="preOpenTime != null">pre_open_time,</if>
            <if test="actualOpenTime != null">actual_open_time,</if>
            <if test="createTime != null">create_time,</if>
            <if test="updateTime != null">update_time,</if>
            <if test="remarks != null">remarks,</if>
        </trim>
        <trim prefix="values (" suffix=")" suffixOverrides=",">
            <if test="id != null">#{id,jdbcType=BIGINT},</if>
            <if test="activityId != null">#{activityId,jdbcType=BIGINT},</if>
            <if test="openType != null">#{openType,jdbcType=INTEGER},</if>
            <if test="minPersonCount != null">#{minPersonCount,jdbcType=INTEGER},</if>
            <if test="preOpenTime != null">#{preOpenTime,jdbcType=TIMESTAMP},</if>
            <if test="actualOpenTime != null">#{actualOpenTime,jdbcType=TIMESTAMP},</if>
            <if test="createTime != null">#{createTime,jdbcType=TIMESTAMP},</if>
            <if test="updateTime != null">#{updateTime,jdbcType=TIMESTAMP},</if>
            <if test="remarks != null">#{remarks,jdbcType=VARCHAR}</if>
        </trim>
    </insert>
    <update id="updateByPrimaryKeySelective" parameterType="com.ks.lucky.pojo.DO.LuckyActivityOpenInfo">update
        lucky_activity_open_info
        <set>
            <if test="activityId != null">activity_id = #{activityId,jdbcType=BIGINT},</if>
            <if test="openType != null">open_type = #{openType,jdbcType=INTEGER},</if>
            <if test="minPersonCount != null">min_person_count = #{minPersonCount,jdbcType=INTEGER},</if>
            <if test="preOpenTime != null">pre_open_time = #{preOpenTime,jdbcType=TIMESTAMP},</if>
            <if test="actualOpenTime != null">actual_open_time = #{actualOpenTime,jdbcType=TIMESTAMP},</if>
            <if test="createTime != null">create_time = #{createTime,jdbcType=TIMESTAMP},</if>
            <if test="updateTime != null">update_time = #{updateTime,jdbcType=TIMESTAMP},</if>
            <if test="remarks !=null">remarks =#{remarks,jdbcType=VARCHAR},</if>
        </set>
        where id = #{id,jdbcType=BIGINT}
    </update>
    <update id="updateByPrimaryKey"
            parameterType="com.ks.lucky.pojo.DO.LuckyActivityOpenInfo">update lucky_activity_open_info set activity_id = #{activityId,jdbcType=BIGINT}, open_type = #{openType,jdbcType=INTEGER}, min_person_count = #{minPersonCount,jdbcType=INTEGER}, pre_open_time = #{preOpenTime,jdbcType=TIMESTAMP}, actual_open_time = #{actualOpenTime,jdbcType=TIMESTAMP}, create_time = #{createTime,jdbcType=TIMESTAMP}, update_time = #{updateTime,jdbcType=TIMESTAMP} ,remarks =#{remarks,jdbcType=VARCHAR} where id = #{id,jdbcType=BIGINT}</update>
</mapper>
service-lucky/src/main/resources/mapper/LuckySponsorMoneyRecordMapper.xml
New file
@@ -0,0 +1,141 @@
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd" >
<mapper namespace="com.ks.lucky.mapper.LuckySponsorMoneyRecordMapper" >
  <resultMap id="BaseResultMap" type="com.ks.lucky.pojo.DO.LuckySponsorMoneyRecord" >
    <id column="id" property="id" jdbcType="BIGINT" />
    <result column="sponsor_id" property="sponsorId" jdbcType="BIGINT" />
    <result column="type" property="type" jdbcType="VARCHAR" />
    <result column="money" property="money" jdbcType="DECIMAL" />
    <result column="activity_id" property="activityId" jdbcType="BIGINT" />
    <result column="extra_params" property="extraParams" jdbcType="VARCHAR" />
    <result column="remarks" property="remarks" jdbcType="VARCHAR" />
    <result column="create_time" property="createTime" jdbcType="TIMESTAMP" />
    <result column="update_time" property="updateTime" jdbcType="TIMESTAMP" />
  </resultMap>
  <sql id="Base_Column_List" >
    id, sponsor_id, type, money, activity_id, extra_params, remarks, create_time, update_time
  </sql>
  <select id="selectByPrimaryKey" resultMap="BaseResultMap" parameterType="java.lang.Long" >
    select
    <include refid="Base_Column_List" />
    from lucky_sponsor_money_record
    where id = #{id,jdbcType=BIGINT}
  </select>
  <delete id="deleteByPrimaryKey" parameterType="java.lang.Long" >
    delete from lucky_sponsor_money_record
    where id = #{id,jdbcType=BIGINT}
  </delete>
  <insert id="insert" parameterType="com.ks.lucky.pojo.DO.LuckySponsorMoneyRecord" >
    insert into lucky_sponsor_money_record (id, sponsor_id, type,
      money, activity_id, extra_params,
      remarks, create_time, update_time
      )
    values (#{id,jdbcType=BIGINT}, #{sponsorId,jdbcType=BIGINT}, #{type,jdbcType=VARCHAR},
      #{money,jdbcType=DECIMAL}, #{activityId,jdbcType=BIGINT}, #{extraParams,jdbcType=VARCHAR},
      #{remarks,jdbcType=VARCHAR}, #{createTime,jdbcType=TIMESTAMP}, #{updateTime,jdbcType=TIMESTAMP}
      )
  </insert>
  <insert id="insertSelective" parameterType="com.ks.lucky.pojo.DO.LuckySponsorMoneyRecord" >
    insert into lucky_sponsor_money_record
    <trim prefix="(" suffix=")" suffixOverrides="," >
      <if test="id != null" >
        id,
      </if>
      <if test="sponsorId != null" >
        sponsor_id,
      </if>
      <if test="type != null" >
        type,
      </if>
      <if test="money != null" >
        money,
      </if>
      <if test="activityId != null" >
        activity_id,
      </if>
      <if test="extraParams != null" >
        extra_params,
      </if>
      <if test="remarks != null" >
        remarks,
      </if>
      <if test="createTime != null" >
        create_time,
      </if>
      <if test="updateTime != null" >
        update_time,
      </if>
    </trim>
    <trim prefix="values (" suffix=")" suffixOverrides="," >
      <if test="id != null" >
        #{id,jdbcType=BIGINT},
      </if>
      <if test="sponsorId != null" >
        #{sponsorId,jdbcType=BIGINT},
      </if>
      <if test="type != null" >
        #{type,jdbcType=VARCHAR},
      </if>
      <if test="money != null" >
        #{money,jdbcType=DECIMAL},
      </if>
      <if test="activityId != null" >
        #{activityId,jdbcType=BIGINT},
      </if>
      <if test="extraParams != null" >
        #{extraParams,jdbcType=VARCHAR},
      </if>
      <if test="remarks != null" >
        #{remarks,jdbcType=VARCHAR},
      </if>
      <if test="createTime != null" >
        #{createTime,jdbcType=TIMESTAMP},
      </if>
      <if test="updateTime != null" >
        #{updateTime,jdbcType=TIMESTAMP},
      </if>
    </trim>
  </insert>
  <update id="updateByPrimaryKeySelective" parameterType="com.ks.lucky.pojo.DO.LuckySponsorMoneyRecord" >
    update lucky_sponsor_money_record
    <set >
      <if test="sponsorId != null" >
        sponsor_id = #{sponsorId,jdbcType=BIGINT},
      </if>
      <if test="type != null" >
        type = #{type,jdbcType=VARCHAR},
      </if>
      <if test="money != null" >
        money = #{money,jdbcType=DECIMAL},
      </if>
      <if test="activityId != null" >
        activity_id = #{activityId,jdbcType=BIGINT},
      </if>
      <if test="extraParams != null" >
        extra_params = #{extraParams,jdbcType=VARCHAR},
      </if>
      <if test="remarks != null" >
        remarks = #{remarks,jdbcType=VARCHAR},
      </if>
      <if test="createTime != null" >
        create_time = #{createTime,jdbcType=TIMESTAMP},
      </if>
      <if test="updateTime != null" >
        update_time = #{updateTime,jdbcType=TIMESTAMP},
      </if>
    </set>
    where id = #{id,jdbcType=BIGINT}
  </update>
  <update id="updateByPrimaryKey" parameterType="com.ks.lucky.pojo.DO.LuckySponsorMoneyRecord" >
    update lucky_sponsor_money_record
    set sponsor_id = #{sponsorId,jdbcType=BIGINT},
      type = #{type,jdbcType=VARCHAR},
      money = #{money,jdbcType=DECIMAL},
      activity_id = #{activityId,jdbcType=BIGINT},
      extra_params = #{extraParams,jdbcType=VARCHAR},
      remarks = #{remarks,jdbcType=VARCHAR},
      create_time = #{createTime,jdbcType=TIMESTAMP},
      update_time = #{updateTime,jdbcType=TIMESTAMP}
    where id = #{id,jdbcType=BIGINT}
  </update>
</mapper>
service-lucky/src/main/resources/mapper/LuckySponsorsMapper.xml
@@ -28,6 +28,14 @@
    </select>
    <select id="selectByPrimaryKeyForUpdate" parameterType="java.lang.Long" resultMap="BaseResultMap">
        select
        <include refid="Base_Column_List"/>
        from lucky_sponsors
        where id = #{id,jdbcType=BIGINT} for update
    </select>
    <!-- 非模板 -->
    <sql id="listWhere">
        <if test="query.state!=null">
@@ -68,7 +76,7 @@
    <select id="count" resultType="java.lang.Long">
        select
       count(*)
        count(*)
        from lucky_sponsors
        where 1=1
        <include refid="listWhere"></include>
service-lucky/src/test/java/com/ks/MyBatisTest.java
@@ -8,6 +8,6 @@
    @Test
    public void test(){
        ColumnParseUtil.parseColumn(LuckyActivityAwards.class,"D:\\workspace\\DayLucky\\service-lucky\\src\\main\\resources\\mapper\\LuckyActivityAwardsMapper.xml");
        ColumnParseUtil.parseColumn(LuckyActivityOpenInfo.class,"D:\\workspace\\DayLucky\\service-lucky\\src\\main\\resources\\mapper\\LuckyActivityOpenInfoMapper.xml");
    }
}
service-lucky/src/test/java/com/ks/lucky/ActivityTest.java
@@ -280,5 +280,33 @@
        List<LuckyActivityImage> list = luckyActivityImageService.listByActivityId(id, LuckyActivityImage.LuckyImageType.banner);
    }
    @Resource
    private LuckyActivityOpenService luckyActivityOpenService;
    @Test
    public void showOpen() {
        try {
            luckyActivityOpenService.showOpenAward(10025L);
        } catch (LuckyActivityException e) {
            e.printStackTrace();
        } catch (LuckyActivityOpenInfoException e) {
            e.printStackTrace();
        }
    }
    @Test
    public void preOpen(){
        try {
            luckyActivityOpenService.preOpenAward(10029L);
        } catch (LuckyActivityException e) {
            e.printStackTrace();
        } catch (LuckyActivityAwardException e) {
            e.printStackTrace();
        } catch (LuckyActivityOpenException e) {
            e.printStackTrace();
        }
    }
}
service-lucky/src/test/java/com/ks/lucky/DaoTest.java
@@ -1,16 +1,23 @@
package com.ks.lucky;
import com.ks.lucky.dao.LuckySponsorAdDao;
import com.ks.lucky.pojo.DO.LuckySponsorAd;
import org.junit.jupiter.api.Test;
import org.springframework.boot.test.context.SpringBootTest;
import org.yeshi.utils.generater.mongo.MongoDaoUtil;
import javax.annotation.Resource;
@SpringBootTest
public class DaoTest {
    @Resource
    private LuckySponsorAdDao luckySponsorAdDao;
    @Test
    public void test1() {
        System.out.println(MongoDaoUtil.createUpdateSelective(LuckySponsorAd.class));
        LuckySponsorAd ad = luckySponsorAdDao.get("1-1610434373572");
        System.out.println(ad);
    }
service-lucky/src/test/java/com/ks/lucky/GeneralTest.java
New file
@@ -0,0 +1,55 @@
package com.ks.lucky;
import com.ks.lib.common.dao.MongodbBaseDao;
import com.ks.lib.common.exception.BaseException;
import com.ks.lucky.mapper.LuckySponsorMoneyRecordMapper;
import com.ks.lucky.pojo.DO.LuckySponsorMoneyRecord;
import com.ks.lucky.remote.service.LuckySponsorMoneyRecordService;
import org.junit.jupiter.api.Test;
import org.yeshi.utils.generater.SpringComponentGenerater;
import org.yeshi.utils.generater.entity.ExceptionData;
import org.yeshi.utils.generater.entity.MongoDBDaoData;
import org.yeshi.utils.generater.entity.ServiceData;
public class GeneralTest {
    @Test
    public void createDao() {
        try {
//            SpringComponentGenerater.createMongoDao(new MongoDBDaoData.Builder().setBaseDaoClass(MongodbBaseDao.class).setDaoPackageName("com.ks.daylucky.dao").setEntityClass(ActivityDrawnRecieveNotifyInfo.class).create(), "D:\\workspace\\DayLucky\\service-daylucky\\src\\main\\java\\com\\ks\\daylucky\\dao\\");
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
    @Test
    public void createService() {
        try {
            SpringComponentGenerater.createService(new ServiceData.Builder().setPackageName("com.ks.lucky.service").setDaoClass(LuckySponsorMoneyRecordMapper.class).setEntityClass(LuckySponsorMoneyRecord.class).build(), "D:\\workspace\\DayLucky\\facade-lucky\\src\\main\\java\\com\\ks\\lucky\\remote\\service\\");
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
    @Test
    public void createServiceImpl() {
        try {
            SpringComponentGenerater.createServiceImpl(new ServiceData.Builder().setPackageName("com.ks.lucky.service.impl").setServiceClass(LuckySponsorMoneyRecordService.class).setDaoClass(LuckySponsorMoneyRecordMapper.class).setEntityClass(LuckySponsorMoneyRecord.class).build(), "D:\\workspace\\DayLucky\\service-lucky\\src\\main\\java\\com\\ks\\lucky\\service\\impl\\remote\\");
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
    @Test
    public void createException() {
        try {
            SpringComponentGenerater.createException(new ExceptionData.Builder().setPackageName("com.ks.daylucky.exception").setBaseClass(BaseException.class).setEntityClass(LuckySponsorMoneyRecord.class).build(), "D:\\workspace\\DayLucky\\facade-lucky\\src\\main\\java\\com\\ks\\lucky\\exception\\");
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
}
service-lucky/src/test/java/com/ks/lucky/JoinTest.java
@@ -32,13 +32,13 @@
    @Test
    public void join() {
        Long activityId = 1000001L;
        Long activityId = 10037L;
        Long appId = 4L;
        String uid = 4L + "";
        for (int i = 0; i < 100; i++) {
        String uid = 8L + "";
        for (int i = 0; i < 1000; i++) {
            JoinInfo joinInfo = JoinInfo.JoinInfoFactory.createAlipay(UUID.randomUUID().toString());
            try {
                luckyActivityJoinService.join(activityId, appId, (i + 10) + "", null, joinInfo, LuckyActivityJoinRecord.USER_TYPE_REAL);
                luckyActivityJoinService.join(activityId, appId, (i + 8) + "", null, joinInfo, LuckyActivityJoinRecord.USER_TYPE_VIRTUAL);
            } catch (LuckyActivityException e) {
                e.printStackTrace();
            } catch (LuckyActivityJoinException e) {
service-lucky/src/test/java/com/ks/lucky/MapperTest.java
@@ -3,6 +3,7 @@
import com.ks.lucky.mapper.*;
import com.ks.lucky.pojo.DO.LuckyActivity;
import com.ks.lucky.pojo.DO.LuckyActivityAwardResult;
import com.ks.lucky.pojo.DO.LuckySponsorMoneyRecord;
import com.ks.lucky.pojo.DO.LuckySponsors;
import com.ks.lucky.query.*;
import org.junit.jupiter.api.Test;
@@ -49,6 +50,9 @@
    @Resource
    private LuckySponsorsMapper luckySponsorsMapper;
    @Resource
    private LuckySponsorMoneyRecordMapper luckySponsorMoneyRecordMapper;
    @Test
    public void sponsors() {
@@ -58,8 +62,8 @@
        query.count = 100;
        query.key = "测试";
        query.account = "1101184511@qq.com";
        query.minCreateTime=new Date();
        query.maxCreateTime=new Date();
        query.minCreateTime = new Date();
        query.maxCreateTime = new Date();
        luckySponsorsMapper.list(query);
        luckySponsorsMapper.count(query);
@@ -76,8 +80,8 @@
        ActivitySponsorInfoQuery query = new ActivitySponsorInfoQuery();
        query.activityId = 123L;
        query.sponsorId = 1L;
        query.minCreateTime=new Date();
        query.maxCreateTime=new Date();
        query.minCreateTime = new Date();
        query.maxCreateTime = new Date();
        luckyActivitySponsorInfoMapper.list(query);
        luckyActivitySponsorInfoMapper.count(query);
    }
@@ -100,8 +104,8 @@
        query.full = true;
        query.start = 0;
        query.count = 100;
        query.minCreateTime=new Date();
        query.maxCreateTime=new Date();
        query.minCreateTime = new Date();
        query.maxCreateTime = new Date();
        luckyActivityMapper.list(query);
        luckyActivityMapper.count(query);
    }
@@ -114,8 +118,8 @@
        query.appId = 1L;
        query.start = 0;
        query.count = 100;
        query.minCreateTime=new Date();
        query.maxCreateTime=new Date();
        query.minCreateTime = new Date();
        query.maxCreateTime = new Date();
        luckyActivityJoinRecordMapper.list(query);
        luckyActivityJoinRecordMapper.count(query);
@@ -130,8 +134,8 @@
        query.uid = "123";
        query.start = 0;
        query.count = 100;
        query.minCreateTime=new Date();
        query.maxCreateTime=new Date();
        query.minCreateTime = new Date();
        query.maxCreateTime = new Date();
        luckyActivityJoinAssistMapper.list(query);
        luckyActivityJoinAssistMapper.count(query);
    }
@@ -142,8 +146,8 @@
        query.activityId = 1L;
        query.start = 0;
        query.count = 100;
        query.minCreateTime=new Date();
        query.maxCreateTime=new Date();
        query.minCreateTime = new Date();
        query.maxCreateTime = new Date();
        luckyActivityAwardsMapper.list(query);
        luckyActivityAwardsMapper.count(query);
@@ -161,8 +165,8 @@
        query.awardId = 1L;
        query.activityId = 1L;
        query.appId = 4L;
        query.minCreateTime=new Date();
        query.maxCreateTime=new Date();
        query.minCreateTime = new Date();
        query.maxCreateTime = new Date();
        luckyActivityAwardResultMapper.list(query);
        luckyActivityAwardResultMapper.count(query);
@@ -174,5 +178,17 @@
        luckyActivityAwardResultExtraMapper.selectByAwardResultId(1L);
    }
    @Test
    public void addSponsorMoneyRecord() {
//        LuckySponsorMoneyRecord luckySponsorMoneyRecord=new LuckySponsorMoneyRecord();
//        luckySponsorMoneyRecord.setSponsorId(1L);
//        luckySponsorMoneyRecord.setMoney(new BigDecimal(0));
//        luckySponsorMoneyRecord.setActivityId(1L);
//        luckySponsorMoneyRecord.setType(LuckySponsorMoneyRecord.RecordType.publishActivity);
//
//        luckySponsorMoneyRecordMapper.insertSelective(luckySponsorMoneyRecord);
        LuckySponsorMoneyRecord record = luckySponsorMoneyRecordMapper.selectByPrimaryKey(2L);
        System.out.println(record);
    }
}