13 files modified
255 ■■■■■ changed files
src/main/java/cc/mrbird/febs/mall/controller/activity/ApiHappyActivityOrderController.java 3 ●●●●● patch | view | raw | blame | history
src/main/java/cc/mrbird/febs/mall/mapper/HappyActivityMapper.java 2 ●●●●● patch | view | raw | blame | history
src/main/java/cc/mrbird/febs/mall/quartz/ProfitJob.java 17 ●●●● patch | view | raw | blame | history
src/main/java/cc/mrbird/febs/mall/service/HappyActivityService.java 4 ●●●● patch | view | raw | blame | history
src/main/java/cc/mrbird/febs/mall/service/impl/AdminHappyActivityServiceImpl.java 2 ●●●●● patch | view | raw | blame | history
src/main/java/cc/mrbird/febs/mall/service/impl/HappyActivityServiceImpl.java 154 ●●●● patch | view | raw | blame | history
src/main/java/cc/mrbird/febs/mall/vo/ApiActivityInfoVo.java 3 ●●●●● patch | view | raw | blame | history
src/main/java/cc/mrbird/febs/mall/vo/ApiActivityVo.java 9 ●●●●● patch | view | raw | blame | history
src/main/resources/application-prod.yml 33 ●●●● patch | view | raw | blame | history
src/main/resources/application-test.yml 6 ●●●● patch | view | raw | blame | history
src/main/resources/mapper/modules/HappyActivityOptionMapper.xml 15 ●●●● patch | view | raw | blame | history
src/main/resources/templates/febs/views/modules/votesActivity/add.html 5 ●●●● patch | view | raw | blame | history
src/main/resources/templates/febs/views/modules/votesActivity/discountUpdate.html 2 ●●● patch | view | raw | blame | history
src/main/java/cc/mrbird/febs/mall/controller/activity/ApiHappyActivityOrderController.java
@@ -31,7 +31,6 @@
    @ApiOperation(value = "活动报名-新增报名人", notes = "活动报名-新增报名人")
    @PostMapping(value = "/addConnect")
    @Limit(key = "addConnect", period = 60, count = 1, name = "活动报名-新增报名人", prefix = "limit")
    public FebsResponse addConnect(@RequestBody @Validated ApiOperateRegisterUserDto dto) {
        return happyActivityService.addConnect(dto);
@@ -73,7 +72,6 @@
    @ApiOperation(value = "活动报名-报名-创建订单", notes = "活动报名-报名-创建订单")
    @PostMapping(value = "/createOrder")
    @Limit(key = "createOrder", period = 60, count = 1, name = "创建订单", prefix = "limit")
    public FebsResponse createOrder(@RequestBody @Validated ApiCreateOrderDto dto) {
        return happyActivityService.createOrder(dto);
@@ -81,7 +79,6 @@
    @ApiOperation(value = "活动报名-报名-支付订单", notes = "活动报名-报名-支付订单")
    @PostMapping(value = "/payOrder")
    @Limit(key = "payOrder", period = 60, count = 1, name = "支付订单", prefix = "limit")
    public FebsResponse payOrder(@RequestBody @Validated ApiPayOrderDto dto) {
        return happyActivityService.payOrder(dto);
src/main/java/cc/mrbird/febs/mall/mapper/HappyActivityMapper.java
@@ -22,6 +22,8 @@
    void updateHappyActivityOptionLikeCnt(@Param("id")Long sourceOptionId);
    void updateHappyActivitySurplusCnt(@Param("id")Long activityId, @Param("cnt")Integer cnt);
    Page<ApiActivityOptionListVo> getVoteOptionInPage(Page<ApiActivityOptionListVo> page, @Param("record")ApiVoteOptionInPageDto dto);
    Page<HappyActivityOrder> selectOrderInPage(Page<HappyActivityOrder> page, @Param("record")AdminHappyActivityOrderDto dto);
src/main/java/cc/mrbird/febs/mall/quartz/ProfitJob.java
@@ -2,9 +2,10 @@
import cc.mrbird.febs.common.enumerates.AgentLevelEnum;
import cc.mrbird.febs.common.enumerates.MoneyFlowTypeEnum;
import cc.mrbird.febs.common.enumerates.OrderStatusEnum;
import cc.mrbird.febs.common.exception.FebsException;
import cc.mrbird.febs.common.utils.MallUtils;
import cc.mrbird.febs.mall.entity.MallMember;
import cc.mrbird.febs.mall.entity.MallMoneyFlow;
import cc.mrbird.febs.mall.entity.*;
import cc.mrbird.febs.mall.mapper.MallMemberMapper;
import cc.mrbird.febs.mall.mapper.MallMoneyFlowMapper;
import cc.mrbird.febs.mall.service.HappyActivityService;
@@ -15,6 +16,7 @@
import cn.hutool.core.collection.CollUtil;
import cn.hutool.core.date.DateTime;
import cn.hutool.core.date.DateUtil;
import cn.hutool.core.util.ObjectUtil;
import cn.hutool.core.util.StrUtil;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import lombok.extern.slf4j.Slf4j;
@@ -58,4 +60,15 @@
    }
    /**
     * 订单失效
     *          五分钟运行一次
     */
    @Scheduled(cron = "0 0/5 * * * ? ")
    public void overtimeJob() {
        happyActivityService.overtimeJob();
    }
}
src/main/java/cc/mrbird/febs/mall/service/HappyActivityService.java
@@ -53,8 +53,6 @@
    void addLikeCnt(Long sourceOptionId);
    void substructJoinCnt(Long activityId,Integer cnt);
    FebsResponse orderList(ApiActivityOrderListDto dto);
    FebsResponse orderInfo(Long id);
@@ -68,4 +66,6 @@
    FebsResponse checkOrder(ApiCheckOrderDto dto);
    void checkActivityItem(Long orderId);
    void overtimeJob();
}
src/main/java/cc/mrbird/febs/mall/service/impl/AdminHappyActivityServiceImpl.java
@@ -169,6 +169,8 @@
        HappyActivity happyActivity = new HappyActivity();
        BeanUtil.copyProperties(dto, happyActivity);
        happyActivity.setCode(code);
        happyActivity.setExpectCnt(dto.getJoinCnt());
        happyActivity.setSurplusCnt(dto.getJoinCnt());
        this.baseMapper.insert(happyActivity);
        return new FebsResponse().success().message("操作成功");
src/main/java/cc/mrbird/febs/mall/service/impl/HappyActivityServiceImpl.java
@@ -30,7 +30,6 @@
import cn.hutool.crypto.SecureUtil;
import cn.hutool.json.JSONUtil;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import lombok.RequiredArgsConstructor;
@@ -71,55 +70,33 @@
        // 检查分页结果是否包含数据
        if(CollUtil.isNotEmpty(happyActivityPage.getRecords())){
            List<ApiActivityInfoVo> records = happyActivityPage.getRecords();
            // 使用Stream流操作records,获取所有活动的ID
            List<Long> ids = records.stream().map(ApiActivityInfoVo::getId).collect(Collectors.toList());
            // 查询关注点赞转发记录,筛选出关注活动类型且未删除的关注记录,并按ID升序排序,限制结果数量为3
            List<HappyFollow> happyFollows = happyFollowMapper.selectList(
                    new LambdaQueryWrapper<HappyFollow>()
                            .eq(HappyFollow::getSourceType, StateUpDownEnum.SOURCE_TYPE_ACTIVITY.getCode())
                            .in(HappyFollow::getSourceId, ids)
                            .eq(HappyFollow::getDeleteFlag, StateUpDownEnum.DOWN.getCode())
                            .orderByAsc(HappyFollow::getId)
                            .last("limit 3")
            );
            // 检查关注记录是否不为空
            if(CollUtil.isNotEmpty(happyFollows)){
                // 使用Stream流操作关注记录,获取所有成员ID的集合
                Set<Long> memberIds = happyFollows.stream().collect(Collectors.mapping(HappyFollow::getMemberId, Collectors.toSet()));
                // 查询成员信息,获取成员的ID和头像
                List<MallMember> mallMembers = mallMemberMapper.selectList(
                        new LambdaQueryWrapper<MallMember>()
                                .select(MallMember::getId,MallMember::getAvatar)
                                .in(MallMember::getId, memberIds)
            // 遍历活动记录,为每个活动添加成员头像信息
            records.forEach(record -> {
                // 查询关注点赞转发记录,筛选出关注活动类型且未删除的关注记录,并按ID升序排序,限制结果数量为3
                List<HappyFollow> happyFollows = happyFollowMapper.selectList(
                        new LambdaQueryWrapper<HappyFollow>()
                                .eq(HappyFollow::getSourceType, StateUpDownEnum.SOURCE_TYPE_ACTIVITY.getCode())
                                .eq(HappyFollow::getSourceId, record.getId())
                                .eq(HappyFollow::getDeleteFlag, StateUpDownEnum.DOWN.getCode())
                                .groupBy(HappyFollow::getMemberId)
                                .orderByAsc(HappyFollow::getId)
                                .last("limit 3")
                );
                // 检查关注记录是否不为空
                if(CollUtil.isNotEmpty(happyFollows)){
                    // 使用Stream流操作关注记录,获取所有成员ID的集合
                    Set<Long> memberIds = happyFollows.stream().collect(Collectors.mapping(HappyFollow::getMemberId, Collectors.toSet()));
                // 使用Stream流操作成员信息,生成一个以成员ID为键,成员信息为值的Map
                Map<Long, MallMember> memberMap = mallMembers.stream()
                        .collect(Collectors.toMap(MallMember::getId, member -> member));
                // 使用Stream流操作关注记录,生成一个以活动ID为键,成员ID列表为值的Map
                Map<Long, List<Long>> followMap = happyFollows.stream()
                        .collect(Collectors.groupingBy(
                                HappyFollow::getSourceId,
                                Collectors.mapping(HappyFollow::getMemberId, Collectors.toList())
                        ));
                // 遍历活动记录,为每个活动添加成员头像信息
                records.forEach(record -> {
                    List<Long> memberIdsForRecord = followMap.get(record.getId());
                    if (CollUtil.isNotEmpty(memberIdsForRecord)) {
                        List<String> memberAvatars = memberIdsForRecord.stream()
                                .map(memberMap::get)
                                .filter(member -> member != null)
                                .map(MallMember::getAvatar)
                                .collect(Collectors.toList());
                        record.setMemberAvatars(memberAvatars);
                    }
                });
            }
                    // 查询成员信息,获取成员的ID和头像
                    List<MallMember> mallMembers = mallMemberMapper.selectList(
                            new LambdaQueryWrapper<MallMember>()
                                    .select(MallMember::getAvatar)
                                    .in(MallMember::getId, memberIds)
                    );
                    List<String> memberAvatars = mallMembers.stream().map(MallMember::getAvatar).collect(Collectors.toList());
                    record.setMemberAvatars(memberAvatars);
                }
            });
        }
        // 返回成功响应,包含活动分页数据
        return new FebsResponse().success().data(happyActivityPage);
@@ -137,6 +114,25 @@
        );
        if(happyActivity != null){
            BeanUtil.copyProperties(happyActivity,apiActivityVo);
            List<HappyFollow> happyFollows = happyFollowMapper.selectList(
                    new LambdaQueryWrapper<HappyFollow>()
                            .select(HappyFollow::getId, HappyFollow::getType)
                            .eq(HappyFollow::getSourceType, StateUpDownEnum.SOURCE_TYPE_ACTIVITY.getCode())
                            .eq(HappyFollow::getSourceId, happyActivity.getId())
                            .in(HappyFollow::getType, Arrays.asList(StateUpDownEnum.LIKE.getCode(), StateUpDownEnum.SHARE.getCode()))
                            .eq(HappyFollow::getDeleteFlag, StateUpDownEnum.DOWN.getCode())
            );
            if(CollUtil.isNotEmpty(happyFollows)){
                //  使用Stream流操作happyFollows,按照type分类,返回每一个不同type的总数量,并返回一个Map
                Map<Integer, Long> typeCountMap = happyFollows.stream()
                        .collect(Collectors.groupingBy(HappyFollow::getType, Collectors.counting()));
                Long zanCnt = ObjectUtil.defaultIfNull(typeCountMap.get(StateUpDownEnum.LIKE.getCode()), 0L);
                apiActivityVo.setZanCnt(Math.toIntExact(zanCnt));
                Long sendCnt = ObjectUtil.defaultIfNull(typeCountMap.get(StateUpDownEnum.SHARE.getCode()), 0L);
                apiActivityVo.setSendCnt(Math.toIntExact(sendCnt));
            }
        }
        return new FebsResponse().success().data(apiActivityVo);
    }
@@ -221,16 +217,18 @@
                    throw new FebsException("活动不存在");
                }
                if (StateUpDownEnum.ACTIVITY_TYPE_VOTE.getCode() == happyActivity.getType()) {
                    Long sourceOptionId = dto.getSourceOptionId();
                    if (sourceOptionId == null) {
                        throw new FebsException("选项ID不能为空");
                    }
                    this.operateDoVote(memberId, StateUpDownEnum.SOURCE_TYPE_ACTIVITY.getCode(), sourceId, sourceOptionId, type);
                    this.addLikeCnt(sourceOptionId);
                } else {
                    this.operateDo(memberId, StateUpDownEnum.SOURCE_TYPE_ACTIVITY.getCode(), sourceId, type);
                }
                this.operateDo(memberId, StateUpDownEnum.SOURCE_TYPE_ACTIVITY.getCode(), sourceId, type);
//                if (StateUpDownEnum.ACTIVITY_TYPE_VOTE.getCode() == happyActivity.getType()) {
//                    Long sourceOptionId = dto.getSourceOptionId();
//                    if (sourceOptionId == null) {
//                        throw new FebsException("选项ID不能为空");
//                    }
//                    this.operateDoVote(memberId, StateUpDownEnum.SOURCE_TYPE_ACTIVITY.getCode(), sourceId, sourceOptionId, type);
//                    this.addLikeCnt(sourceOptionId);
//                } else {
//                    this.operateDo(memberId, StateUpDownEnum.SOURCE_TYPE_ACTIVITY.getCode(), sourceId, type);
//                }
            } else if (StateUpDownEnum.SOURCE_TYPE_SOCIAL_CIRCLE.getCode() == sourceType) {
                // 朋友圈点赞或关注
                this.operateDo(memberId, StateUpDownEnum.SOURCE_TYPE_SOCIAL_CIRCLE.getCode(), sourceId, type);
@@ -491,9 +489,9 @@
            throw new FebsException("活动已结束");
        }
        Integer joinCnt = happyActivity.getJoinCnt();
        if(joinCnt < numCnt){
            throw new FebsException("报名额度剩下"+joinCnt+",请减少报名人数");
        Integer surplusCnt = happyActivity.getSurplusCnt();
        if(surplusCnt < numCnt){
            throw new FebsException("报名额度剩下"+surplusCnt+",请减少报名人数");
        }
        //支付总金额
        BigDecimal amount = happyActivity.getPayAmount().multiply(new BigDecimal(dto.getNumCnt())).setScale(2, RoundingMode.DOWN);
@@ -526,7 +524,8 @@
            happyActivityOrderItemMapper.insert(happyActivityOrderItem);
        }
        this.substructJoinCnt(activityId, happyActivityOrder.getNumCnt());
        this.baseMapper.updateHappyActivitySurplusCnt(activityId, happyActivityOrder.getNumCnt() * (-1));
        HashMap<String, Object> stringObjectHashMap = new HashMap<>();
        stringObjectHashMap.put("orderId",happyActivityOrder.getId());
        stringObjectHashMap.put("amount",amount);
@@ -613,17 +612,6 @@
        happyActivityOption.setLikesCnt(happyActivityOption.getLikesCnt() + 1);
        happyActivityOptionMapper.updateById(happyActivityOption);
    }
    @Override
    public void substructJoinCnt(Long activityId, Integer numCnt) {
        HappyActivity happyActivity = this.baseMapper.selectById(activityId);
        if(ObjectUtil.isNotEmpty(happyActivity)){
            happyActivity.setJoinCnt(happyActivity.getJoinCnt() -numCnt);
            this.baseMapper.updateById(happyActivity);
        }
    }
    // 处理无需支付订单
    private void processNoPayOrder(HappyActivityOrder order, Long orderId) {
@@ -920,6 +908,26 @@
    }
    @Override
    public void overtimeJob() {
        List<HappyActivityOrder> happyActivityOrders = happyActivityOrderMapper.selectList(
                new LambdaQueryWrapper<HappyActivityOrder>()
                        .eq(HappyActivityOrder::getState, StateUpDownEnum.ORDER_STATE_WAIT_PAY.getCode())
                        .lt(HappyActivityOrder::getCreatedTime, DateUtil.offsetMinute(new Date(), -10))
        );
        if(CollUtil.isNotEmpty(happyActivityOrders)){
            happyActivityOrders.forEach(happyActivityOrder -> {
                Long activityId = happyActivityOrder.getActivityId();
                Integer numCnt = happyActivityOrder.getNumCnt();
                this.baseMapper.updateHappyActivitySurplusCnt(activityId,numCnt);
                happyActivityOrder.setDeleteFlag(StateUpDownEnum.UP.getCode());
                happyActivityOrderMapper.updateById(happyActivityOrder);
            });
        }
    }
    @Override
    public FebsResponse voteActivityHot(Long id) {
        ApiVoteActivityHotVo apiVoteActivityHotVo = new ApiVoteActivityHotVo();
src/main/java/cc/mrbird/febs/mall/vo/ApiActivityInfoVo.java
@@ -44,6 +44,9 @@
    @ApiModelProperty(value = "参与人数")
    private Integer joinCnt;
    @ApiModelProperty(value = "热度")
    private Integer hotCnt;
    @ApiModelProperty(value = "参与头像")
    private List<String> memberAvatars;
src/main/java/cc/mrbird/febs/mall/vo/ApiActivityVo.java
@@ -14,6 +14,15 @@
    @ApiModelProperty(value = "ID")
    private Long id;
    @ApiModelProperty(value = "点赞数")
    private Integer zanCnt;
//    @ApiModelProperty(value = "关注数")
//    private Integer followCnt;
    @ApiModelProperty(value = "转发数")
    private Integer sendCnt;
    @ApiModelProperty(value = "编码")
    private String code;
src/main/resources/application-prod.yml
@@ -15,20 +15,20 @@
      datasource:
        # 数据源-1,名称为 base
        base:
          username: blnka
          password: blnka!@#123
          username: happy_community_365
          password: happy_community_365!@#
          driver-class-name: com.mysql.cj.jdbc.Driver
          url: jdbc:mysql://127.0.0.1:3306/db_blnka?useUnicode=true&characterEncoding=UTF-8&useJDBCCompliantTimezoneShift=true&useLegacyDatetimeCode=false&serverTimezone=GMT%2b8
          url: jdbc:mysql://127.0.0.1:3306/happy_community_365?useUnicode=true&characterEncoding=UTF-8&useJDBCCompliantTimezoneShift=true&useLegacyDatetimeCode=false&serverTimezone=GMT%2b8
  redis:
    # Redis数据库索引(默认为 0)
    database: 1
    database: 2
    # Redis服务器地址
    host: 127.0.0.1
    # Redis服务器连接端口
    port: 6279
    port: 6379
    # Redis 密码
    password: blnka!@#123
    password: 1234!@#$!QAZ
    lettuce:
      pool:
        # 连接池中的最小空闲连接
@@ -44,8 +44,8 @@
  rabbitmq:
    host: 127.0.0.1
    port: 5672
    username: blnka
    password: blnka123
    username: xc_rabbit
    password: xuncong123
    publisher-confirm-type: correlated
pay:
@@ -61,15 +61,16 @@
xcx:
  wechar_login_url: https://api.weixin.qq.com/sns/jscode2session?appid=%s&secret=%s&js_code=%s&grant_type=authorization_code
  xcx_appid: wxad2fdb2fcad10fb2
  xcx_secret: 9bb58d655bff419feec3a6d948ca8b8d
  xcx_appid: wxe8454293f5c4c143
  xcx_secret: 33c3ad513344cf6c16904e5d528b70ea
  debug: false
  wecharPaynotifyUrl: http://api.blnka.cn/api/xcxPay/wxpayCallback
  wecharRechargePaynotifyUrl: http://api.blnka.cn/api/xcxPay/rechargeCallBack
  certLocalPath: /home/blnkaCert/apiclient_cert.p12
  wecharpayMchid: 1658958205
  wecharpaySecret: daL341aN5orDt13puXadsAf2rpuXdq4r
  wecharpaySecretV3: daL341aN5orDt13puXadsAf2rpuX12v3
  wecharPaynotifyUrl: http://happy.csxuncong.com/api/xcxPay/wxpayCallback
  wecharActivityPaynotifyUrl: http://happy.csxuncong.com/api/xcxPay/activityOrderCallback
  wecharRechargePaynotifyUrl: http://happy.csxuncong.com/api/xcxPay/rechargeCallBack
  certLocalPath: /home/cert/apiclient_cert.p12
  wecharpayMchid: 1714199495
  wecharpaySecret: kKUSYkP73JiCAzDGu2ZfecJNfhvh3sSc
  wecharpaySecretV3: 1234567hnggcmyxgs731907666310878
  gaodeKey: 95ede7157929f5f6b6c758971be924b1
  serviceName: yiyuanshucai
src/main/resources/application-test.yml
@@ -73,9 +73,9 @@
  xcx_appid: wxe8454293f5c4c143
  xcx_secret: 33c3ad513344cf6c16904e5d528b70ea
  debug: true
  wecharPaynotifyUrl: http://blnka.csxuncong.com/api/xcxPay/wxpayCallback
  wecharActivityPaynotifyUrl: http://blnka.csxuncong.com/api/xcxPay/activityOrderCallback
  wecharRechargePaynotifyUrl: http://blnka.csxuncong.com/api/xcxPay/rechargeCallBack
  wecharPaynotifyUrl: http://happy.csxuncong.com/api/xcxPay/wxpayCallback
  wecharActivityPaynotifyUrl: http://happy.csxuncong.com/api/xcxPay/activityOrderCallback
  wecharRechargePaynotifyUrl: http://happy.csxuncong.com/api/xcxPay/rechargeCallBack
  certLocalPath: /home/cert/apiclient_cert.p12
  wecharpayMchid: 1714199495
  wecharpaySecret: kKUSYkP73JiCAzDGu2ZfecJNfhvh3sSc
src/main/resources/mapper/modules/HappyActivityOptionMapper.xml
@@ -11,7 +11,7 @@
            a.type,
            a.name,
            a.state,
            a.join_cnt,
            (select count(z.id) from happy_follow z where z.source_id = a.id) as join_cnt,
            a.start_time,
            a.end_time
        from happy_activity a
@@ -30,7 +30,13 @@
                </if>
            </if>
        </where>
        order by a.order_cnt asc, a.id desc
        <if test="record.hotState != null">
            order by (select count(y.id) from happy_follow y where y.source_id = a.id and type in (2,3)) desc,a.order_cnt asc
        </if>
        <if test="record.hotState == null">
            order by a.order_cnt asc,a.id desc
        </if>
    </select>
    <select id="getVoteRecordInPage" resultType="cc.mrbird.febs.mall.vo.ApiVoteRecordInPageVo">
@@ -49,6 +55,11 @@
        update happy_activity_option set likes_cnt = likes_cnt + 1 where id = #{id}
    </update>
    <update id="updateHappyActivitySurplusCnt" >
        update happy_activity set surplus_cnt = likes_cnt + #{cnt} where id = #{id}
    </update>
    <select id="getVoteOptionInPage" resultType="cc.mrbird.febs.mall.vo.ApiActivityOptionListVo">
        select
            a.id as id,
src/main/resources/templates/febs/views/modules/votesActivity/add.html
@@ -49,6 +49,7 @@
                                        <label class="layui-form-label febs-form-item-require">推荐首页:</label>
                                        <div class="layui-input-block">
                                            <select name="hotState" class="activity-type">
                                                <option value="">请选择</option>
                                                <option value="0">不推荐</option>
                                                <option value="1">推荐</option>
                                            </select>
@@ -83,7 +84,8 @@
                                    <div class="layui-col-lg6">
                                        <label class="layui-form-label febs-form-item-require">自主报名:</label>
                                        <div class="layui-input-block">
                                            <select name="hotState" class="activity-type">
                                            <select name="addState" class="activity-type">
                                                <option value="">请选择</option>
                                                <option value="0">不允许</option>
                                                <option value="1">允许</option>
                                            </select>
@@ -115,6 +117,7 @@
                                        <label class="layui-form-label febs-form-item-require">门票售卖:</label>
                                        <div class="layui-input-block">
                                            <select name="payState" class="activity-type">
                                                <option value="">请选择</option>
                                                <option value="0">关闭</option>
                                                <option value="1">开启</option>
                                            </select>
src/main/resources/templates/febs/views/modules/votesActivity/discountUpdate.html
@@ -389,7 +389,7 @@
        form.on('submit(activity-discount-update-form-submit)', function (data) {
            data.field.groupId = activityGroup.getValue('valueStr');
            data.field.introduce = editor.txt.html();
            data.field.textRemark = editor.txt.html();
            $.ajax({
                'url':ctx + 'admin/happyActivity/activityUpdate',
                'type':'post',