From 60fe0863642af7d18b1a168875c8a6598d706512 Mon Sep 17 00:00:00 2001 From: V26772074 Date: Fri, 30 Aug 2024 17:03:13 +0800 Subject: [PATCH] update --- jnpf-tendering-biz/pom.xml | 5 + .../main/java/jnpf/mapper/ExpertMapper.java | 22 ++ .../jnpf/mapper/LotteryProjectMapper.java | 27 +++ .../java/jnpf/mapper/LotteryReviewMapper.java | 16 ++ .../main/java/jnpf/service/ExpertService.java | 25 ++ .../jnpf/service/ILotteryProjectService.java | 27 +++ .../jnpf/service/ILotteryReviewService.java | 16 ++ .../BiddingProjectSubscribeServiceImpl.java | 68 +++++- .../jnpf/service/impl/ExpertServiceImpl.java | 225 ++++++++++++++++++ .../impl/LotteryProjectServiceImpl.java | 134 +++++++++++ .../impl/LotteryReviewServiceImpl.java | 20 ++ .../impl/RedisSerialNumberGenerator.java | 27 +++ .../mapper/BiddingProjectSubscribeMapper.xml | 4 +- .../main/resources/mapper/ExpertMapper.xml | 59 +++++ .../resources/mapper/LotteryProjectMapper.xml | 74 ++++++ .../resources/mapper/LotteryReviewMapper.xml | 5 + .../BiddingProjectSubscribeController.java | 5 + .../jnpf/controller/ExpertController.java | 84 +++++++ .../controller/LotteryProjectController.java | 68 ++++++ .../entity/BiddingProjectSubscribeEntity.java | 14 ++ .../src/main/java/jnpf/entity/Expert.java | 121 ++++++++++ .../main/java/jnpf/entity/LotteryProject.java | 116 +++++++++ .../main/java/jnpf/entity/LotteryReview.java | 58 +++++ .../BiddingProjectSubscribeForm.java | 10 + .../main/java/jnpf/model/dto/ExpertDto.java | 114 +++++++++ .../jnpf/model/dto/LotteryProjectDto.java | 176 ++++++++++++++ .../src/main/resources/application.yml | 5 + pom.xml | 11 + 28 files changed, 1530 insertions(+), 6 deletions(-) create mode 100644 jnpf-tendering-biz/src/main/java/jnpf/mapper/ExpertMapper.java create mode 100644 jnpf-tendering-biz/src/main/java/jnpf/mapper/LotteryProjectMapper.java create mode 100644 jnpf-tendering-biz/src/main/java/jnpf/mapper/LotteryReviewMapper.java create mode 100644 jnpf-tendering-biz/src/main/java/jnpf/service/ExpertService.java create mode 100644 jnpf-tendering-biz/src/main/java/jnpf/service/ILotteryProjectService.java create mode 100644 jnpf-tendering-biz/src/main/java/jnpf/service/ILotteryReviewService.java create mode 100644 jnpf-tendering-biz/src/main/java/jnpf/service/impl/ExpertServiceImpl.java create mode 100644 jnpf-tendering-biz/src/main/java/jnpf/service/impl/LotteryProjectServiceImpl.java create mode 100644 jnpf-tendering-biz/src/main/java/jnpf/service/impl/LotteryReviewServiceImpl.java create mode 100644 jnpf-tendering-biz/src/main/java/jnpf/service/impl/RedisSerialNumberGenerator.java create mode 100644 jnpf-tendering-biz/src/main/resources/mapper/ExpertMapper.xml create mode 100644 jnpf-tendering-biz/src/main/resources/mapper/LotteryProjectMapper.xml create mode 100644 jnpf-tendering-biz/src/main/resources/mapper/LotteryReviewMapper.xml create mode 100644 jnpf-tendering-controller/src/main/java/jnpf/controller/ExpertController.java create mode 100644 jnpf-tendering-controller/src/main/java/jnpf/controller/LotteryProjectController.java create mode 100644 jnpf-tendering-entity/src/main/java/jnpf/entity/Expert.java create mode 100644 jnpf-tendering-entity/src/main/java/jnpf/entity/LotteryProject.java create mode 100644 jnpf-tendering-entity/src/main/java/jnpf/entity/LotteryReview.java create mode 100644 jnpf-tendering-entity/src/main/java/jnpf/model/dto/ExpertDto.java create mode 100644 jnpf-tendering-entity/src/main/java/jnpf/model/dto/LotteryProjectDto.java diff --git a/jnpf-tendering-biz/pom.xml b/jnpf-tendering-biz/pom.xml index bd6861c..b17e207 100644 --- a/jnpf-tendering-biz/pom.xml +++ b/jnpf-tendering-biz/pom.xml @@ -28,6 +28,11 @@ jnpf-generater-base ${project.version} + + com.jnpf + jnpf-permission-biz + ${project.version} + diff --git a/jnpf-tendering-biz/src/main/java/jnpf/mapper/ExpertMapper.java b/jnpf-tendering-biz/src/main/java/jnpf/mapper/ExpertMapper.java new file mode 100644 index 0000000..e3fbf77 --- /dev/null +++ b/jnpf-tendering-biz/src/main/java/jnpf/mapper/ExpertMapper.java @@ -0,0 +1,22 @@ +package jnpf.mapper; + +import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import jnpf.entity.Expert; +import jnpf.model.dto.ExpertDto; +import org.apache.ibatis.annotations.Param; + +/** + *

+ * Mapper 接口 + *

+ * + * @author admin + * @since 2024-08-26 + */ +public interface ExpertMapper extends BaseMapper { + + Page queryList(@Param("page") Page objectPage,@Param("param") ExpertDto.ListParam param); + + ExpertDto.ListResponse queryInfo(@Param("id") String id); +} diff --git a/jnpf-tendering-biz/src/main/java/jnpf/mapper/LotteryProjectMapper.java b/jnpf-tendering-biz/src/main/java/jnpf/mapper/LotteryProjectMapper.java new file mode 100644 index 0000000..3a8c2b6 --- /dev/null +++ b/jnpf-tendering-biz/src/main/java/jnpf/mapper/LotteryProjectMapper.java @@ -0,0 +1,27 @@ +package jnpf.mapper; + +import com.baomidou.mybatisplus.core.metadata.IPage; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import jnpf.entity.LotteryProject; +import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import jnpf.model.dto.IndicatorStatisticsDto; +import jnpf.model.dto.LotteryProjectDto; +import org.apache.ibatis.annotations.Param; + +import java.util.List; +import java.util.Map; + +/** + *

+ * 抽签项目表 Mapper 接口 + *

+ * + * @author admin + * @since 2024-08-30 + */ +public interface LotteryProjectMapper extends BaseMapper { + + Page queryList(@Param("page")Page page, @Param("query")LotteryProjectDto.QueryListParam param, @Param("ew") Map paramNameValuePairs, @Param("sql")String replace); + + LotteryProjectDto.QueryResponse queryInfo(@Param("id") String id); +} diff --git a/jnpf-tendering-biz/src/main/java/jnpf/mapper/LotteryReviewMapper.java b/jnpf-tendering-biz/src/main/java/jnpf/mapper/LotteryReviewMapper.java new file mode 100644 index 0000000..4386aab --- /dev/null +++ b/jnpf-tendering-biz/src/main/java/jnpf/mapper/LotteryReviewMapper.java @@ -0,0 +1,16 @@ +package jnpf.mapper; + +import jnpf.entity.LotteryReview; +import com.baomidou.mybatisplus.core.mapper.BaseMapper; + +/** + *

+ * 评审次数 Mapper 接口 + *

+ * + * @author admin + * @since 2024-08-30 + */ +public interface LotteryReviewMapper extends BaseMapper { + +} diff --git a/jnpf-tendering-biz/src/main/java/jnpf/service/ExpertService.java b/jnpf-tendering-biz/src/main/java/jnpf/service/ExpertService.java new file mode 100644 index 0000000..5510f01 --- /dev/null +++ b/jnpf-tendering-biz/src/main/java/jnpf/service/ExpertService.java @@ -0,0 +1,25 @@ +package jnpf.service; + +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.baomidou.mybatisplus.extension.service.IService; +import jnpf.entity.Expert; +import jnpf.model.dto.ExpertDto; +import jnpf.permission.model.organize.OrganizeListVO; +import jnpf.permission.model.organize.PaginationOrganize; + +import java.util.List; + +public interface ExpertService extends IService { + + void add(ExpertDto.AddParam param); + + List getOrganizationList(PaginationOrganize pagination); + + void edit(ExpertDto.EditParam param); + + void delete(ExpertDto.DeleteParam param); + + Page queryList(ExpertDto.ListParam param); + + ExpertDto.ListResponse queryInfo(String id); +} diff --git a/jnpf-tendering-biz/src/main/java/jnpf/service/ILotteryProjectService.java b/jnpf-tendering-biz/src/main/java/jnpf/service/ILotteryProjectService.java new file mode 100644 index 0000000..a5db481 --- /dev/null +++ b/jnpf-tendering-biz/src/main/java/jnpf/service/ILotteryProjectService.java @@ -0,0 +1,27 @@ +package jnpf.service; + +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import jnpf.entity.LotteryProject; +import com.baomidou.mybatisplus.extension.service.IService; +import jnpf.model.dto.LotteryProjectDto; + +/** + *

+ * 抽签项目表 服务类 + *

+ * + * @author admin + * @since 2024-08-30 + */ +public interface ILotteryProjectService extends IService { + + void add(LotteryProjectDto.AddParam param); + + void edit(LotteryProjectDto.EditParam param); + + void delete(LotteryProjectDto.DeleteParam param); + + Page queryList(LotteryProjectDto.QueryListParam param); + + LotteryProjectDto.QueryResponse queryInfo(String id); +} diff --git a/jnpf-tendering-biz/src/main/java/jnpf/service/ILotteryReviewService.java b/jnpf-tendering-biz/src/main/java/jnpf/service/ILotteryReviewService.java new file mode 100644 index 0000000..141b6ae --- /dev/null +++ b/jnpf-tendering-biz/src/main/java/jnpf/service/ILotteryReviewService.java @@ -0,0 +1,16 @@ +package jnpf.service; + +import jnpf.entity.LotteryReview; +import com.baomidou.mybatisplus.extension.service.IService; + +/** + *

+ * 评审次数 服务类 + *

+ * + * @author admin + * @since 2024-08-30 + */ +public interface ILotteryReviewService extends IService { + +} diff --git a/jnpf-tendering-biz/src/main/java/jnpf/service/impl/BiddingProjectSubscribeServiceImpl.java b/jnpf-tendering-biz/src/main/java/jnpf/service/impl/BiddingProjectSubscribeServiceImpl.java index ba86922..84fc533 100644 --- a/jnpf-tendering-biz/src/main/java/jnpf/service/impl/BiddingProjectSubscribeServiceImpl.java +++ b/jnpf-tendering-biz/src/main/java/jnpf/service/impl/BiddingProjectSubscribeServiceImpl.java @@ -1,5 +1,6 @@ package jnpf.service.impl; +import cn.hutool.core.bean.BeanUtil; import cn.hutool.core.collection.CollUtil; import cn.hutool.core.collection.CollectionUtil; import cn.hutool.core.io.resource.ResourceUtil; @@ -25,12 +26,14 @@ import jnpf.database.model.superQuery.SuperQueryJsonModel; import jnpf.entity.BiddingProjectSubscribeChild; import jnpf.entity.BiddingProjectSubscribeEntity; import jnpf.entity.BiddingProjectSubscribeStep; +import jnpf.entity.LotteryProject; import jnpf.enump.BiddingProjectEnum; import jnpf.exception.DataException; import jnpf.mapper.BiddingProjectSubscribeMapper; import jnpf.model.bidding_project_subscribe.*; import jnpf.model.dto.BiddingProjectDto; import jnpf.model.dto.IndicatorStatisticsDto; +import jnpf.model.dto.LotteryProjectDto; import jnpf.permission.OrganizeApi; import jnpf.permission.RoleApi; import jnpf.permission.UserApi; @@ -40,13 +43,12 @@ import jnpf.permission.entity.RoleEntity; import jnpf.permission.entity.UserEntity; import jnpf.permission.entity.UserRelationEntity; import jnpf.permission.model.authorize.AuthorizeConditionModel; +import jnpf.permission.service.OrganizeService; import jnpf.permission.util.AuthorizeUtil; -import jnpf.service.BiddingProjectSubscribeService; -import jnpf.service.CustomAuthService; -import jnpf.service.IBiddingProjectSubscribeChildService; -import jnpf.service.IBiddingProjectSubscribeStepService; +import jnpf.service.*; import jnpf.util.*; import lombok.AllArgsConstructor; +import lombok.extern.slf4j.Slf4j; import org.apache.poi.xwpf.usermodel.*; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; @@ -56,6 +58,7 @@ import java.io.ByteArrayOutputStream; import java.io.IOException; import java.io.InputStream; import java.lang.reflect.Field; +import java.time.LocalDate; import java.time.LocalDateTime; import java.util.*; import java.util.stream.Collectors; @@ -69,17 +72,20 @@ import java.util.stream.Collectors; */ @Service @AllArgsConstructor +@Slf4j public class BiddingProjectSubscribeServiceImpl extends ServiceImpl implements BiddingProjectSubscribeService { private final GeneraterSwapUtil generaterSwapUtil; private final UserProvider userProvider; private final CustomAuthService customAuthService; private final OrganizeApi organizeService; + private final OrganizeService organizeServiceTwo; private final IBiddingProjectSubscribeChildService iBiddingProjectSubscribeChildService; private final IBiddingProjectSubscribeStepService iBiddingProjectSubscribeStepService; private final UserRelationApi userRelationService; private final RoleApi roleService; private final UserApi userService; private final DictionaryDataApi dictionaryDataApi; + private final ILotteryProjectService iLotteryProjectService; @Override public List getList(BiddingProjectSubscribePagination biddingProjectSubscribePagination) { @@ -611,6 +617,11 @@ public class BiddingProjectSubscribeServiceImpl extends ServiceImpl underOrganizations = organizeService.getUnderOrganizations(parentOrganization.getId()); +// List underOrganizations = organizeService.getUnderOrganizations(parentOrganization.getId()); + List underOrganizations = organizeServiceTwo.lambdaQuery() + .eq(OrganizeEntity::getParentId, parentOrganization.getId()) + .list() + .stream().map(OrganizeEntity::getId) + .collect(Collectors.toList()); +// List underOrganizations = this.getBaseMapper().getUnderOrganizations(parentOrganization.getId()); + underOrganizations.add(parentOrganization.getId()); //查询组织下角色为审批角色的领导 List userIdList = userRelationService.getListByObjectIdAll(underOrganizations) @@ -1333,6 +1351,37 @@ public class BiddingProjectSubscribeServiceImpl extends ServiceImpl rootChild = iBiddingProjectSubscribeChildService.lambdaQuery() + .eq(BiddingProjectSubscribeChild::getMainId, biddingProjectSubscribeEntity.getId()) + .eq(BiddingProjectSubscribeChild::getRootChildFlag, BiddingProjectEnum.RootFlagEnum.ROOT_FLAG.getCode()) + .list().stream().findFirst(); + if (rootChild.isPresent()){ + log.info("添加到抽签表ing..."); + LotteryProject lotteryProject = BeanUtil.copyProperties(rootChild.get(), LotteryProject.class); + lotteryProject.setCreateId(rootChild.get().getCreateUserId()); + lotteryProject.setCreateName(rootChild.get().getCreateUserName()); + lotteryProject.setCreateTime(LocalDateTime.now()); + lotteryProject.setUpdateId(rootChild.get().getCreateUserId()); + lotteryProject.setUpdateName(rootChild.get().getCreateUserName()); + lotteryProject.setUpdateTime(LocalDateTime.now()); + lotteryProject.setRelationId(biddingProjectSubscribeEntity.getId().toString()); + lotteryProject.setProjectNumber(biddingProjectSubscribeEntity.getProjectNumber()); + lotteryProject.setProjectName(biddingProjectSubscribeEntity.getProjectName()); + Date bidOpeningTime = biddingProjectSubscribeEntity.getBidOpeningTime(); + if (null!=bidOpeningTime) { + String format = cn.hutool.core.date.DateUtil.format(bidOpeningTime, "yyyy-MM-dd HH:mm:ss"); + lotteryProject.setBidOpeningTime(LocalDate.parse(format)); + lotteryProject.setBidEvaluationTime(LocalDateTime.parse(format)); + } + lotteryProject.setStatus(LotteryProjectDto.StatusEnum.TO_BE_EXTRACTED.getCode()); + lotteryProject.setStatusName(LotteryProjectDto.StatusEnum.TO_BE_EXTRACTED.getDescribe()); + lotteryProject.setAgency(biddingProjectSubscribeEntity.getAgencyOne()); + lotteryProject.setType(LotteryProjectDto.TypeEnum.SYSTEM.getCode()); + iLotteryProjectService.save(lotteryProject); + } + } //添加步骤 @@ -1429,6 +1478,15 @@ public class BiddingProjectSubscribeServiceImpl extends ServiceImpl implements ExpertService { + private final OrganizeService organizeService; + private final UserProvider userProvider; + private final RedisSerialNumberGenerator redisSerialNumberGenerator; + private static final String EXPERTS_KEY = "experts:"; + private static final String PREFIX = "EXPERT"; + + @Override + public List getOrganizationList(PaginationOrganize pagination) { + // 获取所有组织 + Map orgMaps = organizeService.getOrgMaps(pagination.getKeyword(), Objects.equals(pagination.getEnabledMark(), 1), pagination.getType()); + Map orgMapsModel = JSONObject.parseObject(JSONObject.toJSONString(orgMaps), new TypeReference>() { + }, new Feature[0]); + ; + + Map orgIdNameMaps = organizeService.getInfoList(); + orgMapsModel.values().forEach(t -> { + if (PermissionConst.COMPANY.equals(t.getType())) { + t.setIcon("icon-ym icon-ym-tree-organization3"); + } else { + t.setIcon("icon-ym icon-ym-tree-department1"); + } + // 处理断层 + if (StringUtil.isNotEmpty(t.getOrganizeIdTree())) { + String[] split = t.getOrganizeIdTree().split(","); + List list1 = Arrays.asList(split); + Collections.reverse(list1); + for (String orgId : list1) { + if (!orgId.equals(t.getId())) { + OrganizeModel organizeEntity1 = orgMapsModel.get(orgId); + if (organizeEntity1 != null) { + t.setParentId(organizeEntity1.getId()); + String[] split1 = t.getOrganizeIdTree().split(organizeEntity1.getId()); + if (split1.length > 1) { + t.setFullName(organizeService.getFullNameByOrgIdTree(orgIdNameMaps, split1[1], "/")); + } + break; + } + } + } + } + }); + List> trees = TreeDotUtils.convertMapsToTreeDot(orgMapsModel); + List listVO = JsonUtil.getJsonToList(trees, OrganizeListVO.class); + listVO.forEach(t -> { + t.setFullName(organizeService.getFullNameByOrgIdTree(orgIdNameMaps, t.getOrganizeIdTree(), "/")); + }); + return listVO; + } + + @Override + public void add(ExpertDto.AddParam param) { + UserInfo userInfo = userProvider.get(); + checkAddParam(param); + Expert expert = BeanUtil.copyProperties(param, Expert.class); + expert.setDelFlag("0"); + expert.setCreateTime(LocalDateTime.now()); + expert.setUpdateTime(LocalDateTime.now()); + expert.setCreateId(userInfo.getId()); + expert.setCreateName(userInfo.getUserName()); + expert.setUpdateName(userInfo.getUserName()); + expert.setUpdateId(userInfo.getId()); + long number = redisSerialNumberGenerator.generateSerialNumber(EXPERTS_KEY); + expert.setId(String.format("%s%05d", PREFIX, number)); + if(this.lambdaQuery().eq(Expert::getId, expert.getId()).exists()){ + throw new DataException("编号生成异常,请稍后再试!"); + } + this.save(expert); + } + + @Override + public void edit(ExpertDto.EditParam param) { + if (StrUtil.isBlank(param.getId())) { + throw new DataException("id不能为空"); + } + Expert expert = this.lambdaQuery() + .eq(Expert::getId, param.getId()) + .eq(Expert::getDelFlag, "0") + .one(); + if (null == expert) { + throw new DataException("请重新选择数据"); + } + checkAddParam(param); + BeanUtil.copyProperties(param, expert); + UserInfo userInfo = userProvider.get(); + expert.setDelFlag("0"); + expert.setUpdateTime(LocalDateTime.now()); + expert.setUpdateName(userInfo.getUserName()); + expert.setUpdateId(userInfo.getId()); + this.saveOrUpdate(expert); + } + + private void checkAddParam(ExpertDto.BaseParam param) { + //1-专家 2-公司 + switch (param.getDataType()) { + case "1": +// if (StrUtil.isNotBlank(param.getBirthdayString())) { +// try { +// param.setBirthday(LocalDateTimeUtil.parse(param.getBirthdayString(), "yyyy-MM-dd HH:mm:ss")); +// } catch (Exception e) { +// throw new DataException("出生日期格式不正确 yyyy-MM-dd HH:mm:ss"); +// } +// } + if (StrUtil.isBlank(param.getExpertName())) { + throw new DataException("专家名称不能为空"); + } + if (StrUtil.isBlank(param.getExpertGroup())) { + throw new DataException("专家组别不能为空"); + } + if (StrUtil.isBlank(param.getSex())) { + throw new DataException("专家性别不能为空"); + } + if (StrUtil.isBlank(param.getPhoneNumber())) { + throw new DataException("专家电话不能为空"); + } + if (StrUtil.isBlank(param.getExpertSources())) { + throw new DataException("专家来源不能为空"); + } + if (StrUtil.isBlank(param.getWorkUnit())) { + throw new DataException("工作单位不能为空"); + } + if (StrUtil.isBlank(param.getPost())) { + throw new DataException("职务不能为空"); + } + if (StrUtil.isBlank(param.getTechnicalPosition())) { + throw new DataException("专业技术职称不能为空"); + } + if (StrUtil.isBlank(param.getProfessionalExpertise())) { + throw new DataException("专业特长不能为空"); + } + if (StrUtil.isBlank(param.getStatus())) { + throw new DataException("专家状态不能为空"); + } + break; + case "2": + if (StrUtil.isBlank(param.getExpertName())) { + throw new DataException("联系人不能为空"); + } + if (StrUtil.isBlank(param.getPhoneNumber())) { + throw new DataException("联系电话不能为空"); + } + if (StrUtil.isBlank(param.getCompanyName())) { + throw new DataException("公司名称不能为空"); + } + break; + default: + throw new DataException("新增类型错误"); + } + + } + + @Override + public void delete(ExpertDto.DeleteParam param) { + if (StrUtil.isBlank(param.getId())) { + throw new DataException("id不能为空"); + } + UserInfo userInfo = userProvider.get(); + this.lambdaUpdate() + .set(Expert::getDelFlag, "1") + .set(Expert::getUpdateTime, LocalDateTime.now()) + .set(Expert::getUpdateId, userInfo.getUserId()) + .set(Expert::getUpdateName, userInfo.getUserName()) + .eq(Expert::getId, param.getId()) + .update(); + } + + @Override + public Page queryList(ExpertDto.ListParam param) { + checkParam(param); + return this.getBaseMapper().queryList(new Page<>(param.getPageNum(),param.getPageSize()),param); + } + + private void checkParam(ExpertDto.ListParam param) { + if (param.getPageNum() == null) { + param.setPageNum(1); + } + if (param.getPageSize() == null) { + param.setPageSize(10); + } + } + + @Override + public ExpertDto.ListResponse queryInfo(String id) { + if (StrUtil.isBlank(id)) { + throw new DataException("id不能为空"); + } + return this.getBaseMapper().queryInfo(id); + } +} diff --git a/jnpf-tendering-biz/src/main/java/jnpf/service/impl/LotteryProjectServiceImpl.java b/jnpf-tendering-biz/src/main/java/jnpf/service/impl/LotteryProjectServiceImpl.java new file mode 100644 index 0000000..20e5358 --- /dev/null +++ b/jnpf-tendering-biz/src/main/java/jnpf/service/impl/LotteryProjectServiceImpl.java @@ -0,0 +1,134 @@ +package jnpf.service.impl; + +import cn.hutool.core.bean.BeanUtil; +import cn.hutool.core.date.LocalDateTimeUtil; +import cn.hutool.core.util.ObjectUtil; +import cn.hutool.core.util.StrUtil; +import com.alibaba.fastjson.JSON; +import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.google.protobuf.ServiceException; +import jnpf.base.UserInfo; +import jnpf.entity.LotteryProject; +import jnpf.exception.DataException; +import jnpf.mapper.LotteryProjectMapper; +import jnpf.model.dto.IndicatorStatisticsDto; +import jnpf.model.dto.LotteryProjectDto; +import jnpf.permission.OrganizeApi; +import jnpf.permission.entity.OrganizeEntity; +import jnpf.permission.model.authorize.AuthorizeConditionModel; +import jnpf.permission.service.OrganizeService; +import jnpf.service.CustomAuthService; +import jnpf.service.ILotteryProjectService; +import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; +import jnpf.util.UserProvider; +import lombok.AllArgsConstructor; +import org.apache.poi.ss.formula.functions.T; +import org.springframework.stereotype.Service; + +import java.time.LocalDate; +import java.time.LocalDateTime; +import java.util.List; + +/** + *

+ * 抽签项目表 服务实现类 + *

+ * + * @author admin + * @since 2024-08-30 + */ +@Service +@AllArgsConstructor +public class LotteryProjectServiceImpl extends ServiceImpl implements ILotteryProjectService { + + + private final UserProvider userProvider; + private final OrganizeApi organizeService; + + @Override + public void add(LotteryProjectDto.AddParam param) { + LotteryProject lotteryProject = BeanUtil.copyProperties(param, LotteryProject.class); + lotteryProject.setType(LotteryProjectDto.TypeEnum.ONESELF.getCode()); + lotteryProject.setStatus(LotteryProjectDto.StatusEnum.TO_BE_EXTRACTED.getCode()); + lotteryProject.setStatusName(LotteryProjectDto.StatusEnum.TO_BE_EXTRACTED.getDescribe()); + lotteryProject.setBidOpeningTime(LocalDate.parse(LocalDateTimeUtil.format(param.getBidEvaluationTime(),"yyyy-MM-dd"))); + UserInfo userInfo = userProvider.get(); + lotteryProject.setUserDeptId(userInfo.getOrganizeId()); + //添加根子单数据 + OrganizeEntity organization = organizeService.getInfoById(userInfo.getOrganizeId()); + lotteryProject.setUserDeptName(organization.getFullName()); + lotteryProject.setCreateId(userInfo.getUserId()); + lotteryProject.setCreateName(userInfo.getUserName()); + lotteryProject.setCreateTime(LocalDateTime.now()); + lotteryProject.setUpdateId(userInfo.getUserId()); + lotteryProject.setUpdateName(userInfo.getUserName()); + lotteryProject.setUpdateTime(LocalDateTime.now()); + this.save(lotteryProject); + } + + @Override + public void edit(LotteryProjectDto.EditParam param) { + if (null==param.getId()){ + throw new DataException("id不能为空"); + } + LotteryProject lotteryProject = BeanUtil.copyProperties(param, LotteryProject.class); + lotteryProject.setBidOpeningTime(LocalDate.parse(LocalDateTimeUtil.format(param.getBidEvaluationTime(),"yyyy-MM-dd"))); + UserInfo userInfo = userProvider.get();; + lotteryProject.setUpdateId(userInfo.getUserId()); + lotteryProject.setUpdateName(userInfo.getUserName()); + lotteryProject.setUpdateTime(LocalDateTime.now()); + lotteryProject.setId(param.getId()); + this.saveOrUpdate(lotteryProject); + } + + + @Override + public void delete(LotteryProjectDto.DeleteParam param) { + if (null==param.getId()){ + throw new DataException("id不能为空"); + } + this.lambdaUpdate() + .set(LotteryProject::getDelFlag,"1") + .eq(LotteryProject::getId,param.getId()) + .update(); + } + + + + private final CustomAuthService customAuthService; + + private QueryWrapper getAuthWrapper(String menuId) { + if (!userProvider.get().getIsAdministrator()) { + QueryWrapper queryWhere = new QueryWrapper<>(); + Object bidding_project_statisticsObj = customAuthService.getCondition(new AuthorizeConditionModel(queryWhere, menuId, "bidding_project_subscribe")); + System.out.println("---------------" + JSON.toJSONString(bidding_project_statisticsObj)); + return (QueryWrapper) bidding_project_statisticsObj; + } + return null; + } + @Override + public Page queryList(LotteryProjectDto.QueryListParam param) { + if (param.getPageNum() == null) { + param.setPageNum(1); + } + if (param.getPageSize() == null) { + param.setPageSize(10); + } + //查询权限 + QueryWrapper queryWhere = getAuthWrapper(param.getMenuId()); + if (ObjectUtil.isEmpty(queryWhere)) { + return new Page<>(); + } + assert queryWhere != null; + return this.getBaseMapper().queryList(new Page<>(param.getPageNum(),param.getPageSize()),param, queryWhere.getParamNameValuePairs(),queryWhere.getSqlSegment().replace("paramNameValuePairs.", "")); + } + + @Override + public LotteryProjectDto.QueryResponse queryInfo(String id) { + if (StrUtil.isBlank(id)){ + throw new DataException("id不能为空"); + } + return this.getBaseMapper().queryInfo(id); + } +} diff --git a/jnpf-tendering-biz/src/main/java/jnpf/service/impl/LotteryReviewServiceImpl.java b/jnpf-tendering-biz/src/main/java/jnpf/service/impl/LotteryReviewServiceImpl.java new file mode 100644 index 0000000..8a5c09c --- /dev/null +++ b/jnpf-tendering-biz/src/main/java/jnpf/service/impl/LotteryReviewServiceImpl.java @@ -0,0 +1,20 @@ +package jnpf.service.impl; + +import jnpf.entity.LotteryReview; +import jnpf.mapper.LotteryReviewMapper; +import jnpf.service.ILotteryReviewService; +import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; +import org.springframework.stereotype.Service; + +/** + *

+ * 评审次数 服务实现类 + *

+ * + * @author admin + * @since 2024-08-30 + */ +@Service +public class LotteryReviewServiceImpl extends ServiceImpl implements ILotteryReviewService { + +} diff --git a/jnpf-tendering-biz/src/main/java/jnpf/service/impl/RedisSerialNumberGenerator.java b/jnpf-tendering-biz/src/main/java/jnpf/service/impl/RedisSerialNumberGenerator.java new file mode 100644 index 0000000..63b6e00 --- /dev/null +++ b/jnpf-tendering-biz/src/main/java/jnpf/service/impl/RedisSerialNumberGenerator.java @@ -0,0 +1,27 @@ +package jnpf.service.impl; + +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.data.redis.core.RedisTemplate; +import org.springframework.data.redis.core.StringRedisTemplate; +import org.springframework.stereotype.Component; + +@Component +public class RedisSerialNumberGenerator { + + @Autowired + private RedisTemplate redisTemplate; + + private static final String SERIAL_KEY_PREFIX = "serial_number:"; + + /** + * 生成分布式流水号 + * + * @param key 业务相关的唯一标识符,用于区分不同业务的流水号 + * @return 生成的流水号 + */ + public long generateSerialNumber(String key) { + String redisKey = SERIAL_KEY_PREFIX + key; + // 使用Redis的INCR命令原子递增 + return redisTemplate.opsForValue().increment(redisKey); + } +} \ No newline at end of file diff --git a/jnpf-tendering-biz/src/main/resources/mapper/BiddingProjectSubscribeMapper.xml b/jnpf-tendering-biz/src/main/resources/mapper/BiddingProjectSubscribeMapper.xml index 8946044..17cfb63 100644 --- a/jnpf-tendering-biz/src/main/resources/mapper/BiddingProjectSubscribeMapper.xml +++ b/jnpf-tendering-biz/src/main/resources/mapper/BiddingProjectSubscribeMapper.xml @@ -62,6 +62,8 @@ + + @@ -118,7 +120,7 @@ main . id - ,main.management_style ,main.project_number ,main.plan_submission_time ,main.reporting_corp ,main.tendering_entity ,main.project_name ,main.Item_classification ,main.organizational_form ,main.bidding_method ,main.reported_file_name ,main.bidding_document_id ,main.decision_procedure ,main.approval_documents_id ,main.final_approval_time ,main.setting_of_winning_bidder_one ,main.setting_of_winning_bidder_two ,main.scoring_indicator_settings_one ,main.scoring_indicator_settings_two ,main.scoring_indicator_settings_three ,main.scoring_indicator_settings_four ,main.agency_one ,main.agency_two ,main.scoring_method_one ,main.scoring_method_two ,main.approval_documents_id_two ,main.result_reporting_time ,main.result_reported_file_name ,main.bid_opening_time ,main.explanation_of_bid ,main.winning_bidder_and_winning_amount ,main.bid_evaluation_committee ,main.tender_agency_fee ,main.attachment_of_bidding_results_one_id ,main.attachment_of_bidding_results_two_id ,main.winning_bidder ,main.winning_bidder_candidate ,main.filing_decision_procedure ,main.filing_results_one_id ,main.filing_results_two_id ,main.approval_time_for_results ,main.f_flowid ,main.f_flowtaskid ,main.annex_programme_document ,main.main_status ,main.main_status_name,bid_winning_amount,is_approval,query_type,approval_documents_id_jt,archive_number,main.create_time,main.update_time,main.winning_bidder_type,main.winning_bidder_info,main.control_price,main.filing_results_three_id,main.project_amount + ,main.management_style ,main.project_number ,main.plan_submission_time ,main.reporting_corp ,main.tendering_entity ,main.project_name ,main.Item_classification ,main.organizational_form ,main.bidding_method ,main.reported_file_name ,main.bidding_document_id ,main.decision_procedure ,main.approval_documents_id ,main.final_approval_time ,main.setting_of_winning_bidder_one ,main.setting_of_winning_bidder_two ,main.scoring_indicator_settings_one ,main.scoring_indicator_settings_two ,main.scoring_indicator_settings_three ,main.scoring_indicator_settings_four ,main.agency_one ,main.agency_two ,main.scoring_method_one ,main.scoring_method_two ,main.approval_documents_id_two ,main.result_reporting_time ,main.result_reported_file_name ,main.bid_opening_time ,main.explanation_of_bid ,main.winning_bidder_and_winning_amount ,main.bid_evaluation_committee ,main.tender_agency_fee ,main.attachment_of_bidding_results_one_id ,main.attachment_of_bidding_results_two_id ,main.winning_bidder ,main.winning_bidder_candidate ,main.filing_decision_procedure ,main.filing_results_one_id ,main.filing_results_two_id ,main.approval_time_for_results ,main.f_flowid ,main.f_flowtaskid ,main.annex_programme_document ,main.main_status ,main.main_status_name,bid_winning_amount,is_approval,query_type,approval_documents_id_jt,archive_number,main.create_time,main.update_time,main.winning_bidder_type,main.winning_bidder_info,main.control_price,main.filing_results_three_id,main.project_amount,main.eval_setting,main.contract_period id diff --git a/jnpf-tendering-biz/src/main/resources/mapper/ExpertMapper.xml b/jnpf-tendering-biz/src/main/resources/mapper/ExpertMapper.xml new file mode 100644 index 0000000..eed54ea --- /dev/null +++ b/jnpf-tendering-biz/src/main/resources/mapper/ExpertMapper.xml @@ -0,0 +1,59 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + id + ,expert_name ,expert_group ,company_name ,phone_number ,birthday ,expert_sources ,work_unit ,post ,technical_position ,professional_expertise ,sex ,working_years ,del_flag ,status ,data_type ,create_time ,create_id ,create_name ,update_time ,update_id ,update_name + + + + diff --git a/jnpf-tendering-biz/src/main/resources/mapper/LotteryProjectMapper.xml b/jnpf-tendering-biz/src/main/resources/mapper/LotteryProjectMapper.xml new file mode 100644 index 0000000..f99b8db --- /dev/null +++ b/jnpf-tendering-biz/src/main/resources/mapper/LotteryProjectMapper.xml @@ -0,0 +1,74 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + id ,status ,relation_id ,project_number ,project_name ,bid_opening_time ,bid_evaluation_time ,bid_evaluation_location ,agency ,status_name ,remake ,user_dept_name ,user_dept_id ,create_id ,create_time ,create_name ,update_id ,update_time ,update_name ,type ,del_flag + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/jnpf-tendering-biz/src/main/resources/mapper/LotteryReviewMapper.xml b/jnpf-tendering-biz/src/main/resources/mapper/LotteryReviewMapper.xml new file mode 100644 index 0000000..3142c96 --- /dev/null +++ b/jnpf-tendering-biz/src/main/resources/mapper/LotteryReviewMapper.xml @@ -0,0 +1,5 @@ + + + + + diff --git a/jnpf-tendering-controller/src/main/java/jnpf/controller/BiddingProjectSubscribeController.java b/jnpf-tendering-controller/src/main/java/jnpf/controller/BiddingProjectSubscribeController.java index d46ee31..697e3e9 100644 --- a/jnpf-tendering-controller/src/main/java/jnpf/controller/BiddingProjectSubscribeController.java +++ b/jnpf-tendering-controller/src/main/java/jnpf/controller/BiddingProjectSubscribeController.java @@ -1,6 +1,7 @@ package jnpf.controller; import cn.hutool.core.collection.CollectionUtil; +import cn.hutool.core.date.DateUtil; import cn.hutool.core.util.StrUtil; import cn.xuyanwu.spring.file.storage.FileInfo; import io.swagger.v3.oas.annotations.Operation; @@ -123,6 +124,7 @@ public class BiddingProjectSubscribeController { if (StringUtil.isNotEmpty(b)) { return ActionResult.fail(b); } + String oldBidOpeningTime = bidding_project_subscribeForm.getBidOpeningTime(); String mainId = RandomUtil.uuId(); UserInfo userInfo = userProvider.get(); UserEntity userEntity = generaterSwapUtil.getUser(userInfo.getUserId()); @@ -135,6 +137,7 @@ public class BiddingProjectSubscribeController { entity.setIsApproval(true); } entity.setFlowtaskid(mainId); + entity.setBidOpeningTime(new Date(Long.parseLong(oldBidOpeningTime))); entity.setCreateTime(LocalDateTime.now()); entity.setUpdateTime(LocalDateTime.now()); checkProjectAmount(entity); @@ -235,12 +238,14 @@ public class BiddingProjectSubscribeController { if (StringUtil.isNotEmpty(b)) { return ActionResult.fail(b); } + String oldBidOpeningTime = bidding_project_subscribeForm.getBidOpeningTime(); UserInfo userInfo = userProvider.get(); BiddingProjectSubscribeEntity entity = biddingProjectSubscribeService.getInfo(id); if (entity != null) { bidding_project_subscribeForm = JsonUtil.getJsonToBean( generaterSwapUtil.swapDatetime(BiddingProjectSubscribeConstant.getFormData(), bidding_project_subscribeForm), BiddingProjectSubscribeForm.class); BiddingProjectSubscribeEntity subentity = JsonUtil.getJsonToBean(bidding_project_subscribeForm, BiddingProjectSubscribeEntity.class); + subentity.setBidOpeningTime(new Date(oldBidOpeningTime)); subentity.setUpdateTime(LocalDateTime.now()); subentity.setCreateTime(entity.getCreateTime()); checkProjectAmount(subentity); diff --git a/jnpf-tendering-controller/src/main/java/jnpf/controller/ExpertController.java b/jnpf-tendering-controller/src/main/java/jnpf/controller/ExpertController.java new file mode 100644 index 0000000..55df49f --- /dev/null +++ b/jnpf-tendering-controller/src/main/java/jnpf/controller/ExpertController.java @@ -0,0 +1,84 @@ +package jnpf.controller; + + +import cn.dev33.satoken.annotation.SaCheckPermission; +import cn.dev33.satoken.annotation.SaMode; +import com.alibaba.fastjson.JSONObject; +import com.alibaba.fastjson.TypeReference; +import com.alibaba.fastjson.parser.Feature; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import io.swagger.v3.oas.annotations.Operation; +import io.swagger.v3.oas.annotations.tags.Tag; +import jnpf.base.ActionResult; +import jnpf.base.vo.ListVO; +import jnpf.constant.PermissionConst; +import jnpf.model.dto.ExpertDto; +import jnpf.model.dto.IndicatorStatisticsDto; +import jnpf.permission.entity.OrganizeAdministratorEntity; +import jnpf.permission.entity.OrganizeEntity; +import jnpf.permission.model.organize.OrganizeListVO; +import jnpf.permission.model.organize.OrganizeModel; +import jnpf.permission.model.organize.PaginationOrganize; +import jnpf.service.ExpertService; +import jnpf.service.IndicatorStatisticsService; +import jnpf.util.JsonUtil; +import jnpf.util.StringUtil; +import jnpf.util.treeutil.SumTree; +import jnpf.util.treeutil.newtreeutil.TreeDotUtils; +import lombok.AllArgsConstructor; +import org.springframework.web.bind.annotation.*; + +import java.util.*; + +@RestController +@Tag(name = "专家抽取相关接口", description = "example") +@RequestMapping("/expert") +@AllArgsConstructor +public class ExpertController { + private final ExpertService expertService; + + + @Operation(summary = "获取组织列表") + @GetMapping("getOrganizationList") + public ActionResult> getOrganizationList(PaginationOrganize pagination) { + List listVO = expertService.getOrganizationList(pagination); + ListVO vo = new ListVO<>(); + vo.setList(listVO); + return ActionResult.success(vo); + } + + @Operation(summary = "新增专家/公司") + @PostMapping("/add") + public ActionResult add(@RequestBody ExpertDto.AddParam param) { + expertService.add(param); + return ActionResult.success(); + } + + @Operation(summary = "修改专家/公司") + @PostMapping("/edit") + public ActionResult update(@RequestBody ExpertDto.EditParam param) { + expertService.edit(param); + return ActionResult.success(); + } + + @Operation(summary = "删除专家/公司") + @PostMapping("/delete") + public ActionResult delete(@RequestBody ExpertDto.DeleteParam param) { + expertService.delete(param); + return ActionResult.success(); + } + + @Operation(summary = "查询专家/公司列表") + @PostMapping("/list") + public ActionResult> List(@RequestBody ExpertDto.ListParam param) { + return ActionResult.success(expertService.queryList(param)); + } + + + @Operation(summary = "查询详情") + @GetMapping("/queryInfo") + public ActionResult queryInfo(@RequestParam String id) { + return ActionResult.success(expertService.queryInfo(id)); + } + +} diff --git a/jnpf-tendering-controller/src/main/java/jnpf/controller/LotteryProjectController.java b/jnpf-tendering-controller/src/main/java/jnpf/controller/LotteryProjectController.java new file mode 100644 index 0000000..5bd3769 --- /dev/null +++ b/jnpf-tendering-controller/src/main/java/jnpf/controller/LotteryProjectController.java @@ -0,0 +1,68 @@ +package jnpf.controller; + + +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import io.swagger.v3.oas.annotations.Operation; +import io.swagger.v3.oas.annotations.tags.Tag; +import jnpf.base.ActionResult; +import jnpf.entity.LotteryProject; +import jnpf.model.dto.ExpertDto; +import jnpf.model.dto.LotteryProjectDto; +import jnpf.service.ILotteryProjectService; +import lombok.AllArgsConstructor; +import org.springframework.web.bind.annotation.*; + +import org.springframework.stereotype.Controller; + + +@RestController +@Tag(name = "项目抽签相关接口", description = "example") +@RequestMapping("/lottery-project") +@AllArgsConstructor +public class LotteryProjectController { + + private final ILotteryProjectService iLotteryProjectService; + + @Operation(summary = "新增抽签项目") + @PostMapping("/add") + public ActionResult add(@RequestBody LotteryProjectDto.AddParam param) { + iLotteryProjectService.add(param); + return ActionResult.success(); + } + + @Operation(summary = "修改抽签项目信息") + @PostMapping("/edit") + public ActionResult edit(@RequestBody LotteryProjectDto.EditParam param) { + iLotteryProjectService.edit(param); + return ActionResult.success(); + } + + + @Operation(summary = "删除抽签项目信息") + @PostMapping("/delete") + public ActionResult delete(@RequestBody LotteryProjectDto.DeleteParam param) { + iLotteryProjectService.delete(param); + return ActionResult.success(); + } + + @Operation(summary = "查询抽签项目信息") + @PostMapping("/queryList") + public ActionResult> queryList(@RequestBody LotteryProjectDto.QueryListParam param) { + return ActionResult.success(iLotteryProjectService.queryList(param)); + } + + + @Operation(summary = "详情查询") + @GetMapping("/queryInfo") + public ActionResult queryInfo(@RequestParam String id) { + return ActionResult.success(iLotteryProjectService.queryInfo(id)); + } + + +// @Operation(summary = "添加评审") +// @PostMapping("/addReview") +// public ActionResult addReview(@RequestBody LotteryProjectDto.AddReviewParam param) { +// iLotteryProjectService.addReview(param); +// return ActionResult.success(); +// } +} diff --git a/jnpf-tendering-entity/src/main/java/jnpf/entity/BiddingProjectSubscribeEntity.java b/jnpf-tendering-entity/src/main/java/jnpf/entity/BiddingProjectSubscribeEntity.java index 3f2b067..9de984f 100644 --- a/jnpf-tendering-entity/src/main/java/jnpf/entity/BiddingProjectSubscribeEntity.java +++ b/jnpf-tendering-entity/src/main/java/jnpf/entity/BiddingProjectSubscribeEntity.java @@ -155,6 +155,20 @@ public class BiddingProjectSubscribeEntity { private LocalDateTime createTime; @TableField(value = "UPDATE_TIME" , updateStrategy = FieldStrategy.IGNORED) private LocalDateTime updateTime; + + + /** + * 评标专家设置 + */ + @TableField("eval_setting") + private String evalSetting; + /** + *合同期 + */ + @TableField("contract_period") + private String contractPeriod; + + @TableField(exist = false) private List childList; @TableField(exist = false) diff --git a/jnpf-tendering-entity/src/main/java/jnpf/entity/Expert.java b/jnpf-tendering-entity/src/main/java/jnpf/entity/Expert.java new file mode 100644 index 0000000..469e3c5 --- /dev/null +++ b/jnpf-tendering-entity/src/main/java/jnpf/entity/Expert.java @@ -0,0 +1,121 @@ +package jnpf.entity; + +import com.baomidou.mybatisplus.annotation.*; + +import java.io.Serializable; +import java.time.LocalDateTime; + +import com.fasterxml.jackson.annotation.JsonFormat; +import lombok.Getter; +import lombok.Setter; + +/** + *

+ * + *

+ * + * @author admin + * @since 2024-08-26 + */ +@Getter +@Setter +@TableName("t_expert") +//@ApiModel(value = "Expert对象", description = "") +public class Expert implements Serializable { + + private static final long serialVersionUID = 1L; + + // @ApiModelProperty("主键id") + @TableId(value = "id", type = IdType.INPUT) + private String id; + + // @ApiModelProperty("专家姓名") + @TableField(value = "expert_name") + private String expertName; + + // @ApiModelProperty("专家组别(字典表id)") + @TableField(value = "expert_group") + private String expertGroup; + + // @ApiModelProperty("公司名称(招投标类型)") + @TableField(value = "company_name") + private String companyName; + + // @ApiModelProperty("联系方式") + @TableField(value = "phone_number") + private String phoneNumber; + + // @ApiModelProperty("出生日期") + @TableField(value = "birthday") + @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss") + private LocalDateTime birthday; + + // @ApiModelProperty("专家来源 1-内部专家 2-外部专家") + @TableField(value = "expert_sources") + private String expertSources; + + // @ApiModelProperty("工作单位名称") + @TableField(value = "work_unit") + private String workUnit; + + // @ApiModelProperty("职务") + @TableField(value = "post") + private String post; + + // @ApiModelProperty("专业技术职称") + @TableField(value = "technical_position") + private String technicalPosition; + + // @ApiModelProperty("专业专长") + @TableField(value = "professional_expertise") + private String professionalExpertise; + + // @ApiModelProperty("性别 1-男 2-女") + @TableField(value = "sex") + private String sex; + + // @ApiModelProperty("工龄") + @TableField(value = "working_years") + private String workingYears; + + // @ApiModelProperty("删除标记 0-正常 1-删除") + @TableField(value = "del_flag") + private String delFlag; + + // @ApiModelProperty("状态0-有效 1-无效") + @TableField(value = "status") + private String status; + + // @ApiModelProperty("数据类型 1-专家 2-公司") + @TableField(value = "data_type") + private String dataType; + + + // @ApiModelProperty("创建时间") + @TableField(value = "create_time") + @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss") + private LocalDateTime createTime; + + // @ApiModelProperty("创建人id") + @TableField(value = "create_id") + private String createId; + + // @ApiModelProperty("创建人名称") + @TableField(value = "create_name") + private String createName; + + // @ApiModelProperty("更新时间") + @TableField(value = "update_time") + @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss") + private LocalDateTime updateTime; + + // @ApiModelProperty("更新人id") + @TableField(value = "update_id") + private String updateId; + + // @ApiModelProperty("更新人名称") + @TableField(value = "update_name") + private String updateName; + + +} diff --git a/jnpf-tendering-entity/src/main/java/jnpf/entity/LotteryProject.java b/jnpf-tendering-entity/src/main/java/jnpf/entity/LotteryProject.java new file mode 100644 index 0000000..33a318a --- /dev/null +++ b/jnpf-tendering-entity/src/main/java/jnpf/entity/LotteryProject.java @@ -0,0 +1,116 @@ +package jnpf.entity; + +import com.baomidou.mybatisplus.annotation.IdType; +import com.baomidou.mybatisplus.annotation.TableField; +import com.baomidou.mybatisplus.annotation.TableId; +import com.baomidou.mybatisplus.annotation.TableName; +import java.io.Serializable; +import java.time.LocalDate; +import java.time.LocalDateTime; +import io.swagger.annotations.ApiModel; +import io.swagger.annotations.ApiModelProperty; +import lombok.Getter; +import lombok.Setter; + +/** + *

+ * 抽签项目表 + *

+ * + * @author admin + * @since 2024-08-30 + */ +@Getter +@Setter +@TableName("t_lottery_project") +@ApiModel(value = "LotteryProject对象", description = "抽签项目表") +public class LotteryProject implements Serializable { + + private static final long serialVersionUID = 1L; + + @ApiModelProperty("唯一id") + @TableId(value = "id", type = IdType.AUTO) + private Integer id; + + @ApiModelProperty("状态") + @TableField(value = "status") + private String status; + + @ApiModelProperty("关联id") + @TableField(value = "relation_id") + private String relationId; + + @ApiModelProperty("项目编号") + @TableField(value = "project_number") + private String projectNumber; + + @ApiModelProperty("项目名称") + @TableField(value = "project_name") + private String projectName; + + @ApiModelProperty("开标时间") + @TableField(value = "bid_opening_time") + private LocalDate bidOpeningTime; + + @ApiModelProperty("评标时间") + @TableField(value = "bid_evaluation_time") + private LocalDateTime bidEvaluationTime; + + @ApiModelProperty("评标地点") + @TableField(value ="bid_evaluation_location") + private String bidEvaluationLocation; + + @ApiModelProperty("代理机构") + @TableField(value = "agency") + private String agency; + + @ApiModelProperty("状态名称") + @TableField(value = "status_name") + private String statusName; + + @ApiModelProperty("描述") + @TableField(value = "remake") + private String remake; + + @ApiModelProperty("人员所属部门名称") + @TableField(value = "user_dept_name") + private String userDeptName; + + @ApiModelProperty("人员所属部门") + @TableField(value = "user_dept_id") + private String userDeptId; + + @ApiModelProperty("创建人id") + @TableField(value = "create_id") + private String createId; + + @ApiModelProperty("创建时间") + @TableField(value = "create_time") + private LocalDateTime createTime; + + @ApiModelProperty("创建人姓名") + @TableField(value = "create_name") + private String createName; + + @ApiModelProperty("更新人id") + @TableField(value = "update_id") + private String updateId; + + @ApiModelProperty("更新时间") + @TableField(value = "update_time") + private LocalDateTime updateTime; + + @ApiModelProperty("更新人名称") + @TableField(value = "update_name") + private String updateName; + + @ApiModelProperty("类型 1-系统2-自建") + @TableField(value = "type") + private String type; + + @ApiModelProperty("删除标记 0-正常 1-删除") + @TableField(value = "del_flag") + private String delFlag; + + +} diff --git a/jnpf-tendering-entity/src/main/java/jnpf/entity/LotteryReview.java b/jnpf-tendering-entity/src/main/java/jnpf/entity/LotteryReview.java new file mode 100644 index 0000000..7efc0bf --- /dev/null +++ b/jnpf-tendering-entity/src/main/java/jnpf/entity/LotteryReview.java @@ -0,0 +1,58 @@ +package jnpf.entity; + +import com.baomidou.mybatisplus.annotation.*; + +import java.io.Serializable; +import java.time.LocalDateTime; +import io.swagger.annotations.ApiModel; +import io.swagger.annotations.ApiModelProperty; +import jnpf.model.JsonTypeHandler; +import jnpf.model.dto.LotteryProjectDto; +import lombok.Getter; +import lombok.Setter; + +/** + *

+ * 评审次数 + *

+ * + * @author admin + * @since 2024-08-30 + */ +@Getter +@Setter +@TableName(value = "t_lottery_review",autoResultMap = true) +@ApiModel(value = "LotteryReview对象", description = "评审次数") +public class LotteryReview implements Serializable { + + private static final long serialVersionUID = 1L; + + @ApiModelProperty("主键id") + @TableId(value = "id", type = IdType.AUTO) + private Integer id; + + @ApiModelProperty("第几次评审数") + @TableField(value = "count") + private String count; + + @ApiModelProperty("抽签项目ID") + @TableField(value = "relation_id") + private String relationId; + + @ApiModelProperty("专家组别信息json") + @TableField(value = "expert_group_info",typeHandler = JsonTypeHandler.class) + private LotteryProjectDto.ExpertGroupInfo expertGroupInfo; + + @ApiModelProperty("抽取专家信息json") + @TableField(value = "extract_experts_info",typeHandler = JsonTypeHandler.class) + private String extractExpertsInfo; + + @TableField(value ="create_time") + private LocalDateTime createTime; + + @ApiModelProperty("结果信息") + @TableField(value ="upload_results_info",typeHandler = JsonTypeHandler.class) + private String uploadResultsInfo; + + +} diff --git a/jnpf-tendering-entity/src/main/java/jnpf/model/bidding_project_subscribe/BiddingProjectSubscribeForm.java b/jnpf-tendering-entity/src/main/java/jnpf/model/bidding_project_subscribe/BiddingProjectSubscribeForm.java index 235a5fd..d101eee 100644 --- a/jnpf-tendering-entity/src/main/java/jnpf/model/bidding_project_subscribe/BiddingProjectSubscribeForm.java +++ b/jnpf-tendering-entity/src/main/java/jnpf/model/bidding_project_subscribe/BiddingProjectSubscribeForm.java @@ -154,4 +154,14 @@ public class BiddingProjectSubscribeForm { * 保存类型 1-提交 2-暂存 * */ private String saveType="1"; + + + /** + * 评标专家设置 + */ + private String evalSetting; + /** + *合同期 + */ + private String contractPeriod; } diff --git a/jnpf-tendering-entity/src/main/java/jnpf/model/dto/ExpertDto.java b/jnpf-tendering-entity/src/main/java/jnpf/model/dto/ExpertDto.java new file mode 100644 index 0000000..91457e4 --- /dev/null +++ b/jnpf-tendering-entity/src/main/java/jnpf/model/dto/ExpertDto.java @@ -0,0 +1,114 @@ +package jnpf.model.dto; + +import cn.hutool.core.date.LocalDateTimeUtil; +import com.github.pagehelper.PageParam; +import jnpf.entity.Expert; +import jnpf.exception.DataException; +import lombok.Data; + +import java.io.Serializable; +import java.time.LocalDateTime; +import java.util.ArrayList; +import java.util.List; + +@Data +public class ExpertDto { + @Data + public static class BaseParam { + /** + * 新增类型 1-专家 2-公司 + */ + private String dataType = "1"; + /** + * 专家姓名 + */ + private String expertName; + + /** + * @ApiModelProperty("专家组别(字典表id)") + */ + private String expertGroup; + + // @ApiModelProperty("公司名称(招投标类型)") + private String companyName; + + // @ApiModelProperty("联系方式") + private String phoneNumber; + + // @ApiModelProperty("出生日期") + private String birthdayString; + + // @ApiModelProperty("出生日期") + private LocalDateTime birthday; + + // @ApiModelProperty("专家来源 1-内部专家 2-外部专家") + private String expertSources; + + // @ApiModelProperty("工作单位名称") + private String workUnit; + + // @ApiModelProperty("职务") + private String post; + + // @ApiModelProperty("专业技术职称") + private String technicalPosition; + + // @ApiModelProperty("专业专长") + private String professionalExpertise; + + // @ApiModelProperty("性别 1-男 2-女") + private String sex; + + // @ApiModelProperty("工龄") + private String workingYears; + + // @ApiModelProperty("状态0-有效 1-无效") + private String status; + + public void setBirthday(String birthdayString) { + try { + this.birthday = LocalDateTimeUtil.parse(birthdayString, "yyyy-MM-dd HH:mm:ss"); + }catch (Exception e){ + throw new DataException("日期格式错误,请使用yyyy-MM-dd HH:mm:ss格式"); + } + } + } + + @Data + public static class AddParam extends BaseParam { + } + + @Data + public static class EditParam extends BaseParam { + //主键ID + private String id; + } + + @Data + public static class DeleteParam { + //主键ID + private String id; + } + + @Data + public static class ListParam extends PageParam { + /** + * 专家姓名 + */ + private String expertName; + + + // @ApiModelProperty("公司名称(招投标类型)") + private String companyName; + + // @ApiModelProperty("工作单位名称") + private String workUnit; + + // @ApiModelProperty("联系方式") + private String phoneNumber; + } + + @Data + public static class ListResponse extends Expert implements Serializable { + } +} diff --git a/jnpf-tendering-entity/src/main/java/jnpf/model/dto/LotteryProjectDto.java b/jnpf-tendering-entity/src/main/java/jnpf/model/dto/LotteryProjectDto.java new file mode 100644 index 0000000..de520cd --- /dev/null +++ b/jnpf-tendering-entity/src/main/java/jnpf/model/dto/LotteryProjectDto.java @@ -0,0 +1,176 @@ +package jnpf.model.dto; + + +import cn.hutool.core.date.LocalDateTimeUtil; +import com.github.pagehelper.PageParam; +import io.swagger.annotations.ApiModelProperty; +import jnpf.entity.LotteryProject; +import jnpf.exception.DataException; +import lombok.Data; + +import java.time.LocalDate; +import java.time.LocalDateTime; +import java.util.List; + +@Data +public class LotteryProjectDto { + public enum StatusEnum { + //发布类型 + TO_BE_EXTRACTED("0", "待抽取"), + ALREADY_EXTRACTED("1", "已抽取"), + SUSPENSION("2", "中止"), + ; + + private String code; + private String describe; + + StatusEnum(String code, String describe) { + this.code = code; + this.describe = describe; + + } + + public String getCode() { + return code; + } + + public void setCode(String code) { + this.code = code; + } + + public String getDescribe() { + return describe; + } + + public void setDescribe(String describe) { + this.describe = describe; + } + } + + public enum TypeEnum { + //发布类型 + SYSTEM("0", "系统"), + ONESELF("1", "自建"), + ; + + private String code; + private String describe; + + TypeEnum(String code, String describe) { + this.code = code; + this.describe = describe; + + } + + public String getCode() { + return code; + } + + public void setCode(String code) { + this.code = code; + } + + public String getDescribe() { + return describe; + } + + public void setDescribe(String describe) { + this.describe = describe; + } + } + + + + @Data + public static class BaseParam { + @ApiModelProperty("项目编号") + private String projectNumber; + + @ApiModelProperty("项目名称") + private String projectName; + + @ApiModelProperty("评标时间") + private LocalDateTime bidEvaluationTime; + + @ApiModelProperty("评标地点") + private String bidEvaluationLocation; + + @ApiModelProperty("代理机构") + private String agency; + + + public void setBidEvaluationTime(String bidEvaluationTime) { + try { + this.bidEvaluationTime = LocalDateTimeUtil.parse(bidEvaluationTime, "yyyy-MM-dd HH:mm:ss"); + }catch (Exception e){ + throw new DataException("日期格式错误,请使用yyyy-MM-dd HH:mm:ss格式"); + } + } + + } + + @Data + public static class AddParam extends BaseParam { + + } + + @Data + public static class EditParam extends BaseParam { + @ApiModelProperty("id") + private Integer id; + } + + @Data + public static class DeleteParam { + @ApiModelProperty("id") + private Integer id; + } + + @Data + public static class QueryListParam extends PageParam { + @ApiModelProperty("项目编号") + private String projectNumber; + + @ApiModelProperty("项目名称") + private String projectName; + + /** + * 权限控制 + */ + private String menuId="572406059134626629"; + } + + + @Data + public static class QueryResponse extends LotteryProject { + } + + + @Data + public static class AddReviewParam { + @ApiModelProperty("抽签项目id") + private String id; + + @ApiModelProperty("专家组别信息Json") + private List expertGroupInfo; + + } + + @Data + public static class ExpertGroupInfo { + @ApiModelProperty("组别code") + private String groupCode; + @ApiModelProperty("组别名称") + private String groupName; + + @ApiModelProperty("专家库人数") + private String numberOfExpert; + + @ApiModelProperty("抽取人数") + private String numberOfExtract; + + @ApiModelProperty("确认参加人数") + private String numberOfParticipants; + + } +} diff --git a/jnpf-tendering-server/src/main/resources/application.yml b/jnpf-tendering-server/src/main/resources/application.yml index 3039d14..bfce1a5 100644 --- a/jnpf-tendering-server/src/main/resources/application.yml +++ b/jnpf-tendering-server/src/main/resources/application.yml @@ -15,3 +15,8 @@ management: # 开启在线日志查看功能 logfile: enabled: true + +mybatis-plus: + # 自定义配置 + configuration: + map-underscore-to-camel-case: true diff --git a/pom.xml b/pom.xml index e3b5bee..81b56dc 100644 --- a/pom.xml +++ b/pom.xml @@ -24,5 +24,16 @@ + + io.springfox + springfox-swagger2 + 2.9.2 + + + swagger-models + io.swagger + + +