//package com.ltkj.tduck.service.impl; // //import cn.hutool.core.bean.BeanUtil; //import cn.hutool.core.collection.CollUtil; //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 com.baomidou.mybatisplus.core.toolkit.Wrappers; //import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; //import com.ltkj.common.utils.SecurityUtils; //import com.ltkj.tduck.constant.CommonConstants; //import com.ltkj.tduck.domain.UserFormDataEntity; //import com.ltkj.tduck.domain.UserFormEntity; //import com.ltkj.tduck.domain.UserFormSettingEntity; //import com.ltkj.tduck.enums.FormStatusEnum; //import com.ltkj.tduck.mapper.UserFormSettingMapper; //import com.ltkj.tduck.service.UserFormDataService; //import com.ltkj.tduck.service.UserFormService; //import com.ltkj.tduck.service.UserFormSettingService; //import com.ltkj.tduck.struct.FormSettingSchemaStruct; //import com.ltkj.tduck.utils.Result; //import lombok.RequiredArgsConstructor; //import org.springframework.stereotype.Service; //import org.springframework.transaction.annotation.Transactional; // //import java.time.LocalTime; //import java.util.List; //import java.util.Map; //import java.util.Objects; // ///** // * 表单表单项(UserFormSetting)表服务实现类 // * // * @author smalljop // * @since 2020-11-30 14:00:53 // */ //@Service //@RequiredArgsConstructor //public class UserFormSettingServiceImpl extends ServiceImpl implements UserFormSettingService { // private final UserFormService userFormService; // private final UserFormDataService userFormDataService; // // @Override // public Boolean saveFormSetting(Map params) { // String formKey = params.get("formKey").toString(); // UserFormSettingEntity entity = this.getOne(Wrappers.lambdaQuery().eq(UserFormSettingEntity::getFormKey, formKey)); // if (ObjectUtil.isNull(entity)) { // UserFormSettingEntity setting = new UserFormSettingEntity(); // setting.setFormKey(formKey); // setting.setSettings(params); // return this.save(setting); // } // Map settings = entity.getSettings(); // settings.putAll(params); // entity.setSettings(settings); // return this.updateById(entity); // } // // // @Override // public UserFormSettingEntity getFormSettingByKey(String formKey) { // return this.getOne(Wrappers.lambdaQuery().eq(UserFormSettingEntity::getFormKey, formKey)); // } // // @Override // public FormSettingSchemaStruct getFormSettingSchema(String formKey) { // UserFormSettingEntity settingEntity = getFormSettingByKey(formKey); // if (ObjectUtil.isNull(settingEntity)) { // return null; // } // return BeanUtil.toBean(settingEntity.getSettings(), FormSettingSchemaStruct.class); // } // // // @Override // public Result getUserFormWriteSettingStatus(String formKey, String requestIp, String wxOpenId, Integer type) { // UserFormEntity userFormEntity = userFormService.getByKey(formKey); // boolean checkPublish = Objects.equals(type, CommonConstants.ConstantNumber.ONE) && // (ObjectUtil.isNull(userFormEntity) || userFormEntity.getStatus() != 2); // // 非公开填写 不校验发布状态 // if (checkPublish) { // return Result.success(null, "表单暂时无法填写"); // } // UserFormSettingEntity settingEntity = getFormSettingByKey(formKey); // if (ObjectUtil.isNull(settingEntity)) { // return Result.success(true); // } // FormSettingSchemaStruct settingSchemaStruct = BeanUtil.toBean(settingEntity.getSettings(), FormSettingSchemaStruct.class); // // 填写时间限制 // boolean writeInterviewTime = isWriteInterviewTime(settingSchemaStruct); // if (!writeInterviewTime) { // return Result.success(null, StrUtil.blankToDefault(settingSchemaStruct.getWriteInterviewTimeText(), "不在答题时间范围内,有问题请与表单发布者联系")); // } // // 每个微信答题次数限制 // if (settingSchemaStruct.isWxWriteCountLimitStatus()) { // LambdaQueryWrapper wrapper = Wrappers.lambdaQuery().eq(UserFormDataEntity::getFormKey, formKey).eq(UserFormDataEntity::getWxOpenId, wxOpenId); // String rangeTypeSql = FormSettingSchemaStruct.DateRangeType.getDateSql(settingSchemaStruct.getWxWriteCountLimitDateType()); // wrapper.apply(StrUtil.isNotBlank(rangeTypeSql), rangeTypeSql); // long writeCount = userFormDataService.count(wrapper); // if (writeCount >= settingSchemaStruct.getWxWriteCountLimit()) { // return Result.success(null, StrUtil.blankToDefault(settingSchemaStruct.getWxWriteCountLimitText(), "该微信已经提交过数据,不可重复提交,有问题请与表单发布者联系")); // } // } // // 每个IP答题次数限制 // if (settingSchemaStruct.isIpWriteCountLimitStatus()) { // LambdaQueryWrapper wrapper = Wrappers.lambdaQuery().eq(UserFormDataEntity::getFormKey, formKey).eq(UserFormDataEntity::getSubmitRequestIp, requestIp); // String rangeTypeSql = FormSettingSchemaStruct.DateRangeType.getDateSql(settingSchemaStruct.getIpWriteCountLimitDateType()); // wrapper.apply(StrUtil.isNotBlank(rangeTypeSql), rangeTypeSql); // long writeCount = userFormDataService.count(wrapper); // if (writeCount >= settingSchemaStruct.getIpWriteCountLimit()) { // return Result.success(null, StrUtil.blankToDefault(settingSchemaStruct.getIpWriteCountLimitText(), "该IP已经提交过数据,不可重复提交,有问题请与表单发布者联系")); // } // } // // 总答题次数限制 // if (settingSchemaStruct.isTotalWriteCountLimitStatus()) { // LambdaQueryWrapper wrapper = Wrappers.lambdaQuery().eq(UserFormDataEntity::getFormKey, formKey); // String rangeTypeSql = FormSettingSchemaStruct.DateRangeType.getDateSql(settingSchemaStruct.getTotalWriteCountLimitDateType()); // wrapper.apply(StrUtil.isNotBlank(rangeTypeSql), rangeTypeSql); // long writeCount = userFormDataService.count(wrapper); // if (writeCount >= settingSchemaStruct.getTotalWriteCountLimit()) { // return Result.success(null, StrUtil.blankToDefault(settingSchemaStruct.getTotalWriteCountLimitText(), "该表单收集数据已经达到上限,有问题请与表单发布者联系")); // } // } // // 每个账号答题次数限制 // if (settingSchemaStruct.isAccountWriteCountLimitStatus()) { // LambdaQueryWrapper wrapper = Wrappers.lambdaQuery().eq(UserFormDataEntity::getFormKey, formKey) // .eq(UserFormDataEntity::getCreateBy, SecurityUtils.getUserId()); // String rangeTypeSql = FormSettingSchemaStruct.DateRangeType.getDateSql(settingSchemaStruct.getAccountWriteCountLimitDateType()); // wrapper.apply(StrUtil.isNotBlank(rangeTypeSql), rangeTypeSql); // long writeCount = userFormDataService.count(wrapper); // if (writeCount >= settingSchemaStruct.getAccountWriteCountLimit()) { // return Result.success(null, StrUtil.blankToDefault(settingSchemaStruct.getAccountWriteCountLimitText(), "该账号已经提交过数据,不可重复提交,有问题请与表单发布者联系")); // } // } // return Result.success(true); // } // // /** // * 是否在设置的答题时间内 // * // * @return true 在答题时间内 // */ // private boolean isWriteInterviewTime(FormSettingSchemaStruct settingSchemaStruct) { // // 答题时间限制 // if (settingSchemaStruct.isWriteInterviewTimeStatus()) { // // 是否每天时间范围限制 // if (settingSchemaStruct.isWriteInterviewDayTimeStatus()) { // // 是否在允许访问的天内 // List writeInterviewDateRange = settingSchemaStruct.getWriteInterviewDateRange(); // if (CollUtil.isEmpty(writeInterviewDateRange) || DateUtil.isIn(DateUtil.date(), DateUtil.parse(writeInterviewDateRange.get(0)), DateUtil.parse(writeInterviewDateRange.get(1)))) { // // 是否在允许访问的小时内 // List writeInterviewTimeRange = settingSchemaStruct.getWriteInterviewTimeRange(); // LocalTime now = LocalTime.now(); // boolean isRange = CollUtil.isNotEmpty(writeInterviewDateRange) && now.isBefore(LocalTime.parse(writeInterviewTimeRange.get(0))) || now.isAfter(LocalTime.parse(writeInterviewTimeRange.get(1))); // if (isRange) { // return false; // } // } else { // return false; // } // } else { // // 是否在允许访问的天内 // List writeInterviewDateTimeRange = settingSchemaStruct.getWriteInterviewDateTimeRange(); // if (CollUtil.isNotEmpty(writeInterviewDateTimeRange) && !DateUtil.isIn(DateUtil.date(), DateUtil.parse(writeInterviewDateTimeRange.get(0)), DateUtil.parse(writeInterviewDateTimeRange.get(1)))) { // return false; // } // } // // 是否是每周允许访问的周几 // List writeInterviewTimeWhichDays = settingSchemaStruct.getWriteInterviewTimeWhichDays(); // if (CollUtil.isNotEmpty(writeInterviewTimeWhichDays)) { // // 获取今天是每周的第几天 // int day = DateUtil.dayOfWeek(DateUtil.date()); // return writeInterviewTimeWhichDays.contains(String.valueOf(day)); // } // } // return true; // } // // // /** // * 删除全部的表单数据 // * // * @param formKey 表单key // * @return 删除结果 // */ // @Override // @Transactional(rollbackFor = {Exception.class}) // public Boolean deleteAllSetting(String formKey) { // this.remove(Wrappers.lambdaQuery().eq(UserFormSettingEntity::getFormKey, formKey)); // return true; // } // //}