Browse Source

修改登录逻辑, 添加角色

master
ccsens_zhengzhichuan 1 month ago
parent
commit
b6fdee2fff
  1. 45
      research-admin/src/main/java/com/research/web/controller/client/project/ClientPrjProjInfoController.java
  2. 76
      research-admin/src/main/java/com/research/web/controller/client/project/CooperatorController.java
  3. 10
      research-admin/src/main/java/com/research/web/controller/client/project/GroupController.java
  4. 19
      research-admin/src/main/java/com/research/web/controller/client/tenant/TmsTenantController.java
  5. 44
      research-framework/src/main/java/com/research/framework/config/ApplicationConfig.java
  6. 69
      research-framework/src/main/java/com/research/framework/web/service/SysPermissionService.java
  7. 28
      research-framework/src/main/java/com/research/framework/web/service/UserDetailsServiceImpl.java
  8. 25
      research-system/src/main/java/com/research/system/domain/dto/ClientPrjProOrgDto.java
  9. 119
      research-system/src/main/java/com/research/system/domain/dto/ClientPrjProjInfoDto.java
  10. 29
      research-system/src/main/java/com/research/system/domain/dto/CommonDto.java
  11. 12
      research-system/src/main/java/com/research/system/domain/po/AchAchievement.java
  12. 56
      research-system/src/main/java/com/research/system/domain/po/AchAchievementExample.java
  13. 118
      research-system/src/main/java/com/research/system/domain/vo/ClientPrjProjInfoVo.java
  14. 4
      research-system/src/main/java/com/research/system/domain/vo/TmsLoginUserVo.java
  15. 18
      research-system/src/main/java/com/research/system/persist/dao/ClientPrjProOrgDao.java
  16. 22
      research-system/src/main/java/com/research/system/service/ClientPrjProjInfoService.java
  17. 33
      research-system/src/main/java/com/research/system/service/CooperatorService.java
  18. 13
      research-system/src/main/java/com/research/system/service/GroupService.java
  19. 127
      research-system/src/main/java/com/research/system/service/impl/ClientPrjProjInfoServiceImpl.java
  20. 177
      research-system/src/main/java/com/research/system/service/impl/CooperatorServiceImpl.java
  21. 44
      research-system/src/main/resources/mapper/dao/ClientPrjProOrgDao.xml
  22. 28
      research-system/src/main/resources/mapper/system/AchAchievementMapper.xml

45
research-admin/src/main/java/com/research/web/controller/client/project/ClientPrjProjInfoController.java

@ -0,0 +1,45 @@
package com.research.web.controller.client.project;
import com.github.pagehelper.PageInfo;
import com.research.common.core.domain.JsonResponse;
import com.research.system.domain.dto.ClientPrjProjInfoDto;
import com.research.system.domain.vo.ClientPrjProjInfoVo;
import com.research.system.service.ClientPrjProjInfoService;
import io.swagger.annotations.Api;
import lombok.extern.slf4j.Slf4j;
import org.springframework.validation.annotation.Validated;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import javax.annotation.Resource;
/**
* @Author zzc
* @Package com.research.web.controller.client.tenant
* @Date 2025/8/11 10:54
* @description:
*/
@Slf4j
@Api(tags = "填报端登录")
@RestController
@RequestMapping("/project")
public class ClientPrjProjInfoController {
@Resource
private ClientPrjProjInfoService clientPrjProjInfoService;
@PostMapping("/infor/upd")
public JsonResponse<Integer> aduit(@RequestBody @Validated ClientPrjProjInfoDto.Aduit dto){
clientPrjProjInfoService.aduit(dto);
return JsonResponse.ok();
}
@PostMapping("/infor/query")
public JsonResponse<PageInfo<ClientPrjProjInfoVo.Result>> query(){
return JsonResponse.ok(new PageInfo<>(clientPrjProjInfoService.query()));
}
}

76
research-admin/src/main/java/com/research/web/controller/client/project/CooperatorController.java

@ -0,0 +1,76 @@
package com.research.web.controller.client.project;
import com.github.pagehelper.PageHelper;
import com.github.pagehelper.PageInfo;
import com.research.common.core.domain.BaseDto;
import com.research.common.core.domain.JsonResponse;
import com.research.system.domain.dto.ClientPrjProOrgDto;
import com.research.system.domain.dto.ClientPrjProjInfoDto;
import com.research.system.domain.dto.CommonDto;
import com.research.system.domain.vo.ClientPrjProjInfoVo;
import com.research.system.service.CooperatorService;
import io.swagger.annotations.Api;
import liquibase.pro.packaged.J;
import lombok.extern.slf4j.Slf4j;
import org.springframework.validation.annotation.Validated;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import org.springframework.web.multipart.MultipartFile;
import javax.annotation.Resource;
import javax.servlet.http.HttpServletResponse;
import java.util.List;
/**
* @Author zzc
* @Package com.research.web.controller.client.project
* @Date 2025/8/11 13:53
* @description:
*/
@Slf4j
@Api(tags = "填报端登录")
@RestController
@RequestMapping("/cooperator")
public class CooperatorController {
@Resource
private CooperatorService cooperatorService;
@PostMapping("/query")
public JsonResponse<PageInfo<ClientPrjProjInfoVo.OrgVo>> query(@RequestBody @Validated BaseDto<ClientPrjProOrgDto.Query> dto){
PageHelper.startPage(dto.getPageNum(), dto.getPageSize());
return JsonResponse.ok(new PageInfo<>(cooperatorService.query(dto.getParam())));
}
@PostMapping("/add")
public JsonResponse<Integer> add(@RequestBody @Validated ClientPrjProjInfoDto.OrgDto dto){
cooperatorService.add(dto);
return JsonResponse.ok();
}
@PostMapping("/upd")
public JsonResponse<Integer> upd(@RequestBody @Validated ClientPrjProjInfoDto.OrgDto dto){
cooperatorService.update(dto);
return JsonResponse.ok();
}
@PostMapping("/del")
public JsonResponse<Integer> del(@RequestBody @Validated CommonDto.DelDto dto){
cooperatorService.delete(dto);
return JsonResponse.ok();
}
@PostMapping("/export")
public JsonResponse<Integer> exportOrg(HttpServletResponse response, @RequestBody @Validated ClientPrjProOrgDto.Query dto){
cooperatorService.exportOrg(response, dto);
return JsonResponse.ok();
}
@PostMapping("/import")
public JsonResponse<Integer> importOrg(MultipartFile file){
cooperatorService.importOrg(file);
return JsonResponse.ok();
}
@PostMapping("/template")
public JsonResponse<String> template(){
return JsonResponse.ok(cooperatorService.template());
}
}

10
research-admin/src/main/java/com/research/web/controller/client/project/GroupController.java

@ -0,0 +1,10 @@
package com.research.web.controller.client.project;
/**
* @Author zzc
* @Package com.research.web.controller.tenant
* @Date 2025/8/11 15:44
* @description:
*/
public class GroupController {
}

19
research-admin/src/main/java/com/research/web/controller/client/tenant/TmsTenantController.java

@ -1,19 +0,0 @@
package com.research.web.controller.client.tenant;
import io.swagger.annotations.Api;
import lombok.extern.slf4j.Slf4j;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
/**
* @Author zzc
* @Package com.research.web.controller.client.tenant
* @Date 2025/8/11 10:54
* @description:
*/
@Slf4j
@Api(tags = "填报端登录")
@RestController
@RequestMapping("/project")
public class TmsTenantController {
}

44
research-framework/src/main/java/com/research/framework/config/ApplicationConfig.java

@ -1,6 +1,19 @@
package com.research.framework.config;
import java.time.LocalDate;
import java.time.LocalDateTime;
import java.time.LocalTime;
import java.time.format.DateTimeFormatter;
import java.util.TimeZone;
import com.fasterxml.jackson.databind.SerializationFeature;
import com.fasterxml.jackson.databind.ser.std.ToStringSerializer;
import com.fasterxml.jackson.datatype.jsr310.deser.LocalDateDeserializer;
import com.fasterxml.jackson.datatype.jsr310.deser.LocalDateTimeDeserializer;
import com.fasterxml.jackson.datatype.jsr310.deser.LocalTimeDeserializer;
import com.fasterxml.jackson.datatype.jsr310.ser.LocalDateSerializer;
import com.fasterxml.jackson.datatype.jsr310.ser.LocalDateTimeSerializer;
import com.fasterxml.jackson.datatype.jsr310.ser.LocalTimeSerializer;
import org.mybatis.spring.annotation.MapperScan;
import org.springframework.boot.autoconfigure.jackson.Jackson2ObjectMapperBuilderCustomizer;
import org.springframework.context.annotation.Bean;
@ -23,8 +36,33 @@ public class ApplicationConfig
* 时区配置
*/
@Bean
public Jackson2ObjectMapperBuilderCustomizer jacksonObjectMapperCustomization()
{
return jacksonObjectMapperBuilder -> jacksonObjectMapperBuilder.timeZone(TimeZone.getDefault());
public Jackson2ObjectMapperBuilderCustomizer jacksonObjectMapperCustomization() {
// return jacksonObjectMapperBuilder -> jacksonObjectMapperBuilder.timeZone(TimeZone.getDefault());
return jacksonObjectMapperBuilder -> jacksonObjectMapperBuilder.timeZone(TimeZone.getDefault())
//包装类型Long
.serializerByType(Long.class, ToStringSerializer.instance)
//基本类型long不转换,一般是total之类的字段要用
// .serializerByType(Long.TYPE, ToStringSerializer.instance)
//日期类型序列化
.serializerByType(LocalDateTime.class,
new LocalDateTimeSerializer(DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss")))
.serializerByType(LocalDate.class,
new LocalDateSerializer(DateTimeFormatter.ofPattern("yyyy-MM-dd")))
.serializerByType(LocalTime.class,
new LocalTimeSerializer(DateTimeFormatter.ofPattern("HH:mm:ss")))
//日期类型反序列化
.deserializerByType(LocalDateTime.class,
new LocalDateTimeDeserializer(DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss")))
.deserializerByType(LocalDate.class,
new LocalDateDeserializer(DateTimeFormatter.ofPattern("yyyy-MM-dd")))
.deserializerByType(LocalTime.class,
new LocalTimeDeserializer(DateTimeFormatter.ofPattern("HH:mm:ss")))
.featuresToDisable(SerializationFeature.WRITE_DATES_AS_TIMESTAMPS)
//不包含空值
//.serializationInclusion(JsonInclude.Include.NON_NULL)
//指定日期格式
.simpleDateFormat("yyyy-MM-dd HH:mm:ss")
//忽略未知字段
.failOnUnknownProperties(false);
}
}

69
research-framework/src/main/java/com/research/framework/web/service/SysPermissionService.java

@ -3,6 +3,8 @@ package com.research.framework.web.service;
import java.util.HashSet;
import java.util.List;
import java.util.Set;
import com.research.system.domain.vo.TmsLoginUserVo;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;
import org.springframework.util.CollectionUtils;
@ -15,12 +17,11 @@ import com.research.system.service.ISysRoleService;
/**
* 用户权限处理
*
*
* @author research
*/
@Component
public class SysPermissionService
{
public class SysPermissionService {
@Autowired
private ISysRoleService roleService;
@ -29,20 +30,16 @@ public class SysPermissionService
/**
* 获取角色数据权限
*
*
* @param user 用户信息
* @return 角色权限信息
*/
public Set<String> getRolePermission(SysUser user)
{
public Set<String> getRolePermission(SysUser user) {
Set<String> roles = new HashSet<String>();
// 管理员拥有所有权限
if (user.isAdmin())
{
if (user.isAdmin()) {
roles.add("admin");
}
else
{
} else {
roles.addAll(roleService.selectRolePermissionByUserId(user.getUserId()));
}
return roles;
@ -50,39 +47,55 @@ public class SysPermissionService
/**
* 获取菜单数据权限
*
*
* @param user 用户信息
* @return 菜单权限信息
*/
public Set<String> getMenuPermission(SysUser user)
{
public Set<String> getMenuPermission(SysUser user) {
Set<String> perms = new HashSet<String>();
// 管理员拥有所有权限
if (user.isAdmin())
{
if (user.isAdmin()) {
perms.add("*:*:*");
}
else
{
} else {
List<SysRole> roles = user.getRoles();
if (!CollectionUtils.isEmpty(roles))
{
if (!CollectionUtils.isEmpty(roles)) {
// 多角色设置permissions属性,以便数据权限匹配权限
for (SysRole role : roles)
{
if (StringUtils.equals(role.getStatus(), UserConstants.ROLE_NORMAL) && !role.isAdmin())
{
for (SysRole role : roles) {
if (StringUtils.equals(role.getStatus(), UserConstants.ROLE_NORMAL) && !role.isAdmin()) {
Set<String> rolePerms = menuService.selectMenuPermsByRoleId(role.getRoleId());
role.setPermissions(rolePerms);
perms.addAll(rolePerms);
}
}
}
else
{
} else {
perms.addAll(menuService.selectMenuPermsByUserId(user.getUserId()));
}
}
return perms;
}
/**
* 获取菜单数据权限
*
* @param user 用户信息
* @return 菜单权限信息
*/
public Set<String> getMenuPermission(TmsLoginUserVo.DataScoreVo user) {
Set<String> perms = new HashSet<String>();
// 管理员拥有所有权限
List<SysRole> roles = user.getRoles();
if (!CollectionUtils.isEmpty(roles)) {
// 多角色设置permissions属性,以便数据权限匹配权限
for (SysRole role : roles) {
if (StringUtils.equals(role.getStatus(), UserConstants.ROLE_NORMAL) && !role.isAdmin()) {
Set<String> rolePerms = menuService.selectMenuPermsByRoleId(role.getRoleId());
role.setPermissions(rolePerms);
perms.addAll(rolePerms);
}
}
} else {
perms.addAll(menuService.selectMenuPermsByUserId(user.getDmsUserId()));
}
return perms;
}
}

28
research-framework/src/main/java/com/research/framework/web/service/UserDetailsServiceImpl.java

@ -1,9 +1,12 @@
package com.research.framework.web.service;
import cn.hutool.core.collection.CollUtil;
import com.research.common.core.domain.entity.SysRole;
import com.research.framework.datasource.DataSourceManager;
import com.research.framework.datasource.DynamicDataSourceContextHolder;
import com.research.system.domain.vo.TmsLoginUserVo;
import com.research.system.mapper.SysRoleMapper;
import com.research.system.service.ISysRoleService;
import com.research.system.service.TmsLoginService;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
@ -21,6 +24,8 @@ import com.research.common.utils.StringUtils;
import com.research.system.service.ISysUserService;
import javax.annotation.Resource;
import java.util.List;
import java.util.Set;
/**
* 用户验证处理
@ -44,6 +49,9 @@ public class UserDetailsServiceImpl implements UserDetailsService
@Resource
private TmsLoginService dmsLoginService;
@Resource
private SysRoleMapper roleMapper;
@Override
public UserDetails loadUserByUsername(String username) throws UsernameNotFoundException
{
@ -92,15 +100,21 @@ public class UserDetailsServiceImpl implements UserDetailsService
DynamicDataSourceContextHolder.setDataSourceType(dataScoreVo.getDataSourceKey());
//查询用户密码
SysUser sysUser = userService.selectUserByUserName(dataScoreVo.getUsername());
//销毁
DynamicDataSourceContextHolder.clearDataSourceType();
if (sysUser == null) {
DynamicDataSourceContextHolder.clearDataSourceType();
throw new ServiceException(MessageUtils.message("user.not.exists"));
}
//查询角色
List<SysRole> sysRoles = roleMapper.selectRolesByUserName(sysUser.getUserName());
dataScoreVo.setRoles(sysRoles);
//销毁
DynamicDataSourceContextHolder.clearDataSourceType();
dataScoreVo.setDmsUserNickName(sysUser.getNickName());
dataScoreVo.setPassword(sysUser.getPassword());
passwordService.validate(dataScoreVo);
return createLoginUser(dataScoreVo);
return createLoginUser(dataScoreVo, dataScoreVo.getDataSourceKey());
}
public UserDetails createLoginUser(SysUser user)
@ -108,12 +122,16 @@ public class UserDetailsServiceImpl implements UserDetailsService
return new LoginUser(user.getUserId(), user.getDeptId(), user, permissionService.getMenuPermission(user));
}
public UserDetails createLoginUser(TmsLoginUserVo.DataScoreVo user)
public UserDetails createLoginUser(TmsLoginUserVo.DataScoreVo user, String dataSourceKey)
{
SysUser sysUser = new SysUser();
sysUser.setUserName(user.getUsername());
sysUser.setPassword(user.getPassword());
sysUser.setUserId(user.getDmsUserId());
return new LoginUser(user.getDmsUserId(), user.getHospitalId(), sysUser, CollUtil.newHashSet(), user.getTenantId() ,user.getScoreId());
sysUser.setRoles(user.getRoles());
DynamicDataSourceContextHolder.setDataSourceType(dataSourceKey);
Set<String> menuPermission = permissionService.getMenuPermission(user);
DynamicDataSourceContextHolder.clearDataSourceType();
return new LoginUser(user.getDmsUserId(), user.getHospitalId(), sysUser, menuPermission, user.getTenantId() ,user.getScoreId());
}
}

25
research-system/src/main/java/com/research/system/domain/dto/ClientPrjProOrgDto.java

@ -0,0 +1,25 @@
package com.research.system.domain.dto;
import lombok.Data;
import javax.validation.constraints.NotNull;
import java.util.Date;
import java.util.List;
/**
* @Author zzc
* @Package com.research.system.domain.dto
* @Date 2025/8/11 10:57
* @description:
*/
public class ClientPrjProOrgDto {
@Data
public static class Query {
private String category;
private String orgName;
private String orgLeader;
private String orgLeaderPhone;
}
}

119
research-system/src/main/java/com/research/system/domain/dto/ClientPrjProjInfoDto.java

@ -0,0 +1,119 @@
package com.research.system.domain.dto;
import com.research.system.domain.po.PrjProjDocument;
import com.research.system.domain.po.PrjProjInfo;
import com.research.system.domain.po.PrjProjOrg;
import com.sun.org.apache.xpath.internal.operations.Or;
import lombok.Data;
import javax.validation.constraints.NotNull;
import java.util.Date;
import java.util.List;
/**
* @Author zzc
* @Package com.research.system.domain.dto
* @Date 2025/8/11 10:57
* @description:
*/
public class ClientPrjProjInfoDto {
@Data
public static class Aduit {
@NotNull(message = "ID不能为空")
private Long id;
private Long tenantId;
private String title;
private String titleEn;
private String code;
private String org;
private String leader;
private String leaderPhone;
private String leaderEmail;
private Date beginTime;
private Date endTime;
private String intro;
private String fundingCategory;
private String fundingCategorySub;
private String fundingCategoryDeputy;
private String funding;
private String projSource;
private String projCatgegory;
private String createBy;
private Date createTime;
private String updateBy;
private Date updateTime;
private String remark;
private List<OrgDto> PrjProjOrgList;
private List<DocumentDto> PrjProjDocumentList;
}
@Data
public static class OrgDto{
private Long id;
private Long projId;
private Byte category;
private Integer sort;
private String orgName;
private String orgLeader;
private String orgLeaderPhone;
private String orgLeaderEmail;
private String projRespIntro;
private String orgIntro;
}
@Data
public static class DocumentDto{
private Long id;
private Long projId;
private String docName;
private String docType;
private String docVisitPath;
private String docPreviewImg;
private String docLabels;
private String uploader;
private String uploadTime;
}
}

29
research-system/src/main/java/com/research/system/domain/dto/CommonDto.java

@ -0,0 +1,29 @@
package com.research.system.domain.dto;
import lombok.Data;
import javax.validation.constraints.NotNull;
import javax.validation.constraints.Size;
import java.util.List;
/**
* @Author zzc
* @Package com.research.system.domain.dto
* @Date 2025/8/11 13:56
* @description:
*/
public class CommonDto {
@Data
public static class IdDto{
private Long id;
}
@Data
public static class DelDto{
@NotNull(message = "ID不能为空")
@Size(min = 1, message = "ID不能为空")
private List<Long> idList;
}
}

12
research-system/src/main/java/com/research/system/domain/po/AchAchievement.java

@ -42,7 +42,7 @@ public class AchAchievement implements Serializable {
private Byte ysktStatus;
private String abstract;
private String abstracts;
private String keywords;
@ -218,12 +218,12 @@ public class AchAchievement implements Serializable {
this.ysktStatus = ysktStatus;
}
public String getAbstract() {
return abstract;
public String getAbstracts() {
return abstracts;
}
public void setAbstract(String abstract) {
this.abstract = abstract == null ? null : abstract.trim();
public void setAbstracts(String abstracts) {
this.abstracts = abstracts == null ? null : abstracts.trim();
}
public String getKeywords() {
@ -331,7 +331,7 @@ public class AchAchievement implements Serializable {
sb.append(", ysktFunds=").append(ysktFunds);
sb.append(", ysktLxpzwh=").append(ysktLxpzwh);
sb.append(", ysktStatus=").append(ysktStatus);
sb.append(", abstract=").append(abstract);
sb.append(", abstracts=").append(abstracts);
sb.append(", keywords=").append(keywords);
sb.append(", paperLink=").append(paperLink);
sb.append(", pdfDownloadUrl=").append(pdfDownloadUrl);

56
research-system/src/main/java/com/research/system/domain/po/AchAchievementExample.java

@ -1352,73 +1352,73 @@ public class AchAchievementExample {
return (Criteria) this;
}
public Criteria andAbstractIsNull() {
addCriterion("abstract is null");
public Criteria andAbstractsIsNull() {
addCriterion("abstracts is null");
return (Criteria) this;
}
public Criteria andAbstractIsNotNull() {
addCriterion("abstract is not null");
public Criteria andAbstractsIsNotNull() {
addCriterion("abstracts is not null");
return (Criteria) this;
}
public Criteria andAbstractEqualTo(String value) {
addCriterion("abstract =", value, "abstract");
public Criteria andAbstractsEqualTo(String value) {
addCriterion("abstracts =", value, "abstracts");
return (Criteria) this;
}
public Criteria andAbstractNotEqualTo(String value) {
addCriterion("abstract <>", value, "abstract");
public Criteria andAbstractsNotEqualTo(String value) {
addCriterion("abstracts <>", value, "abstracts");
return (Criteria) this;
}
public Criteria andAbstractGreaterThan(String value) {
addCriterion("abstract >", value, "abstract");
public Criteria andAbstractsGreaterThan(String value) {
addCriterion("abstracts >", value, "abstracts");
return (Criteria) this;
}
public Criteria andAbstractGreaterThanOrEqualTo(String value) {
addCriterion("abstract >=", value, "abstract");
public Criteria andAbstractsGreaterThanOrEqualTo(String value) {
addCriterion("abstracts >=", value, "abstracts");
return (Criteria) this;
}
public Criteria andAbstractLessThan(String value) {
addCriterion("abstract <", value, "abstract");
public Criteria andAbstractsLessThan(String value) {
addCriterion("abstracts <", value, "abstracts");
return (Criteria) this;
}
public Criteria andAbstractLessThanOrEqualTo(String value) {
addCriterion("abstract <=", value, "abstract");
public Criteria andAbstractsLessThanOrEqualTo(String value) {
addCriterion("abstracts <=", value, "abstracts");
return (Criteria) this;
}
public Criteria andAbstractLike(String value) {
addCriterion("abstract like", value, "abstract");
public Criteria andAbstractsLike(String value) {
addCriterion("abstracts like", value, "abstracts");
return (Criteria) this;
}
public Criteria andAbstractNotLike(String value) {
addCriterion("abstract not like", value, "abstract");
public Criteria andAbstractsNotLike(String value) {
addCriterion("abstracts not like", value, "abstracts");
return (Criteria) this;
}
public Criteria andAbstractIn(List<String> values) {
addCriterion("abstract in", values, "abstract");
public Criteria andAbstractsIn(List<String> values) {
addCriterion("abstracts in", values, "abstracts");
return (Criteria) this;
}
public Criteria andAbstractNotIn(List<String> values) {
addCriterion("abstract not in", values, "abstract");
public Criteria andAbstractsNotIn(List<String> values) {
addCriterion("abstracts not in", values, "abstracts");
return (Criteria) this;
}
public Criteria andAbstractBetween(String value1, String value2) {
addCriterion("abstract between", value1, value2, "abstract");
public Criteria andAbstractsBetween(String value1, String value2) {
addCriterion("abstracts between", value1, value2, "abstracts");
return (Criteria) this;
}
public Criteria andAbstractNotBetween(String value1, String value2) {
addCriterion("abstract not between", value1, value2, "abstract");
public Criteria andAbstractsNotBetween(String value1, String value2) {
addCriterion("abstracts not between", value1, value2, "abstracts");
return (Criteria) this;
}

118
research-system/src/main/java/com/research/system/domain/vo/ClientPrjProjInfoVo.java

@ -0,0 +1,118 @@
package com.research.system.domain.vo;
import com.research.system.domain.dto.ClientPrjProjInfoDto;
import lombok.Data;
import java.util.Date;
import java.util.List;
/**
* @Author zzc
* @Package com.research.system.domain.vo
* @Date 2025/8/11 11:04
* @description:
*/
public class ClientPrjProjInfoVo {
@Data
public static class Result{
private Long id;
private Long tenantId;
private String title;
private String titleEn;
private String code;
private String org;
private String leader;
private String leaderPhone;
private String leaderEmail;
private Date beginTime;
private Date endTime;
private String intro;
private String fundingCategory;
private String fundingCategorySub;
private String fundingCategoryDeputy;
private String funding;
private String projSource;
private String projCatgegory;
private String createBy;
private Date createTime;
private String updateBy;
private Date updateTime;
private String remark;
private List<OrgVo> PrjProjOrgList;
private List<DocumentVo> PrjProjDocumentList;
}
@Data
public static class OrgVo{
private Long id;
private String title;
private Long projId;
private Byte category;
private Integer sort;
private String orgName;
private String orgLeader;
private String orgLeaderPhone;
private String orgLeaderEmail;
private String projRespIntro;
private String orgIntro;
private String createBy;
private Date createTime;
}
@Data
public static class DocumentVo{
private Long id;
private Long projId;
private String docName;
private String docType;
private String docVisitPath;
private String docPreviewImg;
private String docLabels;
private String uploader;
private String uploadTime;
}
}

4
research-system/src/main/java/com/research/system/domain/vo/TmsLoginUserVo.java

@ -1,9 +1,11 @@
package com.research.system.domain.vo;
import com.research.common.core.domain.entity.SysRole;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import java.util.Date;
import java.util.List;
/**
* @Author zzc
@ -84,5 +86,7 @@ public class TmsLoginUserVo {
private String delFlag;
@ApiModelProperty("")
private String status;
List<SysRole> roles;
}
}

18
research-system/src/main/java/com/research/system/persist/dao/ClientPrjProOrgDao.java

@ -0,0 +1,18 @@
package com.research.system.persist.dao;
import com.research.system.domain.dto.ClientPrjProOrgDto;
import com.research.system.domain.vo.ClientPrjProjInfoVo;
import org.apache.ibatis.annotations.Param;
import java.util.List;
/**
* @Author zzc
* @Package com.research.system.persist.dao
* @Date 2025/8/11 14:31
* @description:
*/
public interface ClientPrjProOrgDao {
List<ClientPrjProjInfoVo.OrgVo> query(@Param("dto") ClientPrjProOrgDto.Query dto, @Param("tenantId") Long tenantId);
}

22
research-system/src/main/java/com/research/system/service/ClientPrjProjInfoService.java

@ -0,0 +1,22 @@
package com.research.system.service;
import com.research.system.domain.dto.ClientPrjProjInfoDto;
import com.research.system.domain.po.PrjProjInfo;
import com.research.system.domain.vo.ClientPrjProjInfoVo;
import java.util.List;
/**
* @Author zzc
* @Package com.research.system.service
* @Date 2025/8/11 10:57
* @description:
*/
public interface ClientPrjProjInfoService {
void aduit(ClientPrjProjInfoDto.Aduit dto);
List<ClientPrjProjInfoVo.Result> query();
PrjProjInfo getProInfoByTenantId(Long tenantId);
}

33
research-system/src/main/java/com/research/system/service/CooperatorService.java

@ -0,0 +1,33 @@
package com.research.system.service;
import com.research.system.domain.dto.ClientPrjProOrgDto;
import com.research.system.domain.dto.ClientPrjProjInfoDto;
import com.research.system.domain.dto.CommonDto;
import com.research.system.domain.vo.ClientPrjProjInfoVo;
import org.springframework.web.multipart.MultipartFile;
import javax.servlet.http.HttpServletResponse;
import java.util.List;
/**
* @Author zzc
* @Package com.research.system.service
* @Date 2025/8/11 13:53
* @description:
*/
public interface CooperatorService {
List<ClientPrjProjInfoVo.OrgVo> query(ClientPrjProOrgDto.Query dto);
void add(ClientPrjProjInfoDto.OrgDto dto);
void update(ClientPrjProjInfoDto.OrgDto dto);
void delete(CommonDto.DelDto dto);
void exportOrg(HttpServletResponse response, ClientPrjProOrgDto.Query dto);
void importOrg(MultipartFile file);
String template();
}

13
research-system/src/main/java/com/research/system/service/GroupService.java

@ -0,0 +1,13 @@
package com.research.system.service;
/**
* @Author zzc
* @Package com.research.system.service
* @Date 2025/8/11 15:44
* @description:
*/
public interface GroupService {
}

127
research-system/src/main/java/com/research/system/service/impl/ClientPrjProjInfoServiceImpl.java

@ -0,0 +1,127 @@
package com.research.system.service.impl;
import cn.hutool.core.bean.BeanUtil;
import cn.hutool.core.collection.CollUtil;
import cn.hutool.core.collection.CollectionUtil;
import cn.hutool.core.util.IdUtil;
import com.research.common.utils.SecurityUtils;
import com.research.system.domain.dto.ClientPrjProjInfoDto;
import com.research.system.domain.po.*;
import com.research.system.domain.vo.ClientPrjProjInfoVo;
import com.research.system.persist.mapper.PrjProjDocumentMapper;
import com.research.system.persist.mapper.PrjProjInfoMapper;
import com.research.system.persist.mapper.PrjProjOrgMapper;
import com.research.system.service.ClientPrjProjInfoService;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Propagation;
import org.springframework.transaction.annotation.Transactional;
import javax.annotation.Resource;
import java.util.Date;
import java.util.List;
/**
* @Author zzc
* @Package com.research.system.service.impl
* @Date 2025/8/11 11:05
* @description:
*/
@Service
@Transactional(propagation = Propagation.REQUIRED, rollbackFor = Exception.class)
public class ClientPrjProjInfoServiceImpl implements ClientPrjProjInfoService {
@Resource
private PrjProjInfoMapper prjProjInfoMapper;
@Resource
private PrjProjOrgMapper prjProjOrgMapper;
@Resource
private PrjProjDocumentMapper prjProjDocumentMapper;
@Override
public void aduit(ClientPrjProjInfoDto.Aduit dto) {
PrjProjInfo prjProjInfo = BeanUtil.copyProperties(dto, PrjProjInfo.class);
prjProjInfoMapper.updateByPrimaryKeySelective(prjProjInfo);
//删除文书
PrjProjDocumentExample prjProjDocumentExample = new PrjProjDocumentExample();
prjProjDocumentExample.createCriteria().andProjIdEqualTo(dto.getId());
List<PrjProjDocument> prjProjDocuments = prjProjDocumentMapper.selectByExample(prjProjDocumentExample);
if (CollUtil.isNotEmpty(prjProjDocuments)) {
for (PrjProjDocument prjProjDocument : prjProjDocuments) {
prjProjDocumentMapper.deleteByPrimaryKey(prjProjDocument.getId());
}
}
//删除合作单位
PrjProjOrgExample prjProjOrgExample = new PrjProjOrgExample();
prjProjOrgExample.createCriteria().andProjIdEqualTo(dto.getId());
List<PrjProjOrg> prjProjOrgs = prjProjOrgMapper.selectByExample(prjProjOrgExample);
if (CollUtil.isNotEmpty(prjProjOrgs)) {
for (PrjProjOrg prjProjOrg : prjProjOrgs) {
prjProjOrgMapper.deleteByPrimaryKey(prjProjOrg.getId());
}
}
//添加文书
if (CollUtil.isNotEmpty(dto.getPrjProjDocumentList())) {
List<PrjProjDocument> prjProjDocuments1 = BeanUtil.copyToList(dto.getPrjProjDocumentList(), PrjProjDocument.class);
for (PrjProjDocument document : prjProjDocuments1) {
document.setId(IdUtil.getSnowflake().nextId());
document.setProjId(dto.getId());
document.setCreateBy(SecurityUtils.getUsername());
document.setCreateTime(new Date());
prjProjDocumentMapper.insertSelective(document);
}
}
//添加合作单位
if (CollUtil.isNotEmpty(dto.getPrjProjOrgList())) {
List<PrjProjOrg> prjProjOrgs1 = BeanUtil.copyToList(dto.getPrjProjOrgList(), PrjProjOrg.class);
for (PrjProjOrg prjProjOrg : prjProjOrgs1) {
prjProjOrg.setId(IdUtil.getSnowflake().nextId());
prjProjOrg.setProjId(dto.getId());
prjProjOrg.setCreateBy(SecurityUtils.getUsername());
prjProjOrg.setCreateTime(new Date());
prjProjOrgMapper.insertSelective(prjProjOrg);
}
}
}
@Override
public List<ClientPrjProjInfoVo.Result> query() {
List<PrjProjInfo> prjProjInfos = prjProjInfoMapper.selectByExample(new PrjProjInfoExample());
if (CollUtil.isNotEmpty(prjProjInfos)) {
List<ClientPrjProjInfoVo.Result> results = BeanUtil.copyToList(prjProjInfos, ClientPrjProjInfoVo.Result.class);
for (ClientPrjProjInfoVo.Result result : results) {
//查询合作单位
PrjProjOrgExample prjProjOrgExample = new PrjProjOrgExample();
prjProjOrgExample.createCriteria().andProjIdEqualTo(result.getId());
List<PrjProjOrg> prjProjOrgs = prjProjOrgMapper.selectByExample(prjProjOrgExample);
if (CollUtil.isNotEmpty(prjProjOrgs)) {
result.setPrjProjOrgList(BeanUtil.copyToList(prjProjOrgs, ClientPrjProjInfoVo.OrgVo.class));
}
//查询文书
PrjProjDocumentExample prjProjDocumentExample = new PrjProjDocumentExample();
prjProjDocumentExample.createCriteria().andProjIdEqualTo(result.getId());
List<PrjProjDocument> prjProjDocuments = prjProjDocumentMapper.selectByExample(prjProjDocumentExample);
if (CollUtil.isNotEmpty(prjProjDocuments)) {
result.setPrjProjDocumentList(BeanUtil.copyToList(prjProjDocuments, ClientPrjProjInfoVo.DocumentVo.class));
}
}
return results;
}
return null;
}
@Override
public PrjProjInfo getProInfoByTenantId(Long tenantId) {
PrjProjInfoExample prjProjInfoExample = new PrjProjInfoExample();
prjProjInfoExample.createCriteria().andTenantIdEqualTo(tenantId);
List<PrjProjInfo> prjProjInfos = prjProjInfoMapper.selectByExample(prjProjInfoExample);
if (CollUtil.isNotEmpty(prjProjInfos)) {
return prjProjInfos.get(0);
}
return null;
}
}

177
research-system/src/main/java/com/research/system/service/impl/CooperatorServiceImpl.java

@ -0,0 +1,177 @@
package com.research.system.service.impl;
import cn.hutool.core.bean.BeanUtil;
import cn.hutool.core.collection.CollUtil;
import cn.hutool.core.date.DateUtil;
import cn.hutool.core.io.IoUtil;
import cn.hutool.core.util.IdUtil;
import cn.hutool.core.util.StrUtil;
import cn.hutool.poi.excel.BigExcelWriter;
import cn.hutool.poi.excel.ExcelUtil;
import com.research.common.exception.base.BaseException;
import com.research.common.utils.SecurityUtils;
import com.research.system.domain.dto.ClientPrjProOrgDto;
import com.research.system.domain.dto.ClientPrjProjInfoDto;
import com.research.system.domain.dto.CommonDto;
import com.research.system.domain.po.PrjProjInfo;
import com.research.system.domain.po.PrjProjOrg;
import com.research.system.domain.po.PrjProjOrgExample;
import com.research.system.domain.vo.ClientPrjProjInfoVo;
import com.research.system.persist.dao.ClientPrjProOrgDao;
import com.research.system.persist.mapper.PrjProjOrgMapper;
import com.research.system.service.ClientPrjProjInfoService;
import com.research.system.service.CooperatorService;
import org.springframework.stereotype.Service;
import org.springframework.web.multipart.MultipartFile;
import javax.annotation.Resource;
import javax.servlet.ServletOutputStream;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;
/**
* @Author zzc
* @Package com.research.system.service.impl
* @Date 2025/8/11 13:58
* @description:
*/
@Service
public class CooperatorServiceImpl implements CooperatorService {
@Resource
private PrjProjOrgMapper prjProjOrgMapper;
@Resource
private ClientPrjProOrgDao prjProOrgDao;
@Resource
private ClientPrjProjInfoService clientPrjProjInfoService;
@Override
public List<ClientPrjProjInfoVo.OrgVo> query(ClientPrjProOrgDto.Query dto) {
return prjProOrgDao.query(dto, SecurityUtils.isAdmin(SecurityUtils.getUserId()) ? null : SecurityUtils.getTenantId());
}
@Override
public void add(ClientPrjProjInfoDto.OrgDto dto) {
//根据租户查询项目
PrjProjInfo proInfoByTenantId = clientPrjProjInfoService.getProInfoByTenantId(SecurityUtils.getTenantId());
if (proInfoByTenantId == null) {
throw new BaseException("未查询到租户");
}
PrjProjOrg prjProjOrg = BeanUtil.copyProperties(dto, PrjProjOrg.class);
prjProjOrg.setId(IdUtil.getSnowflakeNextId());
prjProjOrg.setProjId(proInfoByTenantId.getId());
prjProjOrg.setCreateBy(SecurityUtils.getUsername());
prjProjOrg.setCreateTime(new Date());
prjProjOrgMapper.insertSelective(prjProjOrg);
}
@Override
public void update(ClientPrjProjInfoDto.OrgDto dto) {
PrjProjOrg prjProjOrg = BeanUtil.copyProperties(dto, PrjProjOrg.class);
prjProjOrg.setProjId(SecurityUtils.getTenantId());
prjProjOrg.setUpdateBy(SecurityUtils.getUsername());
prjProjOrg.setUpdateTime(new Date());
prjProjOrgMapper.updateByPrimaryKeyWithBLOBs(prjProjOrg);
}
@Override
public void delete(CommonDto.DelDto dto) {
PrjProjOrgExample prjProjOrgExample = new PrjProjOrgExample();
prjProjOrgExample.createCriteria().andIdIn(dto.getIdList());
List<PrjProjOrg> prjProjOrgs = prjProjOrgMapper.selectByExample(prjProjOrgExample);
if (CollUtil.isNotEmpty(prjProjOrgs)) {
for (PrjProjOrg prjProjOrg : prjProjOrgs) {
prjProjOrg.setDelFlag((byte) 1);
prjProjOrgMapper.updateByPrimaryKeyWithBLOBs(prjProjOrg);
}
}
}
@Override
public void exportOrg(HttpServletResponse response, ClientPrjProOrgDto.Query dto) {
List<ClientPrjProjInfoVo.OrgVo> query = query(dto);
if (CollUtil.isEmpty(query)) {
throw new BaseException("暂无数据");
}
BigExcelWriter writer = new BigExcelWriter();
List<String> header = new ArrayList<>();
header.add("项目名称");
header.add("单位名称");
header.add("单位负责人");
header.add("负责人电话");
header.add("项目中承担任务简介");
header.add("单位简介");
writer.writeHeadRow(header);
int row = 0;
for (int i = 0; i < query.size(); i++) {
row += 1;
writer.writeCellValue(0, row, query.get(i).getProjId());
writer.writeCellValue(1, row, query.get(i).getOrgName());
writer.writeCellValue(2, row, query.get(i).getOrgLeader());
writer.writeCellValue(3, row, query.get(i).getOrgLeaderPhone());
writer.writeCellValue(4, row, query.get(i).getProjRespIntro());
writer.writeCellValue(5, row, query.get(i).getProjRespIntro());
}
String filename = StrUtil.format("合作单位-{}.xlsx", DateUtil.date().toString("yyyyMMdd"));
//response为HttpServletResponse对象
response.setContentType("application/vnd.ms-excel;charset=utf-8");
//test.xls是弹出下载对话框的文件名,不能为中文,中文请自行编码
response.setHeader("Content-Disposition", "attachment;filename=" + filename);
ServletOutputStream out = null;
try {
out = response.getOutputStream();
writer.flush(out);
} catch (
IOException e) {
e.printStackTrace();
} finally {
// 关闭writer,释放内存
writer.close();
//此处记得关闭输出Servlet流
IoUtil.close(out);
}
}
@Override
public void importOrg(MultipartFile file) {
PrjProjOrgExample prjProjOrgExample = new PrjProjOrgExample();
PrjProjOrg prjProjOrg1 = new PrjProjOrg();
prjProjOrg1.setDelFlag((byte) 1);
prjProjOrgMapper.updateByExampleSelective(prjProjOrg1, prjProjOrgExample);
try {
ExcelUtil.readBySax(file.getInputStream(), 0, (sheetIndex, rowIndex, rowList) -> {
if (rowIndex < 1) {
return;
}
PrjProjOrg prjProjOrg = new PrjProjOrg();
prjProjOrg.setId(IdUtil.getSnowflakeNextId());
prjProjOrg.setProjId(SecurityUtils.getTenantId());
prjProjOrg.setOrgName(rowList.get(0).toString());
prjProjOrg.setOrgLeader(rowList.get(1).toString());
prjProjOrg.setOrgLeaderPhone(rowList.get(2).toString());
prjProjOrg.setProjRespIntro(rowList.get(3).toString());
prjProjOrg.setOrgIntro(rowList.get(4).toString());
prjProjOrg.setCreateBy(SecurityUtils.getUsername());
prjProjOrg.setCreateTime(new Date());
prjProjOrgMapper.insertSelective(prjProjOrg);
});
} catch (Exception e) {
e.printStackTrace();
}
}
@Override
public String template() {
return "/profile/a.pdf";
}
}

44
research-system/src/main/resources/mapper/dao/ClientPrjProOrgDao.xml

@ -0,0 +1,44 @@
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.research.system.persist.dao.ClientPrjProOrgDao">
<select id="query" resultType="com.research.system.domain.vo.ClientPrjProjInfoVo$OrgVo">
select
o.proj_id as projId,
o.id,
o.category,
o.sort,
o.org_name as orgName,
o.org_leader as orgLeader,
o.org_leader_phone as orgLeaderPhone,
o.org_leader_email as orgLeaderEmail,
o.proj_resp_intro as projRespIntro,
o.org_intro as orgIntro,
p.title,
o.create_by as createBy,
o.create_time as createTime
from
prj_proj_org o
left join
prj_proj_info p on o.proj_id = p.id
<where>
o.del_flag = 0
<if test="tenantId != null">
and p.tenant_id = #{tenantId}
</if>
<if test="dto.category != null and dto.category != ''">
and o.category = #{dto.category}
</if>
<if test="dto.orgName != null and dto.orgName != ''">
and o.org_name like concat('%',#{dto.orgName},'%')
</if>
<if test="dto.orgLeader != null and dto.orgLeader != ''">
and o.org_leader like concat('%',#{dto.orgLeader},'%')
</if>
<if test="dto.orgLeaderPhone != null and dto.orgLeaderPhone != ''">
and o.org_leader_phone like concat('%',#{dto.orgLeaderPhone},'%')
</if>
</where>
</select>
</mapper>

28
research-system/src/main/resources/mapper/system/AchAchievementMapper.xml

@ -21,7 +21,7 @@
<result column="yskt_funds" jdbcType="VARCHAR" property="ysktFunds" />
<result column="yskt_lxpzwh" jdbcType="VARCHAR" property="ysktLxpzwh" />
<result column="yskt_status" jdbcType="TINYINT" property="ysktStatus" />
<result column="abstract" jdbcType="VARCHAR" property="abstract" />
<result column="abstracts" jdbcType="VARCHAR" property="abstracts" />
<result column="keywords" jdbcType="VARCHAR" property="keywords" />
<result column="paper_link" jdbcType="VARCHAR" property="paperLink" />
<result column="pdf_download_url" jdbcType="VARCHAR" property="pdfDownloadUrl" />
@ -94,7 +94,7 @@
<sql id="Base_Column_List">
id, proj_id, proj_org_id, kt_group_id, category_id_1, category_id_2, title, no, authors,
apply_date, publish_date, place, ach_type, source, paper_source_type, yskt_xmfzr,
yskt_funds, yskt_lxpzwh, yskt_status, abstract, keywords, paper_link, pdf_download_url,
yskt_funds, yskt_lxpzwh, yskt_status, abstracts, keywords, paper_link, pdf_download_url,
commitment_letter_url, del_flag, create_by, create_time, update_by, update_time,
remark
</sql>
@ -129,7 +129,7 @@
apply_date, publish_date, place,
ach_type, source, paper_source_type,
yskt_xmfzr, yskt_funds, yskt_lxpzwh,
yskt_status, abstract, keywords,
yskt_status, abstracts, keywords,
paper_link, pdf_download_url, commitment_letter_url,
del_flag, create_by, create_time,
update_by, update_time, remark
@ -140,7 +140,7 @@
#{applyDate,jdbcType=DATE}, #{publishDate,jdbcType=DATE}, #{place,jdbcType=VARCHAR},
#{achType,jdbcType=TINYINT}, #{source,jdbcType=VARCHAR}, #{paperSourceType,jdbcType=TINYINT},
#{ysktXmfzr,jdbcType=VARCHAR}, #{ysktFunds,jdbcType=VARCHAR}, #{ysktLxpzwh,jdbcType=VARCHAR},
#{ysktStatus,jdbcType=TINYINT}, #{abstract,jdbcType=VARCHAR}, #{keywords,jdbcType=VARCHAR},
#{ysktStatus,jdbcType=TINYINT}, #{abstracts,jdbcType=VARCHAR}, #{keywords,jdbcType=VARCHAR},
#{paperLink,jdbcType=VARCHAR}, #{pdfDownloadUrl,jdbcType=VARCHAR}, #{commitmentLetterUrl,jdbcType=VARCHAR},
#{delFlag,jdbcType=TINYINT}, #{createBy,jdbcType=VARCHAR}, #{createTime,jdbcType=TIMESTAMP},
#{updateBy,jdbcType=VARCHAR}, #{updateTime,jdbcType=TIMESTAMP}, #{remark,jdbcType=VARCHAR}
@ -206,8 +206,8 @@
<if test="ysktStatus != null">
yskt_status,
</if>
<if test="abstract != null">
abstract,
<if test="abstracts != null">
abstracts,
</if>
<if test="keywords != null">
keywords,
@ -298,8 +298,8 @@
<if test="ysktStatus != null">
#{ysktStatus,jdbcType=TINYINT},
</if>
<if test="abstract != null">
#{abstract,jdbcType=VARCHAR},
<if test="abstracts != null">
#{abstracts,jdbcType=VARCHAR},
</if>
<if test="keywords != null">
#{keywords,jdbcType=VARCHAR},
@ -399,8 +399,8 @@
<if test="record.ysktStatus != null">
yskt_status = #{record.ysktStatus,jdbcType=TINYINT},
</if>
<if test="record.abstract != null">
abstract = #{record.abstract,jdbcType=VARCHAR},
<if test="record.abstracts != null">
abstracts = #{record.abstracts,jdbcType=VARCHAR},
</if>
<if test="record.keywords != null">
keywords = #{record.keywords,jdbcType=VARCHAR},
@ -458,7 +458,7 @@
yskt_funds = #{record.ysktFunds,jdbcType=VARCHAR},
yskt_lxpzwh = #{record.ysktLxpzwh,jdbcType=VARCHAR},
yskt_status = #{record.ysktStatus,jdbcType=TINYINT},
abstract = #{record.abstract,jdbcType=VARCHAR},
abstracts = #{record.abstracts,jdbcType=VARCHAR},
keywords = #{record.keywords,jdbcType=VARCHAR},
paper_link = #{record.paperLink,jdbcType=VARCHAR},
pdf_download_url = #{record.pdfDownloadUrl,jdbcType=VARCHAR},
@ -530,8 +530,8 @@
<if test="ysktStatus != null">
yskt_status = #{ysktStatus,jdbcType=TINYINT},
</if>
<if test="abstract != null">
abstract = #{abstract,jdbcType=VARCHAR},
<if test="abstracts != null">
abstracts = #{abstracts,jdbcType=VARCHAR},
</if>
<if test="keywords != null">
keywords = #{keywords,jdbcType=VARCHAR},
@ -586,7 +586,7 @@
yskt_funds = #{ysktFunds,jdbcType=VARCHAR},
yskt_lxpzwh = #{ysktLxpzwh,jdbcType=VARCHAR},
yskt_status = #{ysktStatus,jdbcType=TINYINT},
abstract = #{abstract,jdbcType=VARCHAR},
abstracts = #{abstracts,jdbcType=VARCHAR},
keywords = #{keywords,jdbcType=VARCHAR},
paper_link = #{paperLink,jdbcType=VARCHAR},
pdf_download_url = #{pdfDownloadUrl,jdbcType=VARCHAR},

Loading…
Cancel
Save