diff --git a/README.md b/README.md
index ebcdd4470..97b538f8c 100644
--- a/README.md
+++ b/README.md
@@ -120,6 +120,7 @@
### 其他
+
* 同步升级 RuoYi-Vue
* GitHub 地址 [RuoYi-Vue-Plus-github](https://github.com/dromara/RuoYi-Vue-Plus)
* 单模块 分支 [RuoYi-Vue-Plus-fast](https://gitee.com/dromara/RuoYi-Vue-Plus/tree/fast/)
diff --git a/pom.xml b/pom.xml
index 6a62ac241..2e333e2cc 100644
--- a/pom.xml
+++ b/pom.xml
@@ -321,6 +321,12 @@
${ruoyi-vue-plus.version}
+
+ org.apache.commons
+ commons-text
+ 1.9
+
+
com.ruoyi
@@ -328,6 +334,13 @@
${ruoyi-vue-plus.version}
+
+
+ com.ruoyi
+ ruoyi-work
+ ${ruoyi-vue-plus.version}
+
+
@@ -342,6 +355,7 @@
ruoyi-extend
ruoyi-oss
ruoyi-sms
+ ruoyi-work
pom
diff --git a/ruoyi-admin/pom.xml b/ruoyi-admin/pom.xml
index 968969d2a..43f64f7f3 100644
--- a/ruoyi-admin/pom.xml
+++ b/ruoyi-admin/pom.xml
@@ -78,6 +78,11 @@
ruoyi-demo
+
+ com.ruoyi
+ ruoyi-work
+
+
org.springframework.boot
spring-boot-starter-test
diff --git a/ruoyi-admin/src/main/java/com/ruoyi/web/controller/house/HousesReviewController.java b/ruoyi-admin/src/main/java/com/ruoyi/web/controller/house/HousesReviewController.java
new file mode 100644
index 000000000..ebebfe4eb
--- /dev/null
+++ b/ruoyi-admin/src/main/java/com/ruoyi/web/controller/house/HousesReviewController.java
@@ -0,0 +1,183 @@
+package com.ruoyi.web.controller.house;
+
+import cn.dev33.satoken.annotation.SaCheckPermission;
+import cn.hutool.core.bean.BeanUtil;
+import cn.hutool.core.util.ObjectUtil;
+import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
+import com.ruoyi.common.annotation.Log;
+import com.ruoyi.common.annotation.RepeatSubmit;
+import com.ruoyi.common.core.controller.BaseController;
+import com.ruoyi.common.core.domain.PageQuery;
+import com.ruoyi.common.core.domain.R;
+import com.ruoyi.common.core.page.TableDataInfo;
+import com.ruoyi.common.core.validate.AddGroup;
+import com.ruoyi.common.core.validate.EditGroup;
+import com.ruoyi.common.enums.BusinessType;
+import com.ruoyi.common.excel.ExcelResult;
+import com.ruoyi.common.utils.poi.ExcelUtil;
+import com.ruoyi.system.domain.BuyHouses;
+import com.ruoyi.system.domain.HousesReview;
+import com.ruoyi.system.domain.bo.HousesReviewBo;
+import com.ruoyi.system.domain.vo.HousesReviewVo;
+import com.ruoyi.system.mapper.BuyHousesMapper;
+import com.ruoyi.system.service.IHousesReviewService;
+import lombok.RequiredArgsConstructor;
+import org.springframework.http.MediaType;
+import org.springframework.validation.annotation.Validated;
+import org.springframework.web.bind.annotation.*;
+import org.springframework.web.multipart.MultipartFile;
+
+import javax.servlet.http.HttpServletResponse;
+import javax.validation.constraints.NotEmpty;
+import javax.validation.constraints.NotNull;
+import java.util.ArrayList;
+import java.util.Arrays;
+import java.util.List;
+import java.util.stream.Collectors;
+
+/**
+ * 购房复审登记
+ *
+ * @author ruoyi
+ * @date 2023-03-08
+ */
+@Validated
+@RequiredArgsConstructor
+@RestController
+@RequestMapping("/house")
+public class HousesReviewController extends BaseController {
+
+ private final IHousesReviewService iHousesReviewService;
+
+ private final BuyHousesMapper buyHousesMapper;
+
+
+
+ /**
+ * 查询购房复审登记列表
+ */
+ @SaCheckPermission("system:review:list")
+ @GetMapping("/registrationManagement/list")
+ public TableDataInfo list(HousesReviewBo bo, PageQuery pageQuery) {
+ return iHousesReviewService.queryPageList(bo, pageQuery);
+ }
+
+ /**
+ * 导出购房复审登记列表
+ */
+ @SaCheckPermission("system:review:export")
+ @Log(title = "购房复审登记", businessType = BusinessType.EXPORT)
+ @PostMapping("/registrationManagement/export")
+ public void export(HousesReviewBo bo, HttpServletResponse response) {
+ List list = iHousesReviewService.queryList(bo);
+ ExcelUtil.exportExcel(list, "购房复审登记", HousesReviewVo.class, response);
+ }
+
+ /**
+ * 获取购房复审登记详细信息
+ *
+ * @param id 主键
+ */
+ @SaCheckPermission("system:review:query")
+ @GetMapping("/registrationManagement/{id}")
+ public R getInfo(@NotNull(message = "主键不能为空")
+ @PathVariable Long id) {
+ return R.ok(iHousesReviewService.queryById(id));
+ }
+
+ /**
+ * 新增购房复审登记
+ */
+ @SaCheckPermission("system:review:add")
+ @Log(title = "购房复审登记", businessType = BusinessType.INSERT)
+ @RepeatSubmit()
+ @PostMapping("/registrationManagement")
+ public R add(@Validated(AddGroup.class) @RequestBody HousesReviewBo bo) {
+ return toAjax(iHousesReviewService.insertByBo(bo));
+ }
+
+ /**
+ * 修改购房复审登记
+ */
+ @SaCheckPermission("system:review:edit")
+ @Log(title = "购房复审登记", businessType = BusinessType.UPDATE)
+ @RepeatSubmit()
+ @PutMapping("/registrationManagement")
+ public R edit(@Validated(EditGroup.class) @RequestBody HousesReviewBo bo) {
+ return toAjax(iHousesReviewService.updateByBo(bo));
+ }
+
+ /**
+ * 删除购房复审登记
+ * @param ids 主键串
+ */
+ @SaCheckPermission("system:review:remove")
+ @Log(title = "购房复审登记", businessType = BusinessType.DELETE)
+ @DeleteMapping("/registrationManagement/{ids}")
+ public R remove(@NotEmpty(message = "主键不能为空")
+ @PathVariable Long[] ids) {
+ return toAjax(iHousesReviewService.deleteWithValidByIds(Arrays.asList(ids), true));
+ }
+
+ /**
+ * 导入
+ * @param file
+ * @return
+ * @throws Exception
+ */
+ @Log(title = "购房复审导入", businessType = BusinessType.IMPORT)
+ @SaCheckPermission("system:review:import")
+ @PostMapping(value = "/review/importData", consumes = MediaType.MULTIPART_FORM_DATA_VALUE)
+ public R importData(@RequestPart("file") MultipartFile file) throws Exception {
+ ExcelResult result = ExcelUtil.importExcel(file.getInputStream(), HousesReviewVo.class, true);
+ List volist = result.getList();
+ List list = BeanUtil.copyToList(volist, HousesReview.class);
+ //先获取到导入数据的身份证去购房一期数据库去查
+ //过滤出导入表中的身份证号码
+ List collect = list.stream().filter( e ->ObjectUtil.isNotEmpty(e.getCard())).map(HousesReview::getCard).collect(Collectors.toList());
+ if (collect.size()>0 && list.size()>0) {
+ LambdaQueryWrapper queryWrapper = new LambdaQueryWrapper().in(BuyHouses::getCardId, collect);
+ //查询出导入数据中的身份证有那些是属于区级人才的
+ List collect1 = buyHousesMapper.selectList(queryWrapper).stream().map(BuyHouses::getCardId).collect(Collectors.toList());
+ for (HousesReview housesReview : list) {
+ if ( collect1.size() > 0 && collect1.contains(housesReview.getCard()) ) {
+ housesReview.setSourceBy("1");
+ } else {
+ housesReview.setSourceBy("2");
+ }
+ }
+ }
+ iHousesReviewService.saveBatch(list);
+ return R.ok(result.getAnalysis());
+ }
+
+ /**
+ * 获取导入模板
+ */
+ @Log(title = "获取导入模板", businessType = BusinessType.IMPORT)
+ @PostMapping("/review/importTemplate")
+ public void importTemplate(HttpServletResponse response) {
+ ExcelUtil.exportExcel(new ArrayList<>(), "用户数据", HousesReviewVo.class, response);
+ }
+
+ /**
+ * 获取申报材料
+ */
+ @Log(title = "获取申报材料",businessType = BusinessType.OTHER)
+ @PostMapping("/review/material")
+ public R> getMaterialInfo(@RequestBody HousesReviewBo bo){
+ return iHousesReviewService.getMaterialInfo(bo);
+ }
+
+ /**
+ * 获取审核材料
+ */
+ @Log(title = "审核时返回当前人材料",businessType = BusinessType.OTHER)
+ @GetMapping("/getMaterial/{id}")
+ public R> getMaterialByBusinessId(@PathVariable(value = "id") Long id){
+ return iHousesReviewService.getMaterialByBusinessId(id);
+ }
+
+
+
+}
diff --git a/ruoyi-admin/src/main/resources/application-dev.yml b/ruoyi-admin/src/main/resources/application-dev.yml
index 32123a764..260a693a6 100644
--- a/ruoyi-admin/src/main/resources/application-dev.yml
+++ b/ruoyi-admin/src/main/resources/application-dev.yml
@@ -1,7 +1,7 @@
--- # 监控中心配置
spring.boot.admin.client:
# 增加客户端开关
- enabled: true
+ enabled: false
url: http://localhost:9090/admin
instance:
service-host-type: IP
@@ -11,7 +11,7 @@ spring.boot.admin.client:
--- # xxl-job 配置
xxl.job:
# 执行器开关
- enabled: true
+ enabled: false
# 调度中心地址:如调度中心集群部署存在多个地址则用逗号分隔。
admin-addresses: http://localhost:9100/xxl-job-admin
# 执行器通讯TOKEN:非空时启用
@@ -49,9 +49,9 @@ spring:
driverClassName: com.mysql.cj.jdbc.Driver
# jdbc 所有参数配置参考 https://lionli.blog.csdn.net/article/details/122018562
# rewriteBatchedStatements=true 批处理优化 大幅提升批量插入更新删除性能(对数据库有性能损耗 使用批量操作应考虑性能问题)
- url: jdbc:mysql://localhost:3306/ry-vue?useUnicode=true&characterEncoding=utf8&zeroDateTimeBehavior=convertToNull&useSSL=true&serverTimezone=GMT%2B8&autoReconnect=true&rewriteBatchedStatements=true
+ url: jdbc:mysql://182.150.40.133:3309/ry-vue-house?useUnicode=true&characterEncoding=utf8&zeroDateTimeBehavior=convertToNull&useSSL=true&serverTimezone=GMT%2B8&autoReconnect=true&rewriteBatchedStatements=true
username: root
- password: root
+ password: 1234Qwer@
# 从库数据源
slave:
lazy: true
@@ -102,13 +102,13 @@ spring:
spring:
redis:
# 地址
- host: localhost
+ host: 119.96.86.131
# 端口,默认为6379
port: 6379
# 数据库索引
database: 0
# 密码(如没有密码请注释掉)
- # password:
+ password: 123456
# 连接超时时间
timeout: 10s
# 是否开启ssl
diff --git a/ruoyi-admin/src/main/resources/application.yml b/ruoyi-admin/src/main/resources/application.yml
index 6f229d87f..77b00475d 100644
--- a/ruoyi-admin/src/main/resources/application.yml
+++ b/ruoyi-admin/src/main/resources/application.yml
@@ -5,7 +5,7 @@ ruoyi:
# 版本
version: ${ruoyi-vue-plus.version}
# 版权年份
- copyrightYear: 2022
+ copyrightYear: 2023
# 实例演示开关
demoEnabled: true
# 获取ip地址开关
diff --git a/ruoyi-admin/src/test/java/com/ruoyi/test/DemoUnitTest.java b/ruoyi-admin/src/test/java/com/ruoyi/test/DemoUnitTest.java
index a40fd8275..fbabcd682 100644
--- a/ruoyi-admin/src/test/java/com/ruoyi/test/DemoUnitTest.java
+++ b/ruoyi-admin/src/test/java/com/ruoyi/test/DemoUnitTest.java
@@ -1,11 +1,45 @@
package com.ruoyi.test;
+import cn.hutool.core.bean.BeanUtil;
+import cn.hutool.core.util.ObjectUtil;
+import cn.hutool.crypto.SecureUtil;
+import cn.hutool.http.HttpUtil;
+import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.ruoyi.common.config.RuoYiConfig;
+import com.ruoyi.common.constant.Constants;
+import com.ruoyi.common.core.domain.PageQuery;
+import com.ruoyi.common.helper.DataBaseHelper;
+import com.ruoyi.common.utils.spring.SpringUtils;
+import com.ruoyi.system.domain.BuyHouses;
+import com.ruoyi.system.domain.MaterialTalents;
+import com.ruoyi.system.domain.vo.HousesReviewVo;
+import com.ruoyi.system.domain.vo.MaterialTalentsVo;
+import com.ruoyi.system.mapper.BuyHousesMapper;
+import com.ruoyi.system.mapper.HousesReviewMapper;
+import com.ruoyi.system.mapper.MaterialTalentsMapper;
+import com.ruoyi.system.service.impl.SysConfigServiceImpl;
+import com.ruoyi.work.domain.ActProcess;
+import com.ruoyi.work.domain.HisProcess;
+import com.ruoyi.work.domain.TProcess;
+import com.ruoyi.work.domain.vo.ActProcessVo;
+import com.ruoyi.work.domain.vo.ProcessVo;
+import com.ruoyi.work.dto.BusinessDTO;
+import com.ruoyi.work.mapper.ActProcessMapper;
+import com.ruoyi.work.mapper.HisProcessMapper;
+import com.ruoyi.work.mapper.ProcessMapper;
+import com.ruoyi.work.service.impl.ProcessServiceImpl;
+import com.ruoyi.work.utils.WorkComplyUtils;
+import org.apache.commons.text.CaseUtils;
import org.junit.jupiter.api.*;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.context.SpringBootTest;
+import org.springframework.util.ReflectionUtils;
+import java.lang.reflect.Method;
+import java.util.*;
import java.util.concurrent.TimeUnit;
+import java.util.stream.Collectors;
/**
* 单元测试案例
@@ -19,6 +53,31 @@ public class DemoUnitTest {
@Autowired
private RuoYiConfig ruoYiConfig;
+ @Autowired
+ ProcessServiceImpl processService;
+
+ @Autowired
+ private BuyHousesMapper buyHousesMapper;
+
+ @Autowired
+ HisProcessMapper hisProcessMapper;
+
+ @Autowired
+ private ProcessMapper processMapper;
+
+ @Autowired
+ private ActProcessMapper actProcessMapper;
+
+ @Autowired
+ private HousesReviewMapper housesReviewMapper;
+
+ @Autowired
+ private MaterialTalentsMapper materialTalentsMapper;
+
+ @Autowired
+ private SysConfigServiceImpl sysConfigService;
+
+
@DisplayName("测试 @SpringBootTest @Test @DisplayName 注解")
@Test
public void testTest() {
@@ -67,4 +126,182 @@ public class DemoUnitTest {
System.out.println("@AfterAll ==================");
}
+ @Test
+ public void test001() throws Exception {
+ //方法名
+ String methodName = "queryById";
+ //类名
+ Object beanName = SpringUtils.getBean("processServiceImpl");
+ //值
+ String value ="1";
+ Class aClass = Long.valueOf(value).getClass();
+ System.out.println("stringClass = " + aClass);
+ Object params;
+ //将数值转类型
+ params=(Long.valueOf(value));
+ //调用方法
+ Method method = ReflectionUtils.findMethod(beanName.getClass(), methodName, aClass);
+ Object obj = ReflectionUtils.invokeMethod(method, beanName,params);
+ System.out.println("obj = " + obj.toString());
+ }
+
+
+ @Test
+ public void test002(){
+ ProcessVo processVo = new ProcessVo();
+ processVo.setProcessKey("apply_house");
+ processVo.setStep("1");
+ BuyHouses buyHouses = buyHousesMapper.selectById("2");
+ Map map = BeanUtil.beanToMap(buyHouses);
+ processVo.setParams(map);
+ processVo.setBusinessId("2");
+ processVo.setStartUser(buyHouses.getUserName());
+ WorkComplyUtils.comply(processVo);
+ }
+
+ @Test
+ public void test003(){
+ HisProcess hisProcess = new HisProcess();
+ hisProcess.setStatus("2");
+ BuyHouses buyHouses = buyHousesMapper.selectById("2");
+ Map map = BeanUtil.beanToMap(buyHouses);
+ hisProcess.setBusinessId(buyHouses.getId().toString());
+ hisProcess.setParams(map);
+ hisProcess.setProcessKey(buyHouses.getProcessKey());
+ hisProcess.setStartUser(buyHouses.getUserName());
+ String s = WorkComplyUtils.batchDeleted(hisProcess);
+ System.out.println("s = " + s);
+ }
+
+ @Test
+ public void test004(){
+ BusinessDTO businessDTO = new BusinessDTO();
+ BuyHouses buyHouses = buyHousesMapper.selectById("2");
+ Map map = BeanUtil.beanToMap(buyHouses);
+ businessDTO.setParams(map);
+ businessDTO.setBusinessId(buyHouses.getId().toString());
+ WorkComplyUtils.getStep(businessDTO);
+ }
+
+ @Test
+ public void test005(){
+ String s = "1";
+ LambdaQueryWrapper wrapper = new LambdaQueryWrapper<>();
+ wrapper.apply(ObjectUtil.isNotEmpty(s),"FIND_IN_SET('"+s+"',cc)");
+ List tProcesses = processMapper.selectList(wrapper);
+ List collect = tProcesses.stream().map(TProcess::getId).collect(Collectors.toList());
+ LambdaQueryWrapper lqw = new LambdaQueryWrapper<>();
+ lqw.in(ActProcess::getProcessId,collect);
+ List actProcessVoList = actProcessMapper.selectVoList(lqw);
+ System.out.println("actProcessVoList = " + actProcessVoList);
+ System.out.println("collect = " + collect);
+ PageQuery pageQuery = new PageQuery();
+ pageQuery.setPageNum(1);
+ pageQuery.setPageSize(10);
+ HisProcess hisProcess = new HisProcess();
+ hisProcess.setUserId("2");
+ hisProcess.setDeptId("103");
+ hisProcess.setRoleId("1");
+ Page hisProcessPage = hisProcessMapper.selectVoListPage(pageQuery.build(), hisProcess);
+ List records = hisProcessPage.getRecords();
+ System.out.println("records = " + records);
+ long total = hisProcessPage.getTotal();
+ System.out.println("total = " + total);
+ long size = hisProcessPage.getSize();
+ System.out.println("size = " + size);
+ }
+
+ @Test
+ public void test006(){
+ //先获取出顶级目录
+ HousesReviewVo housesReviewVo = housesReviewMapper.selectVoById("1633346490522927106");
+ Map map = BeanUtil.beanToMap(housesReviewVo);
+ Set keys = map.keySet();
+ LambdaQueryWrapper eq = new LambdaQueryWrapper()
+ .eq(MaterialTalents::getTalentsValue, map.get("processKey"));
+ MaterialTalentsVo materialTalentsVo = materialTalentsMapper.selectVoOne(eq);
+ //根据id获取关于他下面的所有子集
+ LambdaQueryWrapper wrapper = new LambdaQueryWrapper()
+ .apply(DataBaseHelper.findInSet(materialTalentsVo.getId(), "selected"));
+ List materialTalents = materialTalentsMapper.selectList(wrapper);
+ ArrayList list = new ArrayList<>();
+ for (MaterialTalents materialTalent : materialTalents) {
+ if (keys.contains(materialTalent.getTalentsValue())){
+ //获取当前目录下的数据
+ Object value = map.get(materialTalent.getTalentsValue());
+ if (ObjectUtil.isNotNull(value)) {
+ List collect = materialTalents.stream().filter(m -> m.getTalentsValue().equals(value) && materialTalent.getId().equals(m.getParentId())).map(MaterialTalents::getMaterials).collect(Collectors.toList());
+ System.out.println("collect = " + collect);
+ list.addAll(collect);
+ }
+ }
+ }
+
+ List collect = list.stream().distinct().collect(Collectors.toList());
+ System.out.println("collect2 = " + collect);
+
+ }
+
+ @Test
+ public void test0007(){
+ /* String s1 = sysConfigService.selectConfigByKey("sys:preventing:hotlinking");
+ System.out.println("s1 = " + s1);
+ List strings = Arrays.asList(s1.split(","));
+ System.out.println("strings = " + strings);*/
+ ActProcess actProcess = new ActProcess();
+ actProcess.setProcessKey("apply_house");
+ LambdaQueryWrapper wrapper = new LambdaQueryWrapper()
+ .eq(TProcess::getProcessKey, actProcess.getProcessKey());
+ List tProcesses = processMapper.selectList(wrapper);
+ System.out.println("tProcesses = " + tProcesses);
+ }
+
+ @Test
+ public void test0008(){
+ String host= "https://xyxtest.easyfees.cn/fcc";
+ String XYXMK ="54a321";
+ String qybh="XYX";
+ String account="XYX";
+ String key="5ee4adfedae1458a9ca040f06b416755";
+ Long timestamp=System.currentTimeMillis();
+ System.out.println("timestamp = " + timestamp);
+ String sign = SecureUtil.md5(qybh+"0001"+key+timestamp);
+ System.out.println("sign = " + sign);
+ HashMap hashMap = new HashMap<>();
+ hashMap.put("qybh",qybh);
+ hashMap.put("yhm","8401");
+ hashMap.put("sign",sign);
+ hashMap.put("timestamp",timestamp);
+
+ String s = HttpUtil.get(host, hashMap);
+ System.out.println("s = " + s);
+ }
+
+ @Test
+ public void test0009(){
+ String s ="buy_houses";
+// BuyHouses buyHouses = buyHousesMapper.selectById("2");
+ String s1 = CaseUtils.toCamelCase(s,false,new char[]{'_'});
+ System.out.println("s1 = " + s1);
+ String s2 = s1+"ServiceImpl";
+ //类名
+ Object beanName = SpringUtils.getBean(s2);
+ String me = "queryById";
+ //调用方法
+ Method method = ReflectionUtils.findMethod(beanName.getClass(), me, Long.class);
+ Object obj = ReflectionUtils.invokeMethod(method, beanName,2L);
+ System.out.println("obj = " + obj);
+// Map map = BeanUtil.beanToMap(buyHouses);
+// System.out.println("map = " + map);
+// ProcessVo processVo = new ProcessVo();
+// processVo.setParams(map);
+// processVo.setProcessKey("apply_house");
+// List processPlan = WorkComplyUtils.getProcessPlan(processVo);
+// System.out.println("processPlan = " +processPlan) ;
+ }
+
+ @Test
+ public void test00000(){
+ processMapper.updateCommonByBusinessId("buy_houses", Constants.FAILD,"2");
+ }
}
diff --git a/ruoyi-common/src/main/java/com/ruoyi/common/constant/Constants.java b/ruoyi-common/src/main/java/com/ruoyi/common/constant/Constants.java
index e634ed297..22fe16209 100644
--- a/ruoyi-common/src/main/java/com/ruoyi/common/constant/Constants.java
+++ b/ruoyi-common/src/main/java/com/ruoyi/common/constant/Constants.java
@@ -72,5 +72,25 @@ public interface Constants {
*/
String TOKEN = "token";
+ /**
+ * 审核等待中
+ */
+ String WAIT = "wait";
+
+ /**
+ * 审核成功
+ */
+ String SUCCEED = "succeed";
+
+ /**
+ * 审核失败
+ */
+ String FAILD = "faild";
+
+ /**
+ * 数据不存在
+ */
+ String NONENTITY = "nonentity";
+
}
diff --git a/ruoyi-system/pom.xml b/ruoyi-system/pom.xml
index 9c382a39e..1e09c8283 100644
--- a/ruoyi-system/pom.xml
+++ b/ruoyi-system/pom.xml
@@ -35,6 +35,11 @@
ruoyi-sms
+
+ com.ruoyi
+ ruoyi-work
+
+
diff --git a/ruoyi-system/src/main/java/com/ruoyi/system/common/WorkBusinessRule.java b/ruoyi-system/src/main/java/com/ruoyi/system/common/WorkBusinessRule.java
new file mode 100644
index 000000000..6bc4f6992
--- /dev/null
+++ b/ruoyi-system/src/main/java/com/ruoyi/system/common/WorkBusinessRule.java
@@ -0,0 +1,27 @@
+package com.ruoyi.system.common;
+
+import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
+import com.ruoyi.common.utils.spring.SpringUtils;
+import com.ruoyi.system.domain.BuyHouseCheck;
+import com.ruoyi.system.domain.vo.BuyHouseCheckVo;
+import com.ruoyi.system.mapper.BuyHouseCheckMapper;
+import lombok.RequiredArgsConstructor;
+import org.springframework.stereotype.Component;
+
+@Component
+@RequiredArgsConstructor
+public class WorkBusinessRule {
+
+ private static final BuyHouseCheckMapper buyHouseCheckMapper= SpringUtils.getBean(BuyHouseCheckMapper.class);
+
+ public String getDistrict(String district){
+ //先获取业务数据
+
+ QueryWrapper qw = new QueryWrapper<>();
+ qw.eq("crux_key","buy_house_audit");
+ qw.eq("other_key",district);
+ BuyHouseCheckVo buyHouseCheckVo = buyHouseCheckMapper.selectVoOne(qw);
+ return buyHouseCheckVo.getPerson();
+ }
+}
+
diff --git a/ruoyi-system/src/main/java/com/ruoyi/system/domain/BuyHouseCheck.java b/ruoyi-system/src/main/java/com/ruoyi/system/domain/BuyHouseCheck.java
new file mode 100644
index 000000000..f2ed29cff
--- /dev/null
+++ b/ruoyi-system/src/main/java/com/ruoyi/system/domain/BuyHouseCheck.java
@@ -0,0 +1,42 @@
+package com.ruoyi.system.domain;
+
+import com.baomidou.mybatisplus.annotation.TableId;
+import com.baomidou.mybatisplus.annotation.TableName;
+import lombok.Data;
+
+/**
+ * 购房审核人员不同类型需要的审核人员名单对象 buy_house_check
+ *
+ * @author ruoyi
+ * @date 2023-02-24
+ */
+@Data
+@TableName("buy_house_check")
+public class BuyHouseCheck{
+
+ private static final long serialVersionUID=1L;
+
+ /**
+ *
+ */
+ @TableId(value = "id")
+ private Long id;
+ /**
+ * 描述
+ */
+ private String remark;
+
+ /**
+ * 人员
+ */
+ private String person;
+ /**
+ * 需要关联的key
+ */
+ private String otherKey;
+ /**
+ * 关键key
+ */
+ private String cruxKey;
+
+}
diff --git a/ruoyi-system/src/main/java/com/ruoyi/system/domain/BuyHouses.java b/ruoyi-system/src/main/java/com/ruoyi/system/domain/BuyHouses.java
new file mode 100644
index 000000000..0054eed3c
--- /dev/null
+++ b/ruoyi-system/src/main/java/com/ruoyi/system/domain/BuyHouses.java
@@ -0,0 +1,161 @@
+package com.ruoyi.system.domain;
+
+import com.baomidou.mybatisplus.annotation.TableId;
+import com.baomidou.mybatisplus.annotation.TableName;
+import com.fasterxml.jackson.annotation.JsonFormat;
+import lombok.Data;
+
+import java.util.Date;
+
+/**
+ * 【请填写功能名称】对象 buy_houses
+ *
+ * @author ruoyi
+ * @date 2023-02-24
+ */
+@Data
+@TableName("buy_houses")
+public class BuyHouses {
+
+ private static final long serialVersionUID=1L;
+
+ /**
+ *
+ */
+ @TableId(value = "id")
+ private Long id;
+ /**
+ * 户口簿内页/护照内页
+ */
+ private String insidepageUrl;
+ /**
+ * 身份证/护照
+ */
+ private String cardId;
+ /**
+ * 承诺书
+ */
+ private String commitmentUrl;
+ /**
+ * 单位地址
+ */
+ private String companyAddress;
+ /**
+ * 工作单位
+ */
+ private String companyName;
+ /**
+ *
+ */
+ private Date createTime;
+ /**
+ * 申明书
+ */
+ private String declarationUrl;
+ /**
+ * 企业所在地 1.新经济活力区 2.交子公园金融商务区 3.高新西区 4.生物城
+ */
+ private String district;
+ /**
+ * 学历
+ */
+ private String education;
+ /**
+ * 身份证正面
+ */
+ private String frontUrl;
+ /**
+ * 公园城市局审核状态 1.待审核 2.退件 3.不通过 4.通过
+ */
+ private String gyStatus;
+ /**
+ * 房屋记录
+ */
+ private String homeRecordUrl;
+ /**
+ * 户口簿主页
+ */
+ private String homepageUrl;
+ /**
+ * 劳动合同
+ */
+ private String laborContractUrl;
+ /**
+ * 企业营业执照
+ */
+ private String licenseUrl;
+ /**
+ * 婚姻状况 1.未婚 2.已婚 3.离异
+ */
+ private String maritalStatus;
+ /**
+ * 婚姻证明材料
+ */
+ private String maritalUrl;
+ /**
+ * 国籍
+ */
+ private String nationality;
+ /**
+ * 手机号
+ */
+ private String phone;
+ /**
+ * 区域部门审核状态 1.待审核 2.退件 3.不通过 4.通过
+ */
+ private String qyStatus;
+ /**
+ * 身份证背面
+ */
+ private String reverseUrl;
+ /**
+ * 性别
+ */
+ private String sex;
+ /**
+ * 社会事业局审核状态 1.待审核 2.退件 3.不通过 4.通过
+ */
+ private String shStatus;
+ /**
+ * 统一社会信用代码
+ */
+ private String socialCode;
+ /**
+ * 社保证明
+ */
+ private String socialSecurityUrl;
+ /**
+ * 状态 1.待提交 2.受理中 3.受理退件 4.受理驳回 5.初审中 6初审不通过 7.初审退件 8.审定中 9.审定不通过 10.审定通过
+ */
+ private String status;
+ /**
+ * 类型 A B C D
+ */
+ private String type;
+ /**
+ * 用户id
+ */
+ private Long userId;
+ /**
+ * 姓名
+ */
+ private String userName;
+ /**
+ *
+ */
+ private Date affTime;
+ /**
+ *
+ */
+ private String pictureInformationUrl;
+ /**
+ *
+ */
+ private String workAddress;
+
+ public String processKey;
+
+ @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
+ private Date updateTime;
+
+}
diff --git a/ruoyi-system/src/main/java/com/ruoyi/system/domain/BuyHousesMember.java b/ruoyi-system/src/main/java/com/ruoyi/system/domain/BuyHousesMember.java
new file mode 100644
index 000000000..306aa659f
--- /dev/null
+++ b/ruoyi-system/src/main/java/com/ruoyi/system/domain/BuyHousesMember.java
@@ -0,0 +1,60 @@
+package com.ruoyi.system.domain;
+
+import com.baomidou.mybatisplus.annotation.TableId;
+import com.baomidou.mybatisplus.annotation.TableName;
+import com.ruoyi.common.core.domain.BaseEntity;
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+
+/**
+ * 购房家属关系对象 buy_houses_member
+ *
+ * @author ruoyi
+ * @date 2023-03-15
+ */
+@Data
+@EqualsAndHashCode(callSuper = true)
+@TableName("buy_houses_member")
+public class BuyHousesMember extends BaseEntity {
+
+ private static final long serialVersionUID=1L;
+
+ /**
+ *
+ */
+ @TableId(value = "id")
+ private Long id;
+ /**
+ * 户口簿内页
+ */
+ private String insidepageUrl;
+ /**
+ * 购房申报id
+ */
+ private String buyHousesId;
+ /**
+ * 身份证正面
+ */
+ private String frontUrl;
+ /**
+ * 关系
+ */
+ private String relation;
+ /**
+ * 身份证背面
+ */
+ private String reverseUrl;
+ /**
+ * 房屋记录
+ */
+ private String homeRecordUrl;
+ /**
+ * 证件号
+ */
+ private String cardId;
+ /**
+ * 姓名
+ */
+ private String name;
+
+}
diff --git a/ruoyi-system/src/main/java/com/ruoyi/system/domain/BuyHousesReviewMember.java b/ruoyi-system/src/main/java/com/ruoyi/system/domain/BuyHousesReviewMember.java
new file mode 100644
index 000000000..a1d6eab4f
--- /dev/null
+++ b/ruoyi-system/src/main/java/com/ruoyi/system/domain/BuyHousesReviewMember.java
@@ -0,0 +1,60 @@
+package com.ruoyi.system.domain;
+
+import com.baomidou.mybatisplus.annotation.TableId;
+import com.baomidou.mybatisplus.annotation.TableName;
+import com.ruoyi.common.core.domain.BaseEntity;
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+
+/**
+ * 购房复审家属关系对象 buy_houses_review_member
+ *
+ * @author ruoyi
+ * @date 2023-03-15
+ */
+@Data
+@EqualsAndHashCode(callSuper = true)
+@TableName("buy_houses_review_member")
+public class BuyHousesReviewMember extends BaseEntity {
+
+ private static final long serialVersionUID=1L;
+
+ /**
+ *
+ */
+ @TableId(value = "id")
+ private Long id;
+ /**
+ * 户口簿内页
+ */
+ private String insidepageUrl;
+ /**
+ * 购房申报id
+ */
+ private String buyHousesId;
+ /**
+ * 身份证正面
+ */
+ private String frontUrl;
+ /**
+ * 关系
+ */
+ private String relation;
+ /**
+ * 身份证背面
+ */
+ private String reverseUrl;
+ /**
+ * 房屋记录
+ */
+ private String homeRecordUrl;
+ /**
+ * 证件号
+ */
+ private String cardId;
+ /**
+ * 姓名
+ */
+ private String name;
+
+}
diff --git a/ruoyi-system/src/main/java/com/ruoyi/system/domain/HousesReview.java b/ruoyi-system/src/main/java/com/ruoyi/system/domain/HousesReview.java
new file mode 100644
index 000000000..35c13a064
--- /dev/null
+++ b/ruoyi-system/src/main/java/com/ruoyi/system/domain/HousesReview.java
@@ -0,0 +1,130 @@
+package com.ruoyi.system.domain;
+
+import com.baomidou.mybatisplus.annotation.TableId;
+import com.baomidou.mybatisplus.annotation.TableName;
+import com.ruoyi.common.core.domain.BaseEntity;
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+
+/**
+ * 购房复审登记对象 houses_review
+ *
+ * @author ruoyi
+ * @date 2023-03-08
+ */
+@Data
+@EqualsAndHashCode(callSuper = true)
+@TableName("houses_review")
+public class HousesReview extends BaseEntity {
+
+ private static final long serialVersionUID=1L;
+
+ /**
+ * id
+ */
+ @TableId(value = "id")
+ private Long id;
+ /**
+ * 证件类型
+ */
+ private String cardType;
+ /**
+ * 身份证号码
+ */
+ private String card;
+ /**
+ * 姓名
+ */
+ private String name;
+ /**
+ * 资格序号
+ */
+ private String qualification;
+ /**
+ * 审核时间
+ */
+ private String auditTime;
+ /**
+ * 预售证号
+ */
+ private String presellCard;
+ /**
+ * 交易类型
+ */
+ private String dealType;
+ /**
+ * 项目名称
+ */
+ private String projectName;
+ /**
+ * 项目区域
+ */
+ private String projectArea;
+ /**
+ * 资格确认时间
+ */
+ private String qualificationConfirmTime;
+ /**
+ * 资格预申请时间
+ */
+ private String qualificationPreApplyTime;
+ /**
+ * 家庭类型
+ */
+ private String familyType;
+ /**
+ * 状态
+ */
+ private String status;
+ /**
+ * 登记失效时间
+ */
+ private String registerFailureTime;
+ /**
+ * 国籍
+ */
+ private String nationality;
+ /**
+ * 婚姻状况
+ */
+ private String maritalStatus;
+ /**
+ * 单位类型
+ */
+ private String companyType;
+ /**
+ * 公司名称
+ */
+ private String companyName;
+ /**
+ * 人才类型
+ */
+ private String talentsType;
+ /**
+ * 统一社会信用代码
+ */
+ private String creditCode;
+ /**
+ * 企业所在地
+ */
+ private String companyAddress;
+ /**
+ * 来源
+ */
+ private String sourceBy;
+ /**
+ * 流程key
+ */
+ private String processKey;
+
+ /**
+ * 流程状态
+ */
+ private String processStatus;
+
+ /**
+ * 工作单位所属区域
+ */
+ private String companyAddressArea;
+
+}
diff --git a/ruoyi-system/src/main/java/com/ruoyi/system/domain/MaterialModule.java b/ruoyi-system/src/main/java/com/ruoyi/system/domain/MaterialModule.java
new file mode 100644
index 000000000..b948e952b
--- /dev/null
+++ b/ruoyi-system/src/main/java/com/ruoyi/system/domain/MaterialModule.java
@@ -0,0 +1,57 @@
+package com.ruoyi.system.domain;
+
+import com.baomidou.mybatisplus.annotation.IdType;
+import com.baomidou.mybatisplus.annotation.TableField;
+import com.baomidou.mybatisplus.annotation.TableId;
+import com.baomidou.mybatisplus.annotation.TableName;
+import com.ruoyi.common.core.domain.BaseEntity;
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+
+/**
+ * 材料模块对象 material_module
+ *
+ * @author ruoyi
+ * @date 2023-03-09
+ */
+@Data
+@EqualsAndHashCode(callSuper = true)
+@TableName("material_module")
+public class MaterialModule extends BaseEntity {
+
+ private static final long serialVersionUID=1L;
+
+ /**
+ *
+ */
+ @TableId(value = "id",type = IdType.AUTO)
+ private Long id;
+ /**
+ * 材料名称
+ */
+ private String materialName;
+ /**
+ * 材料key
+ */
+ private String materialKey;
+ /**
+ * 审核部门
+ */
+ private String auditDept;
+ /**
+ * 描述
+ */
+ private String description;
+ /**
+ * 排序
+ */
+ private Long sort;
+ /**
+ * 是否必填
+ */
+ private String isMust;
+
+ @TableField(exist = false)
+ private String file;
+
+}
diff --git a/ruoyi-system/src/main/java/com/ruoyi/system/domain/MaterialProof.java b/ruoyi-system/src/main/java/com/ruoyi/system/domain/MaterialProof.java
new file mode 100644
index 000000000..5acfac887
--- /dev/null
+++ b/ruoyi-system/src/main/java/com/ruoyi/system/domain/MaterialProof.java
@@ -0,0 +1,63 @@
+package com.ruoyi.system.domain;
+
+import com.baomidou.mybatisplus.annotation.TableId;
+import com.baomidou.mybatisplus.annotation.TableName;
+import com.ruoyi.common.core.domain.BaseEntity;
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+
+/**
+ * 材料对象 material_proof
+ *
+ * @author ruoyi
+ * @date 2023-03-15
+ */
+@Data
+@EqualsAndHashCode(callSuper = true)
+@TableName("material_proof")
+public class MaterialProof extends BaseEntity {
+
+ private static final long serialVersionUID=1L;
+
+ /**
+ *
+ */
+ @TableId(value = "id")
+ private Long id;
+ /**
+ * 关联申请id
+ */
+ private String houseId;
+ /**
+ * 0待审核,1审核失败,2审核成功
+ */
+ private Long status;
+ /**
+ * 所对应材料的id
+ */
+ private String modulePathId;
+ /**
+ * 数据
+ */
+ private String file;
+ /**
+ * 对应module_paht的字段
+ */
+ private String materialKey;
+ /**
+ * 对应module_path的描述
+ */
+ private String description;
+ /**
+ * 审核人
+ */
+ private String auditDept;
+ /**
+ * 审核人类型
+ */
+ private String checkType;
+
+ private String materialName;
+
+
+}
diff --git a/ruoyi-system/src/main/java/com/ruoyi/system/domain/MaterialTalents.java b/ruoyi-system/src/main/java/com/ruoyi/system/domain/MaterialTalents.java
new file mode 100644
index 000000000..c85508e82
--- /dev/null
+++ b/ruoyi-system/src/main/java/com/ruoyi/system/domain/MaterialTalents.java
@@ -0,0 +1,61 @@
+package com.ruoyi.system.domain;
+
+import com.baomidou.mybatisplus.annotation.*;
+import com.ruoyi.common.core.domain.BaseEntity;
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+
+/**
+ * 材料关系对象 material_talents
+ *
+ * @author ruoyi
+ * @date 2023-03-09
+ */
+@Data
+@EqualsAndHashCode(callSuper = true)
+@TableName("material_talents")
+public class MaterialTalents extends BaseEntity {
+
+ private static final long serialVersionUID=1L;
+
+ /**
+ * 主键
+ */
+ @TableId(value = "id")
+ private Long id;
+ /**
+ * 父id
+ */
+ private Long parentId;
+ /**
+ * 值
+ */
+ private String talentsValue;
+ /**
+ * 节点名称
+ */
+ private String talentsName;
+ /**
+ * 版本
+ */
+ @Version
+ private Long version;
+ /**
+ * 删除标志
+ */
+ @TableLogic
+ private Long delFlag;
+ /**
+ * 是否选中
+ */
+ private String selected;
+ /**
+ * 对应的材料
+ */
+ private String materials;
+
+ @TableField(exist = false)
+ private Integer[] materialList;
+
+
+}
diff --git a/ruoyi-system/src/main/java/com/ruoyi/system/domain/bo/BuyHousesBo.java b/ruoyi-system/src/main/java/com/ruoyi/system/domain/bo/BuyHousesBo.java
new file mode 100644
index 000000000..f579a6507
--- /dev/null
+++ b/ruoyi-system/src/main/java/com/ruoyi/system/domain/bo/BuyHousesBo.java
@@ -0,0 +1,224 @@
+package com.ruoyi.system.domain.bo;
+
+import com.ruoyi.common.core.domain.BaseEntity;
+import com.ruoyi.common.core.validate.AddGroup;
+import com.ruoyi.common.core.validate.EditGroup;
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+
+import javax.validation.constraints.NotBlank;
+import javax.validation.constraints.NotNull;
+import java.util.Date;
+
+/**
+ * 【请填写功能名称】业务对象 buy_houses
+ *
+ * @author ruoyi
+ * @date 2023-02-24
+ */
+
+@Data
+@EqualsAndHashCode(callSuper = true)
+public class BuyHousesBo extends BaseEntity {
+
+ /**
+ *
+ */
+ @NotNull(message = "不能为空", groups = { EditGroup.class })
+ private Long id;
+
+ /**
+ * 户口簿内页/护照内页
+ */
+ @NotBlank(message = "户口簿内页/护照内页不能为空", groups = { AddGroup.class, EditGroup.class })
+ private String insidepageUrl;
+
+ /**
+ * 身份证/护照
+ */
+ @NotBlank(message = "身份证/护照不能为空", groups = { AddGroup.class, EditGroup.class })
+ private String cardId;
+
+ /**
+ * 承诺书
+ */
+ @NotBlank(message = "承诺书不能为空", groups = { AddGroup.class, EditGroup.class })
+ private String commitmentUrl;
+
+ /**
+ * 单位地址
+ */
+ @NotBlank(message = "单位地址不能为空", groups = { AddGroup.class, EditGroup.class })
+ private String companyAddress;
+
+ /**
+ * 工作单位
+ */
+ @NotBlank(message = "工作单位不能为空", groups = { AddGroup.class, EditGroup.class })
+ private String companyName;
+
+ /**
+ *
+ */
+ @NotNull(message = "不能为空", groups = { AddGroup.class, EditGroup.class })
+ private Date createTime;
+
+ /**
+ * 申明书
+ */
+ @NotBlank(message = "申明书不能为空", groups = { AddGroup.class, EditGroup.class })
+ private String declarationUrl;
+
+ /**
+ * 企业所在地 1.新经济活力区 2.交子公园金融商务区 3.高新西区 4.生物城
+ */
+ @NotBlank(message = "企业所在地 1.新经济活力区 2.交子公园金融商务区 3.高新西区 4.生物城不能为空", groups = { AddGroup.class, EditGroup.class })
+ private String district;
+
+ /**
+ * 学历
+ */
+ @NotBlank(message = "学历不能为空", groups = { AddGroup.class, EditGroup.class })
+ private String education;
+
+ /**
+ * 身份证正面
+ */
+ @NotBlank(message = "身份证正面不能为空", groups = { AddGroup.class, EditGroup.class })
+ private String frontUrl;
+
+ /**
+ * 公园城市局审核状态 1.待审核 2.退件 3.不通过 4.通过
+ */
+ @NotBlank(message = "公园城市局审核状态 1.待审核 2.退件 3.不通过 4.通过不能为空", groups = { AddGroup.class, EditGroup.class })
+ private String gyStatus;
+
+ /**
+ * 房屋记录
+ */
+ @NotBlank(message = "房屋记录不能为空", groups = { AddGroup.class, EditGroup.class })
+ private String homeRecordUrl;
+
+ /**
+ * 户口簿主页
+ */
+ @NotBlank(message = "户口簿主页不能为空", groups = { AddGroup.class, EditGroup.class })
+ private String homepageUrl;
+
+ /**
+ * 劳动合同
+ */
+ @NotBlank(message = "劳动合同不能为空", groups = { AddGroup.class, EditGroup.class })
+ private String laborContractUrl;
+
+ /**
+ * 企业营业执照
+ */
+ @NotBlank(message = "企业营业执照不能为空", groups = { AddGroup.class, EditGroup.class })
+ private String licenseUrl;
+
+ /**
+ * 婚姻状况 1.未婚 2.已婚 3.离异
+ */
+ @NotBlank(message = "婚姻状况 1.未婚 2.已婚 3.离异不能为空", groups = { AddGroup.class, EditGroup.class })
+ private String maritalStatus;
+
+ /**
+ * 婚姻证明材料
+ */
+ @NotBlank(message = "婚姻证明材料不能为空", groups = { AddGroup.class, EditGroup.class })
+ private String maritalUrl;
+
+ /**
+ * 国籍
+ */
+ @NotBlank(message = "国籍不能为空", groups = { AddGroup.class, EditGroup.class })
+ private String nationality;
+
+ /**
+ * 手机号
+ */
+ @NotBlank(message = "手机号不能为空", groups = { AddGroup.class, EditGroup.class })
+ private String phone;
+
+ /**
+ * 区域部门审核状态 1.待审核 2.退件 3.不通过 4.通过
+ */
+ @NotBlank(message = "区域部门审核状态 1.待审核 2.退件 3.不通过 4.通过不能为空", groups = { AddGroup.class, EditGroup.class })
+ private String qyStatus;
+
+ /**
+ * 身份证背面
+ */
+ @NotBlank(message = "身份证背面不能为空", groups = { AddGroup.class, EditGroup.class })
+ private String reverseUrl;
+
+ /**
+ * 性别
+ */
+ @NotBlank(message = "性别不能为空", groups = { AddGroup.class, EditGroup.class })
+ private String sex;
+
+ /**
+ * 社会事业局审核状态 1.待审核 2.退件 3.不通过 4.通过
+ */
+ @NotBlank(message = "社会事业局审核状态 1.待审核 2.退件 3.不通过 4.通过不能为空", groups = { AddGroup.class, EditGroup.class })
+ private String shStatus;
+
+ /**
+ * 统一社会信用代码
+ */
+ @NotBlank(message = "统一社会信用代码不能为空", groups = { AddGroup.class, EditGroup.class })
+ private String socialCode;
+
+ /**
+ * 社保证明
+ */
+ @NotBlank(message = "社保证明不能为空", groups = { AddGroup.class, EditGroup.class })
+ private String socialSecurityUrl;
+
+ /**
+ * 状态 1.待提交 2.受理中 3.受理退件 4.受理驳回 5.初审中 6初审不通过 7.初审退件 8.审定中 9.审定不通过 10.审定通过
+ */
+ @NotBlank(message = "状态 1.待提交 2.受理中 3.受理退件 4.受理驳回 5.初审中 6初审不通过 7.初审退件 8.审定中 9.审定不通过 10.审定通过不能为空", groups = { AddGroup.class, EditGroup.class })
+ private String status;
+
+ /**
+ * 类型 A B C D
+ */
+ @NotBlank(message = "类型 A B C D不能为空", groups = { AddGroup.class, EditGroup.class })
+ private String type;
+
+ /**
+ * 用户id
+ */
+ @NotNull(message = "用户id不能为空", groups = { AddGroup.class, EditGroup.class })
+ private Long userId;
+
+ /**
+ * 姓名
+ */
+ @NotBlank(message = "姓名不能为空", groups = { AddGroup.class, EditGroup.class })
+ private String userName;
+
+ /**
+ *
+ */
+ @NotNull(message = "不能为空", groups = { AddGroup.class, EditGroup.class })
+ private Date affTime;
+
+ /**
+ *
+ */
+ @NotBlank(message = "不能为空", groups = { AddGroup.class, EditGroup.class })
+ private String pictureInformationUrl;
+
+ /**
+ *
+ */
+ @NotBlank(message = "不能为空", groups = { AddGroup.class, EditGroup.class })
+ private String workAddress;
+
+ public String processKey;
+
+}
diff --git a/ruoyi-system/src/main/java/com/ruoyi/system/domain/bo/BuyHousesMemberBo.java b/ruoyi-system/src/main/java/com/ruoyi/system/domain/bo/BuyHousesMemberBo.java
new file mode 100644
index 000000000..bcd894a20
--- /dev/null
+++ b/ruoyi-system/src/main/java/com/ruoyi/system/domain/bo/BuyHousesMemberBo.java
@@ -0,0 +1,78 @@
+package com.ruoyi.system.domain.bo;
+
+import com.ruoyi.common.core.domain.BaseEntity;
+import com.ruoyi.common.core.validate.AddGroup;
+import com.ruoyi.common.core.validate.EditGroup;
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+
+import javax.validation.constraints.NotBlank;
+import javax.validation.constraints.NotNull;
+
+/**
+ * 购房家属关系业务对象 buy_houses_member
+ *
+ * @author ruoyi
+ * @date 2023-03-15
+ */
+
+@Data
+@EqualsAndHashCode(callSuper = true)
+public class BuyHousesMemberBo extends BaseEntity {
+
+ /**
+ *
+ */
+ @NotNull(message = "不能为空", groups = { EditGroup.class })
+ private Long id;
+
+ /**
+ * 户口簿内页
+ */
+ @NotBlank(message = "户口簿内页不能为空", groups = { AddGroup.class, EditGroup.class })
+ private String insidepageUrl;
+
+ /**
+ * 购房申报id
+ */
+ @NotNull(message = "购房申报id不能为空", groups = { AddGroup.class, EditGroup.class })
+ private String buyHousesId;
+
+ /**
+ * 身份证正面
+ */
+ @NotBlank(message = "身份证正面不能为空", groups = { AddGroup.class, EditGroup.class })
+ private String frontUrl;
+
+ /**
+ * 关系
+ */
+ @NotBlank(message = "关系不能为空", groups = { AddGroup.class, EditGroup.class })
+ private String relation;
+
+ /**
+ * 身份证背面
+ */
+ @NotBlank(message = "身份证背面不能为空", groups = { AddGroup.class, EditGroup.class })
+ private String reverseUrl;
+
+ /**
+ * 房屋记录
+ */
+ @NotBlank(message = "房屋记录不能为空", groups = { AddGroup.class, EditGroup.class })
+ private String homeRecordUrl;
+
+ /**
+ * 证件号
+ */
+ @NotBlank(message = "证件号不能为空", groups = { AddGroup.class, EditGroup.class })
+ private String cardId;
+
+ /**
+ * 姓名
+ */
+ @NotBlank(message = "姓名不能为空", groups = { AddGroup.class, EditGroup.class })
+ private String name;
+
+
+}
diff --git a/ruoyi-system/src/main/java/com/ruoyi/system/domain/bo/BuyHousesReviewMemberBo.java b/ruoyi-system/src/main/java/com/ruoyi/system/domain/bo/BuyHousesReviewMemberBo.java
new file mode 100644
index 000000000..883435198
--- /dev/null
+++ b/ruoyi-system/src/main/java/com/ruoyi/system/domain/bo/BuyHousesReviewMemberBo.java
@@ -0,0 +1,78 @@
+package com.ruoyi.system.domain.bo;
+
+import com.ruoyi.common.core.domain.BaseEntity;
+import com.ruoyi.common.core.validate.AddGroup;
+import com.ruoyi.common.core.validate.EditGroup;
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+
+import javax.validation.constraints.NotBlank;
+import javax.validation.constraints.NotNull;
+
+/**
+ * 购房复审家属关系业务对象 buy_houses_review_member
+ *
+ * @author ruoyi
+ * @date 2023-03-15
+ */
+
+@Data
+@EqualsAndHashCode(callSuper = true)
+public class BuyHousesReviewMemberBo extends BaseEntity {
+
+ /**
+ *
+ */
+ @NotNull(message = "不能为空", groups = { EditGroup.class })
+ private Long id;
+
+ /**
+ * 户口簿内页
+ */
+ @NotBlank(message = "户口簿内页不能为空", groups = { AddGroup.class, EditGroup.class })
+ private String insidepageUrl;
+
+ /**
+ * 购房申报id
+ */
+ @NotNull(message = "购房申报id不能为空", groups = { AddGroup.class, EditGroup.class })
+ private String buyHousesId;
+
+ /**
+ * 身份证正面
+ */
+ @NotBlank(message = "身份证正面不能为空", groups = { AddGroup.class, EditGroup.class })
+ private String frontUrl;
+
+ /**
+ * 关系
+ */
+ @NotBlank(message = "关系不能为空", groups = { AddGroup.class, EditGroup.class })
+ private String relation;
+
+ /**
+ * 身份证背面
+ */
+ @NotBlank(message = "身份证背面不能为空", groups = { AddGroup.class, EditGroup.class })
+ private String reverseUrl;
+
+ /**
+ * 房屋记录
+ */
+ @NotBlank(message = "房屋记录不能为空", groups = { AddGroup.class, EditGroup.class })
+ private String homeRecordUrl;
+
+ /**
+ * 证件号
+ */
+ @NotBlank(message = "证件号不能为空", groups = { AddGroup.class, EditGroup.class })
+ private String cardId;
+
+ /**
+ * 姓名
+ */
+ @NotBlank(message = "姓名不能为空", groups = { AddGroup.class, EditGroup.class })
+ private String name;
+
+
+}
diff --git a/ruoyi-system/src/main/java/com/ruoyi/system/domain/bo/HousesReviewBo.java b/ruoyi-system/src/main/java/com/ruoyi/system/domain/bo/HousesReviewBo.java
new file mode 100644
index 000000000..5229456da
--- /dev/null
+++ b/ruoyi-system/src/main/java/com/ruoyi/system/domain/bo/HousesReviewBo.java
@@ -0,0 +1,183 @@
+package com.ruoyi.system.domain.bo;
+
+import com.ruoyi.common.core.domain.BaseEntity;
+import com.ruoyi.common.core.validate.AddGroup;
+import com.ruoyi.common.core.validate.EditGroup;
+import com.ruoyi.system.domain.BuyHousesReviewMember;
+import com.ruoyi.system.domain.MaterialModule;
+import com.ruoyi.system.domain.MaterialProof;
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+
+import javax.validation.constraints.NotBlank;
+import javax.validation.constraints.NotNull;
+import java.util.List;
+
+/**
+ * 购房复审登记业务对象 houses_review
+ *
+ * @author ruoyi
+ * @date 2023-03-08
+ */
+
+@Data
+@EqualsAndHashCode(callSuper = true)
+public class HousesReviewBo extends BaseEntity {
+
+ /**
+ * id
+ */
+ @NotNull(message = "id不能为空", groups = { EditGroup.class })
+ private Long id;
+
+ /**
+ * 证件类型
+ */
+ @NotBlank(message = "证件类型不能为空", groups = { AddGroup.class, EditGroup.class })
+ private String cardType;
+
+ /**
+ * 身份证号码
+ */
+ @NotBlank(message = "身份证号码不能为空", groups = { AddGroup.class, EditGroup.class })
+ private String card;
+
+ /**
+ * 姓名
+ */
+ @NotBlank(message = "姓名不能为空", groups = { AddGroup.class, EditGroup.class })
+ private String name;
+
+ /**
+ * 资格序号
+ */
+ @NotBlank(message = "资格序号不能为空", groups = { AddGroup.class, EditGroup.class })
+ private String qualification;
+
+ /**
+ * 审核时间
+ */
+ @NotBlank(message = "审核时间不能为空", groups = { AddGroup.class, EditGroup.class })
+ private String auditTime;
+
+ /**
+ * 预售证号
+ */
+ @NotBlank(message = "预售证号不能为空", groups = { AddGroup.class, EditGroup.class })
+ private String presellCard;
+
+ /**
+ * 交易类型
+ */
+ @NotBlank(message = "交易类型不能为空", groups = { AddGroup.class, EditGroup.class })
+ private String dealType;
+
+ /**
+ * 项目名称
+ */
+ @NotBlank(message = "项目名称不能为空", groups = { AddGroup.class, EditGroup.class })
+ private String projectName;
+
+ /**
+ * 项目区域
+ */
+ @NotBlank(message = "项目区域不能为空", groups = { AddGroup.class, EditGroup.class })
+ private String projectArea;
+
+ /**
+ * 资格确认时间
+ */
+ @NotBlank(message = "资格确认时间不能为空", groups = { AddGroup.class, EditGroup.class })
+ private String qualificationConfirmTime;
+
+ /**
+ * 资格预申请时间
+ */
+ @NotBlank(message = "资格预申请时间不能为空", groups = { AddGroup.class, EditGroup.class })
+ private String qualificationPreApplyTime;
+
+ /**
+ * 家庭类型
+ */
+ @NotBlank(message = "家庭类型不能为空", groups = { AddGroup.class, EditGroup.class })
+ private String familyType;
+
+ /**
+ * 状态
+ */
+ @NotBlank(message = "状态不能为空", groups = { AddGroup.class, EditGroup.class })
+ private String status;
+
+ /**
+ * 登记失效时间
+ */
+ @NotBlank(message = "登记失效时间不能为空", groups = { AddGroup.class, EditGroup.class })
+ private String registerFailureTime;
+
+ /**
+ * 国籍
+ */
+ @NotBlank(message = "国籍不能为空", groups = { AddGroup.class, EditGroup.class })
+ private String nationality;
+
+ /**
+ * 婚姻状况
+ */
+ @NotBlank(message = "婚姻状况不能为空", groups = { AddGroup.class, EditGroup.class })
+ private String maritalStatus;
+
+ /**
+ * 单位类型
+ */
+ @NotBlank(message = "单位类型不能为空", groups = { AddGroup.class, EditGroup.class })
+ private String companyType;
+
+ /**
+ * 公司名称
+ */
+ @NotBlank(message = "公司名称不能为空", groups = { AddGroup.class, EditGroup.class })
+ private String companyName;
+
+ /**
+ * 人才类型
+ */
+ @NotBlank(message = "人才类型不能为空", groups = { AddGroup.class, EditGroup.class })
+ private String talentsType;
+
+ /**
+ * 统一社会信用代码
+ */
+ @NotBlank(message = "统一社会信用代码不能为空", groups = { AddGroup.class, EditGroup.class })
+ private String creditCode;
+
+ /**
+ * 企业所在地
+ */
+ @NotBlank(message = "企业所在地不能为空", groups = { AddGroup.class, EditGroup.class })
+ private String companyAddress;
+
+ /**
+ * 来源
+ */
+ @NotBlank(message = "来源不能为空", groups = { AddGroup.class, EditGroup.class })
+ private String sourceBy;
+
+ /**
+ * 流程key
+ */
+ @NotBlank(message = "流程key不能为空", groups = { AddGroup.class, EditGroup.class })
+ private String processKey;
+
+ private String processStatus;
+
+ private String companyAddressArea;
+
+ private List buyHousesMemberList;
+
+ private List materialsList;
+
+ private List materialProofList;
+
+
+
+}
diff --git a/ruoyi-system/src/main/java/com/ruoyi/system/domain/bo/MaterialModuleBo.java b/ruoyi-system/src/main/java/com/ruoyi/system/domain/bo/MaterialModuleBo.java
new file mode 100644
index 000000000..ce542af70
--- /dev/null
+++ b/ruoyi-system/src/main/java/com/ruoyi/system/domain/bo/MaterialModuleBo.java
@@ -0,0 +1,64 @@
+package com.ruoyi.system.domain.bo;
+
+import com.ruoyi.common.core.domain.BaseEntity;
+import com.ruoyi.common.core.validate.AddGroup;
+import com.ruoyi.common.core.validate.EditGroup;
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+
+import javax.validation.constraints.NotBlank;
+import javax.validation.constraints.NotNull;
+
+/**
+ * 材料模块业务对象 material_module
+ *
+ * @author ruoyi
+ * @date 2023-03-09
+ */
+
+@Data
+@EqualsAndHashCode(callSuper = true)
+public class MaterialModuleBo extends BaseEntity {
+
+ /**
+ *
+ */
+ private Long id;
+
+ /**
+ * 材料名称
+ */
+ @NotBlank(message = "材料名称不能为空", groups = { AddGroup.class, EditGroup.class })
+ private String materialName;
+
+ /**
+ * 材料key
+ */
+ @NotBlank(message = "材料key不能为空", groups = { AddGroup.class, EditGroup.class })
+ private String materialKey;
+
+ /**
+ * 审核部门
+ */
+ @NotBlank(message = "审核部门不能为空", groups = { AddGroup.class, EditGroup.class })
+ private String auditDept;
+
+ /**
+ * 描述
+ */
+ private String description;
+
+ /**
+ * 排序
+ */
+ @NotNull(message = "排序不能为空", groups = { AddGroup.class, EditGroup.class })
+ private Long sort;
+
+ /**
+ * 是否必填
+ */
+ @NotNull(message = "是否必填不能为空", groups = { AddGroup.class, EditGroup.class })
+ private String isMust;
+
+
+}
diff --git a/ruoyi-system/src/main/java/com/ruoyi/system/domain/bo/MaterialProofBo.java b/ruoyi-system/src/main/java/com/ruoyi/system/domain/bo/MaterialProofBo.java
new file mode 100644
index 000000000..70aba4a4a
--- /dev/null
+++ b/ruoyi-system/src/main/java/com/ruoyi/system/domain/bo/MaterialProofBo.java
@@ -0,0 +1,86 @@
+package com.ruoyi.system.domain.bo;
+
+import com.ruoyi.common.core.domain.BaseEntity;
+import com.ruoyi.common.core.validate.AddGroup;
+import com.ruoyi.common.core.validate.EditGroup;
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+
+import javax.validation.constraints.NotBlank;
+import javax.validation.constraints.NotNull;
+import java.util.Date;
+
+/**
+ * 材料业务对象 material_proof
+ *
+ * @author ruoyi
+ * @date 2023-03-15
+ */
+
+@Data
+@EqualsAndHashCode(callSuper = true)
+public class MaterialProofBo extends BaseEntity {
+
+ /**
+ *
+ */
+ @NotNull(message = "不能为空", groups = { EditGroup.class })
+ private Long id;
+
+ /**
+ * 关联申请id
+ */
+ @NotBlank(message = "关联申请id不能为空", groups = { AddGroup.class, EditGroup.class })
+ private String houseId;
+
+ /**
+ * 创建时间
+ */
+ @NotNull(message = "创建时间不能为空", groups = { AddGroup.class, EditGroup.class })
+ private Date createTime;
+
+ /**
+ * 0待审核,1审核失败,2审核成功
+ */
+ @NotNull(message = "0待审核,1审核失败,2审核成功不能为空", groups = { AddGroup.class, EditGroup.class })
+ private Long status;
+
+ /**
+ * 所对应材料的id
+ */
+ @NotBlank(message = "所对应材料的id不能为空", groups = { AddGroup.class, EditGroup.class })
+ private String modulePathId;
+
+ /**
+ * 数据
+ */
+ @NotBlank(message = "数据不能为空", groups = { AddGroup.class, EditGroup.class })
+ private String file;
+
+ /**
+ * 对应module_paht的字段
+ */
+ @NotBlank(message = "对应module_paht的字段不能为空", groups = { AddGroup.class, EditGroup.class })
+ private String materialKey;
+
+ /**
+ * 对应module_path的描述
+ */
+ @NotBlank(message = "对应module_path的描述不能为空", groups = { AddGroup.class, EditGroup.class })
+ private String description;
+
+ /**
+ * 审核人
+ */
+ @NotBlank(message = "审核人不能为空", groups = { AddGroup.class, EditGroup.class })
+ private String auditDept;
+
+ /**
+ * 审核人类型
+ */
+ @NotBlank(message = "审核人类型不能为空", groups = { AddGroup.class, EditGroup.class })
+ private String checkType;
+
+ private String materialName;
+
+}
diff --git a/ruoyi-system/src/main/java/com/ruoyi/system/domain/bo/MaterialTalentsBo.java b/ruoyi-system/src/main/java/com/ruoyi/system/domain/bo/MaterialTalentsBo.java
new file mode 100644
index 000000000..bd85f6dc7
--- /dev/null
+++ b/ruoyi-system/src/main/java/com/ruoyi/system/domain/bo/MaterialTalentsBo.java
@@ -0,0 +1,61 @@
+package com.ruoyi.system.domain.bo;
+
+import com.ruoyi.common.core.domain.BaseEntity;
+import com.ruoyi.common.core.validate.AddGroup;
+import com.ruoyi.common.core.validate.EditGroup;
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+
+import javax.validation.constraints.NotBlank;
+import javax.validation.constraints.NotNull;
+
+/**
+ * 材料关系业务对象 material_talents
+ *
+ * @author ruoyi
+ * @date 2023-03-09
+ */
+
+@Data
+@EqualsAndHashCode(callSuper = true)
+public class MaterialTalentsBo extends BaseEntity {
+
+ /**
+ * 主键
+ */
+ private Long id;
+
+ /**
+ * 父id
+ */
+ @NotNull(message = "父id不能为空", groups = { AddGroup.class, EditGroup.class })
+ private Long parentId;
+
+ /**
+ * 值
+ */
+ @NotNull(message = "值不能为空", groups = { AddGroup.class, EditGroup.class })
+ private String talentsValue;
+
+ /**
+ * 节点名称
+ */
+ @NotBlank(message = "节点名称不能为空", groups = { AddGroup.class, EditGroup.class })
+ private String talentsName;
+
+ /**
+ * 是否选中
+ */
+// @NotBlank(message = "是否选中不能为空", groups = { AddGroup.class, EditGroup.class })
+ private String selected;
+
+ /**
+ * 对应的材料
+ */
+// @NotBlank(message = "对应的材料不能为空", groups = { AddGroup.class, EditGroup.class })
+ private String materials;
+
+ private Integer[] materialList;
+
+
+}
diff --git a/ruoyi-system/src/main/java/com/ruoyi/system/domain/vo/BuyHouseCheckVo.java b/ruoyi-system/src/main/java/com/ruoyi/system/domain/vo/BuyHouseCheckVo.java
new file mode 100644
index 000000000..88916e575
--- /dev/null
+++ b/ruoyi-system/src/main/java/com/ruoyi/system/domain/vo/BuyHouseCheckVo.java
@@ -0,0 +1,52 @@
+package com.ruoyi.system.domain.vo;
+
+import com.alibaba.excel.annotation.ExcelIgnoreUnannotated;
+import com.alibaba.excel.annotation.ExcelProperty;
+import lombok.Data;
+
+
+/**
+ * 购房审核人员不同类型需要的审核人员名单视图对象 buy_house_check
+ *
+ * @author ruoyi
+ * @date 2023-02-24
+ */
+@Data
+@ExcelIgnoreUnannotated
+public class BuyHouseCheckVo {
+
+ private static final long serialVersionUID = 1L;
+
+ /**
+ *
+ */
+ @ExcelProperty(value = "")
+ private Long id;
+
+ /**
+ * 描述
+ */
+ @ExcelProperty(value = "描述")
+ private String remark;
+
+
+ /**
+ * 人员
+ */
+ @ExcelProperty(value = "人员")
+ private String person;
+
+ /**
+ * 需要关联的key
+ */
+ @ExcelProperty(value = "需要关联的key")
+ private String otherKey;
+
+ /**
+ * 关键key
+ */
+ @ExcelProperty(value = "关键key")
+ private String cruxKey;
+
+
+}
diff --git a/ruoyi-system/src/main/java/com/ruoyi/system/domain/vo/BuyHousesMemberVo.java b/ruoyi-system/src/main/java/com/ruoyi/system/domain/vo/BuyHousesMemberVo.java
new file mode 100644
index 000000000..459dcc154
--- /dev/null
+++ b/ruoyi-system/src/main/java/com/ruoyi/system/domain/vo/BuyHousesMemberVo.java
@@ -0,0 +1,75 @@
+package com.ruoyi.system.domain.vo;
+
+import com.alibaba.excel.annotation.ExcelIgnoreUnannotated;
+import com.alibaba.excel.annotation.ExcelProperty;
+import lombok.Data;
+
+
+/**
+ * 购房家属关系视图对象 buy_houses_member
+ *
+ * @author ruoyi
+ * @date 2023-03-15
+ */
+@Data
+@ExcelIgnoreUnannotated
+public class BuyHousesMemberVo {
+
+ private static final long serialVersionUID = 1L;
+
+ /**
+ *
+ */
+ @ExcelProperty(value = "")
+ private Long id;
+
+ /**
+ * 户口簿内页
+ */
+ @ExcelProperty(value = "户口簿内页")
+ private String insidepageUrl;
+
+ /**
+ * 购房申报id
+ */
+ @ExcelProperty(value = "购房申报id")
+ private String buyHousesId;
+
+ /**
+ * 身份证正面
+ */
+ @ExcelProperty(value = "身份证正面")
+ private String frontUrl;
+
+ /**
+ * 关系
+ */
+ @ExcelProperty(value = "关系")
+ private String relation;
+
+ /**
+ * 身份证背面
+ */
+ @ExcelProperty(value = "身份证背面")
+ private String reverseUrl;
+
+ /**
+ * 房屋记录
+ */
+ @ExcelProperty(value = "房屋记录")
+ private String homeRecordUrl;
+
+ /**
+ * 证件号
+ */
+ @ExcelProperty(value = "证件号")
+ private String cardId;
+
+ /**
+ * 姓名
+ */
+ @ExcelProperty(value = "姓名")
+ private String name;
+
+
+}
diff --git a/ruoyi-system/src/main/java/com/ruoyi/system/domain/vo/BuyHousesReviewMemberVo.java b/ruoyi-system/src/main/java/com/ruoyi/system/domain/vo/BuyHousesReviewMemberVo.java
new file mode 100644
index 000000000..c3e1e395c
--- /dev/null
+++ b/ruoyi-system/src/main/java/com/ruoyi/system/domain/vo/BuyHousesReviewMemberVo.java
@@ -0,0 +1,75 @@
+package com.ruoyi.system.domain.vo;
+
+import com.alibaba.excel.annotation.ExcelIgnoreUnannotated;
+import com.alibaba.excel.annotation.ExcelProperty;
+import lombok.Data;
+
+
+/**
+ * 购房复审家属关系视图对象 buy_houses_review_member
+ *
+ * @author ruoyi
+ * @date 2023-03-15
+ */
+@Data
+@ExcelIgnoreUnannotated
+public class BuyHousesReviewMemberVo {
+
+ private static final long serialVersionUID = 1L;
+
+ /**
+ *
+ */
+ @ExcelProperty(value = "")
+ private Long id;
+
+ /**
+ * 户口簿内页
+ */
+ @ExcelProperty(value = "户口簿内页")
+ private String insidepageUrl;
+
+ /**
+ * 购房申报id
+ */
+ @ExcelProperty(value = "购房申报id")
+ private String buyHousesId;
+
+ /**
+ * 身份证正面
+ */
+ @ExcelProperty(value = "身份证正面")
+ private String frontUrl;
+
+ /**
+ * 关系
+ */
+ @ExcelProperty(value = "关系")
+ private String relation;
+
+ /**
+ * 身份证背面
+ */
+ @ExcelProperty(value = "身份证背面")
+ private String reverseUrl;
+
+ /**
+ * 房屋记录
+ */
+ @ExcelProperty(value = "房屋记录")
+ private String homeRecordUrl;
+
+ /**
+ * 证件号
+ */
+ @ExcelProperty(value = "证件号")
+ private String cardId;
+
+ /**
+ * 姓名
+ */
+ @ExcelProperty(value = "姓名")
+ private String name;
+
+
+}
diff --git a/ruoyi-system/src/main/java/com/ruoyi/system/domain/vo/BuyHousesVo.java b/ruoyi-system/src/main/java/com/ruoyi/system/domain/vo/BuyHousesVo.java
new file mode 100644
index 000000000..b414933ce
--- /dev/null
+++ b/ruoyi-system/src/main/java/com/ruoyi/system/domain/vo/BuyHousesVo.java
@@ -0,0 +1,222 @@
+package com.ruoyi.system.domain.vo;
+
+import com.alibaba.excel.annotation.ExcelIgnoreUnannotated;
+import com.alibaba.excel.annotation.ExcelProperty;
+import lombok.Data;
+
+import java.util.Date;
+
+
+/**
+ * 【请填写功能名称】视图对象 buy_houses
+ *
+ * @author ruoyi
+ * @date 2023-02-24
+ */
+@Data
+@ExcelIgnoreUnannotated
+public class BuyHousesVo {
+
+ private static final long serialVersionUID = 1L;
+
+ /**
+ *
+ */
+ @ExcelProperty(value = "")
+ private Long id;
+
+ /**
+ * 户口簿内页/护照内页
+ */
+ @ExcelProperty(value = "户口簿内页/护照内页")
+ private String insidepageUrl;
+
+ /**
+ * 身份证/护照
+ */
+ @ExcelProperty(value = "身份证/护照")
+ private String cardId;
+
+ /**
+ * 承诺书
+ */
+ @ExcelProperty(value = "承诺书")
+ private String commitmentUrl;
+
+ /**
+ * 单位地址
+ */
+ @ExcelProperty(value = "单位地址")
+ private String companyAddress;
+
+ /**
+ * 工作单位
+ */
+ @ExcelProperty(value = "工作单位")
+ private String companyName;
+
+ /**
+ *
+ */
+ @ExcelProperty(value = "")
+ private Date createTime;
+
+ /**
+ * 申明书
+ */
+ @ExcelProperty(value = "申明书")
+ private String declarationUrl;
+
+ /**
+ * 企业所在地 1.新经济活力区 2.交子公园金融商务区 3.高新西区 4.生物城
+ */
+ @ExcelProperty(value = "企业所在地 1.新经济活力区 2.交子公园金融商务区 3.高新西区 4.生物城")
+ private String district;
+
+ /**
+ * 学历
+ */
+ @ExcelProperty(value = "学历")
+ private String education;
+
+ /**
+ * 身份证正面
+ */
+ @ExcelProperty(value = "身份证正面")
+ private String frontUrl;
+
+ /**
+ * 公园城市局审核状态 1.待审核 2.退件 3.不通过 4.通过
+ */
+ @ExcelProperty(value = "公园城市局审核状态 1.待审核 2.退件 3.不通过 4.通过")
+ private String gyStatus;
+
+ /**
+ * 房屋记录
+ */
+ @ExcelProperty(value = "房屋记录")
+ private String homeRecordUrl;
+
+ /**
+ * 户口簿主页
+ */
+ @ExcelProperty(value = "户口簿主页")
+ private String homepageUrl;
+
+ /**
+ * 劳动合同
+ */
+ @ExcelProperty(value = "劳动合同")
+ private String laborContractUrl;
+
+ /**
+ * 企业营业执照
+ */
+ @ExcelProperty(value = "企业营业执照")
+ private String licenseUrl;
+
+ /**
+ * 婚姻状况 1.未婚 2.已婚 3.离异
+ */
+ @ExcelProperty(value = "婚姻状况 1.未婚 2.已婚 3.离异")
+ private String maritalStatus;
+
+ /**
+ * 婚姻证明材料
+ */
+ @ExcelProperty(value = "婚姻证明材料")
+ private String maritalUrl;
+
+ /**
+ * 国籍
+ */
+ @ExcelProperty(value = "国籍")
+ private String nationality;
+
+ /**
+ * 手机号
+ */
+ @ExcelProperty(value = "手机号")
+ private String phone;
+
+ /**
+ * 区域部门审核状态 1.待审核 2.退件 3.不通过 4.通过
+ */
+ @ExcelProperty(value = "区域部门审核状态 1.待审核 2.退件 3.不通过 4.通过")
+ private String qyStatus;
+
+ /**
+ * 身份证背面
+ */
+ @ExcelProperty(value = "身份证背面")
+ private String reverseUrl;
+
+ /**
+ * 性别
+ */
+ @ExcelProperty(value = "性别")
+ private String sex;
+
+ /**
+ * 社会事业局审核状态 1.待审核 2.退件 3.不通过 4.通过
+ */
+ @ExcelProperty(value = "社会事业局审核状态 1.待审核 2.退件 3.不通过 4.通过")
+ private String shStatus;
+
+ /**
+ * 统一社会信用代码
+ */
+ @ExcelProperty(value = "统一社会信用代码")
+ private String socialCode;
+
+ /**
+ * 社保证明
+ */
+ @ExcelProperty(value = "社保证明")
+ private String socialSecurityUrl;
+
+ /**
+ * 状态 1.待提交 2.受理中 3.受理退件 4.受理驳回 5.初审中 6初审不通过 7.初审退件 8.审定中 9.审定不通过 10.审定通过
+ */
+ @ExcelProperty(value = "状态 1.待提交 2.受理中 3.受理退件 4.受理驳回 5.初审中 6初审不通过 7.初审退件 8.审定中 9.审定不通过 10.审定通过")
+ private String status;
+
+ /**
+ * 类型 A B C D
+ */
+ @ExcelProperty(value = "类型 A B C D")
+ private String type;
+
+ /**
+ * 用户id
+ */
+ @ExcelProperty(value = "用户id")
+ private Long userId;
+
+ /**
+ * 姓名
+ */
+ @ExcelProperty(value = "姓名")
+ private String userName;
+
+ /**
+ *
+ */
+ @ExcelProperty(value = "")
+ private Date affTime;
+
+ /**
+ *
+ */
+ @ExcelProperty(value = "")
+ private String pictureInformationUrl;
+
+ /**
+ *
+ */
+ @ExcelProperty(value = "")
+ private String workAddress;
+
+ public String processKey;
+
+}
diff --git a/ruoyi-system/src/main/java/com/ruoyi/system/domain/vo/HousesReviewVo.java b/ruoyi-system/src/main/java/com/ruoyi/system/domain/vo/HousesReviewVo.java
new file mode 100644
index 000000000..e5ccd2edf
--- /dev/null
+++ b/ruoyi-system/src/main/java/com/ruoyi/system/domain/vo/HousesReviewVo.java
@@ -0,0 +1,176 @@
+package com.ruoyi.system.domain.vo;
+
+import com.alibaba.excel.annotation.ExcelIgnoreUnannotated;
+import com.alibaba.excel.annotation.ExcelProperty;
+import com.ruoyi.system.domain.BuyHousesReviewMember;
+import lombok.Data;
+
+import java.util.List;
+
+
+/**
+ * 购房复审登记视图对象 houses_review
+ *
+ * @author ruoyi
+ * @date 2023-03-08
+ */
+@Data
+@ExcelIgnoreUnannotated
+public class HousesReviewVo {
+
+ private static final long serialVersionUID = 1L;
+
+ /**
+ * id
+ */
+// @ExcelProperty(value = "id")
+ private Long id;
+
+ /**
+ * 证件类型
+ */
+ @ExcelProperty(value = "证件类型")
+ private String cardType;
+
+ /**
+ * 身份证号码
+ */
+ @ExcelProperty(value = "身份证号码")
+ private String card;
+
+ /**
+ * 姓名
+ */
+ @ExcelProperty(value = "姓名")
+ private String name;
+
+ /**
+ * 资格序号
+ */
+ @ExcelProperty(value = "资格序号")
+ private String qualification;
+
+ /**
+ * 审核时间
+ */
+ @ExcelProperty(value = "审核时间")
+ private String auditTime;
+
+ /**
+ * 预售证号
+ */
+ @ExcelProperty(value = "预售证号")
+ private String presellCard;
+
+ /**
+ * 交易类型
+ */
+ @ExcelProperty(value = "交易类型")
+ private String dealType;
+
+ /**
+ * 项目名称
+ */
+ @ExcelProperty(value = "项目名称")
+ private String projectName;
+
+ /**
+ * 项目区域
+ */
+ @ExcelProperty(value = "项目区域")
+ private String projectArea;
+
+ /**
+ * 资格确认时间
+ */
+ @ExcelProperty(value = "资格确认时间")
+ private String qualificationConfirmTime;
+
+ /**
+ * 资格预申请时间
+ */
+ @ExcelProperty(value = "资格预申请时间")
+ private String qualificationPreApplyTime;
+
+ /**
+ * 家庭类型
+ */
+ @ExcelProperty(value = "家庭类型")
+ private String familyType;
+
+ /**
+ * 状态
+ */
+ @ExcelProperty(value = "状态")
+ private String status;
+
+ /**
+ * 登记失效时间
+ */
+ @ExcelProperty(value = "登记失效时间")
+ private String registerFailureTime;
+
+ /**
+ * 国籍
+ */
+// @ExcelProperty(value = "国籍")
+ private String nationality;
+
+ /**
+ * 婚姻状况
+ */
+// @ExcelProperty(value = "婚姻状况")
+ private String maritalStatus;
+
+ /**
+ * 单位类型
+ */
+// @ExcelProperty(value = "单位类型")
+ private String companyType;
+
+ /**
+ * 公司名称
+ */
+// @ExcelProperty(value = "公司名称")
+ private String companyName;
+
+ /**
+ * 人才类型
+ */
+// @ExcelProperty(value = "人才类型")
+ private String talentsType;
+
+ /**
+ * 统一社会信用代码
+ */
+// @ExcelProperty(value = "统一社会信用代码")
+ private String creditCode;
+
+ /**
+ * 企业所在地
+ */
+// @ExcelProperty(value = "企业所在地")
+ private String companyAddress;
+
+ /**
+ * 来源
+ */
+// @ExcelProperty(value = "来源")
+ private String sourceBy;
+
+ /**
+ * 流程key
+ */
+
+ private String processKey;
+
+ private String processStatus;
+
+ private String companyAddressArea;
+
+ private List buyHousesMemberList;
+
+
+}
+
+
diff --git a/ruoyi-system/src/main/java/com/ruoyi/system/domain/vo/MaterialModuleVo.java b/ruoyi-system/src/main/java/com/ruoyi/system/domain/vo/MaterialModuleVo.java
new file mode 100644
index 000000000..8530ff635
--- /dev/null
+++ b/ruoyi-system/src/main/java/com/ruoyi/system/domain/vo/MaterialModuleVo.java
@@ -0,0 +1,68 @@
+package com.ruoyi.system.domain.vo;
+
+import com.alibaba.excel.annotation.ExcelIgnoreUnannotated;
+import com.alibaba.excel.annotation.ExcelProperty;
+import com.ruoyi.common.annotation.ExcelDictFormat;
+import com.ruoyi.common.convert.ExcelDictConvert;
+import lombok.Data;
+
+
+/**
+ * 材料模块视图对象 material_module
+ *
+ * @author ruoyi
+ * @date 2023-03-09
+ */
+@Data
+@ExcelIgnoreUnannotated
+public class MaterialModuleVo {
+
+ private static final long serialVersionUID = 1L;
+
+ /**
+ *
+ */
+ @ExcelProperty(value = "")
+ private Long id;
+
+ /**
+ * 材料名称
+ */
+ @ExcelProperty(value = "材料名称")
+ private String materialName;
+
+ /**
+ * 材料key
+ */
+ @ExcelProperty(value = "材料key")
+ private String materialKey;
+
+ /**
+ * 审核部门
+ */
+ @ExcelProperty(value = "审核部门")
+ private String auditDept;
+
+ /**
+ * 描述
+ */
+ @ExcelProperty(value = "描述")
+ private String description;
+
+ /**
+ * 排序
+ */
+ @ExcelProperty(value = "排序")
+ private Long sort;
+
+ /**
+ * 是否必填
+ */
+ @ExcelProperty(value = "是否必填", converter = ExcelDictConvert.class)
+ @ExcelDictFormat(dictType = "sys_yes_no")
+ private String isMust;
+
+ private String file;
+
+
+}
diff --git a/ruoyi-system/src/main/java/com/ruoyi/system/domain/vo/MaterialProofVo.java b/ruoyi-system/src/main/java/com/ruoyi/system/domain/vo/MaterialProofVo.java
new file mode 100644
index 000000000..e581c90bb
--- /dev/null
+++ b/ruoyi-system/src/main/java/com/ruoyi/system/domain/vo/MaterialProofVo.java
@@ -0,0 +1,85 @@
+package com.ruoyi.system.domain.vo;
+
+import com.alibaba.excel.annotation.ExcelIgnoreUnannotated;
+import com.alibaba.excel.annotation.ExcelProperty;
+import lombok.Data;
+
+import java.util.Date;
+
+
+/**
+ * 材料视图对象 material_proof
+ *
+ * @author ruoyi
+ * @date 2023-03-15
+ */
+@Data
+@ExcelIgnoreUnannotated
+public class MaterialProofVo {
+
+ private static final long serialVersionUID = 1L;
+
+ /**
+ *
+ */
+ @ExcelProperty(value = "")
+ private Long id;
+
+ /**
+ * 关联申请id
+ */
+ @ExcelProperty(value = "关联申请id")
+ private String houseId;
+
+ /**
+ * 创建时间
+ */
+ @ExcelProperty(value = "创建时间")
+ private Date createTime;
+
+ /**
+ * 0待审核,1审核失败,2审核成功
+ */
+ @ExcelProperty(value = "0待审核,1审核失败,2审核成功")
+ private Long status;
+
+ /**
+ * 所对应材料的id
+ */
+ @ExcelProperty(value = "所对应材料的id")
+ private String modulePathId;
+
+ /**
+ * 数据
+ */
+ @ExcelProperty(value = "数据")
+ private String file;
+
+ /**
+ * 对应module_paht的字段
+ */
+ @ExcelProperty(value = "对应module_paht的字段")
+ private String materialKey;
+
+ /**
+ * 对应module_path的描述
+ */
+ @ExcelProperty(value = "对应module_path的描述")
+ private String description;
+
+ /**
+ * 审核人
+ */
+ @ExcelProperty(value = "审核人")
+ private String auditDept;
+
+ /**
+ * 审核人类型
+ */
+ @ExcelProperty(value = "审核人类型")
+ private String checkType;
+
+ private String materialName;
+
+
+}
diff --git a/ruoyi-system/src/main/java/com/ruoyi/system/domain/vo/MaterialTalentsVo.java b/ruoyi-system/src/main/java/com/ruoyi/system/domain/vo/MaterialTalentsVo.java
new file mode 100644
index 000000000..5c3a9bc1e
--- /dev/null
+++ b/ruoyi-system/src/main/java/com/ruoyi/system/domain/vo/MaterialTalentsVo.java
@@ -0,0 +1,59 @@
+package com.ruoyi.system.domain.vo;
+
+import com.alibaba.excel.annotation.ExcelIgnoreUnannotated;
+import com.alibaba.excel.annotation.ExcelProperty;
+import lombok.Data;
+
+
+/**
+ * 材料关系视图对象 material_talents
+ *
+ * @author ruoyi
+ * @date 2023-03-09
+ */
+@Data
+@ExcelIgnoreUnannotated
+public class MaterialTalentsVo {
+
+ private static final long serialVersionUID = 1L;
+
+ /**
+ * 主键
+ */
+ @ExcelProperty(value = "主键")
+ private Long id;
+
+ /**
+ * 父id
+ */
+ @ExcelProperty(value = "父id")
+ private Long parentId;
+
+ /**
+ * 值
+ */
+ @ExcelProperty(value = "值")
+ private String talentsValue;
+
+ /**
+ * 节点名称
+ */
+ @ExcelProperty(value = "节点名称")
+ private String talentsName;
+
+ /**
+ * 是否选中
+ */
+ @ExcelProperty(value = "是否选中")
+ private String selected;
+
+ /**
+ * 对应的材料
+ */
+ @ExcelProperty(value = "对应的材料")
+ private String materials;
+
+ private Integer[] materialList;
+
+ private String step;
+}
diff --git a/ruoyi-system/src/main/java/com/ruoyi/system/mapper/BuyHouseCheckMapper.java b/ruoyi-system/src/main/java/com/ruoyi/system/mapper/BuyHouseCheckMapper.java
new file mode 100644
index 000000000..2ebbc7c2e
--- /dev/null
+++ b/ruoyi-system/src/main/java/com/ruoyi/system/mapper/BuyHouseCheckMapper.java
@@ -0,0 +1,15 @@
+package com.ruoyi.system.mapper;
+
+import com.ruoyi.common.core.mapper.BaseMapperPlus;
+import com.ruoyi.system.domain.BuyHouseCheck;
+import com.ruoyi.system.domain.vo.BuyHouseCheckVo;
+
+/**
+ * 购房审核人员不同类型需要的审核人员名单Mapper接口
+ *
+ * @author ruoyi
+ * @date 2023-02-24
+ */
+public interface BuyHouseCheckMapper extends BaseMapperPlus {
+
+}
diff --git a/ruoyi-system/src/main/java/com/ruoyi/system/mapper/BuyHousesMapper.java b/ruoyi-system/src/main/java/com/ruoyi/system/mapper/BuyHousesMapper.java
new file mode 100644
index 000000000..f607d7067
--- /dev/null
+++ b/ruoyi-system/src/main/java/com/ruoyi/system/mapper/BuyHousesMapper.java
@@ -0,0 +1,15 @@
+package com.ruoyi.system.mapper;
+
+import com.ruoyi.common.core.mapper.BaseMapperPlus;
+import com.ruoyi.system.domain.BuyHouses;
+import com.ruoyi.system.domain.vo.BuyHousesVo;
+
+/**
+ * 【请填写功能名称】Mapper接口
+ *
+ * @author ruoyi
+ * @date 2023-02-24
+ */
+public interface BuyHousesMapper extends BaseMapperPlus {
+
+}
diff --git a/ruoyi-system/src/main/java/com/ruoyi/system/mapper/BuyHousesMemberMapper.java b/ruoyi-system/src/main/java/com/ruoyi/system/mapper/BuyHousesMemberMapper.java
new file mode 100644
index 000000000..e8b21d97c
--- /dev/null
+++ b/ruoyi-system/src/main/java/com/ruoyi/system/mapper/BuyHousesMemberMapper.java
@@ -0,0 +1,15 @@
+package com.ruoyi.system.mapper;
+
+import com.ruoyi.common.core.mapper.BaseMapperPlus;
+import com.ruoyi.system.domain.BuyHousesMember;
+import com.ruoyi.system.domain.vo.BuyHousesMemberVo;
+
+/**
+ * 购房家属关系Mapper接口
+ *
+ * @author ruoyi
+ * @date 2023-03-15
+ */
+public interface BuyHousesMemberMapper extends BaseMapperPlus {
+
+}
diff --git a/ruoyi-system/src/main/java/com/ruoyi/system/mapper/BuyHousesReviewMemberMapper.java b/ruoyi-system/src/main/java/com/ruoyi/system/mapper/BuyHousesReviewMemberMapper.java
new file mode 100644
index 000000000..c6d605f1c
--- /dev/null
+++ b/ruoyi-system/src/main/java/com/ruoyi/system/mapper/BuyHousesReviewMemberMapper.java
@@ -0,0 +1,15 @@
+package com.ruoyi.system.mapper;
+
+import com.ruoyi.common.core.mapper.BaseMapperPlus;
+import com.ruoyi.system.domain.BuyHousesReviewMember;
+import com.ruoyi.system.domain.vo.BuyHousesReviewMemberVo;
+
+/**
+ * 购房复审家属关系Mapper接口
+ *
+ * @author ruoyi
+ * @date 2023-03-15
+ */
+public interface BuyHousesReviewMemberMapper extends BaseMapperPlus {
+
+}
diff --git a/ruoyi-system/src/main/java/com/ruoyi/system/mapper/HousesReviewMapper.java b/ruoyi-system/src/main/java/com/ruoyi/system/mapper/HousesReviewMapper.java
new file mode 100644
index 000000000..a376a439b
--- /dev/null
+++ b/ruoyi-system/src/main/java/com/ruoyi/system/mapper/HousesReviewMapper.java
@@ -0,0 +1,15 @@
+package com.ruoyi.system.mapper;
+
+import com.ruoyi.common.core.mapper.BaseMapperPlus;
+import com.ruoyi.system.domain.HousesReview;
+import com.ruoyi.system.domain.vo.HousesReviewVo;
+
+/**
+ * 购房复审登记Mapper接口
+ *
+ * @author ruoyi
+ * @date 2023-03-08
+ */
+public interface HousesReviewMapper extends BaseMapperPlus {
+
+}
diff --git a/ruoyi-system/src/main/java/com/ruoyi/system/mapper/MaterialModuleMapper.java b/ruoyi-system/src/main/java/com/ruoyi/system/mapper/MaterialModuleMapper.java
new file mode 100644
index 000000000..46c866083
--- /dev/null
+++ b/ruoyi-system/src/main/java/com/ruoyi/system/mapper/MaterialModuleMapper.java
@@ -0,0 +1,22 @@
+package com.ruoyi.system.mapper;
+
+import com.baomidou.mybatisplus.core.conditions.Wrapper;
+import com.baomidou.mybatisplus.core.toolkit.Constants;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.ruoyi.common.core.domain.entity.SysUser;
+import com.ruoyi.common.core.mapper.BaseMapperPlus;
+import com.ruoyi.system.domain.MaterialModule;
+import com.ruoyi.system.domain.vo.MaterialModuleVo;
+import org.apache.ibatis.annotations.Param;
+
+/**
+ * 材料模块Mapper接口
+ *
+ * @author ruoyi
+ * @date 2023-03-09
+ */
+public interface MaterialModuleMapper extends BaseMapperPlus {
+
+ Page selectVoPageList(@Param("page") Page page, @Param(Constants.WRAPPER) Wrapper queryWrapper);
+
+}
diff --git a/ruoyi-system/src/main/java/com/ruoyi/system/mapper/MaterialProofMapper.java b/ruoyi-system/src/main/java/com/ruoyi/system/mapper/MaterialProofMapper.java
new file mode 100644
index 000000000..26f55dde8
--- /dev/null
+++ b/ruoyi-system/src/main/java/com/ruoyi/system/mapper/MaterialProofMapper.java
@@ -0,0 +1,15 @@
+package com.ruoyi.system.mapper;
+
+import com.ruoyi.common.core.mapper.BaseMapperPlus;
+import com.ruoyi.system.domain.MaterialProof;
+import com.ruoyi.system.domain.vo.MaterialProofVo;
+
+/**
+ * 材料Mapper接口
+ *
+ * @author ruoyi
+ * @date 2023-03-15
+ */
+public interface MaterialProofMapper extends BaseMapperPlus {
+
+}
diff --git a/ruoyi-system/src/main/java/com/ruoyi/system/mapper/MaterialTalentsMapper.java b/ruoyi-system/src/main/java/com/ruoyi/system/mapper/MaterialTalentsMapper.java
new file mode 100644
index 000000000..9cf8ab515
--- /dev/null
+++ b/ruoyi-system/src/main/java/com/ruoyi/system/mapper/MaterialTalentsMapper.java
@@ -0,0 +1,19 @@
+package com.ruoyi.system.mapper;
+
+import com.ruoyi.common.core.mapper.BaseMapperPlus;
+import com.ruoyi.system.domain.MaterialTalents;
+import com.ruoyi.system.domain.bo.MaterialTalentsBo;
+import com.ruoyi.system.domain.vo.MaterialTalentsVo;
+
+import java.util.List;
+
+/**
+ * 材料关系Mapper接口
+ *
+ * @author ruoyi
+ * @date 2023-03-09
+ */
+public interface MaterialTalentsMapper extends BaseMapperPlus {
+
+ List selectVoListSpecial(MaterialTalentsBo materialTalents);
+}
diff --git a/ruoyi-system/src/main/java/com/ruoyi/system/service/IBuyHousesMemberService.java b/ruoyi-system/src/main/java/com/ruoyi/system/service/IBuyHousesMemberService.java
new file mode 100644
index 000000000..bffb35583
--- /dev/null
+++ b/ruoyi-system/src/main/java/com/ruoyi/system/service/IBuyHousesMemberService.java
@@ -0,0 +1,48 @@
+package com.ruoyi.system.service;
+
+import com.ruoyi.common.core.domain.PageQuery;
+import com.ruoyi.common.core.page.TableDataInfo;
+import com.ruoyi.system.domain.bo.BuyHousesMemberBo;
+import com.ruoyi.system.domain.vo.BuyHousesMemberVo;
+
+import java.util.Collection;
+import java.util.List;
+
+/**
+ * 购房家属关系Service接口
+ *
+ * @author ruoyi
+ * @date 2023-03-15
+ */
+public interface IBuyHousesMemberService {
+
+ /**
+ * 查询购房家属关系
+ */
+ BuyHousesMemberVo queryById(Long id);
+
+ /**
+ * 查询购房家属关系列表
+ */
+ TableDataInfo queryPageList(BuyHousesMemberBo bo, PageQuery pageQuery);
+
+ /**
+ * 查询购房家属关系列表
+ */
+ List queryList(BuyHousesMemberBo bo);
+
+ /**
+ * 新增购房家属关系
+ */
+ Boolean insertByBo(BuyHousesMemberBo bo);
+
+ /**
+ * 修改购房家属关系
+ */
+ Boolean updateByBo(BuyHousesMemberBo bo);
+
+ /**
+ * 校验并批量删除购房家属关系信息
+ */
+ Boolean deleteWithValidByIds(Collection ids, Boolean isValid);
+}
diff --git a/ruoyi-system/src/main/java/com/ruoyi/system/service/IBuyHousesReviewMemberService.java b/ruoyi-system/src/main/java/com/ruoyi/system/service/IBuyHousesReviewMemberService.java
new file mode 100644
index 000000000..fea479694
--- /dev/null
+++ b/ruoyi-system/src/main/java/com/ruoyi/system/service/IBuyHousesReviewMemberService.java
@@ -0,0 +1,48 @@
+package com.ruoyi.system.service;
+
+import com.ruoyi.common.core.domain.PageQuery;
+import com.ruoyi.common.core.page.TableDataInfo;
+import com.ruoyi.system.domain.bo.BuyHousesReviewMemberBo;
+import com.ruoyi.system.domain.vo.BuyHousesReviewMemberVo;
+
+import java.util.Collection;
+import java.util.List;
+
+/**
+ * 购房复审家属关系Service接口
+ *
+ * @author ruoyi
+ * @date 2023-03-15
+ */
+public interface IBuyHousesReviewMemberService {
+
+ /**
+ * 查询购房复审家属关系
+ */
+ BuyHousesReviewMemberVo queryById(Long id);
+
+ /**
+ * 查询购房复审家属关系列表
+ */
+ TableDataInfo queryPageList(BuyHousesReviewMemberBo bo, PageQuery pageQuery);
+
+ /**
+ * 查询购房复审家属关系列表
+ */
+ List queryList(BuyHousesReviewMemberBo bo);
+
+ /**
+ * 新增购房复审家属关系
+ */
+ Boolean insertByBo(BuyHousesReviewMemberBo bo);
+
+ /**
+ * 修改购房复审家属关系
+ */
+ Boolean updateByBo(BuyHousesReviewMemberBo bo);
+
+ /**
+ * 校验并批量删除购房复审家属关系信息
+ */
+ Boolean deleteWithValidByIds(Collection ids, Boolean isValid);
+}
diff --git a/ruoyi-system/src/main/java/com/ruoyi/system/service/IBuyHousesService.java b/ruoyi-system/src/main/java/com/ruoyi/system/service/IBuyHousesService.java
new file mode 100644
index 000000000..e9ac642ac
--- /dev/null
+++ b/ruoyi-system/src/main/java/com/ruoyi/system/service/IBuyHousesService.java
@@ -0,0 +1,48 @@
+package com.ruoyi.system.service;
+
+import com.ruoyi.common.core.domain.PageQuery;
+import com.ruoyi.common.core.page.TableDataInfo;
+import com.ruoyi.system.domain.bo.BuyHousesBo;
+import com.ruoyi.system.domain.vo.BuyHousesVo;
+
+import java.util.Collection;
+import java.util.List;
+
+/**
+ * 【请填写功能名称】Service接口
+ *
+ * @author ruoyi
+ * @date 2023-02-24
+ */
+public interface IBuyHousesService {
+
+ /**
+ * 查询【请填写功能名称】
+ */
+ BuyHousesVo queryById(Long id);
+
+ /**
+ * 查询【请填写功能名称】列表
+ */
+ TableDataInfo queryPageList(BuyHousesBo bo, PageQuery pageQuery);
+
+ /**
+ * 查询【请填写功能名称】列表
+ */
+ List queryList(BuyHousesBo bo);
+
+ /**
+ * 新增【请填写功能名称】
+ */
+ Boolean insertByBo(BuyHousesBo bo);
+
+ /**
+ * 修改【请填写功能名称】
+ */
+ Boolean updateByBo(BuyHousesBo bo);
+
+ /**
+ * 校验并批量删除【请填写功能名称】信息
+ */
+ Boolean deleteWithValidByIds(Collection ids, Boolean isValid);
+}
diff --git a/ruoyi-system/src/main/java/com/ruoyi/system/service/IHousesReviewService.java b/ruoyi-system/src/main/java/com/ruoyi/system/service/IHousesReviewService.java
new file mode 100644
index 000000000..02ad4a6aa
--- /dev/null
+++ b/ruoyi-system/src/main/java/com/ruoyi/system/service/IHousesReviewService.java
@@ -0,0 +1,58 @@
+package com.ruoyi.system.service;
+
+import com.ruoyi.common.core.domain.PageQuery;
+import com.ruoyi.common.core.domain.R;
+import com.ruoyi.common.core.page.TableDataInfo;
+import com.ruoyi.system.domain.HousesReview;
+import com.ruoyi.system.domain.bo.HousesReviewBo;
+import com.ruoyi.system.domain.vo.HousesReviewVo;
+
+import java.util.Collection;
+import java.util.List;
+
+/**
+ * 购房复审登记Service接口
+ *
+ * @author ruoyi
+ * @date 2023-03-08
+ */
+public interface IHousesReviewService {
+
+ /**
+ * 查询购房复审登记
+ */
+ HousesReviewVo queryById(Long id);
+
+ /**
+ * 查询购房复审登记列表
+ */
+ TableDataInfo queryPageList(HousesReviewBo bo, PageQuery pageQuery);
+
+ /**
+ * 查询购房复审登记列表
+ */
+ List queryList(HousesReviewBo bo);
+
+ /**
+ * 新增购房复审登记
+ */
+ Boolean insertByBo(HousesReviewBo bo);
+
+ /**
+ * 修改购房复审登记
+ */
+ Boolean updateByBo(HousesReviewBo bo);
+
+ /**
+ * 校验并批量删除购房复审登记信息
+ */
+ Boolean deleteWithValidByIds(Collection ids, Boolean isValid);
+
+ Boolean saveBatch(List list);
+
+ R> getMaterialInfo(HousesReviewBo bo);
+
+ HousesReviewVo queryByIdOne(Long id);
+
+ R> getMaterialByBusinessId(Long id);
+}
diff --git a/ruoyi-system/src/main/java/com/ruoyi/system/service/IMaterialModuleService.java b/ruoyi-system/src/main/java/com/ruoyi/system/service/IMaterialModuleService.java
new file mode 100644
index 000000000..ed8f3fc4f
--- /dev/null
+++ b/ruoyi-system/src/main/java/com/ruoyi/system/service/IMaterialModuleService.java
@@ -0,0 +1,51 @@
+package com.ruoyi.system.service;
+
+import com.ruoyi.common.core.domain.PageQuery;
+import com.ruoyi.common.core.domain.R;
+import com.ruoyi.common.core.page.TableDataInfo;
+import com.ruoyi.system.domain.bo.MaterialModuleBo;
+import com.ruoyi.system.domain.vo.MaterialModuleVo;
+
+import java.util.Collection;
+import java.util.List;
+
+/**
+ * 材料模块Service接口
+ *
+ * @author ruoyi
+ * @date 2023-03-09
+ */
+public interface IMaterialModuleService {
+
+ /**
+ * 查询材料模块
+ */
+ MaterialModuleVo queryById(Long id);
+
+ /**
+ * 查询材料模块列表
+ */
+ TableDataInfo queryPageList(MaterialModuleBo bo, PageQuery pageQuery);
+
+ /**
+ * 查询材料模块列表
+ */
+ List queryList(MaterialModuleBo bo);
+
+ /**
+ * 新增材料模块
+ */
+ Boolean insertByBo(MaterialModuleBo bo);
+
+ /**
+ * 修改材料模块
+ */
+ Boolean updateByBo(MaterialModuleBo bo);
+
+ /**
+ * 校验并批量删除材料模块信息
+ */
+ Boolean deleteWithValidByIds(Collection ids, Boolean isValid);
+
+ R selectMaterialList(MaterialModuleBo bo);
+}
diff --git a/ruoyi-system/src/main/java/com/ruoyi/system/service/IMaterialProofService.java b/ruoyi-system/src/main/java/com/ruoyi/system/service/IMaterialProofService.java
new file mode 100644
index 000000000..c098b49ba
--- /dev/null
+++ b/ruoyi-system/src/main/java/com/ruoyi/system/service/IMaterialProofService.java
@@ -0,0 +1,48 @@
+package com.ruoyi.system.service;
+
+import com.ruoyi.common.core.domain.PageQuery;
+import com.ruoyi.common.core.page.TableDataInfo;
+import com.ruoyi.system.domain.bo.MaterialProofBo;
+import com.ruoyi.system.domain.vo.MaterialProofVo;
+
+import java.util.Collection;
+import java.util.List;
+
+/**
+ * 材料Service接口
+ *
+ * @author ruoyi
+ * @date 2023-03-15
+ */
+public interface IMaterialProofService {
+
+ /**
+ * 查询材料
+ */
+ MaterialProofVo queryById(Long id);
+
+ /**
+ * 查询材料列表
+ */
+ TableDataInfo queryPageList(MaterialProofBo bo, PageQuery pageQuery);
+
+ /**
+ * 查询材料列表
+ */
+ List queryList(MaterialProofBo bo);
+
+ /**
+ * 新增材料
+ */
+ Boolean insertByBo(MaterialProofBo bo);
+
+ /**
+ * 修改材料
+ */
+ Boolean updateByBo(MaterialProofBo bo);
+
+ /**
+ * 校验并批量删除材料信息
+ */
+ Boolean deleteWithValidByIds(Collection ids, Boolean isValid);
+}
diff --git a/ruoyi-system/src/main/java/com/ruoyi/system/service/IMaterialTalentsService.java b/ruoyi-system/src/main/java/com/ruoyi/system/service/IMaterialTalentsService.java
new file mode 100644
index 000000000..bcd5afce2
--- /dev/null
+++ b/ruoyi-system/src/main/java/com/ruoyi/system/service/IMaterialTalentsService.java
@@ -0,0 +1,42 @@
+package com.ruoyi.system.service;
+
+import com.ruoyi.system.domain.bo.MaterialTalentsBo;
+import com.ruoyi.system.domain.vo.MaterialTalentsVo;
+
+import java.util.Collection;
+import java.util.List;
+
+/**
+ * 材料关系Service接口
+ *
+ * @author ruoyi
+ * @date 2023-03-09
+ */
+public interface IMaterialTalentsService {
+
+ /**
+ * 查询材料关系
+ */
+ MaterialTalentsVo queryById(Long id);
+
+
+ /**
+ * 查询材料关系列表
+ */
+ List queryList(MaterialTalentsBo bo);
+
+ /**
+ * 新增材料关系
+ */
+ Boolean insertByBo(MaterialTalentsBo bo);
+
+ /**
+ * 修改材料关系
+ */
+ Boolean updateByBo(MaterialTalentsBo bo);
+
+ /**
+ * 校验并批量删除材料关系信息
+ */
+ Boolean deleteWithValidByIds(Collection ids, Boolean isValid);
+}
diff --git a/ruoyi-system/src/main/java/com/ruoyi/system/service/impl/BuyHousesMemberServiceImpl.java b/ruoyi-system/src/main/java/com/ruoyi/system/service/impl/BuyHousesMemberServiceImpl.java
new file mode 100644
index 000000000..00e5c7c50
--- /dev/null
+++ b/ruoyi-system/src/main/java/com/ruoyi/system/service/impl/BuyHousesMemberServiceImpl.java
@@ -0,0 +1,116 @@
+package com.ruoyi.system.service.impl;
+
+import cn.hutool.core.bean.BeanUtil;
+import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
+import com.baomidou.mybatisplus.core.toolkit.Wrappers;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.ruoyi.common.core.domain.PageQuery;
+import com.ruoyi.common.core.page.TableDataInfo;
+import com.ruoyi.common.utils.StringUtils;
+import com.ruoyi.system.domain.BuyHousesMember;
+import com.ruoyi.system.domain.bo.BuyHousesMemberBo;
+import com.ruoyi.system.domain.vo.BuyHousesMemberVo;
+import com.ruoyi.system.mapper.BuyHousesMemberMapper;
+import com.ruoyi.system.service.IBuyHousesMemberService;
+import lombok.RequiredArgsConstructor;
+import org.springframework.stereotype.Service;
+
+import java.util.Collection;
+import java.util.List;
+import java.util.Map;
+
+/**
+ * 购房家属关系Service业务层处理
+ *
+ * @author ruoyi
+ * @date 2023-03-15
+ */
+@RequiredArgsConstructor
+@Service
+public class BuyHousesMemberServiceImpl implements IBuyHousesMemberService {
+
+ private final BuyHousesMemberMapper baseMapper;
+
+ /**
+ * 查询购房家属关系
+ */
+ @Override
+ public BuyHousesMemberVo queryById(Long id){
+ return baseMapper.selectVoById(id);
+ }
+
+ /**
+ * 查询购房家属关系列表
+ */
+ @Override
+ public TableDataInfo queryPageList(BuyHousesMemberBo bo, PageQuery pageQuery) {
+ LambdaQueryWrapper lqw = buildQueryWrapper(bo);
+ Page result = baseMapper.selectVoPage(pageQuery.build(), lqw);
+ return TableDataInfo.build(result);
+ }
+
+ /**
+ * 查询购房家属关系列表
+ */
+ @Override
+ public List queryList(BuyHousesMemberBo bo) {
+ LambdaQueryWrapper lqw = buildQueryWrapper(bo);
+ return baseMapper.selectVoList(lqw);
+ }
+
+ private LambdaQueryWrapper buildQueryWrapper(BuyHousesMemberBo bo) {
+ Map params = bo.getParams();
+ LambdaQueryWrapper lqw = Wrappers.lambdaQuery();
+ lqw.eq(StringUtils.isNotBlank(bo.getInsidepageUrl()), BuyHousesMember::getInsidepageUrl, bo.getInsidepageUrl());
+ lqw.eq(bo.getBuyHousesId() != null, BuyHousesMember::getBuyHousesId, bo.getBuyHousesId());
+ lqw.eq(StringUtils.isNotBlank(bo.getFrontUrl()), BuyHousesMember::getFrontUrl, bo.getFrontUrl());
+ lqw.eq(StringUtils.isNotBlank(bo.getRelation()), BuyHousesMember::getRelation, bo.getRelation());
+ lqw.eq(StringUtils.isNotBlank(bo.getReverseUrl()), BuyHousesMember::getReverseUrl, bo.getReverseUrl());
+ lqw.eq(StringUtils.isNotBlank(bo.getHomeRecordUrl()), BuyHousesMember::getHomeRecordUrl, bo.getHomeRecordUrl());
+ lqw.eq(StringUtils.isNotBlank(bo.getCardId()), BuyHousesMember::getCardId, bo.getCardId());
+ lqw.like(StringUtils.isNotBlank(bo.getName()), BuyHousesMember::getName, bo.getName());
+ return lqw;
+ }
+
+ /**
+ * 新增购房家属关系
+ */
+ @Override
+ public Boolean insertByBo(BuyHousesMemberBo bo) {
+ BuyHousesMember add = BeanUtil.toBean(bo, BuyHousesMember.class);
+ validEntityBeforeSave(add);
+ boolean flag = baseMapper.insert(add) > 0;
+ if (flag) {
+ bo.setId(add.getId());
+ }
+ return flag;
+ }
+
+ /**
+ * 修改购房家属关系
+ */
+ @Override
+ public Boolean updateByBo(BuyHousesMemberBo bo) {
+ BuyHousesMember update = BeanUtil.toBean(bo, BuyHousesMember.class);
+ validEntityBeforeSave(update);
+ return baseMapper.updateById(update) > 0;
+ }
+
+ /**
+ * 保存前的数据校验
+ */
+ private void validEntityBeforeSave(BuyHousesMember entity){
+ //TODO 做一些数据校验,如唯一约束
+ }
+
+ /**
+ * 批量删除购房家属关系
+ */
+ @Override
+ public Boolean deleteWithValidByIds(Collection ids, Boolean isValid) {
+ if(isValid){
+ //TODO 做一些业务上的校验,判断是否需要校验
+ }
+ return baseMapper.deleteBatchIds(ids) > 0;
+ }
+}
diff --git a/ruoyi-system/src/main/java/com/ruoyi/system/service/impl/BuyHousesReviewMemberServiceImpl.java b/ruoyi-system/src/main/java/com/ruoyi/system/service/impl/BuyHousesReviewMemberServiceImpl.java
new file mode 100644
index 000000000..c3d6c8e0a
--- /dev/null
+++ b/ruoyi-system/src/main/java/com/ruoyi/system/service/impl/BuyHousesReviewMemberServiceImpl.java
@@ -0,0 +1,116 @@
+package com.ruoyi.system.service.impl;
+
+import cn.hutool.core.bean.BeanUtil;
+import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
+import com.baomidou.mybatisplus.core.toolkit.Wrappers;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.ruoyi.common.core.domain.PageQuery;
+import com.ruoyi.common.core.page.TableDataInfo;
+import com.ruoyi.common.utils.StringUtils;
+import com.ruoyi.system.domain.BuyHousesReviewMember;
+import com.ruoyi.system.domain.bo.BuyHousesReviewMemberBo;
+import com.ruoyi.system.domain.vo.BuyHousesReviewMemberVo;
+import com.ruoyi.system.mapper.BuyHousesReviewMemberMapper;
+import com.ruoyi.system.service.IBuyHousesReviewMemberService;
+import lombok.RequiredArgsConstructor;
+import org.springframework.stereotype.Service;
+
+import java.util.Collection;
+import java.util.List;
+import java.util.Map;
+
+/**
+ * 购房复审家属关系Service业务层处理
+ *
+ * @author ruoyi
+ * @date 2023-03-15
+ */
+@RequiredArgsConstructor
+@Service
+public class BuyHousesReviewMemberServiceImpl implements IBuyHousesReviewMemberService {
+
+ private final BuyHousesReviewMemberMapper baseMapper;
+
+ /**
+ * 查询购房复审家属关系
+ */
+ @Override
+ public BuyHousesReviewMemberVo queryById(Long id){
+ return baseMapper.selectVoById(id);
+ }
+
+ /**
+ * 查询购房复审家属关系列表
+ */
+ @Override
+ public TableDataInfo queryPageList(BuyHousesReviewMemberBo bo, PageQuery pageQuery) {
+ LambdaQueryWrapper lqw = buildQueryWrapper(bo);
+ Page result = baseMapper.selectVoPage(pageQuery.build(), lqw);
+ return TableDataInfo.build(result);
+ }
+
+ /**
+ * 查询购房复审家属关系列表
+ */
+ @Override
+ public List queryList(BuyHousesReviewMemberBo bo) {
+ LambdaQueryWrapper lqw = buildQueryWrapper(bo);
+ return baseMapper.selectVoList(lqw);
+ }
+
+ private LambdaQueryWrapper buildQueryWrapper(BuyHousesReviewMemberBo bo) {
+ Map params = bo.getParams();
+ LambdaQueryWrapper lqw = Wrappers.lambdaQuery();
+ lqw.eq(StringUtils.isNotBlank(bo.getInsidepageUrl()), BuyHousesReviewMember::getInsidepageUrl, bo.getInsidepageUrl());
+ lqw.eq(bo.getBuyHousesId() != null, BuyHousesReviewMember::getBuyHousesId, bo.getBuyHousesId());
+ lqw.eq(StringUtils.isNotBlank(bo.getFrontUrl()), BuyHousesReviewMember::getFrontUrl, bo.getFrontUrl());
+ lqw.eq(StringUtils.isNotBlank(bo.getRelation()), BuyHousesReviewMember::getRelation, bo.getRelation());
+ lqw.eq(StringUtils.isNotBlank(bo.getReverseUrl()), BuyHousesReviewMember::getReverseUrl, bo.getReverseUrl());
+ lqw.eq(StringUtils.isNotBlank(bo.getHomeRecordUrl()), BuyHousesReviewMember::getHomeRecordUrl, bo.getHomeRecordUrl());
+ lqw.eq(StringUtils.isNotBlank(bo.getCardId()), BuyHousesReviewMember::getCardId, bo.getCardId());
+ lqw.like(StringUtils.isNotBlank(bo.getName()), BuyHousesReviewMember::getName, bo.getName());
+ return lqw;
+ }
+
+ /**
+ * 新增购房复审家属关系
+ */
+ @Override
+ public Boolean insertByBo(BuyHousesReviewMemberBo bo) {
+ BuyHousesReviewMember add = BeanUtil.toBean(bo, BuyHousesReviewMember.class);
+ validEntityBeforeSave(add);
+ boolean flag = baseMapper.insert(add) > 0;
+ if (flag) {
+ bo.setId(add.getId());
+ }
+ return flag;
+ }
+
+ /**
+ * 修改购房复审家属关系
+ */
+ @Override
+ public Boolean updateByBo(BuyHousesReviewMemberBo bo) {
+ BuyHousesReviewMember update = BeanUtil.toBean(bo, BuyHousesReviewMember.class);
+ validEntityBeforeSave(update);
+ return baseMapper.updateById(update) > 0;
+ }
+
+ /**
+ * 保存前的数据校验
+ */
+ private void validEntityBeforeSave(BuyHousesReviewMember entity){
+ //TODO 做一些数据校验,如唯一约束
+ }
+
+ /**
+ * 批量删除购房复审家属关系
+ */
+ @Override
+ public Boolean deleteWithValidByIds(Collection ids, Boolean isValid) {
+ if(isValid){
+ //TODO 做一些业务上的校验,判断是否需要校验
+ }
+ return baseMapper.deleteBatchIds(ids) > 0;
+ }
+}
diff --git a/ruoyi-system/src/main/java/com/ruoyi/system/service/impl/BuyHousesServiceImpl.java b/ruoyi-system/src/main/java/com/ruoyi/system/service/impl/BuyHousesServiceImpl.java
new file mode 100644
index 000000000..2e2f81ed8
--- /dev/null
+++ b/ruoyi-system/src/main/java/com/ruoyi/system/service/impl/BuyHousesServiceImpl.java
@@ -0,0 +1,140 @@
+package com.ruoyi.system.service.impl;
+
+import cn.hutool.core.bean.BeanUtil;
+import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
+import com.baomidou.mybatisplus.core.toolkit.Wrappers;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.ruoyi.common.core.domain.PageQuery;
+import com.ruoyi.common.core.page.TableDataInfo;
+import com.ruoyi.common.utils.StringUtils;
+import com.ruoyi.system.domain.BuyHouses;
+import com.ruoyi.system.domain.bo.BuyHousesBo;
+import com.ruoyi.system.domain.vo.BuyHousesVo;
+import com.ruoyi.system.mapper.BuyHousesMapper;
+import com.ruoyi.system.service.IBuyHousesService;
+import lombok.RequiredArgsConstructor;
+import org.springframework.stereotype.Service;
+
+import java.util.Collection;
+import java.util.List;
+import java.util.Map;
+
+/**
+ * 【请填写功能名称】Service业务层处理
+ *
+ * @author ruoyi
+ * @date 2023-02-24
+ */
+@RequiredArgsConstructor
+@Service
+public class BuyHousesServiceImpl implements IBuyHousesService {
+
+ private final BuyHousesMapper baseMapper;
+
+ /**
+ * 查询【请填写功能名称】
+ */
+ @Override
+ public BuyHousesVo queryById(Long id){
+ return baseMapper.selectVoById(id);
+ }
+
+ /**
+ * 查询【请填写功能名称】列表
+ */
+ @Override
+ public TableDataInfo queryPageList(BuyHousesBo bo, PageQuery pageQuery) {
+ LambdaQueryWrapper lqw = buildQueryWrapper(bo);
+ Page result = baseMapper.selectVoPage(pageQuery.build(), lqw);
+ return TableDataInfo.build(result);
+ }
+
+ /**
+ * 查询【请填写功能名称】列表
+ */
+ @Override
+ public List queryList(BuyHousesBo bo) {
+ LambdaQueryWrapper lqw = buildQueryWrapper(bo);
+ return baseMapper.selectVoList(lqw);
+ }
+
+ private LambdaQueryWrapper buildQueryWrapper(BuyHousesBo bo) {
+ Map params = bo.getParams();
+ LambdaQueryWrapper lqw = Wrappers.lambdaQuery();
+ lqw.eq(StringUtils.isNotBlank(bo.getInsidepageUrl()), BuyHouses::getInsidepageUrl, bo.getInsidepageUrl());
+ lqw.eq(StringUtils.isNotBlank(bo.getCardId()), BuyHouses::getCardId, bo.getCardId());
+ lqw.eq(StringUtils.isNotBlank(bo.getCommitmentUrl()), BuyHouses::getCommitmentUrl, bo.getCommitmentUrl());
+ lqw.eq(StringUtils.isNotBlank(bo.getCompanyAddress()), BuyHouses::getCompanyAddress, bo.getCompanyAddress());
+ lqw.like(StringUtils.isNotBlank(bo.getCompanyName()), BuyHouses::getCompanyName, bo.getCompanyName());
+ lqw.eq(bo.getCreateTime() != null, BuyHouses::getCreateTime, bo.getCreateTime());
+ lqw.eq(StringUtils.isNotBlank(bo.getDeclarationUrl()), BuyHouses::getDeclarationUrl, bo.getDeclarationUrl());
+ lqw.eq(StringUtils.isNotBlank(bo.getDistrict()), BuyHouses::getDistrict, bo.getDistrict());
+ lqw.eq(StringUtils.isNotBlank(bo.getEducation()), BuyHouses::getEducation, bo.getEducation());
+ lqw.eq(StringUtils.isNotBlank(bo.getFrontUrl()), BuyHouses::getFrontUrl, bo.getFrontUrl());
+ lqw.eq(StringUtils.isNotBlank(bo.getGyStatus()), BuyHouses::getGyStatus, bo.getGyStatus());
+ lqw.eq(StringUtils.isNotBlank(bo.getHomeRecordUrl()), BuyHouses::getHomeRecordUrl, bo.getHomeRecordUrl());
+ lqw.eq(StringUtils.isNotBlank(bo.getHomepageUrl()), BuyHouses::getHomepageUrl, bo.getHomepageUrl());
+ lqw.eq(StringUtils.isNotBlank(bo.getLaborContractUrl()), BuyHouses::getLaborContractUrl, bo.getLaborContractUrl());
+ lqw.eq(StringUtils.isNotBlank(bo.getLicenseUrl()), BuyHouses::getLicenseUrl, bo.getLicenseUrl());
+ lqw.eq(StringUtils.isNotBlank(bo.getMaritalStatus()), BuyHouses::getMaritalStatus, bo.getMaritalStatus());
+ lqw.eq(StringUtils.isNotBlank(bo.getMaritalUrl()), BuyHouses::getMaritalUrl, bo.getMaritalUrl());
+ lqw.eq(StringUtils.isNotBlank(bo.getNationality()), BuyHouses::getNationality, bo.getNationality());
+ lqw.eq(StringUtils.isNotBlank(bo.getPhone()), BuyHouses::getPhone, bo.getPhone());
+ lqw.eq(StringUtils.isNotBlank(bo.getQyStatus()), BuyHouses::getQyStatus, bo.getQyStatus());
+ lqw.eq(StringUtils.isNotBlank(bo.getReverseUrl()), BuyHouses::getReverseUrl, bo.getReverseUrl());
+ lqw.eq(StringUtils.isNotBlank(bo.getSex()), BuyHouses::getSex, bo.getSex());
+ lqw.eq(StringUtils.isNotBlank(bo.getShStatus()), BuyHouses::getShStatus, bo.getShStatus());
+ lqw.eq(StringUtils.isNotBlank(bo.getSocialCode()), BuyHouses::getSocialCode, bo.getSocialCode());
+ lqw.eq(StringUtils.isNotBlank(bo.getSocialSecurityUrl()), BuyHouses::getSocialSecurityUrl, bo.getSocialSecurityUrl());
+ lqw.eq(StringUtils.isNotBlank(bo.getStatus()), BuyHouses::getStatus, bo.getStatus());
+ lqw.eq(StringUtils.isNotBlank(bo.getType()), BuyHouses::getType, bo.getType());
+ lqw.eq(bo.getUserId() != null, BuyHouses::getUserId, bo.getUserId());
+ lqw.like(StringUtils.isNotBlank(bo.getUserName()), BuyHouses::getUserName, bo.getUserName());
+ lqw.eq(bo.getAffTime() != null, BuyHouses::getAffTime, bo.getAffTime());
+ lqw.eq(StringUtils.isNotBlank(bo.getPictureInformationUrl()), BuyHouses::getPictureInformationUrl, bo.getPictureInformationUrl());
+ lqw.eq(StringUtils.isNotBlank(bo.getWorkAddress()), BuyHouses::getWorkAddress, bo.getWorkAddress());
+ return lqw;
+ }
+
+ /**
+ * 新增【请填写功能名称】
+ */
+ @Override
+ public Boolean insertByBo(BuyHousesBo bo) {
+ BuyHouses add = BeanUtil.toBean(bo, BuyHouses.class);
+ validEntityBeforeSave(add);
+ boolean flag = baseMapper.insert(add) > 0;
+ if (flag) {
+ bo.setId(add.getId());
+ }
+ return flag;
+ }
+
+ /**
+ * 修改【请填写功能名称】
+ */
+ @Override
+ public Boolean updateByBo(BuyHousesBo bo) {
+ BuyHouses update = BeanUtil.toBean(bo, BuyHouses.class);
+ validEntityBeforeSave(update);
+ return baseMapper.updateById(update) > 0;
+ }
+
+ /**
+ * 保存前的数据校验
+ */
+ private void validEntityBeforeSave(BuyHouses entity){
+ //TODO 做一些数据校验,如唯一约束
+ }
+
+ /**
+ * 批量删除【请填写功能名称】
+ */
+ @Override
+ public Boolean deleteWithValidByIds(Collection ids, Boolean isValid) {
+ if(isValid){
+ //TODO 做一些业务上的校验,判断是否需要校验
+ }
+ return baseMapper.deleteBatchIds(ids) > 0;
+ }
+}
diff --git a/ruoyi-system/src/main/java/com/ruoyi/system/service/impl/HousesReviewServiceImpl.java b/ruoyi-system/src/main/java/com/ruoyi/system/service/impl/HousesReviewServiceImpl.java
new file mode 100644
index 000000000..f2a960c92
--- /dev/null
+++ b/ruoyi-system/src/main/java/com/ruoyi/system/service/impl/HousesReviewServiceImpl.java
@@ -0,0 +1,331 @@
+package com.ruoyi.system.service.impl;
+
+import cn.hutool.core.bean.BeanUtil;
+import cn.hutool.core.util.ObjectUtil;
+import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
+import com.baomidou.mybatisplus.core.toolkit.Wrappers;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.ruoyi.common.core.domain.PageQuery;
+import com.ruoyi.common.core.domain.R;
+import com.ruoyi.common.core.page.TableDataInfo;
+import com.ruoyi.common.utils.StringUtils;
+import com.ruoyi.system.domain.BuyHousesReviewMember;
+import com.ruoyi.system.domain.HousesReview;
+import com.ruoyi.system.domain.MaterialModule;
+import com.ruoyi.system.domain.MaterialProof;
+import com.ruoyi.system.domain.bo.HousesReviewBo;
+import com.ruoyi.system.domain.vo.HousesReviewVo;
+import com.ruoyi.system.domain.vo.MaterialModuleVo;
+import com.ruoyi.system.mapper.BuyHousesReviewMemberMapper;
+import com.ruoyi.system.mapper.HousesReviewMapper;
+import com.ruoyi.system.mapper.MaterialProofMapper;
+import com.ruoyi.system.service.IHousesReviewService;
+import com.ruoyi.work.domain.vo.ProcessVo;
+import com.ruoyi.work.utils.WorkComplyUtils;
+import lombok.RequiredArgsConstructor;
+import org.springframework.stereotype.Service;
+import org.springframework.transaction.annotation.Transactional;
+
+import java.util.ArrayList;
+import java.util.Collection;
+import java.util.List;
+import java.util.Map;
+import java.util.stream.Collectors;
+
+/**
+ * 购房复审登记Service业务层处理
+ *
+ * @author ruoyi
+ * @date 2023-03-08
+ */
+@RequiredArgsConstructor
+@Service
+@Transactional
+public class HousesReviewServiceImpl implements IHousesReviewService {
+
+ private final HousesReviewMapper baseMapper;
+
+ private final MaterialModuleServiceImpl materialModuleService;
+
+ private final MaterialProofMapper materialProofMapper;
+ private final BuyHousesReviewMemberMapper buyHousesReviewMemberMapper;
+
+ private final SysOssServiceImpl sysOssService;
+
+
+ /**
+ * 查询购房复审登记
+ */
+ @Override
+ public HousesReviewVo queryById(Long id){
+ HousesReviewVo housesReviewVo = baseMapper.selectVoById(id);
+ LambdaQueryWrapper queryWrapper = new LambdaQueryWrapper()
+ .eq(BuyHousesReviewMember::getBuyHousesId, housesReviewVo.getId());
+ List buyHousesReviewMembers = buyHousesReviewMemberMapper.selectList(queryWrapper);
+ housesReviewVo.setBuyHousesMemberList(buyHousesReviewMembers);
+ if (buyHousesReviewMembers.size()==0){
+ housesReviewVo.setBuyHousesMemberList(new ArrayList<>());
+ }
+ return housesReviewVo;
+ }
+
+ /**
+ * 查询购房复审登记列表
+ */
+ @Override
+ public TableDataInfo queryPageList(HousesReviewBo bo, PageQuery pageQuery) {
+ LambdaQueryWrapper lqw = buildQueryWrapper(bo);
+ Page result = baseMapper.selectVoPage(pageQuery.build(), lqw);
+ return TableDataInfo.build(result);
+ }
+
+ /**
+ * 查询购房复审登记列表
+ */
+ @Override
+ public List queryList(HousesReviewBo bo) {
+ LambdaQueryWrapper lqw = buildQueryWrapper(bo);
+ return baseMapper.selectVoList(lqw);
+ }
+
+ private LambdaQueryWrapper buildQueryWrapper(HousesReviewBo bo) {
+ Map params = bo.getParams();
+ LambdaQueryWrapper lqw = Wrappers.lambdaQuery();
+ lqw.eq(StringUtils.isNotBlank(bo.getCardType()), HousesReview::getCardType, bo.getCardType());
+ lqw.eq(StringUtils.isNotBlank(bo.getCard()), HousesReview::getCard, bo.getCard());
+ lqw.like(StringUtils.isNotBlank(bo.getName()), HousesReview::getName, bo.getName());
+ lqw.eq(StringUtils.isNotBlank(bo.getQualification()), HousesReview::getQualification, bo.getQualification());
+ lqw.eq(StringUtils.isNotBlank(bo.getAuditTime()), HousesReview::getAuditTime, bo.getAuditTime());
+ lqw.eq(StringUtils.isNotBlank(bo.getPresellCard()), HousesReview::getPresellCard, bo.getPresellCard());
+ lqw.eq(StringUtils.isNotBlank(bo.getDealType()), HousesReview::getDealType, bo.getDealType());
+ lqw.like(StringUtils.isNotBlank(bo.getProjectName()), HousesReview::getProjectName, bo.getProjectName());
+ lqw.eq(StringUtils.isNotBlank(bo.getProjectArea()), HousesReview::getProjectArea, bo.getProjectArea());
+ lqw.eq(StringUtils.isNotBlank(bo.getQualificationConfirmTime()), HousesReview::getQualificationConfirmTime, bo.getQualificationConfirmTime());
+ lqw.eq(StringUtils.isNotBlank(bo.getQualificationPreApplyTime()), HousesReview::getQualificationPreApplyTime, bo.getQualificationPreApplyTime());
+ lqw.eq(StringUtils.isNotBlank(bo.getFamilyType()), HousesReview::getFamilyType, bo.getFamilyType());
+ lqw.eq(StringUtils.isNotBlank(bo.getStatus()), HousesReview::getStatus, bo.getStatus());
+ lqw.eq(StringUtils.isNotBlank(bo.getRegisterFailureTime()), HousesReview::getRegisterFailureTime, bo.getRegisterFailureTime());
+ lqw.eq(StringUtils.isNotBlank(bo.getNationality()), HousesReview::getNationality, bo.getNationality());
+ lqw.eq(StringUtils.isNotBlank(bo.getMaritalStatus()), HousesReview::getMaritalStatus, bo.getMaritalStatus());
+ lqw.eq(StringUtils.isNotBlank(bo.getCompanyType()), HousesReview::getCompanyType, bo.getCompanyType());
+ lqw.like(StringUtils.isNotBlank(bo.getCompanyName()), HousesReview::getCompanyName, bo.getCompanyName());
+ lqw.eq(StringUtils.isNotBlank(bo.getTalentsType()), HousesReview::getTalentsType, bo.getTalentsType());
+ lqw.eq(StringUtils.isNotBlank(bo.getCreditCode()), HousesReview::getCreditCode, bo.getCreditCode());
+ lqw.eq(StringUtils.isNotBlank(bo.getCompanyAddress()), HousesReview::getCompanyAddress, bo.getCompanyAddress());
+ lqw.eq(StringUtils.isNotBlank(bo.getSourceBy()), HousesReview::getSourceBy, bo.getSourceBy());
+ lqw.eq(StringUtils.isNotBlank(bo.getProcessKey()), HousesReview::getProcessKey, bo.getProcessKey());
+ return lqw;
+ }
+
+ /**
+ * 新增购房复审登记
+ */
+ @Override
+ public Boolean insertByBo(HousesReviewBo bo) {
+ //先判断是否存在数据
+ HousesReview add = BeanUtil.toBean(bo, HousesReview.class);
+ validEntityBeforeSave(add);
+ boolean flag = baseMapper.insert(add) > 0;
+ if (flag) {
+ if (bo.getBuyHousesMemberList().size()>0){
+ bo.getBuyHousesMemberList().stream().forEach( e ->{
+ e.setBuyHousesId(add.getId().toString());
+ });
+
+ buyHousesReviewMemberMapper.insertBatch(bo.getBuyHousesMemberList());
+ }
+ bo.setId(add.getId());
+ }
+
+ return flag;
+ }
+
+ /**
+ * 修改购房复审登记
+ */
+ @Override
+ public Boolean updateByBo(HousesReviewBo bo) {
+ //先删除存在的关系表
+ LambdaQueryWrapper wrapper = new LambdaQueryWrapper()
+ .eq(BuyHousesReviewMember::getBuyHousesId, bo.getId());
+ List buyHousesReviewMembers = buyHousesReviewMemberMapper.selectList(wrapper);
+ if (ObjectUtil.isNotNull(buyHousesReviewMembers) && buyHousesReviewMembers.size()>0) {
+ List buyHousesMemberList = bo.getBuyHousesMemberList();
+ //先删除minio的图片
+ List list = new ArrayList<>();
+ if (ObjectUtil.isNotNull(buyHousesMemberList) && buyHousesMemberList.size()>0) {
+ buyHousesReviewMembers.forEach(e -> {
+ /*boolean b1 = buyHousesMemberList.stream().noneMatch(b -> b.getFrontUrl().equals(e.getFrontUrl()));
+ boolean b1 = buyHousesMemberList.stream().noneMatch(b -> b.getInsidepageUrl().equals(e.getInsidepageUrl()));
+ boolean b1 = buyHousesMemberList.stream().noneMatch(b -> b.getHomeRecordUrl().equals(e.getHomeRecordUrl()));
+ boolean b1 = buyHousesMemberList.stream().noneMatch(b -> b.getReverseUrl().equals(e.getReverseUrl()));*/
+ if (ObjectUtil.isNotNull(e.getFrontUrl())){
+ if (!buyHousesMemberList.stream().anyMatch(b -> e.getFrontUrl().equals(b.getFrontUrl()))){
+ list.add(new Long(e.getFrontUrl()));
+ }
+ }
+ if (ObjectUtil.isNotNull(e.getInsidepageUrl())) {
+ if (!buyHousesMemberList.stream().anyMatch(b -> e.getInsidepageUrl().equals(b.getInsidepageUrl()))) {
+ list.add(new Long(e.getFrontUrl()));
+ }
+ }
+ if (ObjectUtil.isNotNull(e.getHomeRecordUrl())) {
+ if (!buyHousesMemberList.stream().anyMatch(b -> ObjectUtil.isNotNull(e.getHomeRecordUrl()) && e.getHomeRecordUrl().equals(b.getHomeRecordUrl()))) {
+ list.add(new Long(e.getFrontUrl()));
+ }
+ }
+ if (ObjectUtil.isNotNull(e.getReverseUrl())) {
+ if (!buyHousesMemberList.stream().anyMatch(b -> ObjectUtil.isNotNull(e.getReverseUrl()) && e.getReverseUrl().equals(b.getReverseUrl()))) {
+ list.add(new Long(e.getFrontUrl()));
+ }
+ }
+ });
+ }else {
+ List insidepageUrl = buyHousesReviewMembers.stream().filter(s ->ObjectUtil.isNotNull(s.getInsidepageUrl())).map(s -> Long.parseLong(s.getInsidepageUrl())).collect(Collectors.toList());
+ if (ObjectUtil.isNotNull(insidepageUrl)&& insidepageUrl.size()>0){
+ list.addAll(insidepageUrl);
+ }
+ List homeRecordUrl = buyHousesReviewMembers.stream().filter(s ->ObjectUtil.isNotNull(s.getHomeRecordUrl())).map(s -> Long.parseLong(s.getHomeRecordUrl())).collect(Collectors.toList());
+ if (ObjectUtil.isNotNull(homeRecordUrl)&& homeRecordUrl.size()>0){
+ list.addAll(homeRecordUrl);
+ }
+ List reverseUrl = buyHousesReviewMembers.stream().filter(s ->ObjectUtil.isNotNull(s.getReverseUrl())).map(s -> Long.parseLong(s.getReverseUrl())).collect(Collectors.toList());
+ if (ObjectUtil.isNotNull(reverseUrl)&& reverseUrl.size()>0){
+ list.addAll(reverseUrl);
+ }
+ List frontUrl = buyHousesReviewMembers.stream().filter(s ->ObjectUtil.isNotNull(s.getFrontUrl())).map(s -> Long.parseLong(s.getFrontUrl())).collect(Collectors.toList());
+ if (ObjectUtil.isNotNull(frontUrl)&& frontUrl.size()>0){
+ list.addAll(frontUrl);
+ }
+ }
+ if (list.size()>0){
+ sysOssService.deleteWithValidByIds(list,true);
+ }
+ List collect = buyHousesReviewMembers.stream().map(BuyHousesReviewMember::getId).collect(Collectors.toList());
+ if (collect.size()>0) {
+ buyHousesReviewMemberMapper.deleteBatchIds(collect);
+ }
+ }
+ LambdaQueryWrapper queryWrapper = new LambdaQueryWrapper()
+ .eq(MaterialProof::getHouseId, bo.getId());
+ List materialProofs = materialProofMapper.selectList(queryWrapper);
+ if (ObjectUtil.isNotNull(materialProofs) && materialProofs.size()>0) {
+ List list = new ArrayList<>();
+ List materialsList = bo.getMaterialsList();
+ if (ObjectUtil.isNotNull(materialsList) && materialsList.size() > 0){
+ materialProofs.forEach(mp ->{
+ boolean b = materialsList.stream().anyMatch(e -> ObjectUtil.isNotNull(mp.getFile()) && mp.getFile().equals(e.getFile()));
+ if (!b){
+ Long aLong = new Long(mp.getFile());
+ list.add(aLong);
+ }
+ });
+ }else {
+ list.addAll(materialProofs.stream().filter(s ->ObjectUtil.isNotNull(s.getFile())).map(s -> Long.parseLong(s.getFile())).collect(Collectors.toList()));
+ }
+ if (list.size()>0) {
+ sysOssService.deleteWithValidByIds(list, true);
+ }
+ List collect = materialProofs.stream().map(MaterialProof::getId).collect(Collectors.toList());
+ if (collect.size()>0) {
+ materialProofMapper.deleteBatchIds(collect);
+ }
+ }
+ if (ObjectUtil.isNotNull(bo.getBuyHousesMemberList()) && bo.getBuyHousesMemberList().size()>0){
+ bo.getBuyHousesMemberList().stream().forEach( e ->{
+ e.setBuyHousesId(bo.getId().toString());
+ });
+ buyHousesReviewMemberMapper.insertBatch(bo.getBuyHousesMemberList());
+ }
+ if(ObjectUtil.isNotNull(bo.getMaterialsList()) && bo.getMaterialsList().size()>0){
+ ArrayList list = new ArrayList<>();
+ bo.getMaterialsList().forEach(e ->{
+ MaterialProof materialProof = BeanUtil.toBean(e, MaterialProof.class);
+ materialProof.setHouseId(bo.getId().toString());
+ materialProof.setStatus(0L);
+ materialProof.setModulePathId(e.getId().toString());
+ materialProof.setId(null);
+ list.add(materialProof);
+ });
+ materialProofMapper.insertBatch(list);
+ }
+ bo.setProcessKey("house_review");
+ HousesReview update = BeanUtil.toBean(bo, HousesReview.class);
+ validEntityBeforeSave(update);
+ int i = baseMapper.updateById(update);
+ if (i>0) {
+ ProcessVo processVo = new ProcessVo();
+ processVo.setProcessKey("house_review");
+ processVo.setStep("1");
+ Map map = BeanUtil.beanToMap(bo);
+ processVo.setParams(map);
+ processVo.setBusinessId(bo.getId().toString());
+ processVo.setStartUser(bo.getName());
+ WorkComplyUtils.comply(processVo);
+ }
+ return i>0;
+ }
+
+ /**
+ * 保存前的数据校验
+ */
+ private void validEntityBeforeSave(HousesReview entity){
+ //TODO 做一些数据校验,如唯一约束
+ }
+
+ /**
+ * 批量删除购房复审登记
+ */
+ @Override
+ public Boolean deleteWithValidByIds(Collection ids, Boolean isValid) {
+ if(isValid){
+ //TODO 做一些业务上的校验,判断是否需要校验
+ }
+ return baseMapper.deleteBatchIds(ids) > 0;
+ }
+
+ @Override
+ public Boolean saveBatch(List list) {
+
+ return baseMapper.insertBatch(list);
+ }
+
+ /**
+ * 获取材料接口
+ * @param bo
+ * @return
+ */
+ @Override
+ public R> getMaterialInfo(HousesReviewBo bo) {
+ List materialInfo = materialModuleService.getMaterialInfo(bo);
+ return R.ok(materialInfo);
+ }
+
+ @Override
+ public HousesReviewVo queryByIdOne(Long id) {
+ HousesReviewVo housesReviewVo = baseMapper.selectVoById(id);
+ LambdaQueryWrapper queryWrapper = new LambdaQueryWrapper()
+ .eq(BuyHousesReviewMember::getBuyHousesId, housesReviewVo.getId());
+ List buyHousesReviewMembers = buyHousesReviewMemberMapper.selectList(queryWrapper);
+ housesReviewVo.setBuyHousesMemberList(buyHousesReviewMembers);
+ if (buyHousesReviewMembers.size()==0){
+ housesReviewVo.setBuyHousesMemberList(new ArrayList<>());
+ }
+ return housesReviewVo;
+
+ }
+
+ /**
+ * 获取材料
+ * @param id
+ * @return
+ */
+ @Override
+ public R> getMaterialByBusinessId(Long id) {
+ LambdaQueryWrapper wrapper = new LambdaQueryWrapper()
+ .eq(MaterialProof::getHouseId, id);
+ return R.ok(materialProofMapper.selectList(wrapper));
+
+
+ }
+}
diff --git a/ruoyi-system/src/main/java/com/ruoyi/system/service/impl/MaterialModuleServiceImpl.java b/ruoyi-system/src/main/java/com/ruoyi/system/service/impl/MaterialModuleServiceImpl.java
new file mode 100644
index 000000000..3f8175521
--- /dev/null
+++ b/ruoyi-system/src/main/java/com/ruoyi/system/service/impl/MaterialModuleServiceImpl.java
@@ -0,0 +1,168 @@
+package com.ruoyi.system.service.impl;
+
+import cn.hutool.core.bean.BeanUtil;
+import cn.hutool.core.util.ObjectUtil;
+import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
+import com.baomidou.mybatisplus.core.toolkit.Wrappers;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.ruoyi.common.core.domain.PageQuery;
+import com.ruoyi.common.core.domain.R;
+import com.ruoyi.common.core.page.TableDataInfo;
+import com.ruoyi.common.helper.DataBaseHelper;
+import com.ruoyi.common.utils.StringUtils;
+import com.ruoyi.system.domain.MaterialModule;
+import com.ruoyi.system.domain.MaterialProof;
+import com.ruoyi.system.domain.MaterialTalents;
+import com.ruoyi.system.domain.bo.HousesReviewBo;
+import com.ruoyi.system.domain.bo.MaterialModuleBo;
+import com.ruoyi.system.domain.vo.MaterialModuleVo;
+import com.ruoyi.system.domain.vo.MaterialTalentsVo;
+import com.ruoyi.system.mapper.MaterialModuleMapper;
+import com.ruoyi.system.mapper.MaterialProofMapper;
+import com.ruoyi.system.mapper.MaterialTalentsMapper;
+import com.ruoyi.system.service.IMaterialModuleService;
+import lombok.RequiredArgsConstructor;
+import org.springframework.stereotype.Service;
+
+import java.util.*;
+import java.util.stream.Collectors;
+
+/**
+ * 材料模块Service业务层处理
+ *
+ * @author ruoyi
+ * @date 2023-03-09
+ */
+@RequiredArgsConstructor
+@Service
+public class MaterialModuleServiceImpl implements IMaterialModuleService {
+
+ private final MaterialModuleMapper baseMapper;
+
+ private final MaterialTalentsMapper materialTalentsMapper;
+
+ private final MaterialProofMapper materialProofMapper;
+
+ /**
+ * 查询材料模块
+ */
+ @Override
+ public MaterialModuleVo queryById(Long id){
+ return baseMapper.selectVoById(id);
+ }
+
+ /**
+ * 查询材料模块列表
+ */
+ @Override
+ public TableDataInfo queryPageList(MaterialModuleBo bo, PageQuery pageQuery) {
+ LambdaQueryWrapper lqw = buildQueryWrapper(bo);
+ Page result = baseMapper.selectVoPageList(pageQuery.build(), lqw);
+ return TableDataInfo.build(result);
+ }
+
+ /**
+ * 查询材料模块列表
+ */
+ @Override
+ public List queryList(MaterialModuleBo bo) {
+ LambdaQueryWrapper lqw = buildQueryWrapper(bo);
+ return baseMapper.selectVoList(lqw);
+ }
+
+ private LambdaQueryWrapper buildQueryWrapper(MaterialModuleBo bo) {
+ Map params = bo.getParams();
+ LambdaQueryWrapper lqw = Wrappers.lambdaQuery();
+ lqw.like(StringUtils.isNotBlank(bo.getMaterialName()), MaterialModule::getMaterialName, bo.getMaterialName());
+ lqw.like(StringUtils.isNotBlank(bo.getMaterialKey()), MaterialModule::getMaterialKey, bo.getMaterialKey());
+ return lqw;
+ }
+
+ /**
+ * 新增材料模块
+ */
+ @Override
+ public Boolean insertByBo(MaterialModuleBo bo) {
+ MaterialModule add = BeanUtil.toBean(bo, MaterialModule.class);
+ validEntityBeforeSave(add);
+ boolean flag = baseMapper.insert(add) > 0;
+ if (flag) {
+ bo.setId(add.getId());
+ }
+ return flag;
+ }
+
+ /**
+ * 修改材料模块
+ */
+ @Override
+ public Boolean updateByBo(MaterialModuleBo bo) {
+ MaterialModule update = BeanUtil.toBean(bo, MaterialModule.class);
+ validEntityBeforeSave(update);
+ return baseMapper.updateById(update) > 0;
+ }
+
+ /**
+ * 保存前的数据校验
+ */
+ private void validEntityBeforeSave(MaterialModule entity){
+ //TODO 做一些数据校验,如唯一约束
+ }
+
+ /**
+ * 批量删除材料模块
+ */
+ @Override
+ public Boolean deleteWithValidByIds(Collection ids, Boolean isValid) {
+ if(isValid){
+ //TODO 做一些业务上的校验,判断是否需要校验
+ }
+ return baseMapper.deleteBatchIds(ids) > 0;
+ }
+
+ @Override
+ public R selectMaterialList(MaterialModuleBo bo) {
+ LambdaQueryWrapper lqw = buildQueryWrapper(bo);
+ return R.ok(baseMapper.selectVoList(lqw));
+ }
+
+ public List getMaterialInfo(HousesReviewBo bo){
+ Map map = BeanUtil.beanToMap(bo);
+ Set keys = map.keySet();
+ LambdaQueryWrapper eq = new LambdaQueryWrapper()
+ .eq(MaterialTalents::getTalentsValue, map.get("processKey"));
+ MaterialTalentsVo materialTalentsVo = materialTalentsMapper.selectVoOne(eq);
+ //根据id获取关于他下面的所有子集
+ LambdaQueryWrapper wrapper = new LambdaQueryWrapper()
+ .apply(DataBaseHelper.findInSet(materialTalentsVo.getId(), "selected"));
+ List materialTalents = materialTalentsMapper.selectList(wrapper);
+ ArrayList list = new ArrayList<>();
+ for (MaterialTalents materialTalent : materialTalents) {
+ if (keys.contains(materialTalent.getTalentsValue())){
+ //获取当前目录下的数据
+ Object value = map.get(materialTalent.getTalentsValue());
+ if (ObjectUtil.isNotNull(value)) {
+ List collect = materialTalents.stream().filter(m -> m.getTalentsValue().equals(value) && materialTalent.getId().equals(m.getParentId()) && ObjectUtil.isNotEmpty(m.getMaterials())).map(MaterialTalents::getMaterials).collect(Collectors.toList());
+ System.out.println("collect = " + collect);
+ list.addAll(collect);
+ }
+ }
+ }
+
+ List collect = list.stream().distinct().map(Long ::parseLong).collect(Collectors.toList());
+ List materialTalentsVos = baseMapper.selectVoBatchIds(collect);
+
+ LambdaQueryWrapper queryWrapper = new LambdaQueryWrapper()
+ .eq(MaterialProof::getHouseId, bo.getId());
+ List materialProofs = materialProofMapper.selectList(queryWrapper);
+
+ materialTalentsVos.forEach(e -> {
+ materialProofs.forEach(m ->{
+ if (e.getId().toString().equals(m.getModulePathId())){
+ e.setFile(m.getFile());
+ }
+ });
+ });
+ return materialTalentsVos;
+ }
+}
diff --git a/ruoyi-system/src/main/java/com/ruoyi/system/service/impl/MaterialProofServiceImpl.java b/ruoyi-system/src/main/java/com/ruoyi/system/service/impl/MaterialProofServiceImpl.java
new file mode 100644
index 000000000..c6e1b4529
--- /dev/null
+++ b/ruoyi-system/src/main/java/com/ruoyi/system/service/impl/MaterialProofServiceImpl.java
@@ -0,0 +1,117 @@
+package com.ruoyi.system.service.impl;
+
+import cn.hutool.core.bean.BeanUtil;
+import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
+import com.baomidou.mybatisplus.core.toolkit.Wrappers;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.ruoyi.common.core.domain.PageQuery;
+import com.ruoyi.common.core.page.TableDataInfo;
+import com.ruoyi.common.utils.StringUtils;
+import com.ruoyi.system.domain.MaterialProof;
+import com.ruoyi.system.domain.bo.MaterialProofBo;
+import com.ruoyi.system.domain.vo.MaterialProofVo;
+import com.ruoyi.system.mapper.MaterialProofMapper;
+import com.ruoyi.system.service.IMaterialProofService;
+import lombok.RequiredArgsConstructor;
+import org.springframework.stereotype.Service;
+
+import java.util.Collection;
+import java.util.List;
+import java.util.Map;
+
+/**
+ * 材料Service业务层处理
+ *
+ * @author ruoyi
+ * @date 2023-03-15
+ */
+@RequiredArgsConstructor
+@Service
+public class MaterialProofServiceImpl implements IMaterialProofService {
+
+ private final MaterialProofMapper baseMapper;
+
+ /**
+ * 查询材料
+ */
+ @Override
+ public MaterialProofVo queryById(Long id){
+ return baseMapper.selectVoById(id);
+ }
+
+ /**
+ * 查询材料列表
+ */
+ @Override
+ public TableDataInfo queryPageList(MaterialProofBo bo, PageQuery pageQuery) {
+ LambdaQueryWrapper lqw = buildQueryWrapper(bo);
+ Page result = baseMapper.selectVoPage(pageQuery.build(), lqw);
+ return TableDataInfo.build(result);
+ }
+
+ /**
+ * 查询材料列表
+ */
+ @Override
+ public List queryList(MaterialProofBo bo) {
+ LambdaQueryWrapper lqw = buildQueryWrapper(bo);
+ return baseMapper.selectVoList(lqw);
+ }
+
+ private LambdaQueryWrapper buildQueryWrapper(MaterialProofBo bo) {
+ Map params = bo.getParams();
+ LambdaQueryWrapper lqw = Wrappers.lambdaQuery();
+ lqw.eq(StringUtils.isNotBlank(bo.getHouseId()), MaterialProof::getHouseId, bo.getHouseId());
+ lqw.eq(bo.getCreateTime() != null, MaterialProof::getCreateTime, bo.getCreateTime());
+ lqw.eq(bo.getStatus() != null, MaterialProof::getStatus, bo.getStatus());
+ lqw.eq(StringUtils.isNotBlank(bo.getModulePathId()), MaterialProof::getModulePathId, bo.getModulePathId());
+ lqw.eq(StringUtils.isNotBlank(bo.getFile()), MaterialProof::getFile, bo.getFile());
+ lqw.eq(StringUtils.isNotBlank(bo.getMaterialKey()), MaterialProof::getMaterialKey, bo.getMaterialKey());
+ lqw.eq(StringUtils.isNotBlank(bo.getDescription()), MaterialProof::getDescription, bo.getDescription());
+ lqw.eq(StringUtils.isNotBlank(bo.getAuditDept()), MaterialProof::getAuditDept, bo.getAuditDept());
+ lqw.eq(StringUtils.isNotBlank(bo.getCheckType()), MaterialProof::getCheckType, bo.getCheckType());
+ return lqw;
+ }
+
+ /**
+ * 新增材料
+ */
+ @Override
+ public Boolean insertByBo(MaterialProofBo bo) {
+ MaterialProof add = BeanUtil.toBean(bo, MaterialProof.class);
+ validEntityBeforeSave(add);
+ boolean flag = baseMapper.insert(add) > 0;
+ if (flag) {
+ bo.setId(add.getId());
+ }
+ return flag;
+ }
+
+ /**
+ * 修改材料
+ */
+ @Override
+ public Boolean updateByBo(MaterialProofBo bo) {
+ MaterialProof update = BeanUtil.toBean(bo, MaterialProof.class);
+ validEntityBeforeSave(update);
+ return baseMapper.updateById(update) > 0;
+ }
+
+ /**
+ * 保存前的数据校验
+ */
+ private void validEntityBeforeSave(MaterialProof entity){
+ //TODO 做一些数据校验,如唯一约束
+ }
+
+ /**
+ * 批量删除材料
+ */
+ @Override
+ public Boolean deleteWithValidByIds(Collection ids, Boolean isValid) {
+ if(isValid){
+ //TODO 做一些业务上的校验,判断是否需要校验
+ }
+ return baseMapper.deleteBatchIds(ids) > 0;
+ }
+}
diff --git a/ruoyi-system/src/main/java/com/ruoyi/system/service/impl/MaterialTalentsServiceImpl.java b/ruoyi-system/src/main/java/com/ruoyi/system/service/impl/MaterialTalentsServiceImpl.java
new file mode 100644
index 000000000..624ecff1c
--- /dev/null
+++ b/ruoyi-system/src/main/java/com/ruoyi/system/service/impl/MaterialTalentsServiceImpl.java
@@ -0,0 +1,130 @@
+package com.ruoyi.system.service.impl;
+
+import cn.hutool.core.bean.BeanUtil;
+import cn.hutool.core.util.ObjectUtil;
+import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
+import com.baomidou.mybatisplus.core.toolkit.Wrappers;
+import com.ruoyi.common.utils.StringUtils;
+import com.ruoyi.system.domain.MaterialTalents;
+import com.ruoyi.system.domain.bo.MaterialTalentsBo;
+import com.ruoyi.system.domain.vo.MaterialTalentsVo;
+import com.ruoyi.system.mapper.MaterialTalentsMapper;
+import com.ruoyi.system.service.IMaterialTalentsService;
+import lombok.RequiredArgsConstructor;
+import org.springframework.stereotype.Service;
+
+import java.util.*;
+
+/**
+ * 材料关系Service业务层处理
+ *
+ * @author ruoyi
+ * @date 2023-03-09
+ */
+@RequiredArgsConstructor
+@Service
+public class MaterialTalentsServiceImpl implements IMaterialTalentsService {
+
+ private final MaterialTalentsMapper baseMapper;
+
+ /**
+ * 查询材料关系
+ */
+ @Override
+ public MaterialTalentsVo queryById(Long id){
+ MaterialTalentsVo materialTalentsVo = baseMapper.selectVoById(id);
+ return materialTalentsVo;
+ }
+
+
+ /**
+ * 查询材料关系列表
+ */
+ @Override
+ public List queryList(MaterialTalentsBo bo) {
+ return baseMapper.selectVoListSpecial (bo);
+ }
+
+ private LambdaQueryWrapper buildQueryWrapper(MaterialTalentsBo bo) {
+ Map params = bo.getParams();
+ LambdaQueryWrapper lqw = Wrappers.lambdaQuery();
+ lqw.like(StringUtils.isNotBlank(bo.getTalentsName()), MaterialTalents::getTalentsName, bo.getTalentsName());
+ return lqw;
+ }
+
+ /**
+ * 新增材料关系
+ */
+ @Override
+ public Boolean insertByBo(MaterialTalentsBo bo) {
+ if (!bo.getParentId().equals(0)){
+ //获取它父类的关系级
+ LambdaQueryWrapper wrapper = new LambdaQueryWrapper()
+ .eq(MaterialTalents::getId, bo.getParentId());
+ MaterialTalents materialTalents = baseMapper.selectOne(wrapper);
+ String selected = materialTalents.getSelected();
+ if (ObjectUtil.isNull(selected)){
+ bo.setSelected(materialTalents.getId().toString());
+ }else {
+ ArrayList list = new ArrayList<>();
+ List strings = Arrays.asList(materialTalents.getSelected().split(","));
+ list.addAll(strings);
+ list.add(materialTalents.getId().toString());
+ String join = StringUtils.join(list, ",");
+ bo.setSelected(join);
+ }
+ }
+ MaterialTalents add = BeanUtil.toBean(bo, MaterialTalents.class);
+ validEntityBeforeSave(add);
+ boolean flag = baseMapper.insert(add) > 0;
+ if (flag) {
+ bo.setId(add.getId());
+ }
+ return flag;
+ }
+
+ /**
+ * 修改材料关系
+ */
+ @Override
+ public Boolean updateByBo(MaterialTalentsBo bo) {
+ if (!bo.getParentId().equals(0L)){
+ //获取它父类的关系级
+ LambdaQueryWrapper wrapper = new LambdaQueryWrapper()
+ .eq(MaterialTalents::getId, bo.getParentId());
+ MaterialTalents materialTalents = baseMapper.selectOne(wrapper);
+ String selected = materialTalents.getSelected();
+ if (ObjectUtil.isEmpty(selected)){
+ bo.setSelected(materialTalents.getId().toString());
+ }else {
+ ArrayList list = new ArrayList<>();
+ List strings = Arrays.asList(materialTalents.getSelected().split(","));
+ list.addAll(strings);
+ list.add(materialTalents.getId().toString());
+ String join = StringUtils.join(list, ",");
+ bo.setSelected(join);
+ }
+ }
+ MaterialTalents update = BeanUtil.toBean(bo, MaterialTalents.class);
+ validEntityBeforeSave(update);
+ return baseMapper.updateById(update) > 0;
+ }
+
+ /**
+ * 保存前的数据校验
+ */
+ private void validEntityBeforeSave(MaterialTalents entity){
+ //TODO 做一些数据校验,如唯一约束
+ }
+
+ /**
+ * 批量删除材料关系
+ */
+ @Override
+ public Boolean deleteWithValidByIds(Collection ids, Boolean isValid) {
+ if(isValid){
+ //TODO 做一些业务上的校验,判断是否需要校验
+ }
+ return baseMapper.deleteBatchIds(ids) > 0;
+ }
+}
diff --git a/ruoyi-system/src/main/java/com/ruoyi/system/service/impl/SysDeptServiceImpl.java b/ruoyi-system/src/main/java/com/ruoyi/system/service/impl/SysDeptServiceImpl.java
index 8af6cabdb..6aa308afa 100644
--- a/ruoyi-system/src/main/java/com/ruoyi/system/service/impl/SysDeptServiceImpl.java
+++ b/ruoyi-system/src/main/java/com/ruoyi/system/service/impl/SysDeptServiceImpl.java
@@ -23,6 +23,7 @@ import com.ruoyi.system.mapper.SysDeptMapper;
import com.ruoyi.system.mapper.SysRoleMapper;
import com.ruoyi.system.mapper.SysUserMapper;
import com.ruoyi.system.service.ISysDeptService;
+import com.ruoyi.work.service.IWorkSysDeptService;
import lombok.RequiredArgsConstructor;
import org.springframework.cache.annotation.CacheEvict;
import org.springframework.cache.annotation.Cacheable;
@@ -39,7 +40,7 @@ import java.util.List;
*/
@RequiredArgsConstructor
@Service
-public class SysDeptServiceImpl implements ISysDeptService, DeptService {
+public class SysDeptServiceImpl implements ISysDeptService, DeptService, IWorkSysDeptService {
private final SysDeptMapper baseMapper;
private final SysRoleMapper roleMapper;
diff --git a/ruoyi-system/src/main/java/com/ruoyi/system/service/impl/SysRoleServiceImpl.java b/ruoyi-system/src/main/java/com/ruoyi/system/service/impl/SysRoleServiceImpl.java
index eb2a6df2a..4b622b566 100644
--- a/ruoyi-system/src/main/java/com/ruoyi/system/service/impl/SysRoleServiceImpl.java
+++ b/ruoyi-system/src/main/java/com/ruoyi/system/service/impl/SysRoleServiceImpl.java
@@ -23,6 +23,7 @@ import com.ruoyi.system.mapper.SysRoleMapper;
import com.ruoyi.system.mapper.SysRoleMenuMapper;
import com.ruoyi.system.mapper.SysUserRoleMapper;
import com.ruoyi.system.service.ISysRoleService;
+import com.ruoyi.work.service.IWorkSysRoleService;
import lombok.RequiredArgsConstructor;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
@@ -36,7 +37,7 @@ import java.util.*;
*/
@RequiredArgsConstructor
@Service
-public class SysRoleServiceImpl implements ISysRoleService {
+public class SysRoleServiceImpl implements ISysRoleService, IWorkSysRoleService {
private final SysRoleMapper baseMapper;
private final SysRoleMenuMapper roleMenuMapper;
diff --git a/ruoyi-system/src/main/java/com/ruoyi/system/service/impl/SysUserServiceImpl.java b/ruoyi-system/src/main/java/com/ruoyi/system/service/impl/SysUserServiceImpl.java
index b4105870c..d8c24c690 100644
--- a/ruoyi-system/src/main/java/com/ruoyi/system/service/impl/SysUserServiceImpl.java
+++ b/ruoyi-system/src/main/java/com/ruoyi/system/service/impl/SysUserServiceImpl.java
@@ -27,6 +27,7 @@ import com.ruoyi.system.domain.SysUserPost;
import com.ruoyi.system.domain.SysUserRole;
import com.ruoyi.system.mapper.*;
import com.ruoyi.system.service.ISysUserService;
+import com.ruoyi.work.service.IWorkSysUserService;
import lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j;
import org.springframework.cache.annotation.Cacheable;
@@ -45,7 +46,7 @@ import java.util.Map;
@Slf4j
@RequiredArgsConstructor
@Service
-public class SysUserServiceImpl implements ISysUserService, UserService {
+public class SysUserServiceImpl implements ISysUserService, UserService, IWorkSysUserService {
private final SysUserMapper baseMapper;
private final SysDeptMapper deptMapper;
diff --git a/ruoyi-system/src/main/resources/mapper/system/SysConfigMapper.xml b/ruoyi-system/src/main/resources/mapper/system/IWorkSysRoleService.xml
similarity index 100%
rename from ruoyi-system/src/main/resources/mapper/system/SysConfigMapper.xml
rename to ruoyi-system/src/main/resources/mapper/system/IWorkSysRoleService.xml
diff --git a/ruoyi-work/src/main/java/com/ruoyi/work/controller/WorkController.java b/ruoyi-work/src/main/java/com/ruoyi/work/controller/WorkController.java
new file mode 100644
index 000000000..826c9351b
--- /dev/null
+++ b/ruoyi-work/src/main/java/com/ruoyi/work/controller/WorkController.java
@@ -0,0 +1,149 @@
+package com.ruoyi.work.controller;
+
+import cn.dev33.satoken.annotation.SaCheckPermission;
+import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
+import com.ruoyi.common.annotation.Log;
+import com.ruoyi.common.constant.Constants;
+import com.ruoyi.common.core.controller.BaseController;
+import com.ruoyi.common.core.domain.PageQuery;
+import com.ruoyi.common.core.domain.R;
+import com.ruoyi.common.core.page.TableDataInfo;
+import com.ruoyi.common.enums.BusinessType;
+import com.ruoyi.common.exception.ServiceException;
+import com.ruoyi.work.domain.ActProcess;
+import com.ruoyi.work.domain.HisProcess;
+import com.ruoyi.work.domain.TProcess;
+import com.ruoyi.work.domain.vo.ProcessVo;
+import com.ruoyi.work.dto.BusinessDTO;
+import com.ruoyi.work.dto.ProcessVoResultDto;
+import com.ruoyi.work.mapper.ProcessMapper;
+import com.ruoyi.work.utils.WorkComplyUtils;
+import com.ruoyi.work.utils.WorkUtils;
+import lombok.RequiredArgsConstructor;
+import org.springframework.transaction.annotation.Transactional;
+import org.springframework.validation.annotation.Validated;
+import org.springframework.web.bind.annotation.*;
+
+import java.util.List;
+import java.util.Map;
+
+/**
+ * 流程相关
+ */
+@Validated
+@RequiredArgsConstructor
+@RestController
+@RequestMapping("/work")
+@Transactional
+public class WorkController extends BaseController {
+ private final ProcessMapper processMapper;
+
+
+ /**
+ * 获取待办
+ */
+ @Log(title = "获取待办数据",businessType = BusinessType.OTHER)
+ @SaCheckPermission("work:task:taskList")
+ @GetMapping("/getWaitTaskList")
+ public TableDataInfo getWaitTaskList(ActProcess actProcess, PageQuery pageQuery){
+ return WorkComplyUtils.getWaitTaskList(actProcess,pageQuery);
+ }
+
+ /**
+ * 获取已办
+ */
+ @Log(title = "获取已办数据",businessType = BusinessType.OTHER)
+ @SaCheckPermission("work:task:historyList")
+ @GetMapping("/getHistoryList")
+ public TableDataInfo getHistoryList(HisProcess hisProcess, PageQuery pageQuery){
+ return WorkComplyUtils.getHistoryList(hisProcess,pageQuery);
+ }
+
+ /**
+ * 获取当前业务进行步骤
+ */
+ @Log(title = "获取当前业务运行到那一步",businessType = BusinessType.OTHER)
+ @SaCheckPermission("work:task:processPlan")
+ @PostMapping("/processPlan")
+ public R> processPlan(@RequestBody ActProcess actProcess){
+ LambdaQueryWrapper wrapper = new LambdaQueryWrapper()
+ .eq(TProcess::getProcessKey, actProcess.getProcessKey());
+ List tProcesses = processMapper.selectList(wrapper);
+ if (tProcesses.size()==0){
+ throw new ServiceException("当前流程不存在");
+ }
+ Map map = WorkUtils.getInfoToMap(tProcesses.get(0).getBean(), actProcess.getBusinessId());
+ ProcessVo processVo = new ProcessVo();
+ processVo.setBusinessId(actProcess.getBusinessId());
+ processVo.setParams(map);
+ List processPlan= WorkComplyUtils.getProcessPlan(processVo);
+ return R.ok(processPlan);
+ }
+
+ /**
+ * 获取可退回步骤
+ */
+ @Log(title = "获取可退回步骤",businessType = BusinessType.OTHER)
+ @PostMapping("/getStep")
+ public void getStep(@RequestBody BusinessDTO businessDTO){
+ LambdaQueryWrapper wrapper = new LambdaQueryWrapper()
+ .eq(TProcess::getProcessKey, businessDTO.getProcessKey());
+ List tProcesses = processMapper.selectList(wrapper);
+ if (tProcesses.size()==0){
+ throw new ServiceException("当前流程不存在");
+ }
+ Map map = WorkUtils.getInfoToMap(tProcesses.get(0).getBean(),businessDTO.getBusinessId());
+ businessDTO.setParams(map);
+ WorkComplyUtils.getStep(businessDTO);
+ }
+
+ /**
+ * 流程办理
+ */
+ @Log(title = "流程办理",businessType = BusinessType.OTHER)
+ @SaCheckPermission("work:task:batchDeleted")
+ @PostMapping("/batchDeleted")
+ public R> batchDeleted(@RequestBody HisProcess hisProcess){
+ LambdaQueryWrapper wrapper = new LambdaQueryWrapper()
+ .eq(TProcess::getProcessKey, hisProcess.getProcessKey());
+ List tProcesses = processMapper.selectList(wrapper);
+ if (tProcesses.size()==0){
+ throw new ServiceException("当前流程不存在");
+ }
+ Map map = WorkUtils.getInfoToMap(tProcesses.get(0).getBean(),hisProcess.getBusinessId());
+ hisProcess.setParams(map);
+ String s = WorkComplyUtils.batchDeleted(hisProcess);
+
+ if (s.equals(Constants.NONENTITY)){
+ return R.fail("暂无审核");
+ }else{
+ processMapper.updateCommonByBusinessId(tProcesses.get(0).getBean(),s, hisProcess.getBusinessId());
+ }
+ System.out.println("s = " + s);
+ return R.ok();
+ }
+
+ /**
+ * 获取业务id详情数据
+ * @param actProcess
+ * @return
+ */
+ @Log(title = "获取业务id详情数据",businessType = BusinessType.OTHER)
+ @SaCheckPermission("work:task:taskInfo")
+ @PostMapping("/taskInfo")
+ public R> getInfoById(@RequestBody ActProcess actProcess){
+ LambdaQueryWrapper wrapper = new LambdaQueryWrapper()
+ .eq(TProcess::getProcessKey, actProcess.getProcessKey());
+ List tProcesses = processMapper.selectList(wrapper);
+ Map map = WorkUtils.getInfoToMap(tProcesses.get(0).getBean(),actProcess.getBusinessId());
+ return R.ok(map);
+ }
+
+ @Log(title = "获取审核日志",businessType = BusinessType.OTHER)
+ @PostMapping("/auditLogList")
+ public R> getAuditLogListByOtherId(@RequestBody BusinessDTO businessDTO){
+ return WorkComplyUtils.getAuditLogListByOtherId(businessDTO);
+ }
+
+}
+
diff --git a/ruoyi-work/src/main/java/com/ruoyi/work/domain/ActBusinessRule.java b/ruoyi-work/src/main/java/com/ruoyi/work/domain/ActBusinessRule.java
new file mode 100644
index 000000000..1433ac7a0
--- /dev/null
+++ b/ruoyi-work/src/main/java/com/ruoyi/work/domain/ActBusinessRule.java
@@ -0,0 +1,50 @@
+package com.ruoyi.work.domain;
+
+import com.baomidou.mybatisplus.annotation.TableId;
+import com.baomidou.mybatisplus.annotation.TableName;
+import com.ruoyi.common.core.domain.BaseEntity;
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+
+/**
+ * 业务规则对象 act_business_rule
+ *
+ * @author gssong
+ * @date 2021-12-16
+ */
+@Data
+@EqualsAndHashCode(callSuper = true)
+@TableName("act_business_rule")
+public class ActBusinessRule extends BaseEntity {
+
+ private static final long serialVersionUID=1L;
+
+ /**
+ * id
+ */
+ @TableId(value = "id")
+ private Long id;
+ /**
+ * bean名称
+ */
+ private String beanName;
+ /**
+ * 方法名
+ */
+ private String method;
+
+ /**
+ * 参数
+ */
+ private String param;
+
+
+ private String paramType;
+
+
+ /**
+ * 备注
+ */
+ private String remark;
+
+}
diff --git a/ruoyi-work/src/main/java/com/ruoyi/work/domain/ActBusinessRuleVo.java b/ruoyi-work/src/main/java/com/ruoyi/work/domain/ActBusinessRuleVo.java
new file mode 100644
index 000000000..f2a07c645
--- /dev/null
+++ b/ruoyi-work/src/main/java/com/ruoyi/work/domain/ActBusinessRuleVo.java
@@ -0,0 +1,86 @@
+package com.ruoyi.work.domain;
+
+import com.alibaba.excel.annotation.ExcelIgnoreUnannotated;
+import com.alibaba.excel.annotation.ExcelProperty;
+import lombok.Data;
+
+import java.util.Date;
+
+
+/**
+ * 业务规则视图对象 act_business_rule
+ *
+ * @author gssong
+ * @date 2021-12-16
+ */
+@Data
+@ExcelIgnoreUnannotated
+public class ActBusinessRuleVo {
+
+ private static final long serialVersionUID = 1L;
+
+ /**
+ * 主键
+ */
+ @ExcelProperty(value = "主键")
+ private Long id;
+
+ /**
+ * bean名称
+ */
+ @ExcelProperty(value = "bean名称")
+ private String beanName;
+
+ /**
+ * 方法名
+ */
+ @ExcelProperty(value = "方法名")
+ private String method;
+
+ /**
+ * 参数
+ */
+ @ExcelProperty(value = "参数")
+ private String param;
+
+ @ExcelProperty(value = "参数类型")
+
+ private String paramType;
+
+ /**
+ * 备注
+ */
+ @ExcelProperty(value = "备注")
+ private String remark;
+
+ /**
+ * 创建时间
+ */
+ @ExcelProperty(value = "创建时间")
+ private Date createTime;
+
+ /**
+ * 更新时间
+ */
+ @ExcelProperty(value = "更新时间")
+ private Date updateTime;
+
+ /**
+ * 创建人
+ */
+ @ExcelProperty(value = "创建人")
+ private String createBy;
+
+ /**
+ * 更新人
+ */
+ @ExcelProperty(value = "更新人")
+ private String updateBy;
+
+ /**
+ * 参数
+ */
+// private List businessRuleParams;
+
+
+}
diff --git a/ruoyi-work/src/main/java/com/ruoyi/work/domain/ActProcess.java b/ruoyi-work/src/main/java/com/ruoyi/work/domain/ActProcess.java
new file mode 100644
index 000000000..d9c4e5700
--- /dev/null
+++ b/ruoyi-work/src/main/java/com/ruoyi/work/domain/ActProcess.java
@@ -0,0 +1,90 @@
+package com.ruoyi.work.domain;
+
+import com.baomidou.mybatisplus.annotation.TableField;
+import com.baomidou.mybatisplus.annotation.TableId;
+import com.baomidou.mybatisplus.annotation.TableName;
+import lombok.Data;
+
+import java.util.Date;
+
+/**
+ * 流程运作对象 act_process
+ *
+ * @author ruoyi
+ * @date 2023-02-03
+ */
+@Data
+@TableName("act_process")
+public class ActProcess {
+
+ private static final long serialVersionUID=1L;
+
+ /**
+ *
+ */
+ @TableId(value = "id")
+ private Long id;
+ /**
+ * 流程表id
+ */
+ private String processId;
+ /**
+ * 业务id
+ */
+ private String businessId;
+ /**
+ * 审核
+ */
+ private String audit;
+ /**
+ * 审核类型(1,人员,2.部门,3角色)
+ */
+ private String checkType;
+ /**
+ * 步骤
+ */
+ private String step;
+
+ private Date createTime;
+
+ /**
+ * 是由存在下一步骤
+ */
+ private Boolean isNext;
+
+ private String type;
+
+ private String startUser;
+
+ @TableField(exist = false)
+ private String userId;
+
+ @TableField(exist = false)
+ private String roleId;
+
+ @TableField(exist = false)
+ private String deptId;
+
+ @TableField(exist = false)
+ private String name;
+
+ @TableField(exist = false)
+ private String description;
+
+ @TableField(exist = false)
+ private String bean;
+
+ @TableField(exist = false)
+ private String companyUserId;
+
+ private String companyName;
+
+ @TableField(exist = false)
+ private String timeout;
+
+ @TableField(exist = false)
+ private String processKey;
+
+
+
+}
diff --git a/ruoyi-work/src/main/java/com/ruoyi/work/domain/AuditLog.java b/ruoyi-work/src/main/java/com/ruoyi/work/domain/AuditLog.java
new file mode 100644
index 000000000..a51c2fc47
--- /dev/null
+++ b/ruoyi-work/src/main/java/com/ruoyi/work/domain/AuditLog.java
@@ -0,0 +1,69 @@
+package com.ruoyi.work.domain;
+
+import com.baomidou.mybatisplus.annotation.*;
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+import java.io.Serializable;
+import java.util.Date;
+import java.math.BigDecimal;
+
+import com.ruoyi.common.core.domain.BaseEntity;
+
+/**
+ * 审核日志对象 audit_log
+ *
+ * @author ruoyi
+ * @date 2023-03-22
+ */
+@Data
+@EqualsAndHashCode(callSuper = true)
+@TableName("audit_log")
+public class AuditLog extends BaseEntity {
+
+ private static final long serialVersionUID=1L;
+
+ /**
+ *
+ */
+ @TableId(value = "id")
+ private Long id;
+ /**
+ * 审核员id
+ */
+ private String auditId;
+ /**
+ * 审核员姓名
+ */
+ private String adminUserName;
+ /**
+ * 关联表id
+ */
+ private String otherId;
+ /**
+ * 回复
+ */
+ private String reply;
+ /**
+ * 状态 1.待提交 2.受理中 3.受理退件 4.受理驳回 5.初审中 6初审不通过 7.初审退件 8.审定中 9.审定不通过 10.审定通过
+ */
+ private String status;
+ /**
+ * 部门角色
+ */
+ private String roleName;
+ /**
+ * 推送记录
+ */
+ private String pushLog;
+ /**
+ * 审核员类型(1人员,2部门,3角色,4公司)
+ */
+ private String auditType;
+
+ private String processKey;
+
+ private String audit;
+
+ private String step;
+
+}
diff --git a/ruoyi-work/src/main/java/com/ruoyi/work/domain/HisProcess.java b/ruoyi-work/src/main/java/com/ruoyi/work/domain/HisProcess.java
new file mode 100644
index 000000000..8cdca2431
--- /dev/null
+++ b/ruoyi-work/src/main/java/com/ruoyi/work/domain/HisProcess.java
@@ -0,0 +1,92 @@
+package com.ruoyi.work.domain;
+
+import com.baomidou.mybatisplus.annotation.TableField;
+import com.baomidou.mybatisplus.annotation.TableId;
+import com.baomidou.mybatisplus.annotation.TableName;
+import com.fasterxml.jackson.annotation.JsonFormat;
+import lombok.Data;
+
+import java.util.Date;
+import java.util.Map;
+
+/**
+ * 历史运作对象 his_process
+ *
+ * @author ruoyi
+ * @date 2023-02-03
+ */
+@Data
+@TableName("his_process")
+public class HisProcess{
+
+ private static final long serialVersionUID=1L;
+
+ /**
+ *
+ */
+ @TableId(value = "id")
+ private Long id;
+ /**
+ * 流程表id
+ */
+ private String processId;
+ /**
+ * 业务id
+ */
+ private String businessId;
+ /**
+ * 审核
+ */
+ private String audit;
+ /**
+ * 审核类型(1,人员,2.部门,3角色,4公司)
+ */
+ private String checkType;
+ /**
+ * 1fail(失败),2success(成功)
+ */
+ private String status;
+
+ @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
+ private Date createTime;
+
+
+ @TableField(exist = false)
+ private String processKey;
+
+ @TableField(exist = false)
+ private Map params;
+
+ @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
+ private Date endTime;
+
+ private String step;
+
+ private String type;
+
+ private String startUser;
+
+ private String userId;
+
+ private String roleId;
+
+ private String deptId;
+
+ private String companyUserId;
+
+ /**
+ * 相隔时间差
+ */
+ private String timeBetween;
+
+ private String companyName;
+
+ @TableField(exist = false)
+ private String reply;
+
+ @TableField(exist = false)
+ private String name;
+
+
+
+}
diff --git a/ruoyi-work/src/main/java/com/ruoyi/work/domain/RollBackLog.java b/ruoyi-work/src/main/java/com/ruoyi/work/domain/RollBackLog.java
new file mode 100644
index 000000000..3c636e976
--- /dev/null
+++ b/ruoyi-work/src/main/java/com/ruoyi/work/domain/RollBackLog.java
@@ -0,0 +1,51 @@
+package com.ruoyi.work.domain;
+
+import com.baomidou.mybatisplus.annotation.TableId;
+import com.baomidou.mybatisplus.annotation.TableName;
+import com.ruoyi.common.core.domain.BaseEntity;
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+
+/**
+ * 撤销记录对象 roll_back_log
+ *
+ * @author ruoyi
+ * @date 2023-03-07
+ */
+@Data
+@EqualsAndHashCode(callSuper = true)
+@TableName("roll_back_log")
+public class RollBackLog extends BaseEntity {
+
+ private static final long serialVersionUID=1L;
+
+ /**
+ *
+ */
+ @TableId(value = "id")
+ private Long id;
+ /**
+ * 是后台撤回还是前台撤回
+ */
+ private String type;
+ /**
+ * 撤销原因
+ */
+ private String reply;
+
+ /**
+ * 将运行表中的数据保存
+ */
+ private String param;
+
+ private String businessId;
+
+ private String step;
+
+ private String checked;
+
+ private String checkType;
+
+ private String audit;
+
+}
diff --git a/ruoyi-work/src/main/java/com/ruoyi/work/domain/TProcess.java b/ruoyi-work/src/main/java/com/ruoyi/work/domain/TProcess.java
new file mode 100644
index 000000000..430fbc963
--- /dev/null
+++ b/ruoyi-work/src/main/java/com/ruoyi/work/domain/TProcess.java
@@ -0,0 +1,84 @@
+package com.ruoyi.work.domain;
+
+import com.baomidou.mybatisplus.annotation.TableId;
+import com.baomidou.mybatisplus.annotation.TableName;
+import lombok.Data;
+
+import java.util.Date;
+
+/**
+ * 流程对象 process
+ *
+ * @author ruoyi
+ * @date 2023-02-03
+ */
+@Data
+@TableName("process")
+public class TProcess {
+
+ private static final long serialVersionUID=1L;
+
+ /**
+ *
+ */
+ @TableId(value = "id")
+ private Long id;
+ /**
+ * 流程名称
+ */
+ private String name;
+ /**
+ * 流程key
+ */
+ private String processKey;
+ /**
+ * 流程步骤
+ */
+ private String step;
+ /**
+ * 流程类型(1,普通类型,2会签,3根据接口获取审核部门)
+ */
+ private String type;
+ /**
+ * 审核类型(1,人员,2.部门,3角色)
+ */
+ private String checkType;
+ /**
+ * 审核人员
+ */
+ private Long processCheck;
+ /**
+ * 抄送人员
+ */
+ private String cc;
+ /**
+ * 是由存在下一步骤
+ */
+ private Boolean isNext;
+
+ /**
+ * 创建时间
+ */
+ private Date createTime;
+
+ /**
+ * 业务规则接口id
+ */
+ private Long ruleId;
+
+ /**
+ * 如果不是根据接口获取人员此处就是人员id获取部门,角色id,否则就是空的
+ */
+ private String audit;
+
+ private String param;
+
+ private String timeout;
+
+ private String paramName;
+
+ private String bean;
+
+ private String description;
+
+}
diff --git a/ruoyi-work/src/main/java/com/ruoyi/work/domain/bo/ActProcessBo.java b/ruoyi-work/src/main/java/com/ruoyi/work/domain/bo/ActProcessBo.java
new file mode 100644
index 000000000..30bb2bc05
--- /dev/null
+++ b/ruoyi-work/src/main/java/com/ruoyi/work/domain/bo/ActProcessBo.java
@@ -0,0 +1,57 @@
+package com.ruoyi.work.domain.bo;
+
+import com.ruoyi.common.core.validate.AddGroup;
+import com.ruoyi.common.core.validate.EditGroup;
+import lombok.Data;
+
+import javax.validation.constraints.NotBlank;
+import javax.validation.constraints.NotNull;
+
+/**
+ * 流程运作业务对象 act_process
+ *
+ * @author ruoyi
+ * @date 2023-02-03
+ */
+
+@Data
+public class ActProcessBo {
+
+ /**
+ *
+ */
+ @NotNull(message = "不能为空", groups = { EditGroup.class })
+ private Long id;
+
+ /**
+ * 流程表id
+ */
+ @NotBlank(message = "流程表id不能为空", groups = { AddGroup.class, EditGroup.class })
+ private String processId;
+
+ /**
+ * 业务id
+ */
+ @NotBlank(message = "业务id不能为空", groups = { AddGroup.class, EditGroup.class })
+ private String businessId;
+
+ /**
+ * 审核
+ */
+ @NotBlank(message = "审核不能为空", groups = { AddGroup.class, EditGroup.class })
+ private String audit;
+
+ /**
+ * 审核类型(1,人员,2.部门,3角色)
+ */
+ @NotBlank(message = "审核类型(1,人员,2.部门,3角色)不能为空", groups = { AddGroup.class, EditGroup.class })
+ private String checkType;
+
+ /**
+ * 步骤
+ */
+ @NotBlank(message = "步骤不能为空", groups = { AddGroup.class, EditGroup.class })
+ private String step;
+
+
+}
diff --git a/ruoyi-work/src/main/java/com/ruoyi/work/domain/bo/AuditLogBo.java b/ruoyi-work/src/main/java/com/ruoyi/work/domain/bo/AuditLogBo.java
new file mode 100644
index 000000000..abb0d6ea7
--- /dev/null
+++ b/ruoyi-work/src/main/java/com/ruoyi/work/domain/bo/AuditLogBo.java
@@ -0,0 +1,85 @@
+package com.ruoyi.work.domain.bo;
+
+import com.ruoyi.common.core.validate.AddGroup;
+import com.ruoyi.common.core.validate.EditGroup;
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+import javax.validation.constraints.*;
+
+import java.util.Date;
+
+import com.ruoyi.common.core.domain.BaseEntity;
+
+/**
+ * 审核日志业务对象 audit_log
+ *
+ * @author ruoyi
+ * @date 2023-03-22
+ */
+
+@Data
+@EqualsAndHashCode(callSuper = true)
+public class AuditLogBo extends BaseEntity {
+
+ /**
+ *
+ */
+ @NotNull(message = "不能为空", groups = { EditGroup.class })
+ private Long id;
+
+ /**
+ * 审核员id
+ */
+ @NotNull(message = "审核员id不能为空", groups = { AddGroup.class, EditGroup.class })
+ private String auditId;
+
+ /**
+ * 审核员姓名
+ */
+ @NotBlank(message = "审核员姓名不能为空", groups = { AddGroup.class, EditGroup.class })
+ private String adminUserName;
+
+ /**
+ * 关联表id
+ */
+ @NotNull(message = "关联表id不能为空", groups = { AddGroup.class, EditGroup.class })
+ private String otherId;
+
+ /**
+ * 回复
+ */
+ @NotBlank(message = "回复不能为空", groups = { AddGroup.class, EditGroup.class })
+ private String reply;
+
+ /**
+ * 状态 1.待提交 2.受理中 3.受理退件 4.受理驳回 5.初审中 6初审不通过 7.初审退件 8.审定中 9.审定不通过 10.审定通过
+ */
+ @NotBlank(message = "状态 1.待提交 2.受理中 3.受理退件 4.受理驳回 5.初审中 6初审不通过 7.初审退件 8.审定中 9.审定不通过 10.审定通过不能为空", groups = { AddGroup.class, EditGroup.class })
+ private String status;
+
+ /**
+ * 部门角色
+ */
+ @NotBlank(message = "部门角色不能为空", groups = { AddGroup.class, EditGroup.class })
+ private String roleName;
+
+ /**
+ * 推送记录
+ */
+ @NotBlank(message = "推送记录不能为空", groups = { AddGroup.class, EditGroup.class })
+ private String pushLog;
+
+ /**
+ * 审核员类型(1人员,2部门,3角色,4公司)
+ */
+ @NotBlank(message = "审核员类型(1人员,2部门,3角色,4公司)不能为空", groups = { AddGroup.class, EditGroup.class })
+ private String auditType;
+
+ private String processKey;
+
+ private String audit;
+
+ private String step;
+
+
+}
diff --git a/ruoyi-work/src/main/java/com/ruoyi/work/domain/bo/HisProcessBo.java b/ruoyi-work/src/main/java/com/ruoyi/work/domain/bo/HisProcessBo.java
new file mode 100644
index 000000000..51dbf5dc7
--- /dev/null
+++ b/ruoyi-work/src/main/java/com/ruoyi/work/domain/bo/HisProcessBo.java
@@ -0,0 +1,62 @@
+package com.ruoyi.work.domain.bo;
+
+import com.ruoyi.common.core.domain.BaseEntity;
+import com.ruoyi.common.core.validate.AddGroup;
+import com.ruoyi.common.core.validate.EditGroup;
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+
+import javax.validation.constraints.NotBlank;
+import javax.validation.constraints.NotNull;
+
+/**
+ * 历史运作业务对象 his_process
+ *
+ * @author ruoyi
+ * @date 2023-02-03
+ */
+
+@Data
+@EqualsAndHashCode(callSuper = true)
+public class HisProcessBo extends BaseEntity {
+
+ /**
+ *
+ */
+ @NotNull(message = "不能为空", groups = { EditGroup.class })
+ private Long id;
+
+ /**
+ * 流程表id
+ */
+ @NotBlank(message = "流程表id不能为空", groups = { AddGroup.class, EditGroup.class })
+ private String processId;
+
+ /**
+ * 业务id
+ */
+ @NotBlank(message = "业务id不能为空", groups = { AddGroup.class, EditGroup.class })
+ private String businessId;
+
+ /**
+ * 审核
+ */
+ @NotBlank(message = "审核不能为空", groups = { AddGroup.class, EditGroup.class })
+ private String check;
+
+ /**
+ * 审核类型(1,人员,2.部门,3角色)
+ */
+ @NotBlank(message = "审核类型(1,人员,2.部门,3角色)不能为空", groups = { AddGroup.class, EditGroup.class })
+ private String checkType;
+
+ /**
+ * 1fail(失败),2success(成功)
+ */
+ @NotBlank(message = "1fail(失败),2success(成功)不能为空", groups = { AddGroup.class, EditGroup.class })
+ private String status;
+
+ private String companyName;
+
+
+}
diff --git a/ruoyi-work/src/main/java/com/ruoyi/work/domain/bo/ProcessBo.java b/ruoyi-work/src/main/java/com/ruoyi/work/domain/bo/ProcessBo.java
new file mode 100644
index 000000000..74a5b9f14
--- /dev/null
+++ b/ruoyi-work/src/main/java/com/ruoyi/work/domain/bo/ProcessBo.java
@@ -0,0 +1,96 @@
+package com.ruoyi.work.domain.bo;
+
+import com.ruoyi.common.core.domain.BaseEntity;
+import com.ruoyi.common.core.validate.AddGroup;
+import com.ruoyi.common.core.validate.EditGroup;
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+
+import javax.validation.constraints.NotBlank;
+import javax.validation.constraints.NotNull;
+
+/**
+ * 流程业务对象 process
+ *
+ * @author ruoyi
+ * @date 2023-02-03
+ */
+
+@Data
+@EqualsAndHashCode(callSuper = true)
+public class ProcessBo extends BaseEntity {
+
+ /**
+ *
+ */
+ @NotNull(message = "不能为空", groups = { EditGroup.class })
+ private Long id;
+
+ /**
+ * 流程名称
+ */
+ @NotBlank(message = "流程名称不能为空", groups = { AddGroup.class, EditGroup.class })
+ private String name;
+
+ /**
+ * 流程key
+ */
+ @NotBlank(message = "流程key不能为空", groups = { AddGroup.class, EditGroup.class })
+ private String ProcessKey;
+
+ /**
+ * 流程步骤
+ */
+ @NotBlank(message = "流程步骤不能为空", groups = { AddGroup.class, EditGroup.class })
+ private String step;
+
+ /**
+ * 流程类型(1,普通类型,2会签,3根据接口获取审核部门)
+ */
+ @NotBlank(message = "流程类型(1,普通类型,2会签,3根据接口获取审核部门)不能为空", groups = { AddGroup.class, EditGroup.class })
+ private String type;
+
+ /**
+ * 审核类型(1,人员,2.部门,3角色)
+ */
+ @NotBlank(message = "审核类型(1,人员,2.部门,3角色)不能为空", groups = { AddGroup.class, EditGroup.class })
+ private String checkType;
+
+ /**
+ * 审核人员
+ */
+ @NotBlank(message = "审核人员不能为空", groups = { AddGroup.class, EditGroup.class })
+ private Long processCheck;
+
+ /**
+ * 抄送人员
+ */
+ @NotBlank(message = "抄送人员不能为空", groups = { AddGroup.class, EditGroup.class })
+ private String cc;
+
+ /**
+ * 是由存在下一步骤
+ */
+ @NotNull(message = "是由存在下一步骤不能为空", groups = { AddGroup.class, EditGroup.class })
+ private Boolean isNext;
+
+ /**
+ * 业务规则接口id
+ */
+ private Long ruleId;
+
+ /**
+ * 如果不是根据接口获取人员此处就是人员id获取部门,角色id,否则就是空的
+ */
+ private String audit;
+
+ private String timeout;
+
+ private String paramName;
+
+ private String bean;
+
+ private String description;
+
+
+}
diff --git a/ruoyi-work/src/main/java/com/ruoyi/work/domain/bo/ReturnBean.java b/ruoyi-work/src/main/java/com/ruoyi/work/domain/bo/ReturnBean.java
new file mode 100644
index 000000000..a1bd1d2ae
--- /dev/null
+++ b/ruoyi-work/src/main/java/com/ruoyi/work/domain/bo/ReturnBean.java
@@ -0,0 +1,9 @@
+package com.ruoyi.work.domain.bo;
+
+import lombok.Data;
+
+@Data
+public class ReturnBean {
+ private String name;
+ private String processKey;
+}
diff --git a/ruoyi-work/src/main/java/com/ruoyi/work/domain/bo/RollBackLogBo.java b/ruoyi-work/src/main/java/com/ruoyi/work/domain/bo/RollBackLogBo.java
new file mode 100644
index 000000000..2646e98a9
--- /dev/null
+++ b/ruoyi-work/src/main/java/com/ruoyi/work/domain/bo/RollBackLogBo.java
@@ -0,0 +1,49 @@
+package com.ruoyi.work.domain.bo;
+
+import com.ruoyi.common.core.domain.BaseEntity;
+import com.ruoyi.common.core.validate.AddGroup;
+import com.ruoyi.common.core.validate.EditGroup;
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+
+import javax.validation.constraints.NotBlank;
+import javax.validation.constraints.NotNull;
+
+/**
+ * 撤销记录业务对象 roll_back_log
+ *
+ * @author ruoyi
+ * @date 2023-03-07
+ */
+
+@Data
+@EqualsAndHashCode(callSuper = true)
+public class RollBackLogBo extends BaseEntity {
+
+ /**
+ *
+ */
+ @NotNull(message = "不能为空", groups = { EditGroup.class })
+ private Long id;
+
+ /**
+ * 是后台撤回还是前台撤回
+ */
+ @NotBlank(message = "是后台撤回还是前台撤回不能为空", groups = { AddGroup.class, EditGroup.class })
+ private String type;
+
+ /**
+ * 撤销原因
+ */
+ @NotBlank(message = "撤销原因不能为空", groups = { AddGroup.class, EditGroup.class })
+ private String reply;
+
+
+ /**
+ * 将运行表中的数据保存
+ */
+ @NotBlank(message = "将运行表中的数据保存不能为空", groups = { AddGroup.class, EditGroup.class })
+ private String param;
+
+
+}
diff --git a/ruoyi-work/src/main/java/com/ruoyi/work/domain/vo/ActProcessVo.java b/ruoyi-work/src/main/java/com/ruoyi/work/domain/vo/ActProcessVo.java
new file mode 100644
index 000000000..1bf8ffba6
--- /dev/null
+++ b/ruoyi-work/src/main/java/com/ruoyi/work/domain/vo/ActProcessVo.java
@@ -0,0 +1,75 @@
+package com.ruoyi.work.domain.vo;
+
+import com.alibaba.excel.annotation.ExcelIgnoreUnannotated;
+import com.alibaba.excel.annotation.ExcelProperty;
+import com.ruoyi.common.annotation.ExcelDictFormat;
+import com.ruoyi.common.convert.ExcelDictConvert;
+import lombok.Data;
+
+import java.util.Date;
+
+
+
+/**
+ * 流程运作视图对象 act_process
+ *
+ * @author ruoyi
+ * @date 2023-02-03
+ */
+@Data
+@ExcelIgnoreUnannotated
+public class ActProcessVo {
+
+ private static final long serialVersionUID = 1L;
+
+ /**
+ *
+ */
+ @ExcelProperty(value = "")
+ private Long id;
+
+ /**
+ * 流程表id
+ */
+ @ExcelProperty(value = "流程表id")
+ private String processId;
+
+ /**
+ * 业务id
+ */
+ @ExcelProperty(value = "业务id")
+ private String businessId;
+
+ /**
+ * 审核
+ */
+ @ExcelProperty(value = "审核")
+ private String audit;
+
+ /**
+ * 审核类型(1,人员,2.部门,3角色)
+ */
+ @ExcelProperty(value = "审核类型", converter = ExcelDictConvert.class)
+ @ExcelDictFormat(readConverterExp = "1=,人员,2.部门,3角色")
+ private String checkType;
+
+ /**
+ * 步骤
+ */
+ @ExcelProperty(value = "步骤")
+ private String step;
+
+ private Date createTime=new Date();
+
+ /**
+ * 是由存在下一步骤
+ */
+ @ExcelProperty(value = "是由存在下一步骤")
+ private Boolean isNext;
+
+ private String type;
+
+ private String startUser;
+
+
+}
diff --git a/ruoyi-work/src/main/java/com/ruoyi/work/domain/vo/AuditLogVo.java b/ruoyi-work/src/main/java/com/ruoyi/work/domain/vo/AuditLogVo.java
new file mode 100644
index 000000000..89aceaac0
--- /dev/null
+++ b/ruoyi-work/src/main/java/com/ruoyi/work/domain/vo/AuditLogVo.java
@@ -0,0 +1,86 @@
+package com.ruoyi.work.domain.vo;
+
+import com.alibaba.excel.annotation.ExcelIgnoreUnannotated;
+import com.alibaba.excel.annotation.ExcelProperty;
+import com.ruoyi.common.annotation.ExcelDictFormat;
+import com.ruoyi.common.convert.ExcelDictConvert;
+import lombok.Data;
+import java.util.Date;
+
+
+
+/**
+ * 审核日志视图对象 audit_log
+ *
+ * @author ruoyi
+ * @date 2023-03-22
+ */
+@Data
+@ExcelIgnoreUnannotated
+public class AuditLogVo {
+
+ private static final long serialVersionUID = 1L;
+
+ /**
+ *
+ */
+ @ExcelProperty(value = "")
+ private Long id;
+
+ /**
+ * 审核员id
+ */
+ @ExcelProperty(value = "审核员id")
+ private String auditId;
+
+ /**
+ * 审核员姓名
+ */
+ @ExcelProperty(value = "审核员姓名")
+ private String adminUserName;
+
+ /**
+ * 关联表id
+ */
+ @ExcelProperty(value = "关联表id")
+ private String otherId;
+
+ /**
+ * 回复
+ */
+ @ExcelProperty(value = "回复")
+ private String reply;
+
+ /**
+ * 状态 1.待提交 2.受理中 3.受理退件 4.受理驳回 5.初审中 6初审不通过 7.初审退件 8.审定中 9.审定不通过 10.审定通过
+ */
+ @ExcelProperty(value = "状态 1.待提交 2.受理中 3.受理退件 4.受理驳回 5.初审中 6初审不通过 7.初审退件 8.审定中 9.审定不通过 10.审定通过")
+ private String status;
+
+ /**
+ * 部门角色
+ */
+ @ExcelProperty(value = "部门角色")
+ private String roleName;
+
+ /**
+ * 推送记录
+ */
+ @ExcelProperty(value = "推送记录")
+ private String pushLog;
+
+ /**
+ * 审核员类型(1人员,2部门,3角色,4公司)
+ */
+ @ExcelProperty(value = "审核员类型(1人员,2部门,3角色,4公司)")
+ private String auditType;
+
+ private String processKey;
+
+ private String audit;
+
+ private String step;
+
+
+
+}
diff --git a/ruoyi-work/src/main/java/com/ruoyi/work/domain/vo/HisProcessVo.java b/ruoyi-work/src/main/java/com/ruoyi/work/domain/vo/HisProcessVo.java
new file mode 100644
index 000000000..457e5e99e
--- /dev/null
+++ b/ruoyi-work/src/main/java/com/ruoyi/work/domain/vo/HisProcessVo.java
@@ -0,0 +1,78 @@
+package com.ruoyi.work.domain.vo;
+
+import com.alibaba.excel.annotation.ExcelIgnoreUnannotated;
+import com.alibaba.excel.annotation.ExcelProperty;
+import com.baomidou.mybatisplus.annotation.TableField;
+import com.ruoyi.common.annotation.ExcelDictFormat;
+import com.ruoyi.common.convert.ExcelDictConvert;
+import lombok.Data;
+
+import java.util.Date;
+
+
+/**
+ * 历史运作视图对象 his_process
+ *
+ * @author ruoyi
+ * @date 2023-02-03
+ */
+@Data
+@ExcelIgnoreUnannotated
+public class HisProcessVo {
+
+ private static final long serialVersionUID = 1L;
+
+ /**
+ *
+ */
+ @ExcelProperty(value = "")
+ private Long id;
+
+ /**
+ * 流程表id
+ */
+ @ExcelProperty(value = "流程表id")
+ private String processId;
+
+ /**
+ * 业务id
+ */
+ @ExcelProperty(value = "业务id")
+ private String businessId;
+
+ /**
+ * 审核
+ */
+ @ExcelProperty(value = "审核")
+ private String audit;
+
+ @TableField(exist = false)
+ private String audit1;
+
+ /**
+ * 审核类型(1,人员,2.部门,3角色)
+ */
+ @ExcelProperty(value = "审核类型", converter = ExcelDictConvert.class)
+ @ExcelDictFormat(readConverterExp = "1=,人员,2.部门,3角色")
+ private String checkType;
+
+ /**
+ * 1fail(失败),2success(成功)
+ */
+ @ExcelProperty(value = "1fail(失败),2success", converter = ExcelDictConvert.class)
+ @ExcelDictFormat(readConverterExp = "成=功")
+ private String status;
+
+ private String step;
+
+ private String type;
+
+ private String companyName;
+
+ private Date createTime;
+
+ private String startUser;
+
+
+
+}
diff --git a/ruoyi-work/src/main/java/com/ruoyi/work/domain/vo/ProcessVo.java b/ruoyi-work/src/main/java/com/ruoyi/work/domain/vo/ProcessVo.java
new file mode 100644
index 000000000..e863ac1b8
--- /dev/null
+++ b/ruoyi-work/src/main/java/com/ruoyi/work/domain/vo/ProcessVo.java
@@ -0,0 +1,117 @@
+package com.ruoyi.work.domain.vo;
+
+import com.alibaba.excel.annotation.ExcelIgnoreUnannotated;
+import com.alibaba.excel.annotation.ExcelProperty;
+import com.baomidou.mybatisplus.annotation.TableField;
+import com.ruoyi.common.annotation.ExcelDictFormat;
+import com.ruoyi.common.convert.ExcelDictConvert;
+import com.ruoyi.work.domain.AuditLog;
+import lombok.Data;
+
+import java.util.List;
+import java.util.Map;
+
+
+/**
+ * 流程视图对象 process
+ *
+ * @author ruoyi
+ * @date 2023-02-03
+ */
+@Data
+@ExcelIgnoreUnannotated
+public class ProcessVo {
+
+ private static final long serialVersionUID = 1L;
+
+ /**
+ *
+ */
+ @ExcelProperty(value = "")
+ private Long id;
+
+ /**
+ * 流程名称
+ */
+ @ExcelProperty(value = "流程名称")
+ private String name;
+
+ /**
+ * 流程key
+ */
+ @ExcelProperty(value = "流程key")
+ private String processKey;
+
+ /**
+ * 流程步骤
+ */
+ @ExcelProperty(value = "流程步骤")
+ private String step;
+
+ /**
+ * 流程类型(1,普通类型,2会签,3根据接口获取审核部门)
+ */
+ @ExcelProperty(value = "流程类型(1,普通类型,2会签,3根据接口获取审核部门)")
+ private String type;
+
+ /**
+ * 审核类型(1,人员,2.部门,3角色)
+ */
+ @ExcelProperty(value = "审核类型", converter = ExcelDictConvert.class)
+ @ExcelDictFormat(readConverterExp = "1=,人员,2.部门,3角色")
+ private String checkType;
+
+ /**
+ * 审核人员
+ */
+ @ExcelProperty(value = "审核人员类型(1普通,2根据接口获取人员)")
+ private Long processCheck;
+
+ /**
+ * 抄送人员
+ */
+ @ExcelProperty(value = "抄送人员")
+ private String cc;
+
+ /**
+ * 是由存在下一步骤
+ */
+ @ExcelProperty(value = "是由存在下一步骤")
+ private Boolean isNext;
+
+ /**
+ * 如果不是根据接口获取人员此处就是人员id获取部门,角色id,否则就是空的
+ */
+ private String audit;
+
+ /**
+ * 接口所需参数
+ */
+ private String param;
+
+ private String paramName;
+
+ private Map params;
+
+ private Long ruleId;
+
+ private String businessId;
+
+ private String startUser;
+
+ private String timeout;
+
+ @TableField(exist = false)
+ private String checked;
+
+ private String bean;
+
+ private String description;
+
+ @TableField(exist = false)
+ private List auditLogList;
+
+
+
+
+}
diff --git a/ruoyi-work/src/main/java/com/ruoyi/work/domain/vo/RollBackLogVo.java b/ruoyi-work/src/main/java/com/ruoyi/work/domain/vo/RollBackLogVo.java
new file mode 100644
index 000000000..7000344bb
--- /dev/null
+++ b/ruoyi-work/src/main/java/com/ruoyi/work/domain/vo/RollBackLogVo.java
@@ -0,0 +1,60 @@
+package com.ruoyi.work.domain.vo;
+
+import com.alibaba.excel.annotation.ExcelIgnoreUnannotated;
+import com.alibaba.excel.annotation.ExcelProperty;
+import lombok.Data;
+
+import java.util.Date;
+
+
+
+/**
+ * 撤销记录视图对象 roll_back_log
+ *
+ * @author ruoyi
+ * @date 2023-03-07
+ */
+@Data
+@ExcelIgnoreUnannotated
+public class RollBackLogVo {
+
+ private static final long serialVersionUID = 1L;
+
+ /**
+ *
+ */
+ @ExcelProperty(value = "")
+ private Long id;
+
+ /**
+ * 撤销时间
+ */
+ @ExcelProperty(value = "撤销时间")
+ private Date createTime;
+
+ /**
+ * 是后台撤回还是前台撤回
+ */
+ @ExcelProperty(value = "是后台撤回还是前台撤回")
+ private String type;
+
+ /**
+ * 撤销原因
+ */
+ @ExcelProperty(value = "撤销原因")
+ private String reply;
+
+ /**
+ * 撤销人id
+ */
+ @ExcelProperty(value = "撤销人id")
+ private String createBy;
+
+ /**
+ * 将运行表中的数据保存
+ */
+ @ExcelProperty(value = "将运行表中的数据保存")
+ private String param;
+
+
+}
diff --git a/ruoyi-work/src/main/java/com/ruoyi/work/dto/BusinessDTO.java b/ruoyi-work/src/main/java/com/ruoyi/work/dto/BusinessDTO.java
new file mode 100644
index 000000000..ebe9072b4
--- /dev/null
+++ b/ruoyi-work/src/main/java/com/ruoyi/work/dto/BusinessDTO.java
@@ -0,0 +1,18 @@
+package com.ruoyi.work.dto;
+
+import lombok.Data;
+
+import java.io.Serializable;
+import java.util.Map;
+
+@Data
+public class BusinessDTO implements Serializable {
+
+ private String businessId;
+
+ private Map params;
+
+ private String processKey;
+
+
+}
diff --git a/ruoyi-work/src/main/java/com/ruoyi/work/dto/HisProcessVoResultDto.java b/ruoyi-work/src/main/java/com/ruoyi/work/dto/HisProcessVoResultDto.java
new file mode 100644
index 000000000..2898cf7e0
--- /dev/null
+++ b/ruoyi-work/src/main/java/com/ruoyi/work/dto/HisProcessVoResultDto.java
@@ -0,0 +1,19 @@
+package com.ruoyi.work.dto;
+
+import com.ruoyi.work.domain.vo.HisProcessVo;
+import lombok.AllArgsConstructor;
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+import lombok.NoArgsConstructor;
+
+import java.util.List;
+
+@Data
+@EqualsAndHashCode
+@AllArgsConstructor
+@NoArgsConstructor
+public class HisProcessVoResultDto {
+ private String step;
+ private List hisProcessVoList;
+
+}
diff --git a/ruoyi-work/src/main/java/com/ruoyi/work/dto/ProcessVoResultDto.java b/ruoyi-work/src/main/java/com/ruoyi/work/dto/ProcessVoResultDto.java
new file mode 100644
index 000000000..60bdbdd6d
--- /dev/null
+++ b/ruoyi-work/src/main/java/com/ruoyi/work/dto/ProcessVoResultDto.java
@@ -0,0 +1,19 @@
+package com.ruoyi.work.dto;
+
+import com.ruoyi.work.domain.vo.ProcessVo;
+import lombok.AllArgsConstructor;
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+import lombok.NoArgsConstructor;
+
+import java.util.List;
+
+@Data
+@EqualsAndHashCode
+@AllArgsConstructor
+@NoArgsConstructor
+public class ProcessVoResultDto {
+ private String step;
+ private List processVoList;
+
+}
diff --git a/ruoyi-work/src/main/java/com/ruoyi/work/mapper/ActBusinessRuleMapper.java b/ruoyi-work/src/main/java/com/ruoyi/work/mapper/ActBusinessRuleMapper.java
new file mode 100644
index 000000000..11807f8b5
--- /dev/null
+++ b/ruoyi-work/src/main/java/com/ruoyi/work/mapper/ActBusinessRuleMapper.java
@@ -0,0 +1,15 @@
+package com.ruoyi.work.mapper;
+
+import com.ruoyi.common.core.mapper.BaseMapperPlus;
+import com.ruoyi.work.domain.ActBusinessRule;
+import com.ruoyi.work.domain.ActBusinessRuleVo;
+
+/**
+ * 业务规则Mapper接口
+ *
+ * @author gssong
+ * @date 2021-12-16
+ */
+public interface ActBusinessRuleMapper extends BaseMapperPlus {
+
+}
diff --git a/ruoyi-work/src/main/java/com/ruoyi/work/mapper/ActProcessMapper.java b/ruoyi-work/src/main/java/com/ruoyi/work/mapper/ActProcessMapper.java
new file mode 100644
index 000000000..2249c29ea
--- /dev/null
+++ b/ruoyi-work/src/main/java/com/ruoyi/work/mapper/ActProcessMapper.java
@@ -0,0 +1,24 @@
+package com.ruoyi.work.mapper;
+
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.ruoyi.common.core.mapper.BaseMapperPlus;
+import com.ruoyi.work.domain.ActProcess;
+import com.ruoyi.work.domain.vo.ActProcessVo;
+import org.apache.ibatis.annotations.Mapper;
+import org.apache.ibatis.annotations.Param;
+
+/**
+ * 流程运作Mapper接口
+ *
+ * @author ruoyi
+ * @date 2023-02-03
+ */
+@Mapper
+public interface ActProcessMapper extends BaseMapperPlus {
+
+ Page selectVoListPage(@Param("page") Page page, @Param("actProcess") ActProcess actProcess);
+
+ Page selectCCList(@Param("page") Page page, @Param("actProcess") ActProcess actProcess);
+
+ ActProcess selectByIdResultBean2BusinessId(@Param("id") Long id);
+}
diff --git a/ruoyi-work/src/main/java/com/ruoyi/work/mapper/AuditLogMapper.java b/ruoyi-work/src/main/java/com/ruoyi/work/mapper/AuditLogMapper.java
new file mode 100644
index 000000000..92503f68f
--- /dev/null
+++ b/ruoyi-work/src/main/java/com/ruoyi/work/mapper/AuditLogMapper.java
@@ -0,0 +1,15 @@
+package com.ruoyi.work.mapper;
+
+import com.ruoyi.common.core.mapper.BaseMapperPlus;
+import com.ruoyi.work.domain.AuditLog;
+import com.ruoyi.work.domain.vo.AuditLogVo;
+
+/**
+ * 审核日志Mapper接口
+ *
+ * @author ruoyi
+ * @date 2023-03-22
+ */
+public interface AuditLogMapper extends BaseMapperPlus {
+
+}
diff --git a/ruoyi-work/src/main/java/com/ruoyi/work/mapper/HisProcessMapper.java b/ruoyi-work/src/main/java/com/ruoyi/work/mapper/HisProcessMapper.java
new file mode 100644
index 000000000..31ee1d393
--- /dev/null
+++ b/ruoyi-work/src/main/java/com/ruoyi/work/mapper/HisProcessMapper.java
@@ -0,0 +1,19 @@
+package com.ruoyi.work.mapper;
+
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.ruoyi.common.core.mapper.BaseMapperPlus;
+import com.ruoyi.work.domain.HisProcess;
+import com.ruoyi.work.domain.vo.HisProcessVo;
+import org.apache.ibatis.annotations.Param;
+
+/**
+ * 历史运作Mapper接口
+ *
+ * @author ruoyi
+ * @date 2023-02-03
+ */
+public interface HisProcessMapper extends BaseMapperPlus {
+
+ Page selectVoListPage(@Param("page") Page page, @Param("hisProcess") HisProcess hisProcess);
+
+}
diff --git a/ruoyi-work/src/main/java/com/ruoyi/work/mapper/ProcessMapper.java b/ruoyi-work/src/main/java/com/ruoyi/work/mapper/ProcessMapper.java
new file mode 100644
index 000000000..450e33866
--- /dev/null
+++ b/ruoyi-work/src/main/java/com/ruoyi/work/mapper/ProcessMapper.java
@@ -0,0 +1,18 @@
+package com.ruoyi.work.mapper;
+
+import com.ruoyi.common.core.mapper.BaseMapperPlus;
+import com.ruoyi.work.domain.TProcess;
+import com.ruoyi.work.domain.vo.ProcessVo;
+import org.apache.ibatis.annotations.Param;
+
+/**
+ * 流程Mapper接口
+ *
+ * @author ruoyi
+ * @date 2023-02-03
+ */
+public interface ProcessMapper extends BaseMapperPlus {
+
+ boolean updateCommonByBusinessId(@Param("bean") String bean, @Param("processStatus") String processStatus, @Param("businessId") String businessId);
+
+}
diff --git a/ruoyi-work/src/main/java/com/ruoyi/work/mapper/RollBackLogMapper.java b/ruoyi-work/src/main/java/com/ruoyi/work/mapper/RollBackLogMapper.java
new file mode 100644
index 000000000..c4a49ff88
--- /dev/null
+++ b/ruoyi-work/src/main/java/com/ruoyi/work/mapper/RollBackLogMapper.java
@@ -0,0 +1,15 @@
+package com.ruoyi.work.mapper;
+
+import com.ruoyi.common.core.mapper.BaseMapperPlus;
+import com.ruoyi.work.domain.RollBackLog;
+import com.ruoyi.work.domain.vo.RollBackLogVo;
+
+/**
+ * 撤销记录Mapper接口
+ *
+ * @author ruoyi
+ * @date 2023-03-07
+ */
+public interface RollBackLogMapper extends BaseMapperPlus {
+
+}
diff --git a/ruoyi-work/src/main/java/com/ruoyi/work/service/IProcessService.java b/ruoyi-work/src/main/java/com/ruoyi/work/service/IProcessService.java
new file mode 100644
index 000000000..21a3a319d
--- /dev/null
+++ b/ruoyi-work/src/main/java/com/ruoyi/work/service/IProcessService.java
@@ -0,0 +1,48 @@
+package com.ruoyi.work.service;
+
+import com.ruoyi.common.core.domain.PageQuery;
+import com.ruoyi.common.core.page.TableDataInfo;
+import com.ruoyi.work.domain.bo.ProcessBo;
+import com.ruoyi.work.domain.vo.ProcessVo;
+
+import java.util.Collection;
+import java.util.List;
+
+/**
+ * 流程Service接口
+ *
+ * @author ruoyi
+ * @date 2023-02-03
+ */
+public interface IProcessService {
+
+ /**
+ * 查询流程
+ */
+ ProcessVo queryById(Long id);
+
+ /**
+ * 查询流程列表
+ */
+ TableDataInfo queryPageList(ProcessBo bo, PageQuery pageQuery);
+
+ /**
+ * 查询流程列表
+ */
+ List queryList(ProcessBo bo);
+
+ /**
+ * 新增流程
+ */
+ Boolean insertByBo(ProcessBo bo);
+
+ /**
+ * 修改流程
+ */
+ Boolean updateByBo(ProcessBo bo);
+
+ /**
+ * 校验并批量删除流程信息
+ */
+ Boolean deleteWithValidByIds(Collection ids, Boolean isValid);
+}
diff --git a/ruoyi-work/src/main/java/com/ruoyi/work/service/IWorkSysDeptService.java b/ruoyi-work/src/main/java/com/ruoyi/work/service/IWorkSysDeptService.java
new file mode 100644
index 000000000..f1f65771b
--- /dev/null
+++ b/ruoyi-work/src/main/java/com/ruoyi/work/service/IWorkSysDeptService.java
@@ -0,0 +1,62 @@
+package com.ruoyi.work.service;
+
+import cn.hutool.core.lang.tree.Tree;
+import com.ruoyi.common.core.domain.entity.SysDept;
+
+import java.util.List;
+
+/**
+ * 部门管理 服务层
+ *
+ * @author Lion Li
+ */
+public interface IWorkSysDeptService {
+ /**
+ * 查询部门管理数据
+ *
+ * @param dept 部门信息
+ * @return 部门信息集合
+ */
+ List selectDeptList(SysDept dept);
+
+ /**
+ * 查询部门树结构信息
+ *
+ * @param dept 部门信息
+ * @return 部门树信息集合
+ */
+ List> selectDeptTreeList(SysDept dept);
+
+ /**
+ * 构建前端所需要下拉树结构
+ *
+ * @param depts 部门列表
+ * @return 下拉树结构列表
+ */
+ List> buildDeptTreeSelect(List depts);
+
+ /**
+ * 根据角色ID查询部门树信息
+ *
+ * @param roleId 角色ID
+ * @return 选中部门列表
+ */
+ List selectDeptListByRoleId(Long roleId);
+
+ /**
+ * 根据部门ID查询信息
+ *
+ * @param deptId 部门ID
+ * @return 部门信息
+ */
+ SysDept selectDeptById(Long deptId);
+
+ /**
+ * 根据ID查询所有子部门数(正常状态)
+ *
+ * @param deptId 部门ID
+ * @return 子部门数
+ */
+ long selectNormalChildrenDeptById(Long deptId);
+
+}
diff --git a/ruoyi-work/src/main/java/com/ruoyi/work/service/IWorkSysRoleService.java b/ruoyi-work/src/main/java/com/ruoyi/work/service/IWorkSysRoleService.java
new file mode 100644
index 000000000..69dc058b3
--- /dev/null
+++ b/ruoyi-work/src/main/java/com/ruoyi/work/service/IWorkSysRoleService.java
@@ -0,0 +1,63 @@
+package com.ruoyi.work.service;
+
+import com.ruoyi.common.core.domain.entity.SysRole;
+
+import java.util.List;
+import java.util.Set;
+
+/**
+ * 角色业务层
+ *
+ * @author Lion Li
+ */
+public interface IWorkSysRoleService {
+
+ /**
+ * 根据条件分页查询角色数据
+ *
+ * @param role 角色信息
+ * @return 角色数据集合信息
+ */
+ List selectRoleList(SysRole role);
+
+ /**
+ * 根据用户ID查询角色列表
+ *
+ * @param userId 用户ID
+ * @return 角色列表
+ */
+ List selectRolesByUserId(Long userId);
+
+ /**
+ * 根据用户ID查询角色权限
+ *
+ * @param userId 用户ID
+ * @return 权限列表
+ */
+ Set selectRolePermissionByUserId(Long userId);
+
+ /**
+ * 查询所有角色
+ *
+ * @return 角色列表
+ */
+ List selectRoleAll();
+
+ /**
+ * 根据用户ID获取角色选择框列表
+ *
+ * @param userId 用户ID
+ * @return 选中角色ID列表
+ */
+ List selectRoleListByUserId(Long userId);
+
+ /**
+ * 通过角色ID查询角色
+ *
+ * @param roleId 角色ID
+ * @return 角色对象信息
+ */
+ SysRole selectRoleById(Long roleId);
+
+
+}
diff --git a/ruoyi-work/src/main/java/com/ruoyi/work/service/IWorkSysUserService.java b/ruoyi-work/src/main/java/com/ruoyi/work/service/IWorkSysUserService.java
new file mode 100644
index 000000000..bdbd068ef
--- /dev/null
+++ b/ruoyi-work/src/main/java/com/ruoyi/work/service/IWorkSysUserService.java
@@ -0,0 +1,54 @@
+package com.ruoyi.work.service;
+
+import com.ruoyi.common.core.domain.PageQuery;
+import com.ruoyi.common.core.domain.entity.SysUser;
+import com.ruoyi.common.core.page.TableDataInfo;
+
+import java.util.List;
+
+/**
+ * 用户 业务层
+ *
+ * @author Lion Li
+ */
+public interface IWorkSysUserService {
+
+
+
+ /**
+ * 根据条件分页查询用户列表
+ *
+ * @param user 用户信息
+ * @return 用户信息集合信息
+ */
+ List selectUserList(SysUser user);
+
+
+
+ /**
+ * 通过用户名查询用户
+ *
+ * @param userName 用户名
+ * @return 用户对象信息
+ */
+ SysUser selectUserByUserName(String userName);
+
+ /**
+ * 通过手机号查询用户
+ *
+ * @param phonenumber 手机号
+ * @return 用户对象信息
+ */
+ SysUser selectUserByPhonenumber(String phonenumber);
+
+ /**
+ * 通过用户ID查询用户
+ *
+ * @param userId 用户ID
+ * @return 用户对象信息
+ */
+ SysUser selectUserById(Long userId);
+
+
+
+}
diff --git a/ruoyi-work/src/main/java/com/ruoyi/work/service/impl/ProcessServiceImpl.java b/ruoyi-work/src/main/java/com/ruoyi/work/service/impl/ProcessServiceImpl.java
new file mode 100644
index 000000000..ea47df1dd
--- /dev/null
+++ b/ruoyi-work/src/main/java/com/ruoyi/work/service/impl/ProcessServiceImpl.java
@@ -0,0 +1,122 @@
+package com.ruoyi.work.service.impl;
+
+import cn.hutool.core.bean.BeanUtil;
+import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
+import com.baomidou.mybatisplus.core.toolkit.Wrappers;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.ruoyi.common.core.domain.PageQuery;
+import com.ruoyi.common.core.page.TableDataInfo;
+import com.ruoyi.common.utils.StringUtils;
+import com.ruoyi.work.domain.TProcess;
+import com.ruoyi.work.domain.bo.ProcessBo;
+import com.ruoyi.work.domain.vo.ProcessVo;
+import com.ruoyi.work.mapper.ProcessMapper;
+import com.ruoyi.work.service.IProcessService;
+import lombok.RequiredArgsConstructor;
+import org.springframework.stereotype.Service;
+
+import java.util.Collection;
+import java.util.List;
+
+/**
+ * 流程Service业务层处理
+ *
+ * @author ruoyi
+ * @date 2023-02-03
+ */
+@RequiredArgsConstructor
+@Service
+public class ProcessServiceImpl implements IProcessService {
+
+ private final ProcessMapper baseMapper;
+
+
+
+ /**
+ * 查询流程
+ */
+ @Override
+ public ProcessVo queryById(Long id){
+ return baseMapper.selectVoById(id);
+ }
+
+ /**
+ * 查询流程列表
+ */
+ @Override
+ public TableDataInfo queryPageList(ProcessBo bo, PageQuery pageQuery) {
+ LambdaQueryWrapper lqw = buildQueryWrapper(bo);
+ Page result = baseMapper.selectVoPage(pageQuery.build(), lqw);
+ return TableDataInfo.build(result);
+ }
+
+ /**
+ * 查询流程列表
+ */
+ @Override
+ public List queryList(ProcessBo bo) {
+ LambdaQueryWrapper lqw = buildQueryWrapper(bo);
+ return baseMapper.selectVoList(lqw);
+ }
+
+ private LambdaQueryWrapper buildQueryWrapper(ProcessBo bo) {
+ LambdaQueryWrapper lqw = Wrappers.lambdaQuery();
+ lqw.like(StringUtils.isNotBlank(bo.getName()), TProcess::getName, bo.getName());
+ lqw.eq(StringUtils.isNotBlank(bo.getProcessKey()), TProcess::getProcessKey, bo.getProcessKey());
+ lqw.eq(StringUtils.isNotBlank(bo.getStep()), TProcess::getStep, bo.getStep());
+ lqw.eq(StringUtils.isNotBlank(bo.getType()), TProcess::getType, bo.getType());
+ lqw.eq(StringUtils.isNotBlank(bo.getCheckType()), TProcess::getCheckType, bo.getCheckType());
+ lqw.eq(StringUtils.isNotBlank(bo.getProcessCheck().toString()), TProcess::getProcessCheck, bo.getProcessCheck());
+ lqw.eq(StringUtils.isNotBlank(bo.getCc()), TProcess::getCc, bo.getCc());
+ lqw.eq(bo.getIsNext() != null, TProcess::getIsNext, bo.getIsNext());
+ return lqw;
+ }
+
+ /**
+ * 新增流程
+ */
+ @Override
+ public Boolean insertByBo(ProcessBo bo) {
+ TProcess add = BeanUtil.toBean(bo, TProcess.class);
+ validEntityBeforeSave(add);
+ boolean flag = baseMapper.insert(add) > 0;
+ if (flag) {
+ bo.setId(add.getId());
+ }
+ return flag;
+ }
+
+ /**
+ * 修改流程
+ */
+ @Override
+ public Boolean updateByBo(ProcessBo bo) {
+ TProcess update = BeanUtil.toBean(bo, TProcess.class);
+ validEntityBeforeSave(update);
+ return baseMapper.updateById(update) > 0;
+ }
+
+ /**
+ * 保存前的数据校验
+ */
+ private void validEntityBeforeSave(TProcess entity){
+ //TODO 做一些数据校验,如唯一约束
+ }
+
+ /**
+ * 批量删除流程
+ */
+ @Override
+ public Boolean deleteWithValidByIds(Collection ids, Boolean isValid) {
+ if(isValid){
+ //TODO 做一些业务上的校验,判断是否需要校验
+ }
+ return baseMapper.deleteBatchIds(ids) > 0;
+ }
+
+ /**
+ * 通过流程表将人员添加到运行流程表中
+ */
+
+
+}
diff --git a/ruoyi-work/src/main/java/com/ruoyi/work/utils/WorkComplyUtils.java b/ruoyi-work/src/main/java/com/ruoyi/work/utils/WorkComplyUtils.java
new file mode 100644
index 000000000..cd030033e
--- /dev/null
+++ b/ruoyi-work/src/main/java/com/ruoyi/work/utils/WorkComplyUtils.java
@@ -0,0 +1,736 @@
+package com.ruoyi.work.utils;
+import cn.hutool.core.bean.BeanUtil;
+import cn.hutool.core.date.BetweenFormatter;
+import cn.hutool.core.date.DateTime;
+import cn.hutool.core.date.DateUnit;
+import cn.hutool.core.date.DateUtil;
+import cn.hutool.core.util.ObjectUtil;
+import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
+import com.baomidou.mybatisplus.core.toolkit.Wrappers;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.ruoyi.common.constant.Constants;
+import com.ruoyi.common.core.domain.PageQuery;
+import com.ruoyi.common.core.domain.R;
+import com.ruoyi.common.core.domain.entity.SysDept;
+import com.ruoyi.common.core.domain.entity.SysRole;
+import com.ruoyi.common.core.domain.entity.SysUser;
+import com.ruoyi.common.core.domain.model.LoginUser;
+import com.ruoyi.common.core.page.TableDataInfo;
+import com.ruoyi.common.exception.ServiceException;
+import com.ruoyi.common.helper.LoginHelper;
+import com.ruoyi.common.utils.BeanCopyUtils;
+import com.ruoyi.common.utils.DateUtils;
+import com.ruoyi.common.utils.JsonUtils;
+import com.ruoyi.common.utils.StringUtils;
+import com.ruoyi.common.utils.spring.SpringUtils;
+import com.ruoyi.work.domain.*;
+import com.ruoyi.work.domain.vo.ActProcessVo;
+import com.ruoyi.work.domain.vo.HisProcessVo;
+import com.ruoyi.work.domain.vo.ProcessVo;
+import com.ruoyi.work.dto.BusinessDTO;
+import com.ruoyi.work.dto.ProcessVoResultDto;
+import com.ruoyi.work.mapper.*;
+import com.ruoyi.work.service.IWorkSysDeptService;
+import com.ruoyi.work.service.IWorkSysRoleService;
+import com.ruoyi.work.service.IWorkSysUserService;
+import lombok.RequiredArgsConstructor;
+import org.springframework.stereotype.Component;
+import org.springframework.transaction.annotation.Transactional;
+import java.util.*;
+import java.util.stream.Collectors;
+
+/**
+ * 流程相关工具类
+ */
+@Component
+@RequiredArgsConstructor
+@Transactional
+public class WorkComplyUtils {
+
+ private static final ProcessMapper processMapper = SpringUtils.getBean(ProcessMapper.class);
+ private static final ActProcessMapper actProcessMapper = SpringUtils.getBean(ActProcessMapper.class);
+ private static final HisProcessMapper hisProcessMapper = SpringUtils.getBean(HisProcessMapper.class);
+
+ private static final IWorkSysRoleService sysRoleMapper= SpringUtils.getBean(IWorkSysRoleService.class);
+
+ private static final RollBackLogMapper rollBackLogMapper= SpringUtils.getBean(RollBackLogMapper.class);
+
+ private static final IWorkSysUserService sysUserMapper = SpringUtils.getBean(IWorkSysUserService.class);
+
+ private static final IWorkSysDeptService sysDeptMapper = SpringUtils.getBean(IWorkSysDeptService.class);
+
+ private static final AuditLogMapper auditLogMapper =SpringUtils.getBean(AuditLogMapper.class);
+
+
+ /**
+ * 任务创建
+ * @param processVo
+ */
+ public static void comply(ProcessVo processVo){
+ ActProcess actProcessVo = new ActProcess();
+ LambdaQueryWrapper lqw = Wrappers.lambdaQuery();
+ lqw.eq( TProcess::getProcessKey, processVo.getProcessKey());
+ lqw.eq(TProcess::getStep, processVo.getStep());
+
+ //判断这条业务是否在进行中
+ LambdaQueryWrapper queryWrapper = new LambdaQueryWrapper<>();
+ queryWrapper.eq(ActProcess::getBusinessId,processVo.getBusinessId());
+ List actProcessVos = actProcessMapper.selectVoList(queryWrapper);
+ if (actProcessVos.size()>0){
+ throw new ServiceException("当前业务正在审核中,请耐心等待");
+ }
+ ProcessVo tProcessByKey = processMapper.selectVoOne(lqw);
+ actProcessVo.setCreateTime(DateUtils.getNowDate());
+ actProcessVo.setCheckType(tProcessByKey.getCheckType());
+ actProcessVo.setStep(tProcessByKey.getStep());
+ actProcessVo.setStartUser(processVo.getStartUser());
+ actProcessVo.setProcessId(tProcessByKey.getId().toString());
+ actProcessVo.setBusinessId(processVo.getBusinessId());
+ actProcessVo.setIsNext(tProcessByKey.getIsNext());
+ if ("1".equals(tProcessByKey.getType())){//普通流程,只需要将人员设置到运行流程中即可
+ actProcessVo.setType(tProcessByKey.getType());
+ if (1L==tProcessByKey.getProcessCheck()) {
+ if("4".equals(tProcessByKey.getCheckType())){//企业审核
+ String audit = processVo.getParams().get(tProcessByKey.getParam()).toString();
+ actProcessVo.setAudit(audit);
+ }else {
+ actProcessVo.setAudit(tProcessByKey.getAudit());
+ }
+ }else if (2==tProcessByKey.getProcessCheck()){
+ // 根据接口获取
+ List personByRule = WorkUtils.getPersonByRule(tProcessByKey.getRuleId(),processVo.getParams());
+ actProcessVo.setAudit(personByRule.get(0));
+ }
+ actProcessMapper.insert(actProcessVo);
+ }else if ("2".equals(tProcessByKey.getType())){//会签
+ actProcessVo.setType(tProcessByKey.getType());
+ //将check以逗号拆分
+ List list = new ArrayList<>();
+ if (1L==tProcessByKey.getProcessCheck()) {
+ String[] split = tProcessByKey.getAudit().split(",");
+ for (String s : split) {
+ ActProcess actProcess = new ActProcess();
+ BeanCopyUtils.copy(actProcessVo,actProcess);
+ actProcess.setAudit(s);
+ list.add(actProcess);
+ }
+ }else if (2L==tProcessByKey.getProcessCheck()){
+ //根据接口获取
+ ArrayList personByRule = WorkUtils.getPersonByRule(tProcessByKey.getRuleId(),processVo.getParams());
+ //将某些固定的审核人员添加进去
+ if (ObjectUtil.isNotEmpty(tProcessByKey.getAudit())){
+ String[] split = tProcessByKey.getAudit().split(",");
+ Collections.addAll(personByRule,split);
+ }
+ for (String s : personByRule) {
+ ActProcess actProcess = new ActProcess();
+ BeanUtil.copyProperties(actProcessVo,actProcess);
+ actProcessVo.setAudit(s);
+ list.add(actProcess);
+ }
+ }
+ boolean b = actProcessMapper.insertBatch(list);
+ System.out.println("b = " + b);
+ }
+ }
+
+ /**
+ * 业务办理
+ * wait,等待,success成功,fail失败
+ * 状态:1已提交待审核,2审核成功,3失败
+ * 1.往hisProcess添加数据
+ * 2.根据businessId删除actProcess
+ */
+
+ public static String batchDeleted(HisProcess hisProcess){
+ hisProcess.setEndTime(DateUtils.getNowDate());
+ //获取当前购房信息
+ //1.得到当前这条运行任务
+ LambdaQueryWrapper lqw = new LambdaQueryWrapper<>();
+ lqw.eq(ActProcess::getBusinessId,hisProcess.getBusinessId());
+ List actProcessVos = actProcessMapper.selectVoList(lqw);
+ LoginUser loginUser = LoginHelper.getLoginUser();
+ if (actProcessVos.size()>0){
+ //根据审核人员类型判断流程中那条数据属于当前人的
+ String checkType = actProcessVos.get(0).getCheckType();
+ String audit ="";
+ if ("1".equals(checkType) || "4".equals(checkType)){
+ audit=loginUser.getUserId().toString();
+ }else if ("2".equals(checkType)){
+ audit = loginUser.getDeptId().toString();
+ }else if ("3".equals(checkType)){
+ audit = loginUser.getRoleId().toString();
+ }
+ String finalAudit = audit;
+ List collect = actProcessVos.stream().filter(e -> checkType.equals(e.getCheckType()) && finalAudit.equals(e.getAudit())).collect(Collectors.toList());
+ if (collect.size()>0) {
+ ActProcessVo actProcessVo = collect.get(0);
+ hisProcess.setCheckType(actProcessVo.getCheckType());
+ //往历史表里面添加当前数据
+ hisProcess.setProcessId(actProcessVo.getProcessId());
+ hisProcess.setCreateTime(actProcessVo.getCreateTime());
+ hisProcess.setStep(actProcessVo.getStep());
+ hisProcess.setType(actProcessVo.getType());
+ hisProcess.setStartUser(actProcessVo.getStartUser());
+ if ("1".equals(actProcessVo.getCheckType())) {//人员id
+ Long userId = loginUser.getUserId();
+ hisProcess.setAudit(ObjectUtil.isNotEmpty(userId) ? userId.toString() : "");
+ } else if ("2".equals(actProcessVo.getCheckType())) {//部门
+ Long deptId = loginUser.getDeptId();
+ hisProcess.setAudit(ObjectUtil.isNotEmpty(deptId) ? deptId.toString() : "");
+ } else if ("3".equals(actProcessVo.getCheckType())) {//角色
+ Long roleId = loginUser.getRoleId();
+ hisProcess.setAudit(ObjectUtil.isNotEmpty(roleId) ? roleId.toString() : "");
+ } else if ("4".equals(actProcessVo.getCheckType())) {//企业
+ Long userId = loginUser.getUserId();
+ hisProcess.setCompanyName(hisProcess.getParams().get("companyName").toString());
+ hisProcess.setAudit(ObjectUtil.isNotEmpty(userId) ? userId.toString() : "");
+ }
+ //先添加一个属于当前用户的记录
+ hisProcessMapper.insert(hisProcess);
+
+ //todo 保存一条审核日志
+ AuditLog auditLog = new AuditLog();
+ auditLog.setOtherId(hisProcess.getBusinessId());//业务id
+ auditLog.setProcessKey(hisProcess.getProcessKey());//流程key
+ auditLog.setAuditId(loginUser.getUserId().toString());//审核人id
+ auditLog.setAuditType(checkType);//审核类型
+ auditLog.setStatus(hisProcess.getStatus());//审核状态
+ auditLog.setReply(hisProcess.getReply());//原因
+ auditLog.setAudit(hisProcess.getAudit());
+ auditLog.setAdminUserName(loginUser.getUsername());
+ auditLog.setStep(actProcessVo.getStep());
+ auditLogMapper.insert(auditLog);
+ //如果成功就删除当前条0
+ if ("1".equals(hisProcess.getStatus())) {//失败删除全部当前业务相关数据
+ //删除当前业务的数据
+ List collect1 = actProcessVos.stream().map(ActProcessVo::getId).collect(Collectors.toList());
+ actProcessMapper.deleteBatchIds(collect1);
+ return Constants.FAILD;
+ } else if ("2".equals(hisProcess.getStatus())) {//审核成功
+ //修改业务表的状态,0保持,1提交,审核中,2成功,3失败
+ //判断是否只剩最后一条记录
+ //删除当前运行数据
+ actProcessMapper.deleteById(actProcessVo.getId());
+ if (actProcessVos.size() == 1) {//只存在当前流程的最后一条业务
+ //判断是否还有下一步
+ if (actProcessVo.getIsNext()) {//存在下一级
+ ProcessVo processVo = new ProcessVo();
+ processVo.setProcessKey(hisProcess.getProcessKey());
+ Integer step = new Integer(actProcessVo.getStep()) + 1;
+ processVo.setStep(step.toString());
+ processVo.setParams(hisProcess.getParams());
+ processVo.setBusinessId(hisProcess.getBusinessId());
+ processVo.setStartUser(actProcessVo.getStartUser());
+ comply(processVo);
+ return Constants.WAIT;
+ } else {
+ //业务办结
+ return Constants.SUCCEED;
+ }
+ }
+ return Constants.WAIT;
+ }
+ }else {
+ throw new ServiceException("当前不具备审核资格");
+ }
+ }
+ return Constants.NONENTITY;
+ }
+
+ /**
+ * 业务撤回
+ * 后台人员执行撤销,可以撤销到任何地步
+ */
+ public static int rollBack(RollBackLog rollBackLog){
+ Long userId = LoginHelper.getUserId();
+ if (ObjectUtil.isNull(userId)){
+ throw new ServiceException("请先登录");
+ }
+ //获取到历史表中的需要回退到那一步的最新数据
+ LambdaQueryWrapper lqw = new LambdaQueryWrapper()
+ .eq(HisProcess::getStep,rollBackLog.getStep())
+ .eq(HisProcess::getBusinessId,rollBackLog.getBusinessId())
+ .eq(HisProcess::getCheckType,rollBackLog.getCheckType())
+ .eq(HisProcess::getAudit,rollBackLog.getAudit())
+ .orderByDesc(HisProcess::getEndTime);
+ List hisProcessVos = hisProcessMapper.selectVoList(lqw);
+ String param ="";
+ //获取当前流程的数据
+ LambdaQueryWrapper eq = new LambdaQueryWrapper()
+ .eq(ObjectUtil.isNotEmpty(rollBackLog.getBusinessId()), ActProcess::getBusinessId, rollBackLog.getBusinessId());
+ ActProcess actProcesses = actProcessMapper.selectList(eq).get(0);
+ //如果选择回退的步骤在历史表之前,将流程表中的流程替换为当前历史表中的数据
+ if (!rollBackLog.getStep().equals(actProcesses.getStep())){
+ LambdaQueryWrapper eq1 = new LambdaQueryWrapper()
+ .eq(ObjectUtil.isNotNull(rollBackLog.getBusinessId()), ActProcess::getBusinessId, rollBackLog.getBusinessId());
+ List actProcesses1 = actProcessMapper.selectList(eq1);
+ List collect = actProcesses1.stream().map(ActProcess::getId).collect(Collectors.toList());
+ param = JsonUtils.toJsonString(actProcesses1);
+ actProcessMapper.deleteBatchIds(collect);
+ }else {
+ param = JsonUtils.toJsonString(hisProcessVos.get(0));
+ }
+ //如果回退的是当前流程中的步骤(会签),当前会签流程已走了一半,将流程历史表中的记录返回到流程表中
+ HisProcessVo hisProcessVo = hisProcessVos.get(0);
+ ActProcess actProcess = new ActProcess();
+ actProcess.setIsNext(actProcesses.getIsNext());
+ actProcess.setType(hisProcessVo.getType());
+ actProcess.setCheckType(hisProcessVo.getCheckType());
+ actProcess.setCompanyName(hisProcessVo.getCompanyName());
+ actProcess.setCreateTime(hisProcessVo.getCreateTime());
+ actProcess.setStep(hisProcessVo.getStep());
+ actProcess.setStartUser(hisProcessVo.getStartUser());
+ actProcess.setBusinessId(hisProcessVo.getBusinessId());
+ actProcess.setAudit(hisProcessVo.getAudit());
+ actProcess.setProcessId(hisProcessVo.getProcessId());
+ int insert = actProcessMapper.insert(actProcess);
+ rollBackLog.setCreateTime(DateUtils.getNowDate());
+ rollBackLog.setParam(param);
+ rollBackLog.setUpdateBy(userId.toString());
+ rollBackLogMapper.insert(rollBackLog);
+ return insert;
+ }
+ /**
+ * 申请人业务撤回
+ */
+ public static void businessRollBack(RollBackLog rollBackLog){
+ Long userId = LoginHelper.getUserId();
+ if (ObjectUtil.isNull(userId)){
+ throw new ServiceException("请先登录");
+ }
+ //判断当前业务是否可以撤销(如果正在运行表中已无业务id则该条业务已完成)
+ LambdaQueryWrapper eq = new LambdaQueryWrapper()
+ .eq(ActProcess::getBusinessId, rollBackLog.getBusinessId());
+ List actProcesses = actProcessMapper.selectList(eq);
+ if (actProcesses.size()==0){
+ throw new ServiceException("当前业务不允许撤销");
+ }
+ //创建一条撤销记录,
+ String param = JsonUtils.toJsonString(actProcesses);
+ rollBackLog.setCreateTime(DateUtils.getNowDate());
+ rollBackLog.setParam(param);
+ rollBackLog.setType("1");
+ rollBackLog.setUpdateBy(userId.toString());
+ rollBackLogMapper.insert(rollBackLog);
+ //删除正在运行的流程记录
+ List collect = actProcesses.stream().map(ActProcess::getId).collect(Collectors.toList());
+ actProcessMapper.deleteBatchIds(collect);
+ }
+
+ /**获取已办步骤
+ * 获取可以撤销的步骤以及人员,需要判断是后台还是申请人
+ * 先判断这条流程走到那一步了,可以撤回到那几步
+ */
+
+ public static Map>getStep(BusinessDTO businessDTO){
+ //获取当前任务执行到那一步了
+ LambdaQueryWrapper lwq = new LambdaQueryWrapper<>();
+ lwq.eq(ActProcess::getBusinessId,businessDTO.getBusinessId());
+ List actProcessVos = actProcessMapper.selectVoList(lwq);
+ if (actProcessVos.size()==0){
+ throw new ServiceException("当前任务已完结");
+ }else {
+ ActProcessVo actProcessVo = actProcessVos.get(0);
+ String step = actProcessVo.getStep();
+ //如果当前业务就是在第一步,则不返回数据
+ if (!"1".equals(step)){
+ //获取历史表中在该业务流程步骤之前的人员数据,根据业务表的更新时间为节点
+ Object updateTime = businessDTO.getParams().get("updateTime");
+ LambdaQueryWrapper wrapper = new LambdaQueryWrapper<>();
+ wrapper.eq(HisProcess::getBusinessId,businessDTO.getBusinessId());
+ wrapper.ge(HisProcess::getStep,"1");
+ wrapper.lt(HisProcess::getStep,step);
+ wrapper.ge(HisProcess::getCreateTime,updateTime);
+ wrapper.orderByAsc(HisProcess::getStep);
+ List hisProcessVos = hisProcessMapper.selectVoList(wrapper);
+ for (HisProcessVo hisProcessVo : hisProcessVos) {
+ if ("4".equals(hisProcessVo)){//企业
+ String companyName = businessDTO.getParams().get("companyName").toString();
+ hisProcessVo.setAudit(companyName);
+ }else{
+ if ("1".equals(hisProcessVo.getCheckType())){//人才
+ String username = LoginHelper.getUsername();
+ hisProcessVo.setAudit1(username);
+ }else if ("2".equals(hisProcessVo.getCheckType())){//部门
+ String deptName = LoginHelper.getLoginUser().getDeptName();
+ hisProcessVo.setAudit1(deptName);
+ }else if ("3".equals(hisProcessVo.getCheckType())){//角色
+ Long roleId = LoginHelper.getLoginUser().getRoleId();
+ SysRole sysRole = sysRoleMapper.selectRoleById(roleId);
+ hisProcessVo.setAudit1(sysRole.getRoleName());
+ }else if ("4".equals(hisProcessVo.getCheckType())){//公司
+ hisProcessVo.setAudit1(hisProcessVo.getCompanyName());
+ }
+ }
+ }
+ //将每个步骤处理为单个对象
+ Map> collect = hisProcessVos.stream().collect(Collectors.groupingBy(HisProcessVo::getStep));
+ System.out.println("collect = " + collect);
+ /* List collect1 = collect.entrySet()
+ .stream()
+ .map(e -> new HisProcessVoResultDto(e.getKey(), e.getValue()))
+ .collect(Collectors.toList());
+
+ collect1.forEach(e ->{
+ String s = e.getHisProcessVoList().stream().map(ProcessVo::getDescription).collect(Collectors.toList()).get(0);
+ e.setStep(s);
+ });*/
+ return collect;
+ }
+ }
+ return null;
+
+ }
+
+ /**
+ * 获取已办任务
+ */
+ public static TableDataInfo getHistoryList(HisProcess hisProcess,PageQuery pageQuery){
+ LoginUser loginUser = LoginHelper.getLoginUser();
+ hisProcess.setUserId(ObjectUtil.isNotNull(loginUser.getUserId())?loginUser.getUserId().toString():"");
+ hisProcess.setRoleId(ObjectUtil.isNotNull(loginUser.getRoleId())?loginUser.getRoleId().toString():"");
+ hisProcess.setDeptId(ObjectUtil.isNotNull(loginUser.getDeptId())?loginUser.getDeptId().toString():"");
+ if ("4".equals(hisProcess.getCheckType())){
+ hisProcess.setCompanyUserId(ObjectUtil.isNotNull(loginUser.getUserId())?loginUser.getUserId().toString():"");
+ }
+ Page hisProcessPage = hisProcessMapper.selectVoListPage(pageQuery.build(), hisProcess);
+ List records = hisProcessPage.getRecords();
+ for (HisProcess record : records) {
+ if("4".equals(record.getCheckType())){//企业审核
+ record.setAudit(record.getCompanyName());
+ }else if("1".equals(record.getCheckType())) {
+ //根据id获取人员信息
+ SysUser sysUser = sysUserMapper.selectUserById(new Long( record.getAudit()));
+ record.setAudit(sysUser.getUserName());
+ }else if ("2".equals(record.getCheckType())){
+ SysDept sysDept = sysDeptMapper.selectDeptById(new Long(record.getAudit()));
+ record.setAudit(sysDept.getDeptName());
+ }else if ("3".equals(record.getCheckType())){
+ SysRole sysRole = sysRoleMapper.selectRoleById(new Long(record.getAudit()));
+ record.setAudit(sysRole.getRoleName());
+ }
+ switch (record.getType()){
+ case "1" :record.setType("基本类型");
+ break;
+ case "2" : record.setType("会签");
+ break;
+ default:record.setType("未知类型");
+ break;
+ }
+ //获取当前业务处理耗时
+ Date date1 = record.getCreateTime();
+ Date date2 = record.getEndTime();
+ //精确到秒
+ String formatBetween = DateUtil.formatBetween(date1, date2, BetweenFormatter.Level.SECOND);
+ record.setTimeBetween(formatBetween);
+ }
+ return TableDataInfo.build(hisProcessPage);
+ }
+
+ /**
+ * 获取待办业务
+ */
+ public static TableDataInfo getWaitTaskList(ActProcess actProcess,PageQuery pageQuery){
+ LoginUser loginUser = LoginHelper.getLoginUser();
+ if (ObjectUtil.isNull(loginUser.getUserId())){
+ throw new ServiceException("请先登录");
+ }
+ actProcess.setUserId(loginUser.getUserId().toString());
+ //获取所有流程中的抄送人员
+ //后台查看待审核页面
+ if (!"4".equals(actProcess)) {
+ Page actProcessVoCCList = actProcessMapper.selectCCList(pageQuery.build(), actProcess);
+ if (actProcessVoCCList.getRecords().size() > 0) {
+ for (ActProcess record : actProcessVoCCList.getRecords()) {
+ if ("1".equals(record.getCheckType())){//人员
+ String username = loginUser.getUsername();
+ record.setAudit(username);
+ }
+ if ("2".equals(record.getCheckType())){//部门
+ String deptName = loginUser.getDeptName();
+ record.setAudit(deptName);
+ }
+ if ("3".equals(record.getCheckType())){//角色
+ Long roleId = loginUser.getRoleId();
+ SysRole sysRole = sysRoleMapper.selectRoleById(roleId);
+ record.setAudit(sysRole.getRoleName());
+ }
+ if ("4".equals(record.getCheckType())){//公司
+ record.setAudit(record.getCompanyName());
+ }
+ if (ObjectUtil.isNotEmpty(record.getTimeout())&& ObjectUtil.isNotNull(record.getTimeout())){
+ DateTime beforeTime = DateUtil.offsetDay(record.getCreateTime(), new Integer(record.getTimeout()));
+ Date nowDate = DateUtils.getNowDate();
+ long between = DateUtil.between(nowDate, beforeTime, DateUnit.DAY);
+ if (between<0){
+ long abs = Math.abs(between);
+ record.setTimeout("超时"+abs+"天");
+ }else {
+ record.setTimeout("剩余"+between+"天");
+ }
+ }
+ switch (record.getType()){
+ case "1" :record.setType("基本类型");
+ break;
+ case "2" : record.setType("会签");
+ break;
+ default:record.setType("未知类型");
+ break;
+ }
+ }
+ return TableDataInfo.build(actProcessVoCCList);
+ }
+ }
+
+ if ("4".equals(actProcess.getCheckType())){
+ actProcess.setCompanyUserId(ObjectUtil.isNotNull(loginUser.getUserId())?loginUser.getUserId().toString():"");
+ Page actProcessVoList = actProcessMapper.selectVoListPage(pageQuery.build(),actProcess);
+ List records = actProcessVoList.getRecords();
+ for (ActProcess record : records) {
+ if ("4".equals(record.getCheckType())){//公司
+ record.setAudit(record.getCompanyName());
+ }
+ if (ObjectUtil.isNotEmpty(record.getTimeout())&& ObjectUtil.isNotNull(record.getTimeout())){
+ DateTime beforeTime = DateUtil.offsetDay(record.getCreateTime(), new Integer(record.getTimeout()));
+ Date nowDate = DateUtils.getNowDate();
+ long between = DateUtil.between(nowDate, beforeTime, DateUnit.DAY);
+ if (between<0){
+ long abs = Math.abs(between);
+ record.setTimeout("超时"+abs+"天");
+ }else {
+ record.setTimeout("剩余"+between+"天");
+ }
+ }
+ switch (record.getType()){
+ case "1" :record.setType("基本类型");
+ break;
+ case "2" : record.setType("会签");
+ break;
+ default:record.setType("未知类型");
+ break;
+ }
+ }
+ return TableDataInfo.build(actProcessVoList);
+ }
+
+ actProcess.setUserId(ObjectUtil.isNotNull(loginUser.getUserId())?loginUser.getUserId().toString():"");
+ actProcess.setRoleId(ObjectUtil.isNotNull(loginUser.getRoleId())?loginUser.getRoleId().toString():"");
+ actProcess.setDeptId(ObjectUtil.isNotNull(loginUser.getDeptId())?loginUser.getDeptId().toString():"");
+ Page actProcessVoList = actProcessMapper.selectVoListPage(pageQuery.build(),actProcess);
+ List records = actProcessVoList.getRecords();
+ for (ActProcess record : records) {
+ if ("1".equals(record.getCheckType())){//人员
+ String username = loginUser.getUsername();
+ record.setAudit(username);
+ }
+ if ("2".equals(record.getCheckType())){//部门
+ String deptName = loginUser.getDeptName();
+ record.setAudit(deptName);
+ }
+ if ("3".equals(record.getCheckType())){//角色
+ Long roleId = loginUser.getRoleId();
+ SysRole sysRole = sysRoleMapper.selectRoleById(roleId);
+ record.setAudit(sysRole.getRoleName());
+ }
+ switch (record.getType()){
+ case "1" :record.setType("基本类型");
+ break;
+ case "2" : record.setType("会签");
+ break;
+ default:record.setType("未知类型");
+ break;
+ }
+ if (ObjectUtil.isNotEmpty(record.getTimeout())&& ObjectUtil.isNotNull(record.getTimeout())){
+ DateTime beforeTime = DateUtil.offsetDay(record.getCreateTime(), new Integer(record.getTimeout()));
+ Date nowDate = DateUtils.getNowDate();
+ long between = DateUtil.between(nowDate, beforeTime, DateUnit.DAY);
+ if (between<0){
+ long abs = Math.abs(between);
+ record.setTimeout("超时"+abs+"天");
+ }else {
+ record.setTimeout("剩余"+between+"天");
+ }
+ }
+ }
+ return TableDataInfo.build(actProcessVoList);
+ }
+
+ /**
+ * 获取流程进度
+ */
+
+ public static ListgetProcessPlan(ProcessVo processVo){
+ //获取当前业务运行到那一步
+ String businessId = processVo.getBusinessId();
+ if (ObjectUtil.isNull(businessId)){
+ throw new ServiceException("业务id不可为空");
+ }
+
+ Map params = processVo.getParams();
+ if (ObjectUtil.isEmpty(params)){
+ throw new ServiceException("params不可为空");
+ }
+ LambdaQueryWrapper wrapper = new LambdaQueryWrapper()
+ .eq(TProcess::getProcessKey, params.get("processKey"))
+ .orderByAsc(TProcess::getStep);
+ List processVos = processMapper.selectVoList(wrapper);
+ List list1 = new ArrayList<>();
+ processVos.forEach(e ->{
+ e.setBusinessId(businessId);
+ e.setParams(params);
+ //遍历出他每一步所需要的审核人
+ if ("1".equals(e.getType())){//普通流程,只需查出将人员设置到运行流程中即可
+ if (1L==e.getProcessCheck()) {
+ //获取根据当前审核人的流程给前端判断是否需要点亮操作
+ dd(e);
+ ProcessVo processVo1 = new ProcessVo();
+ BeanCopyUtils.copy(e,processVo1);
+ list1.add(processVo1);
+ }else if (2L==e.getProcessCheck()) {
+ // 根据接口获取
+ List personByRule = WorkUtils.getPersonByRule(e.getRuleId(), e.getParams());
+ e.setAudit(personByRule.get(0));
+ dd(e);
+ ProcessVo processVo1 = new ProcessVo();
+ BeanCopyUtils.copy(e,processVo1);
+ list1.add(processVo1);
+ }
+ }else if ("2".equals(e.getType())) {//会签
+ //将check以逗号拆分
+ List list = new ArrayList<>();
+ if (1L == e.getProcessCheck()) {
+ String[] split = e.getAudit().split(",");
+ for (String s : split) {
+ e.setAudit(s);
+ dd(e);
+ ProcessVo processVo1 = new ProcessVo();
+ BeanCopyUtils.copy(e,processVo1);
+ list.add(processVo1);
+ }
+ list1.addAll(list);
+ } else if (2L == e.getProcessCheck()) {
+ //根据接口获取
+ List personByRule = WorkUtils.getPersonByRule(e.getRuleId(), e.getParams());
+ //将某些固定的审核人员添加进去
+ if (ObjectUtil.isNotEmpty(e.getAudit())) {
+ String[] split = e.getAudit().split(",");
+ Collections.addAll(personByRule, split);
+ }
+ for (String s : personByRule) {
+ e.setAudit(s);
+ dd(e);
+ ProcessVo processVo1 = new ProcessVo();
+ BeanCopyUtils.copy(e,processVo1);
+ list.add(processVo1);
+ }
+ list1.addAll(list);
+ }
+ }
+ });
+
+ list1.forEach(e ->{
+ e.setParams(null);
+ });
+
+ Map> collect = list1.stream().collect(Collectors.groupingBy(ProcessVo::getStep));
+ List