From 6f97a42dccaedb7a8950feac205080e63d8be439 Mon Sep 17 00:00:00 2001 From: yupeng <roc__yu@163.com> Date: 星期三, 26 二月 2025 14:27:01 +0800 Subject: [PATCH] Merge remote-tracking branch 'origin/master' into xizang-changyun --- ruoyi-admin/src/main/resources/application-test.yml | 13 ruoyi-system/src/main/java/com/ruoyi/system/mapper/StateProcessModuleMapper.java | 9 ruoyi-admin/src/main/java/com/ruoyi/web/controller/api/TCheckAcceptRecordController.java | 9 ruoyi-system/src/main/java/com/ruoyi/system/service/impl/StateProcessExtInstanceServiceImpl.java | 11 ruoyi-system/src/main/java/com/ruoyi/system/service/impl/TFaultRepairMessageServiceImpl.java | 9 ruoyi-admin/src/main/java/com/ruoyi/web/controller/api/TBillController.java | 2 ruoyi-system/src/main/java/com/ruoyi/system/service/impl/StateProcessModuleServiceImpl.java | 11 ruoyi-system/src/main/java/com/ruoyi/system/service/impl/StateProcessTemplateServiceImpl.java | 785 +++++++++++ ruoyi-system/src/main/java/com/ruoyi/system/service/StateTaskCenterService.java | 12 ruoyi-system/src/main/java/com/ruoyi/system/mapper/TCheckAcceptRecordMapper.java | 2 ruoyi-system/src/main/resources/mapper/system/SysRoleMapper.xml | 11 ruoyi-system/src/main/java/com/ruoyi/system/mapper/SysRoleMapper.java | 2 ruoyi-system/src/main/java/com/ruoyi/system/model/THouse.java | 5 ruoyi-system/src/main/java/com/ruoyi/system/model/StateProcessExtInstance.java | 29 ruoyi-system/src/main/java/com/ruoyi/system/bo/ProcessUpdateBO.java | 22 ruoyi-applet/src/main/java/com/ruoyi/web/controller/api/TContractController.java | 32 ruoyi-system/src/main/java/com/ruoyi/system/service/StateProcessInstanceActionService.java | 7 ruoyi-applet/src/main/resources/application-test.yml | 7 ruoyi-system/src/main/java/com/ruoyi/system/service/TContractService.java | 3 ruoyi-system/src/main/java/com/ruoyi/system/service/TFaultRepairMessageService.java | 2 ruoyi-system/src/main/java/com/ruoyi/system/mapper/TFaultRepairMessageMapper.java | 2 ruoyi-system/src/main/java/com/ruoyi/system/service/impl/TCheckAcceptRecordServiceImpl.java | 30 ruoyi-system/src/main/java/com/ruoyi/system/bo/ProcessRefuseBO.java | 27 ruoyi-system/src/main/java/com/ruoyi/system/model/TFaultRepairMessage.java | 12 ruoyi-system/src/main/java/com/ruoyi/system/query/TTenantAppletQuery.java | 18 ruoyi-system/src/main/java/com/ruoyi/system/model/TCheckAcceptRecord.java | 11 ruoyi-system/src/main/java/com/ruoyi/system/vo/HouseVO.java | 4 ruoyi-system/src/main/resources/mapper/system/SysUserMapper.xml | 2 ruoyi-applet/src/main/java/com/ruoyi/web/controller/api/TFaultRepairMessageController.java | 24 ruoyi-system/src/main/java/com/ruoyi/system/bo/ProcessCreateBO.java | 21 ruoyi-system/src/main/resources/mapper/system/StateProcessTemplateMapper.xml | 15 ruoyi-admin/src/main/java/com/ruoyi/web/controller/tool/PdfUtils.java | 6 ruoyi-system/src/main/java/com/ruoyi/system/query/TFaultRepairMessageAppletQuery.java | 16 ruoyi-common/src/main/java/com/ruoyi/common/enums/SubmitStatusEnum.java | 33 ruoyi-system/src/main/java/com/ruoyi/system/service/StateProcessModuleService.java | 8 ruoyi-system/src/main/java/com/ruoyi/system/bo/ProcessModuleUpdateBO.java | 19 ruoyi-system/src/main/java/com/ruoyi/system/vo/MyHouseVO.java | 40 ruoyi-system/src/main/java/com/ruoyi/system/bo/ProcessAgreeBO.java | 26 ruoyi-system/src/main/java/com/ruoyi/system/model/TInformation.java | 4 ruoyi-system/src/main/resources/mapper/system/THouseMapper.xml | 2 ruoyi-system/src/main/resources/mapper/system/TInformationMapper.xml | 3 ruoyi-admin/src/main/java/com/ruoyi/web/controller/api/TTenantController.java | 81 + ruoyi-system/src/main/java/com/ruoyi/system/mapper/StateProcessTemplateMapper.java | 15 ruoyi-system/src/main/resources/mapper/system/TFaultRepairMessageMapper.xml | 46 ruoyi-system/src/main/java/com/ruoyi/system/vo/ExamineVO.java | 31 ruoyi-system/src/main/java/com/ruoyi/system/service/ISysRoleService.java | 2 ruoyi-admin/src/main/java/com/ruoyi/web/controller/api/TContractController.java | 55 ruoyi-system/src/main/java/com/ruoyi/system/model/StateProcessModule.java | 39 ruoyi-system/src/main/java/com/ruoyi/system/bo/ProcessTemplatePageBO.java | 12 ruoyi-system/src/main/java/com/ruoyi/system/service/impl/FlowListenerService.java | 246 +++ ruoyi-system/src/main/java/com/ruoyi/system/service/impl/TContractServiceImpl.java | 37 ruoyi-system/src/main/java/com/ruoyi/system/query/TContractQuery.java | 6 ruoyi-common/src/main/java/com/ruoyi/common/exception/state/StateErrorCode.java | 19 ruoyi-system/src/main/java/com/ruoyi/system/service/impl/StateTaskCenterServiceImpl.java | 24 ruoyi-system/src/main/java/com/ruoyi/system/mapper/TTenantMapper.java | 10 ruoyi-system/src/main/java/com/ruoyi/system/service/StateProcessTemplateService.java | 46 ruoyi-system/src/main/java/com/ruoyi/system/query/TExamineAppletQuery.java | 36 ruoyi-system/src/main/java/com/ruoyi/system/vo/ProcessDetailVO.java | 17 ruoyi-system/src/main/java/com/ruoyi/system/mapper/StateProcessInstanceActionMapper.java | 7 ruoyi-common/src/main/java/com/ruoyi/common/enums/ProcessCategoryEnum.java | 51 ruoyi-system/src/main/resources/mapper/system/TCheckAcceptRecordMapper.xml | 26 ruoyi-admin/src/main/java/com/ruoyi/RuoYiApplication.java | 4 ruoyi-system/src/main/java/com/ruoyi/system/service/TTenantService.java | 18 ruoyi-system/src/main/java/com/ruoyi/system/vo/TCheckAcceptRecordVO.java | 7 ruoyi-system/src/main/java/com/ruoyi/system/service/impl/THouseServiceImpl.java | 3 ruoyi-system/src/main/java/com/ruoyi/system/service/impl/TTenantServiceImpl.java | 98 + ruoyi-applet/src/main/java/com/ruoyi/web/core/config/MybatisPlusConfig.java | 2 ruoyi-system/src/main/java/com/ruoyi/system/vo/PayListVO.java | 20 ruoyi-system/src/main/java/com/ruoyi/system/export/ContractExport.java | 14 ruoyi-system/src/main/java/com/ruoyi/system/service/TCheckAcceptRecordService.java | 2 ruoyi-admin/src/main/java/com/ruoyi/web/core/config/DataUpdateHandlerConfig.java | 24 ruoyi-system/src/main/resources/mapper/system/StateTaskCenterMapper.xml | 62 ruoyi-applet/src/main/java/com/ruoyi/web/controller/api/WxLoginController.java | 1 ruoyi-system/src/main/java/com/ruoyi/system/query/TBillAppletQuery.java | 30 ruoyi-system/src/main/resources/mapper/system/TItemTypeMapper.xml | 16 ruoyi-common/src/main/java/com/ruoyi/common/core/domain/BaseModel.java | 1 ruoyi-system/src/main/java/com/ruoyi/system/mapper/StateProcessExtInstanceMapper.java | 9 ruoyi-system/src/main/java/com/ruoyi/system/model/StateTaskCenter.java | 42 ruoyi-applet/src/main/java/com/ruoyi/web/controller/api/StateProcessController.java | 209 +++ ruoyi-system/src/main/java/com/ruoyi/system/bo/DeployBO.java | 15 ruoyi-system/src/main/java/com/ruoyi/system/mapper/TBannerMapper.java | 1 ruoyi-system/src/main/java/com/ruoyi/system/service/impl/TBannerServiceImpl.java | 6 ruoyi-system/src/main/java/com/ruoyi/system/model/TContract.java | 5 ruoyi-system/src/main/java/com/ruoyi/system/dto/TExamineDTO.java | 15 ruoyi-system/src/main/java/com/ruoyi/system/model/StateProcessInstanceAction.java | 46 ruoyi-applet/src/main/java/com/ruoyi/web/core/config/DataUpdateHandlerConfig.java | 61 ruoyi-system/src/main/java/com/ruoyi/system/vo/ProcessTaskListVO.java | 150 ++ ruoyi-common/src/main/java/com/ruoyi/common/utils/SecurityUtils.java | 26 ruoyi-system/src/main/java/com/ruoyi/system/vo/TContractAppletVO.java | 28 ruoyi-applet/src/main/java/com/ruoyi/web/controller/system/SysLoginController.java | 5 ruoyi-system/src/main/resources/mapper/system/TTenantMapper.xml | 69 + ruoyi-system/src/main/java/com/ruoyi/system/vo/TenantVO.java | 3 ruoyi-system/src/main/java/com/ruoyi/system/query/TCheckAcceptRecordAppletQuery.java | 18 ruoyi-admin/src/main/java/com/ruoyi/web/controller/system/SysUserController.java | 4 ruoyi-admin/src/main/java/com/ruoyi/web/core/config/MybatisPlusConfig.java | 2 ruoyi-system/src/main/resources/mapper/system/TBannerMapper.xml | 7 ruoyi-system/src/main/java/com/ruoyi/system/service/StateProcessExtInstanceService.java | 7 ruoyi-system/src/main/java/com/ruoyi/system/service/TItemTypeService.java | 2 ruoyi-admin/pom.xml | 12 ruoyi-system/src/main/resources/mapper/system/TContractMapper.xml | 8 ruoyi-common/src/main/java/com/ruoyi/common/enums/StateProcessActionEnum.java | 26 ruoyi-system/src/main/java/com/ruoyi/system/bo/ProcessTaskListBO.java | 45 ruoyi-system/src/main/java/com/ruoyi/system/bo/ProcessStartBO.java | 57 ruoyi-system/src/main/java/com/ruoyi/system/service/impl/StateProcessInstanceActionServiceImpl.java | 11 ruoyi-system/src/main/java/com/ruoyi/system/mapper/TItemTypeMapper.java | 2 ruoyi-applet/pom.xml | 7 ruoyi-system/src/main/java/com/ruoyi/system/mapper/StateTaskCenterMapper.java | 23 ruoyi-system/src/main/java/com/ruoyi/system/model/StateProcessTemplate.java | 49 ruoyi-common/pom.xml | 14 ruoyi-applet/src/main/java/com/ruoyi/web/controller/api/IndexController.java | 418 ++++++ ruoyi-admin/src/main/java/com/ruoyi/web/controller/system/SysRoleController.java | 2 ruoyi-admin/src/main/java/com/ruoyi/web/controller/api/StateProcessController.java | 209 +++ ruoyi-system/src/main/java/com/ruoyi/system/service/impl/TItemTypeServiceImpl.java | 4 ruoyi-system/src/main/java/com/ruoyi/system/vo/MyToDoVO.java | 23 ruoyi-system/src/main/java/com/ruoyi/system/service/impl/SysRoleServiceImpl.java | 5 ruoyi-system/src/main/java/com/ruoyi/system/service/TBannerService.java | 3 116 files changed, 3,942 insertions(+), 120 deletions(-) diff --git a/ruoyi-admin/pom.xml b/ruoyi-admin/pom.xml index 3aa3a62..97f4520 100644 --- a/ruoyi-admin/pom.xml +++ b/ruoyi-admin/pom.xml @@ -26,6 +26,11 @@ <artifactId>aliyun-sdk-oss</artifactId> <version>3.8.0</version> </dependency> + <dependency> + <groupId>com.google.guava</groupId> + <artifactId>guava</artifactId> + <version>31.1-jre</version> <!-- 请根据需要选择合适的版本 --> + </dependency> <!-- spring-boot-devtools --> <dependency> <groupId>org.springframework.boot</groupId> @@ -93,13 +98,6 @@ <!-- <artifactId>pagehelper-spring-boot-starter</artifactId>--> <!-- </exclusion>--> <!-- </exclusions>--> - </dependency> - - <!--二维码开发工具集--> - <dependency> - <groupId>cn.hutool</groupId> - <artifactId>hutool-all</artifactId> - <version>4.6.10</version> </dependency> <!-- zxing生成二维码 --> diff --git a/ruoyi-admin/src/main/java/com/ruoyi/RuoYiApplication.java b/ruoyi-admin/src/main/java/com/ruoyi/RuoYiApplication.java index b5354e9..558fe10 100644 --- a/ruoyi-admin/src/main/java/com/ruoyi/RuoYiApplication.java +++ b/ruoyi-admin/src/main/java/com/ruoyi/RuoYiApplication.java @@ -5,12 +5,14 @@ import org.springframework.boot.autoconfigure.SpringBootApplication; import org.springframework.boot.autoconfigure.condition.ConditionalOnMissingBean; import org.springframework.boot.autoconfigure.jdbc.DataSourceAutoConfiguration; +import org.springframework.cache.annotation.EnableCaching; import org.springframework.context.ConfigurableApplicationContext; import org.springframework.context.annotation.Bean; import org.springframework.core.env.Environment; import org.springframework.http.client.SimpleClientHttpRequestFactory; import org.springframework.scheduling.annotation.EnableScheduling; import org.springframework.web.client.RestTemplate; +import springfox.documentation.oas.annotations.EnableOpenApi; import java.net.InetAddress; import java.net.UnknownHostException; @@ -21,6 +23,8 @@ * @author ruoyi */ @Slf4j +@EnableOpenApi +@EnableCaching @EnableScheduling//开启定时任务 @SpringBootApplication(exclude = { DataSourceAutoConfiguration.class }) public class RuoYiApplication diff --git a/ruoyi-admin/src/main/java/com/ruoyi/web/controller/api/StateProcessController.java b/ruoyi-admin/src/main/java/com/ruoyi/web/controller/api/StateProcessController.java new file mode 100644 index 0000000..46e24ae --- /dev/null +++ b/ruoyi-admin/src/main/java/com/ruoyi/web/controller/api/StateProcessController.java @@ -0,0 +1,209 @@ +package com.ruoyi.web.controller.api; + +import com.aizuda.bpm.engine.entity.FlwTask; +import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; +import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper; +import com.baomidou.mybatisplus.core.toolkit.Wrappers; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.ruoyi.common.annotation.Log; +import com.ruoyi.common.basic.PageInfo; +import com.ruoyi.common.core.domain.AjaxResult; +import com.ruoyi.common.core.domain.BaseEntity; +import com.ruoyi.common.core.domain.BaseModel; +import com.ruoyi.common.core.domain.BasePage; +import com.ruoyi.common.core.domain.entity.SysUser; +import com.ruoyi.common.core.page.PageDomain; +import com.ruoyi.common.enums.BusinessType; +import com.ruoyi.common.exception.GlobalException; +import com.ruoyi.common.utils.SecurityUtils; +import com.ruoyi.system.bo.*; +import com.ruoyi.system.model.StateProcessModule; +import com.ruoyi.system.model.StateProcessTemplate; +import com.ruoyi.system.model.TContract; +import com.ruoyi.system.service.ISysUserService; +import com.ruoyi.system.service.StateProcessModuleService; +import com.ruoyi.system.service.StateProcessTemplateService; +import com.ruoyi.system.vo.ProcessDetailVO; +import com.ruoyi.system.vo.ProcessTaskListVO; +import io.swagger.annotations.Api; +import io.swagger.annotations.ApiOperation; +import lombok.RequiredArgsConstructor; +import org.springframework.util.CollectionUtils; +import org.springframework.web.bind.annotation.*; + +import java.time.LocalDateTime; +import java.util.*; +import java.util.function.Function; +import java.util.stream.Collectors; + +@Api(tags = "审批流程管理") +@RequestMapping("/state-process") +@RestController +@RequiredArgsConstructor +public class StateProcessController { + + private final StateProcessTemplateService processTemplateService; + private final StateProcessModuleService processModuleService; + private final ISysUserService sysUserService; + + //应用流程分页列表 + @ApiOperation("应用流程分页列表") + @PostMapping("/module/page") + public AjaxResult<List<StateProcessModule>> modulePage(@RequestBody BasePage basePage) { + LambdaQueryWrapper<StateProcessModule> queryWrapper = new LambdaQueryWrapper<>(); + queryWrapper.orderByAsc(StateProcessModule::getCategory); + //查询应用流程列表 + List<StateProcessModule> result = processModuleService.list(queryWrapper); + List<String> updateUserId = result.stream().map(BaseModel::getUpdateBy).collect(Collectors.toList()); + if (!CollectionUtils.isEmpty(updateUserId)){ + //根据用户id查询用户信息 + List<SysUser> sysUsers = sysUserService.selectUserByUserNameList(updateUserId); + Map<Long, SysUser> sysUserMap; + if (!CollectionUtils.isEmpty(sysUsers)){ + sysUserMap = sysUsers.stream().collect(Collectors.toMap(SysUser::getUserId, Function.identity())); + } else { + sysUserMap = new HashMap<>(); + } + //遍历列表,设置更新人名称 + result.forEach(e -> { + SysUser sysUser = sysUserMap.get(e.getUpdateBy()); + if (Objects.nonNull(sysUser)){ + e.setUpdateBy(sysUser.getNickName()); + } + }); + } + return AjaxResult.success(result); + } + //修改应用流程 + @Log(title = "审批流程管理-修改应用流程", businessType = BusinessType.UPDATE) + @ApiOperation("修改应用流程") + @PostMapping("/module/update") + public AjaxResult<PageInfo<StateProcessModule>> moduleUpdate(@RequestBody ProcessModuleUpdateBO processModuleUpdateBO) { + StateProcessTemplate stateProcessTemplate = processTemplateService.getById(processModuleUpdateBO.getTemplateId()); + if (Objects.isNull(stateProcessTemplate)) { + return AjaxResult.success(); + } + StateProcessModule stateProcessModule = new StateProcessModule(); + stateProcessModule.setId(processModuleUpdateBO.getId()); + stateProcessModule.setTemplateId(processModuleUpdateBO.getTemplateId()); + stateProcessModule.setTemplateName(stateProcessTemplate.getTemplateName()); + stateProcessModule.setUpdateBy(SecurityUtils.getLoginUser().getUser().getNickName()); + stateProcessModule.setCreateTime(LocalDateTime.now()); + stateProcessModule.setUpdateTime(LocalDateTime.now()); + stateProcessModule.setRemark(processModuleUpdateBO.getRemark()); + processModuleService.updateById(stateProcessModule); + return AjaxResult.success(); + } + + //流程模版分页 + @ApiOperation("流程模版分页") + @PostMapping("/template/page") + public AjaxResult<Page<StateProcessTemplate>> page(ProcessTemplatePageBO request) { + Page<StateProcessTemplate> templatePage = processTemplateService.page(request); + return AjaxResult.success(templatePage); + } + + //查询流程模版 + @ApiOperation("查询流程模版") + @GetMapping("/template/getById") + public AjaxResult<StateProcessTemplate> selectById(@RequestParam String id) { + return AjaxResult.success(processTemplateService.getById(id)); + } + + //修改并部署模版 + @Log(title = "审批流程管理-修改并部署模版", businessType = BusinessType.UPDATE) + @ApiOperation("修改并部署模版") + @PostMapping("/template/update") + public AjaxResult<Boolean> update(@RequestBody ProcessUpdateBO processUpdateBO) { + return AjaxResult.success(processTemplateService.update(processUpdateBO)); + } + + //删除模版 + @Log(title = "审批流程管理-删除模版", businessType = BusinessType.DELETE) + @ApiOperation("删除模版") + @GetMapping("/template/deleteById") + public AjaxResult<Boolean> deleteById(@RequestParam String id) { + StateProcessTemplate template = processTemplateService.getById(id); + //查询是否存在使用的 + LambdaUpdateWrapper<StateProcessModule> moduleLambdaUpdateWrapper = new LambdaUpdateWrapper<>();; + moduleLambdaUpdateWrapper.eq(StateProcessModule::getTemplateId, template.getId()); + if (processModuleService.getBaseMapper().exists(moduleLambdaUpdateWrapper)) { + throw new GlobalException("该模版在应用流程中已使用!"); + } + //根据key修改所有版本为已删除 + boolean result = processTemplateService.remove(Wrappers.lambdaQuery(StateProcessTemplate.class) + .eq(StateProcessTemplate::getTemplateKey, template.getTemplateKey())); + return AjaxResult.success(result); + } + + //创建并部署模版 + @Log(title = "审批流程管理-创建并部署模版", businessType = BusinessType.INSERT) + @ApiOperation("创建并部署模版") + @PostMapping("/template/create") + public AjaxResult<Boolean> create(@RequestBody ProcessCreateBO processCreateBO) { + return AjaxResult.success(processTemplateService.create(processCreateBO)); + } + + //流程发起 + @Log(title = "审批流程管理-流程发起", businessType = BusinessType.INSERT) + @ApiOperation("流程发起") + @PostMapping("/start") + public AjaxResult<Boolean> start(@RequestBody ProcessStartBO processStartBO) { + return AjaxResult.success(processTemplateService.start(processStartBO)); + } + + //待办 + @ApiOperation("待办列表") + @PostMapping("/wait/task/page") + public AjaxResult<PageInfo<ProcessTaskListVO>> waitTaskPage(@RequestBody ProcessTaskListBO processTemplatePageBO) { + return AjaxResult.success(processTemplateService.waitTaskPage(processTemplatePageBO)); + } + + //已办 + @ApiOperation("已办列表") + @PostMapping("/deal/task/page") + public AjaxResult<PageInfo<ProcessTaskListVO>> dealTaskPage(@RequestBody ProcessTaskListBO processTemplatePageBO) { + return AjaxResult.success(processTemplateService.dealTaskPage(processTemplatePageBO)); + } + + //待办和已办列表 + @ApiOperation("待办和已办列表") + @PostMapping("/dealAndWait/task/page") + public AjaxResult<PageInfo<ProcessTaskListVO>> dealAndWaitTaskPage(@RequestBody ProcessTaskListBO processTemplatePageBO) { + return AjaxResult.success(processTemplateService.dealAndWaitTaskPage(processTemplatePageBO)); + } + + //抄送 + @ApiOperation("抄送列表") + @PostMapping("/copy/task/page") + public AjaxResult<PageInfo<ProcessTaskListVO>> copyTaskPage(@RequestBody ProcessTaskListBO processTaskListBO){ + return AjaxResult.success(processTemplateService.copyTaskPage(processTaskListBO)); + } + + //审核通过 + @Log(title = "审批流程管理-审核通过", businessType = BusinessType.UPDATE) + @ApiOperation("审核通过") + @PostMapping("/agree") + public AjaxResult<Object> agree(@RequestBody ProcessAgreeBO processAgreeBO) { + processTemplateService.agree(processAgreeBO); + return AjaxResult.success(); + } + + //审核拒绝 + @Log(title = "审批流程管理-审核拒绝", businessType = BusinessType.UPDATE) + @ApiOperation("审核拒绝") + @PostMapping("/refuse") + public AjaxResult<Object> refuse(@RequestBody ProcessRefuseBO processRefuseBO) { + processTemplateService.refuse(processRefuseBO); + return AjaxResult.success(); + } + + //审核详情 + @ApiOperation("审核详情") + @GetMapping("/detail") + public AjaxResult<ProcessDetailVO> detail(@RequestParam String taskId) { + ProcessDetailVO detail = processTemplateService.detail(taskId); + return AjaxResult.success(detail); + } + +} diff --git a/ruoyi-admin/src/main/java/com/ruoyi/web/controller/api/TBillController.java b/ruoyi-admin/src/main/java/com/ruoyi/web/controller/api/TBillController.java index a7146f1..443cedc 100644 --- a/ruoyi-admin/src/main/java/com/ruoyi/web/controller/api/TBillController.java +++ b/ruoyi-admin/src/main/java/com/ruoyi/web/controller/api/TBillController.java @@ -10,6 +10,7 @@ import com.ruoyi.system.query.TBillQuery; import com.ruoyi.system.service.TBillDetailService; import com.ruoyi.system.service.TBillService; +import io.swagger.annotations.Api; import io.swagger.annotations.ApiOperation; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.security.access.prepost.PreAuthorize; @@ -27,6 +28,7 @@ * @author xiaochen * @since 2025-01-17 */ +@Api(tags = "账单管理") @RestController @RequestMapping("/t-bill") public class TBillController { diff --git a/ruoyi-admin/src/main/java/com/ruoyi/web/controller/api/TCheckAcceptRecordController.java b/ruoyi-admin/src/main/java/com/ruoyi/web/controller/api/TCheckAcceptRecordController.java index b6dee08..721d961 100644 --- a/ruoyi-admin/src/main/java/com/ruoyi/web/controller/api/TCheckAcceptRecordController.java +++ b/ruoyi-admin/src/main/java/com/ruoyi/web/controller/api/TCheckAcceptRecordController.java @@ -1,6 +1,7 @@ package com.ruoyi.web.controller.api; +import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.baomidou.mybatisplus.core.toolkit.Wrappers; import com.ruoyi.common.annotation.Log; import com.ruoyi.common.basic.PageInfo; @@ -22,6 +23,8 @@ import org.springframework.validation.annotation.Validated; import org.springframework.web.bind.annotation.*; +import java.time.LocalDate; +import java.time.LocalDateTime; import java.util.List; /** @@ -90,6 +93,12 @@ @ApiOperation(value = "添加验收记录") @PostMapping(value = "/add") public R<Boolean> add(@Validated @RequestBody TCheckAcceptRecord dto) { + dto.setAcceptanceTime(dto.getCheckTime()); + LocalDate now = LocalDate.now(); + String replace = (now + "").replace("-", ""); + int size = checkAcceptRecordService.list(new LambdaQueryWrapper<TCheckAcceptRecord>() + .likeRight(TCheckAcceptRecord::getAcceptanceTime, LocalDate.now())).size(); + dto.setCode(replace.substring(2)+String.format("%03d", size+1)); // 添加验收记录 checkAcceptRecordService.save(dto); diff --git a/ruoyi-admin/src/main/java/com/ruoyi/web/controller/api/TContractController.java b/ruoyi-admin/src/main/java/com/ruoyi/web/controller/api/TContractController.java index 692c8c5..bb120fb 100644 --- a/ruoyi-admin/src/main/java/com/ruoyi/web/controller/api/TContractController.java +++ b/ruoyi-admin/src/main/java/com/ruoyi/web/controller/api/TContractController.java @@ -3,6 +3,7 @@ import cn.afterturn.easypoi.excel.ExcelExportUtil; import cn.afterturn.easypoi.excel.entity.ExportParams; +import cn.hutool.core.util.ObjectUtil; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.ruoyi.common.annotation.Log; import com.ruoyi.common.basic.PageInfo; @@ -10,14 +11,10 @@ import com.ruoyi.common.core.domain.AjaxResult; import com.ruoyi.common.core.domain.R; import com.ruoyi.common.enums.BusinessType; -import com.ruoyi.common.utils.DateUtils; -import com.ruoyi.common.utils.DictUtils; -import com.ruoyi.common.utils.StringUtils; -import com.ruoyi.common.utils.WebUtils; -import com.ruoyi.system.dto.SetContractDto; -import com.ruoyi.system.dto.TContractDTO; -import com.ruoyi.system.dto.THouseDTO; -import com.ruoyi.system.dto.TerminateContractDTO; +import com.ruoyi.common.enums.ProcessCategoryEnum; +import com.ruoyi.common.utils.*; +import com.ruoyi.system.bo.ProcessStartBO; +import com.ruoyi.system.dto.*; import com.ruoyi.system.export.ContractExport; import com.ruoyi.system.export.OpticalInspectionExport; import com.ruoyi.system.model.*; @@ -74,9 +71,11 @@ private TBillService billService; @Autowired private TCheckAcceptRecordService checkAcceptRecordService; + @Autowired + private StateProcessTemplateService stateProcessTemplateService; + @ApiOperation(value = "测试生成账单") @PostMapping(value = "/testBill") - public R testBill(String id) { TContract contract = contractService.getById(id); // 查询所有已签订的合同并且未生成第一笔账单的 @@ -191,6 +190,22 @@ public R<Boolean> addContract(@Validated @RequestBody TContractDTO dto) { dto.setChangeRent(dto.getMonthRent()); contractService.save(dto); + if (dto.getStatus().equals("2")){ + //发起合同新增审批 + ProcessStartBO processStartBO = new ProcessStartBO(); + processStartBO.setCategory(ProcessCategoryEnum.CATEGORY1.getValue().toString()); + processStartBO.setModuleName("合同新增审批"); + processStartBO.setName(dto.getContractName()); + //需要显示发起申请人所在单位 +// String cedName = SecurityUtils.getLoginUser().getUser().getDept().getDeptName(); +// String remark = String.format("【镇/街】:%s,【征收实施单位】:%s,【申请金额】:%s万元", stateProject.getStreet(), cedName, stateApplyRecord.getAmount()); + processStartBO.setRemark(""); + Map<String, Object> variable = new HashMap<>(); + variable.put("projectId", dto.getId()); + processStartBO.setVariable(variable); + //开启工作流程 + stateProcessTemplateService.start(processStartBO); + } if (dto.getIsIncreasing()){ TContractRentType tContractRentType = new TContractRentType(); tContractRentType.setContractId(dto.getId()); @@ -207,7 +222,6 @@ @ApiOperation(value = "编辑合同") @PostMapping(value = "/updateContract") @PreAuthorize("@ss.hasPermi('system:contract:update')") - public R<Boolean> updateContract(@Validated @RequestBody TContractDTO dto) { contractService.updateById(dto); contractRentTypeService.remove(new LambdaQueryWrapper<TContractRentType>() @@ -229,8 +243,7 @@ @PreAuthorize("@ss.hasPermi('system:contract:delete')") @DeleteMapping(value = "/deleteContractByIds") - public R<Boolean> deleteContractByIds - (@RequestParam String ids) { + public R<Boolean> deleteContractByIds(@RequestParam String ids) { if (StringUtils.isNotEmpty(ids)){ contractService.removeBatchByIds(Arrays.asList(ids.split(","))); } @@ -240,7 +253,6 @@ @ApiOperation(value = "查询合同信息信息") @GetMapping(value = "/getContractById") @PreAuthorize("@ss.hasPermi('system:contract:detail')") - public R<TContractVO> getContractById(@RequestParam String id) { TContractVO res = new TContractVO(); TContract contract = contractService.getById(id); @@ -309,6 +321,7 @@ @PreAuthorize("@ss.hasPermi('system:contract:terminate')") public R terminateContract(@RequestBody TerminateContractDTO dto) { contractService.terminateContract(dto); + // 生成房屋验收记录 待验收 return R.ok(); } @ApiOperation(value = "根据合同id查看验收记录") @@ -337,8 +350,10 @@ templateParam.put("endTime", DateUtils.localDateTimeToStringYear(contract.getEndTime())); templateParam.put("monthRent", "¥¥"+contract.getMonthRent()+"元"); templateParam.put("monthRentString", "人民币"+NumberToChineseUtils.numberToChinese(contract.getMonthRent().setScale(2, BigDecimal.ROUND_DOWN).doubleValue())); - templateParam.put("totalYear", "¥¥"+contract.getTotalYear()+"元"); - templateParam.put("totalYearString", "人民币"+NumberToChineseUtils.numberToChinese(contract.getTotalYear().setScale(2, BigDecimal.ROUND_DOWN).doubleValue())); + String totalYear = Objects.nonNull(contract.getTotalYear())?contract.getTotalYear().toString():""; + templateParam.put("totalYear", "¥¥"+totalYear+"元"); + String totalYearString = StringUtils.isNotEmpty(totalYear)?NumberToChineseUtils.numberToChinese(contract.getTotalYear().setScale(2, BigDecimal.ROUND_DOWN).doubleValue()):""; + templateParam.put("totalYearString", "人民币"+totalYearString); templateParam.put("payType", contract.getPayType().equals("1")?"月":contract.getPayType().equals("2")?"季":"年"); templateParam.put("firstRent", "¥"+(contract.getPayType().equals("1")?contract.getMonthRent():contract.getPayType().equals("2")?contract.getMonthRent().multiply(new BigDecimal("3")):contract.getMonthRent().multiply(new BigDecimal("12"))).setScale(2,BigDecimal.ROUND_DOWN)+"元"); templateParam.put("firstRentString", "人民币"+NumberToChineseUtils.numberToChinese((contract.getPayType().equals("1")?contract.getMonthRent():contract.getPayType().equals("2")?contract.getMonthRent().multiply(new BigDecimal("3")):contract.getMonthRent().multiply(new BigDecimal("12")).setScale(2,BigDecimal.ROUND_DOWN)).doubleValue())); @@ -349,7 +364,7 @@ templateParam.put("partyOnePhone", contract.getPartyOnePhone()); templateParam.put("partyTwoPerson", contract.getPartyTwoPerson()); templateParam.put("partyTwoPhone", contract.getPartyTwoPhone()); - String url = wordUtil.generatePdf("/templates", "1_yzj_租赁合同.xml", templateParam, "租赁合同", "E:\\"); + String url = wordUtil.generatePdf("/template", "1_yzj_租赁合同.xml", templateParam, "租赁合同", "E:\\"); res.add(url); } @@ -373,12 +388,13 @@ contractExport.setContractName(contract.getContractName()); contractExport.setPartyOneName(contract.getPartyOneName()); contractExport.setPartyTwoName(contract.getPartyTwoName()); - contractExport.setCreate_time(contract.getCreateTime()); - contractExport.setStartTime(contract.getStartTime()); - contractExport.setEndTime(contract.getEndTime()); + contractExport.setCreateTime(DateUtils.localDateTimeToStringYear(contract.getCreateTime())); + contractExport.setStartTime(DateUtils.localDateTimeToStringYear(contract.getStartTime())); + contractExport.setEndTime(DateUtils.localDateTimeToStringYear(contract.getEndTime())); contractExport.setPayType(DictUtils.getDictLabel(DictConstants.DICT_TYPE_CONTRACT_PAY_TYPE,contract.getPayType())); contractExport.setDeposit(contract.getDeposit()+""); contractExport.setStatus(DictUtils.getDictLabel(DictConstants.DICT_TYPE_CONTRACT_STATUS,contract.getStatus())); + contractExports.add(contractExport); } Workbook workbook = ExcelExportUtil.exportExcel(new ExportParams(), ContractExport.class, contractExports); HttpServletResponse response = WebUtils.response(); @@ -395,7 +411,6 @@ workbook.write(outputStream); } catch (IOException e) { e.printStackTrace(); - System.err.println("合同列表信息导出失败"); } finally { try { outputStream.close(); diff --git a/ruoyi-admin/src/main/java/com/ruoyi/web/controller/api/TTenantController.java b/ruoyi-admin/src/main/java/com/ruoyi/web/controller/api/TTenantController.java index 5a2b9b7..ad65a32 100644 --- a/ruoyi-admin/src/main/java/com/ruoyi/web/controller/api/TTenantController.java +++ b/ruoyi-admin/src/main/java/com/ruoyi/web/controller/api/TTenantController.java @@ -1,26 +1,37 @@ package com.ruoyi.web.controller.api; +import cn.afterturn.easypoi.excel.ExcelExportUtil; +import cn.afterturn.easypoi.excel.entity.ExportParams; +import com.baomidou.mybatisplus.core.toolkit.Wrappers; import com.ruoyi.common.annotation.Log; import com.ruoyi.common.basic.PageInfo; import com.ruoyi.common.constant.DictConstants; import com.ruoyi.common.core.domain.R; import com.ruoyi.common.enums.BusinessType; -import com.ruoyi.common.utils.DictUtils; -import com.ruoyi.common.utils.SecurityUtils; -import com.ruoyi.common.utils.StringUtils; +import com.ruoyi.common.utils.*; import com.ruoyi.system.dto.TTenantDTO; +import com.ruoyi.system.export.ContractExport; +import com.ruoyi.system.model.TContract; import com.ruoyi.system.model.TTenant; +import com.ruoyi.system.query.TContractQuery; import com.ruoyi.system.query.TTenantQuery; +import com.ruoyi.system.service.TContractService; import com.ruoyi.system.service.TTenantService; import com.ruoyi.system.vo.TenantVO; import io.swagger.annotations.Api; import io.swagger.annotations.ApiOperation; +import org.apache.poi.ss.usermodel.Workbook; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.security.access.prepost.PreAuthorize; import org.springframework.validation.annotation.Validated; import org.springframework.web.bind.annotation.*; +import javax.servlet.ServletOutputStream; +import javax.servlet.http.HttpServletResponse; +import java.io.IOException; +import java.net.URLEncoder; +import java.util.ArrayList; import java.util.List; /** @@ -37,9 +48,11 @@ public class TTenantController { private final TTenantService tenantService; + private final TContractService contractService; @Autowired - public TTenantController(TTenantService tenantService) { + public TTenantController(TTenantService tenantService, TContractService contractService) { this.tenantService = tenantService; + this.contractService = contractService; } /** @@ -88,9 +101,16 @@ @GetMapping(value = "/getDetailById") public R<TTenant> getDetailById(@RequestParam String id) { TTenant tenant = tenantService.getById(id); - tenant.setTenantAttributes(DictUtils.getDictLabel(DictConstants.DICT_TYPE_TENANT_ATTRIBUTE,tenant.getTenantAttributes())); - tenant.setTenantType(DictUtils.getDictLabel(DictConstants.DICT_TYPE_TENANT_TYPE,tenant.getTenantType())); + tenant.setTenantAttributes(StringUtils.isNotEmpty(tenant.getTenantAttributes())?DictUtils.getDictLabel(DictConstants.DICT_TYPE_TENANT_ATTRIBUTE,tenant.getTenantAttributes()):""); + tenant.setTenantType(StringUtils.isNotEmpty(tenant.getTenantType())?DictUtils.getDictLabel(DictConstants.DICT_TYPE_TENANT_TYPE,tenant.getTenantType()):""); return R.ok(tenant); + } + + @PreAuthorize("@ss.hasPermi('system:contract:list')") + @ApiOperation(value = "获取合同分页列表") + @GetMapping(value = "/contractListByTenantId") + public R<List<TContract>> contractListByTenantId(@RequestParam String tenantId) { + return R.ok(contractService.list(Wrappers.lambdaQuery(TContract.class).eq(TContract::getTenantId, tenantId))); } /** @@ -115,5 +135,54 @@ return R.ok(tenantService.removeByIds(ids)); } + /** + * 导出 + */ + @ApiOperation(value = "导出") + @PreAuthorize("@ss.hasPermi('system:contract:export')") + @Log(title = "导出", businessType = BusinessType.EXPORT) + @PostMapping("/export") + public void exportOpticalInspection(@Validated @RequestBody TContractQuery query) + { + List<ContractExport> contractExports = new ArrayList<>(); + List<TContract> exportList = contractService.list(Wrappers.lambdaQuery(TContract.class).eq(TContract::getTenantId, query.getTenantId())); + for (TContract contract : exportList) { + ContractExport contractExport = new ContractExport(); + contractExport.setContractNumber(contract.getContractNumber()); + contractExport.setContractName(contract.getContractName()); + contractExport.setPartyOneName(contract.getPartyOneName()); + contractExport.setPartyTwoName(contract.getPartyTwoName()); + contractExport.setCreateTime(DateUtils.localDateTimeToStringYear(contract.getCreateTime())); + contractExport.setStartTime(DateUtils.localDateTimeToStringYear(contract.getStartTime())); + contractExport.setEndTime(DateUtils.localDateTimeToStringYear(contract.getEndTime())); + contractExport.setPayType(DictUtils.getDictLabel(DictConstants.DICT_TYPE_CONTRACT_PAY_TYPE,contract.getPayType())); + contractExport.setDeposit(contract.getDeposit()+""); + contractExport.setStatus(DictUtils.getDictLabel(DictConstants.DICT_TYPE_CONTRACT_STATUS,contract.getStatus())); + contractExports.add(contractExport); + } + Workbook workbook = ExcelExportUtil.exportExcel(new ExportParams(), ContractExport.class, contractExports); + HttpServletResponse response = WebUtils.response(); + response.setContentType("application/vnd.ms-excel"); + response.setCharacterEncoding("utf-8"); + ServletOutputStream outputStream = null; + try { + String fileName = URLEncoder.encode("合同列表.xls", "utf-8"); + response.setHeader("Content-Disposition", "attachment;filename=" + fileName); + response.setContentType("application/vnd.ms-excel;charset=UTF-8"); + response.setHeader("Pragma", "no-cache"); + response.setHeader("Cache-Control", "no-cache"); + outputStream = response.getOutputStream(); + workbook.write(outputStream); + } catch (IOException e) { + e.printStackTrace(); + System.err.println("合同列表信息导出失败"); + } finally { + try { + outputStream.close(); + } catch (IOException e) { + e.printStackTrace(); + } + } + } } diff --git a/ruoyi-admin/src/main/java/com/ruoyi/web/controller/system/SysRoleController.java b/ruoyi-admin/src/main/java/com/ruoyi/web/controller/system/SysRoleController.java index ce381d6..494ff97 100644 --- a/ruoyi-admin/src/main/java/com/ruoyi/web/controller/system/SysRoleController.java +++ b/ruoyi-admin/src/main/java/com/ruoyi/web/controller/system/SysRoleController.java @@ -116,7 +116,7 @@ return AjaxResult.success(roleService.selectRoleById(roleId)); } - @PreAuthorize("@ss.hasPermi('system:role:detail')") +// @PreAuthorize("@ss.hasPermi('system:role:detail')") @ApiOperation("角色详情") @GetMapping("/roleInfo") public AjaxResult roleInfo(@RequestParam Long roleId) diff --git a/ruoyi-admin/src/main/java/com/ruoyi/web/controller/system/SysUserController.java b/ruoyi-admin/src/main/java/com/ruoyi/web/controller/system/SysUserController.java index 27aea74..f2ff0c8 100644 --- a/ruoyi-admin/src/main/java/com/ruoyi/web/controller/system/SysUserController.java +++ b/ruoyi-admin/src/main/java/com/ruoyi/web/controller/system/SysUserController.java @@ -192,7 +192,9 @@ } user.setUpdateBy(getUsername()); - user.setPassword(SecurityUtils.encryptPassword(user.getPassword())); + if(StringUtils.isNotEmpty(user.getPassword())){ + user.setPassword(SecurityUtils.encryptPassword(user.getPassword())); + } return AjaxResult.success(userService.updateUser(user)); } diff --git a/ruoyi-admin/src/main/java/com/ruoyi/web/controller/tool/PdfUtils.java b/ruoyi-admin/src/main/java/com/ruoyi/web/controller/tool/PdfUtils.java index 2668c3c..71c5a6c 100644 --- a/ruoyi-admin/src/main/java/com/ruoyi/web/controller/tool/PdfUtils.java +++ b/ruoyi-admin/src/main/java/com/ruoyi/web/controller/tool/PdfUtils.java @@ -1,7 +1,5 @@ package com.ruoyi.web.controller.tool; -import cn.hutool.core.util.StrUtil; -import cn.hutool.http.HttpUtil; import com.documents4j.api.DocumentType; import com.documents4j.api.IConverter; import com.documents4j.job.LocalConverter; @@ -11,11 +9,9 @@ import org.springframework.stereotype.Component; import org.springframework.web.multipart.MultipartFile; -import javax.annotation.Resource; import java.io.*; import java.net.URL; import java.nio.file.Files; -import java.util.HashMap; @Slf4j @Component @@ -213,7 +209,7 @@ } public String test(String fileName){ - String url = "file:///D:\\"+fileName; + String url = "file:///E:\\"+fileName; // String filePath = "E:\\qiyeweixin\\WXWork\\1688855207501340\\Cache\\File\\2024-09"; // String fileName = "专业技术工作总结.docx";4 String filePath = "E:\\"; diff --git a/ruoyi-common/src/main/java/com/ruoyi/common/config/DataUpdateHandlerConfig.java b/ruoyi-admin/src/main/java/com/ruoyi/web/core/config/DataUpdateHandlerConfig.java similarity index 68% rename from ruoyi-common/src/main/java/com/ruoyi/common/config/DataUpdateHandlerConfig.java rename to ruoyi-admin/src/main/java/com/ruoyi/web/core/config/DataUpdateHandlerConfig.java index 7b7dba6..e5836a2 100644 --- a/ruoyi-common/src/main/java/com/ruoyi/common/config/DataUpdateHandlerConfig.java +++ b/ruoyi-admin/src/main/java/com/ruoyi/web/core/config/DataUpdateHandlerConfig.java @@ -1,6 +1,8 @@ -package com.ruoyi.common.config; +package com.ruoyi.web.core.config; import com.baomidou.mybatisplus.core.handlers.MetaObjectHandler; +import com.ruoyi.common.utils.SecurityUtils; +import com.ruoyi.common.utils.StringUtils; import lombok.extern.slf4j.Slf4j; import org.apache.ibatis.reflection.MetaObject; import org.springframework.context.annotation.Configuration; @@ -27,14 +29,15 @@ @Override public void insertFill(MetaObject metaObject) { // 获取登录信息 - /* String userName = JwtTokenUtils.getUsername(); + String userName = SecurityUtils.getUsername(); if (StringUtils.isNotBlank(userName)) { this.setFieldValByName("createBy", userName, metaObject); this.setFieldValByName("updateBy", userName, metaObject); } else { - this.setFieldValByName("createBy", "", metaObject); - this.setFieldValByName("updateBy", "", metaObject); - }*/ + this.setFieldValByName("createBy", userName, metaObject); + this.setFieldValByName("updateBy", userName, metaObject); + } + } /** @@ -45,13 +48,14 @@ @Override public void updateFill(MetaObject metaObject) { // 获取登录信息 - /*String userName = JwtTokenUtils.getUsername(); - if (StringUtils.isNotBlank(userName)) { + String userName = SecurityUtils.getUsername(); + if (StringUtils.isNotBlank(userName)){ this.setFieldValByName("createBy", userName, metaObject); this.setFieldValByName("updateBy", userName, metaObject); } else { - this.setFieldValByName("createBy", "", metaObject); - this.setFieldValByName("updateBy", "", metaObject); - }*/ + this.setFieldValByName("createBy", userName, metaObject); + this.setFieldValByName("updateBy", userName, metaObject); + } + } } diff --git a/ruoyi-common/src/main/java/com/ruoyi/common/config/MybatisPlusConfig.java b/ruoyi-admin/src/main/java/com/ruoyi/web/core/config/MybatisPlusConfig.java similarity index 97% rename from ruoyi-common/src/main/java/com/ruoyi/common/config/MybatisPlusConfig.java rename to ruoyi-admin/src/main/java/com/ruoyi/web/core/config/MybatisPlusConfig.java index 1366f2b..fac9a9f 100644 --- a/ruoyi-common/src/main/java/com/ruoyi/common/config/MybatisPlusConfig.java +++ b/ruoyi-admin/src/main/java/com/ruoyi/web/core/config/MybatisPlusConfig.java @@ -1,4 +1,4 @@ -package com.ruoyi.common.config; +package com.ruoyi.web.core.config; import com.baomidou.mybatisplus.annotation.DbType; import com.baomidou.mybatisplus.core.config.GlobalConfig; diff --git a/ruoyi-admin/src/main/resources/application-test.yml b/ruoyi-admin/src/main/resources/application-test.yml index 93fd2c2..54159c4 100644 --- a/ruoyi-admin/src/main/resources/application-test.yml +++ b/ruoyi-admin/src/main/resources/application-test.yml @@ -70,6 +70,13 @@ # redis 配置 redis: # 地址 +# host: 127.0.0.1 +# # 端口,默认为6379 +# port: 6379 +# # 数据库索引 +# database: 0 +# # 密码 +# password: 123456 host: xzgt.test.591taxi.cn # 端口,默认为6379 port: 16379 @@ -213,3 +220,9 @@ bucketAddr: ap-chengdu rootSrc: https://xzgttest-1305134071.cos.ap-chengdu.myqcloud.com/ location: xizang +sms: + enable: true + appId: 1400957506 + secretid: AKIDCF5EF2c0DE1e5JK8r4EGJF4mNsMgp26x + secretkey: lLl184rUyFOOE0d5KNGC3kmfNsCWk4GU + sign: 四川金达通信工程 \ No newline at end of file diff --git a/ruoyi-applet/pom.xml b/ruoyi-applet/pom.xml index f18e8ca..b02986c 100644 --- a/ruoyi-applet/pom.xml +++ b/ruoyi-applet/pom.xml @@ -95,13 +95,6 @@ <!-- </exclusions>--> </dependency> - <!--二维码开发工具集--> - <dependency> - <groupId>cn.hutool</groupId> - <artifactId>hutool-all</artifactId> - <version>4.6.10</version> - </dependency> - <!-- zxing生成二维码 --> <dependency> <groupId>com.google.zxing</groupId> diff --git a/ruoyi-applet/src/main/java/com/ruoyi/web/controller/api/IndexController.java b/ruoyi-applet/src/main/java/com/ruoyi/web/controller/api/IndexController.java new file mode 100644 index 0000000..fdc926c --- /dev/null +++ b/ruoyi-applet/src/main/java/com/ruoyi/web/controller/api/IndexController.java @@ -0,0 +1,418 @@ +package com.ruoyi.web.controller.api; + + +import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; +import com.baomidou.mybatisplus.core.toolkit.Wrappers; +import com.ruoyi.common.annotation.Log; +import com.ruoyi.common.basic.PageInfo; +import com.ruoyi.common.constant.DictConstants; +import com.ruoyi.common.core.domain.R; +import com.ruoyi.common.core.domain.entity.SysUser; +import com.ruoyi.common.core.domain.model.LoginUser; +import com.ruoyi.common.core.domain.model.LoginUserApplet; +import com.ruoyi.common.enums.BusinessType; +import com.ruoyi.common.utils.DateUtils; +import com.ruoyi.common.utils.DictUtils; +import com.ruoyi.framework.web.service.TokenService; +import com.ruoyi.system.dto.TBillDto; +import com.ruoyi.system.dto.TInvoiceDTO; +import com.ruoyi.system.model.*; +import com.ruoyi.system.query.*; +import com.ruoyi.system.service.*; +import com.ruoyi.system.vo.*; +import io.swagger.annotations.Api; +import io.swagger.annotations.ApiOperation; +import jdk.nashorn.internal.parser.Token; +import org.springframework.beans.BeanUtils; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.security.access.prepost.PreAuthorize; +import org.springframework.util.CollectionUtils; +import org.springframework.validation.annotation.Validated; +import org.springframework.web.bind.annotation.*; + +import java.math.BigDecimal; +import java.time.LocalDate; +import java.time.LocalDateTime; +import java.util.ArrayList; +import java.util.Arrays; +import java.util.List; +import java.util.Objects; +import java.util.stream.Collectors; + +/** + * <p> + * 租金账单 前端控制器 + * </p> + * + * @author xiaochen + * @since 2025-01-17 + */ +@Api(tags = "首页") +@RestController +@RequestMapping("/t-index") +public class IndexController { + + @Autowired + private TBannerService bannerService; + @Autowired + private TokenService tokenService; + @Autowired + private TContractService contractService; + @Autowired + private TBillService billService; + @Autowired + private THouseService houseService; + @Autowired + private TFaultRepairMessageService tFaultRepairMessageService; + @Autowired + private TCheckAcceptRecordService checkAcceptRecordService; + @Autowired + private TTenantService tenantService; + @Autowired + private ISysUserService sysUserService; + @Autowired + private TContractRentTypeService contractRentTypeService; + /** + * 获取轮播图管理列表 + */ + @ApiOperation(value = "获取轮播图列表") + @PostMapping(value = "/list") + public R<List<TBanner>> list(@RequestBody TBannerQuery query) { + return R.ok(bannerService.list(query)); + } + + /** + * 获取轮播图管理列表 + */ + @ApiOperation(value = "租户-我的待办") + @PostMapping(value = "/tenant/myToDo") + public R<MyToDoVO> tenantMyToDo() { + MyToDoVO myToDoVO = new MyToDoVO(); + LoginUserApplet loginUserApplet = tokenService.getLoginUserApplet(); + if (loginUserApplet != null) { + long contractCount = contractService.count(new LambdaQueryWrapper<TContract>() + .eq(TContract::getStatus, 3).eq(TContract::getTenantId, loginUserApplet.getUserId())); + myToDoVO.setContractCount((int) contractCount); + List<String> contractIds = contractService.lambdaQuery().eq(TContract::getTenantId, loginUserApplet.getUserId()).list() + .stream().map(TContract::getId).collect(Collectors.toList()); + if (CollectionUtils.isEmpty(contractIds)) { + myToDoVO.setBillCount(0); + myToDoVO.setContractCount(0); + return R.ok(myToDoVO); + } + int billCount = billService.lambdaQuery().in(TBill::getContractId, contractIds).eq(TBill::getPayFeesStatus, 1).list().size(); + myToDoVO.setBillCount(billCount); + } else { + myToDoVO.setBillCount(0); + myToDoVO.setContractCount(0); + } + return R.ok(myToDoVO); + } + + @ApiOperation(value = "租户-当前在租房源") + @PostMapping(value = "/tenant/myHouse") + public R<List<MyHouseVO>> myHouse() { + List<MyHouseVO> myHouseVOS = new ArrayList<>(); + LoginUserApplet loginUserApplet = tokenService.getLoginUserApplet(); + + if (loginUserApplet != null) { + List<TContract> contractList = contractService.lambdaQuery().eq(TContract::getTenantId, loginUserApplet.getUserId()) + .eq(TContract::getStatus, 4).list(); + List<THouse> houseList = houseService.list(); + List<TBill> bills = billService.lambdaQuery().orderByDesc(TBill::getPayableFeesTime).list(); + for (TContract contract : contractList) { + THouse tHouse = houseList.stream().filter(e -> e.getId().equals(contract.getHouseId())).findFirst().orElse(null); + TBill bill = bills.stream().filter(e -> e.getContractId().equals(contract.getId()) && e.getPayFeesStatus().equals("3")).findFirst().orElse(null); + if (bill == null) { + bill = bills.stream().filter(e -> e.getContractId().equals(contract.getId())).findFirst().orElse(null); + } + if (tHouse != null && bill != null) { + MyHouseVO myToDoVO = new MyHouseVO(); + myToDoVO.setId(contract.getId()); + myToDoVO.setHouseAddress(tHouse.getHouseAddress()); + myToDoVO.setMonthRent(contract.getMonthRent()); + myToDoVO.setPayType(DictUtils.getDictLabel(DictConstants.DICT_TYPE_CONTRACT_PAY_TYPE, contract.getPayType())); + myToDoVO.setMonth(bill.getPayFeesTime() == null ? bill.getPayableFeesTime().getMonth() + "月" : bill.getPayFeesTime().getMonth() + "月"); + myToDoVO.setHouseArea(tHouse.getHouseArea()); + myToDoVO.setHouseType(tHouse.getHouseType()); + myToDoVO.setEndTime(DateUtils.localDateTimeToStringYear(contract.getEndTime())); + myToDoVO.setStartTime(DateUtils.localDateTimeToStringYear(contract.getStartTime())); + myToDoVO.setPropertyRightPerson(tHouse.getPropertyRightPerson()); + myToDoVO.setPhone(tHouse.getPhone()); + List<TBill> billList = bills.stream().filter(e -> e.getContractId().equals(contract.getId())).collect(Collectors.toList()); + List<PayListVO> payList = new ArrayList<>(); + for (TBill tBill : billList) { + if (tBill.getPayFeesTime()==null){ + continue; + } + PayListVO payListVO = new PayListVO(); + payListVO.setPayFeesTime(DateUtils.localDateTimeToStringYear(tBill.getPayFeesTime())); + payListVO.setPayFeesMoney("-" + tBill.getPayFeesMoney() + "元"); + payList.add(payListVO); + } + myToDoVO.setPayList(payList); + myHouseVOS.add(myToDoVO); + } + + } + return R.ok(myHouseVOS); + } else { + return R.ok(myHouseVOS); + } + } + + @ApiOperation(value = "租户-当前在租房源-租赁详情") + @GetMapping(value = "/tenant/myHouseDetail") + public R<MyHouseVO> myHouseDetail(String id) { + LoginUserApplet loginUserApplet = tokenService.getLoginUserApplet(); + + if (loginUserApplet != null) { + MyHouseVO myToDoVO = new MyHouseVO(); + TContract contract = contractService.getById(id); + List<TBill> bills = billService.lambdaQuery().orderByDesc(TBill::getPayableFeesTime).list(); + THouse tHouse = houseService.getById(contract.getHouseId()); + TBill bill = bills.stream().filter(e -> e.getContractId().equals(contract.getId()) && e.getPayFeesStatus().equals("3")).findFirst().orElse(null); + if (bill == null) { + bill = bills.stream().filter(e -> e.getContractId().equals(contract.getId())).findFirst().orElse(null); + } + if (tHouse != null && bill != null) { + myToDoVO.setId(contract.getId()); + myToDoVO.setHouseAddress(tHouse.getHouseAddress()); + myToDoVO.setMonthRent(contract.getMonthRent()); + myToDoVO.setPayType(DictUtils.getDictLabel(DictConstants.DICT_TYPE_CONTRACT_PAY_TYPE, contract.getPayType())); + myToDoVO.setMonth(bill.getPayFeesTime() == null ? bill.getPayableFeesTime().getMonth() + "月" : bill.getPayFeesTime().getMonth() + "月"); + myToDoVO.setHouseArea(tHouse.getHouseArea()); + myToDoVO.setHouseType(tHouse.getHouseType()); + myToDoVO.setEndTime(DateUtils.localDateTimeToStringYear(contract.getEndTime())); + myToDoVO.setStartTime(DateUtils.localDateTimeToStringYear(contract.getStartTime())); + myToDoVO.setPropertyRightPerson(tHouse.getPropertyRightPerson()); + myToDoVO.setPhone(tHouse.getPhone()); + List<TBill> billList = bills.stream().filter(e -> e.getContractId().equals(contract.getId())).collect(Collectors.toList()); + List<PayListVO> payList = new ArrayList<>(); + for (TBill tBill : billList) { + if (tBill.getPayFeesTime()==null){ + continue; + } + PayListVO payListVO = new PayListVO(); + payListVO.setPayFeesTime(DateUtils.localDateTimeToStringYear(tBill.getPayFeesTime())); + payListVO.setPayFeesMoney("-" + tBill.getPayFeesMoney() + "元"); + payList.add(payListVO); + } + myToDoVO.setPayList(payList); + } + + return R.ok(myToDoVO); + } else { + return R.ok(new MyHouseVO()); + } + } + + @ApiOperation(value = "管理员-我的待办") + @PostMapping(value = "/admin/myToDo") + public R<MyToDoVO> adminMyToDo() { + MyToDoVO myToDoVO = new MyToDoVO(); + LoginUserApplet loginUserApplet = tokenService.getLoginUserApplet(); + if (loginUserApplet != null) { + long examineCount = contractService.count(new LambdaQueryWrapper<TContract>() + .eq(TContract::getStatus, 2)); + myToDoVO.setExamineCount((int) examineCount); + List<String> contractIds = billService.lambdaQuery().eq(TBill::getPayFeesStatus, 4).list() + .stream().map(TBill::getContractId).collect(Collectors.toList()); + int overdueCount = contractService.lambdaQuery().in(TContract::getId, contractIds).list() + .stream().map(TContract::getTenantId).distinct().collect(Collectors.toList()).size(); + myToDoVO.setOverdueCount(overdueCount); + } else { + myToDoVO.setExamineCount(0); + myToDoVO.setOverdueCount(0); + } + return R.ok(myToDoVO); + } + + /** + * 获取验收记录管理列表 + */ + @ApiOperation(value = "管理员-房屋验收单列表") + @PostMapping(value = "/admin/houseCheck") + public R<PageInfo<TCheckAcceptRecordVO>> houseCheck(@RequestBody TCheckAcceptRecordAppletQuery query) { + return R.ok(checkAcceptRecordService.pageListApplet(query)); + } + + /** + * 查看验收记录详情 + */ + @ApiOperation(value = "管理员-查看验收记录详情") + @GetMapping(value = "/getDetailById") + public R<TCheckAcceptRecordVO> getDetailById(@RequestParam String id) { + TCheckAcceptRecord checkAcceptRecord = checkAcceptRecordService.getById(id); + checkAcceptRecord.setCleanSituation(DictUtils.getDictLabel(DictConstants.DICT_TYPE_CHECK_SITUATION, checkAcceptRecord.getCleanSituation())); + checkAcceptRecord.setOverallSituation(DictUtils.getDictLabel(DictConstants.DICT_TYPE_CHECK_SITUATION, checkAcceptRecord.getOverallSituation())); + checkAcceptRecord.setDeviceSituation(DictUtils.getDictLabel(DictConstants.DICT_TYPE_CHECK_SITUATION, checkAcceptRecord.getDeviceSituation())); + checkAcceptRecord.setFurnitureSituation(DictUtils.getDictLabel(DictConstants.DICT_TYPE_CHECK_SITUATION, checkAcceptRecord.getFurnitureSituation())); + TCheckAcceptRecordVO checkAcceptRecordVO = new TCheckAcceptRecordVO(); + BeanUtils.copyProperties(checkAcceptRecord, checkAcceptRecordVO); + // 查询合同信息 + checkAcceptRecordVO.setContract(contractService.getById(checkAcceptRecord.getContractId())); + // 查询房屋信息 + checkAcceptRecordVO.setHouse(houseService.getById(checkAcceptRecord.getHouseId())); + return R.ok(checkAcceptRecordVO); + } + + @ApiOperation(value = "管理员-新增验收") + @PostMapping(value = "/addRecord") + public R<TCheckAcceptRecordVO> addRecord(@Validated @RequestBody TCheckAcceptRecord dto) { + dto.setAcceptanceTime(LocalDateTime.now()); + dto.setCheckTime(LocalDateTime.now()); + LocalDate now = LocalDate.now(); + String replace = (now + "").replace("-", ""); + int size = checkAcceptRecordService.list(new LambdaQueryWrapper<TCheckAcceptRecord>() + .likeRight(TCheckAcceptRecord::getAcceptanceTime, LocalDate.now())).size(); + dto.setCode(replace.substring(2)+String.format("%03d", size+1)); + dto.setStatus(true); + // 添加验收记录 + checkAcceptRecordService.updateById(dto); + return R.ok(); + } + /** + * 获取报修管理列表 + */ + @ApiOperation(value = "管理员-房屋维修分页列表") + @PostMapping(value = "/housePageList") + public R<PageInfo<TFaultRepairMessageVO>> pageList(@RequestBody TFaultRepairMessageAppletQuery query) { + return R.ok(tFaultRepairMessageService.pageListApplet(query)); + } + /** + * 查看报修详情 + */ + @ApiOperation(value = "管理员-房屋维修查看详情") + @GetMapping(value = "/getDetailByIdRepair") + public R<TFaultRepairMessageVO> getDetailByIdRepair(@RequestParam String id) { + TFaultRepairMessageVO faultRepairMessageVO = tFaultRepairMessageService.getDetailById(id); + return R.ok(faultRepairMessageVO); + } + + /** + * 处理维修 + */ + @Log(title = "报修信息-处理维修", businessType = BusinessType.UPDATE) + @ApiOperation(value = "管理员-维修处理") + @PostMapping(value = "/handle") + public R<Boolean> handle(@Validated @RequestBody TFaultRepairMessage faultRepairMessage) { + faultRepairMessage.setStatus(2); + return R.ok(tFaultRepairMessageService.updateById(faultRepairMessage)); + } + + /** + * 获取租户管理列表 + */ + @ApiOperation(value = "获取租户分页列表") + @PostMapping(value = "/pageList") + public R<PageInfo<TenantVO>> pageList(@RequestBody TTenantAppletQuery query) { + return R.ok(tenantService.pageListApplet(query)); + } + /** + * 获取租户管理列表 + */ + @ApiOperation(value = "获取租户详情") + @GetMapping(value = "/getTenantDetailById") + public R<TTenant> getTenantDetailById(@RequestParam String id) { + return R.ok(tenantService.getById(id)); + } + /** + * 租户详情-租房信息 + */ + @ApiOperation(value = "租户详情-租房信息列表") + @GetMapping(value = "/listHouse") + public R<List<THouse>> listHouse(@RequestParam String id) { + List<THouse> res = tenantService.listHouse(id); + return R.ok(res); + } + /** + * 租户详情-租房信息 + */ + @ApiOperation(value = "租户详情-合同列表") + @GetMapping(value = "/listContract") + public R<List<TContract>> listContract(@RequestParam String id) { + List<TContract> res = tenantService.listContract(id); + return R.ok(res); + } + @ApiOperation(value = "租户详情-缴费账单列表") + @PostMapping("/listBill") + public R<PageInfo<TBillVO>> listBill(@RequestBody TBillAppletQuery query){ + PageInfo<TBillVO> pageInfo = tenantService.listBill(query); + return R.ok(pageInfo); + } + @ApiOperation(value = "租户详情-缴费账单-账单详情") + @PostMapping("/billDetail") + public R<TBillVO> billDetail(String id){ + TBillVO res = new TBillVO(); + TBill bill = billService.getById(id); + BeanUtils.copyProperties(bill, res); + TContract contract = contractService.getById(bill.getContractId()); + THouse tHouse = houseService.getById(contract.getHouseId()); + res.setHouse(tHouse); + return R.ok(res); + } + @ApiOperation(value = "管理员-我的审批分页列表") + @PostMapping("/listExamine") + public R<PageInfo<ExamineVO>> examineList(@RequestBody TExamineAppletQuery dto){ + LoginUser loginUser = tokenService.getLoginUser(); + if (loginUser==null){ + return R.fail(401,"登录失效"); + } + SysUser sysUser = sysUserService.selectUserById(loginUser.getUserId()); + dto.setUserName(sysUser.getUserName()); + PageInfo<ExamineVO> pageInfo = tenantService.examineList(dto); + return R.ok(pageInfo); + } + @ApiOperation(value = "管理员-审批详情") + @GetMapping("/examineDetail") + public R<TContractVO> examineDetail(@RequestParam String id){ + TContractVO res = new TContractVO(); + TContract contract = contractService.getById(id); + BeanUtils.copyProperties(contract,res); + res.setPayType(DictUtils.getDictLabel(DictConstants.DICT_TYPE_CONTRACT_PAY_TYPE,res.getPayType())); + res.setStatus(DictUtils.getDictLabel(DictConstants.DICT_TYPE_CONTRACT_STATUS,res.getStatus())); + TContractRentType contractRentType = contractRentTypeService.lambdaQuery().eq(TContractRentType::getContractId, id).one(); + if (contractRentType!=null){ + BeanUtils.copyProperties(contractRentType,res); + } + TContract oldContract = contractService.getOne(new LambdaQueryWrapper<TContract>() + .eq(TContract::getHouseId,contract.getHouseId()) + .eq(TContract::getStatus, 4) + .le(TContract::getStartTime, LocalDateTime.now()) + .ge(TContract::getEndTime, LocalDateTime.now())); + THouse house = houseService.getById(contract.getHouseId()); + if (oldContract!=null){ + house.setTenantType(oldContract.getPayType()); + } + res.setHouse(house); + List<TBill> list = billService.lambdaQuery() + .eq(TBill::getContractId, id) + .in(TBill::getPayFeesStatus, Arrays.asList("1,4")) + .list(); + BigDecimal payMoney = new BigDecimal("0"); + for (TBill tBill : list) { + payMoney = payMoney.add(tBill.getPayFeesMoney()).add(tBill.getPayableFeesPenalty()); + } + TCheckAcceptRecord tCheckAcceptRecord = checkAcceptRecordService.lambdaQuery().eq(TCheckAcceptRecord::getContractId, id).one(); + res.setCheckResult(Objects.nonNull(tCheckAcceptRecord)?tCheckAcceptRecord.getCheckResult():false); + res.setPayMoney(payMoney); + + return R.ok(res); + } + @ApiOperation(value = "管理员-我的审批-撤销") + @GetMapping("/cancel") + public R cancel(@RequestParam String id){ + return R.ok(); + } + @ApiOperation(value = "管理员-我的审批-审批") + @GetMapping("/examine") + public R examine(@RequestParam String id){ + return R.ok(); + } + + + +} + + diff --git a/ruoyi-applet/src/main/java/com/ruoyi/web/controller/api/StateProcessController.java b/ruoyi-applet/src/main/java/com/ruoyi/web/controller/api/StateProcessController.java new file mode 100644 index 0000000..efaf81f --- /dev/null +++ b/ruoyi-applet/src/main/java/com/ruoyi/web/controller/api/StateProcessController.java @@ -0,0 +1,209 @@ +package com.ruoyi.web.controller.api; + +import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; +import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper; +import com.baomidou.mybatisplus.core.toolkit.Wrappers; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.ruoyi.common.annotation.Log; +import com.ruoyi.common.basic.PageInfo; +import com.ruoyi.common.core.domain.AjaxResult; +import com.ruoyi.common.core.domain.BaseModel; +import com.ruoyi.common.core.domain.BasePage; +import com.ruoyi.common.core.domain.entity.SysUser; +import com.ruoyi.common.enums.BusinessType; +import com.ruoyi.common.exception.GlobalException; +import com.ruoyi.common.utils.SecurityUtils; +import com.ruoyi.system.bo.*; +import com.ruoyi.system.model.StateProcessModule; +import com.ruoyi.system.model.StateProcessTemplate; +import com.ruoyi.system.model.TContract; +import com.ruoyi.system.service.ISysUserService; +import com.ruoyi.system.service.StateProcessModuleService; +import com.ruoyi.system.service.StateProcessTemplateService; +import com.ruoyi.system.vo.ProcessDetailVO; +import com.ruoyi.system.vo.ProcessTaskListVO; +import io.swagger.annotations.Api; +import io.swagger.annotations.ApiOperation; +import lombok.RequiredArgsConstructor; +import org.springframework.util.CollectionUtils; +import org.springframework.web.bind.annotation.*; + +import java.time.LocalDateTime; +import java.util.HashMap; +import java.util.List; +import java.util.Map; +import java.util.Objects; +import java.util.function.Function; +import java.util.stream.Collectors; + +@Api(tags = "审批流程管理") +@RequestMapping("/state-process") +@RestController +@RequiredArgsConstructor +public class StateProcessController { + + private final StateProcessTemplateService processTemplateService; + private final StateProcessModuleService processModuleService; + private final ISysUserService sysUserService; + + //应用流程分页列表 + @ApiOperation("应用流程分页列表") + @PostMapping("/module/page") + public AjaxResult<List<StateProcessModule>> modulePage(@RequestBody BasePage basePage) { + LambdaQueryWrapper<StateProcessModule> queryWrapper = new LambdaQueryWrapper<>(); + queryWrapper.orderByAsc(StateProcessModule::getCategory); + //查询应用流程列表 + List<StateProcessModule> result = processModuleService.list(queryWrapper); + List<String> updateUserId = result.stream().map(BaseModel::getUpdateBy).collect(Collectors.toList()); + if (!CollectionUtils.isEmpty(updateUserId)){ + //根据用户id查询用户信息 + List<SysUser> sysUsers = sysUserService.selectUserByUserNameList(updateUserId); + Map<Long, SysUser> sysUserMap; + if (!CollectionUtils.isEmpty(sysUsers)){ + sysUserMap = sysUsers.stream().collect(Collectors.toMap(SysUser::getUserId, Function.identity())); + } else { + sysUserMap = new HashMap<>(); + } + //遍历列表,设置更新人名称 + result.forEach(e -> { + SysUser sysUser = sysUserMap.get(e.getUpdateBy()); + if (Objects.nonNull(sysUser)){ + e.setUpdateBy(sysUser.getNickName()); + } + }); + } + return AjaxResult.success(result); + } + //修改应用流程 + @Log(title = "审批流程管理-修改应用流程", businessType = BusinessType.UPDATE) + @ApiOperation("修改应用流程") + @PostMapping("/module/update") + public AjaxResult<PageInfo<StateProcessModule>> moduleUpdate(@RequestBody ProcessModuleUpdateBO processModuleUpdateBO) { + StateProcessTemplate stateProcessTemplate = processTemplateService.getById(processModuleUpdateBO.getTemplateId()); + if (Objects.isNull(stateProcessTemplate)) { + return AjaxResult.success(); + } + StateProcessModule stateProcessModule = new StateProcessModule(); + stateProcessModule.setId(processModuleUpdateBO.getId()); + stateProcessModule.setTemplateId(processModuleUpdateBO.getTemplateId()); + stateProcessModule.setTemplateName(stateProcessTemplate.getTemplateName()); + stateProcessModule.setUpdateBy(SecurityUtils.getLoginUser().getUser().getNickName()); + stateProcessModule.setCreateTime(LocalDateTime.now()); + stateProcessModule.setUpdateTime(LocalDateTime.now()); + stateProcessModule.setRemark(processModuleUpdateBO.getRemark()); + processModuleService.updateById(stateProcessModule); + return AjaxResult.success(); + } + + //流程模版分页 + @ApiOperation("流程模版分页") + @PostMapping("/template/page") + public AjaxResult<Page<StateProcessTemplate>> page(ProcessTemplatePageBO request) { + Page<StateProcessTemplate> templatePage = processTemplateService.page(request); + return AjaxResult.success(templatePage); + } + + //查询流程模版 + @ApiOperation("查询流程模版") + @GetMapping("/template/getById") + public AjaxResult<StateProcessTemplate> selectById(@RequestParam String id) { + return AjaxResult.success(processTemplateService.getById(id)); + } + + //修改并部署模版 + @Log(title = "审批流程管理-修改并部署模版", businessType = BusinessType.UPDATE) + @ApiOperation("修改并部署模版") + @PostMapping("/template/update") + public AjaxResult<Boolean> update(@RequestBody ProcessUpdateBO processUpdateBO) { + return AjaxResult.success(processTemplateService.update(processUpdateBO)); + } + + //删除模版 + @Log(title = "审批流程管理-删除模版", businessType = BusinessType.DELETE) + @ApiOperation("删除模版") + @GetMapping("/template/deleteById") + public AjaxResult<Boolean> deleteById(@RequestParam String id) { + StateProcessTemplate template = processTemplateService.getById(id); + //查询是否存在使用的 + LambdaUpdateWrapper<StateProcessModule> moduleLambdaUpdateWrapper = new LambdaUpdateWrapper<>();; + moduleLambdaUpdateWrapper.eq(StateProcessModule::getTemplateId, template.getId()); + if (processModuleService.getBaseMapper().exists(moduleLambdaUpdateWrapper)) { + throw new GlobalException("该模版在应用流程中已使用!"); + } + //根据key修改所有版本为已删除 + boolean result = processTemplateService.remove(Wrappers.lambdaQuery(StateProcessTemplate.class) + .eq(StateProcessTemplate::getTemplateKey, template.getTemplateKey())); + return AjaxResult.success(result); + } + + //创建并部署模版 + @Log(title = "审批流程管理-创建并部署模版", businessType = BusinessType.INSERT) + @ApiOperation("创建并部署模版") + @PostMapping("/template/create") + public AjaxResult<Boolean> create(@RequestBody ProcessCreateBO processCreateBO) { + return AjaxResult.success(processTemplateService.create(processCreateBO)); + } + + //流程发起 + @Log(title = "审批流程管理-流程发起", businessType = BusinessType.INSERT) + @ApiOperation("流程发起") + @PostMapping("/start") + public AjaxResult<Boolean> start(@RequestBody ProcessStartBO processStartBO) { + return AjaxResult.success(processTemplateService.start(processStartBO)); + } + + //待办 + @ApiOperation("待办列表") + @PostMapping("/wait/task/page") + public AjaxResult<PageInfo<ProcessTaskListVO>> waitTaskPage(@RequestBody ProcessTaskListBO processTemplatePageBO) { + return AjaxResult.success(processTemplateService.waitTaskPage(processTemplatePageBO)); + } + + //已办 + @ApiOperation("已办列表") + @PostMapping("/deal/task/page") + public AjaxResult<PageInfo<ProcessTaskListVO>> dealTaskPage(@RequestBody ProcessTaskListBO processTemplatePageBO) { + return AjaxResult.success(processTemplateService.dealTaskPage(processTemplatePageBO)); + } + + //待办和已办列表 + @ApiOperation("待办和已办列表") + @PostMapping("/dealAndWait/task/page") + public AjaxResult<PageInfo<ProcessTaskListVO>> dealAndWaitTaskPage(@RequestBody ProcessTaskListBO processTemplatePageBO) { + return AjaxResult.success(processTemplateService.dealAndWaitTaskPage(processTemplatePageBO)); + } + + //抄送 + @ApiOperation("抄送列表") + @PostMapping("/copy/task/page") + public AjaxResult<PageInfo<ProcessTaskListVO>> copyTaskPage(@RequestBody ProcessTaskListBO processTaskListBO){ + return AjaxResult.success(processTemplateService.copyTaskPage(processTaskListBO)); + } + + //审核通过 + @Log(title = "审批流程管理-审核通过", businessType = BusinessType.UPDATE) + @ApiOperation("审核通过") + @PostMapping("/agree") + public AjaxResult<Object> agree(@RequestBody ProcessAgreeBO processAgreeBO) { + processTemplateService.agree(processAgreeBO); + return AjaxResult.success(); + } + + //审核拒绝 + @Log(title = "审批流程管理-审核拒绝", businessType = BusinessType.UPDATE) + @ApiOperation("审核拒绝") + @PostMapping("/refuse") + public AjaxResult<Object> refuse(@RequestBody ProcessRefuseBO processRefuseBO) { + processTemplateService.refuse(processRefuseBO); + return AjaxResult.success(); + } + + //审核详情 + @ApiOperation("审核详情") + @GetMapping("/detail") + public AjaxResult<ProcessDetailVO> detail(@RequestParam String taskId) { + ProcessDetailVO detail = processTemplateService.detail(taskId); + return AjaxResult.success(detail); + } + +} diff --git a/ruoyi-applet/src/main/java/com/ruoyi/web/controller/api/TContractController.java b/ruoyi-applet/src/main/java/com/ruoyi/web/controller/api/TContractController.java index 83d5a2f..0731a2e 100644 --- a/ruoyi-applet/src/main/java/com/ruoyi/web/controller/api/TContractController.java +++ b/ruoyi-applet/src/main/java/com/ruoyi/web/controller/api/TContractController.java @@ -5,18 +5,19 @@ import com.ruoyi.common.basic.PageInfo; import com.ruoyi.common.constant.DictConstants; import com.ruoyi.common.core.domain.R; +import com.ruoyi.common.core.domain.model.LoginUserApplet; +import com.ruoyi.common.utils.DateUtils; import com.ruoyi.common.utils.DictUtils; import com.ruoyi.framework.web.service.TokenService; import com.ruoyi.system.dto.SignContractDTO; import com.ruoyi.system.model.TContract; import com.ruoyi.system.model.TContractRentType; import com.ruoyi.system.model.THouse; +import com.ruoyi.system.model.TTenant; import com.ruoyi.system.query.TContractAppletQuery; import com.ruoyi.system.query.TContractQuery; -import com.ruoyi.system.service.TBillService; -import com.ruoyi.system.service.TContractRentTypeService; -import com.ruoyi.system.service.TContractService; -import com.ruoyi.system.service.THouseService; +import com.ruoyi.system.service.*; +import com.ruoyi.system.vo.TContractAppletVO; import com.ruoyi.system.vo.TContractVO; import io.swagger.annotations.Api; import io.swagger.annotations.ApiOperation; @@ -49,7 +50,9 @@ private TBillService billService; @Autowired private TokenService tokenService; - @ApiOperation(value = "签订合同") + @Autowired + private TTenantService tTenantService; + @ApiOperation(value = " 签订合同") @PostMapping(value = "/signContract") public R signContract(@RequestBody SignContractDTO dto) { return contractService.signContract(dto); @@ -57,23 +60,36 @@ @ApiOperation(value = "我的合同分页列表") @PostMapping(value = "/contractList") public R<PageInfo<TContract>> contractList(@RequestBody TContractAppletQuery query) { - // todo 获取登陆人id + LoginUserApplet loginUserApplet = tokenService.getLoginUserApplet(); + if (loginUserApplet==null){ + return R.fail(401,"登录失效"); + } + query.setTenantId(loginUserApplet.getUserId()); return R.ok(contractService.contractAppletList(query)); } @ApiOperation(value = "查询合同信息信息") @GetMapping(value = "/getContractById") - public R<TContractVO> getContractById(@RequestParam String id) { - TContractVO res = new TContractVO(); + public R<TContractAppletVO> getContractById(@RequestParam String id) { + LoginUserApplet loginUserApplet = tokenService.getLoginUserApplet(); + if (loginUserApplet==null){ + return R.fail(401,"登录失效"); + } + TContractAppletVO res = new TContractAppletVO(); TContract contract = contractService.getById(id); BeanUtils.copyProperties(contract,res); + res.setStartTimeString(DateUtils.localDateTimeToStringYear(contract.getStartTime())); + res.setEndTimeString(DateUtils.localDateTimeToStringYear(contract.getEndTime())); res.setPayType(DictUtils.getDictLabel(DictConstants.DICT_TYPE_CONTRACT_PAY_TYPE,res.getPayType())); res.setStatus(DictUtils.getDictLabel(DictConstants.DICT_TYPE_CONTRACT_STATUS,res.getStatus())); TContractRentType contractRentType = contractRentTypeService.lambdaQuery().eq(TContractRentType::getContractId, id).one(); if (contractRentType!=null){ BeanUtils.copyProperties(contractRentType,res); } + TTenant tTenant = tTenantService.getById(contract.getTenantId()); + res.setTenant(tTenant); TContract oldContract = contractService.getOne(new LambdaQueryWrapper<TContract>() .eq(TContract::getHouseId,contract.getHouseId()) + .eq(TContract::getTenantId,loginUserApplet.getUserId()) .eq(TContract::getStatus, 4) .le(TContract::getStartTime, LocalDateTime.now()) .ge(TContract::getEndTime, LocalDateTime.now())); diff --git a/ruoyi-applet/src/main/java/com/ruoyi/web/controller/api/TFaultRepairMessageController.java b/ruoyi-applet/src/main/java/com/ruoyi/web/controller/api/TFaultRepairMessageController.java index 9ea04c2..cc86304 100644 --- a/ruoyi-applet/src/main/java/com/ruoyi/web/controller/api/TFaultRepairMessageController.java +++ b/ruoyi-applet/src/main/java/com/ruoyi/web/controller/api/TFaultRepairMessageController.java @@ -1,6 +1,7 @@ package com.ruoyi.web.controller.api; +import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.baomidou.mybatisplus.core.toolkit.Wrappers; import com.ruoyi.common.core.domain.R; import com.ruoyi.framework.web.service.TokenService; @@ -13,12 +14,9 @@ import io.swagger.annotations.ApiOperation; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.util.CollectionUtils; -import org.springframework.web.bind.annotation.PostMapping; -import org.springframework.web.bind.annotation.RequestBody; -import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.*; -import org.springframework.web.bind.annotation.RestController; - +import java.time.LocalDate; import java.util.List; import java.util.stream.Collectors; @@ -60,9 +58,9 @@ * 获取维修物品二级结构 */ @ApiOperation(value = "获取维修物品二级结构") - @PostMapping(value = "/getItemList") - public R<List<TItemTypeVO>> getItemList() { - List<TItemTypeVO> itemTypes = itemTypeService.getItemList(); + @GetMapping(value = "/getItemList") + public R<List<TItemTypeVO>> getItemList(@RequestParam(required = false) String itemName) { + List<TItemTypeVO> itemTypes = itemTypeService.getItemList(itemName); List<TItem> items = itemService.list(); itemTypes.forEach(itemType -> { itemType.setItemList(items.stream().filter(item -> itemType.getId().equals(item.getTypeId())).collect(Collectors.toList())); @@ -91,8 +89,7 @@ @PostMapping(value = "/getConcatByTenantId") public R<List<TContract>> getConcatByTenantId() { -// Long userId = tokenService.getLoginUser().getUserId(); - String tenantId = "1881967035070177281"; + String tenantId = tokenService.getLoginUserApplet().getUserId(); // 查询合同信息 List<TContract> list = contractService.list(Wrappers.lambdaQuery(TContract.class) .eq(TContract::getTenantId, tenantId) @@ -105,6 +102,7 @@ .in(THouse::getId, houseIds)); list.forEach(item -> { item.setHouseName(houseList.stream().filter(house -> house.getId().equals(item.getHouseId())).findFirst().orElse(new THouse()).getHouseName()); + item.setHouseAddress(houseList.stream().filter(house -> house.getId().equals(item.getHouseId())).findFirst().orElse(new THouse()).getHouseAddress()); }); return R.ok(list); } @@ -115,6 +113,12 @@ @ApiOperation(value = "添加报修信息") @PostMapping(value = "/addFault") public R<String> addFault(@RequestBody TFaultRepairMessageDTO dto) { + dto.setTenantId(tokenService.getLoginUserApplet().getUserId()); + LocalDate now = LocalDate.now(); + String replace = (now + "").replace("-", ""); + int size = tFaultRepairMessageService.list(new LambdaQueryWrapper<TFaultRepairMessage>() + .likeRight(TFaultRepairMessage::getCreateTime, LocalDate.now())).size(); + dto.setCode(replace.substring(2)+String.format("%03d", size+1)); tFaultRepairMessageService.save(dto); return R.ok(); } diff --git a/ruoyi-applet/src/main/java/com/ruoyi/web/controller/api/WxLoginController.java b/ruoyi-applet/src/main/java/com/ruoyi/web/controller/api/WxLoginController.java index c784c42..3f0f789 100644 --- a/ruoyi-applet/src/main/java/com/ruoyi/web/controller/api/WxLoginController.java +++ b/ruoyi-applet/src/main/java/com/ruoyi/web/controller/api/WxLoginController.java @@ -135,6 +135,7 @@ LoginUserApplet loginUserApplet = new LoginUserApplet(); TTenantResp tTenantResp = new TTenantResp(); BeanUtils.copyProperties(tenant, tTenantResp); + tTenantResp.setResidentName(appletUserDecodeData.getPhoneNumber()); loginUserApplet.setUser(tTenantResp); loginUserApplet.setUserId(tenant.getId()); Map<String, Object> tokenInfos = new HashMap<>(); diff --git a/ruoyi-applet/src/main/java/com/ruoyi/web/controller/system/SysLoginController.java b/ruoyi-applet/src/main/java/com/ruoyi/web/controller/system/SysLoginController.java index a9f2046..b239bd0 100644 --- a/ruoyi-applet/src/main/java/com/ruoyi/web/controller/system/SysLoginController.java +++ b/ruoyi-applet/src/main/java/com/ruoyi/web/controller/system/SysLoginController.java @@ -10,6 +10,7 @@ import com.ruoyi.common.core.domain.entity.SysRole; import com.ruoyi.common.core.domain.model.LoginUser; import com.ruoyi.common.core.redis.RedisCache; +import com.ruoyi.common.utils.SmsUtil; import com.ruoyi.framework.web.service.TokenService; import com.ruoyi.system.service.ISysRoleService; import com.ruoyi.web.controller.tool.MsgUtils; @@ -54,6 +55,8 @@ private ISysRoleService roleService; @Autowired private MsgUtils msgUtils; + @Autowired + private SmsUtil smsUtil; /** * 账号密码登录 @@ -127,7 +130,7 @@ String code = String.valueOf((int) (Math.random() * 1000000)); redisCache.setCacheObject(phone, code,5*60,TimeUnit.SECONDS); try { - msgUtils.sendMsg(phone, code); + smsUtil.sendSms(phone, "", new String[]{code}); } catch (Exception e) { throw new RuntimeException(e); } diff --git a/ruoyi-applet/src/main/java/com/ruoyi/web/core/config/DataUpdateHandlerConfig.java b/ruoyi-applet/src/main/java/com/ruoyi/web/core/config/DataUpdateHandlerConfig.java new file mode 100644 index 0000000..e27f2a5 --- /dev/null +++ b/ruoyi-applet/src/main/java/com/ruoyi/web/core/config/DataUpdateHandlerConfig.java @@ -0,0 +1,61 @@ +package com.ruoyi.web.core.config; + +import com.baomidou.mybatisplus.core.handlers.MetaObjectHandler; +import com.ruoyi.common.utils.SecurityUtils; +import com.ruoyi.common.utils.StringUtils; +import lombok.extern.slf4j.Slf4j; +import org.apache.ibatis.reflection.MetaObject; +import org.springframework.context.annotation.Configuration; + +/** + * @author xiaochen + * @ClassName DataUpdateInterceptor + * @Description 数据更新操作处理 + * @date 2021-12-15 + * <p> + * 注意,之前在此处注入了 JwtTokenUtils + * <p> + * 造成spring循环依赖,项目支棱不起来 + */ +@Slf4j +@Configuration +public class DataUpdateHandlerConfig implements MetaObjectHandler { + + /** + * 新增数据执行 + * + * @param metaObject + */ + @Override + public void insertFill(MetaObject metaObject) { + // 获取登录信息 +// String userName = SecurityUtils.getUsernameApplet(); +// if (StringUtils.isNotBlank(userName)) { +// this.setFieldValByName("createBy", userName, metaObject); +// this.setFieldValByName("updateBy", userName, metaObject); +// } else { +// this.setFieldValByName("createBy", userName, metaObject); +// this.setFieldValByName("updateBy", userName, metaObject); +// } + + } + + /** + * 修改数据执行 + * + * @param metaObject + */ + @Override + public void updateFill(MetaObject metaObject) { + // 获取登录信息 +// String userName = SecurityUtils.getUsernameApplet(); +// if (StringUtils.isNotBlank(userName)){ +// this.setFieldValByName("createBy", userName, metaObject); +// this.setFieldValByName("updateBy", userName, metaObject); +// } else { +// this.setFieldValByName("createBy", userName, metaObject); +// this.setFieldValByName("updateBy", userName, metaObject); +// } + + } +} diff --git a/ruoyi-common/src/main/java/com/ruoyi/common/config/MybatisPlusConfig.java b/ruoyi-applet/src/main/java/com/ruoyi/web/core/config/MybatisPlusConfig.java similarity index 97% copy from ruoyi-common/src/main/java/com/ruoyi/common/config/MybatisPlusConfig.java copy to ruoyi-applet/src/main/java/com/ruoyi/web/core/config/MybatisPlusConfig.java index 1366f2b..fac9a9f 100644 --- a/ruoyi-common/src/main/java/com/ruoyi/common/config/MybatisPlusConfig.java +++ b/ruoyi-applet/src/main/java/com/ruoyi/web/core/config/MybatisPlusConfig.java @@ -1,4 +1,4 @@ -package com.ruoyi.common.config; +package com.ruoyi.web.core.config; import com.baomidou.mybatisplus.annotation.DbType; import com.baomidou.mybatisplus.core.config.GlobalConfig; diff --git a/ruoyi-applet/src/main/resources/application-test.yml b/ruoyi-applet/src/main/resources/application-test.yml index a0e94e7..14afafa 100644 --- a/ruoyi-applet/src/main/resources/application-test.yml +++ b/ruoyi-applet/src/main/resources/application-test.yml @@ -70,6 +70,13 @@ # redis 配置 redis: # 地址 +# host: 127.0.0.1 +# # 端口,默认为6379 +# port: 6379 +# # 数据库索引 +# database: 0 +# # 密码 +# password: 123456 host: xzgt.test.591taxi.cn # 端口,默认为6379 port: 16379 diff --git a/ruoyi-common/pom.xml b/ruoyi-common/pom.xml index b63b467..33e2a27 100644 --- a/ruoyi-common/pom.xml +++ b/ruoyi-common/pom.xml @@ -187,6 +187,20 @@ <version>4.0.11</version> </dependency> + <!-- 工作流--> + <dependency> + <groupId>com.aizuda</groupId> + <artifactId>flowlong-spring-boot-starter</artifactId> + <version>1.0.4</version> + </dependency> + + <!-- hutool--> + <dependency> + <groupId>cn.hutool</groupId> + <artifactId>hutool-all</artifactId> + <version>5.8.4</version> + </dependency> + </dependencies> </project> \ No newline at end of file diff --git a/ruoyi-common/src/main/java/com/ruoyi/common/core/domain/BaseModel.java b/ruoyi-common/src/main/java/com/ruoyi/common/core/domain/BaseModel.java index 88f8dc3..3e5ea1d 100644 --- a/ruoyi-common/src/main/java/com/ruoyi/common/core/domain/BaseModel.java +++ b/ruoyi-common/src/main/java/com/ruoyi/common/core/domain/BaseModel.java @@ -41,7 +41,6 @@ * 新增和更新执行 */ @ApiModelProperty(value = "记录修改人,前端忽略") - @JsonIgnore @TableField(value = "update_by", fill = FieldFill.INSERT_UPDATE) private String updateBy; /** diff --git a/ruoyi-common/src/main/java/com/ruoyi/common/enums/ProcessCategoryEnum.java b/ruoyi-common/src/main/java/com/ruoyi/common/enums/ProcessCategoryEnum.java new file mode 100644 index 0000000..5aef891 --- /dev/null +++ b/ruoyi-common/src/main/java/com/ruoyi/common/enums/ProcessCategoryEnum.java @@ -0,0 +1,51 @@ +package com.ruoyi.common.enums; + +import lombok.AllArgsConstructor; +import lombok.Getter; + +/** + * 1. 入户调查 + * 2. 价格评估 + * 3. 协议签订 + * 固定对应表 state_process_module + */ +@Getter +@AllArgsConstructor +public enum ProcessCategoryEnum { + CATEGORY0(0, "错误分类"), + CATEGORY1(1, "合同新增审批"), + CATEGORY2(2, "合同签订审批"), + CATEGORY3(3, "合同提前终止审批"), + ; + + + private final Integer value; + private final String text; + + public static Integer getValue(String text) { + for (ProcessCategoryEnum v : ProcessCategoryEnum.values()) { + if (v.text.equals(text)) { + return v.value; + } + } + return 0; + } + + public static String getValueByKey(Integer key) { + for (ProcessCategoryEnum v : ProcessCategoryEnum.values()) { + if (v.getValue().equals(key)) { + return v.getText(); + } + } + return ""; + } + + public static ProcessCategoryEnum getEnumByKey(Integer key) { + for (ProcessCategoryEnum v : ProcessCategoryEnum.values()) { + if (v.getValue().equals(key)) { + return v; + } + } + return CATEGORY0; + } +} diff --git a/ruoyi-common/src/main/java/com/ruoyi/common/enums/StateProcessActionEnum.java b/ruoyi-common/src/main/java/com/ruoyi/common/enums/StateProcessActionEnum.java new file mode 100644 index 0000000..d61daea --- /dev/null +++ b/ruoyi-common/src/main/java/com/ruoyi/common/enums/StateProcessActionEnum.java @@ -0,0 +1,26 @@ +package com.ruoyi.common.enums; + +import lombok.AllArgsConstructor; +import lombok.Getter; + +/** + * 流程动作枚举 + * + */ +@Getter +@AllArgsConstructor +public enum StateProcessActionEnum { + + START(0), // "发起" + REJECTED(3), // "拒绝" + APPROVED(4), // "通过" + CANCELED(5), // "撤销" + BACK(7), // "回退" + COPY(12), // "抄送" + FORWARD(13), // "转发" + COMMENT(14), // "评论" + TRANSACT(15); // "办理" + + private final int value; + +} diff --git a/ruoyi-common/src/main/java/com/ruoyi/common/enums/SubmitStatusEnum.java b/ruoyi-common/src/main/java/com/ruoyi/common/enums/SubmitStatusEnum.java new file mode 100644 index 0000000..9e231f3 --- /dev/null +++ b/ruoyi-common/src/main/java/com/ruoyi/common/enums/SubmitStatusEnum.java @@ -0,0 +1,33 @@ +package com.ruoyi.common.enums; + +import lombok.Getter; + +import java.util.Objects; + +@Getter +public enum SubmitStatusEnum { + SUBMITTED(-1, ""), + REJECT(0, "已退回"), + PENDING_REVIEW(1, "待审核"), + ACCEPT(3, "已接收"); + + private final int value; + private final String text; + + public static String getTextByValue(Integer value) { + if (Objects.isNull(value)) { + return ""; + } + for (SubmitStatusEnum v : SubmitStatusEnum.values()) { + if (v.getValue() == (value)) { + return v.getText(); + } + } + return ""; + } + + SubmitStatusEnum(int value, String text) { + this.text = text; + this.value = value; + } +} diff --git a/ruoyi-common/src/main/java/com/ruoyi/common/exception/state/StateErrorCode.java b/ruoyi-common/src/main/java/com/ruoyi/common/exception/state/StateErrorCode.java new file mode 100644 index 0000000..9e38eef --- /dev/null +++ b/ruoyi-common/src/main/java/com/ruoyi/common/exception/state/StateErrorCode.java @@ -0,0 +1,19 @@ +package com.ruoyi.common.exception.state; + + +import lombok.AllArgsConstructor; +import lombok.Getter; + +@Getter +@AllArgsConstructor +public enum StateErrorCode { + + PROCESS_TEMPLATE_KEY_EXISTS("已经存在此名称的模版了!"), + PROCESS_TEMPLATE_NOT_EXISTS("流程模版不存在!"), + PROCESS_NOT_DEPLOY("模版尚未部署成功"), + PROCESS_VERSION_ERROR("流程引擎版本不一致"), + ; + + private final String value; + +} diff --git a/ruoyi-common/src/main/java/com/ruoyi/common/utils/SecurityUtils.java b/ruoyi-common/src/main/java/com/ruoyi/common/utils/SecurityUtils.java index a6f3d53..adea656 100644 --- a/ruoyi-common/src/main/java/com/ruoyi/common/utils/SecurityUtils.java +++ b/ruoyi-common/src/main/java/com/ruoyi/common/utils/SecurityUtils.java @@ -1,5 +1,6 @@ package com.ruoyi.common.utils; +import com.ruoyi.common.core.domain.model.LoginUserApplet; import org.springframework.security.core.Authentication; import org.springframework.security.core.context.SecurityContextHolder; import org.springframework.security.crypto.bcrypt.BCryptPasswordEncoder; @@ -58,6 +59,20 @@ throw new ServiceException("获取用户账户异常", HttpStatus.UNAUTHORIZED); } } + /** + * 获取用户账户小程序 + **/ + public static String getUsernameApplet() + { + try + { + return getLoginUserApplet().getUsername(); + } + catch (Exception e) + { + throw new ServiceException("获取用户账户异常", HttpStatus.UNAUTHORIZED); + } + } /** * 获取用户 @@ -73,6 +88,17 @@ throw new ServiceException("获取用户信息异常", HttpStatus.UNAUTHORIZED); } } + public static LoginUserApplet getLoginUserApplet() + { + try + { + return (LoginUserApplet) getAuthentication().getPrincipal(); + } + catch (Exception e) + { + throw new ServiceException("获取用户信息异常", HttpStatus.UNAUTHORIZED); + } + } /** * 获取Authentication diff --git a/ruoyi-system/src/main/java/com/ruoyi/system/bo/DeployBO.java b/ruoyi-system/src/main/java/com/ruoyi/system/bo/DeployBO.java new file mode 100644 index 0000000..7adf52f --- /dev/null +++ b/ruoyi-system/src/main/java/com/ruoyi/system/bo/DeployBO.java @@ -0,0 +1,15 @@ +package com.ruoyi.system.bo; + +import com.aizuda.bpm.engine.model.NodeModel; +import lombok.Data; + +@Data +public class DeployBO { + private String key; + private String name; + private String instanceUrl; + /** + * 流程定义 + */ + private NodeModel nodeConfig; +} diff --git a/ruoyi-system/src/main/java/com/ruoyi/system/bo/ProcessAgreeBO.java b/ruoyi-system/src/main/java/com/ruoyi/system/bo/ProcessAgreeBO.java new file mode 100644 index 0000000..7638f4d --- /dev/null +++ b/ruoyi-system/src/main/java/com/ruoyi/system/bo/ProcessAgreeBO.java @@ -0,0 +1,26 @@ +package com.ruoyi.system.bo; + +import lombok.Data; + +/** + * 流程审批请求参数 同意 + * + * <p> + * 尊重知识产权,不允许非法使用,后果自负 + * </p> + * + */ +@Data +public class ProcessAgreeBO { + + /** + * 任务id + */ + private String taskId; + + /** + * 理由 + */ + private String remark; + +} diff --git a/ruoyi-system/src/main/java/com/ruoyi/system/bo/ProcessCreateBO.java b/ruoyi-system/src/main/java/com/ruoyi/system/bo/ProcessCreateBO.java new file mode 100644 index 0000000..ed40541 --- /dev/null +++ b/ruoyi-system/src/main/java/com/ruoyi/system/bo/ProcessCreateBO.java @@ -0,0 +1,21 @@ +package com.ruoyi.system.bo; + +import lombok.Data; + +@Data +public class ProcessCreateBO { + + + /** + * 模版名称 + */ + private String templateName; + + /** + * json流程模版 + */ + private String process; + + private String remark; + +} diff --git a/ruoyi-system/src/main/java/com/ruoyi/system/bo/ProcessModuleUpdateBO.java b/ruoyi-system/src/main/java/com/ruoyi/system/bo/ProcessModuleUpdateBO.java new file mode 100644 index 0000000..6510129 --- /dev/null +++ b/ruoyi-system/src/main/java/com/ruoyi/system/bo/ProcessModuleUpdateBO.java @@ -0,0 +1,19 @@ +package com.ruoyi.system.bo; + +import lombok.Data; + +@Data +public class ProcessModuleUpdateBO { + + /** + * 模块id + */ + private String id; + + /** + * 流程id + */ + private String templateId; + private String remark; + +} diff --git a/ruoyi-system/src/main/java/com/ruoyi/system/bo/ProcessRefuseBO.java b/ruoyi-system/src/main/java/com/ruoyi/system/bo/ProcessRefuseBO.java new file mode 100644 index 0000000..8072394 --- /dev/null +++ b/ruoyi-system/src/main/java/com/ruoyi/system/bo/ProcessRefuseBO.java @@ -0,0 +1,27 @@ +package com.ruoyi.system.bo; + +import lombok.Data; + +/** + * 流程审批请求参数 拒绝 + * + * <p> + * 尊重知识产权,不允许非法使用,后果自负 + * </p> + * + */ +@Data +public class ProcessRefuseBO { + + /** + * 任务id + */ + private String taskId; + + /** + * 理由 + */ + private String remark; + + +} diff --git a/ruoyi-system/src/main/java/com/ruoyi/system/bo/ProcessStartBO.java b/ruoyi-system/src/main/java/com/ruoyi/system/bo/ProcessStartBO.java new file mode 100644 index 0000000..6bd43bc --- /dev/null +++ b/ruoyi-system/src/main/java/com/ruoyi/system/bo/ProcessStartBO.java @@ -0,0 +1,57 @@ +package com.ruoyi.system.bo; + +import lombok.Data; + +import java.util.Map; + +@Data +public class ProcessStartBO { + + /** + * 阶段类型 + * 1入户调查 + * 2价格评估 + * 3协议签订 + * 4资金管理-预算资金 + * 5住宅临时安置补助费 + * 6停产停业经济损失补助费 + * 7安置情况 + */ + private String category; + + /** + * 任务中心-项目名称 + */ + private String name; + + /** + * 模块名称 + */ + private String moduleName; + + /** + * 系统摘要 + * 入户调查摘要:【镇/街】【征收实施单位】【调查户数】 + * 价格评估摘要:【镇/街】【征收实施单位】【价格评估合计】 + * 协议签订摘要:【镇/街】【征收实施单位】【权利人】【协议类型】 + * 预算资金摘要:【镇/街】【征收实施单位】【预算金额】 + * 住宅临时安置补助费摘要:【镇/街】【征收实施单位】【开始时间-截止时间】【申请金额】 + * 停产停业经济损失补助费摘要:【镇/街】【征收实施单位】【开始时间-截止时间】【申请金额】 + * 安置情况摘要:【镇/街】【征收实施单位】【批次名称】【安置类型】 + */ + private String remark; + + + /** + * 类型 1集体 2国有 + */ + private Integer type = 2; + + /** + * 变量:流程完成后需要修改状态的表id信息 + * 例如: + * variable.put("objectId",12); + */ + private Map<String, Object> variable; + +} diff --git a/ruoyi-system/src/main/java/com/ruoyi/system/bo/ProcessTaskListBO.java b/ruoyi-system/src/main/java/com/ruoyi/system/bo/ProcessTaskListBO.java new file mode 100644 index 0000000..528e3ac --- /dev/null +++ b/ruoyi-system/src/main/java/com/ruoyi/system/bo/ProcessTaskListBO.java @@ -0,0 +1,45 @@ +package com.ruoyi.system.bo; + +import com.ruoyi.common.core.domain.BasePage; +import io.swagger.annotations.ApiModelProperty; +import lombok.Getter; +import lombok.Setter; + +import java.util.List; + +@Setter +@Getter +public class ProcessTaskListBO extends BasePage { + /** + * 任务名称 + */ + @ApiModelProperty(value = "任务名称") + private String name; + + /** + * 任务名称 + */ + @ApiModelProperty(value = "任务名称") + private String moduleName; +// /** +// * 流程实例状态( 0,审批中 1,审批通过 2,审批拒绝 3) +// */ +// private Integer instanceState; + /** + * 创建人 + */ + @ApiModelProperty(value = "创建人") + private String createBy; + + @ApiModelProperty(value = "乙方名称") + private String partyTwoName; + @ApiModelProperty(value = "合同编号") + private String contractNumber; + @ApiModelProperty(value = "合同名称") + private String contractName; + @ApiModelProperty(value = "合同状态") + private String status; + @ApiModelProperty(value = "前端忽略") + private List<String> instanceIds; + +} diff --git a/ruoyi-system/src/main/java/com/ruoyi/system/bo/ProcessTemplatePageBO.java b/ruoyi-system/src/main/java/com/ruoyi/system/bo/ProcessTemplatePageBO.java new file mode 100644 index 0000000..9502e83 --- /dev/null +++ b/ruoyi-system/src/main/java/com/ruoyi/system/bo/ProcessTemplatePageBO.java @@ -0,0 +1,12 @@ +package com.ruoyi.system.bo; + +import lombok.Data; + +@Data +public class ProcessTemplatePageBO { + + private Integer currentPage; + private Integer pageSize; + private String name; + +} diff --git a/ruoyi-system/src/main/java/com/ruoyi/system/bo/ProcessUpdateBO.java b/ruoyi-system/src/main/java/com/ruoyi/system/bo/ProcessUpdateBO.java new file mode 100644 index 0000000..09ac837 --- /dev/null +++ b/ruoyi-system/src/main/java/com/ruoyi/system/bo/ProcessUpdateBO.java @@ -0,0 +1,22 @@ +package com.ruoyi.system.bo; + +import lombok.Data; + +@Data +public class ProcessUpdateBO { + + private String id; + + /** + * 模版名称 + */ + private String templateName; + + /** + * json流程模版 + */ + private String process; + + private String remark; + +} diff --git a/ruoyi-system/src/main/java/com/ruoyi/system/dto/TExamineDTO.java b/ruoyi-system/src/main/java/com/ruoyi/system/dto/TExamineDTO.java new file mode 100644 index 0000000..63c5c6e --- /dev/null +++ b/ruoyi-system/src/main/java/com/ruoyi/system/dto/TExamineDTO.java @@ -0,0 +1,15 @@ +package com.ruoyi.system.dto; + +import com.ruoyi.system.model.TTenant; +import io.swagger.annotations.ApiModel; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +@Data +@ApiModel(value = "审批DTO") +public class TExamineDTO{ + @ApiModelProperty(value = "审批id") + private String id; + @ApiModelProperty(value = "审批状态") + private Integer status; +} diff --git a/ruoyi-system/src/main/java/com/ruoyi/system/export/ContractExport.java b/ruoyi-system/src/main/java/com/ruoyi/system/export/ContractExport.java index b5f25f7..ac9c72f 100644 --- a/ruoyi-system/src/main/java/com/ruoyi/system/export/ContractExport.java +++ b/ruoyi-system/src/main/java/com/ruoyi/system/export/ContractExport.java @@ -9,7 +9,7 @@ import java.util.Date; @Data -@ApiModel(value = "光缆巡检导出excel") +@ApiModel(value = "合同导出excel") public class ContractExport implements Serializable { @Excel(name = "合同编号",width = 30) @@ -24,15 +24,15 @@ @Excel(name = "乙方名称",width = 30) private String partyTwoName; - @Excel(name = "创建时间",width = 30,exportFormat = "yyyy-MM-dd") - private LocalDateTime create_time; + @Excel(name = "创建时间",width = 30) + private String createTime; - @Excel(name = "生效日期",width = 30,exportFormat = "yyyy-MM-dd") - private LocalDateTime startTime; + @Excel(name = "生效日期",width = 30) + private String startTime; - @Excel(name = "终止日期",width = 30,exportFormat = "yyyy-MM-dd") - private LocalDateTime endTime; + @Excel(name = "终止日期",width = 30) + private String endTime; @Excel(name = "租金支付方式",width = 30) private String payType; diff --git a/ruoyi-system/src/main/java/com/ruoyi/system/mapper/StateProcessExtInstanceMapper.java b/ruoyi-system/src/main/java/com/ruoyi/system/mapper/StateProcessExtInstanceMapper.java new file mode 100644 index 0000000..5c81fcc --- /dev/null +++ b/ruoyi-system/src/main/java/com/ruoyi/system/mapper/StateProcessExtInstanceMapper.java @@ -0,0 +1,9 @@ +package com.ruoyi.system.mapper; + +import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.ruoyi.system.model.StateProcessExtInstance; +import org.apache.ibatis.annotations.Mapper; + +@Mapper +public interface StateProcessExtInstanceMapper extends BaseMapper<StateProcessExtInstance> { +} diff --git a/ruoyi-system/src/main/java/com/ruoyi/system/mapper/StateProcessInstanceActionMapper.java b/ruoyi-system/src/main/java/com/ruoyi/system/mapper/StateProcessInstanceActionMapper.java new file mode 100644 index 0000000..81dcaa1 --- /dev/null +++ b/ruoyi-system/src/main/java/com/ruoyi/system/mapper/StateProcessInstanceActionMapper.java @@ -0,0 +1,7 @@ +package com.ruoyi.system.mapper; + +import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.ruoyi.system.model.StateProcessInstanceAction; + +public interface StateProcessInstanceActionMapper extends BaseMapper<StateProcessInstanceAction> { +} diff --git a/ruoyi-system/src/main/java/com/ruoyi/system/mapper/StateProcessModuleMapper.java b/ruoyi-system/src/main/java/com/ruoyi/system/mapper/StateProcessModuleMapper.java new file mode 100644 index 0000000..527a07b --- /dev/null +++ b/ruoyi-system/src/main/java/com/ruoyi/system/mapper/StateProcessModuleMapper.java @@ -0,0 +1,9 @@ +package com.ruoyi.system.mapper; + +import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.ruoyi.system.model.StateProcessModule; +import org.apache.ibatis.annotations.Mapper; + +@Mapper +public interface StateProcessModuleMapper extends BaseMapper<StateProcessModule> { +} diff --git a/ruoyi-system/src/main/java/com/ruoyi/system/mapper/StateProcessTemplateMapper.java b/ruoyi-system/src/main/java/com/ruoyi/system/mapper/StateProcessTemplateMapper.java new file mode 100644 index 0000000..a620b09 --- /dev/null +++ b/ruoyi-system/src/main/java/com/ruoyi/system/mapper/StateProcessTemplateMapper.java @@ -0,0 +1,15 @@ +package com.ruoyi.system.mapper; + +import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.ruoyi.system.bo.ProcessTemplatePageBO; +import com.ruoyi.system.model.StateProcessTemplate; +import org.apache.ibatis.annotations.Mapper; +import org.apache.ibatis.annotations.Param; + +@Mapper +public interface StateProcessTemplateMapper extends BaseMapper<StateProcessTemplate> { + + Page<StateProcessTemplate> page(Page<StateProcessTemplate> page, @Param("request") ProcessTemplatePageBO request); + +} diff --git a/ruoyi-system/src/main/java/com/ruoyi/system/mapper/StateTaskCenterMapper.java b/ruoyi-system/src/main/java/com/ruoyi/system/mapper/StateTaskCenterMapper.java new file mode 100644 index 0000000..8fa2afc --- /dev/null +++ b/ruoyi-system/src/main/java/com/ruoyi/system/mapper/StateTaskCenterMapper.java @@ -0,0 +1,23 @@ +package com.ruoyi.system.mapper; + +import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.ruoyi.common.basic.PageInfo; +import com.ruoyi.system.bo.ProcessTaskListBO; +import com.ruoyi.system.model.StateTaskCenter; +import com.ruoyi.system.vo.ProcessTaskListVO; +import org.apache.ibatis.annotations.Mapper; +import org.apache.ibatis.annotations.Param; + +import java.util.List; + +@Mapper +public interface StateTaskCenterMapper extends BaseMapper<StateTaskCenter> { + /** + * 分页查询 + * @param processTaskListBO + * @param pageInfo + * @return + */ + List<ProcessTaskListVO> pageList(@Param("query") ProcessTaskListBO processTaskListBO, @Param("pageInfo") PageInfo<ProcessTaskListVO> pageInfo); + +} diff --git a/ruoyi-system/src/main/java/com/ruoyi/system/mapper/SysRoleMapper.java b/ruoyi-system/src/main/java/com/ruoyi/system/mapper/SysRoleMapper.java index 9d66e47..ada62eb 100644 --- a/ruoyi-system/src/main/java/com/ruoyi/system/mapper/SysRoleMapper.java +++ b/ruoyi-system/src/main/java/com/ruoyi/system/mapper/SysRoleMapper.java @@ -127,4 +127,6 @@ List<SysRole> selectPageList(@Param("query")SysRoleQuery query,@Param("pageInfo") PageInfo<SysRole> pageInfo); + List<SysRole> selectRoleByUserIds(@Param("roleIds")List<String> roleIds); + } diff --git a/ruoyi-system/src/main/java/com/ruoyi/system/mapper/TBannerMapper.java b/ruoyi-system/src/main/java/com/ruoyi/system/mapper/TBannerMapper.java index b258375..800c3c6 100644 --- a/ruoyi-system/src/main/java/com/ruoyi/system/mapper/TBannerMapper.java +++ b/ruoyi-system/src/main/java/com/ruoyi/system/mapper/TBannerMapper.java @@ -25,5 +25,6 @@ * @return */ List<TBanner> pageList(@Param("query") TBannerQuery query, @Param("pageInfo")PageInfo<TBanner> pageInfo); + List<TBanner> list(@Param("query") TBannerQuery query); } diff --git a/ruoyi-system/src/main/java/com/ruoyi/system/mapper/TCheckAcceptRecordMapper.java b/ruoyi-system/src/main/java/com/ruoyi/system/mapper/TCheckAcceptRecordMapper.java index ee37eff..7e6f416 100644 --- a/ruoyi-system/src/main/java/com/ruoyi/system/mapper/TCheckAcceptRecordMapper.java +++ b/ruoyi-system/src/main/java/com/ruoyi/system/mapper/TCheckAcceptRecordMapper.java @@ -3,6 +3,7 @@ import com.baomidou.mybatisplus.core.mapper.BaseMapper; import com.ruoyi.common.basic.PageInfo; import com.ruoyi.system.model.TCheckAcceptRecord; +import com.ruoyi.system.query.TCheckAcceptRecordAppletQuery; import com.ruoyi.system.query.TCheckAcceptRecordQuery; import com.ruoyi.system.vo.TCheckAcceptRecordVO; import org.apache.ibatis.annotations.Param; @@ -26,6 +27,7 @@ * @return */ List<TCheckAcceptRecordVO> pageList(@Param("query") TCheckAcceptRecordQuery query, @Param("pageInfo")PageInfo<TCheckAcceptRecordVO> pageInfo); + List<TCheckAcceptRecordVO> pageListApplet(@Param("query") TCheckAcceptRecordAppletQuery query, @Param("pageInfo")PageInfo<TCheckAcceptRecordVO> pageInfo); } diff --git a/ruoyi-system/src/main/java/com/ruoyi/system/mapper/TFaultRepairMessageMapper.java b/ruoyi-system/src/main/java/com/ruoyi/system/mapper/TFaultRepairMessageMapper.java index b9774a9..fbd1b49 100644 --- a/ruoyi-system/src/main/java/com/ruoyi/system/mapper/TFaultRepairMessageMapper.java +++ b/ruoyi-system/src/main/java/com/ruoyi/system/mapper/TFaultRepairMessageMapper.java @@ -3,6 +3,7 @@ import com.baomidou.mybatisplus.core.mapper.BaseMapper; import com.ruoyi.common.basic.PageInfo; import com.ruoyi.system.model.TFaultRepairMessage; +import com.ruoyi.system.query.TFaultRepairMessageAppletQuery; import com.ruoyi.system.query.TFaultRepairMessageQuery; import com.ruoyi.system.vo.TFaultRepairMessageVO; import org.apache.ibatis.annotations.Param; @@ -33,5 +34,6 @@ * @return */ List<TFaultRepairMessageVO> pageList(@Param("query") TFaultRepairMessageQuery query, @Param("pageInfo")PageInfo<TFaultRepairMessageVO> pageInfo); + List<TFaultRepairMessageVO> pageListApplet(@Param("query") TFaultRepairMessageAppletQuery query, @Param("pageInfo")PageInfo<TFaultRepairMessageVO> pageInfo); } diff --git a/ruoyi-system/src/main/java/com/ruoyi/system/mapper/TItemTypeMapper.java b/ruoyi-system/src/main/java/com/ruoyi/system/mapper/TItemTypeMapper.java index 3edc837..7ded449 100644 --- a/ruoyi-system/src/main/java/com/ruoyi/system/mapper/TItemTypeMapper.java +++ b/ruoyi-system/src/main/java/com/ruoyi/system/mapper/TItemTypeMapper.java @@ -27,7 +27,7 @@ */ List<TItemType> pageList(@Param("query") TItemTypeQuery query, @Param("pageInfo")PageInfo<TItemType> pageInfo); - List<TItemTypeVO> getItemList(); + List<TItemTypeVO> getItemList(@Param("itemName") String itemName); } diff --git a/ruoyi-system/src/main/java/com/ruoyi/system/mapper/TTenantMapper.java b/ruoyi-system/src/main/java/com/ruoyi/system/mapper/TTenantMapper.java index a93206e..e0812d5 100644 --- a/ruoyi-system/src/main/java/com/ruoyi/system/mapper/TTenantMapper.java +++ b/ruoyi-system/src/main/java/com/ruoyi/system/mapper/TTenantMapper.java @@ -3,7 +3,12 @@ import com.baomidou.mybatisplus.core.mapper.BaseMapper; import com.ruoyi.common.basic.PageInfo; import com.ruoyi.system.model.TTenant; +import com.ruoyi.system.query.TBillAppletQuery; +import com.ruoyi.system.query.TExamineAppletQuery; +import com.ruoyi.system.query.TTenantAppletQuery; import com.ruoyi.system.query.TTenantQuery; +import com.ruoyi.system.vo.ExamineVO; +import com.ruoyi.system.vo.TBillVO; import com.ruoyi.system.vo.TenantVO; import org.apache.ibatis.annotations.Param; @@ -26,6 +31,11 @@ * @return */ List<TenantVO> pageList(@Param("query") TTenantQuery query, @Param("pageInfo")PageInfo<TenantVO> pageInfo); + List<TenantVO> pageListApplet(@Param("query") TTenantAppletQuery query, @Param("pageInfo")PageInfo<TenantVO> pageInfo); + List<TBillVO> listBill(@Param("query") TBillAppletQuery query,@Param("pageInfo") PageInfo<TBillVO> pageInfo); + + List<ExamineVO> examineList(@Param("query")TExamineAppletQuery dto, @Param("pageInfo")PageInfo<ExamineVO> pageInfo); + } diff --git a/ruoyi-system/src/main/java/com/ruoyi/system/model/StateProcessExtInstance.java b/ruoyi-system/src/main/java/com/ruoyi/system/model/StateProcessExtInstance.java new file mode 100644 index 0000000..3d15679 --- /dev/null +++ b/ruoyi-system/src/main/java/com/ruoyi/system/model/StateProcessExtInstance.java @@ -0,0 +1,29 @@ +package com.ruoyi.system.model; + +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.BaseModel; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; +import lombok.EqualsAndHashCode; + +@Data +@EqualsAndHashCode(callSuper = false) +@TableName(value = "state_process_ext_instance") +public class StateProcessExtInstance extends BaseModel { + + @TableId(value = "id", type = IdType.ASSIGN_ID) + private String id; + @ApiModelProperty(value = "模板id") + @TableField("template_id") + private String templateId; + @ApiModelProperty(value = "flw流程id") + @TableField("process_id") + private String processId; + @ApiModelProperty(value = "flw流程版本") + @TableField("process_version") + private Integer processVersion; + +} diff --git a/ruoyi-system/src/main/java/com/ruoyi/system/model/StateProcessInstanceAction.java b/ruoyi-system/src/main/java/com/ruoyi/system/model/StateProcessInstanceAction.java new file mode 100644 index 0000000..b80da00 --- /dev/null +++ b/ruoyi-system/src/main/java/com/ruoyi/system/model/StateProcessInstanceAction.java @@ -0,0 +1,46 @@ +package com.ruoyi.system.model; + +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.BaseModel; +import io.swagger.annotations.ApiModel; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; +import lombok.EqualsAndHashCode; + +@Data +@EqualsAndHashCode(callSuper = false) +@ApiModel(value = "工作流-实例操作记录表") +@TableName(value = "state_process_instance_action") +public class StateProcessInstanceAction extends BaseModel { + + @TableId(value = "id", type = IdType.ASSIGN_ID) + private String id; + @ApiModelProperty(value = "流程实例id") + @TableField("instance_id") + private String instanceId; + @ApiModelProperty(value = "抄送、自动审批:true") + @TableField("robot") + private boolean robot; + @ApiModelProperty(value = "审批办理人id") + @TableField("auditor_id") + private String auditorId; + @ApiModelProperty(value ="动作类型") + @TableField("action_type") + private Integer actionType; + @ApiModelProperty(value = "抄送人") + @TableField("user_ids") + private String userIds; + @ApiModelProperty(value = "分配人ID") + @TableField("assignee_id") + private String assigneeId; + @ApiModelProperty(value = "节点ID") + @TableField("node_id") + private String nodeId; + @ApiModelProperty(value = "备注") + @TableField("remark") + private String remark; + +} diff --git a/ruoyi-system/src/main/java/com/ruoyi/system/model/StateProcessModule.java b/ruoyi-system/src/main/java/com/ruoyi/system/model/StateProcessModule.java new file mode 100644 index 0000000..5b41fda --- /dev/null +++ b/ruoyi-system/src/main/java/com/ruoyi/system/model/StateProcessModule.java @@ -0,0 +1,39 @@ +package com.ruoyi.system.model; + +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.BaseModel; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; +import lombok.EqualsAndHashCode; + +@Data +@EqualsAndHashCode(callSuper = false) +@TableName(value = "state_process_module") +public class StateProcessModule extends BaseModel { + + @TableId(value = "id", type = IdType.ASSIGN_ID) + private String id; + /** + * 1=合同新增 + * 2=合同签订 + * 3=合同提前终止 + */ + @ApiModelProperty(value = "规格类型") + @TableField("category") + private String category; + @ApiModelProperty(value = "涉及类型") + @TableField("name") + private String name; + @ApiModelProperty(value = "流程名称") + @TableField("template_name") + private String templateName; + @ApiModelProperty(value = "流程id") + @TableField("template_id") + private String templateId; + @ApiModelProperty(value = "备注") + @TableField("remark") + private String remark; +} diff --git a/ruoyi-system/src/main/java/com/ruoyi/system/model/StateProcessTemplate.java b/ruoyi-system/src/main/java/com/ruoyi/system/model/StateProcessTemplate.java new file mode 100644 index 0000000..fef5305 --- /dev/null +++ b/ruoyi-system/src/main/java/com/ruoyi/system/model/StateProcessTemplate.java @@ -0,0 +1,49 @@ +package com.ruoyi.system.model; + +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.BaseModel; +import io.swagger.annotations.ApiModel; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; +import lombok.EqualsAndHashCode; + +@Data +@EqualsAndHashCode(callSuper = false) +@ApiModel(value = "工作流-模版") +@TableName(value = "state_process_template") +public class StateProcessTemplate extends BaseModel { + + @TableId(value = "id", type = IdType.ASSIGN_ID) + private String id; + @ApiModelProperty(value = "模版标识") + @TableField("template_key") + private String templateKey; + @ApiModelProperty(value = "版本,默认1") + @TableField("template_version") + private Integer templateVersion; + @ApiModelProperty(value = "模版名称") + @TableField("template_name") + private String templateName; + @ApiModelProperty(value = "基础设置") + @TableField("settings") + private String settings; + @ApiModelProperty(value = "流程定义") + @TableField("process") + private String process; + @ApiModelProperty(value = "备注") + @TableField("remark") + private String remark; + @ApiModelProperty(value = "0:停用;1:正常") + @TableField("status") + private Integer status; + @ApiModelProperty(value = "workflow_id") + @TableField("work_flow_id") + private Long workFlowId; + @ApiModelProperty(value = "workflow流程版本") + @TableField("workflow_version") + private Integer workflowVersion; + +} diff --git a/ruoyi-system/src/main/java/com/ruoyi/system/model/StateTaskCenter.java b/ruoyi-system/src/main/java/com/ruoyi/system/model/StateTaskCenter.java new file mode 100644 index 0000000..ab25bf9 --- /dev/null +++ b/ruoyi-system/src/main/java/com/ruoyi/system/model/StateTaskCenter.java @@ -0,0 +1,42 @@ +package com.ruoyi.system.model; + +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.BaseModel; +import io.swagger.annotations.ApiModel; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; +import lombok.EqualsAndHashCode; + +@Data +@EqualsAndHashCode(callSuper = false) +@ApiModel(value = "任务") +@TableName(value = "state_task_center" ) +public class StateTaskCenter extends BaseModel { + + @TableId(value = "id", type = IdType.ASSIGN_ID) + private String id; + @ApiModelProperty(value = "任务名称") + @TableField("name") + private String name; + @ApiModelProperty(value = "模块名称") + @TableField("module_name") + private String moduleName; + @ApiModelProperty(value = "系统摘要") + @TableField("remark") + private String remark; + @ApiModelProperty(value = "类型") + @TableField("category") + private String category; + @ApiModelProperty(value = "流程id") + @TableField("flow_id") + private String flowId; + @TableField("variable") + private String variable; + @ApiModelProperty(value = "合同项目id") + @TableField("project_id") + private String projectId; + +} diff --git a/ruoyi-system/src/main/java/com/ruoyi/system/model/TCheckAcceptRecord.java b/ruoyi-system/src/main/java/com/ruoyi/system/model/TCheckAcceptRecord.java index 6a50c67..7dbba85 100644 --- a/ruoyi-system/src/main/java/com/ruoyi/system/model/TCheckAcceptRecord.java +++ b/ruoyi-system/src/main/java/com/ruoyi/system/model/TCheckAcceptRecord.java @@ -47,6 +47,10 @@ @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8") @TableField("check_time") private LocalDateTime checkTime; + @ApiModelProperty(value = "应验收日期") + @JsonFormat(pattern = "yyyy-MM-dd", timezone = "GMT+8") + @TableField("acceptance_time") + private LocalDateTime acceptanceTime; @ApiModelProperty(value = "退租原因") @TableField("lease_reason") @@ -91,8 +95,11 @@ @ApiModelProperty(value = "验收结算金额") @TableField("check_money") private BigDecimal checkMoney; - @ApiModelProperty(value = "验收状态 待验收 已验收") + @ApiModelProperty(value = "验收状态 0待验收 1已验收") @TableField("status") - private String status; + private Boolean status; + @ApiModelProperty(value = "验收单号 前端忽略不传") + @TableField("code") + private String code; } diff --git a/ruoyi-system/src/main/java/com/ruoyi/system/model/TContract.java b/ruoyi-system/src/main/java/com/ruoyi/system/model/TContract.java index 800f497..12c8605 100644 --- a/ruoyi-system/src/main/java/com/ruoyi/system/model/TContract.java +++ b/ruoyi-system/src/main/java/com/ruoyi/system/model/TContract.java @@ -143,7 +143,7 @@ * 7 待结算 * 8 已结算 */ - @ApiModelProperty(value = "状态 待提交 待审批 未签订 已签订....") + @ApiModelProperty(value = "合同状态 1=待提交 2=待审批 3=未签订 4=已签订 5=已驳回 6=已终止 7=待结算 8=已结算") @TableField("status") private String status; @ApiModelProperty(value = "内存大小多个文件逗号拼接") @@ -164,5 +164,8 @@ @ApiModelProperty(value = "房屋名称") @TableField(exist = false) private String houseName; + @ApiModelProperty(value = "房屋地址") + @TableField(exist = false) + private String houseAddress; } diff --git a/ruoyi-system/src/main/java/com/ruoyi/system/model/TFaultRepairMessage.java b/ruoyi-system/src/main/java/com/ruoyi/system/model/TFaultRepairMessage.java index c1dec51..ea3d9ec 100644 --- a/ruoyi-system/src/main/java/com/ruoyi/system/model/TFaultRepairMessage.java +++ b/ruoyi-system/src/main/java/com/ruoyi/system/model/TFaultRepairMessage.java @@ -3,6 +3,8 @@ import com.baomidou.mybatisplus.annotation.IdType; import com.baomidou.mybatisplus.annotation.TableName; import com.baomidou.mybatisplus.annotation.TableId; + +import java.time.LocalDate; import java.time.LocalDateTime; import com.baomidou.mybatisplus.annotation.TableField; import java.io.Serializable; @@ -74,9 +76,8 @@ private Integer repairType; @ApiModelProperty(value = "上门时间") - @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8") @TableField("visit_time") - private LocalDateTime visitTime; + private String visitTime; @ApiModelProperty(value = "联系电话") @TableField("contact_number") @@ -91,9 +92,9 @@ private String handlePerson; @ApiModelProperty(value = "处理时间") - @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8") + @JsonFormat(pattern = "yyyy-MM-dd", timezone = "GMT+8") @TableField("handle_time") - private LocalDateTime handleTime; + private LocalDate handleTime; @ApiModelProperty(value = "结果描述") @TableField("result_describe") @@ -110,6 +111,9 @@ @ApiModelProperty(value = "附件名称 逗号分割") @TableField("attachment_name") private String attachmentName; + @ApiModelProperty(value = "维修单号") + @TableField("code") + private String code; @ApiModelProperty(value = "状态 1=待处理 2=已处理") @TableField("status") diff --git a/ruoyi-system/src/main/java/com/ruoyi/system/model/THouse.java b/ruoyi-system/src/main/java/com/ruoyi/system/model/THouse.java index 50fd212..9a03ab2 100644 --- a/ruoyi-system/src/main/java/com/ruoyi/system/model/THouse.java +++ b/ruoyi-system/src/main/java/com/ruoyi/system/model/THouse.java @@ -47,7 +47,7 @@ @ApiModelProperty(value = "建筑面积") @TableField("house_area") - private Integer houseArea; + private String houseArea; @ApiModelProperty(value = "户型") @TableField("house_type") @@ -87,6 +87,9 @@ @ApiModelProperty(value = "房号") @TableField("room_number") private String roomNumber; + @ApiModelProperty(value = "产权人联系方式") + @TableField("phone") + private String phone; @ApiModelProperty(value = "住户类型 1月租 2季租 3年租") @TableField(exist = false) diff --git a/ruoyi-system/src/main/java/com/ruoyi/system/model/TInformation.java b/ruoyi-system/src/main/java/com/ruoyi/system/model/TInformation.java index eb090cf..3132361 100644 --- a/ruoyi-system/src/main/java/com/ruoyi/system/model/TInformation.java +++ b/ruoyi-system/src/main/java/com/ruoyi/system/model/TInformation.java @@ -59,6 +59,10 @@ @TableField("cover") private String cover; + @ApiModelProperty(value = "简介") + @TableField("brief_introduction") + private String briefIntroduction; + @ApiModelProperty(value = "内容") @TableField("content") private String content; diff --git a/ruoyi-system/src/main/java/com/ruoyi/system/query/TBillAppletQuery.java b/ruoyi-system/src/main/java/com/ruoyi/system/query/TBillAppletQuery.java new file mode 100644 index 0000000..e2141dd --- /dev/null +++ b/ruoyi-system/src/main/java/com/ruoyi/system/query/TBillAppletQuery.java @@ -0,0 +1,30 @@ +package com.ruoyi.system.query; + +import com.ruoyi.common.core.domain.BasePage; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +import java.util.List; + +@Data +public class TBillAppletQuery extends BasePage { + /** + * 缴费状态 1=未缴费 2=待确认 3=已缴费 4=已逾期 + */ + @ApiModelProperty("缴费状态 全部不传 1=未缴费 2=待确认 3=已缴费 4=已逾期") + private Integer payFeesStatus; + /** + * 租户ID + */ + @ApiModelProperty("租户ID") + private String id; + /** + * 合同ids + */ + @ApiModelProperty("合同ids 前端忽略") + private List<String> contractIds; + + + + +} diff --git a/ruoyi-system/src/main/java/com/ruoyi/system/query/TCheckAcceptRecordAppletQuery.java b/ruoyi-system/src/main/java/com/ruoyi/system/query/TCheckAcceptRecordAppletQuery.java new file mode 100644 index 0000000..9c6ff23 --- /dev/null +++ b/ruoyi-system/src/main/java/com/ruoyi/system/query/TCheckAcceptRecordAppletQuery.java @@ -0,0 +1,18 @@ +package com.ruoyi.system.query; + +import com.ruoyi.common.core.domain.model.TimeRangeQueryBody; +import io.swagger.annotations.ApiModel; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +@Data +@ApiModel(value = "小程序管理员-验收记录查询对象query") +public class TCheckAcceptRecordAppletQuery extends TimeRangeQueryBody { + + @ApiModelProperty(value = "房屋名称或地址") + private String houseNameOrAddress; + + @ApiModelProperty(value = "状态 不传为全部 1待验收 2已验收") + private Integer status; + +} diff --git a/ruoyi-system/src/main/java/com/ruoyi/system/query/TContractQuery.java b/ruoyi-system/src/main/java/com/ruoyi/system/query/TContractQuery.java index 52031d9..3b0238e 100644 --- a/ruoyi-system/src/main/java/com/ruoyi/system/query/TContractQuery.java +++ b/ruoyi-system/src/main/java/com/ruoyi/system/query/TContractQuery.java @@ -5,6 +5,7 @@ import io.swagger.annotations.ApiModelProperty; import lombok.Data; +import javax.validation.constraints.NotBlank; import java.util.List; @Data @@ -16,8 +17,11 @@ private String contractNumber; @ApiModelProperty(value = "合同名称") private Integer contractName; - @ApiModelProperty(value = "合同状态 1=待提交 2=待审批 3=未签订 4=已签订") + @ApiModelProperty(value = "合同状态 1=待提交 2=待审批 3=未签订 4=已签订 5=已驳回 6=已终止 7=待结算 8=已结算") private Integer status; @ApiModelProperty(value = "选中的行") private List<String> ids; + @NotBlank(message = "租户id不可为空") + @ApiModelProperty(value = "租户id") + private String tenantId; } diff --git a/ruoyi-system/src/main/java/com/ruoyi/system/query/TExamineAppletQuery.java b/ruoyi-system/src/main/java/com/ruoyi/system/query/TExamineAppletQuery.java new file mode 100644 index 0000000..e2d4612 --- /dev/null +++ b/ruoyi-system/src/main/java/com/ruoyi/system/query/TExamineAppletQuery.java @@ -0,0 +1,36 @@ +package com.ruoyi.system.query; + +import com.ruoyi.common.core.domain.BasePage; +import io.swagger.annotations.Api; +import io.swagger.annotations.ApiModel; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +import java.util.List; + +@Data +@ApiModel(value = "我的审批查询query") +public class TExamineAppletQuery extends BasePage { + /** + * 1待审批 2已审批 3我发起的 + */ + @ApiModelProperty("1待审批 2已审批 3我发起的") + private Integer status; + /** + * 时间 1最近1天 2最近7天 3最近30天 + */ + @ApiModelProperty("时间全部不传 1最近1天 2最近7天 3最近30天") + private Integer time; + /** + * 1倒序 2正序 首次默认倒序排 + */ + @ApiModelProperty("最新到达1倒序 最早到达2正序 首次默认倒序排") + private Integer sort; + @ApiModelProperty("登陆人名称 前端忽略") + private String userName; + + + + + +} diff --git a/ruoyi-system/src/main/java/com/ruoyi/system/query/TFaultRepairMessageAppletQuery.java b/ruoyi-system/src/main/java/com/ruoyi/system/query/TFaultRepairMessageAppletQuery.java new file mode 100644 index 0000000..aa43d32 --- /dev/null +++ b/ruoyi-system/src/main/java/com/ruoyi/system/query/TFaultRepairMessageAppletQuery.java @@ -0,0 +1,16 @@ +package com.ruoyi.system.query; + +import com.ruoyi.common.core.domain.BasePage; +import io.swagger.annotations.ApiModel; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +@Data +@ApiModel(value = "小程序房屋维修受理列表query") +public class TFaultRepairMessageAppletQuery extends BasePage { + + @ApiModelProperty(value = "房屋地址") + private String houseAddress; + @ApiModelProperty(value = "处理状态 1=待处理 2=已处理") + private Integer status; +} diff --git a/ruoyi-system/src/main/java/com/ruoyi/system/query/TTenantAppletQuery.java b/ruoyi-system/src/main/java/com/ruoyi/system/query/TTenantAppletQuery.java new file mode 100644 index 0000000..5d1b35c --- /dev/null +++ b/ruoyi-system/src/main/java/com/ruoyi/system/query/TTenantAppletQuery.java @@ -0,0 +1,18 @@ +package com.ruoyi.system.query; + +import com.ruoyi.common.core.domain.BasePage; +import io.swagger.annotations.ApiModel; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +@Data +@ApiModel(value = "租户查询Query") +public class TTenantAppletQuery extends BasePage { + + @ApiModelProperty(value = "租户姓名或电话") + private String residentNameOrPhone; + + + + +} diff --git a/ruoyi-system/src/main/java/com/ruoyi/system/service/ISysRoleService.java b/ruoyi-system/src/main/java/com/ruoyi/system/service/ISysRoleService.java index 7a50061..063e8a5 100644 --- a/ruoyi-system/src/main/java/com/ruoyi/system/service/ISysRoleService.java +++ b/ruoyi-system/src/main/java/com/ruoyi/system/service/ISysRoleService.java @@ -232,4 +232,6 @@ * @return 结果 */ public int editRole(SysRoleDTO dto); + + List<SysRole> selectRoleByUserIds(List<String> roleIds); } diff --git a/ruoyi-system/src/main/java/com/ruoyi/system/service/StateProcessExtInstanceService.java b/ruoyi-system/src/main/java/com/ruoyi/system/service/StateProcessExtInstanceService.java new file mode 100644 index 0000000..902e39d --- /dev/null +++ b/ruoyi-system/src/main/java/com/ruoyi/system/service/StateProcessExtInstanceService.java @@ -0,0 +1,7 @@ +package com.ruoyi.system.service; + +import com.baomidou.mybatisplus.extension.service.IService; +import com.ruoyi.system.model.StateProcessExtInstance; + +public interface StateProcessExtInstanceService extends IService<StateProcessExtInstance> { +} diff --git a/ruoyi-system/src/main/java/com/ruoyi/system/service/StateProcessInstanceActionService.java b/ruoyi-system/src/main/java/com/ruoyi/system/service/StateProcessInstanceActionService.java new file mode 100644 index 0000000..85b5090 --- /dev/null +++ b/ruoyi-system/src/main/java/com/ruoyi/system/service/StateProcessInstanceActionService.java @@ -0,0 +1,7 @@ +package com.ruoyi.system.service; + +import com.baomidou.mybatisplus.extension.service.IService; +import com.ruoyi.system.model.StateProcessInstanceAction; + +public interface StateProcessInstanceActionService extends IService<StateProcessInstanceAction> { +} diff --git a/ruoyi-system/src/main/java/com/ruoyi/system/service/StateProcessModuleService.java b/ruoyi-system/src/main/java/com/ruoyi/system/service/StateProcessModuleService.java new file mode 100644 index 0000000..3a010e1 --- /dev/null +++ b/ruoyi-system/src/main/java/com/ruoyi/system/service/StateProcessModuleService.java @@ -0,0 +1,8 @@ +package com.ruoyi.system.service; + +import com.baomidou.mybatisplus.extension.service.IService; +import com.ruoyi.system.model.StateProcessModule; + +public interface StateProcessModuleService extends IService<StateProcessModule> { + +} diff --git a/ruoyi-system/src/main/java/com/ruoyi/system/service/StateProcessTemplateService.java b/ruoyi-system/src/main/java/com/ruoyi/system/service/StateProcessTemplateService.java new file mode 100644 index 0000000..450d70e --- /dev/null +++ b/ruoyi-system/src/main/java/com/ruoyi/system/service/StateProcessTemplateService.java @@ -0,0 +1,46 @@ +package com.ruoyi.system.service; + + +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.baomidou.mybatisplus.extension.service.IService; +import com.ruoyi.common.basic.PageInfo; +import com.ruoyi.system.bo.*; +import com.ruoyi.system.model.StateProcessTemplate; +import com.ruoyi.system.vo.ProcessDetailVO; +import com.ruoyi.system.vo.ProcessTaskListVO; + +public interface StateProcessTemplateService extends IService<StateProcessTemplate> { + + Page<StateProcessTemplate> page(ProcessTemplatePageBO request); + + Boolean update(ProcessUpdateBO processUpdateBO); + + //新增 + Boolean create(ProcessCreateBO processCreateBO); + + /** + * 启动流程 + * @param processStartBO + * @return + */ + Boolean start(ProcessStartBO processStartBO); + + //待办 + PageInfo<ProcessTaskListVO> waitTaskPage(ProcessTaskListBO processTaskListBO); + + //已办 + PageInfo<ProcessTaskListVO> dealTaskPage(ProcessTaskListBO processTaskListBO); + + //抄送 + PageInfo<ProcessTaskListVO> copyTaskPage(ProcessTaskListBO processTaskListBO); + + //同意 + void agree(ProcessAgreeBO processAgreeBO); + + //拒绝 + void refuse(ProcessRefuseBO processRefuseBO); + + PageInfo<ProcessTaskListVO> dealAndWaitTaskPage(ProcessTaskListBO processTemplatePageBO); + + ProcessDetailVO detail(String taskId); +} diff --git a/ruoyi-system/src/main/java/com/ruoyi/system/service/StateTaskCenterService.java b/ruoyi-system/src/main/java/com/ruoyi/system/service/StateTaskCenterService.java new file mode 100644 index 0000000..05fd6b1 --- /dev/null +++ b/ruoyi-system/src/main/java/com/ruoyi/system/service/StateTaskCenterService.java @@ -0,0 +1,12 @@ +package com.ruoyi.system.service; + +import com.baomidou.mybatisplus.extension.service.IService; +import com.ruoyi.common.basic.PageInfo; +import com.ruoyi.system.bo.ProcessTaskListBO; +import com.ruoyi.system.model.StateTaskCenter; +import com.ruoyi.system.vo.ProcessTaskListVO; + +public interface StateTaskCenterService extends IService<StateTaskCenter> { + PageInfo<ProcessTaskListVO> pageList(ProcessTaskListBO processTaskListBO); + +} diff --git a/ruoyi-system/src/main/java/com/ruoyi/system/service/TBannerService.java b/ruoyi-system/src/main/java/com/ruoyi/system/service/TBannerService.java index b2ed584..9b7b161 100644 --- a/ruoyi-system/src/main/java/com/ruoyi/system/service/TBannerService.java +++ b/ruoyi-system/src/main/java/com/ruoyi/system/service/TBannerService.java @@ -5,6 +5,8 @@ import com.ruoyi.system.model.TBanner; import com.ruoyi.system.query.TBannerQuery; +import java.util.List; + /** * <p> * 轮播图管理 服务类 @@ -21,4 +23,5 @@ * @return */ PageInfo<TBanner> pageList(TBannerQuery query); + List<TBanner> list(TBannerQuery query); } diff --git a/ruoyi-system/src/main/java/com/ruoyi/system/service/TCheckAcceptRecordService.java b/ruoyi-system/src/main/java/com/ruoyi/system/service/TCheckAcceptRecordService.java index dd07c92..974dfb3 100644 --- a/ruoyi-system/src/main/java/com/ruoyi/system/service/TCheckAcceptRecordService.java +++ b/ruoyi-system/src/main/java/com/ruoyi/system/service/TCheckAcceptRecordService.java @@ -3,6 +3,7 @@ import com.baomidou.mybatisplus.extension.service.IService; import com.ruoyi.common.basic.PageInfo; import com.ruoyi.system.model.TCheckAcceptRecord; +import com.ruoyi.system.query.TCheckAcceptRecordAppletQuery; import com.ruoyi.system.query.TCheckAcceptRecordQuery; import com.ruoyi.system.vo.TCheckAcceptRecordVO; @@ -22,4 +23,5 @@ * @return */ PageInfo<TCheckAcceptRecordVO> pageList(TCheckAcceptRecordQuery query); + PageInfo<TCheckAcceptRecordVO> pageListApplet(TCheckAcceptRecordAppletQuery query); } diff --git a/ruoyi-system/src/main/java/com/ruoyi/system/service/TContractService.java b/ruoyi-system/src/main/java/com/ruoyi/system/service/TContractService.java index 5139836..00b2a31 100644 --- a/ruoyi-system/src/main/java/com/ruoyi/system/service/TContractService.java +++ b/ruoyi-system/src/main/java/com/ruoyi/system/service/TContractService.java @@ -40,4 +40,7 @@ void export(TContractQuery query); List<TContract> contractExportList(TContractQuery query); + + Boolean updateContractAuditStatus(String projectId, Integer submitStatus); + } diff --git a/ruoyi-system/src/main/java/com/ruoyi/system/service/TFaultRepairMessageService.java b/ruoyi-system/src/main/java/com/ruoyi/system/service/TFaultRepairMessageService.java index 272ec26..5ae51db 100644 --- a/ruoyi-system/src/main/java/com/ruoyi/system/service/TFaultRepairMessageService.java +++ b/ruoyi-system/src/main/java/com/ruoyi/system/service/TFaultRepairMessageService.java @@ -3,6 +3,7 @@ import com.baomidou.mybatisplus.extension.service.IService; import com.ruoyi.common.basic.PageInfo; import com.ruoyi.system.model.TFaultRepairMessage; +import com.ruoyi.system.query.TFaultRepairMessageAppletQuery; import com.ruoyi.system.query.TFaultRepairMessageQuery; import com.ruoyi.system.vo.TFaultRepairMessageVO; @@ -29,4 +30,5 @@ * @return */ PageInfo<TFaultRepairMessageVO> pageList(TFaultRepairMessageQuery query); + PageInfo<TFaultRepairMessageVO> pageListApplet(TFaultRepairMessageAppletQuery query); } diff --git a/ruoyi-system/src/main/java/com/ruoyi/system/service/TItemTypeService.java b/ruoyi-system/src/main/java/com/ruoyi/system/service/TItemTypeService.java index 14ee3d1..3b8af03 100644 --- a/ruoyi-system/src/main/java/com/ruoyi/system/service/TItemTypeService.java +++ b/ruoyi-system/src/main/java/com/ruoyi/system/service/TItemTypeService.java @@ -32,5 +32,5 @@ */ PageInfo<TItemType> pageList(TItemTypeQuery query); - List<TItemTypeVO> getItemList(); + List<TItemTypeVO> getItemList(String itemName); } diff --git a/ruoyi-system/src/main/java/com/ruoyi/system/service/TTenantService.java b/ruoyi-system/src/main/java/com/ruoyi/system/service/TTenantService.java index 590f644..989de6c 100644 --- a/ruoyi-system/src/main/java/com/ruoyi/system/service/TTenantService.java +++ b/ruoyi-system/src/main/java/com/ruoyi/system/service/TTenantService.java @@ -2,11 +2,20 @@ import com.baomidou.mybatisplus.extension.service.IService; import com.ruoyi.common.basic.PageInfo; +import com.ruoyi.system.dto.TBillDto; +import com.ruoyi.system.model.TContract; +import com.ruoyi.system.model.THouse; +import com.ruoyi.system.query.TBillAppletQuery; +import com.ruoyi.system.query.TExamineAppletQuery; +import com.ruoyi.system.query.TTenantAppletQuery; import com.ruoyi.system.utils.wx.pojo.AppletUserDecodeData; import com.ruoyi.system.model.TTenant; import com.ruoyi.system.query.TTenantQuery; +import com.ruoyi.system.vo.ExamineVO; +import com.ruoyi.system.vo.TBillVO; import com.ruoyi.system.vo.TenantVO; +import java.util.List; import java.util.Map; /** @@ -25,6 +34,15 @@ * @return */ PageInfo<TenantVO> pageList(TTenantQuery query); + PageInfo<TenantVO> pageListApplet(TTenantAppletQuery query); + List<THouse> listHouse(String id); + + List<TContract> listContract(String id); + + PageInfo<TBillVO> listBill(TBillAppletQuery query); + + PageInfo<ExamineVO> examineList(TExamineAppletQuery dto); + } diff --git a/ruoyi-system/src/main/java/com/ruoyi/system/service/impl/FlowListenerService.java b/ruoyi-system/src/main/java/com/ruoyi/system/service/impl/FlowListenerService.java new file mode 100644 index 0000000..d8efb13 --- /dev/null +++ b/ruoyi-system/src/main/java/com/ruoyi/system/service/impl/FlowListenerService.java @@ -0,0 +1,246 @@ +package com.ruoyi.system.service.impl; + + +import cn.hutool.core.util.ObjectUtil; +import com.aizuda.bpm.engine.FlowLongEngine; +import com.aizuda.bpm.engine.assist.ObjectUtils; +import com.aizuda.bpm.engine.core.FlowCreator; +import com.aizuda.bpm.engine.core.FlowLongContext; +import com.aizuda.bpm.engine.core.enums.EventType; +import com.aizuda.bpm.engine.core.enums.NodeApproveSelf; +import com.aizuda.bpm.engine.core.enums.NodeSetType; +import com.aizuda.bpm.engine.core.enums.TaskType; +import com.aizuda.bpm.engine.entity.FlwExtInstance; +import com.aizuda.bpm.engine.entity.FlwHisTask; +import com.aizuda.bpm.engine.entity.FlwTask; +import com.aizuda.bpm.engine.entity.FlwTaskActor; +import com.aizuda.bpm.engine.listener.TaskListener; +import com.aizuda.bpm.engine.model.NodeAssignee; +import com.aizuda.bpm.engine.model.NodeModel; +import com.aizuda.bpm.engine.model.ProcessModel; +import com.aizuda.bpm.mybatisplus.mapper.FlwExtInstanceMapper; +import com.aizuda.bpm.mybatisplus.mapper.FlwHisTaskMapper; +import com.aizuda.bpm.mybatisplus.mapper.FlwTaskActorMapper; +import com.aizuda.bpm.mybatisplus.mapper.FlwTaskMapper; +import com.alibaba.fastjson2.JSON; +import com.alibaba.fastjson2.JSONObject; +import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; +import com.ruoyi.common.core.domain.entity.SysRole; +import com.ruoyi.common.enums.ProcessCategoryEnum; +import com.ruoyi.common.enums.SubmitStatusEnum; +import com.ruoyi.common.exception.ServiceException; +import com.ruoyi.system.service.ISysRoleService; +import com.ruoyi.system.service.TContractService; +import lombok.RequiredArgsConstructor; +import lombok.extern.slf4j.Slf4j; +import org.springframework.stereotype.Component; + +import java.util.ArrayList; +import java.util.List; +import java.util.Objects; +import java.util.function.Supplier; +import java.util.stream.Collectors; + + +/** + * 工作流程全局任务监听 同步方式 只监听流程完成、流程中断类型,修改拒绝状态 + * <p> + * 1. 入户调查 + * 2. 价格评估 + * 3. 协议签订 + * 4. 资金管理-预算资金 + * 5. 住宅临时安置补助费 + * 6. 停产停业经济损失补助费 + * 7. 安置情况(流程图中叫做录入货币补偿金额信息) + * 固定对应表 state_process_module + */ +@Slf4j +@Component +@RequiredArgsConstructor +public class FlowListenerService implements TaskListener { + + private final FlwExtInstanceMapper flwExtInstanceMapper; + private final FlowLongEngine flowLongEngine; + private final FlwTaskActorMapper flwTaskActorMapper; + private final FlwHisTaskMapper flwHisTaskMapper; + private final ISysRoleService sysRoleService; + private final FlwTaskMapper flwTaskMapper; + private final TContractService contractService; + + + @Override + public boolean notify(EventType eventType, Supplier<FlwTask> supplier, NodeModel nodeModel, FlowCreator flowCreator) { + FlwTask flwTask = supplier.get(); + if (ObjectUtil.isNull(flwTask)) { + return true; + } + // 创建任务时候,判断是否自动审批通过 + if (EventType.create.eq(eventType)) { + Integer approveSelf = nodeModel.getApproveSelf(); + if (NodeApproveSelf.AutoSkip.eq(approveSelf)) { + // 普通成员情况 + List<NodeAssignee> nodeAssigneeList = null; + if (NodeSetType.specifyMembers.eq(nodeModel.getSetType())) { + nodeAssigneeList = nodeModel.getNodeAssigneeList(); + if (ObjectUtil.isEmpty(nodeAssigneeList)) { + return true; + } + //查询发起人 + LambdaQueryWrapper<FlwHisTask> flwHisTaskLambdaQueryWrapper = new LambdaQueryWrapper<>(); + flwHisTaskLambdaQueryWrapper.eq(FlwTask::getTaskType, TaskType.major.getValue()); + flwHisTaskLambdaQueryWrapper.eq(FlwTask::getInstanceId, flwTask.getInstanceId()); + FlwHisTask flwHisTask = flwHisTaskMapper.selectOne(flwHisTaskLambdaQueryWrapper); + if (ObjectUtil.isEmpty(flwHisTask)) { + return true; + } + //对比发起人和节点审批人 + if (nodeAssigneeList.stream().noneMatch(t -> Objects.equals(t.getId(), flwHisTask.getCreateId()))) { + return true; + } + //查询当前节点审核人是否与创建人一致 + List<FlwTaskActor> flwTaskActor = flwTaskActorMapper.selectListByTaskId(flwTask.getId()); + if (ObjectUtil.isNotEmpty(flwTaskActor)) { + for (FlwTaskActor flwTaskActor1 : flwTaskActor) { + if (flwTaskActor1.getActorId().equals(flwHisTask.getCreateId())) { + return flowLongEngine.autoJumpTask(flwTask.getId(), flowCreator); + } + } + } + } else if (NodeSetType.role.eq(nodeModel.getSetType())) { + //角色任务跳过 + nodeAssigneeList = nodeModel.getNodeAssigneeList(); + //获取角色下的用户 + List<String> roleIds = nodeAssigneeList.stream().map(NodeAssignee::getId).collect(Collectors.toList()); + List<SysRole> actorList = sysRoleService.selectRoleByUserIds(roleIds); + List<FlwTaskActor> flwTaskActors = new ArrayList<>(); + if(ObjectUtils.isNotEmpty(actorList)) { + for (SysRole sysRole : actorList) { + if(ObjectUtil.isEmpty(sysRole.getRoleName())) { + continue; + } + NodeAssignee nodeAssignee = new NodeAssignee(); + nodeAssignee.setId(String.valueOf(sysRole.getRoleId())); + nodeAssignee.setName(sysRole.getRoleName()); + flwTaskActors.add(FlwTaskActor.of(nodeAssignee, 0)); + } + } + if (ObjectUtil.isEmpty(flwTaskActors)) { + return true; + } + //查询发起人 + LambdaQueryWrapper<FlwHisTask> flwHisTaskLambdaQueryWrapper = new LambdaQueryWrapper<>(); + flwHisTaskLambdaQueryWrapper.eq(FlwTask::getTaskType, TaskType.major.getValue()); + flwHisTaskLambdaQueryWrapper.eq(FlwTask::getInstanceId, flwTask.getInstanceId()); + FlwHisTask flwHisTask = flwHisTaskMapper.selectOne(flwHisTaskLambdaQueryWrapper); + if (ObjectUtil.isEmpty(flwHisTask)) { + return true; + } + //对比发起人和节点审批人 + if (flwTaskActors.stream().noneMatch(t -> Objects.equals(t.getActorId(), flwHisTask.getCreateId()))) { + return true; + } + //查询当前节点审核人是否与创建人一致 + List<FlwTaskActor> flwTaskActor = flwTaskActorMapper.selectListByTaskId(flwTask.getId()); + if (ObjectUtil.isNotEmpty(flwTaskActor)) { + for (FlwTaskActor flwTaskActor1 : flwTaskActor) { + if (flwTaskActor1.getActorId().equals(flwHisTask.getCreateId())) { + return flowLongEngine.autoJumpTask(flwTask.getId(), flowCreator); + } + } + } + } + } + } + + if (eventType.equals(EventType.reject) || eventType.equals(EventType.autoReject)) { + System.out.println("流程失败:" + flwTask.getVariable()); + handlerBusiness(flwTask.getVariable(), 2); + } else if (eventType.equals(EventType.complete)) { + // 查询流程模型 + FlwExtInstance flwExtInstance = flwExtInstanceMapper.selectById(flwTask.getInstanceId()); + String modelContent = flwExtInstance.getModelContent(); + ProcessModel processModel = FlowLongContext.parseProcessModel(modelContent, null, false); + NodeModel node = processModel.getNode(flwTask.getTaskKey()); + if (ObjectUtil.isEmpty(node)) { + log.error("节点不存在 TaskName:{} InstanceId:{}", flwTask.getTaskName(), flwTask.getInstanceId()); + return true; + } + long count = flwTaskMapper.selectCount(new LambdaQueryWrapper<FlwTask>().eq(FlwTask::getInstanceId,flwTask.getInstanceId())); + if(count > 0){ + return true; + } + //最后一个节点 + if (ObjectUtil.isEmpty(node.getChildNode()) || ObjectUtil.isEmpty(node.getChildNode().getNodeName())) { + System.out.println("流程完成:" + flwTask.getVariable()); + handlerBusiness(flwTask.getVariable(), 1); + } + } else if (eventType.eq(EventType.cc)) { + // 查询流程模型//抄送 + FlwExtInstance flwExtInstance = flwExtInstanceMapper.selectById(flwTask.getInstanceId()); + String modelContent = flwExtInstance.getModelContent(); + ProcessModel processModel = FlowLongContext.parseProcessModel(modelContent, null, false); + NodeModel node = processModel.getNode(flwTask.getTaskKey()); + if (ObjectUtil.isEmpty(node)) { + log.error("节点不存在 TaskName:{} InstanceId:{}", flwTask.getTaskName(), flwTask.getInstanceId()); + return true; + } + //抄送是最后一个节点 + if (ObjectUtil.isEmpty(node.getChildNode()) || ObjectUtil.isEmpty(node.getChildNode().getNodeName())) { + System.out.println("流程完成:" + flwTask.getVariable()); + handlerBusiness(flwTask.getVariable(), 1); + } + } else if(eventType.eq(EventType.autoJump)){ + // 查询流程模型 自动跳转 + FlwExtInstance flwExtInstance = flwExtInstanceMapper.selectById(flwTask.getInstanceId()); + String modelContent = flwExtInstance.getModelContent(); + ProcessModel processModel = FlowLongContext.parseProcessModel(modelContent, null, false); + NodeModel node = processModel.getNode(flwTask.getTaskKey()); + if (ObjectUtil.isEmpty(node)) { + log.error("节点不存在 TaskName:{} InstanceId:{}", flwTask.getTaskName(), flwTask.getInstanceId()); + return true; + } + long count = flwTaskMapper.selectCount(new LambdaQueryWrapper<FlwTask>().eq(FlwTask::getInstanceId,flwTask.getInstanceId())); + if(count > 0){ + return true; + } + //最后一个节点 + if (ObjectUtil.isEmpty(node.getChildNode()) || ObjectUtil.isEmpty(node.getChildNode().getNodeName())) { + System.out.println("流程完成:" + flwTask.getVariable()); + handlerBusiness(flwTask.getVariable(), 1); + } + } + return true; + } + + /** + * 业务状态变更 + */ + private void handlerBusiness(String variable, Integer status) { + JSONObject processParameter = JSON.parseObject(variable); + //必须参数,肯定有不判断null + Integer category = processParameter.getInteger("category"); + //状态 暂定:0待审核 1审核通过 2审核拒绝 + ProcessCategoryEnum categoryEnum = ProcessCategoryEnum.getEnumByKey(category); + switch (categoryEnum) { + case CATEGORY1: { + // 合同新增审批 + int submitStatus = status==0?2:(status==1?3:5); + contractService.updateContractAuditStatus(processParameter.getString("projectId"), submitStatus); + // TODO 发短信 + break; + } + case CATEGORY2: { + // 合同签订审批 + break; + } + case CATEGORY3: { + // 合同提前终止审批 + break; + } + default: + throw new ServiceException("错误类型"); + } + + } + +} \ No newline at end of file diff --git a/ruoyi-system/src/main/java/com/ruoyi/system/service/impl/StateProcessExtInstanceServiceImpl.java b/ruoyi-system/src/main/java/com/ruoyi/system/service/impl/StateProcessExtInstanceServiceImpl.java new file mode 100644 index 0000000..f79908a --- /dev/null +++ b/ruoyi-system/src/main/java/com/ruoyi/system/service/impl/StateProcessExtInstanceServiceImpl.java @@ -0,0 +1,11 @@ +package com.ruoyi.system.service.impl; + +import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; +import com.ruoyi.system.mapper.StateProcessExtInstanceMapper; +import com.ruoyi.system.model.StateProcessExtInstance; +import com.ruoyi.system.service.StateProcessExtInstanceService; +import org.springframework.stereotype.Service; + +@Service +public class StateProcessExtInstanceServiceImpl extends ServiceImpl<StateProcessExtInstanceMapper, StateProcessExtInstance> implements StateProcessExtInstanceService { +} diff --git a/ruoyi-system/src/main/java/com/ruoyi/system/service/impl/StateProcessInstanceActionServiceImpl.java b/ruoyi-system/src/main/java/com/ruoyi/system/service/impl/StateProcessInstanceActionServiceImpl.java new file mode 100644 index 0000000..45a3d5a --- /dev/null +++ b/ruoyi-system/src/main/java/com/ruoyi/system/service/impl/StateProcessInstanceActionServiceImpl.java @@ -0,0 +1,11 @@ +package com.ruoyi.system.service.impl; + +import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; +import com.ruoyi.system.mapper.StateProcessInstanceActionMapper; +import com.ruoyi.system.model.StateProcessInstanceAction; +import com.ruoyi.system.service.StateProcessInstanceActionService; +import org.springframework.stereotype.Service; + +@Service +public class StateProcessInstanceActionServiceImpl extends ServiceImpl<StateProcessInstanceActionMapper, StateProcessInstanceAction> implements StateProcessInstanceActionService { +} diff --git a/ruoyi-system/src/main/java/com/ruoyi/system/service/impl/StateProcessModuleServiceImpl.java b/ruoyi-system/src/main/java/com/ruoyi/system/service/impl/StateProcessModuleServiceImpl.java new file mode 100644 index 0000000..709e99f --- /dev/null +++ b/ruoyi-system/src/main/java/com/ruoyi/system/service/impl/StateProcessModuleServiceImpl.java @@ -0,0 +1,11 @@ +package com.ruoyi.system.service.impl; + +import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; +import com.ruoyi.system.mapper.StateProcessModuleMapper; +import com.ruoyi.system.model.StateProcessModule; +import com.ruoyi.system.service.StateProcessModuleService; +import org.springframework.stereotype.Service; + +@Service +public class StateProcessModuleServiceImpl extends ServiceImpl<StateProcessModuleMapper, StateProcessModule> implements StateProcessModuleService { +} diff --git a/ruoyi-system/src/main/java/com/ruoyi/system/service/impl/StateProcessTemplateServiceImpl.java b/ruoyi-system/src/main/java/com/ruoyi/system/service/impl/StateProcessTemplateServiceImpl.java new file mode 100644 index 0000000..3597645 --- /dev/null +++ b/ruoyi-system/src/main/java/com/ruoyi/system/service/impl/StateProcessTemplateServiceImpl.java @@ -0,0 +1,785 @@ +package com.ruoyi.system.service.impl; + +import cn.hutool.core.bean.BeanUtil; +import cn.hutool.core.util.IdUtil; +import cn.hutool.core.util.NumberUtil; +import cn.hutool.core.util.ObjectUtil; +import cn.hutool.json.JSONUtil; +import com.aizuda.bpm.engine.FlowLongEngine; +import com.aizuda.bpm.engine.core.FlowCreator; +import com.aizuda.bpm.engine.core.enums.TaskType; +import com.aizuda.bpm.engine.entity.*; +import com.aizuda.bpm.engine.model.NodeModel; +import com.aizuda.bpm.mybatisplus.mapper.*; +import com.alibaba.fastjson2.JSONObject; +import com.alibaba.fastjson2.JSONWriter; +import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; +import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; +import com.baomidou.mybatisplus.core.toolkit.Wrappers; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; +import com.ruoyi.common.basic.PageInfo; +import com.ruoyi.common.core.domain.BaseModel; +import com.ruoyi.common.core.domain.entity.SysUser; +import com.ruoyi.common.core.domain.model.LoginUser; +import com.ruoyi.common.enums.StateProcessActionEnum; +import com.ruoyi.common.exception.GlobalException; +import com.ruoyi.common.exception.state.StateErrorCode; +import com.ruoyi.common.utils.SecurityUtils; +import com.ruoyi.common.utils.uuid.IdUtils; +import com.ruoyi.system.bo.*; +import com.ruoyi.system.mapper.StateProcessTemplateMapper; +import com.ruoyi.system.model.*; +import com.ruoyi.system.service.*; +import com.ruoyi.system.vo.ProcessDetailVO; +import com.ruoyi.system.vo.ProcessTaskListVO; +import lombok.AllArgsConstructor; +import org.apache.commons.io.IOUtils; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Service; +import org.springframework.transaction.annotation.Transactional; +import org.springframework.util.CollectionUtils; + +import java.io.InputStream; +import java.nio.charset.StandardCharsets; +import java.time.LocalDateTime; +import java.util.*; +import java.util.function.Function; +import java.util.stream.Collectors; + +@Service +public class StateProcessTemplateServiceImpl extends ServiceImpl<StateProcessTemplateMapper, StateProcessTemplate> implements StateProcessTemplateService { + + @Autowired + private FlowLongEngine flowLongEngine; + @Autowired + private StateProcessInstanceActionService stateProcessInstanceActionService; + @Autowired + private StateProcessExtInstanceService stateProcessExtInstanceService; + @Autowired + private FlwHisInstanceMapper flwHisInstanceMapper; + @Autowired + private FlwTaskActorMapper flwTaskActorMapper; + @Autowired + private FlwTaskMapper flwTaskMapper; + @Autowired + private StateTaskCenterService stateTaskCenterService; + @Autowired + private StateProcessModuleService stateProcessModuleService; + @Autowired + private FlwHisTaskMapper flwHisTaskMapper; + @Autowired + private FlwHisTaskActorMapper flwHisTaskActorMapper; + @Autowired + private ISysUserService sysUserService; + @Autowired + private TContractService contractService; + + /** + * 流程模版分页 + * @param request + * @return + */ + @Override + public Page<StateProcessTemplate> page(ProcessTemplatePageBO request) { + //查询流程模板列表 + Page<StateProcessTemplate> templatePage = this.baseMapper.page(new Page<>(request.getCurrentPage(), request.getPageSize()), request); + + //更新人id列表 + List<String> updateUserNameList = templatePage.getRecords().stream().map(BaseModel::getUpdateBy).collect(Collectors.toList()); + if (!CollectionUtils.isEmpty(updateUserNameList)) { + //根据用户id列表查询用户信息 + List<SysUser> sysUsers = sysUserService.selectUserByUserNameList(updateUserNameList); + Map<String, SysUser> sysUserMap; + if (!CollectionUtils.isEmpty(sysUsers)) { + sysUserMap = sysUsers.stream().collect(Collectors.toMap(SysUser::getUserName, Function.identity())); + } else { + sysUserMap = new HashMap<>(); + } + //遍历列表,设置更新人名称 + templatePage.getRecords().forEach(e -> { + SysUser sysUser = sysUserMap.get(e.getUpdateBy()); + if (Objects.nonNull(sysUser)) { + e.setUpdateBy(sysUser.getNickName()); + } + }); + } + return templatePage; + } + + /** + * 修改并部署模版 + * @param processUpdateBO + * @return + */ + @Transactional(rollbackFor = Exception.class) + @Override + public Boolean update(ProcessUpdateBO processUpdateBO) { + //查询流程模板 + StateProcessTemplate temp = this.getById(processUpdateBO.getId()); + //根据template_key查询最新版本的模板 + StateProcessTemplate template = this.getOne(Wrappers.<StateProcessTemplate>lambdaQuery() + .eq(StateProcessTemplate::getTemplateKey, temp.getTemplateKey()) + .apply("(template_key, template_version) in(" + + "SELECT template_key, MAX(template_version) " + + "FROM state_process_template " + "GROUP BY template_key)")); + + if (Objects.isNull(template)) { + throw new GlobalException(StateErrorCode.PROCESS_TEMPLATE_NOT_EXISTS.getValue()); + } + + // 部署流程 + LoginUser loginUser = SecurityUtils.getLoginUser(); + + FlowCreator creator = FlowCreator.of(String.valueOf(loginUser.getUserId()), loginUser.getUser().getNickName()); + DeployBO deployBO = new DeployBO(); + deployBO.setKey(template.getTemplateKey()); + deployBO.setName(processUpdateBO.getTemplateName()); + deployBO.setNodeConfig(JSONObject.parseObject(processUpdateBO.getProcess(), NodeModel.class)); + + String deployResult = JSONObject.toJSONString(deployBO, JSONWriter.Feature.WriteMapNullValue); + InputStream inputStream = IOUtils.toInputStream(deployResult, StandardCharsets.UTF_8.name()); + Long deployId = flowLongEngine.processService().deploy(inputStream, creator, true, null); + FlwProcess flwProcess = flowLongEngine.processService().getProcessById(deployId); + + // 更新模板, version+1 + StateProcessTemplate processTemplate = new StateProcessTemplate(); + processTemplate.setId(processUpdateBO.getId()); + processTemplate.setWorkFlowId(deployId); + processTemplate.setWorkflowVersion(flwProcess.getProcessVersion()); + processTemplate.setTemplateName(processUpdateBO.getTemplateName()); + + processTemplate.setTemplateKey(template.getTemplateKey()); + processTemplate.setProcess(processUpdateBO.getProcess()); + processTemplate.setRemark(processUpdateBO.getRemark()); + processTemplate.setUpdateBy(SecurityUtils.getLoginUser().getUsername()); + processTemplate.setUpdateTime(LocalDateTime.now()); + processTemplate.setTemplateVersion(temp.getTemplateVersion() + 1); + return this.updateById(processTemplate); + + //查询版本是否绑定流程,更新 +// LambdaQueryWrapper<StateProcessModule> queryWrapper = new LambdaQueryWrapper<>(); +// queryWrapper.eq(StateProcessModule::getTemplateId, processUpdateBO.getId()); +// List<StateProcessModule> stateProcessModules = stateProcessModuleService.list(queryWrapper); +// if (Objects.isNull(stateProcessModules) || stateProcessModules.isEmpty()) { +// return true; +// } +// for (StateProcessModule stateProcessModule : stateProcessModules) { +// stateProcessModule.setTemplateId(processTemplate.getId()); +// stateProcessModule.setTemplateName(processTemplate.getTemplateName()); +// } +// return stateProcessModuleService.updateBatchById(stateProcessModules); + } + + /** + * 创建并部署模版 + * @param processCreateBO + * @return + */ + @Transactional(rollbackFor = Exception.class) + @Override + public Boolean create(ProcessCreateBO processCreateBO) { + //查询模版是否存在 + List<StateProcessTemplate> keys = this.list(Wrappers.<StateProcessTemplate>lambdaQuery(). + eq(StateProcessTemplate::getTemplateName, processCreateBO.getTemplateName())); + if (!CollectionUtils.isEmpty(keys)) { + throw new GlobalException(StateErrorCode.PROCESS_TEMPLATE_KEY_EXISTS.getValue()); + } + + LoginUser loginUser = SecurityUtils.getLoginUser(); + FlowCreator creator = FlowCreator.of(String.valueOf(loginUser.getUserId()), loginUser.getUser().getNickName()); + + DeployBO deployBO = new DeployBO(); + deployBO.setKey(IdUtil.simpleUUID()); + deployBO.setName(processCreateBO.getTemplateName()); + deployBO.setNodeConfig(JSONObject.parseObject(processCreateBO.getProcess(), NodeModel.class)); + + String deployResult = JSONObject.toJSONString(deployBO, JSONWriter.Feature.WriteMapNullValue); + + InputStream inputStream = IOUtils.toInputStream(deployResult, StandardCharsets.UTF_8.name()); + Long deployId = flowLongEngine.processService().deploy(inputStream, creator, false); + FlwProcess flwProcess = flowLongEngine.processService().getProcessById(deployId); + + StateProcessTemplate processTemplate = new StateProcessTemplate(); + processTemplate.setId(IdUtils.simpleUUID()); + processTemplate.setWorkFlowId(deployId); + processTemplate.setWorkflowVersion(flwProcess.getProcessVersion()); + processTemplate.setTemplateName(deployBO.getName()); + processTemplate.setTemplateKey(deployBO.getKey()); + processTemplate.setProcess(processCreateBO.getProcess()); + processTemplate.setRemark(processCreateBO.getRemark()); + processTemplate.setUpdateBy(loginUser.getUser().getUserName()); + processTemplate.setUpdateTime(LocalDateTime.now()); + return this.save(processTemplate); + } + + /** + * 启动流程 + * @param processStartBO + * @return + */ + @Transactional(rollbackFor = Exception.class) + @Override + public Boolean start(ProcessStartBO processStartBO) { + LoginUser loginUser = SecurityUtils.getLoginUser(); + FlowCreator creator = FlowCreator.of(String.valueOf(loginUser.getUserId()), loginUser.getUser().getNickName()); + //查询流程绑定 + StateProcessModule stateProcessModule = stateProcessModuleService.getOne(Wrappers.<StateProcessModule>lambdaQuery() + .eq(StateProcessModule::getCategory, processStartBO.getCategory())); + if (ObjectUtil.isNull(stateProcessModule) || ObjectUtil.isEmpty(stateProcessModule.getTemplateId())) { + throw new GlobalException("请先配置流程引擎模版!"); + } + //查询模版,准备启动 + StateProcessTemplate template = this.getById(stateProcessModule.getTemplateId()); + StateProcessTemplate lastTemplate = this.getOne(Wrappers.<StateProcessTemplate>lambdaQuery() + .eq(StateProcessTemplate::getTemplateKey, template.getTemplateKey()) + .apply("(template_key, template_version) in(" + + "SELECT template_key, MAX(template_version) " + + "FROM state_process_template " + + "GROUP BY template_key)") + ); + + if (ObjectUtil.isNull(lastTemplate)) { + throw new GlobalException(StateErrorCode.PROCESS_TEMPLATE_NOT_EXISTS.getValue()); + } + FlwProcess flwProcess = flowLongEngine.processService().getProcessById(lastTemplate.getWorkFlowId()); + if (ObjectUtil.isNull(flwProcess)) { + throw new GlobalException(StateErrorCode.PROCESS_NOT_DEPLOY.getValue()); + } + if (!Objects.equals(lastTemplate.getWorkflowVersion(), flwProcess.getProcessVersion())) { + throw new GlobalException(StateErrorCode.PROCESS_VERSION_ERROR.getValue()); + } + //监听器参数补全 + processStartBO.getVariable().put("category", processStartBO.getCategory()); + // 开启流程 + Optional<FlwInstance> flwInstanceOptional = flowLongEngine.startInstanceById(flwProcess.getId(), creator, processStartBO.getVariable()); + if(flwInstanceOptional.isPresent()){ + FlwInstance instance = flwInstanceOptional.get(); + //存储任务中心信息 + StateTaskCenter stateTaskCenter = new StateTaskCenter(); + stateTaskCenter.setId(IdUtils.simpleUUID()); + stateTaskCenter.setName(processStartBO.getName()); + stateTaskCenter.setModuleName(processStartBO.getModuleName()); + stateTaskCenter.setCategory(processStartBO.getCategory()); + stateTaskCenter.setFlowId(instance.getId().toString()); + stateTaskCenter.setRemark(processStartBO.getRemark()); + stateTaskCenter.setCreateBy(loginUser.getUser().getNickName()); + stateTaskCenter.setVariable(JSONUtil.toJsonStr(processStartBO.getVariable())); + stateTaskCenter.setProjectId(JSONObject.parseObject(JSONUtil.toJsonStr(processStartBO.getVariable())).getString("projectId")); + stateTaskCenterService.save(stateTaskCenter); + + // action记录 + StateProcessInstanceAction stateProcessInstanceAction = new StateProcessInstanceAction(); + stateProcessInstanceAction.setId(IdUtils.simpleUUID()); + stateProcessInstanceAction.setInstanceId(instance.getId().toString()); + stateProcessInstanceAction.setActionType(StateProcessActionEnum.START.getValue()); + stateProcessInstanceAction.setAuditorId(creator.getCreateId()); + stateProcessInstanceActionService.save(stateProcessInstanceAction); + + // 添加拓展信息 + StateProcessExtInstance stateProcessExtInstance = new StateProcessExtInstance(); + stateProcessExtInstance.setId(instance.getId().toString()); + stateProcessExtInstance.setTemplateId(lastTemplate.getId()); + stateProcessExtInstance.setProcessId(flwProcess.getId().toString()); + + //保存version + stateProcessExtInstance.setProcessVersion(flwProcess.getProcessVersion()); + stateProcessExtInstanceService.save(stateProcessExtInstance); + } + return true; + } + + /** + * 待办 + * @param processTaskListBO + * @return + */ + @Override + public PageInfo<ProcessTaskListVO> waitTaskPage(ProcessTaskListBO processTaskListBO) { + //获取当前登录用户信息 + Long userId = SecurityUtils.getLoginUser().getUserId(); + + //或签时查询其他审批人是否通过(不能省略),比如 同一任务需要A,B审核,A通过了,B不用在审核了,在历史表查询A的审核记录 + LambdaQueryWrapper<FlwHisInstance> lambdaQueryWrapper = new LambdaQueryWrapper<>(); + lambdaQueryWrapper.orderByDesc(FlowEntity::getCreateTime); + //待审核 + lambdaQueryWrapper.eq(FlwHisInstance::getInstanceState, 0); + + List<Long> flwHisInstances = flwHisInstanceMapper.selectList(lambdaQueryWrapper).stream() + .map(FlwHisInstance::getId).collect(Collectors.toList()); + if (ObjectUtil.isEmpty(flwHisInstances)) { + return new PageInfo<>(); + } + + //查询任务参与者 + LambdaQueryWrapper<FlwTaskActor> query = new LambdaQueryWrapper<>(); + query.and(qy -> qy.eq(FlwTaskActor::getActorId, userId) + //0指定用户 + .eq(FlwTaskActor::getActorType, 0) + .or().in(FlwTaskActor::getActorId, userId) + //1指定角色 + .eq(FlwTaskActor::getActorType, 1)); + if (ObjectUtil.isNotNull(processTaskListBO) && ObjectUtil.isNotNull(flwHisInstances)) { + // 添加条件 + query = query.in(FlwTaskActor::getInstanceId, flwHisInstances); + } + List<FlwTaskActor> flwTaskActorPage = flwTaskActorMapper.selectList(query); + if (ObjectUtil.isEmpty(flwTaskActorPage)) { + return new PageInfo<>(); + } + //查询任务信息 + List<FlwTask> flwTasks = flwTaskMapper.selectList(Wrappers.<FlwTask>lambdaQuery() + .orderByDesc(FlwTask::getCreateTime) + .in(FlwTask::getId, flwTaskActorPage.stream() + .map(FlwTaskActor::getTaskId).collect(Collectors.toList()))); + + if (ObjectUtil.isNull(flwTasks)) { + return new PageInfo<>(); + } + List<String> instanceIds = flwTasks.stream().map(FlwTask::getInstanceId) + .map(String::valueOf).collect(Collectors.toList()); + //分页查询任务中心任务 + LambdaQueryWrapper<StateTaskCenter> stateTaskQuery = new LambdaQueryWrapper<>(); + if (ObjectUtil.isNotEmpty(processTaskListBO.getName())) { + stateTaskQuery.like(StateTaskCenter::getName, processTaskListBO.getName()); + } + if (ObjectUtil.isNotEmpty(processTaskListBO.getModuleName())) { + stateTaskQuery.like(StateTaskCenter::getModuleName, processTaskListBO.getModuleName()); + } + if (ObjectUtil.isNotEmpty(processTaskListBO.getCreateBy())) { + stateTaskQuery.like(StateTaskCenter::getCreateBy, processTaskListBO.getCreateBy()); + } + stateTaskQuery.in(StateTaskCenter::getFlowId, instanceIds); + stateTaskQuery.orderByDesc(BaseModel::getCreateTime); + PageInfo pageInfo = new PageInfo(processTaskListBO.getPageNum(), processTaskListBO.getPageSize()); + PageInfo<StateTaskCenter> taskCenters = stateTaskCenterService.page(pageInfo,stateTaskQuery); + + //转换类 + List<ProcessTaskListVO> processTaskListVOS = BeanUtil.copyToList(taskCenters.getRecords(), ProcessTaskListVO.class); + + // 查询合同信息 + for (ProcessTaskListVO processTaskListVO : processTaskListVOS) { + // 查询合同信息 + TContract contract = contractService.getById(JSONObject.parseObject(processTaskListVO.getVariable()).getString("projectId")); + processTaskListVO.setContract(contract); + } + + pageInfo.setRecords(processTaskListVOS); + + List<String> updateUserId = processTaskListVOS.stream().map(ProcessTaskListVO::getCreateBy).collect(Collectors.toList()); + Map<Long, SysUser> sysUserMap; + if (!CollectionUtils.isEmpty(updateUserId)) { + //根据用户id查询更新人信息 + List<SysUser> sysUsers = sysUserService.selectUserByUserNameList(updateUserId); + + if (!CollectionUtils.isEmpty(sysUsers)) { + sysUserMap = sysUsers.stream().collect(Collectors.toMap(SysUser::getUserId, Function.identity())); + } else { + sysUserMap = new HashMap<>(); + } + } else { + sysUserMap = new HashMap<>(); + } + + + Map<Long, List<FlwTask>> flwHisTaskMap = flwTasks.stream().collect(Collectors.groupingBy(FlwTask::getInstanceId)); + + for (ProcessTaskListVO processTaskListVO : processTaskListVOS) { + List<FlwTask> flwTask = flwHisTaskMap.get(NumberUtil.parseLong(processTaskListVO.getFlowId())); + if (!CollectionUtils.isEmpty(flwTask) && ObjectUtil.isNotEmpty(flwTask.get(0))) { + //待审核 + processTaskListVO.setStatus("0"); + processTaskListVO.setNodeName(flwTask.get(0).getTaskName()); + processTaskListVO.setTaskId(flwTask.get(0).getId().toString()); + processTaskListVO.setVariable(flwTask.get(0).getVariable()); + } + SysUser sysUser = sysUserMap.get(processTaskListVO.getCreateBy()); + if (Objects.nonNull(sysUser)) { + processTaskListVO.setCreateBy(sysUser.getNickName()); + } + } + return pageInfo; + } + + @Override + public PageInfo<ProcessTaskListVO> dealTaskPage(ProcessTaskListBO processTaskListBO) { + //获取当前登录用户信息 + Long userId = SecurityUtils.getLoginUser().getUserId(); + LambdaQueryWrapper<FlwHisTaskActor> query = Wrappers.<FlwHisTaskActor>lambdaQuery() + .and(qy -> qy.eq(FlwTaskActor::getActorId, userId) + //0指定用户 + .eq(FlwTaskActor::getActorType, 0) + //指定角色 + .or().in(FlwTaskActor::getActorId, userId) + .eq(FlwTaskActor::getActorType, 1)); + List<FlwHisTaskActor> flwHisTaskActors = flwHisTaskActorMapper.selectList(query); + + List<Long> hisTaskIds = flwHisTaskActors.stream().map(FlwTaskActor::getTaskId).collect(Collectors.toList()); + + if (hisTaskIds.isEmpty()) { + return new PageInfo<>(); + } + + List<FlwHisTask> flwHisTaskList = flwHisTaskMapper.selectList( + Wrappers.<FlwHisTask>lambdaQuery() + .notIn(FlwHisTask::getTaskType, TaskType.cc.getValue(), TaskType.major.getValue()) + .orderByDesc(FlwHisTask::getCreateTime) + .in(FlwHisTask::getId, hisTaskIds)); + if (ObjectUtil.isEmpty(flwHisTaskList)) { + new PageInfo<>(); + } + + List<String> instanceId = flwHisTaskList.stream().map(FlwTask::getInstanceId) + .map(String::valueOf).collect(Collectors.toList()); + //分页查询任务中心任务 + LambdaQueryWrapper<StateTaskCenter> stateTaskQuery = new LambdaQueryWrapper<>(); + if (ObjectUtil.isNotEmpty(processTaskListBO.getName())) { + stateTaskQuery.like(StateTaskCenter::getName, processTaskListBO.getName()); + } + if (ObjectUtil.isNotEmpty(processTaskListBO.getModuleName())) { + stateTaskQuery.like(StateTaskCenter::getModuleName, processTaskListBO.getModuleName()); + } + if (ObjectUtil.isNotEmpty(processTaskListBO.getCreateBy())) { + stateTaskQuery.like(StateTaskCenter::getCreateBy, processTaskListBO.getCreateBy()); + } + if (ObjectUtil.isEmpty(instanceId)) { + return new PageInfo<>(); + } + stateTaskQuery.in(StateTaskCenter::getFlowId, instanceId); + stateTaskQuery.orderByDesc(BaseModel::getCreateTime); + PageInfo pageInfo = new PageInfo<>(processTaskListBO.getPageNum(), processTaskListBO.getPageSize()); + PageInfo<StateTaskCenter> taskCenters = stateTaskCenterService.page(pageInfo,stateTaskQuery); + //转换类 + List<ProcessTaskListVO> processTaskListVOS = BeanUtil.copyToList(taskCenters.getRecords(), ProcessTaskListVO.class); + + // 查询合同信息 + for (ProcessTaskListVO processTaskListVO : processTaskListVOS) { + // 查询合同信息 + TContract contract = contractService.getById(JSONObject.parseObject(processTaskListVO.getVariable()).getString("projectId")); + processTaskListVO.setContract(contract); + } + + pageInfo.setRecords(processTaskListVOS); + + if (ObjectUtil.isEmpty(processTaskListVOS)) { + return pageInfo; + } + Map<Long, List<FlwHisTask>> flwHisTaskMap = flwHisTaskList.stream().collect(Collectors.groupingBy(FlwHisTask::getInstanceId)); + //查询原因 + List<String> taskIds = flwHisTaskList.stream().map(FlowEntity::getId).map(String::valueOf).collect(Collectors.toList()); + List<StateProcessInstanceAction> actions = stateProcessInstanceActionService.list( + Wrappers.<StateProcessInstanceAction>lambdaQuery().in(StateProcessInstanceAction::getNodeId, taskIds)); + Map<String, StateProcessInstanceAction> actionMap = actions.stream().collect(Collectors.toMap(StateProcessInstanceAction::getNodeId, Function.identity())); + + List<String> updateUserId = processTaskListVOS.stream().map(ProcessTaskListVO::getCreateBy).collect(Collectors.toList()); + Map<Long, SysUser> sysUserMap; + if (!CollectionUtils.isEmpty(updateUserId)) { + List<SysUser> sysUsers = sysUserService.selectUserByUserNameList(updateUserId); + + if (!CollectionUtils.isEmpty(sysUsers)) { + sysUserMap = sysUsers.stream().collect(Collectors.toMap(SysUser::getUserId, Function.identity())); + } else { + sysUserMap = new HashMap<>(); + } + } else { + sysUserMap = new HashMap<>(); + } + + for (ProcessTaskListVO processTaskListVO : processTaskListVOS) { + List<FlwHisTask> flwHisTasks = flwHisTaskMap.get(NumberUtil.parseLong(processTaskListVO.getFlowId())); + if (ObjectUtil.isNotEmpty(flwHisTaskMap)) { + //当某个用户在同一个模块审批流的多个节点都存在时,多次审核后,已审核列表页报错 + for (FlwHisTask flwHisTask : flwHisTasks) { + if (flwHisTask.getInstanceId().toString().equals(processTaskListVO.getFlowId())) { + //10等于发起人与审批人一致自动审核完成 + processTaskListVO.setStatus(flwHisTask.getTaskState() == 10 ? "2" : flwHisTask.getTaskState().toString()); + processTaskListVO.setNodeName(flwHisTask.getTaskName()); + processTaskListVO.setTaskId(flwHisTask.getId().toString()); + processTaskListVO.setVariable(flwHisTask.getVariable()); + } + } + } + StateProcessInstanceAction action = actionMap.get(processTaskListVO.getTaskId()); + if (ObjectUtil.isNotEmpty(action)) { + processTaskListVO.setReason(action.getRemark()); + } + SysUser sysUser = sysUserMap.get(processTaskListVO.getCreateBy()); + if (Objects.nonNull(sysUser)) { + processTaskListVO.setCreateBy(sysUser.getNickName()); + } + } + return pageInfo; + } + + @Override + public PageInfo<ProcessTaskListVO> copyTaskPage(ProcessTaskListBO processTaskListBO) { + Long userId = SecurityUtils.getUserId(); + QueryWrapper<FlwHisInstance> queryWrapper = new QueryWrapper<>(); + queryWrapper.orderByDesc("create_time"); + List<Long> flwHisInstances = flwHisInstanceMapper.selectList(queryWrapper).stream() + .map(FlwHisInstance::getId).collect(Collectors.toList()); + + LambdaQueryWrapper<FlwHisTaskActor> query = Wrappers.<FlwHisTaskActor>lambdaQuery() + .and(qy -> qy.eq(FlwTaskActor::getActorId, userId) + .eq(FlwTaskActor::getActorType, 0) + .or().in(FlwTaskActor::getActorId, userId) + .eq(FlwTaskActor::getActorType, 1)); + query = query.in(FlwHisTaskActor::getInstanceId, flwHisInstances); + List<FlwHisTaskActor> flwHisTaskActors = flwHisTaskActorMapper.selectList(query); + + List<Long> hisTaskIds = flwHisTaskActors.stream().map(FlwTaskActor::getTaskId).collect(Collectors.toList()); + if (hisTaskIds.isEmpty()) { + return new PageInfo<>(); + } + List<FlwHisTask> flwHisTaskList = flwHisTaskMapper.selectList( + Wrappers.<FlwHisTask>lambdaQuery() + //2=抄送 + .eq(FlwHisTask::getTaskType, 2) + .in(FlwHisTask::getId, hisTaskIds)); + + if(ObjectUtil.isEmpty(flwHisTaskList)){ + return new PageInfo<>(); + } + List<String> instanceId = flwHisTaskList.stream().map(FlwTask::getInstanceId) + .map(String::valueOf).collect(Collectors.toList()); + //分页查询任务中心任务 + LambdaQueryWrapper<StateTaskCenter> stateTaskQuery = new LambdaQueryWrapper<>(); + if (ObjectUtil.isNotEmpty(processTaskListBO.getName())) { + stateTaskQuery.like(StateTaskCenter::getName, processTaskListBO.getName()); + } + if (ObjectUtil.isNotEmpty(processTaskListBO.getModuleName())) { + stateTaskQuery.like(StateTaskCenter::getModuleName, processTaskListBO.getModuleName()); + } + if (ObjectUtil.isNotEmpty(processTaskListBO.getCreateBy())) { + stateTaskQuery.like(StateTaskCenter::getCreateBy, processTaskListBO.getCreateBy()); + } + if (ObjectUtil.isEmpty(instanceId)) { + return new PageInfo<>(); + } + stateTaskQuery.in(StateTaskCenter::getFlowId, instanceId); + stateTaskQuery.orderByDesc(BaseModel::getCreateTime); + PageInfo pageInfo = new PageInfo<>(processTaskListBO.getPageNum(), processTaskListBO.getPageSize()); + PageInfo taskCenters = stateTaskCenterService.page(pageInfo,stateTaskQuery); + //转换类 + List<ProcessTaskListVO> processTaskListVOS = BeanUtil.copyToList(taskCenters.getRecords(), ProcessTaskListVO.class); + pageInfo.setRecords(processTaskListVOS); + + if (ObjectUtil.isEmpty(processTaskListVOS)) { + return pageInfo; + } + Map<Long, List<FlwHisTask>> flwHisTaskMap = flwHisTaskList.stream().collect(Collectors.groupingBy(FlwHisTask::getInstanceId)); + + List<String> updateUserId = processTaskListVOS.stream().map(ProcessTaskListVO::getCreateBy).collect(Collectors.toList()); + Map<Long, SysUser> sysUserMap; + if (!CollectionUtils.isEmpty(updateUserId)) { + List<SysUser> sysUsers = sysUserService.selectUserByUserNameList(updateUserId); + + if (!CollectionUtils.isEmpty(sysUsers)) { + sysUserMap = sysUsers.stream().collect(Collectors.toMap(SysUser::getUserId, Function.identity())); + } else { + sysUserMap = new HashMap<>(); + } + } else { + sysUserMap = new HashMap<>(); + } + + //查询原因 + List<String> taskIds = flwHisTaskList.stream().map(FlwTask::getParentTaskId).filter(ObjectUtil::isNotEmpty).map(String::valueOf).collect(Collectors.toList()); + List<StateProcessInstanceAction> actions = stateProcessInstanceActionService.list( + Wrappers.<StateProcessInstanceAction>lambdaQuery().in(StateProcessInstanceAction::getNodeId, taskIds)); + Map<String, StateProcessInstanceAction> actionMap = actions.stream().collect(Collectors.toMap(StateProcessInstanceAction::getNodeId, Function.identity())); + + + for (ProcessTaskListVO processTaskListVO : processTaskListVOS) { + List<FlwHisTask> flwHisTasks = flwHisTaskMap.get(NumberUtil.parseLong(processTaskListVO.getFlowId())); + if (ObjectUtil.isNotEmpty(flwHisTaskMap)) { + //当某个用户在同一个模块审批流的多个节点都存在时,多次审核后,已审核列表页报错 + for (FlwHisTask flwHisTask : flwHisTasks) { + if (flwHisTask.getInstanceId().toString().equals(processTaskListVO.getFlowId())) { + processTaskListVO.setStatus(flwHisTask.getTaskState().toString()); + processTaskListVO.setNodeName(flwHisTask.getTaskName()); + processTaskListVO.setParentTaskId(flwHisTask.getParentTaskId().toString()); + processTaskListVO.setTaskId(flwHisTask.getId().toString()); + processTaskListVO.setVariable(flwHisTask.getVariable()); + } + } + } + StateProcessInstanceAction action = actionMap.get(processTaskListVO.getParentTaskId()); + if (ObjectUtil.isNotEmpty(action)) { + processTaskListVO.setReason(action.getRemark()); + } + SysUser sysUser = sysUserMap.get(processTaskListVO.getCreateBy()); + if (Objects.nonNull(sysUser)) { + processTaskListVO.setCreateBy(sysUser.getNickName()); + } + } + return pageInfo; + } + + @Override + public void agree(ProcessAgreeBO processAgreeBO) { + Long taskId = Long.valueOf(processAgreeBO.getTaskId()); + FlwTask flwTask = flwTaskMapper.selectById(taskId); + if (ObjectUtil.isNull(flwTask)) { + throw new GlobalException("任务已处理或者不存在"); + } + flowLongEngine.executeTask(taskId, currentFlowCreator()); + // 动作执行记录 + StateProcessInstanceAction stateProcessInstanceAction = new StateProcessInstanceAction(); + stateProcessInstanceAction.setId(IdUtils.simpleUUID()); + stateProcessInstanceAction.setInstanceId(flwTask.getInstanceId().toString()); + stateProcessInstanceAction.setAuditorId(String.valueOf(SecurityUtils.getUserId())); + stateProcessInstanceAction.setActionType(StateProcessActionEnum.APPROVED.getValue()); + stateProcessInstanceAction.setNodeId(processAgreeBO.getTaskId()); + stateProcessInstanceAction.setRemark(processAgreeBO.getRemark()); + stateProcessInstanceActionService.save(stateProcessInstanceAction); + } + + @Override + public void refuse(ProcessRefuseBO processRefuseBO) { + Long taskId = Long.valueOf(processRefuseBO.getTaskId()); + FlwTask flwTask = flwTaskMapper.selectById(taskId); + // 直接拒绝当前流程 + flowLongEngine.runtimeService().reject(flwTask.getInstanceId(), currentFlowCreator()); + // 动作执行记录 + StateProcessInstanceAction record = new StateProcessInstanceAction(); + record.setId(IdUtils.simpleUUID()); + record.setInstanceId(flwTask.getInstanceId().toString()); + record.setAuditorId(String.valueOf(SecurityUtils.getUserId())); + record.setActionType(StateProcessActionEnum.REJECTED.getValue()); + record.setNodeId(processRefuseBO.getTaskId()); + record.setRemark(processRefuseBO.getRemark()); + stateProcessInstanceActionService.save(record); + } + + @Override + public PageInfo<ProcessTaskListVO> dealAndWaitTaskPage(ProcessTaskListBO processTaskListBO) { + //获取当前登录用户信息 + Long userId = SecurityUtils.getLoginUser().getUserId(); + + //或签时查询其他审批人是否通过(不能省略),比如 同一任务需要A,B审核,A通过了,B不用在审核了,在历史表查询A的审核记录 + LambdaQueryWrapper<FlwHisInstance> lambdaQueryWrapper = new LambdaQueryWrapper<>(); + lambdaQueryWrapper.orderByDesc(FlowEntity::getCreateTime); + //待审核,通过,拒绝 + lambdaQueryWrapper.in(FlwHisInstance::getInstanceState, 0,1,2); + + List<Long> flwHisInstances = flwHisInstanceMapper.selectList(lambdaQueryWrapper).stream() + .map(FlwHisInstance::getId).collect(Collectors.toList()); + if (ObjectUtil.isEmpty(flwHisInstances)) { + return new PageInfo<>(); + } + + //查询任务参与者 + LambdaQueryWrapper<FlwTaskActor> query = new LambdaQueryWrapper<>(); + query.and(qy -> qy.eq(FlwTaskActor::getActorId, userId) + //0指定用户 + .eq(FlwTaskActor::getActorType, 0) + .or().in(FlwTaskActor::getActorId, userId) + //1指定角色 + .eq(FlwTaskActor::getActorType, 1)); + if (ObjectUtil.isNotNull(processTaskListBO) && ObjectUtil.isNotNull(flwHisInstances)) { + // 添加条件 + query = query.in(FlwTaskActor::getInstanceId, flwHisInstances); + } + List<FlwTaskActor> flwTaskActorPage = flwTaskActorMapper.selectList(query); + if (ObjectUtil.isEmpty(flwTaskActorPage)) { + return new PageInfo<>(); + } + //查询任务信息 + List<FlwTask> flwTasks = flwTaskMapper.selectList(Wrappers.<FlwTask>lambdaQuery() + .orderByDesc(FlwTask::getCreateTime) + .in(FlwTask::getId, flwTaskActorPage.stream() + .map(FlwTaskActor::getTaskId).collect(Collectors.toList()))); + + if (ObjectUtil.isNull(flwTasks)) { + return new PageInfo<>(); + } + List<String> instanceIds = flwTasks.stream().map(FlwTask::getInstanceId) + .map(String::valueOf).collect(Collectors.toList()); + //分页查询任务中心任务 +// LambdaQueryWrapper<StateTaskCenter> stateTaskQuery = new LambdaQueryWrapper<>(); +// if (ObjectUtil.isNotEmpty(processTaskListBO.getName())) { +// stateTaskQuery.like(StateTaskCenter::getName, processTaskListBO.getName()); +// } +// if (ObjectUtil.isNotEmpty(processTaskListBO.getModuleName())) { +// stateTaskQuery.like(StateTaskCenter::getModuleName, processTaskListBO.getModuleName()); +// } +// if (ObjectUtil.isNotEmpty(processTaskListBO.getCreateBy())) { +// stateTaskQuery.like(StateTaskCenter::getCreateBy, processTaskListBO.getCreateBy()); +// } +// stateTaskQuery.in(StateTaskCenter::getFlowId, instanceIds); +// stateTaskQuery.orderByDesc(BaseModel::getCreateTime); + processTaskListBO.setInstanceIds(instanceIds); +// PageInfo pageInfo = new PageInfo(processTaskListBO.getPageNum(), processTaskListBO.getPageSize()); +// PageInfo<StateTaskCenter> taskCenters = stateTaskCenterService.page(pageInfo,stateTaskQuery); +// //转换类 +// List<ProcessTaskListVO> processTaskListVOS = BeanUtil.copyToList(taskCenters.getRecords(), ProcessTaskListVO.class); +// // 查询合同信息 +// for (ProcessTaskListVO processTaskListVO : processTaskListVOS) { +// // 查询合同信息 +// TContract contract = contractService.getById(JSONObject.parseObject(processTaskListVO.getVariable()).getString("projectId")); +// processTaskListVO.setContract(contract); +// } +// pageInfo.setRecords(processTaskListVOS); + + PageInfo<ProcessTaskListVO> processTaskListVOS = stateTaskCenterService.pageList(processTaskListBO); + + List<String> updateUserId = processTaskListVOS.getRecords().stream().map(ProcessTaskListVO::getCreateBy).collect(Collectors.toList()); + Map<Long, SysUser> sysUserMap; + if (!CollectionUtils.isEmpty(updateUserId)) { + //根据用户id查询更新人信息 + List<SysUser> sysUsers = sysUserService.selectUserByUserNameList(updateUserId); + + if (!CollectionUtils.isEmpty(sysUsers)) { + sysUserMap = sysUsers.stream().collect(Collectors.toMap(SysUser::getUserId, Function.identity())); + } else { + sysUserMap = new HashMap<>(); + } + } else { + sysUserMap = new HashMap<>(); + } + + + Map<Long, List<FlwTask>> flwHisTaskMap = flwTasks.stream().collect(Collectors.groupingBy(FlwTask::getInstanceId)); + + for (ProcessTaskListVO processTaskListVO : processTaskListVOS.getRecords()) { + List<FlwTask> flwTask = flwHisTaskMap.get(NumberUtil.parseLong(processTaskListVO.getFlowId())); + if (!CollectionUtils.isEmpty(flwTask) && ObjectUtil.isNotEmpty(flwTask.get(0))) { + //待审核 + processTaskListVO.setStatus("0"); + processTaskListVO.setNodeName(flwTask.get(0).getTaskName()); + processTaskListVO.setTaskId(flwTask.get(0).getId().toString()); + processTaskListVO.setVariable(flwTask.get(0).getVariable()); + } + SysUser sysUser = sysUserMap.get(processTaskListVO.getCreateBy()); + if (Objects.nonNull(sysUser)) { + processTaskListVO.setCreateBy(sysUser.getNickName()); + } + } + return processTaskListVOS; + } + + @Override + public ProcessDetailVO detail(String taskId) { + ProcessDetailVO processDetailVO = new ProcessDetailVO(); + FlwTask flwTask = flwTaskMapper.selectById(Long.valueOf(taskId)); + // 查询合同信息 + TContract contract = contractService.getById(JSONObject.parseObject(flwTask.getVariable()).getString("projectId")); + BeanUtil.copyProperties(contract, processDetailVO); + + List<StateProcessInstanceAction> list = stateProcessInstanceActionService.list(Wrappers.<StateProcessInstanceAction>lambdaQuery().eq(StateProcessInstanceAction::getInstanceId, flwTask.getInstanceId()) + .orderByDesc(StateProcessInstanceAction::getCreateTime)); + processDetailVO.setInstanceActions(list); + + return processDetailVO; + } + + private FlowCreator currentFlowCreator() { + LoginUser loginUser = SecurityUtils.getLoginUser(); + if (null == loginUser || null == loginUser.getUser().getUserId()) { + throw new GlobalException("非法用户"); + } + return FlowCreator.of(String.valueOf(loginUser.getUserId()), loginUser.getUser().getNickName()); + } + +} diff --git a/ruoyi-system/src/main/java/com/ruoyi/system/service/impl/StateTaskCenterServiceImpl.java b/ruoyi-system/src/main/java/com/ruoyi/system/service/impl/StateTaskCenterServiceImpl.java new file mode 100644 index 0000000..83ad381 --- /dev/null +++ b/ruoyi-system/src/main/java/com/ruoyi/system/service/impl/StateTaskCenterServiceImpl.java @@ -0,0 +1,24 @@ +package com.ruoyi.system.service.impl; + +import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; +import com.ruoyi.common.basic.PageInfo; +import com.ruoyi.system.bo.ProcessTaskListBO; +import com.ruoyi.system.mapper.StateTaskCenterMapper; +import com.ruoyi.system.model.StateTaskCenter; +import com.ruoyi.system.model.TFaultAreaDic; +import com.ruoyi.system.service.StateTaskCenterService; +import com.ruoyi.system.vo.ProcessTaskListVO; +import org.springframework.stereotype.Service; + +import java.util.List; + +@Service +public class StateTaskCenterServiceImpl extends ServiceImpl<StateTaskCenterMapper, StateTaskCenter> implements StateTaskCenterService { + @Override + public PageInfo<ProcessTaskListVO> pageList(ProcessTaskListBO processTaskListBO) { + PageInfo<ProcessTaskListVO> pageInfo = new PageInfo<>(processTaskListBO.getPageNum(), processTaskListBO.getPageSize()); + List<ProcessTaskListVO> list = this.baseMapper.pageList(processTaskListBO,pageInfo); + pageInfo.setRecords(list); + return pageInfo; + } +} 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 86924f1..a310cf7 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 @@ -606,4 +606,9 @@ return roleMenuMapper.batchRoleMenu(sysRoleMenus); } + + @Override + public List<SysRole> selectRoleByUserIds(List<String> roleIds) { + return roleMapper.selectRoleByUserIds(roleIds); + } } diff --git a/ruoyi-system/src/main/java/com/ruoyi/system/service/impl/TBannerServiceImpl.java b/ruoyi-system/src/main/java/com/ruoyi/system/service/impl/TBannerServiceImpl.java index 6dae322..7da7f08 100644 --- a/ruoyi-system/src/main/java/com/ruoyi/system/service/impl/TBannerServiceImpl.java +++ b/ruoyi-system/src/main/java/com/ruoyi/system/service/impl/TBannerServiceImpl.java @@ -29,4 +29,10 @@ pageInfo.setRecords(list); return pageInfo; } + + @Override + public List<TBanner> list(TBannerQuery query) { + List<TBanner> list = this.baseMapper.list(query); + return list; + } } diff --git a/ruoyi-system/src/main/java/com/ruoyi/system/service/impl/TCheckAcceptRecordServiceImpl.java b/ruoyi-system/src/main/java/com/ruoyi/system/service/impl/TCheckAcceptRecordServiceImpl.java index 48052e2..d84a843 100644 --- a/ruoyi-system/src/main/java/com/ruoyi/system/service/impl/TCheckAcceptRecordServiceImpl.java +++ b/ruoyi-system/src/main/java/com/ruoyi/system/service/impl/TCheckAcceptRecordServiceImpl.java @@ -4,12 +4,18 @@ import com.ruoyi.common.constant.DictConstants; import com.ruoyi.common.utils.DictUtils; import com.ruoyi.system.mapper.TCheckAcceptRecordMapper; +import com.ruoyi.system.mapper.TContractMapper; +import com.ruoyi.system.mapper.THouseMapper; import com.ruoyi.system.model.TCheckAcceptRecord; +import com.ruoyi.system.model.TContract; +import com.ruoyi.system.model.THouse; +import com.ruoyi.system.query.TCheckAcceptRecordAppletQuery; import com.ruoyi.system.query.TCheckAcceptRecordQuery; import com.ruoyi.system.service.TCheckAcceptRecordService; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; import com.ruoyi.system.vo.SysUserVO; import com.ruoyi.system.vo.TCheckAcceptRecordVO; +import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; import java.util.List; @@ -25,15 +31,39 @@ @Service public class TCheckAcceptRecordServiceImpl extends ServiceImpl<TCheckAcceptRecordMapper, TCheckAcceptRecord> implements TCheckAcceptRecordService { + @Autowired + private TContractMapper contractMapper; + @Autowired + private THouseMapper houseMapper; @Override public PageInfo<TCheckAcceptRecordVO> pageList(TCheckAcceptRecordQuery query) { PageInfo<TCheckAcceptRecordVO> pageInfo = new PageInfo<>(query.getPageNum(), query.getPageSize()); List<TCheckAcceptRecordVO> list = this.baseMapper.pageList(query,pageInfo); + list.forEach(item -> { item.setCleanSituation(DictUtils.getDictLabel(DictConstants.DICT_TYPE_CHECK_SITUATION,item.getCleanSituation())); item.setOverallSituation(DictUtils.getDictLabel(DictConstants.DICT_TYPE_CHECK_SITUATION,item.getOverallSituation())); item.setDeviceSituation(DictUtils.getDictLabel(DictConstants.DICT_TYPE_CHECK_SITUATION,item.getDeviceSituation())); item.setFurnitureSituation(DictUtils.getDictLabel(DictConstants.DICT_TYPE_CHECK_SITUATION,item.getFurnitureSituation())); + + }); + pageInfo.setRecords(list); + return pageInfo; + } + + @Override + public PageInfo<TCheckAcceptRecordVO> pageListApplet(TCheckAcceptRecordAppletQuery query) { + List<TContract> tContracts = contractMapper.selectList(null); + List<THouse> tHouses = houseMapper.selectList(null); + PageInfo<TCheckAcceptRecordVO> pageInfo = new PageInfo<>(query.getPageNum(), query.getPageSize()); + List<TCheckAcceptRecordVO> list = this.baseMapper.pageListApplet(query,pageInfo); + list.forEach(item -> { + item.setCleanSituation(DictUtils.getDictLabel(DictConstants.DICT_TYPE_CHECK_SITUATION,item.getCleanSituation())); + item.setOverallSituation(DictUtils.getDictLabel(DictConstants.DICT_TYPE_CHECK_SITUATION,item.getOverallSituation())); + item.setDeviceSituation(DictUtils.getDictLabel(DictConstants.DICT_TYPE_CHECK_SITUATION,item.getDeviceSituation())); + item.setFurnitureSituation(DictUtils.getDictLabel(DictConstants.DICT_TYPE_CHECK_SITUATION,item.getFurnitureSituation())); + item.setContract(tContracts.stream().filter(contract -> contract.getId().equals(item.getContractId())).findFirst().orElse(null)); + item.setHouse(tHouses.stream().filter(house -> house.getId().equals(item.getHouseId())).findFirst().orElse(null)); }); pageInfo.setRecords(list); return pageInfo; diff --git a/ruoyi-system/src/main/java/com/ruoyi/system/service/impl/TContractServiceImpl.java b/ruoyi-system/src/main/java/com/ruoyi/system/service/impl/TContractServiceImpl.java index 387581d..4084b2c 100644 --- a/ruoyi-system/src/main/java/com/ruoyi/system/service/impl/TContractServiceImpl.java +++ b/ruoyi-system/src/main/java/com/ruoyi/system/service/impl/TContractServiceImpl.java @@ -1,6 +1,7 @@ package com.ruoyi.system.service.impl; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; +import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper; import com.ruoyi.common.basic.PageInfo; import com.ruoyi.common.constant.DictConstants; import com.ruoyi.common.core.domain.R; @@ -104,8 +105,16 @@ TCheckAcceptRecord tCheckAcceptRecord = new TCheckAcceptRecord(); tCheckAcceptRecord.setContractId(dto.getId()); tCheckAcceptRecord.setHouseId(contract.getHouseId()); - tCheckAcceptRecord.setLeaseReason("后台终止"); - tCheckAcceptRecord.setStatus("1"); + tCheckAcceptRecord.setLeaseReason("后台终止合同"); + tCheckAcceptRecord.setStatus(false); + tCheckAcceptRecord.setAcceptanceTime(LocalDateTime.now()); + LocalDate now = LocalDate.now(); + String replace = (now + "").replace("-", ""); + int size = checkAcceptRecordMapper.selectList(new LambdaQueryWrapper<TCheckAcceptRecord>() + .likeRight(TCheckAcceptRecord::getAcceptanceTime, LocalDate.now())).size(); + tCheckAcceptRecord.setCode(replace.substring(2)+String.format("%03d", size+1)); + + checkAcceptRecordMapper.insert(tCheckAcceptRecord); // 将所有未缴费账单设置未已失效 List<TBill> tBills = billMapper.selectList(new LambdaQueryWrapper<TBill>() @@ -117,7 +126,13 @@ billService.updateBatchById(tBills); } - + public static void main(String[] args) { +// LocalDate now = LocalDate.now(); +// String replace = (now + "").replace("-", ""); +// System.err.println(replace.substring(2)); +// +// System.err.println(String.format("%03d",1)); + } @Override public CheckAcceptRecordVO getCheckByContractId(String id) { CheckAcceptRecordVO checkAcceptRecordVO = new CheckAcceptRecordVO(); @@ -139,10 +154,13 @@ if (contract==null)return R.fail("合同不存在"); if (contract.getStatus().equals("4"))return R.fail("该合同已签订"); contract.setSignature(dto.getSignature()); - contract.setStatus("2"); - contractMapper.updateById(contract); + contract.setStatus("4"); contract.setFirstPayTime(contract.getStartTime().plusDays(10)); - List<TBill> bills = new ArrayList<>(); + contractMapper.updateById(contract); + + // TODO 进入签订审批流程 + + List<TContractRentType> contractRentTypes = contractRentTypeService.list(); // 生成第一笔账单 // 第一次应缴费日期 @@ -624,4 +642,11 @@ return list; } + + @Override + public Boolean updateContractAuditStatus(String projectId, Integer status) { + LambdaUpdateWrapper<TContract> contractLambdaUpdateWrapper = new LambdaUpdateWrapper<>(); + contractLambdaUpdateWrapper.eq(TContract::getId, projectId).set(TContract::getStatus, status); + return this.update(contractLambdaUpdateWrapper); + } } diff --git a/ruoyi-system/src/main/java/com/ruoyi/system/service/impl/TFaultRepairMessageServiceImpl.java b/ruoyi-system/src/main/java/com/ruoyi/system/service/impl/TFaultRepairMessageServiceImpl.java index 8c3df80..e763517 100644 --- a/ruoyi-system/src/main/java/com/ruoyi/system/service/impl/TFaultRepairMessageServiceImpl.java +++ b/ruoyi-system/src/main/java/com/ruoyi/system/service/impl/TFaultRepairMessageServiceImpl.java @@ -3,6 +3,7 @@ import com.ruoyi.common.basic.PageInfo; import com.ruoyi.system.mapper.TFaultRepairMessageMapper; import com.ruoyi.system.model.TFaultRepairMessage; +import com.ruoyi.system.query.TFaultRepairMessageAppletQuery; import com.ruoyi.system.query.TFaultRepairMessageQuery; import com.ruoyi.system.service.TFaultRepairMessageService; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; @@ -35,4 +36,12 @@ pageInfo.setRecords(list); return pageInfo; } + + @Override + public PageInfo<TFaultRepairMessageVO> pageListApplet(TFaultRepairMessageAppletQuery query) { + PageInfo<TFaultRepairMessageVO> pageInfo = new PageInfo<>(query.getPageNum(), query.getPageSize()); + List<TFaultRepairMessageVO> list = this.baseMapper.pageListApplet(query,pageInfo); + pageInfo.setRecords(list); + return pageInfo; + } } diff --git a/ruoyi-system/src/main/java/com/ruoyi/system/service/impl/THouseServiceImpl.java b/ruoyi-system/src/main/java/com/ruoyi/system/service/impl/THouseServiceImpl.java index 5d59da6..9aa06f9 100644 --- a/ruoyi-system/src/main/java/com/ruoyi/system/service/impl/THouseServiceImpl.java +++ b/ruoyi-system/src/main/java/com/ruoyi/system/service/impl/THouseServiceImpl.java @@ -4,6 +4,7 @@ import com.ruoyi.common.basic.PageInfo; import com.ruoyi.common.constant.DictConstants; import com.ruoyi.common.utils.DictUtils; +import com.ruoyi.common.utils.StringUtils; import com.ruoyi.system.mapper.TContractMapper; import com.ruoyi.system.mapper.THouseMapper; import com.ruoyi.system.model.TContract; @@ -56,7 +57,7 @@ PageInfo<HouseVO> pageInfo = new PageInfo<>(query.getPageNum(), query.getPageSize()); List<HouseVO> list = this.baseMapper.userHistoryList(query,pageInfo); for (HouseVO houseVO : list) { - houseVO.setBusinessAttributes(DictUtils.getDictLabel(DictConstants.DICT_TYPE_BUSINESS_ATTRIBUTES,houseVO.getBusinessAttributes())); + houseVO.setTenantAttributes(StringUtils.isNotEmpty(houseVO.getTenantAttributes())?DictUtils.getDictLabel(DictConstants.DICT_TYPE_TENANT_ATTRIBUTE,houseVO.getTenantAttributes()):""); } pageInfo.setRecords(list); return pageInfo; diff --git a/ruoyi-system/src/main/java/com/ruoyi/system/service/impl/TItemTypeServiceImpl.java b/ruoyi-system/src/main/java/com/ruoyi/system/service/impl/TItemTypeServiceImpl.java index d579295..be72660 100644 --- a/ruoyi-system/src/main/java/com/ruoyi/system/service/impl/TItemTypeServiceImpl.java +++ b/ruoyi-system/src/main/java/com/ruoyi/system/service/impl/TItemTypeServiceImpl.java @@ -46,7 +46,7 @@ } @Override - public List<TItemTypeVO> getItemList() { - return this.baseMapper.getItemList(); + public List<TItemTypeVO> getItemList(String itemName) { + return this.baseMapper.getItemList(itemName); } } diff --git a/ruoyi-system/src/main/java/com/ruoyi/system/service/impl/TTenantServiceImpl.java b/ruoyi-system/src/main/java/com/ruoyi/system/service/impl/TTenantServiceImpl.java index 95a8452..f20404c 100644 --- a/ruoyi-system/src/main/java/com/ruoyi/system/service/impl/TTenantServiceImpl.java +++ b/ruoyi-system/src/main/java/com/ruoyi/system/service/impl/TTenantServiceImpl.java @@ -1,20 +1,35 @@ package com.ruoyi.system.service.impl; +import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; +import com.baomidou.mybatisplus.core.toolkit.Wrappers; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; import com.ruoyi.common.basic.PageInfo; import com.ruoyi.common.constant.DictConstants; import com.ruoyi.common.utils.DictUtils; import com.ruoyi.common.utils.StringUtils; +import com.ruoyi.system.mapper.SysUserMapper; +import com.ruoyi.system.mapper.TContractMapper; +import com.ruoyi.system.mapper.THouseMapper; import com.ruoyi.system.mapper.TTenantMapper; +import com.ruoyi.system.model.TContract; +import com.ruoyi.system.model.THouse; import com.ruoyi.system.model.TTenant; +import com.ruoyi.system.query.TBillAppletQuery; +import com.ruoyi.system.query.TExamineAppletQuery; +import com.ruoyi.system.query.TTenantAppletQuery; import com.ruoyi.system.query.TTenantQuery; import com.ruoyi.system.service.TTenantService; -import com.ruoyi.system.utils.wx.pojo.AppletUserDecodeData; +import com.ruoyi.system.vo.ExamineVO; +import com.ruoyi.system.vo.TBillVO; import com.ruoyi.system.vo.TenantVO; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.security.core.token.TokenService; import org.springframework.stereotype.Service; +import org.springframework.util.CollectionUtils; +import java.util.ArrayList; import java.util.List; -import java.util.Map; +import java.util.stream.Collectors; /** * <p> @@ -27,6 +42,10 @@ @Service public class TTenantServiceImpl extends ServiceImpl<TTenantMapper, TTenant> implements TTenantService { + @Autowired + private THouseMapper houseMapper; + @Autowired + private TContractMapper contractMapper; @Override public PageInfo<TenantVO> pageList(TTenantQuery query) { PageInfo<TenantVO> pageInfo = new PageInfo<>(query.getPageNum(), query.getPageSize()); @@ -39,4 +58,79 @@ return pageInfo; } + @Override + public PageInfo<TenantVO> pageListApplet(TTenantAppletQuery query) { + PageInfo<TenantVO> pageInfo = new PageInfo<>(query.getPageNum(), query.getPageSize()); + List<TenantVO> list = this.baseMapper.pageListApplet(query,pageInfo); + List<String> ids = list.stream().map(TTenant::getId).collect(Collectors.toList()); + if(CollectionUtils.isEmpty(ids)){ + return new PageInfo<>(); + } + List<TContract> contracts = contractMapper.selectList(Wrappers.lambdaQuery(TContract.class) + .in(TContract::getTenantId, ids) + .eq(TContract::getStatus, 4)); + List<THouse> houses = new ArrayList<>(); + if(!CollectionUtils.isEmpty(contracts)){ + List<String> houseIds = contracts.stream().map(TContract::getHouseId).collect(Collectors.toList()); + houses = houseMapper.selectList(Wrappers.lambdaQuery(THouse.class) + .in(THouse::getId, houseIds)); + } + + for (TenantVO tenantVO : list) { + tenantVO.setTenantAttributesName(StringUtils.isNotBlank(tenantVO.getTenantAttributes())?DictUtils.getDictLabel(DictConstants.DICT_TYPE_TENANT_ATTRIBUTE,tenantVO.getTenantAttributes()):""); + tenantVO.setTenantTypeName(StringUtils.isNotBlank(tenantVO.getTenantType())?DictUtils.getDictLabel(DictConstants.DICT_TYPE_TENANT_TYPE,tenantVO.getTenantType()):""); + if(!CollectionUtils.isEmpty(houses)){ + List<TContract> contractList = contracts.stream().filter(contract -> contract.getTenantId().equals(tenantVO.getId())).collect(Collectors.toList()); + if(!CollectionUtils.isEmpty(contractList)){ + TContract contract = contractList.get(0); + List<THouse> houseList = houses.stream().filter(house -> house.getId().equals(contract.getHouseId())).collect(Collectors.toList()); + if(!CollectionUtils.isEmpty(houseList)) + tenantVO.setHouseName(houseList.get(0).getHouseName()); + } + } + } + pageInfo.setRecords(list); + return pageInfo; + } + + @Override + public List<THouse> listHouse(String id) { + List<TContract> tContracts = contractMapper.selectList(new LambdaQueryWrapper<TContract>() + .eq(TContract::getTenantId,id) + .eq(TContract::getStatus, 4)); + List<String> houseIds = tContracts.stream().map(TContract::getHouseId).collect(Collectors.toList()); + if (houseIds.isEmpty())houseIds.add("-1"); + return houseMapper.selectList(new LambdaQueryWrapper<THouse>() + .in(THouse::getId, houseIds)); + } + + @Override + public List<TContract> listContract(String id) { + return contractMapper.selectList(new LambdaQueryWrapper<TContract>() + .eq(TContract::getTenantId,id) + .eq(TContract::getStatus, 4)); + } + + @Override + public PageInfo<TBillVO> listBill(TBillAppletQuery query) { + List<String> contractIds = contractMapper.selectList(new LambdaQueryWrapper<TContract>() + .eq(TContract::getTenantId, query.getId())).stream().map(TContract::getId) + .collect(Collectors.toList()); + if (contractIds.isEmpty())contractIds.add("0"); + PageInfo<TBillVO> pageInfo = new PageInfo<>(query.getPageNum(), query.getPageSize()); + List<TBillVO> list = this.baseMapper.listBill(query,pageInfo); + for (TBillVO tBillVO : list) { + tBillVO.setPayFeesStatus(DictUtils.getDictLabel(DictConstants.DICT_TYPE_LEASE_STATUS,tBillVO.getPayFeesStatus())); + } + pageInfo.setRecords(list); + return pageInfo; + } + + @Override + public PageInfo<ExamineVO> examineList(TExamineAppletQuery dto) { + PageInfo<ExamineVO> pageInfo = new PageInfo<>(dto.getPageNum(), dto.getPageSize()); + List<ExamineVO> list = this.baseMapper.examineList(dto,pageInfo); + pageInfo.setRecords(list); + return pageInfo; + } } diff --git a/ruoyi-system/src/main/java/com/ruoyi/system/vo/ExamineVO.java b/ruoyi-system/src/main/java/com/ruoyi/system/vo/ExamineVO.java new file mode 100644 index 0000000..63d54e3 --- /dev/null +++ b/ruoyi-system/src/main/java/com/ruoyi/system/vo/ExamineVO.java @@ -0,0 +1,31 @@ +package com.ruoyi.system.vo; + +import com.fasterxml.jackson.annotation.JsonFormat; +import com.ruoyi.system.model.TBill; +import io.swagger.annotations.ApiModel; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +import java.time.LocalDateTime; + +@Data +@ApiModel(value = "我的审批分页列表VO") +public class ExamineVO{ + @ApiModelProperty(value = "合同id") + private String id; + @ApiModelProperty(value = "合同编号") + private String contractNumber; + @ApiModelProperty(value = "合同名称") + private String contractName; + @ApiModelProperty(value = "租户信息") + private String partyTwoName; + @ApiModelProperty(value = "提交人") + private String createBy; + @ApiModelProperty(value = "提交时间") + @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8") + private LocalDateTime createTime; + @ApiModelProperty(value = "合同状态") + private String status; + + +} diff --git a/ruoyi-system/src/main/java/com/ruoyi/system/vo/HouseVO.java b/ruoyi-system/src/main/java/com/ruoyi/system/vo/HouseVO.java index 722a6de..4e74bbb 100644 --- a/ruoyi-system/src/main/java/com/ruoyi/system/vo/HouseVO.java +++ b/ruoyi-system/src/main/java/com/ruoyi/system/vo/HouseVO.java @@ -17,6 +17,8 @@ @ApiModelProperty(value = "房屋id") private String houseId; + @ApiModelProperty(value = "房屋id") + private String tenantId; @ApiModelProperty(value = "租户姓名") private String residentName; @@ -25,7 +27,7 @@ private String phone; @ApiModelProperty(value = "属性") - private String businessAttributes; + private String tenantAttributes; @ApiModelProperty(value = "类型") private String productType; @ApiModelProperty(value = "入住日期") diff --git a/ruoyi-system/src/main/java/com/ruoyi/system/vo/MyHouseVO.java b/ruoyi-system/src/main/java/com/ruoyi/system/vo/MyHouseVO.java new file mode 100644 index 0000000..a591dbb --- /dev/null +++ b/ruoyi-system/src/main/java/com/ruoyi/system/vo/MyHouseVO.java @@ -0,0 +1,40 @@ +package com.ruoyi.system.vo; + +import com.fasterxml.jackson.annotation.JsonFormat; +import com.ruoyi.system.model.TBill; +import io.swagger.annotations.ApiModel; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +import java.math.BigDecimal; +import java.time.LocalDateTime; +import java.util.List; + +@Data +@ApiModel(value = "我的在租VO") +public class MyHouseVO { + @ApiModelProperty(value = "合同id") + private String id; + @ApiModelProperty(value = "地址") + private String houseAddress; + @ApiModelProperty(value = "月付租金") + private BigDecimal monthRent; + @ApiModelProperty(value = "支付方式 月付、季付、年付") + private String payType; + @ApiModelProperty(value = "付款当月月份") + private String month; + @ApiModelProperty(value = "建筑面积") + private String houseArea; + @ApiModelProperty(value = "户型") + private String houseType; + @ApiModelProperty(value = "结束时间") + private String endTime; + @ApiModelProperty(value = "开始时间") + private String startTime; + @ApiModelProperty(value = "房东") + private String propertyRightPerson; + @ApiModelProperty(value = "房东联系方式") + private String phone; + @ApiModelProperty(value = "交租记录") + private List<PayListVO> payList; +} diff --git a/ruoyi-system/src/main/java/com/ruoyi/system/vo/MyToDoVO.java b/ruoyi-system/src/main/java/com/ruoyi/system/vo/MyToDoVO.java new file mode 100644 index 0000000..944177e --- /dev/null +++ b/ruoyi-system/src/main/java/com/ruoyi/system/vo/MyToDoVO.java @@ -0,0 +1,23 @@ +package com.ruoyi.system.vo; + +import com.ruoyi.system.model.TBill; +import io.swagger.annotations.ApiModel; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +@Data +@ApiModel(value = "我的待办VO") +public class MyToDoVO { + + @ApiModelProperty(value = "租户-待缴费订单数量") + private Integer billCount; + + @ApiModelProperty(value = "租户-待签订合同数量") + private Integer contractCount; + + @ApiModelProperty(value = "管理员-待审批数量") + private Integer examineCount; + + @ApiModelProperty(value = "管理员-账单逾期租户数量数量") + private Integer overdueCount; +} diff --git a/ruoyi-system/src/main/java/com/ruoyi/system/vo/PayListVO.java b/ruoyi-system/src/main/java/com/ruoyi/system/vo/PayListVO.java new file mode 100644 index 0000000..4bbb7b9 --- /dev/null +++ b/ruoyi-system/src/main/java/com/ruoyi/system/vo/PayListVO.java @@ -0,0 +1,20 @@ +package com.ruoyi.system.vo; + +import com.fasterxml.jackson.annotation.JsonFormat; +import com.ruoyi.system.model.TBill; +import io.swagger.annotations.ApiModel; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +import java.math.BigDecimal; +import java.time.LocalDateTime; +import java.util.List; + +@Data +@ApiModel(value = "我的在租-交租记录VO") +public class PayListVO { + @ApiModelProperty(value = "时间") + private String payFeesTime; + @ApiModelProperty(value = "缴费金额 (处理了负号和元 直接展示就行)") + private String payFeesMoney; +} diff --git a/ruoyi-system/src/main/java/com/ruoyi/system/vo/ProcessDetailVO.java b/ruoyi-system/src/main/java/com/ruoyi/system/vo/ProcessDetailVO.java new file mode 100644 index 0000000..1816774 --- /dev/null +++ b/ruoyi-system/src/main/java/com/ruoyi/system/vo/ProcessDetailVO.java @@ -0,0 +1,17 @@ +package com.ruoyi.system.vo; + +import com.ruoyi.system.model.StateProcessInstanceAction; +import com.ruoyi.system.model.TContract; +import io.swagger.annotations.ApiModel; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +import java.util.List; +@Data +@ApiModel(value = "审批流详情返回VO") +public class ProcessDetailVO extends TContract { + + @ApiModelProperty(value = "操作记录集合") + private List<StateProcessInstanceAction> instanceActions; + +} diff --git a/ruoyi-system/src/main/java/com/ruoyi/system/vo/ProcessTaskListVO.java b/ruoyi-system/src/main/java/com/ruoyi/system/vo/ProcessTaskListVO.java new file mode 100644 index 0000000..337a265 --- /dev/null +++ b/ruoyi-system/src/main/java/com/ruoyi/system/vo/ProcessTaskListVO.java @@ -0,0 +1,150 @@ +package com.ruoyi.system.vo; + +import com.baomidou.mybatisplus.annotation.IdType; +import com.baomidou.mybatisplus.annotation.TableField; +import com.baomidou.mybatisplus.annotation.TableId; +import com.fasterxml.jackson.annotation.JsonFormat; +import com.ruoyi.system.model.TContract; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; +import lombok.Getter; +import lombok.Setter; +import org.springframework.format.annotation.DateTimeFormat; + +import java.math.BigDecimal; +import java.time.LocalDateTime; +import java.util.Date; + +@Data +public class ProcessTaskListVO { + + private String nodeName; + + private String flowId; + + private String name; + + private String moduleName; + + private String createBy; + + private String remark; + + @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss") + @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss") + private Date createTime; + + private String status; + + private String taskId; + + private String parentTaskId; + + + private String category; + + private String variable; + + private String reason; + + @ApiModelProperty(value = "合同信息") + private TContract contract; + + @ApiModelProperty(value = "合同id") + private String contractId; + + @ApiModelProperty(value = "合同编号") + private String contractNumber; + + @ApiModelProperty(value = "合同名称") + private String contractName; + + @ApiModelProperty(value = "开始时间") + @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8") + private LocalDateTime startTime; + + @ApiModelProperty(value = "结束时间") + @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8") + private LocalDateTime endTime; + @ApiModelProperty(value = "开始计费时间") + @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8") + private LocalDateTime startPayTime; + + @ApiModelProperty(value = "每月租金") + private BigDecimal monthRent; + + @ApiModelProperty(value = "押金") + private BigDecimal deposit; + @ApiModelProperty(value = "变动后递增或递减之后的每月租金 前端忽略") + private BigDecimal changeRent; + + @ApiModelProperty(value = "租金支付方式 月付 季付 年付") + private String payType; + + @ApiModelProperty(value = "账单第一次支付日期 合同生效日期+10天 (不是真正的支付日期)生成第一次帐单后存值") + @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8") + private LocalDateTime firstPayTime; + @ApiModelProperty(value = "变动时间 根据周期改变 前端忽略") + @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8") + private LocalDateTime changeTime; + + @ApiModelProperty(value = "是否递增递减 true=是 false=否") + private Boolean isIncreasing; + + @ApiModelProperty(value = "押金是否随租金递增递减 true=是 false=否") + private Boolean isIncreasingDeposit; + + @ApiModelProperty(value = "违约金比例") + private BigDecimal proportion; + + @ApiModelProperty(value = "房屋id") + private String houseId; + + @ApiModelProperty(value = "甲方名称") + private String partyOneName; + + @ApiModelProperty(value = "甲方联系人") + private String partyOnePerson; + + @ApiModelProperty(value = "甲方联系方式") + private String partyOnePhone; + + @ApiModelProperty(value = "租户id") + private String tenantId; + + @ApiModelProperty(value = "乙方名称") + private String partyTwoName; + + @ApiModelProperty(value = "乙方联系人") + private String partyTwoPerson; + + @ApiModelProperty(value = "乙方联系方式") + private String partyTwoPhone; + + @ApiModelProperty(value = "合同附件,多个逗号拼接") + private String contractFile; + + /** + * 1 待提交 + * 2 待审批 + * 3 未签订 + * 4 已签订 + * 5 已驳回 + * 6 已终止 + * 7 待结算 + * 8 已结算 + */ + @ApiModelProperty(value = "合同状态 1=待提交 2=待审批 3=未签订 4=已签订 5=已驳回 6=已终止 7=待结算 8=已结算") + private String contractStatus; + @ApiModelProperty(value = "内存大小多个文件逗号拼接") + private String memory; + @ApiModelProperty(value = "附件名称 逗号拼接") + private String contractFileName; + @ApiModelProperty(value = "租户确认合同电子签名") + private String signature; + @ApiModelProperty(value = "终止合同备注说明") + private String terminateRemark; + @ApiModelProperty(value = "合计年租金") + private BigDecimal totalYear; + +} diff --git a/ruoyi-system/src/main/java/com/ruoyi/system/vo/TCheckAcceptRecordVO.java b/ruoyi-system/src/main/java/com/ruoyi/system/vo/TCheckAcceptRecordVO.java index 23de55e..eb9b904 100644 --- a/ruoyi-system/src/main/java/com/ruoyi/system/vo/TCheckAcceptRecordVO.java +++ b/ruoyi-system/src/main/java/com/ruoyi/system/vo/TCheckAcceptRecordVO.java @@ -17,4 +17,11 @@ @ApiModelProperty(value = "房屋信息") private THouse house; + @ApiModelProperty(value = "房屋名称") + private String houseName; + @ApiModelProperty(value = "合同编号") + private String contractNumber; + @ApiModelProperty(value = "房屋地址") + private String houseAddress; + } diff --git a/ruoyi-system/src/main/java/com/ruoyi/system/vo/TContractAppletVO.java b/ruoyi-system/src/main/java/com/ruoyi/system/vo/TContractAppletVO.java new file mode 100644 index 0000000..71f2690 --- /dev/null +++ b/ruoyi-system/src/main/java/com/ruoyi/system/vo/TContractAppletVO.java @@ -0,0 +1,28 @@ +package com.ruoyi.system.vo; + +import com.baomidou.mybatisplus.annotation.TableField; +import com.fasterxml.jackson.annotation.JsonFormat; +import com.ruoyi.system.model.TContract; +import com.ruoyi.system.model.THouse; +import com.ruoyi.system.model.TTenant; +import io.swagger.annotations.ApiModel; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +import java.math.BigDecimal; +import java.time.LocalDateTime; + +@Data +@ApiModel(value = "小程序-合同详情页VO") +public class TContractAppletVO extends TContract { + + @ApiModelProperty(value = "房屋信息") + private THouse house; + @ApiModelProperty(value = "租户信息") + private TTenant tenant; + @ApiModelProperty(value = "生效日期") + private String startTimeString; + + @ApiModelProperty(value = "终止日期") + private String endTimeString; +} diff --git a/ruoyi-system/src/main/java/com/ruoyi/system/vo/TenantVO.java b/ruoyi-system/src/main/java/com/ruoyi/system/vo/TenantVO.java index 52566aa..1514830 100644 --- a/ruoyi-system/src/main/java/com/ruoyi/system/vo/TenantVO.java +++ b/ruoyi-system/src/main/java/com/ruoyi/system/vo/TenantVO.java @@ -18,4 +18,7 @@ @ApiModelProperty(value = "租户类型") private String tenantTypeName; + @ApiModelProperty(value = "房屋名称") + private String houseName; + } diff --git a/ruoyi-system/src/main/resources/mapper/system/StateProcessTemplateMapper.xml b/ruoyi-system/src/main/resources/mapper/system/StateProcessTemplateMapper.xml new file mode 100644 index 0000000..6ae2931 --- /dev/null +++ b/ruoyi-system/src/main/resources/mapper/system/StateProcessTemplateMapper.xml @@ -0,0 +1,15 @@ +<?xml version="1.0" encoding="UTF-8"?> +<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd"> +<mapper namespace="com.ruoyi.system.mapper.StateProcessTemplateMapper"> + + + <select id="page" resultType="com.ruoyi.system.model.StateProcessTemplate"> + SELECT * FROM state_process_template + WHERE (template_key, template_version) in (select template_key, MAX(template_version)from state_process_template group by template_key) + <if test="request.name != null and request.name != ''"> + AND template_name::text LIKE CONCAT('%',#{request.name}, '%' ) + </if> + and disabled = ${@com.ruoyi.common.enums.DisabledEnum@NO.getCode()} + </select> + +</mapper> \ No newline at end of file diff --git a/ruoyi-system/src/main/resources/mapper/system/StateTaskCenterMapper.xml b/ruoyi-system/src/main/resources/mapper/system/StateTaskCenterMapper.xml new file mode 100644 index 0000000..f8488c0 --- /dev/null +++ b/ruoyi-system/src/main/resources/mapper/system/StateTaskCenterMapper.xml @@ -0,0 +1,62 @@ +<?xml version="1.0" encoding="UTF-8"?> +<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd"> +<mapper namespace="com.ruoyi.system.mapper.StateTaskCenterMapper"> + + <!-- 通用查询映射结果 --> + <resultMap id="BaseResultMap" type="com.ruoyi.system.model.StateTaskCenter"> + <id column="id" property="id" /> + <result column="`name`" property="name" /> + <result column="module_name" property="moduleName" /> + <result column="remark" property="remark" /> + <result column="category" property="category" /> + <result column="flow_id" property="flowId" /> + <result column="variable" property="variable" /> + <result column="project_id" property="projectId" /> + </resultMap> + + <!-- 通用查询结果列 --> + <sql id="Base_Column_List"> + id, `name`, module_name, remark,category,flow_id,variable,project_id,create_time, update_time, create_by, update_by, disabled + </sql> + <select id="pageList" resultType="com.ruoyi.system.vo.ProcessTaskListVO"> + select stc.id, stc.`name`, stc.module_name, stc.remark,stc.category,stc.flow_id,stc.variable, + tc.id AS contractId, tc.contract_number, tc.contract_name, tc.start_time, tc.end_time,tc.deposit, tc.pay_type, + tc.first_pay_time, tc.isIncreasing,tc.isIncreasing_deposit,tc.proportion, tc.house_id, tc.party_one_name, tc.party_one_person, + tc.party_one_phone, tc.tenant_id, tc.party_two_name,tc.party_two_person, tc.party_two_phone,tc.memory, tc.contract_file_name, + tc.signature, tc.terminate_remark, tc.total_year,tc.status AS contractStatus + from state_task_center stc + LEFT JOIN t_contract tc ON stc.project_id = tc.id + <where> + <if test="query.instanceIds != null and query.instanceIds.size()>0"> + AND stc.flow_id IN + <foreach collection="query.instanceIds" item="item" open="(" separator="," close=")"> + #{item} + </foreach> + </if> + <if test="query.name != null and query.name !=''"> + AND stc.`name` like concat('%',#{query.name},'%') + </if> + <if test="query.moduleName != null and query.moduleName !=''"> + AND stc.module_name like concat('%',#{query.moduleName},'%') + </if> + <if test="query.createBy != null and query.createBy !=''"> + AND stc.create_by like concat('%',#{query.createBy},'%') + </if> + <if test="query.partyTwoName != null and query.partyTwoName !=''"> + AND tc.party_two_name like concat('%',#{query.partyTwoName},'%') + </if> + <if test="query.contractNumber != null and query.contractNumber !=''"> + AND tc.contract_number like concat('%',#{query.contractNumber},'%') + </if> + <if test="query.contractName != null and query.contractName !=''"> + AND tc.contract_name like concat('%',#{query.contractName},'%') + </if> + <if test="query.status != null and query.status !=''"> + AND tc.status like concat('%',#{query.status},'%') + </if> + AND tc.disabled = ${@com.ruoyi.common.enums.DisabledEnum@NO.getCode()} + </where> + ORDER BY stc.create_time DESC + </select> + +</mapper> diff --git a/ruoyi-system/src/main/resources/mapper/system/SysRoleMapper.xml b/ruoyi-system/src/main/resources/mapper/system/SysRoleMapper.xml index f24c54f..f3dfeeb 100644 --- a/ruoyi-system/src/main/resources/mapper/system/SysRoleMapper.xml +++ b/ruoyi-system/src/main/resources/mapper/system/SysRoleMapper.xml @@ -148,6 +148,17 @@ left join sys_role t2 on t1.role_id = t2.role_id where t1.user_id = #{userId} </select> + <select id="selectRoleByUserIds" resultType="com.ruoyi.common.core.domain.entity.SysRole"> + select + a.user_id as role_id, + b.nick_name as role_name + from sys_user_role a + left join sys_user b on a.user_id = b.user_id + where a.role_id in + <foreach item="item" index="index" collection="roleIds" open="(" separator="," close=")"> + #{item} + </foreach> + </select> <insert id="insertRole" parameterType="SysRole" useGeneratedKeys="true" keyProperty="roleId"> insert into sys_role( diff --git a/ruoyi-system/src/main/resources/mapper/system/SysUserMapper.xml b/ruoyi-system/src/main/resources/mapper/system/SysUserMapper.xml index 7487409..477a6ee 100644 --- a/ruoyi-system/src/main/resources/mapper/system/SysUserMapper.xml +++ b/ruoyi-system/src/main/resources/mapper/system/SysUserMapper.xml @@ -191,7 +191,7 @@ from sys_user u WHERE u.del_flag = 0 <if test="names != null and names.size()>0"> - AND u.nick_name IN + AND u.user_name IN <foreach collection="names" close=")" open="(" item="name" separator=","> #{name} </foreach> diff --git a/ruoyi-system/src/main/resources/mapper/system/TBannerMapper.xml b/ruoyi-system/src/main/resources/mapper/system/TBannerMapper.xml index d9bd46a..3cfee87 100644 --- a/ruoyi-system/src/main/resources/mapper/system/TBannerMapper.xml +++ b/ruoyi-system/src/main/resources/mapper/system/TBannerMapper.xml @@ -25,5 +25,12 @@ where disabled = ${@com.ruoyi.common.enums.DisabledEnum@NO.getCode()} order by sort_by, create_time desc </select> + <select id="list" resultType="com.ruoyi.system.model.TBanner"> + select + <include refid="Base_Column_List"/> + from t_banner + where disabled = ${@com.ruoyi.common.enums.DisabledEnum@NO.getCode()} + order by sort_by, create_time desc + </select> </mapper> diff --git a/ruoyi-system/src/main/resources/mapper/system/TCheckAcceptRecordMapper.xml b/ruoyi-system/src/main/resources/mapper/system/TCheckAcceptRecordMapper.xml index 2e99a8c..cbff79f 100644 --- a/ruoyi-system/src/main/resources/mapper/system/TCheckAcceptRecordMapper.xml +++ b/ruoyi-system/src/main/resources/mapper/system/TCheckAcceptRecordMapper.xml @@ -53,8 +53,12 @@ t.create_by, t.update_by, t.disabled, + t.code, + t.checkMoney, + t.status, c.contract_number, - h.house_name + h.house_name, + h.house_address from t_check_accept_record t left join t_contract c on t.contract_id = c.id left join t_house h on t.house_id = h.id @@ -76,5 +80,25 @@ </where> ORDER BY t.create_time DESC </select> + <select id="pageListApplet" resultType="com.ruoyi.system.vo.TCheckAcceptRecordVO"> + select + t.*, + c.contract_number, + h.house_name + from t_check_accept_record t + left join t_contract c on t.contract_id = c.id + left join t_house h on t.house_id = h.id + <where> + + <if test="query.status != null"> + AND t.status = #{query.status} + </if> + <if test="query.houseNameOrAddress != null and query.houseNameOrAddress != ''"> + AND (h.house_name LIKE concat('%', #{query.houseNameOrAddress}, '%') or h.house_address LIKE concat('%', #{query.houseNameOrAddress}, '%')) + </if> + AND t.disabled = ${@com.ruoyi.common.enums.DisabledEnum@NO.getCode()} + </where> + ORDER BY t.create_time DESC + </select> </mapper> diff --git a/ruoyi-system/src/main/resources/mapper/system/TContractMapper.xml b/ruoyi-system/src/main/resources/mapper/system/TContractMapper.xml index eb9f2e8..c2abe7d 100644 --- a/ruoyi-system/src/main/resources/mapper/system/TContractMapper.xml +++ b/ruoyi-system/src/main/resources/mapper/system/TContractMapper.xml @@ -9,7 +9,6 @@ <result column="contract_name" property="contractName" /> <result column="start_time" property="startTime" /> <result column="end_time" property="endTime" /> - <result column="month_rent" property="monthRent" /> <result column="deposit" property="deposit" /> <result column="pay_type" property="payType" /> <result column="first_pay_time" property="firstPayTime" /> @@ -41,9 +40,9 @@ <!-- 通用查询结果列 --> <sql id="Base_Column_List"> - id, contract_number, contract_name, start_time, end_time, total_rent, deposit, pay_type, first_pay_time, isIncreasing, isIncreasing_deposit, + id, contract_number, contract_name, start_time, end_time, deposit, pay_type, first_pay_time, isIncreasing, isIncreasing_deposit, proportion, house_id, party_one_name, party_one_person, party_one_phone, tenant_id, party_two_name, party_two_person, party_two_phone, - memory, contract_file_name, signature, terminate_remark, total_year + memory, contract_file_name, signature, terminate_remark, total_year,status </sql> <select id="contractList" resultType="com.ruoyi.system.model.TContract"> select t1.* from t_contract t1 @@ -73,6 +72,7 @@ <if test="query.tenantId != null"> and t1.tenant_id = #{query.tenantId} </if> + and (t1.status=3 or t1.status=4) AND t1.disabled = ${@com.ruoyi.common.enums.DisabledEnum@NO.getCode()} </where> </select> @@ -96,7 +96,7 @@ #{item} </foreach> </if> - <if test="query.ids == null and query.ids.size()=0"> + <if test="query.ids != null and query.ids.size()=0"> <if test="query.partyTwoName != null and query.partyTwoName != ''"> and t1.party_two_name like concat('%',#{query.partyTwoName},'%') </if> diff --git a/ruoyi-system/src/main/resources/mapper/system/TFaultRepairMessageMapper.xml b/ruoyi-system/src/main/resources/mapper/system/TFaultRepairMessageMapper.xml index efeb10c..217157a 100644 --- a/ruoyi-system/src/main/resources/mapper/system/TFaultRepairMessageMapper.xml +++ b/ruoyi-system/src/main/resources/mapper/system/TFaultRepairMessageMapper.xml @@ -130,5 +130,51 @@ </where> ORDER BY t.create_time DESC </select> + <select id="pageListApplet" resultType="com.ruoyi.system.vo.TFaultRepairMessageVO"> + SELECT + t.id, + t.tenant_id, + t.item_id, + t.item_type_id, + t.contract_id, + t.fault_area_name, + t.describe_name, + t.describe_detail, + t.fault_pictures, + t.service_address, + t.repair_type, + t.visit_time, + t.contact_number, + t.leave_message, + t.handle_person, + t.handle_time, + t.result_describe, + t.repair_picture, + t.attachment, + t.attachment_name, + t.status, + t.create_time, + t.update_time, + t.create_by, + t.update_by, + t.disabled, + i.item_name AS itemName, + it.type_name AS itemTypeName, + tnt.resident_name AS residentName + from t_fault_repair_message t + LEFT JOIN t_item i ON t.item_id = i.id + LEFT JOIN t_item_type it ON t.item_type_id = it.id + LEFT JOIN t_tenant tnt ON t.tenant_id = tnt.id + <where> + <if test="query.houseAddress != null and query.houseAddress != ''"> + AND t.service_address LIKE CONCAT('%', #{query.houseAddress}, '%') + </if> + <if test="query.status != null"> + AND t.status = #{query.status} + </if> + AND t.disabled = ${@com.ruoyi.common.enums.DisabledEnum@NO.getCode()} + </where> + ORDER BY t.create_time DESC + </select> </mapper> diff --git a/ruoyi-system/src/main/resources/mapper/system/THouseMapper.xml b/ruoyi-system/src/main/resources/mapper/system/THouseMapper.xml index d09143d..a4bb3e9 100644 --- a/ruoyi-system/src/main/resources/mapper/system/THouseMapper.xml +++ b/ruoyi-system/src/main/resources/mapper/system/THouseMapper.xml @@ -55,9 +55,11 @@ t3.room_number as roomNumber, t3.house_area as houseArea, t2.phone as loginAccount, + t2.id as tenantId, t2.id_card as idCard, t2.bank_number as bankNumber, t2.mail_address as mailAddress, + t2.tenant_attributes as tenantAttributes from t_contract t1 left join t_tenant t2 on t1.tenant_id = t2.id LEFT JOIN t_house t3 on t3.id = t1.house_id diff --git a/ruoyi-system/src/main/resources/mapper/system/TInformationMapper.xml b/ruoyi-system/src/main/resources/mapper/system/TInformationMapper.xml index c8aa23a..1137271 100644 --- a/ruoyi-system/src/main/resources/mapper/system/TInformationMapper.xml +++ b/ruoyi-system/src/main/resources/mapper/system/TInformationMapper.xml @@ -11,6 +11,7 @@ <result column="release_time" property="releaseTime" /> <result column="cover" property="cover" /> <result column="content" property="content" /> + <result column="brief_introduction" property="briefIntroduction" /> <result column="attachment" property="attachment" /> <result column="attachment_name" property="attachmentName" /> <result column="create_time" property="createTime" /> @@ -22,7 +23,7 @@ <!-- 通用查询结果列 --> <sql id="Base_Column_List"> - id, title_name, sort_by, info_source, release_time,cover, content, attachment,attachment_name, create_time, update_time, create_by, update_by, disabled + id, title_name, sort_by, info_source, release_time,cover, brief_introduction,content, attachment,attachment_name, create_time, update_time, create_by, update_by, disabled </sql> <select id="pageList" resultType="com.ruoyi.system.model.TInformation"> select diff --git a/ruoyi-system/src/main/resources/mapper/system/TItemTypeMapper.xml b/ruoyi-system/src/main/resources/mapper/system/TItemTypeMapper.xml index 4f0c44e..c92258e 100644 --- a/ruoyi-system/src/main/resources/mapper/system/TItemTypeMapper.xml +++ b/ruoyi-system/src/main/resources/mapper/system/TItemTypeMapper.xml @@ -26,11 +26,19 @@ ORDER BY sort_by,create_time DESC </select> <select id="getItemList" resultType="com.ruoyi.system.vo.TItemTypeVO"> - select - <include refid="Base_Column_List"/> + select <include refid="Base_Column_List"></include> from t_item_type - where disabled = ${@com.ruoyi.common.enums.DisabledEnum@NO.getCode()} - ORDER BY sort_by,create_time DESC + where id in ( + select + tit.id + from t_item_type tit + left join t_item ti on tit.id = ti.type_id + where tit.disabled = ${@com.ruoyi.common.enums.DisabledEnum@NO.getCode()} + <if test="itemName != null and itemName != ''"> + and ti.item_name like concat('%', #{itemName}, '%') + </if> + GROUP BY tit.id + ORDER BY tit.sort_by,tit.create_time DESC) </select> </mapper> diff --git a/ruoyi-system/src/main/resources/mapper/system/TTenantMapper.xml b/ruoyi-system/src/main/resources/mapper/system/TTenantMapper.xml index 4e23099..112f54f 100644 --- a/ruoyi-system/src/main/resources/mapper/system/TTenantMapper.xml +++ b/ruoyi-system/src/main/resources/mapper/system/TTenantMapper.xml @@ -43,5 +43,74 @@ </where> ORDER BY create_time DESC </select> + <select id="pageListApplet" resultType="com.ruoyi.system.vo.TenantVO"> + SELECT id, resident_name, checkIn_time, tenant_attributes, tenant_type, phone, id_card, email, + bank_number, mail_address, create_time, disabled,account + FROM t_tenant + <where> + <if test="query.residentNameOrPhone != null and query.residentNameOrPhone != ''"> + AND (resident_name LIKE concat('%',#{query.residentNameOrPhone},'%')or phone LIKE concat('%',#{query.residentNameOrPhone},'%')) + </if> + AND disabled = ${@com.ruoyi.common.enums.DisabledEnum@NO.getCode()} + </where> + ORDER BY create_time DESC + </select> + <select id="listBill" resultType="com.ruoyi.system.vo.TBillVO"> + select t1.* from + t_bill t1 + where 1=1 + <if test="query.payFeesStatus != null and query.payFeesStatus != ''"> + AND t1.pay_fees_status = #{query.payFeesStatus} + </if> + <if test="null != query.contractIds and query.contractIds.size() > 0"> + and t1.contract_id in + <foreach collection="query.contractIds" item="item" index="index" open="(" separator="," close=")"> + #{item} + </foreach> + </if> + AND t1.disabled = ${@com.ruoyi.common.enums.DisabledEnum@NO.getCode()} + </select> + <select id="examineList" resultType="com.ruoyi.system.vo.ExamineVO"> + select t1.* from t_contract t1 + <where> + <if test="query.status == 1"> + AND t1.status = 2 + </if> + <if test="query.status == 2"> + AND (t1.status !=1 and t1.status !=2) + </if> + <if test="query.status == 3"> + AND t1.create_by = #{query.userName} + </if> + <if test="query.time != null and query.time != ''"> + <choose> + <when test="query.time == 1"> + AND t1.create_time >= DATE_SUB(NOW(), INTERVAL 1 DAY) + </when> + <when test="query.time == 2"> + AND t1.create_time >= DATE_SUB(NOW(), INTERVAL 7 DAY) + </when> + <when test="query.time == 3"> + AND t1.create_time >= DATE_SUB(NOW(), INTERVAL 30 DAY) + </when> + </choose> + </if> + </where> + <choose> + <when test="query.sort != null and query.sort != ''"> + <choose> + <when test="query.sort == 1"> + ORDER BY t1.create_time DESC + </when> + <when test="query.sort == 2"> + ORDER BY t1.create_time ASC + </when> + </choose> + </when> + <otherwise> + ORDER BY t1.create_time DESC + </otherwise> + </choose> + </select> </mapper> -- Gitblit v1.7.1