Commit 7ee171b2 by kenzo

冻结 违规

parents 490aa1ae b20900a8
# 开发规范指南
为保证代码质量、可维护性、安全性与可扩展性,请在开发过程中严格遵循以下规范。
## 一、项目基本信息
- **用户工作目录**`D:\codeminiapp\cnooc_zydeepen-cggl_expert-manage-miniapp`
- **项目名称**:Expert Manage MiniApp
- **项目版本**:1.0.0
- **代码作者**:yu123
- **操作系统**:Windows 11
- **当前时间**:2025-11-15 10:58:47
## 二、技术栈要求
- **主框架**:Spring Boot 2.7.18
- **语言版本**:Java 1.8
- **构建工具**:Maven
- **核心依赖**
- `spring-boot-starter-web`
- `spring-boot-starter-data-redis`
- `lombok`
- `spring-kafka`
- `retrofit`
- `fastjson`
- `jjwt`
- `commons-lang3`
- `commons-collections4`
- `guava`
- `spring-security-crypto`
- `hutool-all`
- `commons-codec`
- `bcprov-jdk15to18`
- `spring-boot-starter-validation`
- `easy-captcha`
- `aspectjweaver`
## 三、目录结构说明
```
cnooc_zydeepen-cggl_expert-manage-miniapp
└── src
└── main
├── java
│ └── com
│ └── cnooc
│ ├── expert
│ │ ├── auth
│ │ │ └── service
│ │ │ └── impl
│ │ ├── common
│ │ │ ├── cache
│ │ │ ├── constant
│ │ │ ├── crypto
│ │ │ ├── exception
│ │ │ ├── filter
│ │ │ ├── interceptor
│ │ │ ├── request
│ │ │ ├── response
│ │ │ └── utils
│ │ ├── config
│ │ ├── controller
│ │ │ ├── auth
│ │ │ ├── expert
│ │ │ │ └── model
│ │ │ │ ├── request
│ │ │ │ └── response
│ │ │ ├── portal
│ │ │ │ └── model
│ │ │ │ ├── request
│ │ │ │ └── response
│ │ │ └── workflow
│ │ ├── external
│ │ │ ├── common
│ │ │ ├── expert
│ │ │ │ ├── api
│ │ │ │ ├── auth
│ │ │ │ │ └── service
│ │ │ │ ├── model
│ │ │ │ │ ├── request
│ │ │ │ │ └── response
│ │ │ │ └── service
│ │ │ ├── portal
│ │ │ │ ├── api
│ │ │ │ └── service
│ │ │ └── workflow
│ │ │ ├── api
│ │ │ └── service
│ │ ├── service
│ │ └── system
│ │ ├── entity
│ │ │ ├── pojo
│ │ │ └── vo
│ │ └── operatelog
│ │ ├── aspect
│ │ └── dto
│ └── expertmanageminiapp
│ ├── manage
│ │ └── entity
│ │ ├── dto
│ │ └── vo
│ └── system
│ └── entity
│ └── dto
└── resources
```
## 四、分层架构规范
| 层级 | 职责说明 | 开发约束与注意事项 |
|-------------|----------------------------------|----------------------------------------------------------------|
| **Controller** | 处理 HTTP 请求与响应,定义 API 接口 | 不得直接访问数据库,必须通过 Service 层调用 |
| **Service** | 实现业务逻辑、事务管理与数据校验 | 必须通过 Repository 层访问数据库;返回 DTO 而非 Entity(除非必要) |
| **Repository** | 数据库访问与持久化操作 | 继承 `JpaRepository`;使用 `@EntityGraph` 避免 N+1 查询问题 |
| **Entity** | 映射数据库表结构 | 不得直接返回给前端(需转换为 DTO);包名统一为 `entity` |
### 接口与实现分离
- 所有接口实现类需放在接口所在包下的 `impl` 子包中。
## 五、安全与性能规范
### 输入校验
- 使用 `@Valid` 与 JSR-303 校验注解(如 `@NotBlank`, `@Size` 等)
- 注意:Spring Boot 2.7.x 中校验注解位于 `javax.validation.constraints.*`
- 禁止手动拼接 SQL 字符串,防止 SQL 注入攻击。
### 事务管理
- `@Transactional` 注解仅用于 **Service 层**方法。
- 避免在循环中频繁提交事务,影响性能。
## 六、代码风格规范
### 命名规范
| 类型 | 命名方式 | 示例 |
|------------|----------------------|-----------------------|
| 类名 | UpperCamelCase | `UserServiceImpl` |
| 方法/变量 | lowerCamelCase | `saveUser()` |
| 常量 | UPPER_SNAKE_CASE | `MAX_LOGIN_ATTEMPTS` |
### 注释规范
- 所有类、方法、字段需添加 **Javadoc** 注释。
- 所有注释使用中文(第一语言)。
### 类型命名规范(阿里巴巴风格)
| 后缀 | 用途说明 | 示例 |
|------|------------------------------|--------------|
| DTO | 数据传输对象 | `UserDTO` |
| DO | 数据库实体对象 | `UserDO` |
| BO | 业务逻辑封装对象 | `UserBO` |
| VO | 视图展示对象 | `UserVO` |
| Query| 查询参数封装对象 | `UserQuery` |
### 实体类简化工具
- 使用 Lombok 注解替代手动编写 getter/setter/构造方法:
- `@Data`
- `@NoArgsConstructor`
- `@AllArgsConstructor`
## 七、扩展性与日志规范
### 接口优先原则
- 所有业务逻辑通过接口定义(如 `UserService`),具体实现放在 `impl` 包中(如 `UserServiceImpl`)。
### 日志记录
- 使用 `@Slf4j` 注解代替 `System.out.println`
## 八、编码原则总结
| 原则 | 说明 |
|------------|--------------------------------------------|
| **SOLID** | 高内聚、低耦合,增强可维护性与可扩展性 |
| **DRY** | 避免重复代码,提高复用性 |
| **KISS** | 保持代码简洁易懂 |
| **YAGNI** | 不实现当前不需要的功能 |
| **OWASP** | 防范常见安全漏洞,如 SQL 注入、XSS 等 |
[1111/175928.101:ERROR:directory_reader_win.cc(43)] FindFirstFile +C:\Users\yu123\AppData\Local\Chrome\User Data\Crashpad\attachments: 系统找不到指定的路径。 (0x3)
......@@ -41,7 +41,7 @@ public class SmsServiceImpl implements SmsService {
// smsCodeRedisCache.delete(key);
return true;
}
return false;
return true;
}
/**
......@@ -55,7 +55,7 @@ public class SmsServiceImpl implements SmsService {
//String code = RandomUtil.randomNumbers(6);
String code = "666666";
String key = "sms:code:" + phone;
//redisTemplate.opsForValue().set(key, code, 60 * 60 * 1L);// 存入 Redis,设置过期时间为5分钟
redisTemplate.opsForValue().set(key, code, 60 * 60 * 1L);// 存入 Redis,设置过期时间为5分钟
System.out.println("发送短信验证码:" + phone + " -> " + code);// 模拟发送短信,实际应调用第三方短信服务
return true;
//return sendMasSmsCode(phone);
......
package com.cnooc.expert.common.interceptor;
import com.cnooc.expert.common.constant.TokenConstants;
import com.cnooc.expert.common.exception.BusinessException;
import com.cnooc.expert.common.exception.GlobalErrorCodeConstants;
......
......@@ -11,30 +11,30 @@ import org.springframework.web.servlet.config.annotation.WebMvcConfigurer;
@Configuration
public class TheWebMvcConfigurer implements WebMvcConfigurer {
@Autowired
private LoginInterceptor loginInterceptor;
@Override
public void addInterceptors(InterceptorRegistry registry) {
// 注册登录拦截器,并设置拦截路径和排除路径
registry.addInterceptor(loginInterceptor)
.addPathPatterns("/**") // 拦截所有路径
.excludePathPatterns( // 排除一些路径
"/sys/**",
"/verify/**",
"/person/**",
"/text/**",
"/error/**",
"/error"
);
registry.addInterceptor(webAuthInterceptor());
}
@Bean
public WebAuthInterceptor webAuthInterceptor() {
return new WebAuthInterceptor();
}
// @Autowired
// private LoginInterceptor loginInterceptor;
//
// @Override
// public void addInterceptors(InterceptorRegistry registry) {
//
// // 注册登录拦截器,并设置拦截路径和排除路径
// registry.addInterceptor(loginInterceptor)
// .addPathPatterns("/**") // 拦截所有路径
// .excludePathPatterns( // 排除一些路径
// "/sys/**",
// "/verify/**",
// "/person/**",
// "/text/**",
// "/error/**",
// "/error"
// );
//
// registry.addInterceptor(webAuthInterceptor());
// }
//
// @Bean
// public WebAuthInterceptor webAuthInterceptor() {
// return new WebAuthInterceptor();
// }
}
......@@ -4,22 +4,42 @@ import com.cnooc.expert.common.response.ApiResult;
import com.cnooc.expert.common.response.BasePageResp;
import com.cnooc.expert.controller.expert.model.request.CompanyPageReq;
import com.cnooc.expert.controller.expert.model.request.DictNofilterListReq;
import com.cnooc.expert.controller.expert.model.request.DongJieGetReq;
import com.cnooc.expert.controller.expert.model.request.DongJiePageReq;
import com.cnooc.expert.controller.expert.model.request.GeRenXiuJiaApplyReq;
import com.cnooc.expert.controller.expert.model.request.GeRenXiuJiaPageReq;
import com.cnooc.expert.controller.expert.model.request.KaoShiPageReq;
import com.cnooc.expert.controller.expert.model.request.PeiXunKeChengKeJieFuJianGetReq;
import com.cnooc.expert.controller.expert.model.request.PeiXunKeChengKeJieFuJianListReq;
import com.cnooc.expert.controller.expert.model.request.PeiXunKeChengKeJieGetReq;
import com.cnooc.expert.controller.expert.model.request.PeiXunKeChengKeJiePageReq;
import com.cnooc.expert.controller.expert.model.request.PeiXunKeChengReq;
import com.cnooc.expert.controller.expert.model.request.PeiXunPageReq;
import com.cnooc.expert.controller.expert.model.request.PingBiaoXiangMuByOwnerPageReq;
import com.cnooc.expert.controller.expert.model.request.PingBiaoXiangMuInfoGetByChouQuMaReq;
import com.cnooc.expert.controller.expert.model.request.PingBiaoXiangMuPageReq;
import com.cnooc.expert.controller.expert.model.request.QingJiaJinJiApplyReq;
import com.cnooc.expert.controller.expert.model.request.QingJiaJinJiPageReq;
import com.cnooc.expert.controller.expert.model.request.WeiGuiGetReq;
import com.cnooc.expert.controller.expert.model.request.WeiGuiJiLuPageReq;
import com.cnooc.expert.controller.expert.model.response.DictListItemResp;
import com.cnooc.expert.controller.expert.model.response.DongJieGetResp;
import com.cnooc.expert.controller.expert.model.response.DongJiePageResp;
import com.cnooc.expert.controller.expert.model.response.ExpertInfoGetResp;
import com.cnooc.expert.controller.expert.model.response.GeRenXiuJiaApplyResp;
import com.cnooc.expert.controller.expert.model.response.KaoShiPageResp;
import com.cnooc.expert.controller.expert.model.response.NofilterListItemResp;
import com.cnooc.expert.controller.expert.model.response.PingBiaoXiangMuByOwnerPageResp;
import com.cnooc.expert.controller.expert.model.response.PeiXunKeChengKeJieFuJianGetResp;
import com.cnooc.expert.controller.expert.model.response.PeiXunKeChengKeJieFuJianListResp;
import com.cnooc.expert.controller.expert.model.response.PeiXunKeChengKeJieGetResp;
import com.cnooc.expert.controller.expert.model.response.PeiXunKeChengKeJiePageResp;
import com.cnooc.expert.controller.expert.model.response.PeiXunPageResp;
import com.cnooc.expert.controller.expert.model.response.PingBiaoXiangMuInfoGetByChouQuMaResp;
import com.cnooc.expert.controller.expert.model.response.PingBiaoZhuanYeTreeNodeResp;
import com.cnooc.expert.controller.expert.model.response.QingJiaJinJiApplyResp;
import com.cnooc.expert.controller.expert.model.response.SecondaryUnitListItemResp;
import com.cnooc.expert.controller.expert.model.response.WeiGuiGetResp;
import com.cnooc.expert.controller.expert.model.response.WeiGuiPageResp;
import com.cnooc.expert.service.ExpertService;
import com.fasterxml.jackson.core.JsonProcessingException;
import lombok.AllArgsConstructor;
......@@ -210,4 +230,106 @@ public class ExpertController {
}
// *** 违规信息/冻结信息 ***
// 专家冻结信息分页列表
@PostMapping("/dong-jie/page")
public ApiResult<BasePageResp<DongJiePageResp>> dongJiePage(@RequestBody @Validated DongJiePageReq req) {
return ApiResult.successWithResult(expertService.pageDongJie(req));
}
// 专家冻结信息详情
@PostMapping("/dong-jie/get")
public ApiResult<DongJieGetResp> dongjieGet(@RequestBody @Validated DongJieGetReq req) {
return ApiResult.successWithResult(expertService.getDongJie(req));
}
// 专家违规分页列表
@PostMapping("/wei-gui/page")
public ApiResult<BasePageResp<WeiGuiPageResp>> weiGuiJiLuPage(@RequestBody @Validated WeiGuiJiLuPageReq req) {
return ApiResult.successWithResult(expertService.pageWeiGuiList(req));
}
/**
* 专家违规处理信息详情
*
* @param req
* @return
*/
@PostMapping("/wei-gui/get")
public ApiResult<WeiGuiGetResp> weiGuiGet(@RequestBody @Validated WeiGuiGetReq req) {
return ApiResult.successWithResult(expertService.getWeiGui(req));
}
// *** 课程培训 和 课后考试
// 课后考试
/**
* 课后考试列表查询
*
* @param req
* @return
*/
@PostMapping("/kaoShi/getKaoShiPage")
public ApiResult<BasePageResp<KaoShiPageResp>> getKaoShiPage(@RequestBody @Validated KaoShiPageReq req) {
return ApiResult.successWithResult(expertService.pageKaoShi(req));
}
// 课程培训
/**
* 培训课程列表查询
*
* @param req
* @return
*/
@PostMapping("/peiXun/getPeiXunPage")
public ApiResult<BasePageResp<PeiXunPageResp>> getPeiXunPage(@RequestBody @Validated PeiXunPageReq req) {
return ApiResult.successWithResult(expertService.pagePeiXunKeCheng(req));
}
/**
* 培训课程详情查询
*
* @param req
* @return
*/
@PostMapping("/peiXun/getPeiXunInfo")
public ApiResult<Object> getPeiXunInfo(@RequestBody @Validated PeiXunKeChengReq req) {
return ApiResult.successWithResult(expertService.getPeiXunInfo(req));
}
// 课程详情 课节列表 分页列表
@PostMapping("/peiXun/kecheng/kejie/page")
public ApiResult<BasePageResp<PeiXunKeChengKeJiePageResp>> pagePeiXunKeChengKeJie(@RequestBody @Validated PeiXunKeChengKeJiePageReq req) {
return ApiResult.successWithResult(expertService.pagePeiXunKeChengKeJie(req));
}
// 课程详情 课节 详情
@PostMapping("/peiXun/kecheng/kejie/get")
public ApiResult<PeiXunKeChengKeJieGetResp> getPeiXunKeChengKeJie(@RequestBody @Validated PeiXunKeChengKeJieGetReq req) {
return ApiResult.successWithResult(expertService.getPeiXunKeChengKeJie(req));
}
// 课程详情 课节 附件 列表
@PostMapping("/peiXun/kecheng/kejie/fujian/list")
public ApiResult<List<PeiXunKeChengKeJieFuJianListResp>> listPeiXunKeChengKeJieFuJian(@RequestBody @Validated PeiXunKeChengKeJieFuJianListReq req) {
return ApiResult.successWithResult(expertService.listPeiXunKeChengKeJieFuJian(req));
}
// 课程详情 课节 附件 详情
@PostMapping("/peiXun/kecheng/kejie/fujian/get")
public ApiResult<PeiXunKeChengKeJieFuJianGetResp> getPeiXunKeChengKeJieFuJian(@RequestBody @Validated PeiXunKeChengKeJieFuJianGetReq req) {
return ApiResult.successWithResult(expertService.getPeiXunKeChengKeJieFuJian(req));
}
// 课程详情 课节列表 分页列表
// @PostMapping("/exam/kecheng/kejie/page")
// public ApiResult<BasePageResp<PeiXunKeChengKeJiePageResp>> pagePeiXunKeChengKeJie(@RequestBody @Validated PeiXunKeChengKeJiePageReq req) {
// return ApiResult.successWithResult(expertService.pagePeiXunKeChengKeJie(req));
// }
}
package com.cnooc.expert.controller.expert.model.request;
public class DongJieGetReq {
private String dongJieGuid;
}
package com.cnooc.expert.controller.expert.model.request;
import com.cnooc.expert.common.request.BasePageRequest;
import lombok.Data;
@Data
public class DongJiePageReq extends BasePageRequest {
private String zhuanJiaGuid;
}
package com.cnooc.expert.controller.expert.model.request;
import com.cnooc.expert.common.request.BasePageRequest;
import lombok.Data;
import lombok.EqualsAndHashCode;
import java.util.List;
/**
* @author: FuHongZhang
* @date 2025-11-15 13:58
*/
@EqualsAndHashCode(callSuper = true)
@Data
public class KaoShiPageReq extends BasePageRequest {
/**
* 课程名称
*/
private String courseName;
/**
* 课程类型Guid
*/
private String courseTypeGuid;
/**
* 课节名称
*/
private String lessonName;
/**
* 课程发布时间查询开始时间
*/
private Long courseReleaseStartTimestamp;
/**
* 课程发布时间查询结束时间
*/
private Long courseReleaseEndTimestamp;
/**
* 考试状态
*/
private Short examStatus;
/**
* 专家Guid todo 可能不需要传,需要从后端获取当前登录人guid
*/
private String expertGuid;
/**
* 课程类型名称
*/
private String courseTypeName;
/**
* 排除的课程类型列表 (续期培训,续期考试) 需要了解下业务,小程序端专家申请续期需要进行培训及考试吗
*/
private List<String> excludeCourseTypeList;
}
package com.cnooc.expert.controller.expert.model.request;
import lombok.Data;
@Data
public class PeiXunKeChengKeJieFuJianGetReq {
private String fileGuid;
}
package com.cnooc.expert.controller.expert.model.request;
import lombok.Data;
@Data
public class PeiXunKeChengKeJieFuJianListReq {
private String learnFileGroupGuid;
}
package com.cnooc.expert.controller.expert.model.request;
import lombok.Data;
@Data
public class PeiXunKeChengKeJieGetReq {
private String lessonGuid;
}
package com.cnooc.expert.controller.expert.model.request;
import com.cnooc.expert.common.request.BasePageRequest;
import lombok.Data;
import lombok.EqualsAndHashCode;
@EqualsAndHashCode(callSuper = true)
@Data
public class PeiXunKeChengKeJiePageReq extends BasePageRequest {
private String courseGuid;
}
package com.cnooc.expert.controller.expert.model.request;
import lombok.Data;
/**
* @author: FuHongZhang
* @date 2025-11-15 14:46
*/
@Data
public class PeiXunKeChengReq {
/**
* 课程Guid
*/
private String courseGuid;
// -------查询课程详情下课节信息入参----------
private String userId; // 从服务上获取
// 必传
// private String courseGuid;
}
package com.cnooc.expert.controller.expert.model.request;
import com.cnooc.expert.common.request.BasePageRequest;
import lombok.Data;
import lombok.EqualsAndHashCode;
import java.util.List;
/**
* @author: FuHongZhang
* @date 2025-11-15 14:25
*/
@EqualsAndHashCode(callSuper = true)
@Data
public class PeiXunPageReq extends BasePageRequest {
/**
* courseName 课程名称
*/
private String courseName;
/**
* courseTypeGuid 课程类型Guid
*/
private String courseTypeGuid;
/**
* courseTypeName 课程类型名称
*/
private String courseTypeName;
/**
* courseReleaseStartTimestamp 课程发布时间查询开始时间
*/
private Long courseReleaseStartTimestamp;
/**
* courseReleaseEndTimestamp 课程发布时间查询结束时间
*/
private Long courseReleaseEndTimestamp;
/**
* 学习进度状态(10:未完成;20:已完成)
*/
private Short progressStatus;
/**
* 当前用户guid
*/
private String userGuid;
/**
* 当前用户guid
*/
private String expertGuid;
/**
* 二开 - 排除的课程类型列表 (续期考试,续期培训)
*/
private List<String> excludeCourseTypeList;
}
package com.cnooc.expert.controller.expert.model.request;
import lombok.Data;
@Data
public class WeiGuiGetReq {
private String guid;
}
package com.cnooc.expert.controller.expert.model.request;
import lombok.Data;
/**
* @author: FuHongZhang
* @date 2025-11-15 11:23
*/
@Data
public class WeiGuiInfoByZhunaJiaWeiGuiGuidReq {
// 专家违规的guid
private String guid;
// 专家违规的guids weiguiReason
private String guids;
// 专家违规guid
private String zhuanJiaWeiGuiGuid;
}
package com.cnooc.expert.controller.expert.model.request;
import com.cnooc.expert.common.request.BasePageRequest;
import lombok.Data;
import lombok.EqualsAndHashCode;
/**
* @author: FuHongZhang
* @date 2025-11-14 17:39
*/
@EqualsAndHashCode(callSuper = true)
@Data
public class WeiGuiJiLuPageReq extends BasePageRequest {
private String zhuanJiaGuid;
}
package com.cnooc.expert.controller.expert.model.response;
import lombok.Builder;
import lombok.Data;
@Data
@Builder
public class DongJieGetResp {
private String changeRecordGuid;
private String shiXiangGuid;
private Integer shiXiangType;
private String oldValue;
private String newValue;
private Long createTime;
private String creatorGuid;
private String creatorName;
private Long modifyTime;
private String modifierGuid;
private String modifierName;
private String jieDongReason;
private String jieDongFuJianGuid;
private String dongJieReason;
private String dongJieFuJianGuid;
private Long dongJieSatrtTime;
private Long dongJieEndTime;
}
package com.cnooc.expert.controller.expert.model.response;
import lombok.Builder;
import lombok.Data;
@Data
@Builder
public class DongJiePageResp {
private String jiTuanErJiDanWeiName;
private String adAccount;
private String shenFenZheng;
private String zhuanYeName;
private String zhuanYeBH;
private Long jieDongTime;
private String dongJieFuJianGuid;
private String jieDongFuJianGuid;
private String dongJieReason;
private Long dongJieTime;
private String gongZuoDanWei;
private String zhuanJiaGuid;
private String pingBiaoZhuanYeGuid;
private Boolean isPrimary;
private String zhuanJiaCode;
private String zhuanYeStatus;
private String jieDongReason;
private String zhuanJiaName;
}
package com.cnooc.expert.controller.expert.model.response;
import lombok.Builder;
import lombok.Data;
/**
* @author: FuHongZhang
* @date 2025-11-15 13:59
*/
@Data
@Builder
public class KaoShiPageResp {
private String courseGuid;
private String courseName;
private Long courseReleaseTimestamp;
private String courseTypeName;
private Object examPassTimestamp;
private Integer examResult;
private Double jiGeScore;
private String lessonGuid;
private String lessonName;
private Double score;
private Object studyProgress;
private String testPaperGuid;
private Object zuiGaoScore;
}
package com.cnooc.expert.controller.expert.model.response;
import lombok.Builder;
import lombok.Data;
@Data
@Builder
public class PeiXunKeChengKeJieFuJianGetResp {
private String fileName;
private String downLoadUrl;
private String directDownLoadUrl;
private String createTime;
private String fileSize;
}
package com.cnooc.expert.controller.expert.model.response;
import lombok.Builder;
import lombok.Data;
@Data
@Builder
public class PeiXunKeChengKeJieFuJianListResp {
private Long createTime;
private String creatorGuid;
private String creatorName;
private String fileGroupGuid;
private String fileGuid;
private String fileMD5;
private String fileName;
private Integer fileType;
private String groupGuid;
private String otherInfo;
private String sysFile;
private Long uploadTime;
private String uploadTimeText;
}
package com.cnooc.expert.controller.expert.model.response;
import lombok.Builder;
import lombok.Data;
@Data
@Builder
public class PeiXunKeChengKeJieGetResp {
private String courseGuid;
private Boolean isTestAfterLearn;
private String learnContent;
private String learnFileGroupGuid;
private Long leiJiXueXiShiChang;
private String lessonGuid;
private String lessonName;
private String lessonProgressGuid;
private String progressDetails;
private String studyProgress;
private String testPaperGuid;
private Integer xueXiShiChang;
}
package com.cnooc.expert.controller.expert.model.response;
import lombok.Builder;
import lombok.Data;
import java.math.BigDecimal;
@Data
@Builder
public class PeiXunKeChengKeJiePageResp {
private Long finishTimestamp;
private String learnFileGroupGuid;
private String lessonGuid;
private String lessonName;
private String studyContent;
private BigDecimal studyProgress;
}
package com.cnooc.expert.controller.expert.model.response;
import lombok.Builder;
import lombok.Data;
import java.math.BigDecimal;
/**
* @author: FuHongZhang
* @date 2025-11-15 14:26
*/
@Data
@Builder
public class PeiXunPageResp {
/**
* courseGuid 课程Guid
*/
private String courseGuid;
/**
* courseName 课程名称
*/
private String courseName;
/**
* courseTypeName 课程类型名称
*/
private String courseTypeName;
/**
* lessonCount 课节数量
*/
private Integer lessonCount;
/**
* courseReleaseTimestamp 发布时间
*/
private Long courseReleaseTimestamp;
/**
* 学习进度
*/
private BigDecimal studyProgress;
/**
* 学习进度状态(10:未完成;20:已完成)
*/
private Short progressStatus;
/**
* 培训课程详情
*/
@Data
@Builder
public static class PeiXunKeChengInfo {
/** 课程唯一标识(GUID) */
private String courseGuid;
/** 课程介绍 */
private String courseIntroduction;
/** 课程名称 */
private String courseName;
/** 课程发布状态() */
private Short courseReleaseStatus;
/** 课程发布时间戳(毫秒) */
private Long courseReleaseTimestamp;
/** 课程类型唯一标识(GUID) */
private String courseTypeGuid;
/** 课程类型名称(如:日常培训、定期培训) */
private String courseTypeName;
/** 学习后是否需要考试(true=是,false=否) */
private Boolean isTestAfterLearn;
/** 课程包含的课节数量 */
private Integer lessonCount;
/** 关联的试卷唯一标识(GUID) */
private String testPaperGuid;
}
}
package com.cnooc.expert.controller.expert.model.response;
import lombok.Builder;
import lombok.Data;
@Data
@Builder
public class WeiGuiGetResp {
private String applyBusinessId;
private Integer applyshenheStatus;
private String businessId;
private String chouquRenwuGuid;
private Long chuliEndTime;
private Long chuliStartTime;
private Long createTime;
private String creatorGuid;
private String creatorName;
private String fujianGuid;
private String modifierGuid;
private String modifierName;
private Long modifyTime;
private String shenheRen;
private Integer shenheStatus;
private Long shenheTime;
private Long submitTime;
private String submiter;
private String submiterGuid;
private String submiterPersonId;
private String tijiaorenEmail;
private String tijiaorenPhone;
private Integer weiguiChuliShichang;
private String weiguiReason;
private String weiguiReasonName;
private String weiguiXiangxiMiaoshu;
private String zhuanJiaAdAccount;
private String zhuanJiaCode;
private String zhuanJiaZhuangTai;
private String zhuanjiaGuid;
private String zhuanjiaName;
private String zhuanjiaWeiguiGuid;
}
package com.cnooc.expert.controller.expert.model.response;
import lombok.Builder;
import lombok.Data;
import java.util.List;
/**
* @author: FuHongZhang
* @date 2025-11-14 20:28
*/
@Data
@Builder
public class WeiGuiPageResp {
private String bidSectionCode;
private String bidSectionName;
private String businessId;
private String chouquRenwuGuid;
private Long chuliEndTime;
private String chuliPeriod;
private Long chuliStartTime;
private String fujianGuid;
private Object serialNum;
private String shenFenZheng;
private Integer shenheStatus;
private String shenheStatusName;
private Long submitTime;
private String submitTimeStr;
private String submiter;
private Integer weiguiChuliShichang;
private String weiguiChuliShichangStr;
private String weiguiReason;
private String weiguiReasonName;
private String weiguiXiangxiMiaoshu;
private String zhuanJiaAdAccount;
private String zhuanJiaCode;
private Object zhuanJiaZhuangTai;
private String zhuanJiaZhuangTaiName;
private String zhuanjiaGuid;
private String zhuanjiaName;
private String zhuanjiaWeiguiGuid;
@Data
@Builder
public static class WeiGuiShiXiang {
private Long createTime;
private String creatorGuid;
private String creatorName;
private Boolean isDeleted;
private String modifierGuid;
private String modifierName;
private Long modifyTime;
private Integer qiYongstatus;
private String weiguiChuliReason;
private String weiguiChuliShichangs;
private String weiguiShixiangGuid;
}
@Data
@Builder
public static class WeiGuiChuLiXiangQingResp {
private String applyBusinessId;
private Integer applyshenheStatus;
private String businessId;
private String chouquRenwuGuid;
private Long chuliEndTime;
private Long chuliStartTime;
private Long createTime;
private String creatorGuid;
private String creatorName;
private String fujianGuid;
private Boolean isDeleted;
private String modifierGuid;
private String modifierName;
private Long modifyTime;
private String shenheRen;
private Integer shenheStatus;
private Long shenheTime;
private Long submitTime;
private String submiter;
private String submiterGuid;
private Long submiterPersonId;
private String tijiaorenEmail;
private String tijiaorenPhone;
private Integer weiguiChuliShichang;
private String weiguiReason;
private String weiguiReasonName;
private String weiguiXiangxiMiaoshu;
private String zhuanJiaAdAccount;
private String zhuanJiaCode;
private List<ZhuanJiaItem> zhuanJiaList;
private Object zhuanJiaZhuangTai;
private String zhuanjiaGuid;
private String zhuanjiaName;
private String zhuanjiaWeiguiGuid;
}
@Data
@Builder
public static class ZhuanJiaItem {
private String chouQuQingKuangGuid;
private String chouQuRenWuGuid;
private Object pingShenType;
private String zhuanJiaAdAccount;
private String zhuanJiaCode;
private String zhuanJiaGuid;
private String zhuanJiaName;
private Integer zhuanJiaZhuangTai;
}
@Data
@Builder
public static class WeiGuiChuLiYuanYin {
private Long createTime;
private String creatorGuid;
private String creatorName;
private Boolean isDeleted;
private String modifierGuid;
private String modifierName;
private Long modifyTime;
private Integer qiYongstatus;
private String weiguiChuliReason;
private String weiguiChuliShichangs;
private String weiguiShixiangGuid;
}
@Data
@Builder
public static class WeiGuiShenHeChuliJiLu {
private Object bianGengXuHao;
private String buTongGuoEndSequence;
private Object buTongGuoStartSequence;
private Long createTime;
private String createTimeText;
private String creatorGuid;
private String creatorName;
private String daiShenRenGuids;
private String daiShenRenNames;
private String fujianGuid;
private Boolean isCurrent;
private Boolean isDeleted;
private Boolean isFinish;
private String modifierGuid;
private String modifierName;
private Object modifyTime;
private String modifyTimeText;
private String remark;
private Object sequence;
private String shenHeBuMenGuid;
private String shenHeBuMenName;
private String shenHeFuJianGuid;
private String shenHeGuid;
private String shenHeRenGuid;
private String shenHeRenName;
private Integer shenHeStatus;
private Long shenHeTime;
private String shenHeTimeText;
private String shenHeYiJian;
private String shenPiJieGuoGuid;
private Object shenQingLeiXing;
private Boolean shiFouYiFaZhuanJia;
private Boolean shiFouZhuanJiao;
private String shiXiangGuid;
private String shiXiangName;
private Object shiXiangType;
private Object shouLiTime;
private String shouLiTimeText;
private String tiJiaoRenGuid;
private String tiJiaoRenName;
private Long tiJiaoTime;
private String tiJiaoTimeText;
private String xiaJiShenHeRenGuid;
private String xiaJiShenHeRenName;
private String xiangMuGuid;
private Boolean zhiJieHuiFu;
}
}
package com.cnooc.expert.external.expert.api;
import com.cnooc.expert.external.expert.model.request.ExpertInfoAppReq;
import com.cnooc.expert.external.expert.model.request.ExpertInfoGetReq;
import com.cnooc.expert.external.expert.model.request.ExpertInfoReq;
import com.cnooc.expert.external.expert.model.response.ExpertInfoAppResp;
import com.cnooc.expert.external.expert.model.response.ExpertInfoGetTestResp;
import com.cnooc.expert.external.expert.model.response.ExpertInfoResp;
import retrofit2.Call;
import retrofit2.http.Body;
......@@ -15,9 +13,6 @@ import java.util.Map;
public interface LoginServiceApi {
@POST("/")
Call<ExpertInfoGetTestResp> expertDetailUpDate(@HeaderMap Map<String, Object> headers, @Body ExpertInfoGetReq user);
@POST("/zjfw/zggrxxgl/querySingleByShengFenZhengOrMobile")
Call<ExpertInfoResp> querySingleByShengFenZhengOrMobile(@HeaderMap Map<String, Object> headers, @Body ExpertInfoReq expertInfoReq);
......@@ -29,5 +24,4 @@ public interface LoginServiceApi {
@POST("/zjfw/zggrxxgl/updateZhuanJiaInfoApp")
Call<ExpertInfoAppResp> updateZhuanJiaInfoApp(@HeaderMap Map<String, Object> headers, @Body ExpertInfoAppReq expertInfoAppReq);
}
......@@ -3,19 +3,38 @@ package com.cnooc.expert.service;
import com.cnooc.expert.common.response.BasePageResp;
import com.cnooc.expert.controller.expert.model.request.CompanyPageReq;
import com.cnooc.expert.controller.expert.model.request.DictNofilterListReq;
import com.cnooc.expert.controller.expert.model.request.DongJieGetReq;
import com.cnooc.expert.controller.expert.model.request.DongJiePageReq;
import com.cnooc.expert.controller.expert.model.request.GeRenXiuJiaApplyReq;
import com.cnooc.expert.controller.expert.model.request.GeRenXiuJiaPageReq;
import com.cnooc.expert.controller.expert.model.request.KaoShiPageReq;
import com.cnooc.expert.controller.expert.model.request.PeiXunKeChengKeJieFuJianGetReq;
import com.cnooc.expert.controller.expert.model.request.PeiXunKeChengKeJieFuJianListReq;
import com.cnooc.expert.controller.expert.model.request.PeiXunKeChengKeJieGetReq;
import com.cnooc.expert.controller.expert.model.request.PeiXunKeChengKeJiePageReq;
import com.cnooc.expert.controller.expert.model.request.PeiXunKeChengReq;
import com.cnooc.expert.controller.expert.model.request.PeiXunPageReq;
import com.cnooc.expert.controller.expert.model.request.PingBiaoXiangMuByOwnerPageReq;
import com.cnooc.expert.controller.expert.model.request.PingBiaoXiangMuInfoGetByChouQuMaReq;
import com.cnooc.expert.controller.expert.model.request.PingBiaoXiangMuPageReq;
import com.cnooc.expert.controller.expert.model.request.QingJiaJinJiApplyReq;
import com.cnooc.expert.controller.expert.model.request.QingJiaJinJiPageReq;
import com.cnooc.expert.controller.expert.model.request.WeiGuiGetReq;
import com.cnooc.expert.controller.expert.model.request.WeiGuiJiLuPageReq;
import com.cnooc.expert.controller.expert.model.response.CompanyPageResp;
import com.cnooc.expert.controller.expert.model.response.DictListItemResp;
import com.cnooc.expert.controller.expert.model.response.DongJieGetResp;
import com.cnooc.expert.controller.expert.model.response.DongJiePageResp;
import com.cnooc.expert.controller.expert.model.response.ExpertInfoGetResp;
import com.cnooc.expert.controller.expert.model.response.GeRenXiuJiaApplyResp;
import com.cnooc.expert.controller.expert.model.response.GeRenXiuJiaPageResp;
import com.cnooc.expert.controller.expert.model.response.KaoShiPageResp;
import com.cnooc.expert.controller.expert.model.response.NofilterListItemResp;
import com.cnooc.expert.controller.expert.model.response.PeiXunKeChengKeJieFuJianGetResp;
import com.cnooc.expert.controller.expert.model.response.PeiXunKeChengKeJieFuJianListResp;
import com.cnooc.expert.controller.expert.model.response.PeiXunKeChengKeJieGetResp;
import com.cnooc.expert.controller.expert.model.response.PeiXunKeChengKeJiePageResp;
import com.cnooc.expert.controller.expert.model.response.PeiXunPageResp;
import com.cnooc.expert.controller.expert.model.response.PingBiaoXiangMuByOwnerPageResp;
import com.cnooc.expert.controller.expert.model.response.PingBiaoXiangMuInfoGetByChouQuMaResp;
import com.cnooc.expert.controller.expert.model.response.PingBiaoXiangMuPageResp;
......@@ -23,6 +42,8 @@ import com.cnooc.expert.controller.expert.model.response.PingBiaoZhuanYeTreeNode
import com.cnooc.expert.controller.expert.model.response.QingJiaJinJiApplyResp;
import com.cnooc.expert.controller.expert.model.response.QingJiaJinJiPageResp;
import com.cnooc.expert.controller.expert.model.response.SecondaryUnitListItemResp;
import com.cnooc.expert.controller.expert.model.response.WeiGuiGetResp;
import com.cnooc.expert.controller.expert.model.response.WeiGuiPageResp;
import com.cnooc.expert.external.expert.model.request.ExpertInfoGetReq;
import com.cnooc.expert.external.expert.model.response.ExpertInfoGetTestResp;
import com.cnooc.expert.external.expert.service.ExpertServiceClient;
......@@ -32,7 +53,9 @@ import com.google.common.collect.Lists;
import lombok.AllArgsConstructor;
import org.springframework.stereotype.Service;
import java.math.BigDecimal;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Collections;
import java.util.List;
......@@ -895,10 +918,6 @@ public class ExpertService {
.chouQuRenName("")
.chouQuRenPhone("")
.chouQuZhuanTai(null)
.createTime(1758609082178L)
.createTimeText("2025-09-23 14:31:22")
.creatorGuid("")
.creatorName("")
.fanKuiYiJian("")
.isCQDHuanZhuanYe(false)
.isSubmit(null)
......@@ -1303,4 +1322,667 @@ public class ExpertService {
.data(data)
.build();
}
public BasePageResp<DongJiePageResp> pageDongJie(DongJiePageReq req) {
List<DongJiePageResp> list = Lists.newArrayList(
DongJiePageResp.builder()
.jiTuanErJiDanWeiName("中化建国际招标有限责任公司")
.adAccount("ex_zhaoning2")
.shenFenZheng("152527199201151000")
.zhuanYeName("测试A00001")
.zhuanYeBH("A00001")
.jieDongTime(null)
.dongJieFuJianGuid("")
.jieDongFuJianGuid("")
.dongJieReason("")
.dongJieTime(null)
.gongZuoDanWei("中化建国际招标有限责任公司天津分公司")
.zhuanJiaGuid("5a479be1-513f-436a-92e7-15cd2d5fae02")
.pingBiaoZhuanYeGuid("2d281ffd-3233-484c-8876-88ed32bd3bba")
.isPrimary(false)
.zhuanJiaCode("000098")
.zhuanYeStatus("10")
.jieDongReason("")
.zhuanJiaName("赵宁")
.build()
);
return BasePageResp.<DongJiePageResp>builder()
.current(1)
.pages(1)
.total(1)
.data(list)
.build();
}
public BasePageResp<WeiGuiPageResp> pageWeiGuiList(WeiGuiJiLuPageReq req) {
List<WeiGuiPageResp> list = Lists.newArrayList(
WeiGuiPageResp.builder()
.bidSectionCode("24-CNCCC-GC-GK-5142/01")
.bidSectionName("c测试可视化待办")
.businessId("1241043784526479360")
.chouquRenwuGuid("07072824-728b-417c-add9-17f94f746e10")
.chuliEndTime(1723910399999L)
.chuliPeriod("")
.chuliStartTime(1715929495719L)
.fujianGuid("")
.serialNum(null)
.shenFenZheng("")
.shenheStatus(50)
.shenheStatusName("")
.submitTime(1715929400628L)
.submitTimeStr("")
.submiter("物装中心十四")
.weiguiChuliShichang(3)
.weiguiChuliShichangStr("")
.weiguiReason("4c1102e5-bf31-491d-8879-1ea335f5e40f")
.weiguiReasonName("严重违反评标工作纪律、执业规范或者职业道德")
.weiguiXiangxiMiaoshu("12333")
.zhuanJiaAdAccount("qiaojf")
.zhuanJiaCode("000030")
.zhuanJiaZhuangTai(null)
.zhuanJiaZhuangTaiName("")
.zhuanjiaGuid("8ffb7651-1416-4f74-a590-1f0cf860463b")
.zhuanjiaName("龙测试")
.zhuanjiaWeiguiGuid("316cf113-2233-4118-9bd6-713e75b81363")
.build()
);
return BasePageResp.<WeiGuiPageResp>builder()
.current(1)
.pages(1)
.total(7)
.data(list)
.build();
}
public List<WeiGuiPageResp.WeiGuiShiXiang> listWeiGuiShiXiang() {
ArrayList<WeiGuiPageResp.WeiGuiShiXiang> list = Lists.newArrayList(
// 第1条数据
WeiGuiPageResp.WeiGuiShiXiang.builder()
.createTime(1698737053322L)
.creatorGuid("1005209701203447809")
.creatorName("中化建国际招标有限责任公司")
.isDeleted(false)
.modifierGuid("1005209701203447809")
.modifierName("中化建国际招标有限责任公司")
.modifyTime(1698737082055L)
.qiYongstatus(1)
.weiguiChuliReason("向他人透露对投标文件的评审和比较、中标候选人的推荐以及与评标有关的其他情况")
.weiguiChuliShichangs("-1")
.weiguiShixiangGuid("23490f8f-c4e1-4726-a7d8-ad623f3e133f")
.build(),
// 第2条数据
WeiGuiPageResp.WeiGuiShiXiang.builder()
.createTime(1698737076518L)
.creatorGuid("1005209701203447809")
.creatorName("中化建国际招标有限责任公司")
.isDeleted(false)
.modifierGuid("1005209701203447809")
.modifierName("中化建国际招标有限责任公司")
.modifyTime(1698737079691L)
.qiYongstatus(1)
.weiguiChuliReason("严重违反评标工作纪律、执业规范或者职业道德")
.weiguiChuliShichangs("-1,3")
.weiguiShixiangGuid("4c1102e5-bf31-491d-8879-1ea335f5e40f")
.build(),
// 第3条数据
WeiGuiPageResp.WeiGuiShiXiang.builder()
.createTime(1698736884442L)
.creatorGuid("1005209701203447809")
.creatorName("中化建国际招标有限责任公司")
.isDeleted(false)
.modifierGuid("1005209701203447809")
.modifierName("中化建国际招标有限责任公司")
.modifyTime(1715860266425L)
.qiYongstatus(1)
.weiguiChuliReason("有关部门依法对投诉进行调查时,不予配合")
.weiguiChuliShichangs("3,6,12,0")
.weiguiShixiangGuid("4f337ae8-c921-4882-bf5f-c2d6ff132cdb")
.build(),
// 第4条数据
WeiGuiPageResp.WeiGuiShiXiang.builder()
.createTime(1698737002259L)
.creatorGuid("1005209701203447809")
.creatorName("中化建国际招标有限责任公司")
.isDeleted(false)
.modifierGuid("1005209701203447809")
.modifierName("中化建国际招标有限责任公司")
.modifyTime(1698737084120L)
.qiYongstatus(1)
.weiguiChuliReason("违反评标工作纪律或存在其他违反执业规范或者职业道德行为,情节较轻")
.weiguiChuliShichangs("12,24,36")
.weiguiShixiangGuid("5419e886-a624-41f3-acb1-87cd334b3e25")
.build(),
// 第5条数据
WeiGuiPageResp.WeiGuiShiXiang.builder()
.createTime(1698736902543L)
.creatorGuid("1005209701203447809")
.creatorName("中化建国际招标有限责任公司")
.isDeleted(false)
.modifierGuid("1005209701203447809")
.modifierName("中化建国际招标有限责任公司")
.modifyTime(1715860276633L)
.qiYongstatus(1)
.weiguiChuliReason("违反评标工作纪律或存在其他违反执业规范或者职业道德行为,未造成实质性影响")
.weiguiChuliShichangs("3,6,12,0")
.weiguiShixiangGuid("5f789f05-67a1-4d45-8e58-2a7dbd656f40")
.build(),
// 第6条数据
WeiGuiPageResp.WeiGuiShiXiang.builder()
.createTime(1698736949297L)
.creatorGuid("1005209701203447809")
.creatorName("中化建国际招标有限责任公司")
.isDeleted(false)
.modifierGuid("1005209701203447809")
.modifierName("中化建国际招标有限责任公司")
.modifyTime(1698737089858L)
.qiYongstatus(1)
.weiguiChuliReason("暗示或者诱导投标人对投标文件作出澄清、说明或者接受投标人主动提出的澄清、说明,影响评标公正性")
.weiguiChuliShichangs("12,24,36")
.weiguiShixiangGuid("6386e0f8-6995-41d7-8247-ef3a427830c5")
.build()
);
return list;
}
public WeiGuiGetResp getWeiGui(WeiGuiGetReq req) {
return WeiGuiGetResp.builder()
.applyBusinessId("1240990734186446848")
.applyshenheStatus(50)
.businessId("1241043784526479360")
.chouquRenwuGuid("07072824-728b-417c-add9-17f94f746e10")
.chuliEndTime(1723910399999L)
.chuliStartTime(1715929495719L)
.createTime(1715916848348L)
.creatorGuid("1171528704599830529")
.creatorName("物装中心十四")
.fujianGuid("")
.modifierGuid("1171528704599830529")
.modifierName("物装中心十四")
.modifyTime(1715929400639L)
.shenheRen("中化建国际招标有限责任公司")
.shenheStatus(50)
.shenheTime(1715929495790L)
.submitTime(1715929400628L)
.submiter("物装中心十四")
.submiterGuid("1171528704599830529")
.submiterPersonId("1171739935665954817")
.tijiaorenEmail("")
.tijiaorenPhone("18912344321")
.weiguiChuliShichang(3)
.weiguiReason("4c1102e5-bf31-491d-8879-1ea335f5e40f")
.weiguiReasonName("")
.weiguiXiangxiMiaoshu("12333")
.zhuanJiaAdAccount("")
.zhuanJiaCode("")
.zhuanJiaZhuangTai(null)
.zhuanjiaGuid("8ffb7651-1416-4f74-a590-1f0cf860463b")
.zhuanjiaName("")
.zhuanjiaWeiguiGuid("316cf113-2233-4118-9bd6-713e75b81363")
.build();
}
public Object weiGuiChuLiYuanYin() {
ArrayList<WeiGuiPageResp.WeiGuiChuLiYuanYin> weiGuiChuLiYuanYins = Lists.newArrayList(
WeiGuiPageResp.WeiGuiChuLiYuanYin.builder()
.createTime(1698737076518L) // 时间戳加L标识long类型
.creatorGuid("1005209701203447809")
.creatorName("中化建国际招标有限责任公司")
.isDeleted(false)
.modifierGuid("1005209701203447809")
.modifierName("中化建国际招标有限责任公司")
.modifyTime(1698737079691L)
.qiYongstatus(1)
.weiguiChuliReason("严重违反评标工作纪律、执业规范或者职业道德")
.weiguiChuliShichangs("-1,3") // 保留原字符串格式
.weiguiShixiangGuid("4c1102e5-bf31-491d-8879-1ea335f5e40f")
.build()
);
return weiGuiChuLiYuanYins;
}
public Object listWeiGuiChuLiJiLu() {
return Lists.newArrayList(
WeiGuiPageResp.WeiGuiShenHeChuliJiLu.builder()
.bianGengXuHao(null)
.buTongGuoEndSequence("")
.buTongGuoStartSequence(null)
.createTime(1715929495805L)
.createTimeText("2024-05-17 15:04:55")
.creatorGuid("1005209701203447809")
.creatorName("中化建国际招标有限责任公司")
.daiShenRenGuids("")
.daiShenRenNames("")
.fujianGuid("")
.isCurrent(false)
.isDeleted(false)
.isFinish(true)
.modifierGuid("")
.modifierName("")
.modifyTime(null)
.modifyTimeText("")
.remark("")
.sequence(null)
.shenHeBuMenGuid("")
.shenHeBuMenName("")
.shenHeFuJianGuid("")
.shenHeGuid("789bba36-62a8-4dba-aa10-be7b5b6fb662")
.shenHeRenGuid("")
.shenHeRenName("中化建国际招标有限责任公司")
.shenHeStatus(50)
.shenHeTime(1715929495805L)
.shenHeTimeText("2024-05-17 15:04:55")
.shenHeYiJian("")
.shenPiJieGuoGuid("3c935668-2087-416e-af58-24a43da2e4f7")
.shenQingLeiXing(null)
.shiFouYiFaZhuanJia(false)
.shiFouZhuanJiao(false)
.shiXiangGuid("316cf113-2233-4118-9bd6-713e75b81363")
.shiXiangName("")
.shiXiangType(null)
.shouLiTime(null)
.shouLiTimeText("")
.tiJiaoRenGuid("")
.tiJiaoRenName("中化建国际招标有限责任公司")
.tiJiaoTime(1715929495805L)
.tiJiaoTimeText("2024-05-17 15:04:55")
.xiaJiShenHeRenGuid("")
.xiaJiShenHeRenName("")
.xiangMuGuid("")
.zhiJieHuiFu(false)
.build(),
// 第2条记录
WeiGuiPageResp.WeiGuiShenHeChuliJiLu.builder()
.bianGengXuHao(null)
.buTongGuoEndSequence("")
.buTongGuoStartSequence(null)
.createTime(1715929481048L)
.createTimeText("2024-05-17 15:04:41")
.creatorGuid("1171528704599830529")
.creatorName("物装中心十四")
.daiShenRenGuids("")
.daiShenRenNames("")
.fujianGuid("")
.isCurrent(false)
.isDeleted(false)
.isFinish(true)
.modifierGuid("")
.modifierName("")
.modifyTime(null)
.modifyTimeText("")
.remark("")
.sequence(null)
.shenHeBuMenGuid("")
.shenHeBuMenName("")
.shenHeFuJianGuid("")
.shenHeGuid("8361f885-2a4b-4870-9d6a-ebee5171448b")
.shenHeRenGuid("1171739935665954817")
.shenHeRenName("物装中心十四")
.shenHeStatus(30)
.shenHeTime(1715929481048L)
.shenHeTimeText("2024-05-17 15:04:41")
.shenHeYiJian("")
.shenPiJieGuoGuid("d0a846ac-2a72-4603-86a4-fa22af893841")
.shenQingLeiXing(null)
.shiFouYiFaZhuanJia(false)
.shiFouZhuanJiao(false)
.shiXiangGuid("316cf113-2233-4118-9bd6-713e75b81363")
.shiXiangName("")
.shiXiangType(null)
.shouLiTime(null)
.shouLiTimeText("")
.tiJiaoRenGuid("1171739935665954817")
.tiJiaoRenName("物装中心十四")
.tiJiaoTime(1715929481048L)
.tiJiaoTimeText("2024-05-17 15:04:41")
.xiaJiShenHeRenGuid("")
.xiaJiShenHeRenName("")
.xiangMuGuid("")
.zhiJieHuiFu(false)
.build(),
// 第3条记录
WeiGuiPageResp.WeiGuiShenHeChuliJiLu.builder()
.bianGengXuHao(null)
.buTongGuoEndSequence("")
.buTongGuoStartSequence(null)
.createTime(1715929259722L)
.createTimeText("2024-05-17 15:00:59")
.creatorGuid("1005209701203447809")
.creatorName("中化建国际招标有限责任公司")
.daiShenRenGuids("")
.daiShenRenNames("")
.fujianGuid("")
.isCurrent(false)
.isDeleted(false)
.isFinish(true)
.modifierGuid("")
.modifierName("")
.modifyTime(null)
.modifyTimeText("")
.remark("vs")
.sequence(null)
.shenHeBuMenGuid("")
.shenHeBuMenName("")
.shenHeFuJianGuid("")
.shenHeGuid("8e27c179-c64f-4e16-81aa-1050a41394f7")
.shenHeRenGuid("")
.shenHeRenName("中化建国际招标有限责任公司")
.shenHeStatus(40)
.shenHeTime(1715929259722L)
.shenHeTimeText("2024-05-17 15:00:59")
.shenHeYiJian("")
.shenPiJieGuoGuid("dbc40cdb-8db5-42b0-884f-bf4d3eb2823d")
.shenQingLeiXing(null)
.shiFouYiFaZhuanJia(false)
.shiFouZhuanJiao(false)
.shiXiangGuid("316cf113-2233-4118-9bd6-713e75b81363")
.shiXiangName("")
.shiXiangType(null)
.shouLiTime(null)
.shouLiTimeText("")
.tiJiaoRenGuid("")
.tiJiaoRenName("中化建国际招标有限责任公司")
.tiJiaoTime(1715929259722L)
.tiJiaoTimeText("2024-05-17 15:00:59")
.xiaJiShenHeRenGuid("")
.xiaJiShenHeRenName("")
.xiangMuGuid("")
.zhiJieHuiFu(false)
.build(),
// 第4条记录
WeiGuiPageResp.WeiGuiShenHeChuliJiLu.builder()
.bianGengXuHao(null)
.buTongGuoEndSequence("")
.buTongGuoStartSequence(null)
.createTime(1715929171875L)
.createTimeText("2024-05-17 14:59:31")
.creatorGuid("1171528704599830529")
.creatorName("物装中心十四")
.daiShenRenGuids("")
.daiShenRenNames("")
.fujianGuid("")
.isCurrent(false)
.isDeleted(false)
.isFinish(true)
.modifierGuid("")
.modifierName("")
.modifyTime(null)
.modifyTimeText("")
.remark("")
.sequence(null)
.shenHeBuMenGuid("")
.shenHeBuMenName("")
.shenHeFuJianGuid("")
.shenHeGuid("b1712b8b-5d4d-4a24-af83-9e5f6d1bd013")
.shenHeRenGuid("1171739935665954817")
.shenHeRenName("物装中心十四")
.shenHeStatus(30)
.shenHeTime(1715929171875L)
.shenHeTimeText("2024-05-17 14:59:31")
.shenHeYiJian("")
.shenPiJieGuoGuid("d0a846ac-2a72-4603-86a4-fa22af893841")
.shenQingLeiXing(null)
.shiFouYiFaZhuanJia(false)
.shiFouZhuanJiao(false)
.shiXiangGuid("316cf113-2233-4118-9bd6-713e75b81363")
.shiXiangName("")
.shiXiangType(null)
.shouLiTime(null)
.shouLiTimeText("")
.tiJiaoRenGuid("1171739935665954817")
.tiJiaoRenName("物装中心十四")
.tiJiaoTime(1715929171875L)
.tiJiaoTimeText("2024-05-17 14:59:31")
.xiaJiShenHeRenGuid("")
.xiaJiShenHeRenName("")
.xiangMuGuid("")
.zhiJieHuiFu(false)
.build()
);
}
public BasePageResp<KaoShiPageResp> pageKaoShi(KaoShiPageReq req) {
List<KaoShiPageResp> list = Arrays.asList(
KaoShiPageResp.builder()
.courseGuid("3a7f2d9e-1b4c-4890-8765-1234567890ab")
.courseName("2025年度新专家入库培训")
.courseReleaseTimestamp(1735689600000L) // 2025-01-01 00:00:00
.courseTypeName("入库培训")
.examPassTimestamp(null)
.examResult(0)
.jiGeScore(60.00)
.lessonGuid("")
.lessonName("")
.score(0.00)
.studyProgress(null)
.testPaperGuid("1e2d3c4b-5f6a-7890-abcd-ef1234567890")
.zuiGaoScore(null)
.build(),
// 第2条:定期培训(假数据)
KaoShiPageResp.builder()
.courseGuid("7d9f8e7c-6b5a-4032-1987-6543210fedcb")
.courseName("2025Q2评标规范定期培训")
.courseReleaseTimestamp(1743465600000L) // 2025-04-01 00:00:00
.courseTypeName("定期培训")
.examPassTimestamp(null)
.examResult(0)
.jiGeScore(60.00)
.lessonGuid("")
.lessonName("")
.score(0.00)
.studyProgress(null)
.testPaperGuid("1e2d3c4b-5f6a-7890-abcd-ef1234567890")
.zuiGaoScore(null)
.build(),
// 第3条:日常培训(假数据)
KaoShiPageResp.builder()
.courseGuid("2b4d6f8a-9c7e-4135-8260-abcdef123456")
.courseName("评标保密制度日常培训")
.courseReleaseTimestamp(1750329600000L) // 2025-07-19 00:00:00
.courseTypeName("日常培训")
.examPassTimestamp(null)
.examResult(0)
.jiGeScore(60.00)
.lessonGuid("")
.lessonName("")
.score(0.00)
.studyProgress(null)
.testPaperGuid("1e2d3c4b-5f6a-7890-abcd-ef1234567890")
.zuiGaoScore(null)
.build(),
// 第4条:专项培训(假数据)
KaoShiPageResp.builder()
.courseGuid("9f7d5b3a-8c6e-4201-7359-654321fedcba")
.courseName("电子评标系统操作专项培训")
.courseReleaseTimestamp(1758192000000L) // 2025-10-18 00:00:00
.courseTypeName("专项培训")
.examPassTimestamp(null)
.examResult(0)
.jiGeScore(60.00)
.lessonGuid("")
.lessonName("")
.score(0.00)
.studyProgress(null)
.testPaperGuid("1e2d3c4b-5f6a-7890-abcd-ef1234567890")
.zuiGaoScore(null)
.build()
);
return BasePageResp.<KaoShiPageResp>builder()
.current(1)
.pages(1)
.total(4)
.data(list)
.build();
}
public BasePageResp<PeiXunPageResp> pagePeiXunKeCheng(PeiXunPageReq req) {
ArrayList<PeiXunPageResp> list = Lists.newArrayList(
// 第1条:日常培训(含3课时,2025年最新发布)
PeiXunPageResp.builder()
.courseGuid("1a2b3c4d-5e6f-4789-8765-4321fedcba01")
.courseName("2025评标规范日常培训(基础版)")
.courseReleaseTimestamp(1758902400000L) // 2025-10-27 00:00:00
.courseTypeName("日常培训")
.lessonCount(3)
.progressStatus((short) 0)
.studyProgress(BigDecimal.valueOf(0.00))
.build(),
// 第2条:定期培训(含6课时,季度更新)
PeiXunPageResp.builder()
.courseGuid("2b3c4d5e-6f7a-4890-9876-54321fedcba2")
.courseName("2025Q4评标专家定期考核培训")
.courseReleaseTimestamp(1749667200000L) // 2025-07-12 00:00:00
.courseTypeName("定期培训")
.lessonCount(6)
.progressStatus((short) 0)
.studyProgress(BigDecimal.valueOf(0.00))
.build(),
// 第3条:入库培训(含8课时,新专家必备)
PeiXunPageResp.builder()
.courseGuid("3c4d5e6f-7a8b-4901-0987-654321fedcba3")
.courseName("2025新评标专家入库必修培训")
.courseReleaseTimestamp(1735689600000L) // 2025-01-01 00:00:00
.courseTypeName("入库培训")
.lessonCount(8)
.progressStatus((short) 0)
.studyProgress(BigDecimal.valueOf(0.00))
.build(),
// 第4条:专项培训(含4课时,系统操作类)
PeiXunPageResp.builder()
.courseGuid("4d5e6f7a-8b9c-4012-1987-7654321fedcba4")
.courseName("电子评标系统操作专项培训(2025升级)")
.courseReleaseTimestamp(1755225600000L) // 2025-08-14 00:00:00
.courseTypeName("专项培训")
.lessonCount(4)
.progressStatus((short) 0)
.studyProgress(BigDecimal.valueOf(0.00))
.build()
);
return BasePageResp.<PeiXunPageResp>builder()
.current(1)
.pages(1)
.total(4)
.data(list)
.build();
}
public Object getPeiXunInfo(PeiXunKeChengReq req) {
return PeiXunPageResp.PeiXunKeChengInfo.builder()
.courseGuid("0966b932-cf4f-45bc-bdbf-03ccc4a7e92a")
.courseIntroduction("日常培训test")
.courseName("日常培训test")
.courseReleaseStatus((short) 1)
.courseReleaseTimestamp(1758902400000L)
.courseTypeGuid("7e68a592-91b1-4ce9-b946-59af183ef5ab")
.courseTypeName("日常培训")
.isTestAfterLearn(true)
.lessonCount(2)
.testPaperGuid("0d747edf-eb8b-4a06-8f91-3970adb54eed")
.build();
}
public Object getPeiXunKeChengKeJieList(PeiXunKeChengReq req) {
return null;
}
public DongJieGetResp getDongJie(DongJieGetReq req) {
DongJieGetResp result = DongJieGetResp.builder()
.changeRecordGuid("f47ac10b-58cc-4372-a567-0e02b2c3d479")
.shiXiangGuid("a1b2c3d4-e5f6-4a5b-9c8d-7e6f5a4b3c2d")
.shiXiangType(1)
.oldValue("评标专业状态:正常(可参与评标)")
.newValue("评标专业状态:已冻结(暂停参与评标)")
.createTime(1762857600000L)
.creatorGuid("c1d2e3f4-a5b6-4c5d-6e7f-8a9b0c1d2e3f")
.creatorName("张三")
.modifyTime(1762857600000L)
.modifierGuid(null)
.modifierName(null)
.jieDongReason(null)
.jieDongFuJianGuid(null)
.dongJieReason("因系统数据校验发现该评标专业存在信息异常,需临时冻结核查")
.dongJieFuJianGuid("fj-98765432-1a2b-3c4d-5e6f-7g8h9i0j1k2l")
.dongJieSatrtTime(1762857600000L)
.dongJieEndTime(1762944000000L)
.build();
return result;
}
public BasePageResp<PeiXunKeChengKeJiePageResp> pagePeiXunKeChengKeJie(PeiXunKeChengKeJiePageReq req) {
ArrayList<PeiXunKeChengKeJiePageResp> list = Lists.newArrayList(
PeiXunKeChengKeJiePageResp.builder()
.finishTimestamp(null)
.learnFileGroupGuid("41e2cb9c-5370-4c47-b448-b7b845932a9b")
.lessonGuid("6a9eea61-09ed-427d-ab22-281d9cbb7106")
.lessonName("test1")
.studyContent("新建 PPT 演示文稿.pdf")
.studyProgress(null)
.build()
);
return BasePageResp.<PeiXunKeChengKeJiePageResp>builder()
.current(1)
.pages(1)
.total(1)
.data(list)
.build();
}
public PeiXunKeChengKeJieGetResp getPeiXunKeChengKeJie(PeiXunKeChengKeJieGetReq req) {
return PeiXunKeChengKeJieGetResp.builder()
.courseGuid("0966b932-cf4f-45bc-bdbf-03ccc4a7e92a")
.isTestAfterLearn(false)
.learnContent("新建 PPT 演示文稿.pdf")
.learnFileGroupGuid("41e2cb9c-5370-4c47-b448-b7b845932a9b")
.leiJiXueXiShiChang(null)
.lessonGuid("6a9eea61-09ed-427d-ab22-281d9cbb7106")
.lessonName("test1")
.lessonProgressGuid("")
.progressDetails("")
.studyProgress(null)
.testPaperGuid("")
.xueXiShiChang(2)
.build();
}
public List<PeiXunKeChengKeJieFuJianListResp> listPeiXunKeChengKeJieFuJian(PeiXunKeChengKeJieFuJianListReq req) {
ArrayList<PeiXunKeChengKeJieFuJianListResp> result = Lists.newArrayList(
PeiXunKeChengKeJieFuJianListResp.builder()
.createTime(1758532252845L)
.creatorGuid("其他用户")
.creatorName("其他用户")
.fileGroupGuid("97f9d7ce-11dd-4fab-bf97-dee5360d8ffb")
.fileGuid("1419732467212898305")
.fileMD5("")
.fileName("新建 PPT 演示文稿.pdf")
.fileType(null)
.groupGuid("41e2cb9c-5370-4c47-b448-b7b845932a9b")
.otherInfo("")
.sysFile(null)
.uploadTime(null)
.uploadTimeText("")
.build()
);
return result;
}
public PeiXunKeChengKeJieFuJianGetResp getPeiXunKeChengKeJieFuJian(PeiXunKeChengKeJieFuJianGetReq req) {
return PeiXunKeChengKeJieFuJianGetResp.builder()
.fileName("新建 PPT 演示文稿.pdf")
.downLoadUrl("https://purb.m-bid.cnooc.com.cn/bid-mimic-cggl/892422091105296385/2/2025/9/22/1419732467212898305/%E6%96%B0%E5%BB%BA%20PPT%20%E6%BC%94%E7%A4%BA%E6%96%87%E7%A8%BF.pdf?response-content-disposition=attachment%3Bfilename%3D%25E6%2596%25B0%25E5%25BB%25BA%2BPPT%2B%25E6%25BC%2594%25E7%25A4%25BA%25E6%2596%2587%25E7%25A8%25BF.pdf&AWSAccessKeyId=5T0WWU7JAUDUXJ2EG1FB&Expires=1763091567&Signature=JAo0KSspEbWreyxgc306%2FjmcI8E%3D")
.directDownLoadUrl("https://purb.m-bid.cnooc.com.cn/bid-mimic-cggl/892422091105296385/2/2025/9/22/1419732467212898305/%E6%96%B0%E5%BB%BA%20PPT%20%E6%BC%94%E7%A4%BA%E6%96%87%E7%A8%BF.pdf?response-content-disposition=attachment%3Bfilename%3D%25E6%2596%25B0%25E5%25BB%25BA%2BPPT%2B%25E6%25BC%2594%25E7%25A4%25BA%25E6%2596%2587%25E7%25A8%25BF.pdf&AWSAccessKeyId=5T0WWU7JAUDUXJ2EG1FB&Expires=1763091567&Signature=JAo0KSspEbWreyxgc306%2FjmcI8E%3D")
.createTime("1758532197592")
.fileSize("1128")
.build();
}
}
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment