zhaowenxuan
2025-02-06 06c12d2b42c343798d9476be66031b48967df639
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
package com.ltkj.tduck.service.impl;
 
import cn.hutool.core.collection.CollUtil;
import cn.hutool.core.util.ObjectUtil;
import com.baomidou.mybatisplus.core.toolkit.Wrappers;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.ltkj.tduck.domain.UserFormEntity;
import com.ltkj.tduck.domain.UserFormItemEntity;
import com.ltkj.tduck.enums.FormItemTypeEnum;
import com.ltkj.tduck.mapper.UserFormItemMapper;
import com.ltkj.tduck.service.UserFormItemService;
import com.ltkj.tduck.service.UserFormService;
import com.ltkj.tduck.struct.CheckboxSchemaStruct;
import com.ltkj.tduck.struct.InputResultStruct;
import com.ltkj.tduck.utils.FormDataUtils;
import com.ltkj.tduck.vo.FormFieldVO;
import lombok.RequiredArgsConstructor;
import org.springframework.stereotype.Service;
 
import java.util.Comparator;
import java.util.List;
import java.util.stream.Collectors;
 
/**
 * 表单表单项(FormItem)表服务实现类
 *
 * @author smalljop
 * @since 2020-11-19 10:49:18
 */
@Service
@RequiredArgsConstructor
public class UserFormItemServiceImpl extends ServiceImpl<UserFormItemMapper, UserFormItemEntity> implements UserFormItemService {
 
 
    private final UserFormService userFormService;
 
//    @Override
//    public List<UserFormItemEntity> listByFormKey(String key) {
//        List<UserFormItemEntity> list = this.list(Wrappers.<UserFormItemEntity>lambdaQuery().eq(UserFormItemEntity::getFormKey, key));
//        list.sort(Comparator.comparing(UserFormItemEntity::getSort));
//        return list;
//    }
//
    @Override
    public List<FormFieldVO> listFormFields(String formKey) {
        List<UserFormItemEntity> itemEntityList = this.list(Wrappers.<UserFormItemEntity>lambdaQuery().eq(UserFormItemEntity::getFormKey, formKey).eq(UserFormItemEntity::getDisplayType, 0));
        itemEntityList.sort(Comparator.comparing(UserFormItemEntity::getSort));
        // FormFieldVO 处理了部份组价默认显示label字段
        List<FormFieldVO> fields = itemEntityList.stream().map(FormFieldVO::new).collect(Collectors.toList());
        return fields;
    }
 
    @Override
    public List<FormFieldVO> listAllFormFields(String formKey) {
        // 查询表单类型
        UserFormEntity userFormEntity = userFormService.getByKey(formKey);
        List<FormFieldVO> fields = this.listFormFields(formKey);
        FormDataUtils.addFormDefaultDataField(userFormEntity, fields);
        return fields;
    }
 
    @Override
    public Long getLastItemSort(String formKey) {
        List<UserFormItemEntity> formItemEntityPage = baseMapper.selectList(
                Wrappers.<UserFormItemEntity>lambdaQuery().eq(UserFormItemEntity::getFormKey, formKey)
                        .orderByDesc(UserFormItemEntity::getSort));
 
        // 去取第一个元素
        UserFormItemEntity first = CollUtil.getFirst(formItemEntityPage);
        return ObjectUtil.isNull(first) ? 0 : first.getSort();
    }
 
    @Override
    public Boolean isSpecialTypeItem(UserFormItemEntity userFormItemEntity) {
        // 随机编号
        if (userFormItemEntity.getType() == FormItemTypeEnum.RANDOM_NUMBER) {
            return true;
        }
        // 不允许重复
        if (userFormItemEntity.getType() == FormItemTypeEnum.INPUT) {
            InputResultStruct builder = InputResultStruct.builder(userFormItemEntity.getScheme());
            return builder.isNotRepeat();
        }
        // 商品
        if (userFormItemEntity.getType() == FormItemTypeEnum.GOODS_SELECT) {
            return true;
        }
        // 预约时间
        if (userFormItemEntity.getType() == FormItemTypeEnum.RESERVE_DAY || userFormItemEntity.getType() == FormItemTypeEnum.RESERVE_TIME_RANGE) {
            return true;
        }
        // 投票
        if (userFormItemEntity.getType() == FormItemTypeEnum.CHECKBOX || userFormItemEntity.getType() == FormItemTypeEnum.RADIO || userFormItemEntity.getType() == FormItemTypeEnum.IMAGE_SELECT) {
            CheckboxSchemaStruct builder = CheckboxSchemaStruct.builder(userFormItemEntity.getScheme());
            // 单选多选带名额
            if (builder.getConfig().getOptions().stream().anyMatch(item -> ObjectUtil.isNotNull(item.getQuotaSetting()))) {
                return true;
            }
            return builder.getConfig().isShowVoteResult();
        }
        return false;
    }
 
 
}