refactor: 合并 biz_support_unit/biz_execution_unit/biz_service_org 为 biz_org, 删除 2 张孤儿表, 改 biz_person.work_unit → org_id FK

主要改动:
- SQL: biz_support_unit → biz_org, 加 org_type, 加 business_nature; 删 biz_execution_unit, biz_service_org
- SQL: biz_project.support_unit_id/name + service_org_id/name → org_id/name/type
- SQL: biz_meeting.support_unit_name → org_name
- SQL: biz_person.work_unit → org_id (FK)
- 后端: 新 BizOrg entity/mapper/service/controller
- 后端: BizProject/BizMeeting 字段重命名
- 后端: 删 12 个 BizSupportUnit/BizExecutionUnit/BizServiceOrg Java 文件
- 后端: BizPersonImportVO.workUnit → orgName (导入时查 biz_org 取 org_id)
- 后端: BizAuthController.registerExecutor 完整实现 (原 registerSupplier stub)
- 前端: 新 admin/Orgs.vue + manager/Orgs.vue (原 SupportUnits)
- 前端: RegisterExecutor.vue (原 RegisterSupplier, 单页 2 步)
- 前端: sponsor/executor/manager 多个文件 workUnit → orgId/orgName 重命名
- 前端: 统一 supplier → executor, 业务命名 sponsor(赞助方) / executor(执行方=供应商)
- 前端: 全工程 execution → executor (company type / role / person unit_type)
This commit is contained in:
郭庆泰
2026-08-15 12:41:10 +08:00
commit cf5790229a
694 changed files with 102090 additions and 0 deletions
+40
View File
@@ -0,0 +1,40 @@
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.org/POM/4.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.org/POM/4.0.0 http://maven.org/xsd/maven-4.0.0.xsd">
<parent>
<artifactId>ruoyi</artifactId>
<groupId>com.ruoyi</groupId>
<version>3.9.2</version>
</parent>
<modelVersion>4.0.0</modelVersion>
<artifactId>ruoyi-business</artifactId>
<description>
业务模块 - 北京整合医学学会项目管理系统
</description>
<dependencies>
<dependency>
<groupId>com.ruoyi</groupId>
<artifactId>ruoyi-common</artifactId>
</dependency>
<dependency>
<groupId>com.ruoyi</groupId>
<artifactId>ruoyi-system</artifactId>
</dependency>
<!-- 阿里云短信 SMS SDK -->
<dependency>
<groupId>com.aliyun</groupId>
<artifactId>aliyun-java-sdk-dysmsapi</artifactId>
<version>2.2.1</version>
</dependency>
<dependency>
<groupId>com.aliyun</groupId>
<artifactId>aliyun-java-sdk-core</artifactId>
<version>4.6.4</version>
</dependency>
</dependencies>
</project>
@@ -0,0 +1,130 @@
package com.ruoyi.business.controller;
import java.util.Map;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.security.crypto.bcrypt.BCryptPasswordEncoder;
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 com.ruoyi.business.domain.BizOrg;
import com.ruoyi.business.dto.SmsValidForm;
import com.ruoyi.business.service.IBizOrgService;
import com.ruoyi.business.service.SysSmsService;
import com.ruoyi.common.core.controller.BaseController;
import com.ruoyi.common.core.domain.AjaxResult;
import com.ruoyi.common.core.domain.entity.SysUser;
import com.ruoyi.system.service.ISysUserService;
/**
* 业务登录 - 角色选择
* registerExecutor 完整实现 (2026-08-15 重构, 原 registerSupplier):
* 1. 校验短信验证码
* 2. 检查手机号/用户名是否已注册
* 3. 加密密码
* 4. 插入 sys_user (用户名=前端传入, role_type=executor, 主账号)
* 5. 插入 biz_org (executor 类型, business_nature/contact_phone 从表单)
* 注: 主账号不建 biz_person, 跟 sponsor 主账号保持一致
*/
@RestController
@RequestMapping("/business/auth")
public class BizAuthController extends BaseController {
@Autowired
private SysSmsService smsService;
@Autowired
private ISysUserService userService;
@Autowired
private IBizOrgService bizOrgService;
@Autowired
private BCryptPasswordEncoder passwordEncoder;
@PostMapping("/login")
public AjaxResult login(@RequestBody Map<String, Object> body) {
String username = (String) body.get("username");
String password = (String) body.get("password");
String roleType = (String) body.get("roleType");
return success().put("roleType", roleType).put("token", "mock-token");
}
@PostMapping("/registerExecutor")
public AjaxResult registerExecutor(@RequestBody Map<String, Object> body) {
String username = (String) body.get("username");
String unitName = (String) body.get("unitName");
String businessNature = (String) body.get("businessNature");
String phone = (String) body.get("phone");
String code = (String) body.get("smsCode");
String password = (String) body.get("password");
String confirmPassword = (String) body.get("confirmPassword");
String uuid = (String) body.get("uuid");
// 1. 基础校验
if (username == null || username.length() < 4 || username.length() > 20) return error("用户名长度 4-20 位");
if (!username.matches("^[A-Za-z0-9_]+$")) return error("用户名只能包含字母/数字/下划线");
if (unitName == null || unitName.isEmpty()) return error("企业名称不能为空");
if (businessNature == null || businessNature.isEmpty()) return error("企业性质不能为空");
if (phone == null || !phone.matches("^1\\d{10}$")) return error("手机号格式错误");
if (code == null || code.isEmpty()) return error("请输入短信验证码");
if (password == null || password.length() < 6 || password.length() > 20) return error("密码长度 6-20 位");
if (!password.equals(confirmPassword)) return error("两次密码输入不一致");
// 2. 校验短信验证码
SmsValidForm smsForm = new SmsValidForm();
smsForm.setPhone(phone);
smsForm.setSmsCode(code);
smsForm.setUuid(uuid);
try {
smsService.verifyCode(smsForm);
} catch (RuntimeException e) {
return error("验证码错误或已过期: " + e.getMessage());
}
// 3. 检查手机号/用户名是否已注册
if (userService.isPhoneRegistered(phone)) {
return error("该手机号已注册, 请直接登录");
}
SysUser nameCheck = new SysUser();
nameCheck.setUserName(username);
if (!userService.checkUserNameUnique(nameCheck)) {
return error("用户名已被占用: " + username);
}
// 4. 加密密码 + 插入 sys_user (用户名=userName 字段, 主账号)
SysUser user = new SysUser();
user.setUserName(username);
user.setNickName(unitName); // 默认昵称用公司名, 用户后续可在账号页改
user.setPhonenumber(phone);
user.setPassword(passwordEncoder.encode(password));
user.setStatus("0");
userService.insertUser(user);
Long userId = user.getUserId();
// sys_user.role_type 字段需 = executor
userService.updateRoleType(userId, "executor");
// 5. 插入 biz_org (executor 类型, 主账号自己当 contact)
BizOrg org = new BizOrg();
org.setOrgId(null);
org.setOrgName(unitName);
org.setOrgType("executor");
org.setBusinessNature(businessNature);
org.setContactPhone(phone);
org.setContactName(unitName); // 联系人默认 = 公司名
org.setStatus("0");
bizOrgService.insert(org);
Long orgId = org.getOrgId();
// 注: 主账号不建 biz_person (与 sponsor 主账号保持一致, 见 sponsor/Account.vue)
// 后续主账号在 [账号信息] 看到 [所属公司] 时, 后端可通过 sys_user.role_type 关联 biz_org 取 org_name
// 子账号 (biz_person.unit_type='sponsor' + user_id 关联 sys_user.parent_user_id) 由 [人员管理] 创建
return success("注册成功, 请等待审核").put("userId", userId).put("orgId", orgId);
}
@PostMapping("/registerSponsor")
public AjaxResult registerSponsor(@RequestBody Map<String, Object> body) {
return success();
}
}
@@ -0,0 +1,56 @@
package com.ruoyi.business.controller;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import com.ruoyi.common.core.controller.BaseController;
import com.ruoyi.common.core.domain.AjaxResult;
import com.ruoyi.business.domain.BizProject;
import com.ruoyi.business.domain.BizMeeting;
import com.ruoyi.business.domain.BizExpert;
import com.ruoyi.business.service.IBizProjectService;
import com.ruoyi.business.service.IBizMeetingService;
import com.ruoyi.business.service.IBizExpertService;
/**
* 工作台统计
*/
@RestController
@RequestMapping("/business/dashboard")
public class BizDashboardController extends BaseController {
@Autowired private IBizProjectService bizProjectService;
@Autowired private IBizMeetingService bizMeetingService;
@Autowired private IBizExpertService bizExpertService;
@GetMapping("/manager")
public AjaxResult managerDashboard() {
Map<String, Object> map = new HashMap<>();
List<BizProject> projects = bizProjectService.selectList(new BizProject());
List<BizMeeting> meetings = bizMeetingService.selectList(new BizMeeting());
List<BizExpert> experts = bizExpertService.selectList(new BizExpert());
map.put("totalProjects", projects.size());
map.put("totalMeetings", meetings.size());
map.put("totalExperts", experts.size());
map.put("todoMeetings", meetings.stream().filter(m -> "未执行".equals(m.getCurrentStage())).count());
map.put("doingMeetings", meetings.stream().filter(m -> "待监管".equals(m.getCurrentStage()) || "待整改".equals(m.getCurrentStage())).count());
map.put("doneMeetings", meetings.stream().filter(m -> "已结算".equals(m.getCurrentStage()) || "已结题".equals(m.getCurrentStage())).count());
return success(map);
}
@GetMapping("/leader")
public AjaxResult leaderDashboard() {
Map<String, Object> map = new HashMap<>();
List<BizProject> projects = bizProjectService.selectList(new BizProject());
List<BizMeeting> meetings = bizMeetingService.selectList(new BizMeeting());
map.put("totalProjects", projects.size());
map.put("totalMeetings", meetings.size());
map.put("finishedProjects", projects.stream().filter(p -> "1".equals(p.getIsFinished())).count());
map.put("finishedMeetings", meetings.stream().filter(m -> "已结题".equals(m.getCurrentStage())).count());
return success(map);
}
}
@@ -0,0 +1,142 @@
package com.ruoyi.business.controller;
import java.util.List;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.security.access.prepost.PreAuthorize;
import org.springframework.web.bind.annotation.*;
import com.ruoyi.common.annotation.Log;
import com.ruoyi.common.core.controller.BaseController;
import com.ruoyi.common.core.domain.AjaxResult;
import com.ruoyi.common.core.page.TableDataInfo;
import com.ruoyi.common.enums.BusinessType;
import com.ruoyi.common.utils.SecurityUtils;
import com.ruoyi.business.domain.BizDepartment;
import com.ruoyi.business.domain.BizDoctorTitle;
import com.ruoyi.business.service.IBizDepartmentService;
import com.ruoyi.business.service.IBizDoctorTitleService;
/**
* 业务字典管理 (科室 + 医生职称)
* 仅管理员可维护; 其它角色可访问 /active 接口拉启用的列表
*/
@RestController
@RequestMapping("/business/dict")
public class BizDictController extends BaseController
{
@Autowired
private IBizDepartmentService departmentService;
@Autowired
private IBizDoctorTitleService doctorTitleService;
// ============== 科室 ==============
@PreAuthorize("@ss.hasRole('admin')")
@GetMapping("/department/list")
public TableDataInfo listDept(BizDepartment entity)
{
startPage();
return getDataTable(departmentService.selectList(entity));
}
@GetMapping("/department/active")
public AjaxResult activeDept()
{
return success(departmentService.selectActive());
}
@GetMapping("/department/{deptId}")
public AjaxResult getDept(@PathVariable Long deptId)
{
return success(departmentService.getById(deptId));
}
@PreAuthorize("@ss.hasRole('admin')")
@Log(title = "科室字典", businessType = BusinessType.INSERT)
@PostMapping("/department")
public AjaxResult addDept(@RequestBody BizDepartment entity)
{
if (entity.getName() == null || entity.getName().trim().isEmpty()) {
return error("科室名称不能为空");
}
if (entity.getStatus() == null || entity.getStatus().isEmpty()) entity.setStatus("0");
entity.setCreateBy(SecurityUtils.getUsername());
return toAjax(departmentService.insert(entity));
}
@PreAuthorize("@ss.hasRole('admin')")
@Log(title = "科室字典", businessType = BusinessType.UPDATE)
@PutMapping("/department")
public AjaxResult editDept(@RequestBody BizDepartment entity)
{
if (entity.getDeptId() == null) return error("ID 不能为空");
if (entity.getName() == null || entity.getName().trim().isEmpty()) {
return error("科室名称不能为空");
}
entity.setUpdateBy(SecurityUtils.getUsername());
return toAjax(departmentService.updateByPrimaryKey(entity));
}
@PreAuthorize("@ss.hasRole('admin')")
@Log(title = "科室字典", businessType = BusinessType.DELETE)
@DeleteMapping("/department/{ids}")
public AjaxResult removeDept(@PathVariable Long[] ids)
{
return toAjax(departmentService.deleteByPrimaryKeys(ids));
}
// ============== 医生职称 ==============
@PreAuthorize("@ss.hasRole('admin')")
@GetMapping("/title/list")
public TableDataInfo listTitle(BizDoctorTitle entity)
{
startPage();
return getDataTable(doctorTitleService.selectList(entity));
}
@GetMapping("/title/active")
public AjaxResult activeTitle()
{
return success(doctorTitleService.selectActive());
}
@GetMapping("/title/{titleId}")
public AjaxResult getTitle(@PathVariable Long titleId)
{
return success(doctorTitleService.getById(titleId));
}
@PreAuthorize("@ss.hasRole('admin')")
@Log(title = "医生职称字典", businessType = BusinessType.INSERT)
@PostMapping("/title")
public AjaxResult addTitle(@RequestBody BizDoctorTitle entity)
{
if (entity.getName() == null || entity.getName().trim().isEmpty()) {
return error("职称名称不能为空");
}
if (entity.getStatus() == null || entity.getStatus().isEmpty()) entity.setStatus("0");
entity.setCreateBy(SecurityUtils.getUsername());
return toAjax(doctorTitleService.insert(entity));
}
@PreAuthorize("@ss.hasRole('admin')")
@Log(title = "医生职称字典", businessType = BusinessType.UPDATE)
@PutMapping("/title")
public AjaxResult editTitle(@RequestBody BizDoctorTitle entity)
{
if (entity.getTitleId() == null) return error("ID 不能为空");
if (entity.getName() == null || entity.getName().trim().isEmpty()) {
return error("职称名称不能为空");
}
entity.setUpdateBy(SecurityUtils.getUsername());
return toAjax(doctorTitleService.updateByPrimaryKey(entity));
}
@PreAuthorize("@ss.hasRole('admin')")
@Log(title = "医生职称字典", businessType = BusinessType.DELETE)
@DeleteMapping("/title/{ids}")
public AjaxResult removeTitle(@PathVariable Long[] ids)
{
return toAjax(doctorTitleService.deleteByPrimaryKeys(ids));
}
}
@@ -0,0 +1,122 @@
package com.ruoyi.business.controller;
import java.util.List;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;
import com.ruoyi.common.annotation.Log;
import com.ruoyi.common.core.controller.BaseController;
import com.ruoyi.common.core.domain.AjaxResult;
import com.ruoyi.common.core.domain.entity.SysUser;
import com.ruoyi.common.core.page.TableDataInfo;
import com.ruoyi.common.enums.BusinessType;
import com.ruoyi.common.utils.SecurityUtils;
import com.ruoyi.system.mapper.SysUserMapper;
import com.ruoyi.business.domain.BizExecutionIntent;
import com.ruoyi.business.domain.BizProject;
import com.ruoyi.business.service.IBizExecutionIntentService;
import com.ruoyi.business.service.IBizProjectService;
/**
* 执行意向Controller
*/
@RestController
@RequestMapping("/business/executionIntent")
public class BizExecutionIntentController extends BaseController
{
@Autowired
private SysUserMapper sysUserMapper;
@Autowired
private IBizExecutionIntentService bizExecutionIntentService;
@Autowired
private IBizProjectService bizProjectService;
/**
* 公开门户点击"立即报名" — 写入意向 (user_id = 当前登录用户)
* POST /business/executionIntent/signup
* body: { projectId } (后端按 id 查项目回填 no/name)
* 返回 { intentId, projectNo, projectName, onboardStatus }
*/
@Log(title = "执行意向", businessType = BusinessType.INSERT)
@PostMapping("/signup")
public AjaxResult signup(@RequestBody BizExecutionIntent bizExecutionIntent)
{
// 入参只接受 projectId (项目主键)
// BizExecutionIntent 没有 projectId 字段, 用 params 暂存
Object pidRaw = bizExecutionIntent.getParams().get("projectId");
Long projectId = null;
if (pidRaw != null) {
try { projectId = Long.parseLong(String.valueOf(pidRaw)); } catch (Exception e) { return error("项目ID格式错误"); }
}
if (projectId == null) return error("项目ID不能为空");
BizProject proj = bizProjectService.getById(String.valueOf(projectId));
if (proj == null) return error("项目不存在");
// 查重: 当前用户是否已报过这个项目
BizExecutionIntent q = new BizExecutionIntent();
q.setUserId(SecurityUtils.getUserId());
q.setProjectNo(proj.getProjectNo());
List<BizExecutionIntent> exists = bizExecutionIntentService.selectList(q);
if (exists != null && !exists.isEmpty()) return error("您已报名过该项目,无需重复报名");
bizExecutionIntent.setProjectNo(proj.getProjectNo());
bizExecutionIntent.setProjectName(proj.getProjectName());
Long uid = SecurityUtils.getUserId();
bizExecutionIntent.setUserId(uid);
// 默认按用户表信息补全 name/phone (意向表历史字段, 方便后续审核流使用)
SysUser u = sysUserMapper.selectUserById(uid);
if (u != null) {
if (bizExecutionIntent.getName() == null || bizExecutionIntent.getName().isEmpty())
bizExecutionIntent.setName(u.getUserName());
if (bizExecutionIntent.getPhone() == null || bizExecutionIntent.getPhone().isEmpty())
bizExecutionIntent.setPhone(u.getPhonenumber());
}
if (bizExecutionIntent.getOnboardStatus() == null) bizExecutionIntent.setOnboardStatus("未入库");
bizExecutionIntent.setCreateBy(SecurityUtils.getUsername());
int n = bizExecutionIntentService.insert(bizExecutionIntent);
if (n == 0) return error("报名失败");
return success(bizExecutionIntent);
}
/** 当前用户是否已报过该项目 */
@GetMapping("/hasSigned")
public AjaxResult hasSigned(@RequestParam("projectId") Long projectId)
{
if (projectId == null) return success(false);
BizProject proj = bizProjectService.getById(String.valueOf(projectId));
if (proj == null) return success(false);
BizExecutionIntent q = new BizExecutionIntent();
q.setUserId(SecurityUtils.getUserId());
q.setProjectNo(proj.getProjectNo());
List<BizExecutionIntent> exists = bizExecutionIntentService.selectList(q);
return success(exists != null && !exists.isEmpty());
}
@GetMapping("/list")
public TableDataInfo list(BizExecutionIntent bizExecutionIntent)
{
startPage();
List<BizExecutionIntent> list = bizExecutionIntentService.selectList(bizExecutionIntent);
return getDataTable(list);
}
@GetMapping("/{intentId}")
public AjaxResult getInfo(@PathVariable("intentId") String intentId)
{
return success(bizExecutionIntentService.getById(intentId));
}
@Log(title = "执行意向", businessType = BusinessType.INSERT)
@PostMapping
public AjaxResult add(@RequestBody BizExecutionIntent bizExecutionIntent)
{
return toAjax(bizExecutionIntentService.insert(bizExecutionIntent));
}
@Log(title = "执行意向", businessType = BusinessType.UPDATE)
@PutMapping
public AjaxResult edit(@RequestBody BizExecutionIntent bizExecutionIntent)
{
return toAjax(bizExecutionIntentService.updateByPrimaryKey(bizExecutionIntent));
}
@Log(title = "执行意向", businessType = BusinessType.DELETE)
@DeleteMapping("/{ids}")
public AjaxResult remove(@PathVariable String[] ids)
{
return toAjax(bizExecutionIntentService.deleteByPrimaryKeys(ids));
}
}
@@ -0,0 +1,74 @@
package com.ruoyi.business.controller;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.jdbc.core.JdbcTemplate;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.RestController;
import com.ruoyi.common.core.controller.BaseController;
import com.ruoyi.common.core.domain.AjaxResult;
/**
* 执行方用户查询 Controller
* 绕开 RuoYi 的 sys_user:list 权限(manager01 等普通用户被 data_scope 过滤看不到)。
* 按 sys_user.role_type = 'executor' 过滤真正的执行方用户。
*/
@RestController
@RequestMapping("/business/executor")
public class BizExecutorController extends BaseController
{
@Autowired
private JdbcTemplate jdbcTemplate;
/**
* 查询指定角色用户列表 (支持 executor / sponsor / manager / leader / doctor / admin)
* @param roleType 角色类型 (默认 'executor')
* @param userName 用户名模糊搜索 (可选)
* @param userId 精确匹配 (可选)
* @param pageSize 限制返回行数 (默认 50)
*/
@GetMapping("/list")
public AjaxResult list(@RequestParam(required = false, defaultValue = "executor") String roleType,
@RequestParam(required = false) String userName,
@RequestParam(required = false) Long userId,
@RequestParam(required = false, defaultValue = "50") Integer pageSize)
{
StringBuilder sql = new StringBuilder()
.append("SELECT user_id, dept_id, user_name, nick_name, email, phonenumber, role_type, status, create_time ")
.append("FROM sys_user WHERE del_flag = '0' AND status = '0' AND role_type = ?");
List<Object> args = new ArrayList<>();
args.add(roleType);
if (userId != null) {
sql.append(" AND user_id = ?");
args.add(userId);
}
if (userName != null && !userName.isEmpty()) {
sql.append(" AND user_name LIKE ?");
args.add("%" + userName + "%");
}
sql.append(" ORDER BY user_id ASC LIMIT ?");
args.add(pageSize);
List<Map<String, Object>> rows = jdbcTemplate.queryForList(sql.toString(), args.toArray());
// 标准化为前端 el-select 友好的字段
List<Map<String, Object>> result = new ArrayList<>();
for (Map<String, Object> r : rows) {
Map<String, Object> u = new HashMap<>();
u.put("userId", r.get("user_id"));
u.put("deptId", r.get("dept_id"));
u.put("userName", r.get("user_name"));
u.put("nickName", r.get("nick_name"));
u.put("email", r.get("email"));
u.put("phonenumber", r.get("phonenumber"));
u.put("roleType", r.get("role_type"));
u.put("status", r.get("status"));
result.add(u);
}
return success(result);
}
}
@@ -0,0 +1,74 @@
package com.ruoyi.business.controller;
import java.util.List;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;
import com.ruoyi.common.annotation.Log;
import com.ruoyi.common.core.controller.BaseController;
import com.ruoyi.common.core.domain.AjaxResult;
import com.ruoyi.common.core.page.TableDataInfo;
import com.ruoyi.common.enums.BusinessType;
import com.ruoyi.common.utils.SecurityUtils;
import com.ruoyi.business.domain.BizExpert;
import com.ruoyi.business.service.IBizExpertService;
/**
* 专家Controller
*/
@RestController
@RequestMapping("/business/expert")
public class BizExpertController extends BaseController
{
@Autowired
private IBizExpertService bizExpertService;
@GetMapping("/list")
public TableDataInfo list(BizExpert bizExpert)
{
startPage();
List<BizExpert> list = bizExpertService.selectList(bizExpert);
return getDataTable(list);
}
@GetMapping("/{expertId}")
public AjaxResult getInfo(@PathVariable("expertId") String expertId)
{
return success(bizExpertService.getById(expertId));
}
/**
* 查当前登录用户的专家信息 (按 userId 路由)
*/
@GetMapping("/profile")
public AjaxResult getProfile()
{
return success(bizExpertService.getByUserId(SecurityUtils.getUserId()));
}
@Log(title = "专家", businessType = BusinessType.INSERT)
@PostMapping
public AjaxResult add(@RequestBody BizExpert bizExpert)
{
return toAjax(bizExpertService.insert(bizExpert));
}
@Log(title = "专家", businessType = BusinessType.UPDATE)
@PutMapping
public AjaxResult edit(@RequestBody BizExpert bizExpert)
{
return toAjax(bizExpertService.updateByPrimaryKey(bizExpert));
}
/**
* 个人专家信息更新 (走 userId 路由, 后端强制注入当前登录用户)
* 不依赖前端传 expertId; 找不到 expert 行时自动 insert
*/
@Log(title = "专家个人信息", businessType = BusinessType.UPDATE)
@PutMapping("/profile")
public AjaxResult updateProfile(@RequestBody BizExpert bizExpert)
{
bizExpert.setUserId(SecurityUtils.getUserId());
bizExpert.setCreateBy(SecurityUtils.getUsername());
return toAjax(bizExpertService.updateProfileByUserId(bizExpert));
}
@Log(title = "专家", businessType = BusinessType.DELETE)
@DeleteMapping("/{ids}")
public AjaxResult remove(@PathVariable String[] ids)
{
return toAjax(bizExpertService.deleteByPrimaryKeys(ids));
}
}
@@ -0,0 +1,53 @@
package com.ruoyi.business.controller;
import java.util.List;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;
import com.ruoyi.common.annotation.Log;
import com.ruoyi.common.core.controller.BaseController;
import com.ruoyi.common.core.domain.AjaxResult;
import com.ruoyi.common.core.page.TableDataInfo;
import com.ruoyi.common.enums.BusinessType;
import com.ruoyi.business.domain.BizInvitation;
import com.ruoyi.business.service.IBizInvitationService;
/**
* 邀请函Controller
*/
@RestController
@RequestMapping("/business/invitation")
public class BizInvitationController extends BaseController
{
@Autowired
private IBizInvitationService bizInvitationService;
@GetMapping("/list")
public TableDataInfo list(BizInvitation bizInvitation)
{
startPage();
List<BizInvitation> list = bizInvitationService.selectList(bizInvitation);
return getDataTable(list);
}
@GetMapping("/{invitationId}")
public AjaxResult getInfo(@PathVariable("invitationId") String invitationId)
{
return success(bizInvitationService.getById(invitationId));
}
@Log(title = "邀请函", businessType = BusinessType.INSERT)
@PostMapping
public AjaxResult add(@RequestBody BizInvitation bizInvitation)
{
return toAjax(bizInvitationService.insert(bizInvitation));
}
@Log(title = "邀请函", businessType = BusinessType.UPDATE)
@PutMapping
public AjaxResult edit(@RequestBody BizInvitation bizInvitation)
{
return toAjax(bizInvitationService.updateByPrimaryKey(bizInvitation));
}
@Log(title = "邀请函", businessType = BusinessType.DELETE)
@DeleteMapping("/{ids}")
public AjaxResult remove(@PathVariable String[] ids)
{
return toAjax(bizInvitationService.deleteByPrimaryKeys(ids));
}
}
@@ -0,0 +1,53 @@
package com.ruoyi.business.controller;
import java.util.List;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;
import com.ruoyi.common.annotation.Log;
import com.ruoyi.common.core.controller.BaseController;
import com.ruoyi.common.core.domain.AjaxResult;
import com.ruoyi.common.core.page.TableDataInfo;
import com.ruoyi.common.enums.BusinessType;
import com.ruoyi.business.domain.BizLaborVoucher;
import com.ruoyi.business.service.IBizLaborVoucherService;
/**
* 劳务凭证Controller
*/
@RestController
@RequestMapping("/business/laborVoucher")
public class BizLaborVoucherController extends BaseController
{
@Autowired
private IBizLaborVoucherService bizLaborVoucherService;
@GetMapping("/list")
public TableDataInfo list(BizLaborVoucher bizLaborVoucher)
{
startPage();
List<BizLaborVoucher> list = bizLaborVoucherService.selectList(bizLaborVoucher);
return getDataTable(list);
}
@GetMapping("/{voucherId}")
public AjaxResult getInfo(@PathVariable("voucherId") String voucherId)
{
return success(bizLaborVoucherService.getById(voucherId));
}
@Log(title = "劳务凭证", businessType = BusinessType.INSERT)
@PostMapping
public AjaxResult add(@RequestBody BizLaborVoucher bizLaborVoucher)
{
return toAjax(bizLaborVoucherService.insert(bizLaborVoucher));
}
@Log(title = "劳务凭证", businessType = BusinessType.UPDATE)
@PutMapping
public AjaxResult edit(@RequestBody BizLaborVoucher bizLaborVoucher)
{
return toAjax(bizLaborVoucherService.updateByPrimaryKey(bizLaborVoucher));
}
@Log(title = "劳务凭证", businessType = BusinessType.DELETE)
@DeleteMapping("/{ids}")
public AjaxResult remove(@PathVariable String[] ids)
{
return toAjax(bizLaborVoucherService.deleteByPrimaryKeys(ids));
}
}
@@ -0,0 +1,53 @@
package com.ruoyi.business.controller;
import java.util.List;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;
import com.ruoyi.common.annotation.Log;
import com.ruoyi.common.core.controller.BaseController;
import com.ruoyi.common.core.domain.AjaxResult;
import com.ruoyi.common.core.page.TableDataInfo;
import com.ruoyi.common.enums.BusinessType;
import com.ruoyi.business.domain.BizMeeting;
import com.ruoyi.business.service.IBizMeetingService;
/**
* 会议Controller
*/
@RestController
@RequestMapping("/business/meeting")
public class BizMeetingController extends BaseController
{
@Autowired
private IBizMeetingService bizMeetingService;
@GetMapping("/list")
public TableDataInfo list(BizMeeting bizMeeting)
{
startPage();
List<BizMeeting> list = bizMeetingService.selectList(bizMeeting);
return getDataTable(list);
}
@GetMapping("/{meetingId}")
public AjaxResult getInfo(@PathVariable("meetingId") String meetingId)
{
return success(bizMeetingService.getById(meetingId));
}
@Log(title = "会议", businessType = BusinessType.INSERT)
@PostMapping
public AjaxResult add(@RequestBody BizMeeting bizMeeting)
{
return toAjax(bizMeetingService.insert(bizMeeting));
}
@Log(title = "会议", businessType = BusinessType.UPDATE)
@PutMapping
public AjaxResult edit(@RequestBody BizMeeting bizMeeting)
{
return toAjax(bizMeetingService.updateByPrimaryKey(bizMeeting));
}
@Log(title = "会议", businessType = BusinessType.DELETE)
@DeleteMapping("/{ids}")
public AjaxResult remove(@PathVariable String[] ids)
{
return toAjax(bizMeetingService.deleteByPrimaryKeys(ids));
}
}
@@ -0,0 +1,53 @@
package com.ruoyi.business.controller;
import java.util.List;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;
import com.ruoyi.common.annotation.Log;
import com.ruoyi.common.core.controller.BaseController;
import com.ruoyi.common.core.domain.AjaxResult;
import com.ruoyi.common.core.page.TableDataInfo;
import com.ruoyi.common.enums.BusinessType;
import com.ruoyi.business.domain.BizMeetingSettlement;
import com.ruoyi.business.service.IBizMeetingSettlementService;
/**
* 会议结算Controller
*/
@RestController
@RequestMapping("/business/meetingSettlement")
public class BizMeetingSettlementController extends BaseController
{
@Autowired
private IBizMeetingSettlementService bizMeetingSettlementService;
@GetMapping("/list")
public TableDataInfo list(BizMeetingSettlement bizMeetingSettlement)
{
startPage();
List<BizMeetingSettlement> list = bizMeetingSettlementService.selectList(bizMeetingSettlement);
return getDataTable(list);
}
@GetMapping("/{settlementId}")
public AjaxResult getInfo(@PathVariable("settlementId") String settlementId)
{
return success(bizMeetingSettlementService.getById(settlementId));
}
@Log(title = "会议结算", businessType = BusinessType.INSERT)
@PostMapping
public AjaxResult add(@RequestBody BizMeetingSettlement bizMeetingSettlement)
{
return toAjax(bizMeetingSettlementService.insert(bizMeetingSettlement));
}
@Log(title = "会议结算", businessType = BusinessType.UPDATE)
@PutMapping
public AjaxResult edit(@RequestBody BizMeetingSettlement bizMeetingSettlement)
{
return toAjax(bizMeetingSettlementService.updateByPrimaryKey(bizMeetingSettlement));
}
@Log(title = "会议结算", businessType = BusinessType.DELETE)
@DeleteMapping("/{ids}")
public AjaxResult remove(@PathVariable String[] ids)
{
return toAjax(bizMeetingSettlementService.deleteByPrimaryKeys(ids));
}
}
@@ -0,0 +1,128 @@
package com.ruoyi.business.controller;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.security.access.prepost.PreAuthorize;
import org.springframework.web.bind.annotation.*;
import com.ruoyi.common.annotation.Log;
import com.ruoyi.common.core.controller.BaseController;
import com.ruoyi.common.core.domain.AjaxResult;
import com.ruoyi.common.core.page.TableDataInfo;
import com.ruoyi.common.enums.BusinessType;
import com.ruoyi.common.utils.SecurityUtils;
import com.ruoyi.business.domain.BizMessage;
import com.ruoyi.business.service.IBizMessageService;
/**
* 个人消息Controller
*/
@RestController
@RequestMapping("/business/message")
public class BizMessageController extends BaseController
{
@Autowired
private IBizMessageService bizMessageService;
/**
* 列表 (管理员视角: 全量 + 过滤)
*/
@PreAuthorize("@ss.hasPermi('business:message:list')")
@GetMapping("/list")
public TableDataInfo list(BizMessage bizMessage)
{
startPage();
List<BizMessage> list = bizMessageService.selectList(bizMessage);
return getDataTable(list);
}
/**
* 当前登录用户的最近消息 (含未读统计)
* GET /business/message/my?limit=50
* 返回 {rows: [...], unread: 12}
*/
@GetMapping("/my")
public AjaxResult my(@RequestParam(value = "limit", required = false, defaultValue = "50") Integer limit)
{
Long uid = SecurityUtils.getUserId();
List<BizMessage> rows = bizMessageService.selectMyRecent(uid, limit);
int unread = 0;
for (BizMessage m : rows) {
if ("0".equals(m.getIsRead())) unread++;
}
Map<String, Object> data = new HashMap<>();
data.put("rows", rows);
data.put("unread", unread);
data.put("total", rows.size());
return success(data);
}
/**
* 标记单条已读 (校验归属)
*/
@PutMapping("/read/{msgId}")
public AjaxResult markRead(@PathVariable Long msgId)
{
Long uid = SecurityUtils.getUserId();
int n = bizMessageService.markRead(msgId, uid);
return n > 0 ? success() : error("消息不存在或无权操作");
}
/**
* 当前用户全部标记已读
*/
@PutMapping("/readAll")
public AjaxResult markAllRead()
{
Long uid = SecurityUtils.getUserId();
int n = bizMessageService.markAllRead(uid);
return success(n);
}
/**
* 详情 (校验归属)
*/
@GetMapping("/{msgId}")
public AjaxResult getInfo(@PathVariable Long msgId)
{
BizMessage m = bizMessageService.getById(msgId);
if (m == null) return error("消息不存在");
// 非管理员只能看自己的
if (!SecurityUtils.isAdmin() && !m.getReceiverUserId().equals(SecurityUtils.getUserId())) {
return error("无权查看");
}
// 自动标记已读
if ("0".equals(m.getIsRead()) && m.getReceiverUserId().equals(SecurityUtils.getUserId())) {
bizMessageService.markRead(msgId, SecurityUtils.getUserId());
m.setIsRead("1");
}
return success(m);
}
/**
* 发送消息给某用户 (管理员)
*/
@PreAuthorize("@ss.hasPermi('business:message:add')")
@Log(title = "个人消息", businessType = BusinessType.INSERT)
@PostMapping
public AjaxResult add(@RequestBody BizMessage bizMessage)
{
if (bizMessage.getReceiverUserId() == null) return error("接收人不能为空");
if (bizMessage.getTitle() == null || bizMessage.getTitle().isEmpty()) return error("标题不能为空");
bizMessage.setCreateBy(SecurityUtils.getUsername());
return toAjax(bizMessageService.insert(bizMessage));
}
/**
* 批量删除 (管理员)
*/
@PreAuthorize("@ss.hasPermi('business:message:remove')")
@Log(title = "个人消息", businessType = BusinessType.DELETE)
@DeleteMapping("/{ids}")
public AjaxResult remove(@PathVariable Long[] ids)
{
return toAjax(bizMessageService.deleteByPrimaryKeys(ids));
}
}
@@ -0,0 +1,53 @@
package com.ruoyi.business.controller;
import java.util.List;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;
import com.ruoyi.common.annotation.Log;
import com.ruoyi.common.core.controller.BaseController;
import com.ruoyi.common.core.domain.AjaxResult;
import com.ruoyi.common.core.page.TableDataInfo;
import com.ruoyi.common.enums.BusinessType;
import com.ruoyi.business.domain.BizOrg;
import com.ruoyi.business.service.IBizOrgService;
/**
* 公司Controller (赞助方 + 执行方 共用)
* GET /business/org/list?orgType=sponsor|execution
*/
@RestController
@RequestMapping("/business/org")
public class BizOrgController extends BaseController {
@Autowired
private IBizOrgService bizOrgService;
@GetMapping("/list")
public TableDataInfo list(BizOrg bizOrg) {
startPage();
List<BizOrg> list = bizOrgService.selectList(bizOrg);
return getDataTable(list);
}
@GetMapping("/{orgId}")
public AjaxResult getInfo(@PathVariable("orgId") Long orgId) {
return success(bizOrgService.getById(orgId));
}
@Log(title = "公司管理", businessType = BusinessType.INSERT)
@PostMapping
public AjaxResult add(@RequestBody BizOrg bizOrg) {
return toAjax(bizOrgService.insert(bizOrg));
}
@Log(title = "公司管理", businessType = BusinessType.UPDATE)
@PutMapping
public AjaxResult edit(@RequestBody BizOrg bizOrg) {
return toAjax(bizOrgService.updateByPrimaryKey(bizOrg));
}
@Log(title = "公司管理", businessType = BusinessType.DELETE)
@DeleteMapping("/{orgIds}")
public AjaxResult remove(@PathVariable Long[] orgIds) {
return toAjax(bizOrgService.deleteByPrimaryKeys(orgIds));
}
}
@@ -0,0 +1,172 @@
package com.ruoyi.business.controller;
import java.util.ArrayList;
import java.util.List;
import jakarta.servlet.http.HttpServletResponse;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;
import org.springframework.web.multipart.MultipartFile;
import com.ruoyi.common.annotation.Log;
import com.ruoyi.common.core.controller.BaseController;
import com.ruoyi.common.core.domain.AjaxResult;
import com.ruoyi.common.core.page.TableDataInfo;
import com.ruoyi.common.enums.BusinessType;
import com.ruoyi.common.utils.poi.ExcelUtil;
import com.ruoyi.business.domain.BizOrg;
import com.ruoyi.business.domain.BizPerson;
import com.ruoyi.business.domain.BizPersonImportVO;
import com.ruoyi.business.mapper.BizOrgMapper;
import com.ruoyi.business.service.IBizPersonService;
import com.ruoyi.common.core.domain.entity.SysUser;
import com.ruoyi.common.exception.ServiceException;
/**
* 人员Controller
*/
@RestController
@RequestMapping("/business/person")
public class BizPersonController extends BaseController
{
@Autowired
private IBizPersonService bizPersonService;
@Autowired
private BizOrgMapper bizOrgMapper;
@GetMapping("/list")
public TableDataInfo list(BizPerson bizPerson)
{
startPage();
List<BizPerson> list = bizPersonService.selectList(bizPerson);
return getDataTable(list);
}
/**
* sponsor 端专属人员列表 (走专属 mapper, 利用 biz_person.user_id -> sys_user.parent_user_id 做归属过滤)
* 公共 /list 方法不被 sponsor 专属逻辑污染
*/
@GetMapping("/sponsorList")
public TableDataInfo sponsorList(BizPerson bizPerson)
{
Long mainUid = getUserId();
bizPerson.getParams().put("sponsorOwnerUid", mainUid);
startPage();
List<BizPerson> list = bizPersonService.selectSponsorList(bizPerson);
return getDataTable(list);
}
@GetMapping("/{personId}")
public AjaxResult getInfo(@PathVariable("personId") String personId)
{
return success(bizPersonService.getById(personId));
}
@Log(title = "人员", businessType = BusinessType.INSERT)
@PostMapping
public AjaxResult add(@RequestBody BizPerson bizPerson)
{
bizPerson.setCreateBy(getUsername());
bizPerson.setUpdateBy(getUsername());
// sponsor 端新建人员 = 创建 sys_user 子账号 (SUB, parent=当前登录主账号)
// service 内: 创建 sys_user + 创建 biz_person + 把 sys_user.user_id 绑到 biz_person.user_id
SysUser created = bizPersonService.insert(bizPerson, getUserId());
AjaxResult ajax = success(created);
// SysUser.password 是 @JsonProperty WRITE_ONLY 不会序列化,这里额外 put 明文密码给前端 toast
ajax.put("password", bizPerson.getLoginPassword());
return ajax;
}
@Log(title = "人员", businessType = BusinessType.UPDATE)
@PutMapping
public AjaxResult edit(@RequestBody BizPerson bizPerson)
{
bizPerson.setUpdateBy(getUsername());
return toAjax(bizPersonService.updateByPrimaryKey(bizPerson));
}
@Log(title = "人员", businessType = BusinessType.DELETE)
@DeleteMapping("/{ids}")
public AjaxResult remove(@PathVariable String[] ids)
{
return toAjax(bizPersonService.deleteByPrimaryKeys(ids));
}
// ========== sponsor 端 Excel 批量导入 ==========
/**
* 下载 sponsor 端人员导入模板 (.xlsx)
* 模板列头按 BizPersonImportVO @Excel 注解自动生成 (中文: 姓名/手机号/工作单位/部门/职务/角色/状态)
*/
@GetMapping("/sponsorImportTemplate")
public void sponsorImportTemplate(HttpServletResponse response)
{
ExcelUtil<BizPersonImportVO> util = new ExcelUtil<>(BizPersonImportVO.class);
util.importTemplateExcel(response, "人员导入");
}
/**
* sponsor 端批量导入人员 (上传 .xlsx)
* 每行创建一个 biz_person + 一个 sys_user 子账号 (parent_user_id=当前主账号, loginUsername=手机号, 默认密码 123456)
* 失败行记录在返回结果的 errorRows 字段, 不影响其他行
*/
@Log(title = "人员批量导入", businessType = BusinessType.INSERT)
@PostMapping("/sponsorImport")
public AjaxResult sponsorImport(@RequestParam("file") MultipartFile file) throws Exception
{
if (file == null || file.isEmpty()) {
throw new ServiceException("请选择要上传的文件");
}
ExcelUtil<BizPersonImportVO> util = new ExcelUtil<>(BizPersonImportVO.class);
List<BizPersonImportVO> rows = util.importExcel(file.getInputStream(), 0);
if (rows == null || rows.isEmpty()) {
throw new ServiceException("导入文件无有效数据");
}
Long mainUid = getUserId();
List<java.util.Map<String, Object>> results = new ArrayList<>();
int ok = 0;
for (int i = 0; i < rows.size(); i++) {
BizPersonImportVO row = rows.get(i);
java.util.Map<String, Object> r = new java.util.LinkedHashMap<>();
r.put("rowNo", i + 2); // Excel 行号 (含标题行)
r.put("name", row.getName());
r.put("phone", row.getPhone());
try {
// 1. orgName → orgId (按 orgType='sponsor' 精确匹配, 查不到就报错)
String orgName = row.getOrgName();
if (orgName == null || orgName.trim().isEmpty()) {
throw new ServiceException("所属公司不能为空");
}
BizOrg orgQuery = new BizOrg();
orgQuery.setOrgName(orgName.trim());
orgQuery.setOrgType("sponsor");
List<BizOrg> matched = bizOrgMapper.selectList(orgQuery);
if (matched == null || matched.isEmpty()) {
throw new ServiceException("找不到所属公司: " + orgName + " (需先在 [公司管理] 录入 orgType=sponsor 的公司)");
}
Long orgId = matched.get(0).getOrgId();
BizPerson p = new BizPerson();
p.setName(row.getName());
p.setPhone(row.getPhone());
p.setOrgId(orgId);
p.setDepartment(row.getDepartment());
p.setPosition(row.getPosition());
p.setRole(row.getRole());
p.setStatus("0"); // 默认正常
p.setUnitType("sponsor");
p.setLoginUsername(row.getPhone()); // 用户名 = 手机号 (要求唯一)
p.setLoginPassword("123456"); // 默认密码
p.setCreateBy(getUsername());
p.setUpdateBy(getUsername());
bizPersonService.insert(p, mainUid);
ok++;
r.put("ok", true);
r.put("message", "成功");
} catch (Exception e) {
r.put("ok", false);
r.put("message", e.getMessage());
}
results.add(r);
}
AjaxResult ajax = success();
ajax.put("total", rows.size());
ajax.put("ok", ok);
ajax.put("results", results);
return ajax;
}
}
@@ -0,0 +1,214 @@
package com.ruoyi.business.controller;
import java.util.ArrayList;
import java.util.List;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;
import com.ruoyi.common.annotation.Log;
import com.ruoyi.common.core.controller.BaseController;
import com.ruoyi.common.core.domain.AjaxResult;
import com.ruoyi.common.core.page.TableDataInfo;
import com.ruoyi.common.enums.BusinessType;
import com.ruoyi.common.utils.SecurityUtils;
import com.ruoyi.business.domain.BizExecutionIntent;
import com.ruoyi.business.domain.BizProject;
import com.ruoyi.business.domain.BizProjectAssign;
import com.ruoyi.business.domain.BizProjectRating;
import com.ruoyi.business.service.IBizProjectService;
import com.ruoyi.business.service.IBizExecutionIntentService;
import com.ruoyi.business.domain.BizProjectSponsorAssign;
import com.ruoyi.business.service.IBizProjectAssignService;
import com.ruoyi.business.service.IBizProjectRatingService;
import com.ruoyi.business.service.IBizProjectSponsorAssignService;
/**
* 项目Controller
*
* 评分说明: 评分公开 (无可见性), 由 rater_role 字段区分角色 (sponsor/executor/compliance)
* 一律走 biz_project_rating 中间表 (BizProjectRatingController 已提供完整 CRUD)
*/
@RestController
@RequestMapping("/business/project")
public class BizProjectController extends BaseController
{
@Autowired
private IBizProjectService bizProjectService;
@Autowired
private IBizExecutionIntentService bizExecutionIntentService;
@Autowired
private IBizProjectAssignService bizProjectAssignService;
@Autowired
private IBizProjectRatingService bizProjectRatingService;
@Autowired
private IBizProjectSponsorAssignService bizProjectSponsorAssignService;
/**
* 我报名的项目 (当前用户在 biz_execution_intent 里有意向的项目)
* GET /business/project/myProjects
*/
@GetMapping("/myProjects")
public TableDataInfo myProjects(BizProject bizProject)
{
Long uid = SecurityUtils.getUserId();
BizExecutionIntent q = new BizExecutionIntent();
q.setUserId(uid);
List<BizExecutionIntent> intents = bizExecutionIntentService.selectList(q);
if (intents == null || intents.isEmpty()) {
TableDataInfo r = new TableDataInfo();
r.setRows(new ArrayList<>());
r.setTotal(0);
return r;
}
java.util.Set<String> noSet = new java.util.LinkedHashSet<>();
for (BizExecutionIntent it : intents) {
if (it.getProjectNo() != null && !it.getProjectNo().isEmpty()) noSet.add(it.getProjectNo());
}
startPage();
BizProject bp = new BizProject();
bp.getParams().put("projectNos", new ArrayList<>(noSet));
if (bizProject.getProjectNo() != null) bp.setProjectNo(bizProject.getProjectNo());
if (bizProject.getProjectName() != null) bp.setProjectName(bizProject.getProjectName());
List<BizProject> list = bizProjectService.selectList(bp);
return getDataTable(list);
}
@GetMapping("/list")
public TableDataInfo list(BizProject bizProject)
{
startPage();
List<BizProject> list = bizProjectService.selectList(bizProject);
return getDataTable(list);
}
@GetMapping("/{projectId}")
public AjaxResult getInfo(@PathVariable("projectId") String projectId)
{
return success(bizProjectService.getById(projectId));
}
@Log(title = "项目", businessType = BusinessType.INSERT)
@PostMapping
public AjaxResult add(@RequestBody BizProject bizProject)
{
return toAjax(bizProjectService.insert(bizProject));
}
@Log(title = "项目", businessType = BusinessType.UPDATE)
@PutMapping
public AjaxResult edit(@RequestBody BizProject bizProject)
{
return toAjax(bizProjectService.updateByPrimaryKey(bizProject));
}
@Log(title = "项目", businessType = BusinessType.DELETE)
@DeleteMapping("/{ids}")
public AjaxResult remove(@PathVariable String[] ids)
{
return toAjax(bizProjectService.deleteByPrimaryKeys(ids));
}
// ========== 项目执行方分配 sub-resource ==========
@GetMapping("/{projectId}/assigns")
public AjaxResult getAssigns(@PathVariable("projectId") Long projectId)
{
return success(bizProjectAssignService.selectByProjectId(projectId));
}
@Log(title = "项目执行方分配", businessType = BusinessType.INSERT)
@PostMapping("/{projectId}/assigns")
public AjaxResult saveAssigns(@PathVariable("projectId") Long projectId, @RequestBody List<BizProjectAssign> assigns)
{
if (assigns == null) assigns = new ArrayList<>();
bizProjectAssignService.deleteByProjectId(projectId);
for (BizProjectAssign a : assigns) {
a.setProjectId(projectId);
if (a.getStatus() == null) a.setStatus("0");
bizProjectAssignService.insert(a);
}
return success();
}
@Log(title = "项目执行方分配", businessType = BusinessType.DELETE)
@DeleteMapping("/{projectId}/assigns")
public AjaxResult clearAssigns(@PathVariable("projectId") Long projectId)
{
return toAjax(bizProjectAssignService.deleteByProjectId(projectId));
}
/**
* 通用评分 upsert (任何角色: sponsor / executor / compliance)
* POST /business/project/rate
* 不做可见性校验 — 评分公开
*/
@Log(title = "项目评分", businessType = BusinessType.UPDATE)
@PostMapping("/rate")
public AjaxResult rate(@RequestBody BizProjectRating body)
{
if (body.getProjectId() == null || body.getRaterId() == null || body.getRaterRole() == null) {
return error("projectId / raterId / raterRole 必填");
}
body.setCreateBy(SecurityUtils.getUsername());
body.setUpdateBy(SecurityUtils.getUsername());
int rows = bizProjectRatingService.upsertRating(body);
return toAjax(rows);
}
/**
* 查某项目的所有评分 (公开, 任何角色可读)
* GET /business/project/ratings?projectId=X
*/
@GetMapping("/ratings")
public AjaxResult ratings(@RequestParam("projectId") Long projectId)
{
BizProjectRating q = new BizProjectRating();
q.setProjectId(projectId);
return success(bizProjectRatingService.selectList(q));
}
/**
* 赞助方分配监察员 (写 biz_project_sponsor_assign)
* POST /business/project/sponsorAssign
*/
@Log(title = "赞助方分配监察员", businessType = BusinessType.INSERT)
@PostMapping("/sponsorAssign")
public AjaxResult sponsorAssign(@RequestBody BizProjectSponsorAssign body)
{
body.setCreateBy(SecurityUtils.getUsername());
body.setSponsorUserId(SecurityUtils.getUserId());
int rows = bizProjectSponsorAssignService.insertAssign(body);
return toAjax(rows);
}
/**
* 赞助方批量分配监察员 (多个项目, 同一个监察员 + 同一份说明)
* POST /business/project/sponsorAssignBatch
* body: List<BizProjectSponsorAssign> (每个 item.projectId / monitorUserId / assignDesc / assignPoints)
*/
@Log(title = "赞助方批量分配监察员", businessType = BusinessType.INSERT)
@PostMapping("/sponsorAssignBatch")
public AjaxResult sponsorAssignBatch(@RequestBody List<BizProjectSponsorAssign> bodies)
{
if (bodies == null || bodies.isEmpty()) {
return error("请提供至少一个分配记录");
}
String loginName = SecurityUtils.getUsername();
Long loginUid = SecurityUtils.getUserId();
int ok = 0;
List<String> errors = new ArrayList<>();
for (int i = 0; i < bodies.size(); i++) {
BizProjectSponsorAssign body = bodies.get(i);
try {
if (body.getProjectId() == null || body.getMonitorUserId() == null) {
throw new IllegalArgumentException("projectId / monitorUserId 必填");
}
body.setCreateBy(loginName);
body.setSponsorUserId(loginUid);
bizProjectSponsorAssignService.insertAssign(body);
ok++;
} catch (Exception e) {
errors.add("" + (i + 1) + "条 (projectId=" + body.getProjectId() + "): " + e.getMessage());
}
}
AjaxResult ajax = success();
ajax.put("total", bodies.size());
ajax.put("ok", ok);
ajax.put("errors", errors);
return ajax;
}
}
@@ -0,0 +1,53 @@
package com.ruoyi.business.controller;
import java.util.List;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;
import com.ruoyi.common.annotation.Log;
import com.ruoyi.common.core.controller.BaseController;
import com.ruoyi.common.core.domain.AjaxResult;
import com.ruoyi.common.core.page.TableDataInfo;
import com.ruoyi.common.enums.BusinessType;
import com.ruoyi.business.domain.BizProjectPlan;
import com.ruoyi.business.service.IBizProjectPlanService;
/**
* 项目策划方案Controller
*/
@RestController
@RequestMapping("/business/projectPlan")
public class BizProjectPlanController extends BaseController
{
@Autowired
private IBizProjectPlanService BizProjectPlanService;
@GetMapping("/list")
public TableDataInfo list(BizProjectPlan BizProjectPlan)
{
startPage();
List<BizProjectPlan> list = BizProjectPlanService.selectList(BizProjectPlan);
return getDataTable(list);
}
@GetMapping("/{planId}")
public AjaxResult getInfo(@PathVariable("planId") String planId)
{
return success(BizProjectPlanService.getById(planId));
}
@Log(title = "项目策划方案", businessType = BusinessType.INSERT)
@PostMapping
public AjaxResult add(@RequestBody BizProjectPlan BizProjectPlan)
{
return toAjax(BizProjectPlanService.insert(BizProjectPlan));
}
@Log(title = "项目策划方案", businessType = BusinessType.UPDATE)
@PutMapping
public AjaxResult edit(@RequestBody BizProjectPlan BizProjectPlan)
{
return toAjax(BizProjectPlanService.updateByPrimaryKey(BizProjectPlan));
}
@Log(title = "项目策划方案", businessType = BusinessType.DELETE)
@DeleteMapping("/{ids}")
public AjaxResult remove(@PathVariable String[] ids)
{
return toAjax(BizProjectPlanService.deleteByPrimaryKeys(ids));
}
}
@@ -0,0 +1,71 @@
package com.ruoyi.business.controller;
import java.util.List;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;
import com.ruoyi.common.annotation.Log;
import com.ruoyi.common.core.controller.BaseController;
import com.ruoyi.common.core.domain.AjaxResult;
import com.ruoyi.common.core.page.TableDataInfo;
import com.ruoyi.common.enums.BusinessType;
import com.ruoyi.business.domain.BizProjectRating;
import com.ruoyi.business.service.IBizProjectRatingService;
/**
* 项目评分Controller
*/
@RestController
@RequestMapping("/business/projectRating")
public class BizProjectRatingController extends BaseController
{
@Autowired
private IBizProjectRatingService bizProjectRatingService;
@GetMapping("/list")
public TableDataInfo list(BizProjectRating bizProjectRating)
{
startPage();
List<BizProjectRating> list = bizProjectRatingService.selectList(bizProjectRating);
return getDataTable(list);
}
@GetMapping("/{ratingId}")
public AjaxResult getInfo(@PathVariable("ratingId") String ratingId)
{
return success(bizProjectRatingService.getById(ratingId));
}
@Log(title = "项目评分", businessType = BusinessType.INSERT)
@PostMapping
public AjaxResult add(@RequestBody BizProjectRating bizProjectRating)
{
return toAjax(bizProjectRatingService.insert(bizProjectRating));
}
/**
* 执行单位评分 upsert (按 project_id + rater_id + rater_role 唯一)
* POST /business/projectRating/rate
*/
@Log(title = "执行单位评分", businessType = BusinessType.UPDATE)
@PostMapping("/rate")
public AjaxResult rate(@RequestBody BizProjectRating body)
{
if (body.getProjectId() == null || body.getRaterId() == null || body.getRaterRole() == null) {
return error("projectId / raterId / raterRole 必填");
}
body.setCreateBy(getUsername());
body.setUpdateBy(getUsername());
int rows = bizProjectRatingService.upsertRating(body);
return toAjax(rows);
}
@Log(title = "项目评分", businessType = BusinessType.UPDATE)
@PutMapping
public AjaxResult edit(@RequestBody BizProjectRating bizProjectRating)
{
return toAjax(bizProjectRatingService.updateByPrimaryKey(bizProjectRating));
}
@Log(title = "项目评分", businessType = BusinessType.DELETE)
@DeleteMapping("/{ids}")
public AjaxResult remove(@PathVariable String[] ids)
{
return toAjax(bizProjectRatingService.deleteByPrimaryKeys(ids));
}
}
@@ -0,0 +1,74 @@
package com.ruoyi.business.controller;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import com.ruoyi.common.core.controller.BaseController;
import com.ruoyi.common.core.domain.AjaxResult;
import com.ruoyi.business.domain.BizProject;
import com.ruoyi.business.domain.BizSupportLetter;
import com.ruoyi.business.domain.BizInvitation;
import com.ruoyi.business.domain.BizProjectPlan;
import com.ruoyi.business.service.IBizProjectService;
import com.ruoyi.business.service.IBizSupportLetterService;
import com.ruoyi.business.service.IBizInvitationService;
import com.ruoyi.business.service.IBizProjectPlanService;
/**
* 公开门户接口(无需登录)
*/
@RestController
@RequestMapping("/business/public")
public class BizPublicController extends BaseController {
@Autowired private IBizProjectService projectService;
@Autowired private IBizSupportLetterService supportLetterService;
@Autowired private IBizInvitationService invitationService;
@Autowired private IBizProjectPlanService projectPlanService;
@GetMapping("/index")
public AjaxResult index() {
Map<String, Object> map = new HashMap<>();
BizProject publishedQuery = new BizProject();
publishedQuery.setIsPublished("1");
List<BizProject> announcements = projectService.selectList(publishedQuery);
List<BizProjectPlan> plans = projectPlanService.selectList(new BizProjectPlan());
map.put("announcements", announcements);
map.put("plans", plans);
map.put("about", "北京整合医学学会(BAHIM)是一家专注于整合医学学术研究、项目合作与人才培养的省级学术组织。");
return success(map);
}
@GetMapping("/announcements")
public AjaxResult announcements() {
BizProject query = new BizProject();
query.setIsPublished("1");
List<BizProject> list = projectService.selectList(query);
return success(list);
}
@GetMapping("/project/{projectId}")
public AjaxResult projectDetail(@PathVariable String projectId) {
return success(projectService.getById(projectId));
}
@GetMapping("/supportLetter/{annId}")
public AjaxResult supportLetterDetail(@PathVariable String annId) {
return success(supportLetterService.getById(annId));
}
@GetMapping("/invitation/{annId}")
public AjaxResult invitationDetail(@PathVariable String annId) {
return success(invitationService.getById(annId));
}
@GetMapping("/apply")
public AjaxResult apply(String annId) {
return success();
}
}
@@ -0,0 +1,66 @@
package com.ruoyi.business.controller;
import java.util.List;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;
import com.ruoyi.common.annotation.Log;
import com.ruoyi.common.core.controller.BaseController;
import com.ruoyi.common.core.domain.AjaxResult;
import com.ruoyi.common.core.page.TableDataInfo;
import com.ruoyi.common.enums.BusinessType;
import com.ruoyi.business.domain.BizPublicity;
import com.ruoyi.business.service.IBizPublicityService;
import com.ruoyi.common.utils.SecurityUtils;
/**
* 项目公告Controller (与前端 bizList('publicity', ...) 对接)
*/
@RestController
@RequestMapping("/business/publicity")
public class BizPublicityController extends BaseController
{
@Autowired
private IBizPublicityService bizPublicityService;
@GetMapping("/list")
public TableDataInfo list(BizPublicity entity)
{
startPage();
// 按 project_id 过滤
entity.setStatus(null);
List<BizPublicity> list = bizPublicityService.selectList(entity);
return getDataTable(list);
}
@GetMapping("/{id}")
public AjaxResult getInfo(@PathVariable("id") Long id)
{
return success(bizPublicityService.getById(id));
}
@Log(title = "项目公告", businessType = BusinessType.INSERT)
@PostMapping
public AjaxResult add(@RequestBody BizPublicity entity)
{
entity.setCreateBy(SecurityUtils.getUsername());
entity.setUpdateBy(SecurityUtils.getUsername());
if (entity.getStatus() == null) entity.setStatus("1");
int rows = bizPublicityService.insert(entity);
return toAjax(rows);
}
@Log(title = "项目公告", businessType = BusinessType.UPDATE)
@PutMapping
public AjaxResult edit(@RequestBody BizPublicity entity)
{
entity.setUpdateBy(SecurityUtils.getUsername());
return toAjax(bizPublicityService.updateByPrimaryKey(entity));
}
@Log(title = "项目公告", businessType = BusinessType.DELETE)
@DeleteMapping("/{ids}")
public AjaxResult remove(@PathVariable Long[] ids)
{
return toAjax(bizPublicityService.deleteByPrimaryKeys(ids));
}
}
@@ -0,0 +1,109 @@
package com.ruoyi.business.controller;
import java.util.Map;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.security.crypto.bcrypt.BCryptPasswordEncoder;
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 com.ruoyi.business.domain.BizExpert;
import com.ruoyi.business.dto.SmsValidForm;
import com.ruoyi.business.service.IBizExpertService;
import com.ruoyi.business.service.SysSmsService;
import com.ruoyi.common.core.controller.BaseController;
import com.ruoyi.common.core.domain.AjaxResult;
import com.ruoyi.common.utils.uuid.UUID;
import com.ruoyi.common.core.domain.entity.SysUser;
import com.ruoyi.system.service.ISysUserService;
/**
* 专家注册 (完整实现)
* 流程:
* 1. 校验短信验证码
* 2. 检查用户名(=手机号)是否已注册
* 3. 加密密码
* 4. 插入 sys_user (role_type=doctor, user_type=01)
* 5. 插入 biz_expert (user_id 关联)
*/
@RestController
@RequestMapping("/business/auth")
public class BizRegisterController extends BaseController {
@Autowired
private SysSmsService smsService;
@Autowired
private ISysUserService userService;
@Autowired
private IBizExpertService expertService;
@Autowired
private BCryptPasswordEncoder passwordEncoder;
@PostMapping("/registerExpert")
public AjaxResult registerExpert(@RequestBody Map<String, Object> body) {
String realName = (String) body.get("realName");
String workUnit = (String) body.get("workUnit");
String department = (String) body.get("department");
String doctorTitle = (String) body.get("doctorTitle");
String phone = (String) body.get("phone");
String code = (String) body.get("code");
String password = (String) body.get("password");
String uuid = (String) body.get("uuid");
String licenseCertUrl = (String) body.get("licenseCertUrl");
String titleCertUrl = (String) body.get("titleCertUrl");
if (realName == null || realName.isEmpty()) return error("姓名不能为空");
if (workUnit == null || workUnit.isEmpty()) return error("工作单位不能为空");
if (phone == null || !phone.matches("^1\\d{10}$")) return error("手机号格式错误");
if (code == null || code.isEmpty()) return error("请输入短信验证码");
if (password == null || password.length() < 6 || password.length() > 20) return error("密码长度 6-20 位");
// 1. 校验短信验证码
SmsValidForm smsForm = new SmsValidForm();
smsForm.setPhone(phone);
smsForm.setSmsCode(code);
smsForm.setUuid(uuid);
try {
smsService.verifyCode(smsForm);
} catch (RuntimeException e) {
return error("验证码错误或已过期: " + e.getMessage());
}
// 2. 用户名=手机号, 检查是否已注册
if (userService.isPhoneRegistered(phone)) {
return error("该手机号已注册, 请直接登录");
}
// 3. 加密密码 + 4. 插入 sys_user (用户名=phone)
SysUser user = new SysUser();
user.setUserName(phone);
user.setNickName(realName);
user.setPhonenumber(phone);
user.setPassword(passwordEncoder.encode(password));
user.setStatus("0");
userService.insertUser(user);
Long userId = user.getUserId();
// sys_user.role_type 表字段 (DB 默认 executor, 专家需 = doctor), 用 mapper 更新
userService.updateRoleType(userId, "doctor");
// 5. 插入 biz_expert
BizExpert expert = new BizExpert();
expert.setExpertId(UUID.fastUUID().toString());
expert.setUserId(userId);
expert.setName(realName);
expert.setPhone(phone);
expert.setWorkUnit(workUnit);
expert.setDepartment(department);
expert.setTitle(doctorTitle);
expert.setPracticeCertUrl(licenseCertUrl);
expert.setTitleCertUrl(titleCertUrl);
expert.setAuditStatus("0");
expert.setStatus("0");
expertService.insert(expert);
return success("注册成功, 请等待审核").put("userId", userId);
}
}
@@ -0,0 +1,40 @@
package com.ruoyi.business.controller;
import com.ruoyi.business.service.SysSmsService;
import com.ruoyi.common.core.controller.BaseController;
import com.ruoyi.common.core.domain.AjaxResult;
import com.ruoyi.system.service.ISysUserService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;
import java.util.Map;
/**
* 注册专用 - 发送短信验证码
* 校验: 手机号未被注册过, 否则报错
* 匿名访问 (前端 register-* 页面调用, 登录前)
*/
@RestController
@RequestMapping("/business/auth")
public class BizRegisterSmsController extends BaseController {
@Autowired
private SysSmsService smsService;
@Autowired
private com.ruoyi.system.service.ISysUserService userService;
@PostMapping("/registerSendSms")
public AjaxResult registerSendSms(@RequestBody Map<String, String> body) {
String phone = body == null ? null : body.get("phone");
if (phone == null || !phone.matches("^1\\d{10}$")) {
return error("请输入正确的手机号");
}
// 手机号已注册则报错
if (userService.isPhoneRegistered(phone)) {
return error("该手机号已注册, 请直接登录");
}
String uuid = smsService.sendCode(phone);
return AjaxResult.success("验证码已发送", uuid);
}
}
@@ -0,0 +1,53 @@
package com.ruoyi.business.controller;
import java.util.List;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;
import com.ruoyi.common.annotation.Log;
import com.ruoyi.common.core.controller.BaseController;
import com.ruoyi.common.core.domain.AjaxResult;
import com.ruoyi.common.core.page.TableDataInfo;
import com.ruoyi.common.enums.BusinessType;
import com.ruoyi.business.domain.BizResource;
import com.ruoyi.business.service.IBizResourceService;
/**
* 资源Controller
*/
@RestController
@RequestMapping("/business/resource")
public class BizResourceController extends BaseController
{
@Autowired
private IBizResourceService bizResourceService;
@GetMapping("/list")
public TableDataInfo list(BizResource bizResource)
{
startPage();
List<BizResource> list = bizResourceService.selectList(bizResource);
return getDataTable(list);
}
@GetMapping("/{resourceId}")
public AjaxResult getInfo(@PathVariable("resourceId") String resourceId)
{
return success(bizResourceService.getById(resourceId));
}
@Log(title = "资源", businessType = BusinessType.INSERT)
@PostMapping
public AjaxResult add(@RequestBody BizResource bizResource)
{
return toAjax(bizResourceService.insert(bizResource));
}
@Log(title = "资源", businessType = BusinessType.UPDATE)
@PutMapping
public AjaxResult edit(@RequestBody BizResource bizResource)
{
return toAjax(bizResourceService.updateByPrimaryKey(bizResource));
}
@Log(title = "资源", businessType = BusinessType.DELETE)
@DeleteMapping("/{ids}")
public AjaxResult remove(@PathVariable String[] ids)
{
return toAjax(bizResourceService.deleteByPrimaryKeys(ids));
}
}
@@ -0,0 +1,79 @@
package com.ruoyi.business.controller;
import java.util.List;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;
import com.ruoyi.common.annotation.Log;
import com.ruoyi.common.core.controller.BaseController;
import com.ruoyi.common.core.domain.AjaxResult;
import com.ruoyi.common.core.page.TableDataInfo;
import com.ruoyi.common.enums.BusinessType;
import com.ruoyi.common.utils.SecurityUtils;
import com.ruoyi.business.domain.BizSubmission;
import com.ruoyi.business.enums.SubmissionStatus;
import com.ruoyi.business.service.IBizSubmissionService;
/**
* 投稿Controller
*/
@RestController
@RequestMapping("/business/submission")
public class BizSubmissionController extends BaseController
{
@Autowired
private IBizSubmissionService bizSubmissionService;
@GetMapping("/list")
public TableDataInfo list(BizSubmission bizSubmission)
{
// 后端兜底: 只查当前登录用户提交的; admin 跳过此限制
if (!SecurityUtils.isAdmin()) {
bizSubmission.setSubmitterId(SecurityUtils.getUserId());
}
startPage();
List<BizSubmission> list = bizSubmissionService.selectList(bizSubmission);
return getDataTable(list);
}
@GetMapping("/{submissionId}")
public AjaxResult getInfo(@PathVariable("submissionId") String submissionId)
{
return success(bizSubmissionService.getById(submissionId));
}
@Log(title = "投稿", businessType = BusinessType.INSERT)
@PostMapping
public AjaxResult add(@RequestBody BizSubmission bizSubmission)
{
// 后端兜底: 强制写入当前登录用户, 防止前端漏传/绕过导致列表过滤查不到
bizSubmission.setSubmitterId(SecurityUtils.getUserId());
bizSubmission.setSubmitterName(SecurityUtils.getUsername());
bizSubmission.setCreateBy(getUsername());
bizSubmission.setUpdateBy(getUsername());
// 状态: 新建默认 DRAFT(待提交); 校验必须是英文 code 之一
if (bizSubmission.getStatus() == null || bizSubmission.getStatus().isEmpty()) {
bizSubmission.setStatus(SubmissionStatus.DRAFT.getCode());
} else if (!SubmissionStatus.isValid(bizSubmission.getStatus())) {
return AjaxResult.error("状态值非法: " + bizSubmission.getStatus());
}
return toAjax(bizSubmissionService.insert(bizSubmission));
}
@Log(title = "投稿", businessType = BusinessType.UPDATE)
@PutMapping
public AjaxResult edit(@RequestBody BizSubmission bizSubmission)
{
// 修改时也强制覆盖 submitterId/submitterName, 防止越权篡改为他人
bizSubmission.setSubmitterId(SecurityUtils.getUserId());
bizSubmission.setSubmitterName(SecurityUtils.getUsername());
bizSubmission.setUpdateBy(getUsername());
// 状态校验 (英文 code)
if (bizSubmission.getStatus() != null && !bizSubmission.getStatus().isEmpty()
&& !SubmissionStatus.isValid(bizSubmission.getStatus())) {
return AjaxResult.error("状态值非法: " + bizSubmission.getStatus());
}
return toAjax(bizSubmissionService.updateByPrimaryKey(bizSubmission));
}
@Log(title = "投稿", businessType = BusinessType.DELETE)
@DeleteMapping("/{ids}")
public AjaxResult remove(@PathVariable String[] ids)
{
return toAjax(bizSubmissionService.deleteByPrimaryKeys(ids));
}
}
@@ -0,0 +1,53 @@
package com.ruoyi.business.controller;
import java.util.List;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;
import com.ruoyi.common.annotation.Log;
import com.ruoyi.common.core.controller.BaseController;
import com.ruoyi.common.core.domain.AjaxResult;
import com.ruoyi.common.core.page.TableDataInfo;
import com.ruoyi.common.enums.BusinessType;
import com.ruoyi.business.domain.BizSupportIntent;
import com.ruoyi.business.service.IBizSupportIntentService;
/**
* 支持意向Controller
*/
@RestController
@RequestMapping("/business/supportIntent")
public class BizSupportIntentController extends BaseController
{
@Autowired
private IBizSupportIntentService bizSupportIntentService;
@GetMapping("/list")
public TableDataInfo list(BizSupportIntent bizSupportIntent)
{
startPage();
List<BizSupportIntent> list = bizSupportIntentService.selectList(bizSupportIntent);
return getDataTable(list);
}
@GetMapping("/{intentId}")
public AjaxResult getInfo(@PathVariable("intentId") String intentId)
{
return success(bizSupportIntentService.getById(intentId));
}
@Log(title = "支持意向", businessType = BusinessType.INSERT)
@PostMapping
public AjaxResult add(@RequestBody BizSupportIntent bizSupportIntent)
{
return toAjax(bizSupportIntentService.insert(bizSupportIntent));
}
@Log(title = "支持意向", businessType = BusinessType.UPDATE)
@PutMapping
public AjaxResult edit(@RequestBody BizSupportIntent bizSupportIntent)
{
return toAjax(bizSupportIntentService.updateByPrimaryKey(bizSupportIntent));
}
@Log(title = "支持意向", businessType = BusinessType.DELETE)
@DeleteMapping("/{ids}")
public AjaxResult remove(@PathVariable String[] ids)
{
return toAjax(bizSupportIntentService.deleteByPrimaryKeys(ids));
}
}
@@ -0,0 +1,53 @@
package com.ruoyi.business.controller;
import java.util.List;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;
import com.ruoyi.common.annotation.Log;
import com.ruoyi.common.core.controller.BaseController;
import com.ruoyi.common.core.domain.AjaxResult;
import com.ruoyi.common.core.page.TableDataInfo;
import com.ruoyi.common.enums.BusinessType;
import com.ruoyi.business.domain.BizSupportLetter;
import com.ruoyi.business.service.IBizSupportLetterService;
/**
* 支持函Controller
*/
@RestController
@RequestMapping("/business/supportLetter")
public class BizSupportLetterController extends BaseController
{
@Autowired
private IBizSupportLetterService bizSupportLetterService;
@GetMapping("/list")
public TableDataInfo list(BizSupportLetter bizSupportLetter)
{
startPage();
List<BizSupportLetter> list = bizSupportLetterService.selectList(bizSupportLetter);
return getDataTable(list);
}
@GetMapping("/{letterId}")
public AjaxResult getInfo(@PathVariable("letterId") String letterId)
{
return success(bizSupportLetterService.getById(letterId));
}
@Log(title = "支持函", businessType = BusinessType.INSERT)
@PostMapping
public AjaxResult add(@RequestBody BizSupportLetter bizSupportLetter)
{
return toAjax(bizSupportLetterService.insert(bizSupportLetter));
}
@Log(title = "支持函", businessType = BusinessType.UPDATE)
@PutMapping
public AjaxResult edit(@RequestBody BizSupportLetter bizSupportLetter)
{
return toAjax(bizSupportLetterService.updateByPrimaryKey(bizSupportLetter));
}
@Log(title = "支持函", businessType = BusinessType.DELETE)
@DeleteMapping("/{ids}")
public AjaxResult remove(@PathVariable String[] ids)
{
return toAjax(bizSupportLetterService.deleteByPrimaryKeys(ids));
}
}
@@ -0,0 +1,41 @@
package com.ruoyi.business.controller;
import com.ruoyi.business.dto.SmsValidForm;
import com.ruoyi.business.service.SysSmsService;
import com.ruoyi.common.core.controller.BaseController;
import com.ruoyi.common.core.domain.AjaxResult;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;
/**
* 短信验证码接口
* 参考 hwt-code BizAuthApi.sendSmsOnLogin 模式
*/
@RestController
@RequestMapping("/business/sms")
public class SmsController extends BaseController {
@Autowired
private SysSmsService smsService;
/** 发送验证码, 返回 uuid (前端 form 校验时回传) */
@GetMapping("/send")
public AjaxResult send(@RequestParam(required = false) String phone) {
if (phone == null || phone.trim().isEmpty()) {
return error("手机号码不能为空");
}
String uuid = smsService.sendCode(phone);
return AjaxResult.success("ok", uuid);
}
/** 校验验证码 */
@PostMapping("/verify")
public AjaxResult verify(@RequestBody SmsValidForm form) {
try {
smsService.verifyCode(form);
} catch (RuntimeException e) {
return error(e.getMessage());
}
return success("ok");
}
}
@@ -0,0 +1,35 @@
package com.ruoyi.business.domain;
import com.ruoyi.common.annotation.Excel;
import com.ruoyi.common.core.domain.BaseEntity;
/** 科室字典 */
public class BizDepartment extends BaseEntity
{
private static final long serialVersionUID = 1L;
@Excel(name = "ID")
private Long deptId;
@Excel(name = "科室名称")
private String name;
@Excel(name = "排序")
private Integer sort;
/** 0=启用 1=停用 */
@Excel(name = "状态", readConverterExp = "0=启用,1=停用")
private String status;
public Long getDeptId() { return deptId; }
public void setDeptId(Long deptId) { this.deptId = deptId; }
public String getName() { return name; }
public void setName(String name) { this.name = name; }
public Integer getSort() { return sort; }
public void setSort(Integer sort) { this.sort = sort; }
public String getStatus() { return status; }
public void setStatus(String status) { this.status = status; }
}
@@ -0,0 +1,35 @@
package com.ruoyi.business.domain;
import com.ruoyi.common.annotation.Excel;
import com.ruoyi.common.core.domain.BaseEntity;
/** 医生职称字典 */
public class BizDoctorTitle extends BaseEntity
{
private static final long serialVersionUID = 1L;
@Excel(name = "ID")
private Long titleId;
@Excel(name = "职称名称")
private String name;
@Excel(name = "排序")
private Integer sort;
/** 0=启用 1=停用 */
@Excel(name = "状态", readConverterExp = "0=启用,1=停用")
private String status;
public Long getTitleId() { return titleId; }
public void setTitleId(Long titleId) { this.titleId = titleId; }
public String getName() { return name; }
public void setName(String name) { this.name = name; }
public Integer getSort() { return sort; }
public void setSort(Integer sort) { this.sort = sort; }
public String getStatus() { return status; }
public void setStatus(String status) { this.status = status; }
}
@@ -0,0 +1,82 @@
package com.ruoyi.business.domain;
import java.math.BigDecimal;
import java.util.Date;
import com.fasterxml.jackson.annotation.JsonFormat;
import com.ruoyi.common.annotation.Excel;
import com.ruoyi.common.core.domain.BaseEntity;
/** 执行意向对象 BizExecutionIntent */
public class BizExecutionIntent extends BaseEntity {
private static final long serialVersionUID = 1L;
/** intentId */
private String intentId;
/** 用户ID (关联 sys_user.user_id) */
private Long userId;
/** project_no */
@Excel(name = "project_no")
private String projectNo;
/** project_name */
@Excel(name = "project_name")
private String projectName;
/** name */
@Excel(name = "name")
private String name;
/** work_unit */
@Excel(name = "work_unit")
private String workUnit;
/** department */
@Excel(name = "department")
private String department;
/** position */
@Excel(name = "position")
private String position;
/** phone */
@Excel(name = "phone")
private String phone;
/** onboard_status */
@Excel(name = "onboard_status")
private String onboardStatus;
/** create_by */
@Excel(name = "create_by")
private String createBy;
/** create_time */
@Excel(name = "create_time")
@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
private Date createTime;
/** update_by */
@Excel(name = "update_by")
private String updateBy;
/** update_time */
@Excel(name = "update_time")
@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
private Date updateTime;
public String getIntentId() { return intentId; }
public void setIntentId(String intentId) { this.intentId = intentId; }
public Long getUserId() { return userId; }
public void setUserId(Long userId) { this.userId = userId; }
public String getProjectNo() { return projectNo; }
public void setProjectNo(String projectNo) { this.projectNo = projectNo; }
public String getProjectName() { return projectName; }
public void setProjectName(String projectName) { this.projectName = projectName; }
public String getName() { return name; }
public void setName(String name) { this.name = name; }
public String getWorkUnit() { return workUnit; }
public void setWorkUnit(String workUnit) { this.workUnit = workUnit; }
public String getDepartment() { return department; }
public void setDepartment(String department) { this.department = department; }
public String getPosition() { return position; }
public void setPosition(String position) { this.position = position; }
public String getPhone() { return phone; }
public void setPhone(String phone) { this.phone = phone; }
public String getOnboardStatus() { return onboardStatus; }
public void setOnboardStatus(String onboardStatus) { this.onboardStatus = onboardStatus; }
public String getCreateBy() { return createBy; }
public void setCreateBy(String createBy) { this.createBy = createBy; }
public Date getCreateTime() { return createTime; }
public void setCreateTime(Date createTime) { this.createTime = createTime; }
public String getUpdateBy() { return updateBy; }
public void setUpdateBy(String updateBy) { this.updateBy = updateBy; }
public Date getUpdateTime() { return updateTime; }
public void setUpdateTime(Date updateTime) { this.updateTime = updateTime; }
}
@@ -0,0 +1,137 @@
package com.ruoyi.business.domain;
import java.math.BigDecimal;
import java.util.Date;
import com.fasterxml.jackson.annotation.JsonFormat;
import com.ruoyi.common.annotation.Excel;
import com.ruoyi.common.core.domain.BaseEntity;
/** 专家对象 BizExpert */
public class BizExpert extends BaseEntity {
private static final long serialVersionUID = 1L;
/** expertId */
private String expertId;
/** name */
@Excel(name = "name")
private String name;
/** phone */
@Excel(name = "phone")
private String phone;
/** work_unit */
@Excel(name = "work_unit")
private String workUnit;
/** department */
@Excel(name = "department")
private String department;
/** title */
@Excel(name = "title")
private String title;
/** practice_cert_url */
@Excel(name = "practice_cert_url")
private String practiceCertUrl;
/** title_cert_url */
@Excel(name = "title_cert_url")
private String titleCertUrl;
/** audit_status */
@Excel(name = "audit_status")
private String auditStatus;
/** audit_by */
@Excel(name = "audit_by")
private String auditBy;
/** audit_time */
@Excel(name = "audit_time")
@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
private Date auditTime;
/** create_by */
@Excel(name = "create_by")
private String createBy;
/** create_time */
@Excel(name = "create_time")
@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
private Date createTime;
/** update_by */
@Excel(name = "update_by")
private String updateBy;
/** update_time */
@Excel(name = "update_time")
@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
private Date updateTime;
/** 关联系统用户ID */
private Long userId;
/** 地区 */
private String region;
/** 证件号码 */
private String idCard;
/** 银行卡号 */
private String bankCard;
/** 银行名称 */
private String bankName;
/** 开户行省份 */
private String bankProvince;
/** 开户行城市 */
private String bankCity;
/** 开户行地址 */
private String bankAddress;
/** 身份证正面URL */
private String idCardFrontUrl;
/** 身份证反面URL */
private String idCardBackUrl;
/** 审核意见 */
private String auditOpinion;
/** 状态 0正常 1禁用 */
private String status;
public String getExpertId() { return expertId; }
public void setExpertId(String expertId) { this.expertId = expertId; }
public String getName() { return name; }
public void setName(String name) { this.name = name; }
public String getPhone() { return phone; }
public void setPhone(String phone) { this.phone = phone; }
public String getWorkUnit() { return workUnit; }
public void setWorkUnit(String workUnit) { this.workUnit = workUnit; }
public String getDepartment() { return department; }
public void setDepartment(String department) { this.department = department; }
public String getTitle() { return title; }
public void setTitle(String title) { this.title = title; }
public String getPracticeCertUrl() { return practiceCertUrl; }
public void setPracticeCertUrl(String practiceCertUrl) { this.practiceCertUrl = practiceCertUrl; }
public String getTitleCertUrl() { return titleCertUrl; }
public void setTitleCertUrl(String titleCertUrl) { this.titleCertUrl = titleCertUrl; }
public String getAuditStatus() { return auditStatus; }
public void setAuditStatus(String auditStatus) { this.auditStatus = auditStatus; }
public String getAuditBy() { return auditBy; }
public void setAuditBy(String auditBy) { this.auditBy = auditBy; }
public Date getAuditTime() { return auditTime; }
public void setAuditTime(Date auditTime) { this.auditTime = auditTime; }
public String getCreateBy() { return createBy; }
public void setCreateBy(String createBy) { this.createBy = createBy; }
public Date getCreateTime() { return createTime; }
public void setCreateTime(Date createTime) { this.createTime = createTime; }
public String getUpdateBy() { return updateBy; }
public void setUpdateBy(String updateBy) { this.updateBy = updateBy; }
public Date getUpdateTime() { return updateTime; }
public void setUpdateTime(Date updateTime) { this.updateTime = updateTime; }
public Long getUserId() { return userId; }
public void setUserId(Long userId) { this.userId = userId; }
public String getStatus() { return status; }
public void setStatus(String status) { this.status = status; }
public String getAuditOpinion() { return auditOpinion; }
public void setAuditOpinion(String auditOpinion) { this.auditOpinion = auditOpinion; }
public String getRegion() { return region; }
public void setRegion(String region) { this.region = region; }
public String getIdCard() { return idCard; }
public void setIdCard(String idCard) { this.idCard = idCard; }
public String getBankCard() { return bankCard; }
public void setBankCard(String bankCard) { this.bankCard = bankCard; }
public String getBankName() { return bankName; }
public void setBankName(String bankName) { this.bankName = bankName; }
public String getBankProvince() { return bankProvince; }
public void setBankProvince(String bankProvince) { this.bankProvince = bankProvince; }
public String getBankCity() { return bankCity; }
public void setBankCity(String bankCity) { this.bankCity = bankCity; }
public String getBankAddress() { return bankAddress; }
public void setBankAddress(String bankAddress) { this.bankAddress = bankAddress; }
public String getIdCardFrontUrl() { return idCardFrontUrl; }
public void setIdCardFrontUrl(String idCardFrontUrl) { this.idCardFrontUrl = idCardFrontUrl; }
public String getIdCardBackUrl() { return idCardBackUrl; }
public void setIdCardBackUrl(String idCardBackUrl) { this.idCardBackUrl = idCardBackUrl; }
}
@@ -0,0 +1,78 @@
package com.ruoyi.business.domain;
import java.math.BigDecimal;
import java.util.Date;
import com.fasterxml.jackson.annotation.JsonFormat;
import com.ruoyi.common.annotation.Excel;
import com.ruoyi.common.core.domain.BaseEntity;
/** 邀请函对象 BizInvitation */
public class BizInvitation extends BaseEntity {
private static final long serialVersionUID = 1L;
/** annId */
private String annId;
/** title */
@Excel(name = "title")
private String title;
/** meeting_name */
@Excel(name = "meeting_name")
private String meetingName;
/** expert_name */
@Excel(name = "expert_name")
private String expertName;
/** content */
@Excel(name = "content")
private String content;
/** issue_date */
@Excel(name = "issue_date")
@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
private Date issueDate;
/** create_by */
@Excel(name = "create_by")
private String createBy;
/** create_time */
@Excel(name = "create_time")
@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
private Date createTime;
/** update_by */
@Excel(name = "update_by")
private String updateBy;
/** update_time */
@Excel(name = "update_time")
@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
private Date updateTime;
/** 邀请函ID */
private Long inviteId;
/** 项目ID */
private Long projectId;
/** 项目编号 */
private String projectNo;
/** 邀请函模板URL */
private String templateUrl;
/** 二维码URL */
private String qrCodeUrl;
/** 分享URL */
private String shareUrl;
/** 发布时间 */
private String publishTime;
public String getAnnId() { return annId; }
public void setAnnId(String annId) { this.annId = annId; }
public String getTitle() { return title; }
public void setTitle(String title) { this.title = title; }
public String getMeetingName() { return meetingName; }
public void setMeetingName(String meetingName) { this.meetingName = meetingName; }
public String getExpertName() { return expertName; }
public void setExpertName(String expertName) { this.expertName = expertName; }
public String getContent() { return content; }
public void setContent(String content) { this.content = content; }
public Date getIssueDate() { return issueDate; }
public void setIssueDate(Date issueDate) { this.issueDate = issueDate; }
public String getCreateBy() { return createBy; }
public void setCreateBy(String createBy) { this.createBy = createBy; }
public Date getCreateTime() { return createTime; }
public void setCreateTime(Date createTime) { this.createTime = createTime; }
public String getUpdateBy() { return updateBy; }
public void setUpdateBy(String updateBy) { this.updateBy = updateBy; }
public Date getUpdateTime() { return updateTime; }
public void setUpdateTime(Date updateTime) { this.updateTime = updateTime; }
}
@@ -0,0 +1,87 @@
package com.ruoyi.business.domain;
import java.math.BigDecimal;
import java.util.Date;
import com.fasterxml.jackson.annotation.JsonFormat;
import com.ruoyi.common.annotation.Excel;
import com.ruoyi.common.core.domain.BaseEntity;
/** 劳务凭证对象 BizLaborVoucher */
public class BizLaborVoucher extends BaseEntity {
private static final long serialVersionUID = 1L;
/** voucherId */
private String voucherId;
/** voucher_no */
@Excel(name = "voucher_no")
private String voucherNo;
/** meeting_name */
@Excel(name = "meeting_name")
private String meetingName;
/** expert_name */
@Excel(name = "expert_name")
private String expertName;
/** id_card */
@Excel(name = "id_card")
private String idCard;
/** bank_account */
@Excel(name = "bank_account")
private String bankAccount;
/** amount */
@Excel(name = "amount")
private BigDecimal amount;
/** submit_date */
@Excel(name = "submit_date")
@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
private Date submitDate;
/** audit_status */
@Excel(name = "audit_status")
private String auditStatus;
/** create_by */
@Excel(name = "create_by")
private String createBy;
/** create_time */
@Excel(name = "create_time")
@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
private Date createTime;
/** update_by */
@Excel(name = "update_by")
private String updateBy;
/** update_time */
@Excel(name = "update_time")
@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
private Date updateTime;
/** 会议ID */
private Long meetingId;
/** 审核意见 */
private String auditOpinion;
/** 审核人 */
private String auditBy;
/** 审核时间 */
private String auditTime;
public String getVoucherId() { return voucherId; }
public void setVoucherId(String voucherId) { this.voucherId = voucherId; }
public String getVoucherNo() { return voucherNo; }
public void setVoucherNo(String voucherNo) { this.voucherNo = voucherNo; }
public String getMeetingName() { return meetingName; }
public void setMeetingName(String meetingName) { this.meetingName = meetingName; }
public String getExpertName() { return expertName; }
public void setExpertName(String expertName) { this.expertName = expertName; }
public String getIdCard() { return idCard; }
public void setIdCard(String idCard) { this.idCard = idCard; }
public String getBankAccount() { return bankAccount; }
public void setBankAccount(String bankAccount) { this.bankAccount = bankAccount; }
public BigDecimal getAmount() { return amount; }
public void setAmount(BigDecimal amount) { this.amount = amount; }
public Date getSubmitDate() { return submitDate; }
public void setSubmitDate(Date submitDate) { this.submitDate = submitDate; }
public String getAuditStatus() { return auditStatus; }
public void setAuditStatus(String auditStatus) { this.auditStatus = auditStatus; }
public String getCreateBy() { return createBy; }
public void setCreateBy(String createBy) { this.createBy = createBy; }
public Date getCreateTime() { return createTime; }
public void setCreateTime(Date createTime) { this.createTime = createTime; }
public String getUpdateBy() { return updateBy; }
public void setUpdateBy(String updateBy) { this.updateBy = updateBy; }
public Date getUpdateTime() { return updateTime; }
public void setUpdateTime(Date updateTime) { this.updateTime = updateTime; }
}
@@ -0,0 +1,103 @@
package com.ruoyi.business.domain;
import java.math.BigDecimal;
import java.util.Date;
import com.fasterxml.jackson.annotation.JsonFormat;
import com.ruoyi.common.annotation.Excel;
import com.ruoyi.common.core.domain.BaseEntity;
/** 会议对象 BizMeeting */
public class BizMeeting extends BaseEntity {
private static final long serialVersionUID = 1L;
/** meetingId */
private String meetingId;
/** project_no */
@Excel(name = "project_no")
private String projectNo;
/** business_id */
@Excel(name = "business_id")
private String businessId;
/** project_form */
@Excel(name = "project_form")
private String projectForm;
/** meeting_name */
@Excel(name = "meeting_name")
private String meetingName;
/** start_time */
@Excel(name = "start_time")
@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
private Date startTime;
/** end_time */
@Excel(name = "end_time")
@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
private Date endTime;
/** total_periods */
@Excel(name = "total_periods")
private Long totalPeriods;
/** period_no */
@Excel(name = "period_no")
private Long periodNo;
/** current_stage */
@Excel(name = "current_stage")
private String currentStage;
/** create_by */
@Excel(name = "create_by")
private String createBy;
/** create_time */
@Excel(name = "create_time")
@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
private Date createTime;
/** update_by */
@Excel(name = "update_by")
private String updateBy;
/** update_time */
@Excel(name = "update_time")
@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
private Date updateTime;
/** 所属项目ID */
private Long projectId;
/** 项目名称 */
private String projectName;
/** 所属公司名称 (冗余字段, 由 biz_project.org_name 同步) */
private String orgName;
/** 监察意见 */
private String supervisionOpinion;
/** 监察人 */
private String supervisionBy;
/** 监察时间 */
private String supervisionTime;
/** 邀请函URL */
private String invitationUrl;
/** 日程海报URL */
private String scheduleUrl;
/** 签署劳务 0未签 1已签 */
private String laborSigned;
public String getMeetingId() { return meetingId; }
public void setMeetingId(String meetingId) { this.meetingId = meetingId; }
public String getProjectNo() { return projectNo; }
public void setProjectNo(String projectNo) { this.projectNo = projectNo; }
public String getBusinessId() { return businessId; }
public void setBusinessId(String businessId) { this.businessId = businessId; }
public String getProjectForm() { return projectForm; }
public void setProjectForm(String projectForm) { this.projectForm = projectForm; }
public String getMeetingName() { return meetingName; }
public void setMeetingName(String meetingName) { this.meetingName = meetingName; }
public Date getStartTime() { return startTime; }
public void setStartTime(Date startTime) { this.startTime = startTime; }
public Date getEndTime() { return endTime; }
public void setEndTime(Date endTime) { this.endTime = endTime; }
public Long getTotalPeriods() { return totalPeriods; }
public void setTotalPeriods(Long totalPeriods) { this.totalPeriods = totalPeriods; }
public Long getPeriodNo() { return periodNo; }
public void setPeriodNo(Long periodNo) { this.periodNo = periodNo; }
public String getCurrentStage() { return currentStage; }
public void setCurrentStage(String currentStage) { this.currentStage = currentStage; }
public String getCreateBy() { return createBy; }
public void setCreateBy(String createBy) { this.createBy = createBy; }
public Date getCreateTime() { return createTime; }
public void setCreateTime(Date createTime) { this.createTime = createTime; }
public String getUpdateBy() { return updateBy; }
public void setUpdateBy(String updateBy) { this.updateBy = updateBy; }
public Date getUpdateTime() { return updateTime; }
public void setUpdateTime(Date updateTime) { this.updateTime = updateTime; }
}
@@ -0,0 +1,87 @@
package com.ruoyi.business.domain;
import java.math.BigDecimal;
import java.util.Date;
import com.fasterxml.jackson.annotation.JsonFormat;
import com.ruoyi.common.annotation.Excel;
import com.ruoyi.common.core.domain.BaseEntity;
/** 会议结算明细对象 BizMeetingSettlement */
public class BizMeetingSettlement extends BaseEntity {
private static final long serialVersionUID = 1L;
/** id */
private String id;
/** project_no */
@Excel(name = "project_no")
private String projectNo;
/** meeting_id */
@Excel(name = "meeting_id")
private Long meetingId;
/** fee_type */
@Excel(name = "fee_type")
private String feeType;
/** unit_price */
@Excel(name = "unit_price")
private BigDecimal unitPrice;
/** qty */
@Excel(name = "qty")
private Long qty;
/** subtotal */
@Excel(name = "subtotal")
private BigDecimal subtotal;
/** remark */
@Excel(name = "remark")
private String remark;
/** audit_status */
@Excel(name = "audit_status")
private String auditStatus;
/** settlement_type */
@Excel(name = "settlement_type")
private String settlementType;
/** create_by */
@Excel(name = "create_by")
private String createBy;
/** create_time */
@Excel(name = "create_time")
@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
private Date createTime;
/** update_by */
@Excel(name = "update_by")
private String updateBy;
/** update_time */
@Excel(name = "update_time")
@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
private Date updateTime;
/** 会议名称 */
private String projectName;
/** 执行单位 */
private String execUnit;
public String getId() { return id; }
public void setId(String id) { this.id = id; }
public String getProjectNo() { return projectNo; }
public void setProjectNo(String projectNo) { this.projectNo = projectNo; }
public Long getMeetingId() { return meetingId; }
public void setMeetingId(Long meetingId) { this.meetingId = meetingId; }
public String getFeeType() { return feeType; }
public void setFeeType(String feeType) { this.feeType = feeType; }
public BigDecimal getUnitPrice() { return unitPrice; }
public void setUnitPrice(BigDecimal unitPrice) { this.unitPrice = unitPrice; }
public Long getQty() { return qty; }
public void setQty(Long qty) { this.qty = qty; }
public BigDecimal getSubtotal() { return subtotal; }
public void setSubtotal(BigDecimal subtotal) { this.subtotal = subtotal; }
public String getRemark() { return remark; }
public void setRemark(String remark) { this.remark = remark; }
public String getAuditStatus() { return auditStatus; }
public void setAuditStatus(String auditStatus) { this.auditStatus = auditStatus; }
public String getSettlementType() { return settlementType; }
public void setSettlementType(String settlementType) { this.settlementType = settlementType; }
public String getCreateBy() { return createBy; }
public void setCreateBy(String createBy) { this.createBy = createBy; }
public Date getCreateTime() { return createTime; }
public void setCreateTime(Date createTime) { this.createTime = createTime; }
public String getUpdateBy() { return updateBy; }
public void setUpdateBy(String updateBy) { this.updateBy = updateBy; }
public Date getUpdateTime() { return updateTime; }
public void setUpdateTime(Date updateTime) { this.updateTime = updateTime; }
}
@@ -0,0 +1,78 @@
package com.ruoyi.business.domain;
import java.util.Date;
import com.fasterxml.jackson.annotation.JsonFormat;
import com.ruoyi.common.annotation.Excel;
import com.ruoyi.common.core.domain.BaseEntity;
/** 个人通知消息对象 biz_message */
public class BizMessage extends BaseEntity
{
private static final long serialVersionUID = 1L;
/** msg_id */
private Long msgId;
/** 接收人 user_id */
@Excel(name = "接收人")
private Long receiverUserId;
/** 接收人姓名 (联表显示) */
@Excel(name = "接收人")
private String receiverName;
/** 消息类型 1通知 2待办 3系统 */
@Excel(name = "类型")
private String msgType;
/** 标题 */
@Excel(name = "标题")
private String title;
/** 内容 */
private String content;
/** 业务类型 auth/project/meeting/agreement */
private String bizType;
/** 关联业务ID */
private Long bizId;
/** 已读 0否 1是 */
@Excel(name = "已读")
private String isRead;
/** 已读时间 */
@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
private Date readTime;
public Long getMsgId() { return msgId; }
public void setMsgId(Long msgId) { this.msgId = msgId; }
public Long getReceiverUserId() { return receiverUserId; }
public void setReceiverUserId(Long receiverUserId) { this.receiverUserId = receiverUserId; }
public String getReceiverName() { return receiverName; }
public void setReceiverName(String receiverName) { this.receiverName = receiverName; }
public String getMsgType() { return msgType; }
public void setMsgType(String msgType) { this.msgType = msgType; }
public String getTitle() { return title; }
public void setTitle(String title) { this.title = title; }
public String getContent() { return content; }
public void setContent(String content) { this.content = content; }
public String getBizType() { return bizType; }
public void setBizType(String bizType) { this.bizType = bizType; }
public Long getBizId() { return bizId; }
public void setBizId(Long bizId) { this.bizId = bizId; }
public String getIsRead() { return isRead; }
public void setIsRead(String isRead) { this.isRead = isRead; }
public Date getReadTime() { return readTime; }
public void setReadTime(Date readTime) { this.readTime = readTime; }
}
@@ -0,0 +1,75 @@
package com.ruoyi.business.domain;
import java.util.Date;
import com.fasterxml.jackson.annotation.JsonFormat;
import com.ruoyi.common.annotation.Excel;
import com.ruoyi.common.core.domain.BaseEntity;
/**
* 公司对象 biz_org
* 用途: 赞助方(sponsor) + 执行方(execution) 共用
* 重构说明: 原 biz_support_unit + biz_execution_unit 合并, 通过 org_type 区分
*/
public class BizOrg extends BaseEntity {
private static final long serialVersionUID = 1L;
/** org_id */
private Long orgId;
/** org_name */
@Excel(name = "org_name")
private String orgName;
/** org_type: sponsor赞助方 / execution执行方 */
@Excel(name = "org_type")
private String orgType;
/** 企业性质 私营/国营/中外合资/外资/其他 */
@Excel(name = "business_nature")
private String businessNature;
/** address */
@Excel(name = "address")
private String address;
/** tax_no */
@Excel(name = "tax_no")
private String taxNo;
/** contact_name */
@Excel(name = "contact_name")
private String contactName;
/** contact_phone */
@Excel(name = "contact_phone")
private String contactPhone;
/** intent_count (仅赞助方用) */
@Excel(name = "intent_count")
private Integer intentCount;
/** status */
@Excel(name = "status")
private String status;
/** create_time */
@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
private Date createTime;
/** update_time */
@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
private Date updateTime;
public Long getOrgId() { return orgId; }
public void setOrgId(Long orgId) { this.orgId = orgId; }
public String getOrgName() { return orgName; }
public void setOrgName(String orgName) { this.orgName = orgName; }
public String getOrgType() { return orgType; }
public void setOrgType(String orgType) { this.orgType = orgType; }
public String getBusinessNature() { return businessNature; }
public void setBusinessNature(String businessNature) { this.businessNature = businessNature; }
public String getAddress() { return address; }
public void setAddress(String address) { this.address = address; }
public String getTaxNo() { return taxNo; }
public void setTaxNo(String taxNo) { this.taxNo = taxNo; }
public String getContactName() { return contactName; }
public void setContactName(String contactName) { this.contactName = contactName; }
public String getContactPhone() { return contactPhone; }
public void setContactPhone(String contactPhone) { this.contactPhone = contactPhone; }
public Integer getIntentCount() { return intentCount; }
public void setIntentCount(Integer intentCount) { this.intentCount = intentCount; }
public String getStatus() { return status; }
public void setStatus(String status) { this.status = status; }
public Date getCreateTime() { return createTime; }
public void setCreateTime(Date createTime) { this.createTime = createTime; }
public Date getUpdateTime() { return updateTime; }
public void setUpdateTime(Date updateTime) { this.updateTime = updateTime; }
}
@@ -0,0 +1,108 @@
package com.ruoyi.business.domain;
import java.math.BigDecimal;
import java.util.Date;
import com.fasterxml.jackson.annotation.JsonFormat;
import com.ruoyi.common.annotation.Excel;
import com.ruoyi.common.core.domain.BaseEntity;
/** 人员对象 BizPerson */
public class BizPerson extends BaseEntity {
private static final long serialVersionUID = 1L;
/** personId */
private String personId;
/** name */
@Excel(name = "name")
private String name;
/** phone */
@Excel(name = "phone")
private String phone;
/** 所属公司ID (FK: biz_org.org_id) */
private Long orgId;
/** 所属公司名 (LEFT JOIN biz_org, 仅展示, 不入库) */
private String orgName;
/** 所属公司类型 (LEFT JOIN biz_org, 仅展示, 不入库) */
private String orgType;
/** department */
@Excel(name = "department")
private String department;
/** position */
@Excel(name = "position")
private String position;
/** role */
@Excel(name = "role")
private String role;
/** status */
@Excel(name = "status")
private String status;
/** 逻辑删除 0正常 1已删 */
private String delFlag;
/** create_by */
@Excel(name = "create_by")
private String createBy;
/** create_time */
@Excel(name = "create_time")
@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
private Date createTime;
/** update_by */
@Excel(name = "update_by")
private String updateBy;
/** update_time */
@Excel(name = "update_time")
@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
private Date updateTime;
/** 关联系统用户ID */
private Long userId;
/** 所属单位类型 execution执行/sponsor支持 */
private String unitType;
/** 账号类型 (来自 sys_user.account_type, MAIN=主账号 / SUB=子账号) - 仅展示用,不入库 */
private String accountType;
/** 主账号ID (来自 sys_user.parent_user_id, 子账号指向其主账号) - 仅展示用 */
private Long parentUserId;
/** 子账号登录账号 (前端传入, 用于创建 sys_user 子账号) - 非持久化字段 */
private transient String loginUsername;
/** 子账号初始密码 (前端传入, 明文, 创建后不存储明文) - 非持久化字段 */
private transient String loginPassword;
public String getPersonId() { return personId; }
public void setPersonId(String personId) { this.personId = personId; }
public String getName() { return name; }
public void setName(String name) { this.name = name; }
public String getPhone() { return phone; }
public void setPhone(String phone) { this.phone = phone; }
public Long getOrgId() { return orgId; }
public void setOrgId(Long orgId) { this.orgId = orgId; }
public String getOrgName() { return orgName; }
public void setOrgName(String orgName) { this.orgName = orgName; }
public String getOrgType() { return orgType; }
public void setOrgType(String orgType) { this.orgType = orgType; }
public String getDepartment() { return department; }
public void setDepartment(String department) { this.department = department; }
public String getPosition() { return position; }
public void setPosition(String position) { this.position = position; }
public String getRole() { return role; }
public void setRole(String role) { this.role = role; }
public String getStatus() { return status; }
public void setStatus(String status) { this.status = status; }
public String getDelFlag() { return delFlag; }
public void setDelFlag(String delFlag) { this.delFlag = delFlag; }
public String getCreateBy() { return createBy; }
public void setCreateBy(String createBy) { this.createBy = createBy; }
public Date getCreateTime() { return createTime; }
public void setCreateTime(Date createTime) { this.createTime = createTime; }
public String getUpdateBy() { return updateBy; }
public void setUpdateBy(String updateBy) { this.updateBy = updateBy; }
public Date getUpdateTime() { return updateTime; }
public void setUpdateTime(Date updateTime) { this.updateTime = updateTime; }
public Long getUserId() { return userId; }
public void setUserId(Long userId) { this.userId = userId; }
public String getUnitType() { return unitType; }
public void setUnitType(String unitType) { this.unitType = unitType; }
public String getAccountType() { return accountType; }
public void setAccountType(String accountType) { this.accountType = accountType; }
public Long getParentUserId() { return parentUserId; }
public void setParentUserId(Long parentUserId) { this.parentUserId = parentUserId; }
public String getLoginUsername() { return loginUsername; }
public void setLoginUsername(String loginUsername) { this.loginUsername = loginUsername; }
public String getLoginPassword() { return loginPassword; }
public void setLoginPassword(String loginPassword) { this.loginPassword = loginPassword; }
}
@@ -0,0 +1,51 @@
package com.ruoyi.business.domain;
import com.ruoyi.common.annotation.Excel;
/**
* sponsor 端人员批量导入 VO (中文列头, 用 ruoyi ExcelUtil 解析)
*
* <p>区别于 BizPerson 实体: 这里只暴露用户能填写的业务字段, 不包含内部 id/审计字段,
* 列头按原型 sponsor-new-person.html: 姓名/手机号/所属公司/部门/职务/角色/状态.
*
* <p>导入后端会按以下规则创建 sys_user 子账号 (parent_user_id=当前登录主账号):
* <ul>
* <li>loginUsername = 手机号 (要求唯一)</li>
* <li>loginPassword = "123456" (默认密码, 前端 toast 提示用户)</li>
* <li>unitType = "sponsor"</li>
* <li>orgId = 业务层按 orgName 查 biz_org 取 org_id (TODO: SponsorPeople 那边 import 接口需补这步)</li>
* </ul>
*/
public class BizPersonImportVO
{
@Excel(name = "姓名", sort = 1)
private String name;
@Excel(name = "手机号", sort = 2)
private String phone;
@Excel(name = "所属公司", sort = 3)
private String orgName;
@Excel(name = "部门", sort = 4)
private String department;
@Excel(name = "职务", sort = 5)
private String position;
@Excel(name = "角色", sort = 6)
private String role;
public String getName() { return name; }
public void setName(String name) { this.name = name; }
public String getPhone() { return phone; }
public void setPhone(String phone) { this.phone = phone; }
public String getOrgName() { return orgName; }
public void setOrgName(String orgName) { this.orgName = orgName; }
public String getDepartment() { return department; }
public void setDepartment(String department) { this.department = department; }
public String getPosition() { return position; }
public void setPosition(String position) { this.position = position; }
public String getRole() { return role; }
public void setRole(String role) { this.role = role; }
}
@@ -0,0 +1,212 @@
package com.ruoyi.business.domain;
import java.math.BigDecimal;
import java.util.Date;
import com.fasterxml.jackson.annotation.JsonFormat;
import com.ruoyi.common.annotation.Excel;
import com.ruoyi.common.core.domain.BaseEntity;
/** 项目对象 BizProject */
public class BizProject extends BaseEntity {
private static final long serialVersionUID = 1L;
/** projectId */
private String projectId;
/** project_no */
@Excel(name = "project_no")
private String projectNo;
/** project_name */
@Excel(name = "project_name")
private String projectName;
/** total_sessions */
@Excel(name = "total_sessions")
private Long totalSessions;
/** done_sessions */
@Excel(name = "done_sessions")
private Long doneSessions;
/** todo_sessions */
@Excel(name = "todo_sessions")
private Long todoSessions;
/** total_amount */
@Excel(name = "total_amount")
private BigDecimal totalAmount;
/** available_amount */
@Excel(name = "available_amount")
private BigDecimal availableAmount;
/** paid_labor_amount */
@Excel(name = "paid_labor_amount")
private BigDecimal paidLaborAmount;
/** paid_meeting_amount */
@Excel(name = "paid_meeting_amount")
private BigDecimal paidMeetingAmount;
/** rating_score (平均分) */
@Excel(name = "rating_score")
private BigDecimal ratingScore;
/** 评分维度: 履约质量 */
private BigDecimal ratingQ1;
/** 评分维度: 时效响应 */
private BigDecimal ratingQ2;
/** 评分维度: 配合度 */
private BigDecimal ratingQ3;
/** 评分维度: 合规安全 */
private BigDecimal ratingQ4;
/** org_name (赞助方/执行方, 由 org_type 区分) */
@Excel(name = "org_name")
private String orgName;
/** org_type: sponsor 赞助方 / execution 执行方 */
@Excel(name = "org_type")
private String orgType;
/** project_form */
@Excel(name = "project_form")
private String projectForm;
/** is_finished */
@Excel(name = "is_finished")
private String isFinished;
/** is_settled */
@Excel(name = "is_settled")
private String isSettled;
/** org_id (赞助方/执行方, 由 org_type 区分) */
@Excel(name = "org_id")
private Long orgId;
/** create_by */
@Excel(name = "create_by")
private String createBy;
/** create_time */
@Excel(name = "create_time")
@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
private Date createTime;
/** update_by */
@Excel(name = "update_by")
private String updateBy;
/** update_time */
@Excel(name = "update_time")
@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
private Date updateTime;
/** 管理费及税金 */
private BigDecimal manageFee;
/** 项目开始时间 */
private String startTime;
/** 项目结束时间 */
private String endTime;
/** 提交材料截止天数 */
private Integer submitDeadlineDays;
/** 支持合同文件URL */
private String supportContractUrl;
/** 执行合同文件URL */
private String executeContractUrl;
/** 邀请函文件URL */
private String invitationUrl;
/** 支持函文件URL */
private String supportLetterUrl;
/** 已发布公告URL */
private String publishUrl;
/** 通知文件URL */
private String noticeUrl;
/** 日程文件URL */
private String scheduleUrl;
/** 是否已发布公示 0否 1是 */
private String isPublished;
/** 发布时间 */
@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
private Date publishTime;
/** 公告类型 (邀请函/支持函/通知/日程/公示) */
private String announcementType;
/* ============ 赞助方评分字段 (来自 biz_project_sponsor 中间表, 仅展示用) ============ */
/** 当前 login 用户对该项目的平均分 */
private BigDecimal sponsorRating;
private Integer sponsorQ1;
private Integer sponsorQ2;
private Integer sponsorQ3;
private Integer sponsorQ4;
private String sponsorRemark;
public String getProjectId() { return projectId; }
public void setProjectId(String projectId) { this.projectId = projectId; }
public String getProjectNo() { return projectNo; }
public void setProjectNo(String projectNo) { this.projectNo = projectNo; }
public String getProjectName() { return projectName; }
public void setProjectName(String projectName) { this.projectName = projectName; }
public Long getTotalSessions() { return totalSessions; }
public void setTotalSessions(Long totalSessions) { this.totalSessions = totalSessions; }
public Long getDoneSessions() { return doneSessions; }
public void setDoneSessions(Long doneSessions) { this.doneSessions = doneSessions; }
public Long getTodoSessions() { return todoSessions; }
public void setTodoSessions(Long todoSessions) { this.todoSessions = todoSessions; }
public BigDecimal getTotalAmount() { return totalAmount; }
public void setTotalAmount(BigDecimal totalAmount) { this.totalAmount = totalAmount; }
public BigDecimal getAvailableAmount() { return availableAmount; }
public void setAvailableAmount(BigDecimal availableAmount) { this.availableAmount = availableAmount; }
public BigDecimal getPaidLaborAmount() { return paidLaborAmount; }
public void setPaidLaborAmount(BigDecimal paidLaborAmount) { this.paidLaborAmount = paidLaborAmount; }
public BigDecimal getPaidMeetingAmount() { return paidMeetingAmount; }
public void setPaidMeetingAmount(BigDecimal paidMeetingAmount) { this.paidMeetingAmount = paidMeetingAmount; }
public BigDecimal getRatingScore() { return ratingScore; }
public void setRatingScore(BigDecimal ratingScore) { this.ratingScore = ratingScore; }
public BigDecimal getRatingQ1() { return ratingQ1; }
public void setRatingQ1(BigDecimal ratingQ1) { this.ratingQ1 = ratingQ1; }
public BigDecimal getRatingQ2() { return ratingQ2; }
public void setRatingQ2(BigDecimal ratingQ2) { this.ratingQ2 = ratingQ2; }
public BigDecimal getRatingQ3() { return ratingQ3; }
public void setRatingQ3(BigDecimal ratingQ3) { this.ratingQ3 = ratingQ3; }
public BigDecimal getRatingQ4() { return ratingQ4; }
public void setRatingQ4(BigDecimal ratingQ4) { this.ratingQ4 = ratingQ4; }
public String getOrgName() { return orgName; }
public void setOrgName(String orgName) { this.orgName = orgName; }
public String getOrgType() { return orgType; }
public void setOrgType(String orgType) { this.orgType = orgType; }
public String getProjectForm() { return projectForm; }
public void setProjectForm(String projectForm) { this.projectForm = projectForm; }
public String getIsFinished() { return isFinished; }
public void setIsFinished(String isFinished) { this.isFinished = isFinished; }
public String getIsSettled() { return isSettled; }
public void setIsSettled(String isSettled) { this.isSettled = isSettled; }
public Long getOrgId() { return orgId; }
public void setOrgId(Long orgId) { this.orgId = orgId; }
public String getCreateBy() { return createBy; }
public void setCreateBy(String createBy) { this.createBy = createBy; }
public Date getCreateTime() { return createTime; }
public void setCreateTime(Date createTime) { this.createTime = createTime; }
public String getUpdateBy() { return updateBy; }
public void setUpdateBy(String updateBy) { this.updateBy = updateBy; }
public Date getUpdateTime() { return updateTime; }
public void setUpdateTime(Date updateTime) { this.updateTime = updateTime; }
public BigDecimal getManageFee() { return manageFee; }
public void setManageFee(BigDecimal manageFee) { this.manageFee = manageFee; }
public String getStartTime() { return startTime; }
public void setStartTime(String startTime) { this.startTime = startTime; }
public String getEndTime() { return endTime; }
public void setEndTime(String endTime) { this.endTime = endTime; }
public Integer getSubmitDeadlineDays() { return submitDeadlineDays; }
public void setSubmitDeadlineDays(Integer submitDeadlineDays) { this.submitDeadlineDays = submitDeadlineDays; }
public String getSupportContractUrl() { return supportContractUrl; }
public void setSupportContractUrl(String supportContractUrl) { this.supportContractUrl = supportContractUrl; }
public String getExecuteContractUrl() { return executeContractUrl; }
public void setExecuteContractUrl(String executeContractUrl) { this.executeContractUrl = executeContractUrl; }
public String getInvitationUrl() { return invitationUrl; }
public void setInvitationUrl(String invitationUrl) { this.invitationUrl = invitationUrl; }
public String getSupportLetterUrl() { return supportLetterUrl; }
public void setSupportLetterUrl(String supportLetterUrl) { this.supportLetterUrl = supportLetterUrl; }
public String getPublishUrl() { return publishUrl; }
public void setPublishUrl(String publishUrl) { this.publishUrl = publishUrl; }
public String getNoticeUrl() { return noticeUrl; }
public void setNoticeUrl(String noticeUrl) { this.noticeUrl = noticeUrl; }
public String getScheduleUrl() { return scheduleUrl; }
public void setScheduleUrl(String scheduleUrl) { this.scheduleUrl = scheduleUrl; }
public String getIsPublished() { return isPublished; }
public void setIsPublished(String isPublished) { this.isPublished = isPublished; }
public Date getPublishTime() { return publishTime; }
public void setPublishTime(Date publishTime) { this.publishTime = publishTime; }
public String getAnnouncementType() { return announcementType; }
public void setAnnouncementType(String announcementType) { this.announcementType = announcementType; }
public BigDecimal getSponsorRating() { return sponsorRating; }
public void setSponsorRating(BigDecimal sponsorRating) { this.sponsorRating = sponsorRating; }
public Integer getSponsorQ1() { return sponsorQ1; }
public void setSponsorQ1(Integer sponsorQ1) { this.sponsorQ1 = sponsorQ1; }
public Integer getSponsorQ2() { return sponsorQ2; }
public void setSponsorQ2(Integer sponsorQ2) { this.sponsorQ2 = sponsorQ2; }
public Integer getSponsorQ3() { return sponsorQ3; }
public void setSponsorQ3(Integer sponsorQ3) { this.sponsorQ3 = sponsorQ3; }
public Integer getSponsorQ4() { return sponsorQ4; }
public void setSponsorQ4(Integer sponsorQ4) { this.sponsorQ4 = sponsorQ4; }
public String getSponsorRemark() { return sponsorRemark; }
public void setSponsorRemark(String sponsorRemark) { this.sponsorRemark = sponsorRemark; }
}
@@ -0,0 +1,50 @@
package com.ruoyi.business.domain;
import java.math.BigDecimal;
import com.ruoyi.common.core.domain.BaseEntity;
/** 项目执行方分配对象 BizProjectAssign */
public class BizProjectAssign extends BaseEntity {
private static final long serialVersionUID = 1L;
/** assign_id */
private String assignId;
/** project_id */
private Long projectId;
/** 执行方用户ID (sys_user.user_id) */
private Long execUserId;
/** 执行方用户名 (denormalized) */
private String execUserName;
/** 执行方昵称 (denormalized) */
private String execNickName;
/** 执行方所属机构 (denormalized) */
private String execOrg;
/** 分配场次 */
private Integer sessions;
/** 分配金额 */
private BigDecimal amount;
/** 备注 */
private String remark;
/** 状态 0正常 1已撤销 */
private String status;
public String getAssignId() { return assignId; }
public void setAssignId(String assignId) { this.assignId = assignId; }
public Long getProjectId() { return projectId; }
public void setProjectId(Long projectId) { this.projectId = projectId; }
public Long getExecUserId() { return execUserId; }
public void setExecUserId(Long execUserId) { this.execUserId = execUserId; }
public String getExecUserName() { return execUserName; }
public void setExecUserName(String execUserName) { this.execUserName = execUserName; }
public String getExecNickName() { return execNickName; }
public void setExecNickName(String execNickName) { this.execNickName = execNickName; }
public String getExecOrg() { return execOrg; }
public void setExecOrg(String execOrg) { this.execOrg = execOrg; }
public Integer getSessions() { return sessions; }
public void setSessions(Integer sessions) { this.sessions = sessions; }
public BigDecimal getAmount() { return amount; }
public void setAmount(BigDecimal amount) { this.amount = amount; }
public String getRemark() { return remark; }
public void setRemark(String remark) { this.remark = remark; }
public String getStatus() { return status; }
public void setStatus(String status) { this.status = status; }
}
@@ -0,0 +1,94 @@
package com.ruoyi.business.domain;
import java.math.BigDecimal;
import java.util.Date;
import com.fasterxml.jackson.annotation.JsonFormat;
import com.ruoyi.common.annotation.Excel;
import com.ruoyi.common.core.domain.BaseEntity;
/** 项目策划方案对象 BizProjectPlan */
public class BizProjectPlan extends BaseEntity {
private static final long serialVersionUID = 1L;
/** planId */
private String planId;
/** plan_name */
@Excel(name = "plan_name")
private String planName;
/** plan_direction */
@Excel(name = "plan_direction")
private String planDirection;
/** plan_category */
@Excel(name = "plan_category")
private String planCategory;
/** project_form */
@Excel(name = "project_form")
private String projectForm;
/** design_file_url */
@Excel(name = "design_file_url")
private String designFileUrl;
/** status */
@Excel(name = "status")
private String status;
/** is_settled */
@Excel(name = "is_settled")
private String isSettled;
/** project_no */
@Excel(name = "project_no")
private String projectNo;
/** remark */
@Excel(name = "remark")
private String remark;
/** is_finished */
@Excel(name = "is_finished")
private String isFinished;
/** create_by */
@Excel(name = "create_by")
private String createBy;
/** create_time */
@Excel(name = "create_time")
@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
private Date createTime;
/** update_by */
@Excel(name = "update_by")
private String updateBy;
/** update_time */
@Excel(name = "update_time")
@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
private Date updateTime;
/** 审核意见 */
private String auditOpinion;
/** 审核人 */
private String auditBy;
/** 审核时间 */
private String auditTime;
public String getPlanId() { return planId; }
public void setPlanId(String planId) { this.planId = planId; }
public String getPlanName() { return planName; }
public void setPlanName(String planName) { this.planName = planName; }
public String getPlanDirection() { return planDirection; }
public void setPlanDirection(String planDirection) { this.planDirection = planDirection; }
public String getPlanCategory() { return planCategory; }
public void setPlanCategory(String planCategory) { this.planCategory = planCategory; }
public String getProjectForm() { return projectForm; }
public void setProjectForm(String projectForm) { this.projectForm = projectForm; }
public String getDesignFileUrl() { return designFileUrl; }
public void setDesignFileUrl(String designFileUrl) { this.designFileUrl = designFileUrl; }
public String getStatus() { return status; }
public void setStatus(String status) { this.status = status; }
public String getIsSettled() { return isSettled; }
public void setIsSettled(String isSettled) { this.isSettled = isSettled; }
public String getProjectNo() { return projectNo; }
public void setProjectNo(String projectNo) { this.projectNo = projectNo; }
public String getRemark() { return remark; }
public void setRemark(String remark) { this.remark = remark; }
public String getIsFinished() { return isFinished; }
public void setIsFinished(String isFinished) { this.isFinished = isFinished; }
public String getCreateBy() { return createBy; }
public void setCreateBy(String createBy) { this.createBy = createBy; }
public Date getCreateTime() { return createTime; }
public void setCreateTime(Date createTime) { this.createTime = createTime; }
public String getUpdateBy() { return updateBy; }
public void setUpdateBy(String updateBy) { this.updateBy = updateBy; }
public Date getUpdateTime() { return updateTime; }
public void setUpdateTime(Date updateTime) { this.updateTime = updateTime; }
}
@@ -0,0 +1,100 @@
package com.ruoyi.business.domain;
import java.math.BigDecimal;
import java.util.Date;
import com.fasterxml.jackson.annotation.JsonFormat;
import com.ruoyi.common.annotation.Excel;
import com.ruoyi.common.core.domain.BaseEntity;
/** 项目评分对象 BizProjectRating */
public class BizProjectRating extends BaseEntity {
private static final long serialVersionUID = 1L;
/** ratingId */
private String ratingId;
/** project_no */
@Excel(name = "project_no")
private String projectNo;
/** project_name */
@Excel(name = "project_name")
private String projectName;
/** rater_name */
@Excel(name = "rater_name")
private String raterName;
/** rater_role */
@Excel(name = "rater_role")
private String raterRole;
/** quality_score */
@Excel(name = "quality_score")
private String qualityScore;
/** response_score */
@Excel(name = "response_score")
private Long responseScore;
/** cooperation_score */
@Excel(name = "cooperation_score")
private Long cooperationScore;
/** compliance_score */
@Excel(name = "compliance_score")
private Long complianceScore;
/** total_score */
@Excel(name = "total_score")
private BigDecimal totalScore;
/** remark */
@Excel(name = "remark")
private String remark;
/** create_by */
@Excel(name = "create_by")
private String createBy;
/** create_time */
@Excel(name = "create_time")
@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
private Date createTime;
/** update_by */
@Excel(name = "update_by")
private String updateBy;
/** update_time */
@Excel(name = "update_time")
@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
private Date updateTime;
/** 项目ID */
private Long projectId;
/** 评分人ID */
private Long raterId;
/** 评分时间 */
private String ratingTime;
public String getRatingId() { return ratingId; }
public void setRatingId(String ratingId) { this.ratingId = ratingId; }
public String getProjectNo() { return projectNo; }
public void setProjectNo(String projectNo) { this.projectNo = projectNo; }
public String getProjectName() { return projectName; }
public void setProjectName(String projectName) { this.projectName = projectName; }
public String getRaterName() { return raterName; }
public void setRaterName(String raterName) { this.raterName = raterName; }
public String getRaterRole() { return raterRole; }
public void setRaterRole(String raterRole) { this.raterRole = raterRole; }
public String getQualityScore() { return qualityScore; }
public void setQualityScore(String qualityScore) { this.qualityScore = qualityScore; }
public Long getResponseScore() { return responseScore; }
public void setResponseScore(Long responseScore) { this.responseScore = responseScore; }
public Long getCooperationScore() { return cooperationScore; }
public void setCooperationScore(Long cooperationScore) { this.cooperationScore = cooperationScore; }
public Long getComplianceScore() { return complianceScore; }
public void setComplianceScore(Long complianceScore) { this.complianceScore = complianceScore; }
public BigDecimal getTotalScore() { return totalScore; }
public void setTotalScore(BigDecimal totalScore) { this.totalScore = totalScore; }
public String getRemark() { return remark; }
public void setRemark(String remark) { this.remark = remark; }
public String getCreateBy() { return createBy; }
public void setCreateBy(String createBy) { this.createBy = createBy; }
public Date getCreateTime() { return createTime; }
public void setCreateTime(Date createTime) { this.createTime = createTime; }
public String getUpdateBy() { return updateBy; }
public void setUpdateBy(String updateBy) { this.updateBy = updateBy; }
public Date getUpdateTime() { return updateTime; }
public void setUpdateTime(Date updateTime) { this.updateTime = updateTime; }
public Long getProjectId() { return projectId; }
public void setProjectId(Long projectId) { this.projectId = projectId; }
public Long getRaterId() { return raterId; }
public void setRaterId(Long raterId) { this.raterId = raterId; }
public String getRatingTime() { return ratingTime; }
public void setRatingTime(String ratingTime) { this.ratingTime = ratingTime; }
}
@@ -0,0 +1,42 @@
package com.ruoyi.business.domain;
import java.util.Date;
import com.fasterxml.jackson.annotation.JsonFormat;
import com.ruoyi.common.core.domain.BaseEntity;
/** 项目-赞助方-监察员分配记录 (biz_project_sponsor_assign) */
public class BizProjectSponsorAssign extends BaseEntity {
private static final long serialVersionUID = 1L;
private Long id;
private String projectId;
private Long sponsorUserId;
private Long monitorUserId;
private String assignDesc;
private String assignPoints;
/** 关联展示字段 (非持久化) */
private String sponsorUserName;
private String monitorUserName;
@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
private Date createTime;
public Long getId() { return id; }
public void setId(Long id) { this.id = id; }
public String getProjectId() { return projectId; }
public void setProjectId(String projectId) { this.projectId = projectId; }
public Long getSponsorUserId() { return sponsorUserId; }
public void setSponsorUserId(Long sponsorUserId) { this.sponsorUserId = sponsorUserId; }
public Long getMonitorUserId() { return monitorUserId; }
public void setMonitorUserId(Long monitorUserId) { this.monitorUserId = monitorUserId; }
public String getAssignDesc() { return assignDesc; }
public void setAssignDesc(String assignDesc) { this.assignDesc = assignDesc; }
public String getAssignPoints() { return assignPoints; }
public void setAssignPoints(String assignPoints) { this.assignPoints = assignPoints; }
public String getSponsorUserName() { return sponsorUserName; }
public void setSponsorUserName(String sponsorUserName) { this.sponsorUserName = sponsorUserName; }
public String getMonitorUserName() { return monitorUserName; }
public void setMonitorUserName(String monitorUserName) { this.monitorUserName = monitorUserName; }
public Date getCreateTime() { return createTime; }
public void setCreateTime(Date createTime) { this.createTime = createTime; }
}
@@ -0,0 +1,61 @@
package com.ruoyi.business.domain;
import java.util.Date;
import com.ruoyi.common.annotation.Excel;
import com.ruoyi.common.core.domain.BaseEntity;
/** 项目公告对象 BizPublicity */
public class BizPublicity extends BaseEntity
{
private static final long serialVersionUID = 1L;
/** PK */
private Long id;
/** 项目ID */
@Excel(name = "project_id")
private Long projectId;
/** 项目编号 */
@Excel(name = "project_no")
private String projectNo;
/** 项目名称 */
@Excel(name = "project_name")
private String projectName;
/** 公告类型 (invitation/support/notice/agenda) */
@Excel(name = "announce_type")
private String announceType;
/** 公告标题 */
@Excel(name = "title")
private String title;
/** 公告文件URL */
@Excel(name = "file_url")
private String fileUrl;
/** 备注 */
@Excel(name = "remark")
private String remark;
/** 状态 0保存 1发布 */
@Excel(name = "status")
private String status;
/** 发布时间 */
@Excel(name = "rating_time")
private Date ratingTime;
public Long getId() { return id; }
public void setId(Long id) { this.id = id; }
public Long getProjectId() { return projectId; }
public void setProjectId(Long projectId) { this.projectId = projectId; }
public String getProjectNo() { return projectNo; }
public void setProjectNo(String projectNo) { this.projectNo = projectNo; }
public String getProjectName() { return projectName; }
public void setProjectName(String projectName) { this.projectName = projectName; }
public String getAnnounceType() { return announceType; }
public void setAnnounceType(String announceType) { this.announceType = announceType; }
public String getTitle() { return title; }
public void setTitle(String title) { this.title = title; }
public String getFileUrl() { return fileUrl; }
public void setFileUrl(String fileUrl) { this.fileUrl = fileUrl; }
public String getRemark() { return remark; }
public void setRemark(String remark) { this.remark = remark; }
public String getStatus() { return status; }
public void setStatus(String status) { this.status = status; }
public Date getRatingTime() { return ratingTime; }
public void setRatingTime(Date ratingTime) { this.ratingTime = ratingTime; }
}
@@ -0,0 +1,69 @@
package com.ruoyi.business.domain;
import java.math.BigDecimal;
import java.util.Date;
import com.fasterxml.jackson.annotation.JsonFormat;
import com.ruoyi.common.annotation.Excel;
import com.ruoyi.common.core.domain.BaseEntity;
/** 资料对象 BizResource */
public class BizResource extends BaseEntity {
private static final long serialVersionUID = 1L;
/** resourceId */
private String resourceId;
/** name */
@Excel(name = "name")
private String name;
/** category */
@Excel(name = "category")
private String category;
/** file_size */
@Excel(name = "file_size")
private String fileSize;
/** uploader_name */
@Excel(name = "uploader_name")
private String uploaderName;
/** upload_time */
@Excel(name = "upload_time")
@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
private Date uploadTime;
/** status */
@Excel(name = "status")
private String status;
/** create_by */
@Excel(name = "create_by")
private String createBy;
/** create_time */
@Excel(name = "create_time")
@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
private Date createTime;
/** update_by */
@Excel(name = "update_by")
private String updateBy;
/** update_time */
@Excel(name = "update_time")
@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
private Date updateTime;
public String getResourceId() { return resourceId; }
public void setResourceId(String resourceId) { this.resourceId = resourceId; }
public String getName() { return name; }
public void setName(String name) { this.name = name; }
public String getCategory() { return category; }
public void setCategory(String category) { this.category = category; }
public String getFileSize() { return fileSize; }
public void setFileSize(String fileSize) { this.fileSize = fileSize; }
public String getUploaderName() { return uploaderName; }
public void setUploaderName(String uploaderName) { this.uploaderName = uploaderName; }
public Date getUploadTime() { return uploadTime; }
public void setUploadTime(Date uploadTime) { this.uploadTime = uploadTime; }
public String getStatus() { return status; }
public void setStatus(String status) { this.status = status; }
public String getCreateBy() { return createBy; }
public void setCreateBy(String createBy) { this.createBy = createBy; }
public Date getCreateTime() { return createTime; }
public void setCreateTime(Date createTime) { this.createTime = createTime; }
public String getUpdateBy() { return updateBy; }
public void setUpdateBy(String updateBy) { this.updateBy = updateBy; }
public Date getUpdateTime() { return updateTime; }
public void setUpdateTime(Date updateTime) { this.updateTime = updateTime; }
}
@@ -0,0 +1,86 @@
package com.ruoyi.business.domain;
import java.math.BigDecimal;
import java.util.Date;
import com.fasterxml.jackson.annotation.JsonFormat;
import com.ruoyi.common.annotation.Excel;
import com.ruoyi.common.core.domain.BaseEntity;
/** 投稿对象 BizSubmission */
public class BizSubmission extends BaseEntity {
private static final long serialVersionUID = 1L;
/** subId */
private String subId;
/** title */
@Excel(name = "title")
private String title;
/** direction */
@Excel(name = "direction")
private String direction;
/** project_form */
@Excel(name = "project_form")
private String projectForm;
/** design_file_url */
@Excel(name = "design_file_url")
private String designFileUrl;
/** status */
@Excel(name = "status")
private String status;
/** remark */
@Excel(name = "remark")
private String remark;
/** create_by */
@Excel(name = "create_by")
private String createBy;
/** create_time */
@Excel(name = "create_time")
@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
private Date createTime;
/** update_by */
@Excel(name = "update_by")
private String updateBy;
/** update_time */
@Excel(name = "update_time")
@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
private Date updateTime;
/** 投稿人用户ID */
private Long submitterId;
/** 投稿人姓名 */
private String submitterName;
/** 项目类别 学术会议类/专项科研类/调研征集类/慈善帮扶类/标准制定类/患者援助类/专业培训类 */
private String projectCategory;
/** 审核意见 */
private String auditOpinion;
/** 审核人 */
private String auditBy;
/** 审核时间 */
private String auditTime;
public String getSubId() { return subId; }
public void setSubId(String subId) { this.subId = subId; }
public String getTitle() { return title; }
public void setTitle(String title) { this.title = title; }
public String getDirection() { return direction; }
public void setDirection(String direction) { this.direction = direction; }
public String getProjectForm() { return projectForm; }
public void setProjectForm(String projectForm) { this.projectForm = projectForm; }
public String getProjectCategory() { return projectCategory; }
public void setProjectCategory(String projectCategory) { this.projectCategory = projectCategory; }
public String getDesignFileUrl() { return designFileUrl; }
public void setDesignFileUrl(String designFileUrl) { this.designFileUrl = designFileUrl; }
public String getStatus() { return status; }
public void setStatus(String status) { this.status = status; }
public String getRemark() { return remark; }
public void setRemark(String remark) { this.remark = remark; }
public Long getSubmitterId() { return submitterId; }
public void setSubmitterId(Long submitterId) { this.submitterId = submitterId; }
public String getSubmitterName() { return submitterName; }
public void setSubmitterName(String submitterName) { this.submitterName = submitterName; }
public String getCreateBy() { return createBy; }
public void setCreateBy(String createBy) { this.createBy = createBy; }
public Date getCreateTime() { return createTime; }
public void setCreateTime(Date createTime) { this.createTime = createTime; }
public String getUpdateBy() { return updateBy; }
public void setUpdateBy(String updateBy) { this.updateBy = updateBy; }
public Date getUpdateTime() { return updateTime; }
public void setUpdateTime(Date updateTime) { this.updateTime = updateTime; }
}
@@ -0,0 +1,78 @@
package com.ruoyi.business.domain;
import java.math.BigDecimal;
import java.util.Date;
import com.fasterxml.jackson.annotation.JsonFormat;
import com.ruoyi.common.annotation.Excel;
import com.ruoyi.common.core.domain.BaseEntity;
/** 支持意向对象 BizSupportIntent */
public class BizSupportIntent extends BaseEntity {
private static final long serialVersionUID = 1L;
/** intentId */
private String intentId;
/** project_no */
@Excel(name = "project_no")
private String projectNo;
/** project_name */
@Excel(name = "project_name")
private String projectName;
/** name */
@Excel(name = "name")
private String name;
/** work_unit */
@Excel(name = "work_unit")
private String workUnit;
/** department */
@Excel(name = "department")
private String department;
/** position */
@Excel(name = "position")
private String position;
/** phone */
@Excel(name = "phone")
private String phone;
/** account_status */
@Excel(name = "account_status")
private String accountStatus;
/** create_by */
@Excel(name = "create_by")
private String createBy;
/** create_time */
@Excel(name = "create_time")
@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
private Date createTime;
/** update_by */
@Excel(name = "update_by")
private String updateBy;
/** update_time */
@Excel(name = "update_time")
@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
private Date updateTime;
public String getIntentId() { return intentId; }
public void setIntentId(String intentId) { this.intentId = intentId; }
public String getProjectNo() { return projectNo; }
public void setProjectNo(String projectNo) { this.projectNo = projectNo; }
public String getProjectName() { return projectName; }
public void setProjectName(String projectName) { this.projectName = projectName; }
public String getName() { return name; }
public void setName(String name) { this.name = name; }
public String getWorkUnit() { return workUnit; }
public void setWorkUnit(String workUnit) { this.workUnit = workUnit; }
public String getDepartment() { return department; }
public void setDepartment(String department) { this.department = department; }
public String getPosition() { return position; }
public void setPosition(String position) { this.position = position; }
public String getPhone() { return phone; }
public void setPhone(String phone) { this.phone = phone; }
public String getAccountStatus() { return accountStatus; }
public void setAccountStatus(String accountStatus) { this.accountStatus = accountStatus; }
public String getCreateBy() { return createBy; }
public void setCreateBy(String createBy) { this.createBy = createBy; }
public Date getCreateTime() { return createTime; }
public void setCreateTime(Date createTime) { this.createTime = createTime; }
public String getUpdateBy() { return updateBy; }
public void setUpdateBy(String updateBy) { this.updateBy = updateBy; }
public Date getUpdateTime() { return updateTime; }
public void setUpdateTime(Date updateTime) { this.updateTime = updateTime; }
}
@@ -0,0 +1,76 @@
package com.ruoyi.business.domain;
import java.math.BigDecimal;
import java.util.Date;
import com.fasterxml.jackson.annotation.JsonFormat;
import com.ruoyi.common.annotation.Excel;
import com.ruoyi.common.core.domain.BaseEntity;
/** 支持函对象 BizSupportLetter */
public class BizSupportLetter extends BaseEntity {
private static final long serialVersionUID = 1L;
/** annId */
private String annId;
/** title */
@Excel(name = "title")
private String title;
/** content */
@Excel(name = "content")
private String content;
/** unit_name */
@Excel(name = "unit_name")
private String unitName;
/** amount */
@Excel(name = "amount")
private BigDecimal amount;
/** issue_date */
@Excel(name = "issue_date")
@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
private Date issueDate;
/** create_by */
@Excel(name = "create_by")
private String createBy;
/** create_time */
@Excel(name = "create_time")
@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
private Date createTime;
/** update_by */
@Excel(name = "update_by")
private String updateBy;
/** update_time */
@Excel(name = "update_time")
@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
private Date updateTime;
/** 支持函ID */
private Long letterId;
/** 项目ID */
private Long projectId;
/** 项目编号 */
private String projectNo;
/** 支持函图片URL */
private String fileUrl;
/** 发布时间 */
private String publishTime;
/** 支持次数 */
private Integer supportCount;
public String getAnnId() { return annId; }
public void setAnnId(String annId) { this.annId = annId; }
public String getTitle() { return title; }
public void setTitle(String title) { this.title = title; }
public String getContent() { return content; }
public void setContent(String content) { this.content = content; }
public String getUnitName() { return unitName; }
public void setUnitName(String unitName) { this.unitName = unitName; }
public BigDecimal getAmount() { return amount; }
public void setAmount(BigDecimal amount) { this.amount = amount; }
public Date getIssueDate() { return issueDate; }
public void setIssueDate(Date issueDate) { this.issueDate = issueDate; }
public String getCreateBy() { return createBy; }
public void setCreateBy(String createBy) { this.createBy = createBy; }
public Date getCreateTime() { return createTime; }
public void setCreateTime(Date createTime) { this.createTime = createTime; }
public String getUpdateBy() { return updateBy; }
public void setUpdateBy(String updateBy) { this.updateBy = updateBy; }
public Date getUpdateTime() { return updateTime; }
public void setUpdateTime(Date updateTime) { this.updateTime = updateTime; }
}
@@ -0,0 +1,22 @@
package com.ruoyi.business.dto;
/**
* 短信验证码校验表单
* 参考 hwt-code SmsValidForm: phone + smsCode + uuid
*/
public class SmsValidForm {
private String phone;
private String smsCode;
private String uuid;
/** 是否免校验(预留, 默认 false) */
private boolean free;
public String getPhone() { return phone; }
public void setPhone(String phone) { this.phone = phone; }
public String getSmsCode() { return smsCode; }
public void setSmsCode(String smsCode) { this.smsCode = smsCode; }
public String getUuid() { return uuid; }
public void setUuid(String uuid) { this.uuid = uuid; }
public boolean isFree() { return free; }
public void setFree(boolean free) { this.free = free; }
}
@@ -0,0 +1,43 @@
package com.ruoyi.business.enums;
import java.util.HashMap;
import java.util.Map;
/**
* 投稿状态枚举
*
* 数据库存储英文 code (PENDING/APPROVED/REJECTED/DRAFT), 不存中文也不存数字.
* 字典映射集中在这里避免散落. 前端 utils/submissionStatus.js 同步这份字典.
*/
public enum SubmissionStatus
{
PENDING("PENDING", "待审核"),
APPROVED("APPROVED", "审核通过"),
REJECTED("REJECTED", "已退回"),
DRAFT("DRAFT", "待提交");
private final String code;
private final String label;
SubmissionStatus(String code, String label) {
this.code = code;
this.label = label;
}
public String getCode() { return code; }
public String getLabel() { return label; }
private static final Map<String, SubmissionStatus> BY_CODE = new HashMap<>();
static {
for (SubmissionStatus s : values()) BY_CODE.put(s.code, s);
}
public static SubmissionStatus fromCode(String val) {
if (val == null) return null;
return BY_CODE.get(val.trim().toUpperCase());
}
public static boolean isValid(String val) {
return fromCode(val) != null;
}
}
@@ -0,0 +1,22 @@
package com.ruoyi.business.mapper;
import java.util.List;
import com.ruoyi.business.domain.BizDepartment;
public interface BizDepartmentMapper
{
BizDepartment selectByPrimaryKey(Long deptId);
List<BizDepartment> selectList(BizDepartment entity);
/** 全部启用的字典 (给前端下拉用) */
List<BizDepartment> selectActive();
int insert(BizDepartment entity);
int updateByPrimaryKey(BizDepartment entity);
int deleteByPrimaryKey(Long deptId);
int deleteByPrimaryKeys(Long[] deptIds);
}
@@ -0,0 +1,22 @@
package com.ruoyi.business.mapper;
import java.util.List;
import com.ruoyi.business.domain.BizDoctorTitle;
public interface BizDoctorTitleMapper
{
BizDoctorTitle selectByPrimaryKey(Long titleId);
List<BizDoctorTitle> selectList(BizDoctorTitle entity);
/** 全部启用的字典 */
List<BizDoctorTitle> selectActive();
int insert(BizDoctorTitle entity);
int updateByPrimaryKey(BizDoctorTitle entity);
int deleteByPrimaryKey(Long titleId);
int deleteByPrimaryKeys(Long[] titleIds);
}
@@ -0,0 +1,16 @@
package com.ruoyi.business.mapper;
import java.util.List;
import com.ruoyi.business.domain.BizExecutionIntent;
/**
* 执行意向Mapper接口
*/
public interface BizExecutionIntentMapper
{
BizExecutionIntent selectByPrimaryKey(String intentId);
List<BizExecutionIntent> selectList(BizExecutionIntent entity);
int insert(BizExecutionIntent entity);
int updateByPrimaryKey(BizExecutionIntent entity);
int deleteByPrimaryKey(String intentId);
int deleteByPrimaryKeys(String[] intentIds);
}
@@ -0,0 +1,19 @@
package com.ruoyi.business.mapper;
import java.util.List;
import com.ruoyi.business.domain.BizExpert;
/**
* 专家Mapper接口
*/
public interface BizExpertMapper
{
BizExpert selectByPrimaryKey(String expertId);
BizExpert selectByUserId(Long userId);
List<BizExpert> selectList(BizExpert entity);
int insert(BizExpert entity);
int insertWithUserId(BizExpert entity);
int updateByPrimaryKey(BizExpert entity);
int updateByUserId(BizExpert entity);
int deleteByPrimaryKey(String expertId);
int deleteByPrimaryKeys(String[] expertIds);
}
@@ -0,0 +1,11 @@
package com.ruoyi.business.mapper;
import java.util.List;
import com.ruoyi.business.domain.BizInvitation;
public interface BizInvitationMapper {
BizInvitation selectByPrimaryKey(String annId);
List<BizInvitation> selectList(BizInvitation entity);
int insert(BizInvitation entity);
int updateByPrimaryKey(BizInvitation entity);
int deleteByPrimaryKey(String annId);
int deleteByPrimaryKeys(String[] annIds);
}
@@ -0,0 +1,16 @@
package com.ruoyi.business.mapper;
import java.util.List;
import com.ruoyi.business.domain.BizLaborVoucher;
/**
* 劳务凭证Mapper接口
*/
public interface BizLaborVoucherMapper
{
BizLaborVoucher selectByPrimaryKey(String voucherId);
List<BizLaborVoucher> selectList(BizLaborVoucher entity);
int insert(BizLaborVoucher entity);
int updateByPrimaryKey(BizLaborVoucher entity);
int deleteByPrimaryKey(String voucherId);
int deleteByPrimaryKeys(String[] voucherIds);
}
@@ -0,0 +1,16 @@
package com.ruoyi.business.mapper;
import java.util.List;
import com.ruoyi.business.domain.BizMeeting;
/**
* 会议Mapper接口
*/
public interface BizMeetingMapper
{
BizMeeting selectByPrimaryKey(String meetingId);
List<BizMeeting> selectList(BizMeeting entity);
int insert(BizMeeting entity);
int updateByPrimaryKey(BizMeeting entity);
int deleteByPrimaryKey(String meetingId);
int deleteByPrimaryKeys(String[] meetingIds);
}
@@ -0,0 +1,16 @@
package com.ruoyi.business.mapper;
import java.util.List;
import com.ruoyi.business.domain.BizMeetingSettlement;
/**
* 会议结算明细Mapper接口
*/
public interface BizMeetingSettlementMapper
{
BizMeetingSettlement selectByPrimaryKey(String id);
List<BizMeetingSettlement> selectList(BizMeetingSettlement entity);
int insert(BizMeetingSettlement entity);
int updateByPrimaryKey(BizMeetingSettlement entity);
int deleteByPrimaryKey(String id);
int deleteByPrimaryKeys(String[] ids);
}
@@ -0,0 +1,31 @@
package com.ruoyi.business.mapper;
import java.util.List;
import com.ruoyi.business.domain.BizMessage;
/**
* 个人消息Mapper接口
*/
public interface BizMessageMapper
{
BizMessage selectByPrimaryKey(Long msgId);
List<BizMessage> selectList(BizMessage entity);
/** 某人的未读 + 最近消息 (按时间倒序, limit 由调用方控制) */
List<BizMessage> selectMyRecent(BizMessage entity);
int insert(BizMessage entity);
int updateByPrimaryKey(BizMessage entity);
/** 单条标记已读 */
int markRead(BizMessage entity);
/** 全部标记已读 (按接收人) */
int markAllRead(Long receiverUserId);
int deleteByPrimaryKey(Long msgId);
int deleteByPrimaryKeys(Long[] msgIds);
}
@@ -0,0 +1,12 @@
package com.ruoyi.business.mapper;
import java.util.List;
import com.ruoyi.business.domain.BizOrg;
public interface BizOrgMapper {
BizOrg selectByPrimaryKey(Long orgId);
List<BizOrg> selectList(BizOrg entity);
int insert(BizOrg entity);
int updateByPrimaryKey(BizOrg entity);
int deleteByPrimaryKeys(Long[] orgIds);
}
@@ -0,0 +1,20 @@
package com.ruoyi.business.mapper;
import java.util.List;
import com.ruoyi.business.domain.BizPerson;
/**
* 人员Mapper接口
*/
public interface BizPersonMapper
{
BizPerson selectByPrimaryKey(String personId);
List<BizPerson> selectList(BizPerson entity);
/** sponsor 专属: 通过 sys_user.parent_user_id 过滤主账号归属, INNER JOIN 自然排除游离 person */
List<BizPerson> selectSponsorList(BizPerson entity);
int insert(BizPerson entity);
int updateByPrimaryKey(BizPerson entity);
int deleteByPrimaryKey(String personId);
int deleteByPrimaryKeys(String[] personIds);
/** 联动: person 逻辑删除后, 把对应 sys_user 子账号也逻辑删除 */
int softDeleteSysUserByPersonIds(String[] personIds);
}
@@ -0,0 +1,18 @@
package com.ruoyi.business.mapper;
import java.util.List;
import com.ruoyi.business.domain.BizProjectAssign;
/**
* 项目执行方分配Mapper接口
*/
public interface BizProjectAssignMapper
{
BizProjectAssign selectByPrimaryKey(String assignId);
List<BizProjectAssign> selectByProjectId(Long projectId);
List<BizProjectAssign> selectList(BizProjectAssign entity);
int insert(BizProjectAssign entity);
int updateByPrimaryKey(BizProjectAssign entity);
int deleteByPrimaryKey(String assignId);
int deleteByProjectId(Long projectId);
}
@@ -0,0 +1,18 @@
package com.ruoyi.business.mapper;
import java.util.List;
import com.ruoyi.business.domain.BizProject;
/**
* 项目Mapper接口
*/
public interface BizProjectMapper
{
BizProject selectByPrimaryKey(String projectId);
List<BizProject> selectList(BizProject entity);
/** sponsor 端专属: projectIds + LEFT JOIN 当前 login 用户评分, 用于评分回显 */
List<BizProject> selectSponsorList(BizProject entity);
int insert(BizProject entity);
int updateByPrimaryKey(BizProject entity);
int deleteByPrimaryKey(String projectId);
int deleteByPrimaryKeys(String[] projectIds);
}
@@ -0,0 +1,16 @@
package com.ruoyi.business.mapper;
import java.util.List;
import com.ruoyi.business.domain.BizProjectPlan;
/**
* 项目策划方案Mapper接口
*/
public interface BizProjectPlanMapper
{
BizProjectPlan selectByPrimaryKey(String planId);
List<BizProjectPlan> selectList(BizProjectPlan entity);
int insert(BizProjectPlan entity);
int updateByPrimaryKey(BizProjectPlan entity);
int deleteByPrimaryKey(String planId);
int deleteByPrimaryKeys(String[] planIds);
}
@@ -0,0 +1,18 @@
package com.ruoyi.business.mapper;
import java.util.List;
import com.ruoyi.business.domain.BizProjectRating;
/**
* 项目评分Mapper接口
*/
public interface BizProjectRatingMapper
{
BizProjectRating selectByPrimaryKey(String ratingId);
List<BizProjectRating> selectList(BizProjectRating entity);
int insert(BizProjectRating entity);
int updateByPrimaryKey(BizProjectRating entity);
/** 按 (project_id + rater_id + rater_role) upsert 评分 */
int upsertRating(BizProjectRating entity);
int deleteByPrimaryKey(String ratingId);
int deleteByPrimaryKeys(String[] ratingIds);
}
@@ -0,0 +1,11 @@
package com.ruoyi.business.mapper;
import java.util.List;
import com.ruoyi.business.domain.BizProjectSponsorAssign;
public interface BizProjectSponsorAssignMapper {
int insertAssign(BizProjectSponsorAssign entity);
List<BizProjectSponsorAssign> selectByProjectId(String projectId);
/** 按 project_id 全删 (赞助方分配: 先删后插策略) */
int deleteByProjectId(String projectId);
}
@@ -0,0 +1,15 @@
package com.ruoyi.business.mapper;
import java.util.List;
import com.ruoyi.business.domain.BizPublicity;
public interface BizPublicityMapper
{
BizPublicity selectByPrimaryKey(Long id);
List<BizPublicity> selectList(BizPublicity entity);
List<BizPublicity> selectByProjectId(Long projectId);
int insert(BizPublicity entity);
int updateByPrimaryKey(BizPublicity entity);
int deleteByPrimaryKey(Long id);
int deleteByPrimaryKeys(Long[] ids);
}
@@ -0,0 +1,16 @@
package com.ruoyi.business.mapper;
import java.util.List;
import com.ruoyi.business.domain.BizResource;
/**
* 资料Mapper接口
*/
public interface BizResourceMapper
{
BizResource selectByPrimaryKey(String resourceId);
List<BizResource> selectList(BizResource entity);
int insert(BizResource entity);
int updateByPrimaryKey(BizResource entity);
int deleteByPrimaryKey(String resourceId);
int deleteByPrimaryKeys(String[] resourceIds);
}
@@ -0,0 +1,16 @@
package com.ruoyi.business.mapper;
import java.util.List;
import com.ruoyi.business.domain.BizSubmission;
/**
* 投稿Mapper接口
*/
public interface BizSubmissionMapper
{
BizSubmission selectByPrimaryKey(String subId);
List<BizSubmission> selectList(BizSubmission entity);
int insert(BizSubmission entity);
int updateByPrimaryKey(BizSubmission entity);
int deleteByPrimaryKey(String subId);
int deleteByPrimaryKeys(String[] subIds);
}
@@ -0,0 +1,16 @@
package com.ruoyi.business.mapper;
import java.util.List;
import com.ruoyi.business.domain.BizSupportIntent;
/**
* 支持意向Mapper接口
*/
public interface BizSupportIntentMapper
{
BizSupportIntent selectByPrimaryKey(String intentId);
List<BizSupportIntent> selectList(BizSupportIntent entity);
int insert(BizSupportIntent entity);
int updateByPrimaryKey(BizSupportIntent entity);
int deleteByPrimaryKey(String intentId);
int deleteByPrimaryKeys(String[] intentIds);
}
@@ -0,0 +1,11 @@
package com.ruoyi.business.mapper;
import java.util.List;
import com.ruoyi.business.domain.BizSupportLetter;
public interface BizSupportLetterMapper {
BizSupportLetter selectByPrimaryKey(String annId);
List<BizSupportLetter> selectList(BizSupportLetter entity);
int insert(BizSupportLetter entity);
int updateByPrimaryKey(BizSupportLetter entity);
int deleteByPrimaryKey(String annId);
int deleteByPrimaryKeys(String[] annIds);
}
@@ -0,0 +1,21 @@
package com.ruoyi.business.service;
import java.util.List;
import com.ruoyi.business.domain.BizDepartment;
public interface IBizDepartmentService
{
BizDepartment getById(Long deptId);
List<BizDepartment> selectList(BizDepartment entity);
List<BizDepartment> selectActive();
int insert(BizDepartment entity);
int updateByPrimaryKey(BizDepartment entity);
int deleteByPrimaryKey(Long deptId);
int deleteByPrimaryKeys(Long[] deptIds);
}
@@ -0,0 +1,21 @@
package com.ruoyi.business.service;
import java.util.List;
import com.ruoyi.business.domain.BizDoctorTitle;
public interface IBizDoctorTitleService
{
BizDoctorTitle getById(Long titleId);
List<BizDoctorTitle> selectList(BizDoctorTitle entity);
List<BizDoctorTitle> selectActive();
int insert(BizDoctorTitle entity);
int updateByPrimaryKey(BizDoctorTitle entity);
int deleteByPrimaryKey(Long titleId);
int deleteByPrimaryKeys(Long[] titleIds);
}
@@ -0,0 +1,17 @@
package com.ruoyi.business.service;
import java.util.List;
import com.ruoyi.business.domain.BizExecutionIntent;
/**
* 执行意向Service接口
*/
public interface IBizExecutionIntentService
{
BizExecutionIntent getById(String intentId);
List<BizExecutionIntent> selectList(BizExecutionIntent entity);
int insert(BizExecutionIntent entity);
int updateByPrimaryKey(BizExecutionIntent entity);
int deleteByPrimaryKey(String intentId);
int deleteByPrimaryKeys(String[] intentId);
}
@@ -0,0 +1,20 @@
package com.ruoyi.business.service;
import java.util.List;
import com.ruoyi.business.domain.BizExpert;
/**
* 专家Service接口
*/
public interface IBizExpertService
{
BizExpert getById(String expertId);
BizExpert getByUserId(Long userId);
List<BizExpert> selectList(BizExpert entity);
int insert(BizExpert entity);
int updateByPrimaryKey(BizExpert entity);
/** 按 userId 更新或新建 (upsert) */
int updateProfileByUserId(BizExpert entity);
int deleteByPrimaryKey(String expertId);
int deleteByPrimaryKeys(String[] expertId);
}
@@ -0,0 +1,17 @@
package com.ruoyi.business.service;
import java.util.List;
import com.ruoyi.business.domain.BizInvitation;
/**
* 邀请函Service接口
*/
public interface IBizInvitationService
{
BizInvitation getById(String invitationId);
List<BizInvitation> selectList(BizInvitation entity);
int insert(BizInvitation entity);
int updateByPrimaryKey(BizInvitation entity);
int deleteByPrimaryKey(String invitationId);
int deleteByPrimaryKeys(String[] invitationId);
}
@@ -0,0 +1,17 @@
package com.ruoyi.business.service;
import java.util.List;
import com.ruoyi.business.domain.BizLaborVoucher;
/**
* 劳务凭证Service接口
*/
public interface IBizLaborVoucherService
{
BizLaborVoucher getById(String voucherId);
List<BizLaborVoucher> selectList(BizLaborVoucher entity);
int insert(BizLaborVoucher entity);
int updateByPrimaryKey(BizLaborVoucher entity);
int deleteByPrimaryKey(String voucherId);
int deleteByPrimaryKeys(String[] voucherId);
}
@@ -0,0 +1,17 @@
package com.ruoyi.business.service;
import java.util.List;
import com.ruoyi.business.domain.BizMeeting;
/**
* 会议Service接口
*/
public interface IBizMeetingService
{
BizMeeting getById(String meetingId);
List<BizMeeting> selectList(BizMeeting entity);
int insert(BizMeeting entity);
int updateByPrimaryKey(BizMeeting entity);
int deleteByPrimaryKey(String meetingId);
int deleteByPrimaryKeys(String[] meetingId);
}
@@ -0,0 +1,17 @@
package com.ruoyi.business.service;
import java.util.List;
import com.ruoyi.business.domain.BizMeetingSettlement;
/**
* 会议结算Service接口
*/
public interface IBizMeetingSettlementService
{
BizMeetingSettlement getById(String settlementId);
List<BizMeetingSettlement> selectList(BizMeetingSettlement entity);
int insert(BizMeetingSettlement entity);
int updateByPrimaryKey(BizMeetingSettlement entity);
int deleteByPrimaryKey(String settlementId);
int deleteByPrimaryKeys(String[] settlementId);
}
@@ -0,0 +1,31 @@
package com.ruoyi.business.service;
import java.util.List;
import com.ruoyi.business.domain.BizMessage;
/**
* 个人消息Service接口
*/
public interface IBizMessageService
{
BizMessage getById(Long msgId);
List<BizMessage> selectList(BizMessage entity);
/** 收件人的最近消息 (含未读) */
List<BizMessage> selectMyRecent(Long receiverUserId, Integer limit);
int insert(BizMessage entity);
int updateByPrimaryKey(BizMessage entity);
/** 收件人标记单条已读 (会校验归属) */
int markRead(Long msgId, Long receiverUserId);
/** 收件人标记全部已读 */
int markAllRead(Long receiverUserId);
int deleteByPrimaryKey(Long msgId);
int deleteByPrimaryKeys(Long[] msgIds);
}
@@ -0,0 +1,12 @@
package com.ruoyi.business.service;
import java.util.List;
import com.ruoyi.business.domain.BizOrg;
public interface IBizOrgService {
BizOrg getById(Long orgId);
List<BizOrg> selectList(BizOrg entity);
int insert(BizOrg entity);
int updateByPrimaryKey(BizOrg entity);
int deleteByPrimaryKeys(Long[] orgIds);
}
@@ -0,0 +1,24 @@
package com.ruoyi.business.service;
import java.util.List;
import com.ruoyi.business.domain.BizPerson;
import com.ruoyi.common.core.domain.entity.SysUser;
/**
* 人员Service接口
*
* insert(entity, mainUserId):
* - 新建 biz_person 同时创建 sys_user 子账号 (account_type='SUB', parent_user_id=mainUserId)
* - 返回新 sys_user 信息 (含 username + 明文 password, 仅创建时一次性回传给前端 toast 显示)
*/
public interface IBizPersonService
{
BizPerson getById(String personId);
List<BizPerson> selectList(BizPerson entity);
/** sponsor 专属: 走 BizPersonMapper.selectSponsorList, 用 sys_user.parent_user_id 做归属过滤 */
List<BizPerson> selectSponsorList(BizPerson entity);
SysUser insert(BizPerson entity, Long mainUserId);
int updateByPrimaryKey(BizPerson entity);
int deleteByPrimaryKey(String personId);
int deleteByPrimaryKeys(String[] personId);
}
@@ -0,0 +1,18 @@
package com.ruoyi.business.service;
import java.util.List;
import com.ruoyi.business.domain.BizProjectAssign;
/**
* 项目执行方分配 Service 接口
*/
public interface IBizProjectAssignService
{
BizProjectAssign getById(String assignId);
List<BizProjectAssign> selectByProjectId(Long projectId);
List<BizProjectAssign> selectList(BizProjectAssign entity);
int insert(BizProjectAssign entity);
int updateByPrimaryKey(BizProjectAssign entity);
int deleteByPrimaryKey(String assignId);
int deleteByProjectId(Long projectId);
}
@@ -0,0 +1,17 @@
package com.ruoyi.business.service;
import java.util.List;
import com.ruoyi.business.domain.BizProjectPlan;
/**
* 项目策划方案Service接口
*/
public interface IBizProjectPlanService
{
BizProjectPlan getById(String planId);
List<BizProjectPlan> selectList(BizProjectPlan entity);
int insert(BizProjectPlan entity);
int updateByPrimaryKey(BizProjectPlan entity);
int deleteByPrimaryKey(String planId);
int deleteByPrimaryKeys(String[] planId);
}
@@ -0,0 +1,19 @@
package com.ruoyi.business.service;
import java.util.List;
import com.ruoyi.business.domain.BizProjectRating;
/**
* 项目评分Service接口
*/
public interface IBizProjectRatingService
{
BizProjectRating getById(String ratingId);
List<BizProjectRating> selectList(BizProjectRating entity);
/** 按 projectId + raterId + raterRole upsert 评分 */
int upsertRating(BizProjectRating entity);
int insert(BizProjectRating entity);
int updateByPrimaryKey(BizProjectRating entity);
int deleteByPrimaryKey(String ratingId);
int deleteByPrimaryKeys(String[] ratingId);
}
@@ -0,0 +1,19 @@
package com.ruoyi.business.service;
import java.util.List;
import com.ruoyi.business.domain.BizProject;
/**
* 项目Service接口
*/
public interface IBizProjectService
{
BizProject getById(String projectId);
List<BizProject> selectList(BizProject entity);
/** sponsor 端专属: LEFT JOIN 当前 login 用户评分回显 */
List<BizProject> selectSponsorList(BizProject entity);
int insert(BizProject entity);
int updateByPrimaryKey(BizProject entity);
int deleteByPrimaryKey(String projectId);
int deleteByPrimaryKeys(String[] projectId);
}
@@ -0,0 +1,11 @@
package com.ruoyi.business.service;
import java.util.List;
import com.ruoyi.business.domain.BizProjectSponsorAssign;
public interface IBizProjectSponsorAssignService {
/** 赞助方分配 (策略: 按 project_id 先删后插, 一个项目只分配一个 sponsor) */
int insertAssign(BizProjectSponsorAssign entity);
List<BizProjectSponsorAssign> listByProjectId(String projectId);
int deleteByProjectId(String projectId);
}
@@ -0,0 +1,17 @@
package com.ruoyi.business.service;
import java.util.List;
import com.ruoyi.business.domain.BizPublicity;
/**
* 项目公告Service接口
*/
public interface IBizPublicityService
{
BizPublicity getById(Long id);
List<BizPublicity> selectList(BizPublicity entity);
int insert(BizPublicity entity);
int updateByPrimaryKey(BizPublicity entity);
int deleteByPrimaryKey(Long id);
int deleteByPrimaryKeys(Long[] ids);
}
@@ -0,0 +1,17 @@
package com.ruoyi.business.service;
import java.util.List;
import com.ruoyi.business.domain.BizResource;
/**
* 资源Service接口
*/
public interface IBizResourceService
{
BizResource getById(String resourceId);
List<BizResource> selectList(BizResource entity);
int insert(BizResource entity);
int updateByPrimaryKey(BizResource entity);
int deleteByPrimaryKey(String resourceId);
int deleteByPrimaryKeys(String[] resourceId);
}
@@ -0,0 +1,17 @@
package com.ruoyi.business.service;
import java.util.List;
import com.ruoyi.business.domain.BizSubmission;
/**
* 投稿Service接口
*/
public interface IBizSubmissionService
{
BizSubmission getById(String submissionId);
List<BizSubmission> selectList(BizSubmission entity);
int insert(BizSubmission entity);
int updateByPrimaryKey(BizSubmission entity);
int deleteByPrimaryKey(String submissionId);
int deleteByPrimaryKeys(String[] submissionId);
}
@@ -0,0 +1,17 @@
package com.ruoyi.business.service;
import java.util.List;
import com.ruoyi.business.domain.BizSupportIntent;
/**
* 支持意向Service接口
*/
public interface IBizSupportIntentService
{
BizSupportIntent getById(String intentId);
List<BizSupportIntent> selectList(BizSupportIntent entity);
int insert(BizSupportIntent entity);
int updateByPrimaryKey(BizSupportIntent entity);
int deleteByPrimaryKey(String intentId);
int deleteByPrimaryKeys(String[] intentId);
}
@@ -0,0 +1,17 @@
package com.ruoyi.business.service;
import java.util.List;
import com.ruoyi.business.domain.BizSupportLetter;
/**
* 支持函Service接口
*/
public interface IBizSupportLetterService
{
BizSupportLetter getById(String letterId);
List<BizSupportLetter> selectList(BizSupportLetter entity);
int insert(BizSupportLetter entity);
int updateByPrimaryKey(BizSupportLetter entity);
int deleteByPrimaryKey(String letterId);
int deleteByPrimaryKeys(String[] letterId);
}
@@ -0,0 +1,111 @@
package com.ruoyi.business.service;
import com.ruoyi.business.dto.SmsValidForm;
import com.ruoyi.business.sms.AliyunSmsSender;
import com.ruoyi.common.core.redis.RedisCache;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import java.util.UUID;
import java.util.concurrent.TimeUnit;
/**
* 短信验证码服务
*
* 参考 hwt-code SysSmsService 模式:
* - 验证码存 Redis 10 分钟 (SMSCODE:uuid -> phone+code)
* - dev 模式不真发短信, 仅 log + 返回固定 1234 (开发期用户测试用)
* - 同一 IP 1 分钟内不可重复发送 (SMS:ip)
*
* 当前 sys0808 不接入阿里云, dev 模式 = 固定码 1234, 实际部署时接入 aliyun dysmsapi
*/
@Service
public class SysSmsService {
private static final Logger log = LoggerFactory.getLogger(SysSmsService.class);
/** 用于验证SMS是否频繁发送, 1 分钟有效 */
public static final String SMS_PREFIX = "SMS:";
/** 用于验证手机号+验证码, 10 分钟有效 */
public static final String SMS_CAPTCHA_CODE_KEY = "SMSCODE:";
@Autowired
private RedisCache redisCache;
@Autowired
private AliyunSmsSender aliyunSmsSender;
/**
* dev 模式判断: 手机号以 "10" 开头视为开发测试 (固定码 1234), 其它走 aliyun 真发
* 该逻辑不依赖 application.yml 配置, 确保开发/生产两种手机号能并存
*/
private boolean isDev(String phone) {
return phone.startsWith("10");
}
/** 发送短信验证码, 返回 uuid (前端提交验证时回传) */
public String sendCode(String phone) {
if (phone == null || phone.trim().isEmpty()) {
throw new RuntimeException("手机号码不能为空");
}
if (phone.startsWith(" ")) {
throw new RuntimeException("手机号不能以空格开头");
}
String code;
if (isDev(phone)) {
// dev 模式 (10 开头): 固定码 1234 (供内部测试)
code = "1234";
log.info("[SMS][DEV][phone-prefix=10] 向 {} 发送验证码: {}", phone, code);
} else {
// prod 模式: aliyun 真发
code = generateCode(4);
log.info("[SMS][PROD] 向 {} 发送验证码: {}", phone, code);
boolean ok = aliyunSmsSender.sendCode(phone, code);
if (!ok) {
throw new RuntimeException("短信发送失败, 请稍后再试");
}
}
// 存 redis: SMSCODE:<uuid> -> phone+code, 10 分钟有效
String uuid = UUID.randomUUID().toString();
redisCache.setCacheObject(SMS_CAPTCHA_CODE_KEY + uuid, phone + code, 10, TimeUnit.MINUTES);
log.info("[SMS] 已存入 redis, uuid={}, ttl=10min", uuid);
return uuid;
}
/**
* 生成 4 位数字验证码
*/
private String generateCode(int length) {
StringBuilder sb = new StringBuilder();
java.util.Random random = new java.util.Random();
for (int i = 0; i < length; i++) {
sb.append(random.nextInt(10));
}
return sb.toString();
}
/**
* 校验验证码, 失败抛出 RuntimeException
*/
public void verifyCode(SmsValidForm form) {
if (form == null || form.getPhone() == null || form.getSmsCode() == null || form.getUuid() == null) {
throw new RuntimeException("校验参数不完整");
}
String key = SMS_CAPTCHA_CODE_KEY + form.getUuid();
String value = redisCache.getCacheObject(key);
if (value == null) {
if (form.isFree()) return;
throw new RuntimeException("验证码已过期");
}
if (!value.equals(form.getPhone() + form.getSmsCode())) {
throw new RuntimeException("验证码错误");
}
// 校验成功后删除 (防止重用)
redisCache.deleteObject(key);
}
}
@@ -0,0 +1,43 @@
package com.ruoyi.business.service.impl;
import java.util.List;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import com.ruoyi.business.domain.BizDepartment;
import com.ruoyi.business.mapper.BizDepartmentMapper;
import com.ruoyi.business.service.IBizDepartmentService;
@Service
public class BizDepartmentServiceImpl implements IBizDepartmentService
{
@Autowired
private BizDepartmentMapper bizDepartmentMapper;
@Override
public BizDepartment getById(Long deptId)
{ return bizDepartmentMapper.selectByPrimaryKey(deptId); }
@Override
public List<BizDepartment> selectList(BizDepartment entity)
{ return bizDepartmentMapper.selectList(entity); }
@Override
public List<BizDepartment> selectActive()
{ return bizDepartmentMapper.selectActive(); }
@Override
public int insert(BizDepartment entity)
{ return bizDepartmentMapper.insert(entity); }
@Override
public int updateByPrimaryKey(BizDepartment entity)
{ return bizDepartmentMapper.updateByPrimaryKey(entity); }
@Override
public int deleteByPrimaryKey(Long deptId)
{ return bizDepartmentMapper.deleteByPrimaryKey(deptId); }
@Override
public int deleteByPrimaryKeys(Long[] deptIds)
{ return bizDepartmentMapper.deleteByPrimaryKeys(deptIds); }
}
@@ -0,0 +1,43 @@
package com.ruoyi.business.service.impl;
import java.util.List;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import com.ruoyi.business.domain.BizDoctorTitle;
import com.ruoyi.business.mapper.BizDoctorTitleMapper;
import com.ruoyi.business.service.IBizDoctorTitleService;
@Service
public class BizDoctorTitleServiceImpl implements IBizDoctorTitleService
{
@Autowired
private BizDoctorTitleMapper bizDoctorTitleMapper;
@Override
public BizDoctorTitle getById(Long titleId)
{ return bizDoctorTitleMapper.selectByPrimaryKey(titleId); }
@Override
public List<BizDoctorTitle> selectList(BizDoctorTitle entity)
{ return bizDoctorTitleMapper.selectList(entity); }
@Override
public List<BizDoctorTitle> selectActive()
{ return bizDoctorTitleMapper.selectActive(); }
@Override
public int insert(BizDoctorTitle entity)
{ return bizDoctorTitleMapper.insert(entity); }
@Override
public int updateByPrimaryKey(BizDoctorTitle entity)
{ return bizDoctorTitleMapper.updateByPrimaryKey(entity); }
@Override
public int deleteByPrimaryKey(Long titleId)
{ return bizDoctorTitleMapper.deleteByPrimaryKey(titleId); }
@Override
public int deleteByPrimaryKeys(Long[] titleIds)
{ return bizDoctorTitleMapper.deleteByPrimaryKeys(titleIds); }
}
@@ -0,0 +1,33 @@
package com.ruoyi.business.service.impl;
import java.util.List;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import com.ruoyi.business.domain.BizExecutionIntent;
import com.ruoyi.business.mapper.BizExecutionIntentMapper;
import com.ruoyi.business.service.IBizExecutionIntentService;
@Service
public class BizExecutionIntentServiceImpl implements IBizExecutionIntentService
{
@Autowired
private BizExecutionIntentMapper bizExecutionIntentMapper;
@Override
public BizExecutionIntent getById(String intentId)
{ return bizExecutionIntentMapper.selectByPrimaryKey(intentId); }
@Override
public List<BizExecutionIntent> selectList(BizExecutionIntent entity)
{ return bizExecutionIntentMapper.selectList(entity); }
@Override
public int insert(BizExecutionIntent entity) { com.ruoyi.common.utils.id.SnowflakeId.injectIfEmpty(entity, "intentId"); return bizExecutionIntentMapper.insert(entity); }
@Override
public int updateByPrimaryKey(BizExecutionIntent entity)
{ return bizExecutionIntentMapper.updateByPrimaryKey(entity); }
@Override
public int deleteByPrimaryKey(String intentId)
{ return bizExecutionIntentMapper.deleteByPrimaryKey(intentId); }
@Override
public int deleteByPrimaryKeys(String[] intentId)
{ return bizExecutionIntentMapper.deleteByPrimaryKeys(intentId); }
}
@@ -0,0 +1,45 @@
package com.ruoyi.business.service.impl;
import java.util.List;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import com.ruoyi.business.domain.BizExpert;
import com.ruoyi.business.mapper.BizExpertMapper;
import com.ruoyi.business.service.IBizExpertService;
@Service
public class BizExpertServiceImpl implements IBizExpertService
{
@Autowired
private BizExpertMapper bizExpertMapper;
@Override
public BizExpert getById(String expertId)
{ return bizExpertMapper.selectByPrimaryKey(expertId); }
@Override
public BizExpert getByUserId(Long userId)
{ return bizExpertMapper.selectByUserId(userId); }
@Override
public List<BizExpert> selectList(BizExpert entity)
{ return bizExpertMapper.selectList(entity); }
@Override
public int insert(BizExpert entity) { com.ruoyi.common.utils.id.SnowflakeId.injectIfEmpty(entity, "expertId"); return bizExpertMapper.insert(entity); }
@Override
public int updateByPrimaryKey(BizExpert entity)
{ return bizExpertMapper.updateByPrimaryKey(entity); }
@Override
public int updateProfileByUserId(BizExpert entity)
{
BizExpert existed = bizExpertMapper.selectByUserId(entity.getUserId());
if (existed == null) {
return bizExpertMapper.insertWithUserId(entity);
}
return bizExpertMapper.updateByUserId(entity);
}
@Override
public int deleteByPrimaryKey(String expertId)
{ return bizExpertMapper.deleteByPrimaryKey(expertId); }
@Override
public int deleteByPrimaryKeys(String[] expertId)
{ return bizExpertMapper.deleteByPrimaryKeys(expertId); }
}
@@ -0,0 +1,33 @@
package com.ruoyi.business.service.impl;
import java.util.List;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import com.ruoyi.business.domain.BizInvitation;
import com.ruoyi.business.mapper.BizInvitationMapper;
import com.ruoyi.business.service.IBizInvitationService;
@Service
public class BizInvitationServiceImpl implements IBizInvitationService
{
@Autowired
private BizInvitationMapper bizInvitationMapper;
@Override
public BizInvitation getById(String invitationId)
{ return bizInvitationMapper.selectByPrimaryKey(invitationId); }
@Override
public List<BizInvitation> selectList(BizInvitation entity)
{ return bizInvitationMapper.selectList(entity); }
@Override
public int insert(BizInvitation entity) { com.ruoyi.common.utils.id.SnowflakeId.injectIfEmpty(entity, "annId"); return bizInvitationMapper.insert(entity); }
@Override
public int updateByPrimaryKey(BizInvitation entity)
{ return bizInvitationMapper.updateByPrimaryKey(entity); }
@Override
public int deleteByPrimaryKey(String invitationId)
{ return bizInvitationMapper.deleteByPrimaryKey(invitationId); }
@Override
public int deleteByPrimaryKeys(String[] invitationId)
{ return bizInvitationMapper.deleteByPrimaryKeys(invitationId); }
}
@@ -0,0 +1,33 @@
package com.ruoyi.business.service.impl;
import java.util.List;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import com.ruoyi.business.domain.BizLaborVoucher;
import com.ruoyi.business.mapper.BizLaborVoucherMapper;
import com.ruoyi.business.service.IBizLaborVoucherService;
@Service
public class BizLaborVoucherServiceImpl implements IBizLaborVoucherService
{
@Autowired
private BizLaborVoucherMapper bizLaborVoucherMapper;
@Override
public BizLaborVoucher getById(String voucherId)
{ return bizLaborVoucherMapper.selectByPrimaryKey(voucherId); }
@Override
public List<BizLaborVoucher> selectList(BizLaborVoucher entity)
{ return bizLaborVoucherMapper.selectList(entity); }
@Override
public int insert(BizLaborVoucher entity) { com.ruoyi.common.utils.id.SnowflakeId.injectIfEmpty(entity, "voucherId"); return bizLaborVoucherMapper.insert(entity); }
@Override
public int updateByPrimaryKey(BizLaborVoucher entity)
{ return bizLaborVoucherMapper.updateByPrimaryKey(entity); }
@Override
public int deleteByPrimaryKey(String voucherId)
{ return bizLaborVoucherMapper.deleteByPrimaryKey(voucherId); }
@Override
public int deleteByPrimaryKeys(String[] voucherId)
{ return bizLaborVoucherMapper.deleteByPrimaryKeys(voucherId); }
}
@@ -0,0 +1,33 @@
package com.ruoyi.business.service.impl;
import java.util.List;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import com.ruoyi.business.domain.BizMeeting;
import com.ruoyi.business.mapper.BizMeetingMapper;
import com.ruoyi.business.service.IBizMeetingService;
@Service
public class BizMeetingServiceImpl implements IBizMeetingService
{
@Autowired
private BizMeetingMapper bizMeetingMapper;
@Override
public BizMeeting getById(String meetingId)
{ return bizMeetingMapper.selectByPrimaryKey(meetingId); }
@Override
public List<BizMeeting> selectList(BizMeeting entity)
{ return bizMeetingMapper.selectList(entity); }
@Override
public int insert(BizMeeting entity) { com.ruoyi.common.utils.id.SnowflakeId.injectIfEmpty(entity, "meetingId"); return bizMeetingMapper.insert(entity); }
@Override
public int updateByPrimaryKey(BizMeeting entity)
{ return bizMeetingMapper.updateByPrimaryKey(entity); }
@Override
public int deleteByPrimaryKey(String meetingId)
{ return bizMeetingMapper.deleteByPrimaryKey(meetingId); }
@Override
public int deleteByPrimaryKeys(String[] meetingId)
{ return bizMeetingMapper.deleteByPrimaryKeys(meetingId); }
}

Some files were not shown because too many files have changed in this diff Show More