yupeng
2025-01-24 95985b5a5bb7c5656098cc8923ed3d1d8aaa3d2b
Merge remote-tracking branch 'origin/master' into xizang-changyun

# Conflicts:
# ruoyi-admin/src/main/java/com/ruoyi/web/controller/api/TContractController.java
1个文件已删除
28个文件已修改
7个文件已添加
923 ■■■■ 已修改文件
ruoyi-admin/src/main/java/com/ruoyi/web/controller/api/COSController.java 48 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-admin/src/main/java/com/ruoyi/web/controller/api/OssController.java 51 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-admin/src/main/java/com/ruoyi/web/controller/api/TContractController.java 126 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-admin/src/main/java/com/ruoyi/web/controller/api/THouseController.java 29 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-admin/src/main/java/com/ruoyi/web/controller/api/TTenantController.java 34 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-admin/src/main/java/com/ruoyi/web/controller/system/SysUserController.java 15 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-admin/src/main/java/com/ruoyi/web/controller/tool/TencentCosUtil.java 161 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-admin/src/main/resources/application-prod.yml 8 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-admin/src/main/resources/application-test.yml 8 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-admin/src/main/resources/mybatis-config.xml 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-common/src/main/java/com/ruoyi/common/constant/DictConstants.java 18 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-system/pom.xml 6 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-system/src/main/java/com/ruoyi/system/dto/TContractDTO.java 29 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-system/src/main/java/com/ruoyi/system/mapper/SysDictDataMapper.java 5 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-system/src/main/java/com/ruoyi/system/mapper/TContractMapper.java 6 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-system/src/main/java/com/ruoyi/system/mapper/TTenantMapper.java 3 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-system/src/main/java/com/ruoyi/system/model/TBill.java 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-system/src/main/java/com/ruoyi/system/model/TContract.java 12 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-system/src/main/java/com/ruoyi/system/model/TContractRentType.java 7 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-system/src/main/java/com/ruoyi/system/model/THouse.java 3 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-system/src/main/java/com/ruoyi/system/model/TInvoice.java 4 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-system/src/main/java/com/ruoyi/system/model/TTenant.java 20 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-system/src/main/java/com/ruoyi/system/query/TContractQuery.java 19 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-system/src/main/java/com/ruoyi/system/query/TTenantQuery.java 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-system/src/main/java/com/ruoyi/system/service/TContractService.java 3 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-system/src/main/java/com/ruoyi/system/service/TTenantService.java 3 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-system/src/main/java/com/ruoyi/system/service/impl/TContractServiceImpl.java 13 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-system/src/main/java/com/ruoyi/system/service/impl/THouseServiceImpl.java 18 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-system/src/main/java/com/ruoyi/system/service/impl/TTenantServiceImpl.java 13 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-system/src/main/java/com/ruoyi/system/vo/TContractVO.java 35 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-system/src/main/java/com/ruoyi/system/vo/TenantVO.java 21 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-system/src/main/resources/mapper/system/SysDictDataMapper.xml 3 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-system/src/main/resources/mapper/system/SysUserMapper.xml 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-system/src/main/resources/mapper/system/TContractMapper.xml 17 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-system/src/main/resources/mapper/system/TTenantMapper.xml 18 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
sql/xizang.sql 159 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-admin/src/main/java/com/ruoyi/web/controller/api/COSController.java
New file
@@ -0,0 +1,48 @@
package com.ruoyi.web.controller.api;
import com.ruoyi.common.core.domain.R;
import com.ruoyi.web.controller.tool.TencentCosUtil;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiImplicitParam;
import io.swagger.annotations.ApiImplicitParams;
import io.swagger.annotations.ApiOperation;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.RestController;
import org.springframework.web.multipart.MultipartFile;
import javax.annotation.Resource;
import java.io.OutputStream;
/**
 * @author HJL
 * @version 1.0
 * @since 2024-05-30 9:27
 */
@RestController
@RequestMapping("/cos")
@Api(tags = "公共-文件上传")
public class COSController {
    @Resource
    private TencentCosUtil tencentCosUtil;
    @PostMapping("/upload")
    @ApiOperation(value = "文件上传", tags = "公共-文件上传")
    @ApiImplicitParams({
            @ApiImplicitParam(value = "文件", name = "file", dataType = "MultipartFile", required = true)
    })
    public R<String> upload(@RequestParam("file") MultipartFile file) {
        String url = tencentCosUtil.upLoadFile(file);
        return R.ok(url, url);
    }
    @PostMapping("/download")
    @ApiOperation(value = "文件下载", tags = "公共-文件下载")
    @ApiImplicitParams({
            @ApiImplicitParam(value = "文件url", name = "url", dataType = "String", required = true)
    })
    public void upload(@RequestParam("url") String url) {
        tencentCosUtil.downLoadFile(url);
    }
}
ruoyi-admin/src/main/java/com/ruoyi/web/controller/api/OssController.java
File was deleted
ruoyi-admin/src/main/java/com/ruoyi/web/controller/api/TContractController.java
@@ -1,22 +1,37 @@
package com.ruoyi.web.controller.api;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
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.R;
import com.ruoyi.common.enums.BusinessType;
import com.ruoyi.common.utils.StringUtils;
import com.ruoyi.system.dto.TContractDTO;
import com.ruoyi.system.dto.THouseDTO;
import com.ruoyi.system.model.TContract;
import com.ruoyi.system.model.TContractRentType;
import com.ruoyi.system.model.THouse;
import com.ruoyi.system.query.TContractQuery;
import com.ruoyi.system.query.THouseQuery;
import com.ruoyi.system.query.TUserHistoryQuery;
import com.ruoyi.system.service.TContractRentTypeService;
import com.ruoyi.system.service.TContractService;
import com.ruoyi.system.service.THouseService;
import com.ruoyi.system.vo.HouseVO;
import io.swagger.annotations.Api;
import com.ruoyi.system.vo.TContractVO;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import org.springframework.beans.BeanUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.validation.annotation.Validated;
import org.springframework.web.bind.annotation.*;
import java.time.LocalDateTime;
import java.util.Arrays;
import java.util.List;
/**
 * <p>
@@ -32,39 +47,82 @@
public class TContractController {
    @Autowired
    private TContractService contractService;
//    @Log(title = "房屋基础信息管理-新增房屋", businessType = BusinessType.INSERT)
//    @ApiOperation(value = "新增房屋")
//    @PostMapping(value = "/addHouse")
//    public AjaxResult<Boolean> addHouse(@Validated @RequestBody THouseDTO dto) {
//        return AjaxResult.success(contractService.save(dto));
//    }
//    @Log(title = "房屋基础信息管理-编辑房屋", businessType = BusinessType.UPDATE)
//    @ApiOperation(value = "编辑房屋")
//    @PostMapping(value = "/updateHouse")
//    public AjaxResult<Boolean> updateHouse(@Validated @RequestBody THouseDTO dto) {
//        return AjaxResult.success(contractService.updateById(dto));
//    }
//    @Log(title = "房屋基础信息管理-查询房屋信息", businessType = BusinessType.DELETE)
//    @ApiOperation(value = "查询房屋信息")
//    @GetMapping(value = "/getHouseById")
//    public AjaxResult<THouse> getHouseById(@RequestParam Long id) {
//        return AjaxResult.success(contractService.getById(id));
//    }
//    @Log(title = "房屋基础信息管理-删除房屋", businessType = BusinessType.DELETE)
//    @ApiOperation(value = "删除房屋")
//    @DeleteMapping(value = "/deleteHouseById")
//    public AjaxResult<Boolean> deleteHouseById(@RequestParam Long id) {
//        return AjaxResult.success(contractService.removeById(id));
//    }
//    @ApiOperation(value = "获取房屋分页列表")
//    @PostMapping(value = "/houseList")
//    public AjaxResult<PageInfo<THouse>> houseList(@RequestBody THouseQuery query) {
//        return AjaxResult.success(contractService.houseList(query));
//    }
//    @ApiOperation(value = "历史租户列表")
//    @PostMapping(value = "/userHistoryList")
//    public AjaxResult<PageInfo<HouseVO>> userHistoryList(@RequestBody TUserHistoryQuery query) {
//        return AjaxResult.success(contractService.userHistoryList(query));
//    }
    @Autowired
    private TContractRentTypeService contractRentTypeService;
    @Autowired
    private THouseService houseService;
    @ApiOperation(value = "获取合同分页列表")
    @PostMapping(value = "/contractList")
    public R<PageInfo<TContract>> contractList(@RequestBody TContractQuery query) {
        return R.ok(contractService.contractList(query));
    }
    @Log(title = "合同管理-新增合同", businessType = BusinessType.INSERT)
    @ApiOperation(value = "新增合同")
    @PostMapping(value = "/addContract")
    public R<Boolean> addContract(@Validated @RequestBody TContractDTO dto) {
        contractService.save(dto);
        if (dto.getIsIncreasing()==1){
            TContractRentType tContractRentType = new TContractRentType();
            tContractRentType.setContractId(dto.getId());
            tContractRentType.setIncreasingDecreasing(dto.getIncreasingDecreasing());
            tContractRentType.setIncreasingDecreasingType(dto.getIncreasingDecreasingType());
            tContractRentType.setNumericalValue(dto.getNumericalValue());
            tContractRentType.setChangeTime(dto.getChangeTime());
            contractRentTypeService.save(tContractRentType);
        }
        return R.ok();
    }
    @Log(title = "合同管理-编辑合同", businessType = BusinessType.UPDATE)
    @ApiOperation(value = "编辑合同")
    @PostMapping(value = "/updateContract")
    public R<Boolean> updateContract(@Validated @RequestBody TContractDTO dto) {
        contractService.updateById(dto);
        contractRentTypeService.remove(new LambdaQueryWrapper<TContractRentType>()
                .eq(TContractRentType::getContractId,dto.getId()));
        if (dto.getIsIncreasing()==1){
            TContractRentType tContractRentType = new TContractRentType();
            tContractRentType.setContractId(dto.getId());
            tContractRentType.setIncreasingDecreasing(dto.getIncreasingDecreasing());
            tContractRentType.setIncreasingDecreasingType(dto.getIncreasingDecreasingType());
            tContractRentType.setNumericalValue(dto.getNumericalValue());
            tContractRentType.setChangeTime(dto.getChangeTime());
            contractRentTypeService.save(tContractRentType);
        }
        return R.ok();
    }
    @Log(title = "合同管理-批量删除合同", businessType = BusinessType.DELETE)
    @ApiOperation(value = "批量删除合同")
    @DeleteMapping(value = "/deleteContractByIds")
    public R<Boolean> deleteContractByIds3
            (@RequestParam String ids) {
        if (StringUtils.isNotEmpty(ids)){
            contractService.removeBatchByIds(Arrays.asList(ids.split(",")));
        }
        return R.ok();
    }
    @ApiOperation(value = "查询合同信息信息")
    @GetMapping(value = "/getContractById")
    public R<TContractVO> getContractById(@RequestParam String id) {
        TContractVO res = new TContractVO();
        TContract contract = contractService.getById(id);
        BeanUtils.copyProperties(contract,res);
        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);
        return R.ok(res);
    }
}
ruoyi-admin/src/main/java/com/ruoyi/web/controller/api/THouseController.java
@@ -3,7 +3,8 @@
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.R;
import com.ruoyi.common.core.domain.R;
import com.ruoyi.common.enums.BusinessType;
import com.ruoyi.system.dto.THouseDTO;
import com.ruoyi.system.dto.TTenantDTO;
@@ -14,6 +15,7 @@
import com.ruoyi.system.query.TUserHistoryQuery;
import com.ruoyi.system.service.THouseService;
import com.ruoyi.system.vo.HouseVO;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.validation.annotation.Validated;
@@ -27,6 +29,7 @@
 * @author xiaochen
 * @since 2025-01-17
 */
@Api(tags = "房屋基础信息管理")
@RestController
@RequestMapping("/t-house")
public class THouseController {
@@ -35,36 +38,36 @@
    @Log(title = "房屋基础信息管理-新增房屋", businessType = BusinessType.INSERT)
    @ApiOperation(value = "新增房屋")
    @PostMapping(value = "/addHouse")
    public AjaxResult<Boolean> addHouse(@Validated @RequestBody THouseDTO dto) {
        return AjaxResult.success(tHouseService.save(dto));
    public R<Boolean> addHouse(@Validated @RequestBody THouseDTO dto) {
        return R.ok(tHouseService.save(dto));
    }
    @Log(title = "房屋基础信息管理-编辑房屋", businessType = BusinessType.UPDATE)
    @ApiOperation(value = "编辑房屋")
    @PostMapping(value = "/updateHouse")
    public AjaxResult<Boolean> updateHouse(@Validated @RequestBody THouseDTO dto) {
        return AjaxResult.success(tHouseService.updateById(dto));
    public R<Boolean> updateHouse(@Validated @RequestBody THouseDTO dto) {
        return R.ok(tHouseService.updateById(dto));
    }
    @Log(title = "房屋基础信息管理-查询房屋信息", businessType = BusinessType.DELETE)
    @ApiOperation(value = "查询房屋信息")
    @GetMapping(value = "/getHouseById")
    public AjaxResult<THouse> getHouseById(@RequestParam Long id) {
        return AjaxResult.success(tHouseService.getById(id));
    public R<THouse> getHouseById(@RequestParam String id) {
        return R.ok(tHouseService.getById(id));
    }
    @Log(title = "房屋基础信息管理-删除房屋", businessType = BusinessType.DELETE)
    @ApiOperation(value = "删除房屋")
    @DeleteMapping(value = "/deleteHouseById")
    public AjaxResult<Boolean> deleteHouseById(@RequestParam Long id) {
        return AjaxResult.success(tHouseService.removeById(id));
    public R<Boolean> deleteHouseById(@RequestParam String id) {
        return R.ok(tHouseService.removeById(id));
    }
    @ApiOperation(value = "获取房屋分页列表")
    @PostMapping(value = "/houseList")
    public AjaxResult<PageInfo<THouse>> houseList(@RequestBody THouseQuery query) {
        return AjaxResult.success(tHouseService.houseList(query));
    public R<PageInfo<THouse>> houseList(@RequestBody THouseQuery query) {
        return R.ok(tHouseService.houseList(query));
    }
    @ApiOperation(value = "历史租户列表")
    @PostMapping(value = "/userHistoryList")
    public AjaxResult<PageInfo<HouseVO>> userHistoryList(@RequestBody TUserHistoryQuery query) {
        return AjaxResult.success(tHouseService.userHistoryList(query));
    public R<PageInfo<HouseVO>> userHistoryList(@RequestBody TUserHistoryQuery query) {
        return R.ok(tHouseService.userHistoryList(query));
    }
}
ruoyi-admin/src/main/java/com/ruoyi/web/controller/api/TTenantController.java
@@ -3,7 +3,7 @@
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.R;
import com.ruoyi.common.enums.BusinessType;
import com.ruoyi.common.utils.SecurityUtils;
import com.ruoyi.common.utils.StringUtils;
@@ -11,9 +11,11 @@
import com.ruoyi.system.model.TTenant;
import com.ruoyi.system.query.TTenantQuery;
import com.ruoyi.system.service.TTenantService;
import com.ruoyi.system.vo.TenantVO;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
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.*;
@@ -41,65 +43,71 @@
    /**
     * 获取租户管理列表
     */
    @PreAuthorize("@ss.hasPermi('system:tenant:list')")
    @ApiOperation(value = "获取租户分页列表")
    @PostMapping(value = "/pageList")
    public AjaxResult<PageInfo<TTenant>> pageList(@RequestBody TTenantQuery query) {
        return AjaxResult.success(tenantService.pageList(query));
    public R<PageInfo<TenantVO>> pageList(@RequestBody TTenantQuery query) {
        return R.ok(tenantService.pageList(query));
    }
    /**
     * 添加租户管理
     */
    @PreAuthorize("@ss.hasPermi('system:tenant:add')")
    @Log(title = "租户信息-新增租户", businessType = BusinessType.INSERT)
    @ApiOperation(value = "添加租户")
    @PostMapping(value = "/add")
    public AjaxResult<Boolean> add(@Validated @RequestBody TTenantDTO dto) {
    public R<Boolean> add(@Validated @RequestBody TTenantDTO dto) {
        // 密码加密
        dto.setPassword(SecurityUtils.encryptPassword(dto.getPassword()));
        return AjaxResult.success(tenantService.save(dto));
        return R.ok(tenantService.save(dto));
    }
    /**
     * 修改租户
     */
    @PreAuthorize("@ss.hasPermi('system:tenant:update')")
    @Log(title = "租户信息-修改租户", businessType = BusinessType.UPDATE)
    @ApiOperation(value = "修改租户")
    @PostMapping(value = "/update")
    public AjaxResult<Boolean> update(@Validated @RequestBody TTenantDTO dto) {
    public R<Boolean> update(@Validated @RequestBody TTenantDTO dto) {
        // 密码加密
        if(StringUtils.isNotBlank(dto.getPassword())){
            dto.setPassword(SecurityUtils.encryptPassword(dto.getPassword()));
        }
        return AjaxResult.success(tenantService.updateById(dto));
        return R.ok(tenantService.updateById(dto));
    }
    /**
     * 查看租户详情
     */
    @PreAuthorize("@ss.hasPermi('system:tenant:detail')")
    @ApiOperation(value = "查看租户详情")
    @GetMapping(value = "/getDetailById")
    public AjaxResult<TTenant> getDetailById(@RequestParam Long id) {
        return AjaxResult.success(tenantService.getById(id));
    public R<TTenant> getDetailById(@RequestParam String id) {
        return R.ok(tenantService.getById(id));
    }
    /**
     * 删除租户
     */
    @PreAuthorize("@ss.hasPermi('system:tenant:delete')")
    @Log(title = "租户信息-删除租户", businessType = BusinessType.DELETE)
    @ApiOperation(value = "删除租户")
    @DeleteMapping(value = "/deleteById")
    public AjaxResult<Boolean> deleteById(@RequestParam Long id) {
        return AjaxResult.success(tenantService.removeById(id));
    public R<Boolean> deleteById(@RequestParam String id) {
        return R.ok(tenantService.removeById(id));
    }
    /**
     * 批量删除租户
     */
    @PreAuthorize("@ss.hasPermi('system:tenant:delete')")
    @Log(title = "租户信息-删除租户", businessType = BusinessType.DELETE)
    @ApiOperation(value = "批量删除租户")
    @DeleteMapping(value = "/deleteByIds")
    public AjaxResult<Boolean> deleteByIds(@RequestBody List<Long> ids) {
        return AjaxResult.success(tenantService.removeByIds(ids));
    public R<Boolean> deleteByIds(@RequestBody List<String> ids) {
        return R.ok(tenantService.removeByIds(ids));
    }
}
ruoyi-admin/src/main/java/com/ruoyi/web/controller/system/SysUserController.java
@@ -194,6 +194,21 @@
        return AjaxResult.success(sysUser);
    }
    /**
     * 获取用户详情
     */
    @ApiOperation(value = "获取用户详情")
    @GetMapping("/queryDetail")
    public AjaxResult queryDetail()
    {
        Long userId = tokenService.getLoginUser().getUserId();
        SysUser sysUser = userService.selectUserById(userId);
        SysUserVO sysUserVO = new SysUserVO();
        BeanUtils.copyProperties(sysUser,sysUserVO);
        return AjaxResult.success(sysUser);
    }
    /**
     * 获取用户数量统计
ruoyi-admin/src/main/java/com/ruoyi/web/controller/tool/TencentCosUtil.java
New file
@@ -0,0 +1,161 @@
package com.ruoyi.web.controller.tool;
import com.qcloud.cos.COSClient;
import com.qcloud.cos.ClientConfig;
import com.qcloud.cos.auth.BasicCOSCredentials;
import com.qcloud.cos.auth.COSCredentials;
import com.qcloud.cos.exception.CosClientException;
import com.qcloud.cos.exception.CosServiceException;
import com.qcloud.cos.http.HttpProtocol;
import com.qcloud.cos.model.COSObject;
import com.qcloud.cos.model.GetObjectRequest;
import com.qcloud.cos.model.ObjectMetadata;
import com.qcloud.cos.model.PutObjectResult;
import com.qcloud.cos.region.Region;
import com.qcloud.cos.utils.IOUtils;
import com.ruoyi.common.utils.WebUtils;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Component;
import org.springframework.web.multipart.MultipartFile;
import javax.servlet.ServletOutputStream;
import javax.servlet.http.HttpServletResponse;
import java.io.ByteArrayOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.util.UUID;
/**
 * @author HJL
 */
@Component
public class TencentCosUtil {
    /**
     * COS的SecretId
     */
    @Value("${cos.client.accessKey}")
    private String secretId;
    /**
     * COS的SecretKey
     */
    @Value("${cos.client.secretKey}")
    private String secretKey;
    /**
     * 文件上传后访问路径的根路径,后面要最佳文件名字与类型
     */
    @Value("${cos.client.rootSrc}")
    private String rootSrc;
    /**
     * 上传的存储桶的地域
     */
    @Value("${cos.client.bucketAddr}")
    private String bucketAddr;
    /**
     * 存储桶的名字,是自己在存储空间自己创建的,我创建的名字是:qq-test-1303******
     */
    @Value("${cos.client.bucket}")
    private String bucketName;
    /**
     * 文件存放位置
     */
    @Value("${cos.client.location}")
    private String location;
    /**
     * 1.调用静态方法getCosClient()就会获得COSClient实例
     * 2.本方法根据永久密钥初始化 COSClient的,官方是不推荐,官方推荐使用临时密钥,是可以限制密钥使用权限,创建cred时有些区别
     *
     * @return COSClient实例
     */
    private COSClient getCosClient() {
        // 1 初始化用户身份信息(secretId, secretKey)。
        COSCredentials cred = new BasicCOSCredentials(secretId, secretKey);
        // 2.1 设置存储桶的地域(上文获得)
        Region region = new Region(bucketAddr);
        ClientConfig clientConfig = new ClientConfig(region);
        // 2.2 使用https协议传输
        clientConfig.setHttpProtocol(HttpProtocol.https);
        // 生成 cos 客户端
        return new COSClient(cred, clientConfig);
    }
    /**
     * 只要调用静态方法upLoadFile(MultipartFile multipartFile)就可以获取上传后文件的全路径
     *
     * @param file
     * @return 返回文件的浏览全路径
     */
    public String upLoadFile(MultipartFile file) {
        try {
            // 获取上传的文件的输入流
            InputStream inputStream = file.getInputStream();
            // 避免文件覆盖,获取文件的原始名称,如123.jpg,然后通过截取获得文件的后缀,也就是文件的类型
            String originalFilename = file.getOriginalFilename();
            //获取文件的类型
            String fileType = originalFilename.substring(originalFilename.lastIndexOf("."));
            //使用UUID工具  创建唯一名称,放置文件重名被覆盖,在拼接上上命令获取的文件类型
            String fileName = UUID.randomUUID() + fileType;
            // 指定文件上传到 COS 上的路径,即对象键。最终文件会传到存储桶名字中的images文件夹下的fileName名字
            String key = location+"/" + fileName;
            // 创建上传Object的Metadata
            ObjectMetadata objectMetadata = new ObjectMetadata();
            // - 使用输入流存储,需要设置请求长度
            objectMetadata.setContentLength(inputStream.available());
            // - 设置缓存
            objectMetadata.setCacheControl("no-cache");
            // - 设置Content-Type
            objectMetadata.setContentType(fileType);
            //上传文件
            PutObjectResult putResult = getCosClient().putObject(bucketName, key, inputStream, objectMetadata);
            // 创建文件的网络访问路径
            String url = rootSrc + key;
            //关闭 cosClient,并释放 HTTP 连接的后台管理线程
            getCosClient().shutdown();
            return url;
        } catch (Exception e) {
            e.printStackTrace();
            // 发生IO异常、COS连接异常等,返回空
            return null;
        }
    }
    /**
     * 下载文件
     * @param file
     * @return
     */
    public void downLoadFile(String file) {
        HttpServletResponse response = WebUtils.response();
        String replace = file.replace(rootSrc, "");
        COSCredentials cred = new BasicCOSCredentials(
                secretId,
                secretKey);
        // 2.1 设置存储桶的地域(上文获得)
        Region region = new Region(bucketAddr);
        ClientConfig clientConfig = new ClientConfig(region);
        // 2.2 使用https协议传输
        clientConfig.setHttpProtocol(HttpProtocol.https);
        COSClient cosClient = new COSClient(cred, clientConfig);
        try {
            // 5. 下载文件并获取输入流
            InputStream inputStream = cosClient.getObject(bucketName, replace).getObjectContent();
            ServletOutputStream outputStream = response.getOutputStream();
            // 6. 处理输入流,例如读取内容或保存到本地文件
            // 这里仅作示例,实际应用中需要根据需求处理输入流
            byte[] buffer = new byte[1024];
            int len;
            while ((len = inputStream.read(buffer)) != -1) {
                // 处理读取到的数据
                outputStream.write(buffer, 0, len);
            }
        } catch (Exception e) {
            e.printStackTrace();
        } finally {
            // 7. 关闭输入流
            cosClient.shutdown();
        }
    }
//    https://xzgttest-1305134071.cos.ap-chengdu.myqcloud.com/xizang/e4ea88b8-5470-456e-bf97-75cf47f38e84.jpg
}
ruoyi-admin/src/main/resources/application-prod.yml
@@ -206,3 +206,11 @@
    accessKeySecret: 0SRb6XGkciQDPWn2rYqbJtq2qRMDY8
    signName: "四川金达通信工程"
    templateCode: "SMS_293985284"
cos:
  client:
    accessKey: AKIDCF5EF2c0DE1e5JK8r4EGJF4mNsMgp26x
    secretKey: lLl184rUyFOOE0d5KNGC3kmfNsCWk4GU
    bucket: xzgttest-1305134071
    bucketAddr: ap-chengdu
    rootSrc: https://xzgttest-1305134071.cos.ap-chengdu.myqcloud.com/
    location: xizang
ruoyi-admin/src/main/resources/application-test.yml
@@ -205,3 +205,11 @@
    accessKeySecret: 0SRb6XGkciQDPWn2rYqbJtq2qRMDY8
    signName: "四川金达通信工程"
    templateCode: "SMS_293985284"
cos:
  client:
    accessKey: AKIDCF5EF2c0DE1e5JK8r4EGJF4mNsMgp26x
    secretKey: lLl184rUyFOOE0d5KNGC3kmfNsCWk4GU
    bucket: xzgttest-1305134071
    bucketAddr: ap-chengdu
    rootSrc: https://xzgttest-1305134071.cos.ap-chengdu.myqcloud.com/
    location: xizang
ruoyi-admin/src/main/resources/mybatis-config.xml
@@ -10,7 +10,7 @@
        <setting name="cacheEnabled" value="true"/>
        <!-- 延迟加载的全局开关。当开启时,所有关联对象都会延迟加载。默认 false  -->
        <!-- <setting name="lazyLoadingEnabled" value="true"/> -->
        <setting name="mapUnderscoreToCamelCase" value="false"/><!--是否将map下划线方式转为驼峰式命名-->
        <setting name="mapUnderscoreToCamelCase" value="true"/><!--是否将map下划线方式转为驼峰式命名-->
        <!-- 当开启时,任何方法的调用都会加载该对象的所有属性。默认 false,可通过select标签的 fetchType来覆盖-->
        <!-- <setting name="aggressiveLazyLoading" value="false"/>-->
        <!--  Mybatis 创建具有延迟加载能力的对象所用到的代理工具,默认JAVASSIST -->
ruoyi-common/src/main/java/com/ruoyi/common/constant/DictConstants.java
New file
@@ -0,0 +1,18 @@
package com.ruoyi.common.constant;
/**
 * 缓存的key 常量
 *
 * @author ruoyi
 */
public class DictConstants
{
    /**
     * 租户属性
     */
    public static final String DICT_TYPE_TENANT_ATTRIBUTE = "t_tenant_attribute";
    /**
     * 租户类型
     */
    public static final String DICT_TYPE_TENANT_TYPE = "t_tenant_type";
}
ruoyi-system/pom.xml
@@ -16,7 +16,11 @@
    </description>
    <dependencies>
        <dependency>
            <groupId>com.qcloud</groupId>
            <artifactId>cos_api</artifactId>
            <version>5.6.227</version>
        </dependency>
        <!-- 通用工具-->
        <dependency>
            <groupId>com.ruoyi</groupId>
ruoyi-system/src/main/java/com/ruoyi/system/dto/TContractDTO.java
New file
@@ -0,0 +1,29 @@
package com.ruoyi.system.dto;
import com.baomidou.mybatisplus.annotation.TableField;
import com.fasterxml.jackson.annotation.JsonFormat;
import com.ruoyi.system.model.TContract;
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 = "合同新增编辑DTO")
public class TContractDTO extends TContract {
    @ApiModelProperty(value = "递增递减 1=递增 2=递减")
    private Integer increasingDecreasing;
    @ApiModelProperty(value = "递增递减形式 1=百分比 2=金额元")
    private Integer increasingDecreasingType;
    @ApiModelProperty(value = "数值")
    private BigDecimal numericalValue;
    @ApiModelProperty(value = "递增或递减时点")
    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
    private LocalDateTime changeTime;
}
ruoyi-system/src/main/java/com/ruoyi/system/mapper/SysDictDataMapper.java
@@ -1,6 +1,8 @@
package com.ruoyi.system.mapper;
import java.util.List;
import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Param;
import com.ruoyi.common.core.domain.entity.SysDictData;
@@ -9,6 +11,7 @@
 * 
 * @author ruoyi
 */
@Mapper
public interface SysDictDataMapper
{
    /**
@@ -92,4 +95,6 @@
     * @return 结果
     */
    public int updateDictDataType(@Param("oldDictType") String oldDictType, @Param("newDictType") String newDictType);
    public String selectDictDataByTypeAndValue(@Param("dictType")String dictType, @Param("dictValue")Integer dictValue);
}
ruoyi-system/src/main/java/com/ruoyi/system/mapper/TContractMapper.java
@@ -1,7 +1,12 @@
package com.ruoyi.system.mapper;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.ruoyi.common.basic.PageInfo;
import com.ruoyi.system.model.TContract;
import com.ruoyi.system.query.TContractQuery;
import org.apache.ibatis.annotations.Param;
import java.util.List;
/**
 * <p>
@@ -13,4 +18,5 @@
 */
public interface TContractMapper extends BaseMapper<TContract> {
    List<TContract> contractList(@Param("query") TContractQuery query, @Param("pageInfo") PageInfo<TContract> pageInfo);
}
ruoyi-system/src/main/java/com/ruoyi/system/mapper/TTenantMapper.java
@@ -4,6 +4,7 @@
import com.ruoyi.common.basic.PageInfo;
import com.ruoyi.system.model.TTenant;
import com.ruoyi.system.query.TTenantQuery;
import com.ruoyi.system.vo.TenantVO;
import org.apache.ibatis.annotations.Param;
import java.util.List;
@@ -24,7 +25,7 @@
     * @param pageInfo
     * @return
     */
    List<TTenant> pageList(@Param("query") TTenantQuery query, @Param("pageInfo")PageInfo<TTenant> pageInfo);
    List<TenantVO> pageList(@Param("query") TTenantQuery query, @Param("pageInfo")PageInfo<TenantVO> pageInfo);
}
ruoyi-system/src/main/java/com/ruoyi/system/model/TBill.java
@@ -42,7 +42,7 @@
    @ApiModelProperty(value = "应缴费")
    @TableField("payable_fees_money")
    private Double payableFeesMoney;
    private BigDecimal payableFeesMoney;
    @ApiModelProperty(value = "应缴费日期")
    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
ruoyi-system/src/main/java/com/ruoyi/system/model/TContract.java
@@ -61,7 +61,7 @@
    @TableField("deposit")
    private BigDecimal deposit;
    @ApiModelProperty(value = "租金支付方式 1=季付")
    @ApiModelProperty(value = "租金支付方式 1=月付 2=季付 3=年付")
    @TableField("pay_type")
    private Integer payType;
@@ -114,7 +114,7 @@
    @TableField("party_two_phone")
    private String partyTwoPhone;
    @ApiModelProperty(value = "合同附件")
    @ApiModelProperty(value = "合同附件,多个逗号拼接")
    @TableField("contract_file")
    private String contractFile;
@@ -122,8 +122,14 @@
    @TableField("remark")
    private String remark;
    @ApiModelProperty(value = "状态 1=待审批 2=未签订 3=已签订")
    @ApiModelProperty(value = "状态 1=待提交 2=待审批 3=未签订 4=已签订")
    @TableField("status")
    private Integer status;
    @ApiModelProperty(value = "内存大小多个文件逗号拼接")
    @TableField("memory")
    private Integer memory;
    @ApiModelProperty(value = "附件名称 逗号拼接")
    @TableField("contract_file_name")
    private Integer contractFileName;
}
ruoyi-system/src/main/java/com/ruoyi/system/model/TContractRentType.java
@@ -6,7 +6,9 @@
import com.baomidou.mybatisplus.annotation.TableField;
import java.io.Serializable;
import java.math.BigDecimal;
import java.time.LocalDateTime;
import com.fasterxml.jackson.annotation.JsonFormat;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
@@ -47,5 +49,10 @@
    @TableField("numerical_value")
    private BigDecimal numericalValue;
    @ApiModelProperty(value = "递增或递减时点")
    @TableField("change_time")
    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
    private LocalDateTime changeTime;
}
ruoyi-system/src/main/java/com/ruoyi/system/model/THouse.java
@@ -88,4 +88,7 @@
    @TableField("room_number")
    private String roomNumber;
    @ApiModelProperty(value = "住户类型 1月租 2季租 3年租")
    @TableField(exist = false)
    private Integer tenantType;
}
ruoyi-system/src/main/java/com/ruoyi/system/model/TInvoice.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.math.BigDecimal;
import java.time.LocalDateTime;
import com.baomidou.mybatisplus.annotation.TableField;
import java.io.Serializable;
@@ -39,7 +41,7 @@
    @ApiModelProperty(value = "金额")
    @TableField("invoice_money")
    private Double invoiceMoney;
    private BigDecimal invoiceMoney;
    @ApiModelProperty(value = "申请人")
    @TableField("apply_name")
ruoyi-system/src/main/java/com/ruoyi/system/model/TTenant.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;
@@ -43,9 +45,9 @@
    @ApiModelProperty(value = "入住时间")
    @NotNull(message = "入住时间不能为空")
    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
    @JsonFormat(pattern = "yyyy-MM-dd", timezone = "GMT+8")
    @TableField("checkIn_time")
    private LocalDateTime checkinTime;
    private LocalDate checkinTime;
    @ApiModelProperty(value = "租户属性")
    @TableField("tenant_attributes")
@@ -53,19 +55,7 @@
    @ApiModelProperty(value = "租户类型")
    @TableField("tenant_type")
    private Integer tenantType;
    @ApiModelProperty(value = "租户楼栋")
    @TableField("tenant_building")
    private String tenantBuilding;
    @ApiModelProperty(value = "房号")
    @TableField("room_number")
    private String roomNumber;
    @ApiModelProperty(value = "建筑面积")
    @TableField("building_area")
    private Integer buildingArea;
    private String tenantType;
    @ApiModelProperty(value = "联系电话")
    @NotBlank(message = "联系电话不能为空")
ruoyi-system/src/main/java/com/ruoyi/system/query/TContractQuery.java
New file
@@ -0,0 +1,19 @@
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 TContractQuery extends BasePage {
    @ApiModelProperty(value = "乙方名称")
    private String partyTwoName;
    @ApiModelProperty(value = "合同编号")
    private String contractNumber;
    @ApiModelProperty(value = "合同名称")
    private Integer contractName;
    @ApiModelProperty(value = "合同状态 1=待提交 2=待审批 3=未签订 4=已签订")
    private Integer status;
}
ruoyi-system/src/main/java/com/ruoyi/system/query/TTenantQuery.java
@@ -11,7 +11,7 @@
public class TTenantQuery extends BasePage {
    @ApiModelProperty(value = "租户姓名")
    private String tenantName;
    private String residentName;
    @ApiModelProperty(value = "联系电话")
    private String phone;
ruoyi-system/src/main/java/com/ruoyi/system/service/TContractService.java
@@ -1,7 +1,9 @@
package com.ruoyi.system.service;
import com.baomidou.mybatisplus.extension.service.IService;
import com.ruoyi.common.basic.PageInfo;
import com.ruoyi.system.model.TContract;
import com.ruoyi.system.query.TContractQuery;
/**
 * <p>
@@ -13,4 +15,5 @@
 */
public interface TContractService extends IService<TContract> {
    PageInfo<TContract> contractList(TContractQuery query);
}
ruoyi-system/src/main/java/com/ruoyi/system/service/TTenantService.java
@@ -4,6 +4,7 @@
import com.ruoyi.common.basic.PageInfo;
import com.ruoyi.system.model.TTenant;
import com.ruoyi.system.query.TTenantQuery;
import com.ruoyi.system.vo.TenantVO;
/**
 * <p>
@@ -20,5 +21,5 @@
     * @param query
     * @return
     */
    PageInfo<TTenant> pageList(TTenantQuery query);
    PageInfo<TenantVO> pageList(TTenantQuery query);
}
ruoyi-system/src/main/java/com/ruoyi/system/service/impl/TContractServiceImpl.java
@@ -1,10 +1,15 @@
package com.ruoyi.system.service.impl;
import com.ruoyi.common.basic.PageInfo;
import com.ruoyi.system.mapper.TContractMapper;
import com.ruoyi.system.model.TContract;
import com.ruoyi.system.model.TTenant;
import com.ruoyi.system.query.TContractQuery;
import com.ruoyi.system.service.TContractService;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import org.springframework.stereotype.Service;
import java.util.List;
/**
 * <p>
@@ -17,4 +22,12 @@
@Service
public class TContractServiceImpl extends ServiceImpl<TContractMapper, TContract> implements TContractService {
    @Override
    public PageInfo<TContract> contractList(TContractQuery query) {
        PageInfo<TContract> pageInfo = new PageInfo<>(query.getPageNum(), query.getPageSize());
        List<TContract> list = this.baseMapper.contractList(query,pageInfo);
        pageInfo.setRecords(list);
        return pageInfo;
    }
}
ruoyi-system/src/main/java/com/ruoyi/system/service/impl/THouseServiceImpl.java
@@ -1,7 +1,10 @@
package com.ruoyi.system.service.impl;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.ruoyi.common.basic.PageInfo;
import com.ruoyi.system.mapper.TContractMapper;
import com.ruoyi.system.mapper.THouseMapper;
import com.ruoyi.system.model.TContract;
import com.ruoyi.system.model.THouse;
import com.ruoyi.system.query.THouseQuery;
import com.ruoyi.system.query.TUserHistoryQuery;
@@ -10,6 +13,8 @@
import com.ruoyi.system.vo.HouseVO;
import org.springframework.stereotype.Service;
import javax.annotation.Resource;
import java.time.LocalDateTime;
import java.util.List;
/**
@@ -22,11 +27,22 @@
 */
@Service
public class THouseServiceImpl extends ServiceImpl<THouseMapper, THouse> implements THouseService {
    @Resource
    private TContractMapper contractMapper;
    @Override
    public PageInfo<THouse> houseList(THouseQuery query) {
        PageInfo<THouse> pageInfo = new PageInfo<>(query.getPageNum(), query.getPageSize());
        List<THouse> list = this.baseMapper.houseList(query,pageInfo);
        List<TContract> tContracts = contractMapper.selectList(new LambdaQueryWrapper<TContract>()
                .eq(TContract::getStatus, 4)
                .le(TContract::getStartTime, LocalDateTime.now())
                .ge(TContract::getEndTime, LocalDateTime.now()));
        for (THouse tHouse : list) {
            TContract tContract = tContracts.stream().filter(e -> e.getHouseId().equals(tHouse.getId())).findFirst().orElse(null);
            if (tContract!=null){
                tHouse.setTenantType(tContract.getPayType());
            }
        }
        pageInfo.setRecords(list);
        return pageInfo;
    }
ruoyi-system/src/main/java/com/ruoyi/system/service/impl/TTenantServiceImpl.java
@@ -1,12 +1,15 @@
package com.ruoyi.system.service.impl;
import com.ruoyi.common.basic.PageInfo;
import com.ruoyi.common.constant.DictConstants;
import com.ruoyi.common.utils.DictUtils;
import com.ruoyi.system.mapper.TTenantMapper;
import com.ruoyi.system.model.TTenant;
import com.ruoyi.system.query.TTenantQuery;
import com.ruoyi.system.service.TTenantService;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.ruoyi.system.vo.SysUserVO;
import com.ruoyi.system.vo.TenantVO;
import org.springframework.stereotype.Service;
import java.util.List;
@@ -23,9 +26,13 @@
public class TTenantServiceImpl extends ServiceImpl<TTenantMapper, TTenant> implements TTenantService {
    @Override
    public PageInfo<TTenant> pageList(TTenantQuery query) {
        PageInfo<TTenant> pageInfo = new PageInfo<>(query.getPageNum(), query.getPageSize());
        List<TTenant> list = this.baseMapper.pageList(query,pageInfo);
    public PageInfo<TenantVO> pageList(TTenantQuery query) {
        PageInfo<TenantVO> pageInfo = new PageInfo<>(query.getPageNum(), query.getPageSize());
        List<TenantVO> list = this.baseMapper.pageList(query,pageInfo);
        for (TenantVO tenantVO : list) {
            tenantVO.setTenantAttributesName(DictUtils.getDictLabel(DictConstants.DICT_TYPE_TENANT_ATTRIBUTE,tenantVO.getTenantAttributes()));
            tenantVO.setTenantTypeName(DictUtils.getDictLabel(DictConstants.DICT_TYPE_TENANT_TYPE,tenantVO.getTenantType()));
        }
        pageInfo.setRecords(list);
        return pageInfo;
    }
ruoyi-system/src/main/java/com/ruoyi/system/vo/TContractVO.java
New file
@@ -0,0 +1,35 @@
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 io.swagger.annotations.Api;
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 TContractVO extends TContract {
    @ApiModelProperty(value = "递增递减 1=递增 2=递减")
    private Integer increasingDecreasing;
    @ApiModelProperty(value = "递增递减形式 1=百分比 2=金额元")
    private Integer increasingDecreasingType;
    @ApiModelProperty(value = "数值")
    private BigDecimal numericalValue;
    @ApiModelProperty(value = "递增或递减时点")
    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
    private LocalDateTime changeTime;
    @ApiModelProperty(value = "房屋信息")
    private THouse house;
}
ruoyi-system/src/main/java/com/ruoyi/system/vo/TenantVO.java
New file
@@ -0,0 +1,21 @@
package com.ruoyi.system.vo;
import com.fasterxml.jackson.annotation.JsonFormat;
import com.ruoyi.system.model.TTenant;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import java.time.LocalDateTime;
@Data
@ApiModel(value = "租户列表VO")
public class TenantVO extends TTenant {
    @ApiModelProperty(value = "租户属性")
    private String tenantAttributesName;
    @ApiModelProperty(value = "租户类型")
    private String tenantTypeName;
}
ruoyi-system/src/main/resources/mapper/system/SysDictDataMapper.xml
@@ -59,6 +59,9 @@
    <select id="countDictDataByType" resultType="Integer">
        select count(1) from sys_dict_data where dict_type=#{dictType}  
    </select>
    <select id="selectDictDataByTypeAndValue" resultType="java.lang.String">
        select dict_label from sys_dict_data where dict_type=#{dictType} and dict_value=#{dictValue}
    </select>
    
    <delete id="deleteDictDataById" parameterType="Long">
         delete from sys_dict_data where dict_code = #{dictCode}
ruoyi-system/src/main/resources/mapper/system/SysUserMapper.xml
@@ -137,7 +137,7 @@
        left join sys_user_role ur on u.user_id = ur.user_id
        left join sys_role sr on ur.role_id = sr.role_id
        left join sys_dept sd on u.dept_id = sd.dept_id
        where u.user_id = #{userId} and u.del_flag = 0 group by u.user_id
        where u.user_id = #{userId} and u.del_flag = 0
    </select>
    
    <select id="checkUserNameUnique" parameterType="String" resultMap="SysUserResult">
ruoyi-system/src/main/resources/mapper/system/TContractMapper.xml
@@ -38,5 +38,22 @@
    <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, proportion, house_id, party_one_name, party_one_person, party_one_phone, tenant_id, party_two_name, party_two_person, party_two_phone, contract_file, remark, status, create_time, update_time, create_by, update_by, disabled
    </sql>
    <select id="contractList" resultType="com.ruoyi.system.model.TContract">
        select t1.* from t_contract t1
        <where>
            <if test="query.partyTwoName != null and query.partyTwoName != ''">
                and t1.party_two_name like concat('%',#{query.partyTwoName},'%')
            </if>
            <if test="query.contractNumber != null and query.contractNumber != ''">
                and t1.contract_number like concat('%',#{query.contractNumber},'%')
            </if>
             <if test="query.contractName != null and query.contractName != ''">
                and t1.contract_name like concat('%',#{query.contractName},'%')
            </if>
            <if test="query.status != null">
                and t1.status = #{query.status}
            </if>
        </where>
    </select>
</mapper>
ruoyi-system/src/main/resources/mapper/system/TTenantMapper.xml
@@ -9,9 +9,6 @@
        <result column="checkIn_time" property="checkinTime" />
        <result column="tenant_attributes" property="tenantAttributes" />
        <result column="tenant_type" property="tenantType" />
        <result column="tenant_building" property="tenantBuilding" />
        <result column="room_number" property="roomNumber" />
        <result column="building_area" property="buildingArea" />
        <result column="phone" property="phone" />
        <result column="id_card" property="idCard" />
        <result column="email" property="email" />
@@ -28,18 +25,19 @@
    <!-- 通用查询结果列 -->
    <sql id="Base_Column_List">
        id, resident_name, checkIn_time, tenant_attributes, tenant_type, tenant_building, room_number, building_area, phone, id_card, email,
        id, resident_name, checkIn_time, tenant_attributes, tenant_type, phone, id_card, email,
            bank_number, mail_address, create_time, update_time, create_by, update_by, disabled,account,password
    </sql>
    <select id="pageList" resultType="com.ruoyi.system.model.TTenant">
        SELECT <include refid="Base_Column_List"/>
    <select id="pageList" 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="residentName != null and residentName != ''">
                AND resident_name LIKE concat('%',#{residentName},'%')
            <if test="query.residentName != null and query.residentName != ''">
                AND resident_name LIKE concat('%',#{query.residentName},'%')
            </if>
            <if test="phone != null and phone != ''">
                AND phone LIKE concat('%',#{phone},'%')
            <if test="query.phone != null and query.phone != ''">
                AND phone LIKE concat('%',#{query.phone},'%')
            </if>
            AND disabled = ${@com.ruoyi.common.enums.DisabledEnum@NO.getCode()}
        </where>
sql/xizang.sql
@@ -11,7 +11,7 @@
 Target Server Version : 80019
 File Encoding         : 65001
 Date: 20/01/2025 10:22:50
 Date: 21/01/2025 17:37:24
*/
SET NAMES utf8mb4;
@@ -235,7 +235,7 @@
  `update_time` datetime(0) NULL DEFAULT NULL COMMENT '更新时间',
  `remark` varchar(500) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '备注',
  PRIMARY KEY (`config_id`) USING BTREE
) ENGINE = InnoDB AUTO_INCREMENT = 6 CHARACTER SET = utf8mb4 COLLATE = utf8mb4_general_ci COMMENT = '参数配置表' ROW_FORMAT = Dynamic;
) ENGINE = InnoDB AUTO_INCREMENT = 100 CHARACTER SET = utf8mb4 COLLATE = utf8mb4_general_ci COMMENT = '参数配置表' ROW_FORMAT = Dynamic;
-- ----------------------------
-- Records of sys_config
@@ -268,7 +268,7 @@
  `update_by` varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT '' COMMENT '更新者',
  `update_time` datetime(0) NULL DEFAULT NULL COMMENT '更新时间',
  PRIMARY KEY (`dept_id`) USING BTREE
) ENGINE = InnoDB CHARACTER SET = utf8mb4 COLLATE = utf8mb4_general_ci COMMENT = '部门表' ROW_FORMAT = Dynamic;
) ENGINE = InnoDB AUTO_INCREMENT = 200 CHARACTER SET = utf8mb4 COLLATE = utf8mb4_general_ci COMMENT = '部门表' ROW_FORMAT = Dynamic;
-- ----------------------------
-- Records of sys_dept
@@ -304,7 +304,7 @@
  `update_time` datetime(0) NULL DEFAULT NULL COMMENT '更新时间',
  `remark` varchar(500) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '备注',
  PRIMARY KEY (`dict_code`) USING BTREE
) ENGINE = InnoDB AUTO_INCREMENT = 29 CHARACTER SET = utf8mb4 COLLATE = utf8mb4_general_ci COMMENT = '字典数据表' ROW_FORMAT = Dynamic;
) ENGINE = InnoDB AUTO_INCREMENT = 100 CHARACTER SET = utf8mb4 COLLATE = utf8mb4_general_ci COMMENT = '字典数据表' ROW_FORMAT = Dynamic;
-- ----------------------------
-- Records of sys_dict_data
@@ -338,6 +338,18 @@
INSERT INTO `sys_dict_data` VALUES (27, 9, '清空数据', '9', 'sys_oper_type', '', 'danger', 'N', '0', 'admin', '2023-10-02 14:09:11', '', NULL, '清空操作');
INSERT INTO `sys_dict_data` VALUES (28, 1, '成功', '0', 'sys_common_status', '', 'primary', 'N', '0', 'admin', '2023-10-02 14:09:11', '', NULL, '正常状态');
INSERT INTO `sys_dict_data` VALUES (29, 2, '失败', '1', 'sys_common_status', '', 'danger', 'N', '0', 'admin', '2023-10-02 14:09:11', '', NULL, '停用状态');
INSERT INTO `sys_dict_data` VALUES (30, 1, '个人', '1', 't_tenant_attribute', NULL, NULL, 'N', '0', 'admin', '2025-01-21 14:12:04', '', NULL, '属性个人');
INSERT INTO `sys_dict_data` VALUES (31, 2, '企业', '2', 't_tenant_attribute', NULL, NULL, 'N', '0', 'admin', '2025-01-21 14:12:04', '', NULL, '属性企业');
INSERT INTO `sys_dict_data` VALUES (32, 3, '联系人', '3', 't_tenant_attribute', NULL, NULL, 'N', '0', 'admin', '2025-01-21 14:12:04', '', NULL, '属性联系人');
INSERT INTO `sys_dict_data` VALUES (33, 4, '个体户', '4', 't_tenant_attribute', NULL, NULL, 'N', '0', 'admin', '2025-01-21 14:12:04', '', NULL, '属性个体户');
INSERT INTO `sys_dict_data` VALUES (34, 5, '政府机构', '5', 't_tenant_attribute', NULL, NULL, 'N', '0', 'admin', '2025-01-21 14:12:04', '', NULL, '属性政府机构');
INSERT INTO `sys_dict_data` VALUES (35, 6, '车主', '6', 't_tenant_attribute', NULL, NULL, 'N', '0', 'admin', '2025-01-21 14:12:04', '', NULL, '属性车主');
INSERT INTO `sys_dict_data` VALUES (36, 7, '国有企业', '7', 't_tenant_attribute', NULL, NULL, 'N', '0', 'admin', '2025-01-21 14:12:04', '', NULL, '属性国有企业');
INSERT INTO `sys_dict_data` VALUES (37, 8, '其他', '8', 't_tenant_attribute', NULL, NULL, 'N', '0', 'admin', '2025-01-21 14:12:04', '', NULL, '属性其他');
INSERT INTO `sys_dict_data` VALUES (38, 1, '业主', '1', 't_tenant_type', NULL, NULL, 'N', '0', 'admin', '2025-01-21 14:15:26', '', NULL, '类型业主');
INSERT INTO `sys_dict_data` VALUES (39, 2, '业主家庭成员', '2', 't_tenant_type', NULL, NULL, 'N', '0', 'admin', '2025-01-21 14:15:26', '', NULL, '类型业主家庭成员');
INSERT INTO `sys_dict_data` VALUES (40, 3, '租户', '3', 't_tenant_type', NULL, NULL, 'N', '0', 'admin', '2025-01-21 14:15:26', '', NULL, '类型租户');
INSERT INTO `sys_dict_data` VALUES (41, 4, '租户家庭成员', '4', 't_tenant_type', NULL, NULL, 'N', '0', 'admin', '2025-01-21 14:15:26', '', NULL, '类型租户家庭成员');
-- ----------------------------
-- Table structure for sys_dict_type
@@ -370,6 +382,8 @@
INSERT INTO `sys_dict_type` VALUES (8, '通知状态', 'sys_notice_status', '0', 'admin', '2023-10-02 14:09:11', '', NULL, '通知状态列表');
INSERT INTO `sys_dict_type` VALUES (9, '操作类型', 'sys_oper_type', '0', 'admin', '2023-10-02 14:09:11', '', NULL, '操作类型列表');
INSERT INTO `sys_dict_type` VALUES (10, '系统状态', 'sys_common_status', '0', 'admin', '2023-10-02 14:09:11', '', NULL, '登录状态列表');
INSERT INTO `sys_dict_type` VALUES (11, '租户属性', 't_tenant_attribute', '0', 'admin', '2025-01-21 14:05:14', '', NULL, '租户属性列表');
INSERT INTO `sys_dict_type` VALUES (12, '租户类别', 't_tenant_type', '0', 'admin', '2025-01-21 14:05:47', '', NULL, '租户类别列表');
-- ----------------------------
-- Table structure for sys_job
@@ -390,7 +404,7 @@
  `update_time` datetime(0) NULL DEFAULT NULL COMMENT '更新时间',
  `remark` varchar(500) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT '' COMMENT '备注信息',
  PRIMARY KEY (`job_id`, `job_name`, `job_group`) USING BTREE
) ENGINE = InnoDB AUTO_INCREMENT = 3 CHARACTER SET = utf8mb4 COLLATE = utf8mb4_general_ci COMMENT = '定时任务调度表' ROW_FORMAT = Dynamic;
) ENGINE = InnoDB AUTO_INCREMENT = 100 CHARACTER SET = utf8mb4 COLLATE = utf8mb4_general_ci COMMENT = '定时任务调度表' ROW_FORMAT = Dynamic;
-- ----------------------------
-- Records of sys_job
@@ -436,7 +450,7 @@
  PRIMARY KEY (`info_id`) USING BTREE,
  INDEX `idx_sys_logininfor_s`(`status`) USING BTREE,
  INDEX `idx_sys_logininfor_lt`(`login_time`) USING BTREE
) ENGINE = InnoDB AUTO_INCREMENT = 1199 CHARACTER SET = utf8mb4 COLLATE = utf8mb4_general_ci COMMENT = '系统访问记录' ROW_FORMAT = Dynamic;
) ENGINE = InnoDB AUTO_INCREMENT = 1273 CHARACTER SET = utf8mb4 COLLATE = utf8mb4_general_ci COMMENT = '系统访问记录' ROW_FORMAT = Dynamic;
-- ----------------------------
-- Records of sys_logininfor
@@ -1541,6 +1555,101 @@
INSERT INTO `sys_logininfor` VALUES (1197, '17780483325', '192.168.110.91', '内网IP', 'Mobile Safari', 'iOS 11 (iPhone)', '0', '登录成功', '2024-03-04 10:03:38');
INSERT INTO `sys_logininfor` VALUES (1198, '17780483325', '192.168.110.29', '内网IP', 'Chrome Mobile', 'Android 1.x', '0', '登录成功', '2024-03-04 10:19:27');
INSERT INTO `sys_logininfor` VALUES (1199, '17780483325', '192.168.110.29', '内网IP', 'Chrome Mobile', 'Android 1.x', '0', '登录成功', '2024-03-04 10:34:13');
INSERT INTO `sys_logininfor` VALUES (1200, 'admin', '192.168.110.10', '内网IP', 'Chrome 13', 'Windows 10', '1', '密码输入错误1次', '2025-01-20 17:46:06');
INSERT INTO `sys_logininfor` VALUES (1201, 'admin', '192.168.110.10', '内网IP', 'Chrome 13', 'Windows 10', '1', '用户不存在/密码错误', '2025-01-20 17:46:06');
INSERT INTO `sys_logininfor` VALUES (1202, 'admin', '192.168.110.10', '内网IP', 'Chrome 13', 'Windows 10', '0', '登录成功', '2025-01-20 17:47:51');
INSERT INTO `sys_logininfor` VALUES (1203, 'admin', '192.168.110.10', '内网IP', 'Chrome 13', 'Windows 10', '1', '密码输入错误1次', '2025-01-20 17:48:50');
INSERT INTO `sys_logininfor` VALUES (1204, 'admin', '192.168.110.10', '内网IP', 'Chrome 13', 'Windows 10', '1', '用户不存在/密码错误', '2025-01-20 17:48:50');
INSERT INTO `sys_logininfor` VALUES (1205, 'admin', '192.168.110.10', '内网IP', 'Chrome 13', 'Windows 10', '0', '登录成功', '2025-01-20 17:48:56');
INSERT INTO `sys_logininfor` VALUES (1206, 'admin', '192.168.110.10', '内网IP', 'Chrome 13', 'Windows 10', '0', '登录成功', '2025-01-20 17:49:19');
INSERT INTO `sys_logininfor` VALUES (1207, 'admin', '192.168.110.10', '内网IP', 'Chrome 13', 'Windows 10', '0', '登录成功', '2025-01-20 17:49:21');
INSERT INTO `sys_logininfor` VALUES (1208, 'admin', '192.168.110.10', '内网IP', 'Chrome 13', 'Windows 10', '0', '登录成功', '2025-01-20 17:49:35');
INSERT INTO `sys_logininfor` VALUES (1209, 'admin', '192.168.110.10', '内网IP', 'Chrome 13', 'Windows 10', '0', '登录成功', '2025-01-20 17:51:29');
INSERT INTO `sys_logininfor` VALUES (1210, 'admin', '192.168.110.10', '内网IP', 'Chrome 13', 'Windows 10', '0', '登录成功', '2025-01-20 17:51:32');
INSERT INTO `sys_logininfor` VALUES (1211, 'admin', '192.168.110.10', '内网IP', 'Chrome 13', 'Windows 10', '0', '登录成功', '2025-01-20 17:51:48');
INSERT INTO `sys_logininfor` VALUES (1212, 'admin', '192.168.110.10', '内网IP', 'Chrome 13', 'Windows 10', '1', '密码输入错误1次', '2025-01-20 17:52:06');
INSERT INTO `sys_logininfor` VALUES (1213, 'admin', '192.168.110.10', '内网IP', 'Chrome 13', 'Windows 10', '1', '用户不存在/密码错误', '2025-01-20 17:52:06');
INSERT INTO `sys_logininfor` VALUES (1214, 'admin', '192.168.110.10', '内网IP', 'Chrome 13', 'Windows 10', '0', '登录成功', '2025-01-20 17:52:10');
INSERT INTO `sys_logininfor` VALUES (1215, 'admin', '192.168.110.10', '内网IP', 'Chrome 13', 'Windows 10', '1', '用户不存在/密码错误', '2025-01-20 17:52:27');
INSERT INTO `sys_logininfor` VALUES (1216, 'admin', '192.168.110.10', '内网IP', 'Chrome 13', 'Windows 10', '1', '密码输入错误1次', '2025-01-20 17:52:27');
INSERT INTO `sys_logininfor` VALUES (1217, 'admin', '192.168.110.10', '内网IP', 'Chrome 13', 'Windows 10', '0', '登录成功', '2025-01-20 17:52:30');
INSERT INTO `sys_logininfor` VALUES (1218, 'admin', '192.168.110.10', '内网IP', 'Chrome 13', 'Windows 10', '0', '登录成功', '2025-01-20 17:53:47');
INSERT INTO `sys_logininfor` VALUES (1219, 'admin', '192.168.110.10', '内网IP', 'Chrome 13', 'Windows 10', '0', '登录成功', '2025-01-20 17:54:08');
INSERT INTO `sys_logininfor` VALUES (1220, 'admin', '192.168.110.10', '内网IP', 'Chrome 13', 'Windows 10', '0', '登录成功', '2025-01-20 17:54:54');
INSERT INTO `sys_logininfor` VALUES (1221, 'admin', '192.168.110.10', '内网IP', 'Chrome 13', 'Windows 10', '1', '密码输入错误1次', '2025-01-20 17:56:04');
INSERT INTO `sys_logininfor` VALUES (1222, 'admin', '192.168.110.10', '内网IP', 'Chrome 13', 'Windows 10', '1', '用户不存在/密码错误', '2025-01-20 17:56:04');
INSERT INTO `sys_logininfor` VALUES (1223, 'admin', '192.168.110.10', '内网IP', 'Chrome 13', 'Windows 10', '0', '登录成功', '2025-01-20 17:56:08');
INSERT INTO `sys_logininfor` VALUES (1224, 'admin', '192.168.110.10', '内网IP', 'Chrome 13', 'Windows 10', '0', '登录成功', '2025-01-20 17:56:52');
INSERT INTO `sys_logininfor` VALUES (1225, 'admin', '192.168.110.10', '内网IP', 'Chrome 13', 'Windows 10', '0', '登录成功', '2025-01-20 17:57:27');
INSERT INTO `sys_logininfor` VALUES (1226, 'admin', '192.168.110.10', '内网IP', 'Chrome 13', 'Windows 10', '0', '登录成功', '2025-01-20 17:59:48');
INSERT INTO `sys_logininfor` VALUES (1227, 'admin', '192.168.110.10', '内网IP', 'Chrome 13', 'Windows 10', '0', '登录成功', '2025-01-20 18:00:29');
INSERT INTO `sys_logininfor` VALUES (1228, 'admin', '192.168.110.10', '内网IP', 'Chrome 13', 'Windows 10', '0', '登录成功', '2025-01-20 18:00:44');
INSERT INTO `sys_logininfor` VALUES (1229, 'admin', '192.168.110.10', '内网IP', 'Chrome 13', 'Windows 10', '0', '登录成功', '2025-01-20 18:01:05');
INSERT INTO `sys_logininfor` VALUES (1230, 'admin', '192.168.110.10', '内网IP', 'Chrome 13', 'Windows 10', '0', '登录成功', '2025-01-20 18:01:20');
INSERT INTO `sys_logininfor` VALUES (1231, 'admin', '192.168.110.10', '内网IP', 'Chrome 13', 'Windows 10', '0', '登录成功', '2025-01-20 18:01:46');
INSERT INTO `sys_logininfor` VALUES (1232, 'admin', '192.168.110.10', '内网IP', 'Chrome 13', 'Windows 10', '0', '登录成功', '2025-01-20 18:02:04');
INSERT INTO `sys_logininfor` VALUES (1233, 'admin', '192.168.110.10', '内网IP', 'Chrome 13', 'Windows 10', '0', '登录成功', '2025-01-20 18:02:29');
INSERT INTO `sys_logininfor` VALUES (1234, 'admin', '192.168.110.10', '内网IP', 'Chrome 13', 'Windows 10', '0', '登录成功', '2025-01-20 18:02:46');
INSERT INTO `sys_logininfor` VALUES (1235, 'admin', '192.168.110.10', '内网IP', 'Chrome 13', 'Windows 10', '0', '登录成功', '2025-01-20 18:03:46');
INSERT INTO `sys_logininfor` VALUES (1236, 'admin', '192.168.110.10', '内网IP', 'Chrome 13', 'Windows 10', '0', '登录成功', '2025-01-20 18:04:02');
INSERT INTO `sys_logininfor` VALUES (1237, 'admin', '192.168.110.10', '内网IP', 'Chrome 13', 'Windows 10', '0', '登录成功', '2025-01-20 18:04:41');
INSERT INTO `sys_logininfor` VALUES (1238, 'admin', '192.168.110.10', '内网IP', 'Chrome 13', 'Windows 10', '0', '登录成功', '2025-01-20 18:04:52');
INSERT INTO `sys_logininfor` VALUES (1239, 'admin', '192.168.110.10', '内网IP', 'Chrome 13', 'Windows 10', '0', '登录成功', '2025-01-20 18:05:43');
INSERT INTO `sys_logininfor` VALUES (1240, 'admin', '192.168.110.10', '内网IP', 'Chrome 13', 'Windows 10', '0', '登录成功', '2025-01-20 18:05:55');
INSERT INTO `sys_logininfor` VALUES (1241, 'admin', '192.168.110.10', '内网IP', 'Chrome 13', 'Windows 10', '0', '登录成功', '2025-01-20 18:06:01');
INSERT INTO `sys_logininfor` VALUES (1242, 'admin', '192.168.110.10', '内网IP', 'Chrome 13', 'Windows 10', '0', '登录成功', '2025-01-20 18:06:30');
INSERT INTO `sys_logininfor` VALUES (1243, 'admin', '192.168.110.10', '内网IP', 'Chrome 13', 'Windows 10', '0', '登录成功', '2025-01-20 18:06:42');
INSERT INTO `sys_logininfor` VALUES (1244, 'admin', '192.168.110.10', '内网IP', 'Chrome 13', 'Windows 10', '0', '登录成功', '2025-01-20 18:08:52');
INSERT INTO `sys_logininfor` VALUES (1245, 'admin', '192.168.110.10', '内网IP', 'Chrome 13', 'Windows 10', '0', '登录成功', '2025-01-20 18:09:34');
INSERT INTO `sys_logininfor` VALUES (1246, 'admin', '192.168.110.10', '内网IP', 'Chrome 13', 'Windows 10', '0', '登录成功', '2025-01-20 18:10:06');
INSERT INTO `sys_logininfor` VALUES (1247, 'admin', '192.168.110.10', '内网IP', 'Chrome 13', 'Windows 10', '0', '登录成功', '2025-01-20 18:10:09');
INSERT INTO `sys_logininfor` VALUES (1248, 'admin', '192.168.110.10', '内网IP', 'Chrome 13', 'Windows 10', '0', '登录成功', '2025-01-20 18:10:17');
INSERT INTO `sys_logininfor` VALUES (1249, 'admin', '192.168.110.10', '内网IP', 'Chrome 13', 'Windows 10', '0', '登录成功', '2025-01-20 18:10:45');
INSERT INTO `sys_logininfor` VALUES (1250, 'admin', '192.168.110.10', '内网IP', 'Chrome 13', 'Windows 10', '0', '登录成功', '2025-01-20 18:11:13');
INSERT INTO `sys_logininfor` VALUES (1251, 'admin', '192.168.110.10', '内网IP', 'Chrome 13', 'Windows 10', '0', '登录成功', '2025-01-20 18:11:20');
INSERT INTO `sys_logininfor` VALUES (1252, 'admin', '192.168.110.10', '内网IP', 'Chrome 13', 'Windows 10', '0', '登录成功', '2025-01-20 18:12:41');
INSERT INTO `sys_logininfor` VALUES (1253, 'admin', '192.168.110.10', '内网IP', 'Chrome 13', 'Windows 10', '0', '登录成功', '2025-01-20 18:12:51');
INSERT INTO `sys_logininfor` VALUES (1254, 'admin', '192.168.110.10', '内网IP', 'Chrome 13', 'Windows 10', '0', '登录成功', '2025-01-20 18:13:43');
INSERT INTO `sys_logininfor` VALUES (1255, 'admin', '192.168.110.10', '内网IP', 'Chrome 13', 'Windows 10', '0', '登录成功', '2025-01-20 18:14:14');
INSERT INTO `sys_logininfor` VALUES (1256, 'admin', '192.168.110.10', '内网IP', 'Chrome 13', 'Windows 10', '0', '登录成功', '2025-01-20 18:16:44');
INSERT INTO `sys_logininfor` VALUES (1257, 'admin', '192.168.110.10', '内网IP', 'Chrome 13', 'Windows 10', '0', '登录成功', '2025-01-21 10:47:15');
INSERT INTO `sys_logininfor` VALUES (1258, 'admin', '192.168.110.10', '内网IP', 'Chrome 13', 'Windows 10', '0', '登录成功', '2025-01-21 11:08:28');
INSERT INTO `sys_logininfor` VALUES (1259, 'admin', '192.168.110.10', '内网IP', 'Chrome 13', 'Windows 10', '0', '登录成功', '2025-01-21 11:09:55');
INSERT INTO `sys_logininfor` VALUES (1260, 'admin', '192.168.110.103', '内网IP', 'Chrome 13', 'Windows 10', '0', '登录成功', '2025-01-21 11:20:23');
INSERT INTO `sys_logininfor` VALUES (1261, 'admin', '192.168.110.103', '内网IP', 'Chrome 13', 'Windows 10', '0', '登录成功', '2025-01-21 11:21:07');
INSERT INTO `sys_logininfor` VALUES (1262, 'admin', '192.168.110.103', '内网IP', 'Chrome 13', 'Windows 10', '0', '登录成功', '2025-01-21 11:24:52');
INSERT INTO `sys_logininfor` VALUES (1263, 'admin', '192.168.110.103', '内网IP', 'Chrome 13', 'Windows 10', '0', '登录成功', '2025-01-21 11:51:22');
INSERT INTO `sys_logininfor` VALUES (1264, 'admin', '192.168.110.103', '内网IP', 'Chrome 13', 'Windows 10', '0', '登录成功', '2025-01-21 11:57:01');
INSERT INTO `sys_logininfor` VALUES (1265, 'admin', '192.168.110.103', '内网IP', 'Chrome 13', 'Windows 10', '0', '登录成功', '2025-01-21 11:58:29');
INSERT INTO `sys_logininfor` VALUES (1266, 'admin', '192.168.110.103', '内网IP', 'Chrome 13', 'Windows 10', '0', '登录成功', '2025-01-21 11:59:22');
INSERT INTO `sys_logininfor` VALUES (1267, 'admin', '192.168.110.103', '内网IP', 'Chrome 13', 'Windows 10', '0', '登录成功', '2025-01-21 13:18:17');
INSERT INTO `sys_logininfor` VALUES (1268, 'admin', '192.168.110.103', '内网IP', 'Chrome 13', 'Windows 10', '0', '登录成功', '2025-01-21 13:24:19');
INSERT INTO `sys_logininfor` VALUES (1269, 'admin', '192.168.110.10', '内网IP', 'Chrome 13', 'Windows 10', '0', '登录成功', '2025-01-21 13:24:48');
INSERT INTO `sys_logininfor` VALUES (1270, 'admin', '192.168.110.103', '内网IP', 'Chrome 13', 'Windows 10', '0', '登录成功', '2025-01-21 13:25:00');
INSERT INTO `sys_logininfor` VALUES (1271, 'admin', '192.168.110.103', '内网IP', 'Chrome 13', 'Windows 10', '0', '登录成功', '2025-01-21 13:27:32');
INSERT INTO `sys_logininfor` VALUES (1272, 'admin', '192.168.110.103', '内网IP', 'Chrome 13', 'Windows 10', '0', '登录成功', '2025-01-21 13:28:40');
INSERT INTO `sys_logininfor` VALUES (1273, 'admin', '192.168.110.103', '内网IP', 'Chrome 13', 'Windows 10', '0', '登录成功', '2025-01-21 13:47:20');
INSERT INTO `sys_logininfor` VALUES (1274, 'admin', '192.168.110.103', '内网IP', 'Chrome 13', 'Windows 10', '0', '登录成功', '2025-01-21 13:55:52');
INSERT INTO `sys_logininfor` VALUES (1275, 'admin', '192.168.110.103', '内网IP', 'Chrome 13', 'Windows 10', '0', '登录成功', '2025-01-21 14:18:41');
INSERT INTO `sys_logininfor` VALUES (1276, 'admin', '192.168.110.103', '内网IP', 'Chrome 13', 'Windows 10', '0', '登录成功', '2025-01-21 14:22:44');
INSERT INTO `sys_logininfor` VALUES (1277, 'admin', '192.168.110.103', '内网IP', 'Chrome 13', 'Windows 10', '0', '登录成功', '2025-01-21 14:23:53');
INSERT INTO `sys_logininfor` VALUES (1278, 'admin', '192.168.110.103', '内网IP', 'Chrome 13', 'Windows 10', '0', '登录成功', '2025-01-21 14:30:34');
INSERT INTO `sys_logininfor` VALUES (1279, 'admin', '192.168.110.103', '内网IP', 'Chrome 13', 'Windows 10', '0', '登录成功', '2025-01-21 14:44:08');
INSERT INTO `sys_logininfor` VALUES (1280, 'admin', '192.168.110.103', '内网IP', 'Chrome 13', 'Windows 10', '0', '登录成功', '2025-01-21 14:45:20');
INSERT INTO `sys_logininfor` VALUES (1281, 'admin', '192.168.110.103', '内网IP', 'Chrome 13', 'Windows 10', '0', '登录成功', '2025-01-21 15:06:27');
INSERT INTO `sys_logininfor` VALUES (1282, 'admin', '192.168.110.103', '内网IP', 'Chrome 13', 'Windows 10', '0', '登录成功', '2025-01-21 15:07:13');
INSERT INTO `sys_logininfor` VALUES (1283, 'admin', '192.168.110.103', '内网IP', 'Chrome 13', 'Windows 10', '0', '登录成功', '2025-01-21 15:08:22');
INSERT INTO `sys_logininfor` VALUES (1284, 'admin', '192.168.110.103', '内网IP', 'Chrome 13', 'Windows 10', '0', '登录成功', '2025-01-21 15:09:26');
INSERT INTO `sys_logininfor` VALUES (1285, 'admin', '192.168.110.103', '内网IP', 'Chrome 13', 'Windows 10', '0', '登录成功', '2025-01-21 15:09:55');
INSERT INTO `sys_logininfor` VALUES (1286, 'admin', '192.168.110.103', '内网IP', 'Chrome 13', 'Windows 10', '0', '登录成功', '2025-01-21 15:11:01');
INSERT INTO `sys_logininfor` VALUES (1287, 'admin', '192.168.110.103', '内网IP', 'Chrome 13', 'Windows 10', '0', '登录成功', '2025-01-21 15:12:25');
INSERT INTO `sys_logininfor` VALUES (1288, 'admin', '192.168.110.103', '内网IP', 'Chrome 13', 'Windows 10', '0', '登录成功', '2025-01-21 15:13:00');
INSERT INTO `sys_logininfor` VALUES (1289, 'admin', '192.168.110.103', '内网IP', 'Chrome 13', 'Windows 10', '0', '登录成功', '2025-01-21 15:13:36');
INSERT INTO `sys_logininfor` VALUES (1290, 'admin', '192.168.110.103', '内网IP', 'Chrome 13', 'Windows 10', '0', '登录成功', '2025-01-21 15:14:17');
INSERT INTO `sys_logininfor` VALUES (1291, 'admin', '192.168.110.103', '内网IP', 'Chrome 13', 'Windows 10', '0', '登录成功', '2025-01-21 15:16:40');
INSERT INTO `sys_logininfor` VALUES (1292, 'admin', '192.168.110.103', '内网IP', 'Chrome 13', 'Windows 10', '0', '登录成功', '2025-01-21 15:17:16');
INSERT INTO `sys_logininfor` VALUES (1293, 'admin', '192.168.110.103', '内网IP', 'Chrome 13', 'Windows 10', '0', '登录成功', '2025-01-21 15:28:50');
INSERT INTO `sys_logininfor` VALUES (1294, 'admin', '192.168.110.103', '内网IP', 'Chrome 13', 'Windows 10', '0', '登录成功', '2025-01-21 15:39:35');
-- ----------------------------
-- Table structure for sys_menu
@@ -1567,7 +1676,7 @@
  `update_time` datetime(0) NULL DEFAULT NULL COMMENT '更新时间',
  `remark` varchar(500) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT '' COMMENT '备注',
  PRIMARY KEY (`menu_id`) USING BTREE
) ENGINE = InnoDB AUTO_INCREMENT = 54 CHARACTER SET = utf8mb4 COLLATE = utf8mb4_general_ci COMMENT = '菜单权限表' ROW_FORMAT = Dynamic;
) ENGINE = InnoDB AUTO_INCREMENT = 2008 CHARACTER SET = utf8mb4 COLLATE = utf8mb4_general_ci COMMENT = '菜单权限表' ROW_FORMAT = Dynamic;
-- ----------------------------
-- Records of sys_menu
@@ -4082,7 +4191,7 @@
  `removeDays` int(0) NULL DEFAULT NULL COMMENT '删除天数',
  `postType` int(0) NULL DEFAULT NULL COMMENT '岗位类型 1=经理 2=负责人 3=专员',
  PRIMARY KEY (`role_id`) USING BTREE
) ENGINE = InnoDB AUTO_INCREMENT = 122 CHARACTER SET = utf8mb4 COLLATE = utf8mb4_general_ci COMMENT = '角色信息表' ROW_FORMAT = Dynamic;
) ENGINE = InnoDB AUTO_INCREMENT = 123 CHARACTER SET = utf8mb4 COLLATE = utf8mb4_general_ci COMMENT = '角色信息表' ROW_FORMAT = Dynamic;
-- ----------------------------
-- Records of sys_role
@@ -4681,12 +4790,12 @@
  `districtId` int(0) NULL DEFAULT NULL COMMENT '区县id',
  `deptName` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '部门名称',
  PRIMARY KEY (`user_id`) USING BTREE
) ENGINE = InnoDB AUTO_INCREMENT = 151 CHARACTER SET = utf8mb4 COLLATE = utf8mb4_general_ci COMMENT = '用户信息表' ROW_FORMAT = Dynamic;
) ENGINE = InnoDB AUTO_INCREMENT = 152 CHARACTER SET = utf8mb4 COLLATE = utf8mb4_general_ci COMMENT = '用户信息表' ROW_FORMAT = Dynamic;
-- ----------------------------
-- Records of sys_user
-- ----------------------------
INSERT INTO `sys_user` VALUES (1, 100, 'admin', '若依', '00', 'ry@163.com', '15888888888', '1', 'https://we-park-life.oss-cn-beijing.aliyuncs.com/img/ebcc2c95e1504371a8b3f3b1167a03a0.jpg', '$2a$10$7JB720yubVSZvUI0rEqK/.VqGOZTH.ulu33dHOiBE8ByOhJIrdAu2', '0', '0', '192.168.110.6', '2024-03-04 09:33:39', 'admin', '2023-10-02 14:09:09', 'admin', '2024-03-04 09:33:38', '管理员', 0, 4, '测试部门');
INSERT INTO `sys_user` VALUES (1, 100, 'admin', '若依', '00', 'ry@163.com', '15888888888', '1', 'https://we-park-life.oss-cn-beijing.aliyuncs.com/img/ebcc2c95e1504371a8b3f3b1167a03a0.jpg', '$2a$10$7JB720yubVSZvUI0rEqK/.VqGOZTH.ulu33dHOiBE8ByOhJIrdAu2', '0', '0', '192.168.110.103', '2025-01-21 15:39:35', 'admin', '2023-10-02 14:09:09', 'admin', '2025-01-21 15:39:35', '管理员', 0, 4, '测试部门');
INSERT INTO `sys_user` VALUES (100, 3, '18008172471', '蒲悦添', '00', '', '18008172471', '0', 'https://we-park-life.oss-cn-beijing.aliyuncs.com/img/ebcc2c95e1504371a8b3f3b1167a03a0.jpg', '$2a$10$gL9RGP3b2d9YnmLxWm8GSu8XnvHDdJemGLgrslbe.hJPRKQ6Yk5jK', '0', '2', '', NULL, '若依', '2023-10-20 18:25:45', '若依', '2023-10-21 09:33:02', NULL, 0, 2, '测试部门');
INSERT INTO `sys_user` VALUES (101, 3, '18008172470', '蒲悦添', '00', '', '18008172470', '0', 'https://we-park-life.oss-cn-beijing.aliyuncs.com/img/ebcc2c95e1504371a8b3f3b1167a03a0.jpg', '$2a$10$PapRFYddk9FIcsKPJLFby.JKnRt2C1dngbr2EUiDgCNca8fxEfafi', '0', '2', '', NULL, '若依', '2023-10-20 18:27:54', '若依', '2023-10-21 09:33:00', 'string', 0, 2, '测试部门');
INSERT INTO `sys_user` VALUES (102, 3, '18008172471', '蒲悦添', '00', '', '18008172471', '0', 'https://we-park-life.oss-cn-beijing.aliyuncs.com/img/ebcc2c95e1504371a8b3f3b1167a03a0.jpg', '$2a$10$C6fSf7r6uZhWD8kc1nYoAO2oUlp3cFc.Q92Qqa8xQhueD74Ram/pG', '0', '2', '127.0.0.1', '2023-10-23 17:31:08', '若依', '2023-10-21 10:11:08', '蒲悦添', '2023-10-23 17:31:07', NULL, 0, 2, '测试部门');
@@ -4800,7 +4909,7 @@
  `actual_money` double(10, 2) NULL DEFAULT NULL COMMENT '实际收款',
  `voucher` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '凭证上传',
  `create_time` datetime(0) NULL DEFAULT CURRENT_TIMESTAMP(0) COMMENT '创建时间',
  `update_time` datetime(0) NULL DEFAULT NULL COMMENT '修改时间',
  `update_time` datetime(0) NULL DEFAULT NULL ON UPDATE CURRENT_TIMESTAMP(0) COMMENT '修改时间',
  `create_by` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '创建人',
  `update_by` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '修改人',
  `disabled` int(0) NULL DEFAULT 0 COMMENT '是否删除 0=否 1=是',
@@ -4832,7 +4941,7 @@
  `check_result` int(0) NULL DEFAULT NULL COMMENT '验收结果 1=合格 2=不合格',
  `check_money` double(10, 2) NULL DEFAULT NULL COMMENT '验收结算金额',
  `create_time` datetime(0) NULL DEFAULT CURRENT_TIMESTAMP(0) COMMENT '创建时间',
  `update_time` datetime(0) NULL DEFAULT NULL COMMENT '修改时间',
  `update_time` datetime(0) NULL DEFAULT NULL ON UPDATE CURRENT_TIMESTAMP(0) COMMENT '修改时间',
  `create_by` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '创建人',
  `update_by` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '修改人',
  `disabled` int(0) NULL DEFAULT 0 COMMENT '是否删除 0=否 1=是',
@@ -4868,11 +4977,11 @@
  `party_two_name` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '乙方名称',
  `party_two_person` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '乙方联系人',
  `party_two_phone` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '乙方联系方式',
  `contract_file` text CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL COMMENT '合同附件',
  `contract_file` longtext CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL COMMENT '合同附件',
  `remark` text CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL COMMENT '备注',
  `status` int(0) NULL DEFAULT 1 COMMENT '状态 1=待审批 2=未签订 3=已签订',
  `create_time` datetime(0) NULL DEFAULT CURRENT_TIMESTAMP(0) COMMENT '创建时间',
  `update_time` datetime(0) NULL DEFAULT NULL COMMENT '修改时间',
  `update_time` datetime(0) NULL DEFAULT NULL ON UPDATE CURRENT_TIMESTAMP(0) COMMENT '修改时间',
  `create_by` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '创建人',
  `update_by` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '修改人',
  `disabled` int(0) NULL DEFAULT 0 COMMENT '是否删除 0=否 1=是',
@@ -4948,12 +5057,12 @@
  `leave_message` text CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL COMMENT '留言',
  `handle_person` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '处理人',
  `handle_time` datetime(0) NULL DEFAULT NULL COMMENT '处理时间',
  `reault_describe` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '结果描述',
  `result_describe` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '结果描述',
  `repair_picture` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '处理照片',
  `attachment` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '附件',
  `status` int(0) NULL DEFAULT 1 COMMENT '状态 1=待处理 2=已处理',
  `create_time` datetime(0) NULL DEFAULT CURRENT_TIMESTAMP(0) COMMENT '创建时间',
  `update_time` datetime(0) NULL DEFAULT NULL COMMENT '修改时间',
  `update_time` datetime(0) NULL DEFAULT NULL ON UPDATE CURRENT_TIMESTAMP(0) COMMENT '修改时间',
  `create_by` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '创建人',
  `update_by` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '修改人',
  `disabled` int(0) NULL DEFAULT 0 COMMENT '是否删除 0=否 1=是',
@@ -4982,7 +5091,7 @@
  `pay_type` int(0) NULL DEFAULT NULL COMMENT '支付方式 1=微信支付 2=支付宝支付 3=线下支付',
  `payment_bill_id` varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '缴费账单id',
  `create_time` datetime(0) NULL DEFAULT CURRENT_TIMESTAMP(0) COMMENT '创建时间',
  `update_time` datetime(0) NULL DEFAULT NULL COMMENT '修改时间',
  `update_time` datetime(0) NULL DEFAULT NULL ON UPDATE CURRENT_TIMESTAMP(0) COMMENT '修改时间',
  `create_by` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '创建人',
  `update_by` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '修改人',
  `disabled` int(0) NULL DEFAULT 0 COMMENT '是否删除 0=否 1=是',
@@ -5012,10 +5121,12 @@
  `property_right_duration` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '产权年限',
  `lease_status` int(0) NULL DEFAULT 1 COMMENT '租赁状态 1=待出租 2=已出租 3=维修中',
  `create_time` datetime(0) NULL DEFAULT CURRENT_TIMESTAMP(0) COMMENT '创建时间',
  `update_time` datetime(0) NULL DEFAULT NULL COMMENT '修改时间',
  `update_time` datetime(0) NULL DEFAULT NULL ON UPDATE CURRENT_TIMESTAMP(0) COMMENT '修改时间',
  `create_by` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '创建人',
  `update_by` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '修改人',
  `disabled` int(0) NULL DEFAULT 0 COMMENT '是否删除 0=否 1=是',
  `building` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '楼栋',
  `room_number` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '房号',
  PRIMARY KEY (`id`) USING BTREE
) ENGINE = InnoDB CHARACTER SET = utf8mb4 COLLATE = utf8mb4_general_ci COMMENT = '房屋管理' ROW_FORMAT = Dynamic;
@@ -5036,7 +5147,7 @@
  `content` longtext CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL COMMENT '内容',
  `attachment` text CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL COMMENT '附件',
  `create_time` datetime(0) NULL DEFAULT CURRENT_TIMESTAMP(0) COMMENT '创建时间',
  `update_time` datetime(0) NULL DEFAULT NULL COMMENT '修改时间',
  `update_time` datetime(0) NULL DEFAULT NULL ON UPDATE CURRENT_TIMESTAMP(0) COMMENT '修改时间',
  `create_by` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '创建人',
  `update_by` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '修改人',
  `disabled` int(0) NULL DEFAULT 0 COMMENT '是否删除 0=否 1=是',
@@ -5065,7 +5176,7 @@
  `email` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '邮箱',
  `contract_number` text CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL COMMENT '开票合同编号逗号分割',
  `create_time` datetime(0) NULL DEFAULT CURRENT_TIMESTAMP(0) COMMENT '创建时间',
  `update_time` datetime(0) NULL DEFAULT NULL COMMENT '修改时间',
  `update_time` datetime(0) NULL DEFAULT NULL ON UPDATE CURRENT_TIMESTAMP(0) COMMENT '修改时间',
  `create_by` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '创建人',
  `update_by` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '修改人',
  `disabled` int(0) NULL DEFAULT 0 COMMENT '是否删除 0=否 1=是',
@@ -5087,7 +5198,7 @@
  `sort_by` int(0) NULL DEFAULT NULL COMMENT '权重',
  `pictures` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '图片',
  `create_time` datetime(0) NULL DEFAULT CURRENT_TIMESTAMP(0) COMMENT '创建时间',
  `update_time` datetime(0) NULL DEFAULT NULL COMMENT '修改时间',
  `update_time` datetime(0) NULL DEFAULT NULL ON UPDATE CURRENT_TIMESTAMP(0) COMMENT '修改时间',
  `create_by` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '创建人',
  `update_by` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '修改人',
  `disabled` int(0) NULL DEFAULT 0 COMMENT '是否删除 0=否 1=是',
@@ -5107,7 +5218,7 @@
  `type_name` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '分类名称',
  `sort_by` int(0) NULL DEFAULT NULL COMMENT '权重',
  `create_time` datetime(0) NULL DEFAULT CURRENT_TIMESTAMP(0) COMMENT '创建时间',
  `update_time` datetime(0) NULL DEFAULT NULL COMMENT '修改时间',
  `update_time` datetime(0) NULL DEFAULT NULL ON UPDATE CURRENT_TIMESTAMP(0) COMMENT '修改时间',
  `create_by` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '创建人',
  `update_by` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '修改人',
  `disabled` int(0) NULL DEFAULT 0 COMMENT '是否删除 0=否 1=是',
@@ -5153,10 +5264,12 @@
  `bank_number` varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '银行转账专号',
  `mail_address` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '通讯地址',
  `create_time` datetime(0) NULL DEFAULT CURRENT_TIMESTAMP(0) COMMENT '创建时间',
  `update_time` datetime(0) NULL DEFAULT NULL COMMENT '修改时间',
  `update_time` datetime(0) NULL DEFAULT NULL ON UPDATE CURRENT_TIMESTAMP(0) COMMENT '修改时间',
  `create_by` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '创建人',
  `update_by` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '修改人',
  `disabled` int(0) NULL DEFAULT 0 COMMENT '是否删除 0=否 1=是',
  `account` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '登录账号',
  `password` varchar(100) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT '' COMMENT '密码',
  PRIMARY KEY (`id`) USING BTREE
) ENGINE = InnoDB CHARACTER SET = utf8mb4 COLLATE = utf8mb4_general_ci COMMENT = '租户' ROW_FORMAT = Dynamic;