diff --git a/.gitea/workflows/dev.yml b/.gitea/workflows/dev.yml index 13c24388..9a657a4b 100644 --- a/.gitea/workflows/dev.yml +++ b/.gitea/workflows/dev.yml @@ -2,7 +2,7 @@ run-name: ${{ gitea.actor }} 构建镜像并推送(不含JAR依赖上传) on: push: branches: - - master + - main jobs: build-parent-pom: @@ -15,7 +15,7 @@ jobs: run: | export JAVA_HOME="/java17/java17" export MAVEN_HOME="/maven/apache-maven-3.9.11" - + if [ ! -f "$JAVA_HOME/bin/java" ]; then echo "错误:JDK可执行文件不存在于 $JAVA_HOME/bin/java" exit 1 @@ -24,12 +24,12 @@ jobs: echo "错误:Maven可执行文件不存在于 $MAVEN_HOME/bin/mvn" exit 1 fi - + echo "JAVA_HOME=$JAVA_HOME" >> $GITHUB_ENV echo "$JAVA_HOME/bin" >> $GITHUB_PATH echo "MAVEN_HOME=$MAVEN_HOME" >> $GITHUB_ENV echo "$MAVEN_HOME/bin" >> $GITHUB_PATH - + "$JAVA_HOME/bin/java" -version "$MAVEN_HOME/bin/mvn" -v @@ -39,14 +39,14 @@ jobs: cat > ~/.m2/settings.xml << EOF - $HOME/.m2/repository + /root/.m2/repository multi-repo local-repo - file://$HOME/.m2/repository + file:///root/.m2/repository aliyun-public @@ -68,10 +68,10 @@ jobs: echo "错误:主POM文件不存在" exit 1 fi - + retries=3 count=0 - until "$MAVEN_HOME/bin/mvn" clean package -U -DskipTests -f "$MAIN_POM_ABSOLUTE_PATH"; do + until "$MAVEN_HOME/bin/mvn" clean install -U -DskipTests -f "$MAIN_POM_ABSOLUTE_PATH"; do count=$((count + 1)) if [ $count -ge $retries ]; then echo "错误:主POM构建失败" @@ -80,50 +80,50 @@ jobs: sleep 10 done - build-common-modules: - needs: build-parent-pom - runs-on: ubuntu - steps: - - name: 拉取代码仓库 - uses: http://git.missmoc.top/mocheng/checkout@v4 + # build-common-modules: + # needs: build-parent-pom + # runs-on: ubuntu + # steps: + # - name: 拉取代码仓库 + # uses: http://git.missmoc.top/mocheng/checkout@v4 - - name: 配置环境变量 - run: | - export JAVA_HOME="/java17/java17" - export MAVEN_HOME="/maven/apache-maven-3.9.11" - echo "JAVA_HOME=$JAVA_HOME" >> $GITHUB_ENV - echo "$JAVA_HOME/bin" >> $GITHUB_PATH - echo "MAVEN_HOME=$MAVEN_HOME" >> $GITHUB_ENV - echo "$MAVEN_HOME/bin" >> $GITHUB_PATH + # - name: 配置环境变量 + # run: | + # export JAVA_HOME="/java17/java17" + # export MAVEN_HOME="/maven/apache-maven-3.9.11" + # echo "JAVA_HOME=$JAVA_HOME" >> $GITHUB_ENV + # echo "$JAVA_HOME/bin" >> $GITHUB_PATH + # echo "MAVEN_HOME=$MAVEN_HOME" >> $GITHUB_ENV + # echo "$MAVEN_HOME/bin" >> $GITHUB_PATH - - name: 构建通用模块(仅本地使用,不上传) - run: | - COMMON_MODULES=( - "ruoyi-common" - "ruoyi-api" - "ruoyi-common-bom" - "ruoyi-common-alibaba-bom" - "ruoyi-api-bom" - ) - - for module in "${COMMON_MODULES[@]}"; do - MODULE_POM_ABSOLUTE_PATH="${GITHUB_WORKSPACE}/${module}/pom.xml" - if [ ! -f "$MODULE_POM_ABSOLUTE_PATH" ]; then - echo "警告:模块 $module 不存在,跳过" - continue - fi - - retries=3 - count=0 - until "$MAVEN_HOME/bin/mvn" clean install -U -DskipTests -f "$MODULE_POM_ABSOLUTE_PATH"; do - count=$((count + 1)) - if [ $count -ge $retries ]; then - echo "错误:模块 $module 构建失败" - exit 1 - fi - sleep 10 - done - done + # - name: 构建通用模块(仅本地使用,不上传) + # run: | + # COMMON_MODULES=( + # "ruoyi-common" + # "ruoyi-api" + # "ruoyi-common-bom" + # "ruoyi-common-alibaba-bom" + # "ruoyi-api-bom" + # ) + + # for module in "${COMMON_MODULES[@]}"; do + # MODULE_POM_ABSOLUTE_PATH="${GITHUB_WORKSPACE}/${module}/pom.xml" + # if [ ! -f "$MODULE_POM_ABSOLUTE_PATH" ]; then + # echo "警告:模块 $module 不存在,跳过" + # continue + # fi + + # retries=3 + # count=0 + # until "$MAVEN_HOME/bin/mvn" clean compile install -U -DskipTests -f "$MODULE_POM_ABSOLUTE_PATH"; do + # count=$((count + 1)) + # if [ $count -ge $retries ]; then + # echo "错误:模块 $module 构建失败" + # exit 1 + # fi + # sleep 10 + # done + # done build-and-push-services: needs: build-common-modules @@ -166,7 +166,7 @@ jobs: echo "错误:服务 $SERVICE_NAME 的POM文件不存在" exit 1 fi - + "$MAVEN_HOME/bin/mvn" clean package -U -DskipTests -f "$SERVICE_POM_ABSOLUTE_PATH" - name: 配置Docker Buildx @@ -184,7 +184,7 @@ jobs: run: | SERVICE_NAME="${{ matrix.service }}" DOCKERFILE_ABSOLUTE_PATH="${GITHUB_WORKSPACE}/${SERVICE_NAME}/Dockerfile" - + if [ -f "$DOCKERFILE_ABSOLUTE_PATH" ]; then echo "dockerfile_path=$DOCKERFILE_ABSOLUTE_PATH" >> $GITHUB_OUTPUT else @@ -194,10 +194,12 @@ jobs: - name: 构建并推送Docker镜像(仅推送镜像,不上传JAR) uses: http://git.missmoc.top/mocheng/build-push-action@v5 with: - context: "${GITHUB_WORKSPACE}" - file: ${{ steps.dockerfile-path.outputs.dockerfile_path }} - tags: ${{ secrets.REGISTRY_URL }}/by2025/${{ matrix.service }}:${{ github.sha }} + context: "${{ github.workspace }}" + file: ${{ github.workspace }}/${{ matrix.service }}/Dockerfile + tags: 172.100.10.45:3000/by2025/smartparks/${{ matrix.service }}:latest + # tags: ${{ secrets.REGISTRY_URL }}/by2025/$(echo ${{ matrix.service }} | tr 'A-Z' 'a-z'):${{ github.sha }} + # tags: ${{ secrets.REGISTRY_URL }}/by2025/${{ matrix.service }}:2.0.4 push: true cache-from: type=gha cache-to: type=gha,mode=max - \ No newline at end of file + diff --git a/.gitea/workflows/master.yml b/.gitea/workflows/master.yml new file mode 100644 index 00000000..9ca94237 --- /dev/null +++ b/.gitea/workflows/master.yml @@ -0,0 +1,89 @@ +name: Build and Push to Target Registry + +# 监听master分支的推送事件 +on: + push: + branches: [ master ] + +jobs: + build-and-deploy: + name: 构建并推送镜像到目标仓库 + runs-on: ubuntu + timeout-minutes: 30 + + steps: + - name: 拉取代码 + uses: http://git.missmoc.top/mocheng/checkout@v4 + with: + fetch-depth: 0 + + - name: 使用Maven构建项目 + run: | + echo "===== 开始Maven构建 =====" + /maven/apache-maven-3.9.11/bin/mvn clean package -DskipTests + + echo "===== Maven构建完成 =====" + + - name: 构建并推送Docker镜像 + env: + # 替换为你的Docker Registry地址(例如:localhost:5000 或 192.168.1.100:5000) + TARGET_REGISTRY: 127.0.0.1:5000 + # 目标仓库中的项目名称 + TARGET_PROJECT: smartparks + run: | + echo "===== 环境信息 =====" + echo "目标仓库: $TARGET_REGISTRY/$TARGET_PROJECT" + + # 【删除登录步骤】因为仓库无认证,无需登录 + + echo "===== 查找项目中的Dockerfile =====" + dockerfiles=$(find . -type f -name "Dockerfile" ! -path "./.git/*") + if [ -z "$dockerfiles" ]; then + echo "警告:未找到任何Dockerfile" + exit 0 + fi + + # 处理每个Dockerfile(后续构建、推送逻辑与之前类似,保持不变) + echo "$dockerfiles" | while read -r dockerfile; do + echo "===== 处理Dockerfile: $dockerfile =====" + + docker_context=$(dirname "$dockerfile") + image_tag=$(echo "$docker_context" | sed 's|./||g' | tr '/' '-' | tr '[:upper:]' '[:lower:]' | sed 's/[^a-z0-9_-]//g') + full_image_name="$TARGET_REGISTRY/$TARGET_PROJECT:$image_tag-${{ github.sha }}" + echo "镜像名称: $full_image_name" + + # 检查JAR包是否存在 + echo "===== 检查JAR包 =====" + jar_files=$(find "$docker_context" -name "*.jar" -type f) + if [ -z "$jar_files" ]; then + echo "警告:在 $docker_context 目录中未找到JAR包" + continue + fi + echo "找到JAR包:" + echo "$jar_files" + + echo "===== 构建镜像 =====" + if ! docker build -t "$full_image_name" -f "$dockerfile" "$docker_context"; then + echo "错误:构建镜像失败" + exit 1 + fi + + echo "===== 推送镜像到仓库 =====" + if ! docker push "$full_image_name"; then + echo "错误:推送镜像失败,请检查仓库是否可访问" + exit 1 + fi + + # 推送latest标签(逻辑保持不变) + latest_image="$TARGET_REGISTRY/$TARGET_PROJECT:$image_tag-latest" + echo "===== 推送最新标签: $latest_image =====" + docker tag "$full_image_name" "$latest_image" + if ! docker push "$latest_image"; then + echo "错误:推送latest标签失败" + exit 1 + fi + done + + echo "===== 清理操作 =====" + docker system prune -f + echo "===== 所有操作完成 ====" diff --git a/ruoyi-auth/Dockerfile b/ruoyi-auth/Dockerfile index 8555931b..9734be2d 100644 --- a/ruoyi-auth/Dockerfile +++ b/ruoyi-auth/Dockerfile @@ -1,6 +1,9 @@ # 贝尔实验室 Spring 官方推荐镜像 JDK下载地址 https://bell-sw.com/pages/downloads/ -FROM bellsoft/liberica-openjdk-debian:17.0.11-cds +#FROM bellsoft/liberica-openjdk-debian:17.0.11-cds +#FROM registry.cn-hangzhou.aliyuncs.com/aliyun_openjdk/openjdk:17-jdk-slim #FROM bellsoft/liberica-openjdk-debian:21.0.5-cds +#FROM 127.0.0.1:5000/smartparks/base-images/liberica-openjdk-debian +FROM 127.0.0.1:5000/smartparks/base-images/liberica-openjdk-debian:17.0.11-cds #FROM findepi/graalvm:java17-native LABEL maintainer="Lion Li" diff --git a/ruoyi-modules/Property/pom.xml b/ruoyi-modules/Property/pom.xml index a062fa82..4164e16b 100644 --- a/ruoyi-modules/Property/pom.xml +++ b/ruoyi-modules/Property/pom.xml @@ -120,12 +120,6 @@ sis-api 2.4.0 - - org.dromara - ruoyi-system - 2.4.0 - compile - org.dromara ruoyi-common-websocket diff --git a/ruoyi-modules/Property/src/main/java/org/dromara/property/controller/AttendanceAreaController.java b/ruoyi-modules/Property/src/main/java/org/dromara/property/controller/AttendanceAreaController.java new file mode 100644 index 00000000..e8a851a7 --- /dev/null +++ b/ruoyi-modules/Property/src/main/java/org/dromara/property/controller/AttendanceAreaController.java @@ -0,0 +1,106 @@ +package org.dromara.property.controller; + +import java.util.List; + +import lombok.RequiredArgsConstructor; +import jakarta.servlet.http.HttpServletResponse; +import jakarta.validation.constraints.*; +import cn.dev33.satoken.annotation.SaCheckPermission; +import org.springframework.web.bind.annotation.*; +import org.springframework.validation.annotation.Validated; +import org.dromara.common.idempotent.annotation.RepeatSubmit; +import org.dromara.common.log.annotation.Log; +import org.dromara.common.web.core.BaseController; +import org.dromara.common.mybatis.core.page.PageQuery; +import org.dromara.common.core.domain.R; +import org.dromara.common.core.validate.AddGroup; +import org.dromara.common.core.validate.EditGroup; +import org.dromara.common.log.enums.BusinessType; +import org.dromara.common.excel.utils.ExcelUtil; +import org.dromara.property.domain.vo.AttendanceAreaVo; +import org.dromara.property.domain.bo.AttendanceAreaBo; +import org.dromara.property.service.IAttendanceAreaService; +import org.dromara.common.mybatis.core.page.TableDataInfo; + +/** + * 区域区域管理 + * 前端访问路由地址为:/property/attendanceArea + * + * @author LionLi + * @date 2025-08-13 + */ +@Validated +@RequiredArgsConstructor +@RestController +@RequestMapping("/attendanceArea") +public class AttendanceAreaController extends BaseController { + + private final IAttendanceAreaService attendanceAreaService; + + /** + * 查询区域区域管理列表 + */ + @SaCheckPermission("property:attendanceArea:list") + @GetMapping("/list") + public TableDataInfo list(AttendanceAreaBo bo, PageQuery pageQuery) { + return attendanceAreaService.queryPageList(bo, pageQuery); + } + + /** + * 导出区域区域管理列表 + */ + @SaCheckPermission("property:attendanceArea:export") + @Log(title = "区域区域管理", businessType = BusinessType.EXPORT) + @PostMapping("/export") + public void export(AttendanceAreaBo bo, HttpServletResponse response) { + List list = attendanceAreaService.queryList(bo); + ExcelUtil.exportExcel(list, "区域区域管理", AttendanceAreaVo.class, response); + } + + /** + * 获取区域区域管理详细信息 + * + * @param id 主键 + */ + @SaCheckPermission("property:attendanceArea:query") + @GetMapping("/{id}") + public R getInfo(@NotNull(message = "主键不能为空") + @PathVariable("id") Long id) { + return R.ok(attendanceAreaService.queryById(id)); + } + + /** + * 新增区域区域管理 + */ + @SaCheckPermission("property:attendanceArea:add") + @Log(title = "区域区域管理", businessType = BusinessType.INSERT) + @RepeatSubmit() + @PostMapping() + public R add(@Validated(AddGroup.class) @RequestBody AttendanceAreaBo bo) { + return toAjax(attendanceAreaService.insertByBo(bo)); + } + + /** + * 修改区域区域管理 + */ + @SaCheckPermission("property:attendanceArea:edit") + @Log(title = "区域区域管理", businessType = BusinessType.UPDATE) + @RepeatSubmit() + @PutMapping() + public R edit(@Validated(EditGroup.class) @RequestBody AttendanceAreaBo bo) { + return toAjax(attendanceAreaService.updateByBo(bo)); + } + + /** + * 删除区域区域管理 + * + * @param ids 主键串 + */ + @SaCheckPermission("property:attendanceArea:remove") + @Log(title = "区域区域管理", businessType = BusinessType.DELETE) + @DeleteMapping("/{ids}") + public R remove(@NotEmpty(message = "主键不能为空") + @PathVariable("ids") Long[] ids) { + return toAjax(attendanceAreaService.deleteWithValidByIds(List.of(ids), true)); + } +} diff --git a/ruoyi-modules/Property/src/main/java/org/dromara/property/controller/QuestionnaireController.java b/ruoyi-modules/Property/src/main/java/org/dromara/property/controller/QuestionnaireController.java new file mode 100644 index 00000000..a54cdfe7 --- /dev/null +++ b/ruoyi-modules/Property/src/main/java/org/dromara/property/controller/QuestionnaireController.java @@ -0,0 +1,95 @@ +package org.dromara.property.controller; + +import java.util.List; + +import lombok.RequiredArgsConstructor; +import jakarta.servlet.http.HttpServletResponse; +import jakarta.validation.constraints.*; +import cn.dev33.satoken.annotation.SaCheckPermission; +import org.springframework.web.bind.annotation.*; +import org.springframework.validation.annotation.Validated; +import org.dromara.common.idempotent.annotation.RepeatSubmit; +import org.dromara.common.log.annotation.Log; +import org.dromara.common.web.core.BaseController; +import org.dromara.common.mybatis.core.page.PageQuery; +import org.dromara.common.core.domain.R; +import org.dromara.common.core.validate.AddGroup; +import org.dromara.common.core.validate.EditGroup; +import org.dromara.common.log.enums.BusinessType; +import org.dromara.common.excel.utils.ExcelUtil; +import org.dromara.property.domain.vo.QuestionnaireVo; +import org.dromara.property.domain.bo.QuestionnaireBo; +import org.dromara.property.service.IQuestionnaireService; +import org.dromara.common.mybatis.core.page.TableDataInfo; + +/** + * 调查问卷 + * 前端访问路由地址为:/property/questionnaire + * + * @author LionLi + * @date 2025-08-14 + */ +@Validated +@RequiredArgsConstructor +@RestController +@RequestMapping("/questionnaire") +public class QuestionnaireController extends BaseController { + + private final IQuestionnaireService questionnaireService; + + /** + * 查询调查问卷列表 + */ + @SaCheckPermission("property:questionnaire:list") + @GetMapping("/list") + public TableDataInfo list(QuestionnaireBo bo, PageQuery pageQuery) { + return questionnaireService.queryPageList(bo, pageQuery); + } + + /** + * 获取调查问卷详细信息 + * + * @param id 主键 + */ + @SaCheckPermission("property:questionnaire:query") + @GetMapping("/{id}") + public R getInfo(@NotNull(message = "主键不能为空") + @PathVariable("id") Long id) { + return R.ok(questionnaireService.queryById(id)); + } + + /** + * 新增调查问卷 + */ + @SaCheckPermission("property:questionnaire:add") + @Log(title = "调查问卷", businessType = BusinessType.INSERT) + @RepeatSubmit() + @PostMapping() + public R add(@Validated(AddGroup.class) @RequestBody QuestionnaireBo bo) { + return toAjax(questionnaireService.insertByBo(bo)); + } + + /** + * 修改调查问卷 + */ + @SaCheckPermission("property:questionnaire:edit") + @Log(title = "调查问卷", businessType = BusinessType.UPDATE) + @RepeatSubmit() + @PutMapping() + public R edit(@Validated(EditGroup.class) @RequestBody QuestionnaireBo bo) { + return toAjax(questionnaireService.updateByBo(bo)); + } + + /** + * 删除调查问卷 + * + * @param ids 主键串 + */ + @SaCheckPermission("property:questionnaire:remove") + @Log(title = "调查问卷", businessType = BusinessType.DELETE) + @DeleteMapping("/{ids}") + public R remove(@NotEmpty(message = "主键不能为空") + @PathVariable("ids") Long[] ids) { + return toAjax(questionnaireService.deleteWithValidByIds(List.of(ids), true)); + } +} diff --git a/ruoyi-modules/Property/src/main/java/org/dromara/property/controller/mobile/MServiceWorkOrdersController.java b/ruoyi-modules/Property/src/main/java/org/dromara/property/controller/mobile/MServiceWorkOrdersController.java index 2114b401..94ce085d 100644 --- a/ruoyi-modules/Property/src/main/java/org/dromara/property/controller/mobile/MServiceWorkOrdersController.java +++ b/ruoyi-modules/Property/src/main/java/org/dromara/property/controller/mobile/MServiceWorkOrdersController.java @@ -6,14 +6,15 @@ import org.dromara.common.core.validate.AddGroup; import org.dromara.common.idempotent.annotation.RepeatSubmit; import org.dromara.common.log.annotation.Log; import org.dromara.common.log.enums.BusinessType; +import org.dromara.common.mybatis.core.page.PageQuery; +import org.dromara.common.mybatis.core.page.TableDataInfo; import org.dromara.common.web.core.BaseController; +import org.dromara.property.domain.bo.ServiceWorkOrdersBo; import org.dromara.property.domain.bo.mobile.MServiceWorkOrdersBo; +import org.dromara.property.domain.vo.ServiceWorkOrdersVo; import org.dromara.property.service.IServiceWorkOrdersService; import org.springframework.validation.annotation.Validated; -import org.springframework.web.bind.annotation.PostMapping; -import org.springframework.web.bind.annotation.RequestBody; -import org.springframework.web.bind.annotation.RequestMapping; -import org.springframework.web.bind.annotation.RestController; +import org.springframework.web.bind.annotation.*; /** * 【业务管理-工单处理】 @@ -38,4 +39,11 @@ public class MServiceWorkOrdersController extends BaseController { public R add(@Validated(AddGroup.class) @RequestBody MServiceWorkOrdersBo bo) { return toAjax(serviceWorkOrdersService.insertMServiceWorkOrdersBo(bo)); } + /** + * 小程序查询【工单处理】 + */ + @GetMapping("/list") + public TableDataInfo list(ServiceWorkOrdersBo bo, PageQuery pageQuery) { + return serviceWorkOrdersService.queryPageList(bo, pageQuery); + } } diff --git a/ruoyi-modules/Property/src/main/java/org/dromara/property/domain/AttendanceArea.java b/ruoyi-modules/Property/src/main/java/org/dromara/property/domain/AttendanceArea.java new file mode 100644 index 00000000..12dd4157 --- /dev/null +++ b/ruoyi-modules/Property/src/main/java/org/dromara/property/domain/AttendanceArea.java @@ -0,0 +1,46 @@ +package org.dromara.property.domain; + +import org.dromara.common.tenant.core.TenantEntity; +import com.baomidou.mybatisplus.annotation.*; +import lombok.Data; +import lombok.EqualsAndHashCode; + +import java.io.Serial; + +/** + * 区域区域管理对象 attendance_area + * + * @author LionLi + * @date 2025-08-13 + */ +@Data +@EqualsAndHashCode(callSuper = true) +@TableName("attendance_area") +public class AttendanceArea extends TenantEntity { + + @Serial + private static final long serialVersionUID = 1L; + + /** + * 主键id + */ + @TableId(value = "id") + private Long id; + + /** + * 摄像机id + */ + private Long deviceManageId; + + /** + * 区域 + */ + private String area; + + /** + * 备注 + */ + private String reamark; + + +} diff --git a/ruoyi-modules/Property/src/main/java/org/dromara/property/domain/AttendanceAreaDevice.java b/ruoyi-modules/Property/src/main/java/org/dromara/property/domain/AttendanceAreaDevice.java new file mode 100644 index 00000000..32c7362d --- /dev/null +++ b/ruoyi-modules/Property/src/main/java/org/dromara/property/domain/AttendanceAreaDevice.java @@ -0,0 +1,42 @@ +package org.dromara.property.domain; + +import org.dromara.common.tenant.core.TenantEntity; +import com.baomidou.mybatisplus.annotation.*; +import lombok.Data; +import lombok.EqualsAndHashCode; + +import java.io.Serial; + +/** + * 摄像头区域中间表 attendance_area_device + * + * @author LionLi + * @date 2025-08-13 + */ +@Data +@EqualsAndHashCode(callSuper = true) +@TableName("attendance_area_device") +public class AttendanceAreaDevice extends TenantEntity { + + @Serial + private static final long serialVersionUID = 1L; + + /** + * 主键id + */ + @TableId(value = "id") + private Long id; + + /** + * 区域id + */ + private Long areaId; + + /** + * 摄像机id + */ + private String deviceManageId; + + + +} diff --git a/ruoyi-modules/Property/src/main/java/org/dromara/property/domain/AttendanceArrangement.java b/ruoyi-modules/Property/src/main/java/org/dromara/property/domain/AttendanceArrangement.java index fe92975f..746ff5e7 100644 --- a/ruoyi-modules/Property/src/main/java/org/dromara/property/domain/AttendanceArrangement.java +++ b/ruoyi-modules/Property/src/main/java/org/dromara/property/domain/AttendanceArrangement.java @@ -41,6 +41,11 @@ public class AttendanceArrangement extends TenantEntity { */ private Long groupId; + /** + * 区域id + */ + private Long areaId; + /** * 排班类型:1-固定班制,2-排班制 */ diff --git a/ruoyi-modules/Property/src/main/java/org/dromara/property/domain/AttendanceUserGroup.java b/ruoyi-modules/Property/src/main/java/org/dromara/property/domain/AttendanceUserGroup.java index 666f0ae6..58558521 100644 --- a/ruoyi-modules/Property/src/main/java/org/dromara/property/domain/AttendanceUserGroup.java +++ b/ruoyi-modules/Property/src/main/java/org/dromara/property/domain/AttendanceUserGroup.java @@ -1,15 +1,13 @@ package org.dromara.property.domain; -import org.dromara.common.tenant.core.TenantEntity; -import com.baomidou.mybatisplus.annotation.*; +import com.baomidou.mybatisplus.annotation.TableId; +import com.baomidou.mybatisplus.annotation.TableName; import lombok.Data; import lombok.EqualsAndHashCode; -import org.dromara.system.domain.SysUser; -import org.springframework.format.annotation.DateTimeFormat; +import org.dromara.common.tenant.core.TenantEntity; import java.io.Serial; import java.time.LocalDate; -import java.util.List; /** * 排班明细对象 attendance_user_group diff --git a/ruoyi-modules/Property/src/main/java/org/dromara/property/domain/Questionnaire.java b/ruoyi-modules/Property/src/main/java/org/dromara/property/domain/Questionnaire.java new file mode 100644 index 00000000..f27003c2 --- /dev/null +++ b/ruoyi-modules/Property/src/main/java/org/dromara/property/domain/Questionnaire.java @@ -0,0 +1,63 @@ +package org.dromara.property.domain; + +import org.dromara.common.tenant.core.TenantEntity; +import com.baomidou.mybatisplus.annotation.*; +import lombok.Data; +import lombok.EqualsAndHashCode; +import java.util.Date; +import com.fasterxml.jackson.annotation.JsonFormat; + +import java.io.Serial; + +/** + * 调查问卷对象 questionnaire + * + * @author LionLi + * @date 2025-08-14 + */ +@Data +@EqualsAndHashCode(callSuper = true) +@TableName("questionnaire") +public class Questionnaire extends TenantEntity { + + @Serial + private static final long serialVersionUID = 1L; + + /** + * id + */ + @TableId(value = "id") + private Long id; + + /** + * 标题 + */ + private String head; + + /** + * 描述 + */ + private String depict; + + /** + * 是否匿名收集 + */ + private String isAnonyCollec; + + /** + * 是否多次提交 + */ + private String isCommit; + + /** + * 截止日期 + */ + private Date deadline; + + /** + * 状态(1草稿2已发布3未发布) + */ + private String status; + + +} diff --git a/ruoyi-modules/Property/src/main/java/org/dromara/property/domain/QuestionnaireQuestion.java b/ruoyi-modules/Property/src/main/java/org/dromara/property/domain/QuestionnaireQuestion.java new file mode 100644 index 00000000..9cdbbdf4 --- /dev/null +++ b/ruoyi-modules/Property/src/main/java/org/dromara/property/domain/QuestionnaireQuestion.java @@ -0,0 +1,61 @@ +package org.dromara.property.domain; + +import org.dromara.common.tenant.core.TenantEntity; +import com.baomidou.mybatisplus.annotation.*; +import lombok.Data; +import lombok.EqualsAndHashCode; + +import java.io.Serial; + +/** + * 调查问卷问题对象 questionnaire_question + * + * @author LionLi + * @date 2025-08-14 + */ +@Data +@EqualsAndHashCode(callSuper = true) +@TableName("questionnaire_question") +public class QuestionnaireQuestion extends TenantEntity { + + @Serial + private static final long serialVersionUID = 1L; + + /** + * id + */ + @TableId(value = "id") + private Long id; + + /** + * 调查问卷id + */ + private Long questionnaireId; + + /** + * 标题 + */ + private String head; + + /** + * 问题类型(1单行文本2多行文本3单选题4多选题5评分题6日期选择) + */ + private String type; + + /** + * 是否必填(1不必填2必填) + */ + private String isRequired; + + /** + * 描述 + */ + private String depict; + + /** + * 排序 + */ + private Long sort; + + +} diff --git a/ruoyi-modules/Property/src/main/java/org/dromara/property/domain/QuestionnaireQuestionItem.java b/ruoyi-modules/Property/src/main/java/org/dromara/property/domain/QuestionnaireQuestionItem.java new file mode 100644 index 00000000..b257f780 --- /dev/null +++ b/ruoyi-modules/Property/src/main/java/org/dromara/property/domain/QuestionnaireQuestionItem.java @@ -0,0 +1,51 @@ +package org.dromara.property.domain; + +import org.dromara.common.tenant.core.TenantEntity; +import com.baomidou.mybatisplus.annotation.*; +import lombok.Data; +import lombok.EqualsAndHashCode; + +import java.io.Serial; + +/** + * 调查问卷问题选项对象 questionnaire_question_item + * + * @author LionLi + * @date 2025-08-14 + */ +@Data +@EqualsAndHashCode(callSuper = true) +@TableName("questionnaire_question_item") +public class QuestionnaireQuestionItem extends TenantEntity { + + @Serial + private static final long serialVersionUID = 1L; + + /** + * id + */ + @TableId(value = "id") + private Long id; + + /** + * 问题id + */ + private Long questionId; + + /** + * 选项内容 + */ + private String itemContent; + + /** + * 排序 + */ + private Long sort; + + /** + * 备注 + */ + private String remark; + + +} diff --git a/ruoyi-modules/Property/src/main/java/org/dromara/property/domain/bo/AttendanceAreaBo.java b/ruoyi-modules/Property/src/main/java/org/dromara/property/domain/bo/AttendanceAreaBo.java new file mode 100644 index 00000000..aeef74d4 --- /dev/null +++ b/ruoyi-modules/Property/src/main/java/org/dromara/property/domain/bo/AttendanceAreaBo.java @@ -0,0 +1,47 @@ +package org.dromara.property.domain.bo; + +import org.dromara.property.domain.AttendanceArea; +import org.dromara.common.mybatis.core.domain.BaseEntity; +import org.dromara.common.core.validate.AddGroup; +import org.dromara.common.core.validate.EditGroup; +import io.github.linpeilie.annotations.AutoMapper; +import lombok.Data; +import lombok.EqualsAndHashCode; +import jakarta.validation.constraints.*; + +import java.util.List; + +/** + * 区域区域管理业务对象 attendance_area + * + * @author LionLi + * @date 2025-08-13 + */ +@Data +@EqualsAndHashCode(callSuper = true) +@AutoMapper(target = AttendanceArea.class, reverseConvertGenerate = false) +public class AttendanceAreaBo extends BaseEntity { + + /** + * 主键id + */ + @NotNull(message = "主键id不能为空", groups = { EditGroup.class }) + private Long id; + + /** + * 摄像机id + */ + private Long deviceManageId; + + /** + * 区域 + */ + private String area; + + /** + * 备注 + */ + private String reamark; + + +} diff --git a/ruoyi-modules/Property/src/main/java/org/dromara/property/domain/bo/AttendanceArrangementBo.java b/ruoyi-modules/Property/src/main/java/org/dromara/property/domain/bo/AttendanceArrangementBo.java index 2968a7cb..807be3b0 100644 --- a/ruoyi-modules/Property/src/main/java/org/dromara/property/domain/bo/AttendanceArrangementBo.java +++ b/ruoyi-modules/Property/src/main/java/org/dromara/property/domain/bo/AttendanceArrangementBo.java @@ -45,6 +45,11 @@ public class AttendanceArrangementBo extends BaseEntity { */ private Long groupId; + /** + * 区域id + */ + private Long areaId; + /** * 排班类型:1-固定班制,2-排班制 */ @@ -99,4 +104,5 @@ public class AttendanceArrangementBo extends BaseEntity { private List scheduleCycleList; + } diff --git a/ruoyi-modules/Property/src/main/java/org/dromara/property/domain/bo/QuestionnaireBo.java b/ruoyi-modules/Property/src/main/java/org/dromara/property/domain/bo/QuestionnaireBo.java new file mode 100644 index 00000000..9ef514d2 --- /dev/null +++ b/ruoyi-modules/Property/src/main/java/org/dromara/property/domain/bo/QuestionnaireBo.java @@ -0,0 +1,70 @@ +package org.dromara.property.domain.bo; + +import org.dromara.property.domain.Questionnaire; +import org.dromara.common.mybatis.core.domain.BaseEntity; +import org.dromara.common.core.validate.AddGroup; +import org.dromara.common.core.validate.EditGroup; +import io.github.linpeilie.annotations.AutoMapper; +import lombok.Data; +import lombok.EqualsAndHashCode; +import jakarta.validation.constraints.*; +import java.util.Date; +import java.util.List; + +import com.fasterxml.jackson.annotation.JsonFormat; + +/** + * 调查问卷业务对象 questionnaire + * + * @author LionLi + * @date 2025-08-14 + */ +@Data +@EqualsAndHashCode(callSuper = true) +@AutoMapper(target = Questionnaire.class, reverseConvertGenerate = false) +public class QuestionnaireBo extends BaseEntity { + + /** + * id + */ + @NotNull(message = "id不能为空", groups = { EditGroup.class }) + private Long id; + + /** + * 标题 + */ + @NotBlank(message = "标题不能为空", groups = { AddGroup.class, EditGroup.class }) + private String head; + + /** + * 描述 + */ + @NotBlank(message = "问卷描述不能为空", groups = { AddGroup.class, EditGroup.class }) + private String depict; + + /** + * 是否匿名收集 + */ + private String isAnonyCollec; + + /** + * 是否多次提交 + */ + private String isCommit; + + /** + * 截止日期 + */ + @NotNull(message = "截止日期不能为空", groups = { AddGroup.class, EditGroup.class }) + private Date deadline; + + /** + * 状态(1草稿2已发布3未发布) + */ + @NotBlank(message = "状态(1草稿2已发布3未发布)不能为空", groups = { AddGroup.class, EditGroup.class }) + private String status; + /** + * 问卷问题列表 + */ + private List questionnaireQuestions; +} diff --git a/ruoyi-modules/Property/src/main/java/org/dromara/property/domain/bo/QuestionnaireQuestionBo.java b/ruoyi-modules/Property/src/main/java/org/dromara/property/domain/bo/QuestionnaireQuestionBo.java new file mode 100644 index 00000000..8cd9c922 --- /dev/null +++ b/ruoyi-modules/Property/src/main/java/org/dromara/property/domain/bo/QuestionnaireQuestionBo.java @@ -0,0 +1,69 @@ +package org.dromara.property.domain.bo; + +import org.dromara.property.domain.QuestionnaireQuestion; +import org.dromara.common.mybatis.core.domain.BaseEntity; +import org.dromara.common.core.validate.AddGroup; +import org.dromara.common.core.validate.EditGroup; +import io.github.linpeilie.annotations.AutoMapper; +import lombok.Data; +import lombok.EqualsAndHashCode; +import jakarta.validation.constraints.*; + +import java.util.List; + +/** + * 调查问卷问题业务对象 questionnaire_question + * + * @author LionLi + * @date 2025-08-14 + */ +@Data +@EqualsAndHashCode(callSuper = true) +@AutoMapper(target = QuestionnaireQuestion.class, reverseConvertGenerate = false) +public class QuestionnaireQuestionBo extends BaseEntity { + + /** + * id + */ + private Long id; + + /** + * 调查问卷id + */ + @NotNull(message = "调查问卷id不能为空", groups = {AddGroup.class, EditGroup.class}) + private Long questionnaireId; + + /** + * 标题 + */ + @NotBlank(message = "标题不能为空", groups = {AddGroup.class, EditGroup.class}) + private String head; + + /** + * 问题类型(1单行文本2多行文本3单选题4多选题5评分题6日期选择) + */ + @NotBlank(message = "问题类型(1单行文本2多行文本3单选题4多选题5评分题6日期选择)不能为空", groups = {AddGroup.class, EditGroup.class}) + private String type; + + /** + * 是否必填(1不必填2必填) + */ + @NotBlank(message = "是否必填(1不必填2必填)不能为空", groups = {AddGroup.class, EditGroup.class}) + private String isRequired; + + /** + * 描述 + */ + private String depict; + + /** + * 排序 + */ + @NotNull(message = "排序不能为空", groups = {AddGroup.class, EditGroup.class}) + private Long sort; + + /** + * 问题项目列表多选题必传 + */ + private List questionnaireQuestionItems; +} diff --git a/ruoyi-modules/Property/src/main/java/org/dromara/property/domain/bo/QuestionnaireQuestionItemBo.java b/ruoyi-modules/Property/src/main/java/org/dromara/property/domain/bo/QuestionnaireQuestionItemBo.java new file mode 100644 index 00000000..1b5c09ff --- /dev/null +++ b/ruoyi-modules/Property/src/main/java/org/dromara/property/domain/bo/QuestionnaireQuestionItemBo.java @@ -0,0 +1,51 @@ +package org.dromara.property.domain.bo; + +import org.dromara.property.domain.QuestionnaireQuestionItem; +import org.dromara.common.mybatis.core.domain.BaseEntity; +import org.dromara.common.core.validate.AddGroup; +import org.dromara.common.core.validate.EditGroup; +import io.github.linpeilie.annotations.AutoMapper; +import lombok.Data; +import lombok.EqualsAndHashCode; +import jakarta.validation.constraints.*; + +/** + * 调查问卷问题选项业务对象 questionnaire_question_item + * + * @author LionLi + * @date 2025-08-14 + */ +@Data +@EqualsAndHashCode(callSuper = true) +@AutoMapper(target = QuestionnaireQuestionItem.class, reverseConvertGenerate = false) +public class QuestionnaireQuestionItemBo extends BaseEntity { + + /** + * id + */ + private Long id; + + /** + * 问题id + */ + @NotNull(message = "问题id不能为空", groups = { AddGroup.class, EditGroup.class }) + private Long questionId; + + /** + * 选项内容 + */ + @NotBlank(message = "选项内容不能为空", groups = { AddGroup.class, EditGroup.class }) + private String itemContent; + + /** + * 排序 + */ + private Long sort; + + /** + * 备注 + */ + private String remark; + + +} diff --git a/ruoyi-modules/Property/src/main/java/org/dromara/property/domain/vo/AttendanceAreaVo.java b/ruoyi-modules/Property/src/main/java/org/dromara/property/domain/vo/AttendanceAreaVo.java new file mode 100644 index 00000000..6ae4d374 --- /dev/null +++ b/ruoyi-modules/Property/src/main/java/org/dromara/property/domain/vo/AttendanceAreaVo.java @@ -0,0 +1,56 @@ +package org.dromara.property.domain.vo; + +import org.dromara.property.domain.AttendanceArea; +import cn.idev.excel.annotation.ExcelIgnoreUnannotated; +import cn.idev.excel.annotation.ExcelProperty; +import org.dromara.common.excel.annotation.ExcelDictFormat; +import org.dromara.common.excel.convert.ExcelDictConvert; +import io.github.linpeilie.annotations.AutoMapper; +import lombok.Data; + +import java.io.Serial; +import java.io.Serializable; +import java.util.Date; + + + +/** + * 区域区域管理视图对象 attendance_area + * + * @author LionLi + * @date 2025-08-13 + */ +@Data +@ExcelIgnoreUnannotated +@AutoMapper(target = AttendanceArea.class) +public class AttendanceAreaVo implements Serializable { + + @Serial + private static final long serialVersionUID = 1L; + + /** + * 主键id + */ + @ExcelProperty(value = "主键id") + private Long id; + + /** + * 摄像机id + */ + @ExcelProperty(value = "摄像机id") + private Long deviceManageId; + + /** + * 区域 + */ + @ExcelProperty(value = "区域") + private String area; + + /** + * 备注 + */ + @ExcelProperty(value = "备注") + private String reamark; + + +} diff --git a/ruoyi-modules/Property/src/main/java/org/dromara/property/domain/vo/AttendanceArrangementVo.java b/ruoyi-modules/Property/src/main/java/org/dromara/property/domain/vo/AttendanceArrangementVo.java index c2955ad9..61b6644b 100644 --- a/ruoyi-modules/Property/src/main/java/org/dromara/property/domain/vo/AttendanceArrangementVo.java +++ b/ruoyi-modules/Property/src/main/java/org/dromara/property/domain/vo/AttendanceArrangementVo.java @@ -45,6 +45,12 @@ public class AttendanceArrangementVo implements Serializable { @ExcelProperty(value = "考勤组ID") private Long groupId; + @ExcelProperty(value = "区域Id") + /** + * 区域id + */ + private Long areaId; + /** * 排班类型:1-固定班制,2-排班制 */ @@ -90,5 +96,7 @@ public class AttendanceArrangementVo implements Serializable { //排班制 private AttendanceScheduleCycle scheduleCycle; + private AttendanceArea attendanceArea; + } diff --git a/ruoyi-modules/Property/src/main/java/org/dromara/property/domain/vo/AttendanceUserGroupVo.java b/ruoyi-modules/Property/src/main/java/org/dromara/property/domain/vo/AttendanceUserGroupVo.java index f64884a3..ffc3f24a 100644 --- a/ruoyi-modules/Property/src/main/java/org/dromara/property/domain/vo/AttendanceUserGroupVo.java +++ b/ruoyi-modules/Property/src/main/java/org/dromara/property/domain/vo/AttendanceUserGroupVo.java @@ -1,20 +1,17 @@ package org.dromara.property.domain.vo; -import org.dromara.property.domain.*; import cn.idev.excel.annotation.ExcelIgnoreUnannotated; import cn.idev.excel.annotation.ExcelProperty; -import org.dromara.common.excel.annotation.ExcelDictFormat; -import org.dromara.common.excel.convert.ExcelDictConvert; import io.github.linpeilie.annotations.AutoMapper; import lombok.Data; -import org.dromara.system.domain.SysUser; -import org.dromara.system.domain.vo.SysUserVo; +import org.dromara.property.api.domain.vo.RemoteBuildingVo; +import org.dromara.property.domain.*; +import org.dromara.system.api.domain.vo.RemoteUserVo; import org.springframework.format.annotation.DateTimeFormat; import java.io.Serial; import java.io.Serializable; import java.time.LocalDate; -import java.util.Date; @@ -88,7 +85,13 @@ public class AttendanceUserGroupVo implements Serializable { private AttendanceScheduleCycle scheduleCycle; - private SysUserVo sysUser; +// private SysUserVo sysUser; + + private RemoteUserVo remoteUserVo; + + private String deptName; + + private AttendanceArea attendanceArea; } diff --git a/ruoyi-modules/Property/src/main/java/org/dromara/property/domain/vo/QuestionnaireQuestionItemVo.java b/ruoyi-modules/Property/src/main/java/org/dromara/property/domain/vo/QuestionnaireQuestionItemVo.java new file mode 100644 index 00000000..798fa053 --- /dev/null +++ b/ruoyi-modules/Property/src/main/java/org/dromara/property/domain/vo/QuestionnaireQuestionItemVo.java @@ -0,0 +1,62 @@ +package org.dromara.property.domain.vo; + +import org.dromara.property.domain.QuestionnaireQuestionItem; +import cn.idev.excel.annotation.ExcelIgnoreUnannotated; +import cn.idev.excel.annotation.ExcelProperty; +import org.dromara.common.excel.annotation.ExcelDictFormat; +import org.dromara.common.excel.convert.ExcelDictConvert; +import io.github.linpeilie.annotations.AutoMapper; +import lombok.Data; + +import java.io.Serial; +import java.io.Serializable; +import java.util.Date; + + + +/** + * 调查问卷问题选项视图对象 questionnaire_question_item + * + * @author LionLi + * @date 2025-08-14 + */ +@Data +@ExcelIgnoreUnannotated +@AutoMapper(target = QuestionnaireQuestionItem.class) +public class QuestionnaireQuestionItemVo implements Serializable { + + @Serial + private static final long serialVersionUID = 1L; + + /** + * id + */ + @ExcelProperty(value = "id") + private Long id; + + /** + * 问题id + */ + @ExcelProperty(value = "问题id") + private Long questionId; + + /** + * 选项内容 + */ + @ExcelProperty(value = "选项内容") + private String itemContent; + + /** + * 排序 + */ + @ExcelProperty(value = "排序") + private Long sort; + + /** + * 备注 + */ + @ExcelProperty(value = "备注") + private String remark; + + +} diff --git a/ruoyi-modules/Property/src/main/java/org/dromara/property/domain/vo/QuestionnaireQuestionVo.java b/ruoyi-modules/Property/src/main/java/org/dromara/property/domain/vo/QuestionnaireQuestionVo.java new file mode 100644 index 00000000..964bf8ec --- /dev/null +++ b/ruoyi-modules/Property/src/main/java/org/dromara/property/domain/vo/QuestionnaireQuestionVo.java @@ -0,0 +1,74 @@ +package org.dromara.property.domain.vo; + +import org.dromara.property.domain.QuestionnaireQuestion; +import cn.idev.excel.annotation.ExcelIgnoreUnannotated; +import cn.idev.excel.annotation.ExcelProperty; +import org.dromara.common.excel.annotation.ExcelDictFormat; +import org.dromara.common.excel.convert.ExcelDictConvert; +import io.github.linpeilie.annotations.AutoMapper; +import lombok.Data; + +import java.io.Serial; +import java.io.Serializable; +import java.util.Date; + + + +/** + * 调查问卷问题视图对象 questionnaire_question + * + * @author LionLi + * @date 2025-08-14 + */ +@Data +@ExcelIgnoreUnannotated +@AutoMapper(target = QuestionnaireQuestion.class) +public class QuestionnaireQuestionVo implements Serializable { + + @Serial + private static final long serialVersionUID = 1L; + + /** + * id + */ + @ExcelProperty(value = "id") + private Long id; + + /** + * 调查问卷id + */ + @ExcelProperty(value = "调查问卷id") + private Long questionnaireId; + + /** + * 标题 + */ + @ExcelProperty(value = "标题") + private String head; + + /** + * 问题类型(1单行文本2多行文本3单选题4多选题5评分题6日期选择) + */ + @ExcelProperty(value = "问题类型(1单行文本2多行文本3单选题4多选题5评分题6日期选择)") + private String type; + + /** + * 是否必填(1不必填2必填) + */ + @ExcelProperty(value = "是否必填(1不必填2必填)") + private String isRequired; + + /** + * 描述 + */ + @ExcelProperty(value = "描述") + private String depict; + + /** + * 排序 + */ + @ExcelProperty(value = "排序") + private Long sort; + + +} diff --git a/ruoyi-modules/Property/src/main/java/org/dromara/property/domain/vo/QuestionnaireVo.java b/ruoyi-modules/Property/src/main/java/org/dromara/property/domain/vo/QuestionnaireVo.java new file mode 100644 index 00000000..b50fe3c8 --- /dev/null +++ b/ruoyi-modules/Property/src/main/java/org/dromara/property/domain/vo/QuestionnaireVo.java @@ -0,0 +1,76 @@ +package org.dromara.property.domain.vo; + +import java.util.Date; +import com.fasterxml.jackson.annotation.JsonFormat; +import org.dromara.property.domain.Questionnaire; +import cn.idev.excel.annotation.ExcelIgnoreUnannotated; +import cn.idev.excel.annotation.ExcelProperty; +import org.dromara.common.excel.annotation.ExcelDictFormat; +import org.dromara.common.excel.convert.ExcelDictConvert; +import io.github.linpeilie.annotations.AutoMapper; +import lombok.Data; + +import java.io.Serial; +import java.io.Serializable; +import java.util.Date; + + + +/** + * 调查问卷视图对象 questionnaire + * + * @author LionLi + * @date 2025-08-14 + */ +@Data +@ExcelIgnoreUnannotated +@AutoMapper(target = Questionnaire.class) +public class QuestionnaireVo implements Serializable { + + @Serial + private static final long serialVersionUID = 1L; + + /** + * id + */ + @ExcelProperty(value = "id") + private Long id; + + /** + * 标题 + */ + @ExcelProperty(value = "标题") + private String head; + + /** + * 描述 + */ + @ExcelProperty(value = "描述") + private String depict; + + /** + * 是否匿名收集 + */ + @ExcelProperty(value = "是否匿名收集") + private String isAnonyCollec; + + /** + * 是否多次提交 + */ + @ExcelProperty(value = "是否多次提交") + private String isCommit; + + /** + * 截止日期 + */ + @ExcelProperty(value = "截止日期") + private Date deadline; + + /** + * 状态(1草稿2已发布3未发布) + */ + @ExcelProperty(value = "状态(1草稿2已发布3未发布)") + private String status; + + +} diff --git a/ruoyi-modules/Property/src/main/java/org/dromara/property/dubbo/RemoteBuildingServiceImpl.java b/ruoyi-modules/Property/src/main/java/org/dromara/property/dubbo/RemoteBuildingServiceImpl.java index 391fbe35..d326256a 100644 --- a/ruoyi-modules/Property/src/main/java/org/dromara/property/dubbo/RemoteBuildingServiceImpl.java +++ b/ruoyi-modules/Property/src/main/java/org/dromara/property/dubbo/RemoteBuildingServiceImpl.java @@ -5,9 +5,7 @@ import org.apache.dubbo.config.annotation.DubboService; import org.dromara.property.api.RemoteBuildingService; import org.dromara.property.api.domain.vo.RemoteBuildingVo; import org.dromara.property.domain.vo.TbBuildingVo; -import org.dromara.property.domain.vo.TbUnitVo; import org.dromara.property.service.ITbBuildingService; -import org.dromara.property.service.ITbUnitService; /** * 对外提供的远程服务调用 diff --git a/ruoyi-modules/Property/src/main/java/org/dromara/property/mapper/AttendanceAreaMapper.java b/ruoyi-modules/Property/src/main/java/org/dromara/property/mapper/AttendanceAreaMapper.java new file mode 100644 index 00000000..cd78801b --- /dev/null +++ b/ruoyi-modules/Property/src/main/java/org/dromara/property/mapper/AttendanceAreaMapper.java @@ -0,0 +1,15 @@ +package org.dromara.property.mapper; + +import org.dromara.property.domain.AttendanceArea; +import org.dromara.property.domain.vo.AttendanceAreaVo; +import org.dromara.common.mybatis.core.mapper.BaseMapperPlus; + +/** + * 区域区域管理Mapper接口 + * + * @author LionLi + * @date 2025-08-13 + */ +public interface AttendanceAreaMapper extends BaseMapperPlus { + +} diff --git a/ruoyi-modules/Property/src/main/java/org/dromara/property/mapper/QuestionnaireMapper.java b/ruoyi-modules/Property/src/main/java/org/dromara/property/mapper/QuestionnaireMapper.java new file mode 100644 index 00000000..b76bb3ab --- /dev/null +++ b/ruoyi-modules/Property/src/main/java/org/dromara/property/mapper/QuestionnaireMapper.java @@ -0,0 +1,17 @@ +package org.dromara.property.mapper; + +import org.apache.ibatis.annotations.Mapper; +import org.dromara.property.domain.Questionnaire; +import org.dromara.property.domain.vo.QuestionnaireVo; +import org.dromara.common.mybatis.core.mapper.BaseMapperPlus; + +/** + * 调查问卷Mapper接口 + * + * @author LionLi + * @date 2025-08-14 + */ +@Mapper +public interface QuestionnaireMapper extends BaseMapperPlus { + +} diff --git a/ruoyi-modules/Property/src/main/java/org/dromara/property/mapper/QuestionnaireQuestionItemMapper.java b/ruoyi-modules/Property/src/main/java/org/dromara/property/mapper/QuestionnaireQuestionItemMapper.java new file mode 100644 index 00000000..adf0124d --- /dev/null +++ b/ruoyi-modules/Property/src/main/java/org/dromara/property/mapper/QuestionnaireQuestionItemMapper.java @@ -0,0 +1,17 @@ +package org.dromara.property.mapper; + +import org.apache.ibatis.annotations.Mapper; +import org.dromara.property.domain.QuestionnaireQuestionItem; +import org.dromara.property.domain.vo.QuestionnaireQuestionItemVo; +import org.dromara.common.mybatis.core.mapper.BaseMapperPlus; + +/** + * 调查问卷问题选项Mapper接口 + * + * @author LionLi + * @date 2025-08-14 + */ +@Mapper +public interface QuestionnaireQuestionItemMapper extends BaseMapperPlus { + +} diff --git a/ruoyi-modules/Property/src/main/java/org/dromara/property/mapper/QuestionnaireQuestionMapper.java b/ruoyi-modules/Property/src/main/java/org/dromara/property/mapper/QuestionnaireQuestionMapper.java new file mode 100644 index 00000000..d0def2a1 --- /dev/null +++ b/ruoyi-modules/Property/src/main/java/org/dromara/property/mapper/QuestionnaireQuestionMapper.java @@ -0,0 +1,17 @@ +package org.dromara.property.mapper; + +import org.apache.ibatis.annotations.Mapper; +import org.dromara.property.domain.QuestionnaireQuestion; +import org.dromara.property.domain.vo.QuestionnaireQuestionVo; +import org.dromara.common.mybatis.core.mapper.BaseMapperPlus; + +/** + * 调查问卷问题Mapper接口 + * + * @author LionLi + * @date 2025-08-14 + */ +@Mapper +public interface QuestionnaireQuestionMapper extends BaseMapperPlus { + +} diff --git a/ruoyi-modules/Property/src/main/java/org/dromara/property/service/IAttendanceAreaService.java b/ruoyi-modules/Property/src/main/java/org/dromara/property/service/IAttendanceAreaService.java new file mode 100644 index 00000000..d832b9d1 --- /dev/null +++ b/ruoyi-modules/Property/src/main/java/org/dromara/property/service/IAttendanceAreaService.java @@ -0,0 +1,69 @@ +package org.dromara.property.service; + +import org.dromara.property.domain.AttendanceArea; +import org.dromara.property.domain.vo.AttendanceAreaVo; +import org.dromara.property.domain.bo.AttendanceAreaBo; +import org.dromara.common.mybatis.core.page.TableDataInfo; +import org.dromara.common.mybatis.core.page.PageQuery; + +import java.util.Collection; +import java.util.List; + +/** + * 区域区域管理Service接口 + * + * @author LionLi + * @date 2025-08-13 + */ +public interface IAttendanceAreaService { + + /** + * 查询区域区域管理 + * + * @param id 主键 + * @return 区域区域管理 + */ + AttendanceAreaVo queryById(Long id); + + /** + * 分页查询区域区域管理列表 + * + * @param bo 查询条件 + * @param pageQuery 分页参数 + * @return 区域区域管理分页列表 + */ + TableDataInfo queryPageList(AttendanceAreaBo bo, PageQuery pageQuery); + + /** + * 查询符合条件的区域区域管理列表 + * + * @param bo 查询条件 + * @return 区域区域管理列表 + */ + List queryList(AttendanceAreaBo bo); + + /** + * 新增区域区域管理 + * + * @param bo 区域区域管理 + * @return 是否新增成功 + */ + Boolean insertByBo(AttendanceAreaBo bo); + + /** + * 修改区域区域管理 + * + * @param bo 区域区域管理 + * @return 是否修改成功 + */ + Boolean updateByBo(AttendanceAreaBo bo); + + /** + * 校验并批量删除区域区域管理信息 + * + * @param ids 待删除的主键集合 + * @param isValid 是否进行有效性校验 + * @return 是否删除成功 + */ + Boolean deleteWithValidByIds(Collection ids, Boolean isValid); +} diff --git a/ruoyi-modules/Property/src/main/java/org/dromara/property/service/IQuestionnaireService.java b/ruoyi-modules/Property/src/main/java/org/dromara/property/service/IQuestionnaireService.java new file mode 100644 index 00000000..11b6ade4 --- /dev/null +++ b/ruoyi-modules/Property/src/main/java/org/dromara/property/service/IQuestionnaireService.java @@ -0,0 +1,69 @@ +package org.dromara.property.service; + +import org.dromara.property.domain.Questionnaire; +import org.dromara.property.domain.vo.QuestionnaireVo; +import org.dromara.property.domain.bo.QuestionnaireBo; +import org.dromara.common.mybatis.core.page.TableDataInfo; +import org.dromara.common.mybatis.core.page.PageQuery; + +import java.util.Collection; +import java.util.List; + +/** + * 调查问卷Service接口 + * + * @author LionLi + * @date 2025-08-14 + */ +public interface IQuestionnaireService { + + /** + * 查询调查问卷 + * + * @param id 主键 + * @return 调查问卷 + */ + QuestionnaireVo queryById(Long id); + + /** + * 分页查询调查问卷列表 + * + * @param bo 查询条件 + * @param pageQuery 分页参数 + * @return 调查问卷分页列表 + */ + TableDataInfo queryPageList(QuestionnaireBo bo, PageQuery pageQuery); + + /** + * 查询符合条件的调查问卷列表 + * + * @param bo 查询条件 + * @return 调查问卷列表 + */ + List queryList(QuestionnaireBo bo); + + /** + * 新增调查问卷 + * + * @param bo 调查问卷 + * @return 是否新增成功 + */ + Boolean insertByBo(QuestionnaireBo bo); + + /** + * 修改调查问卷 + * + * @param bo 调查问卷 + * @return 是否修改成功 + */ + Boolean updateByBo(QuestionnaireBo bo); + + /** + * 校验并批量删除调查问卷信息 + * + * @param ids 待删除的主键集合 + * @param isValid 是否进行有效性校验 + * @return 是否删除成功 + */ + Boolean deleteWithValidByIds(Collection ids, Boolean isValid); +} diff --git a/ruoyi-modules/Property/src/main/java/org/dromara/property/service/impl/AttendanceAreaServiceImpl.java b/ruoyi-modules/Property/src/main/java/org/dromara/property/service/impl/AttendanceAreaServiceImpl.java new file mode 100644 index 00000000..26b70136 --- /dev/null +++ b/ruoyi-modules/Property/src/main/java/org/dromara/property/service/impl/AttendanceAreaServiceImpl.java @@ -0,0 +1,141 @@ +package org.dromara.property.service.impl; + +import cn.hutool.core.util.ObjectUtil; +import org.dromara.common.core.utils.MapstructUtils; +import org.dromara.common.core.utils.StringUtils; +import org.dromara.common.mybatis.core.page.TableDataInfo; +import org.dromara.common.mybatis.core.page.PageQuery; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; +import com.baomidou.mybatisplus.core.toolkit.Wrappers; +import lombok.RequiredArgsConstructor; +import lombok.extern.slf4j.Slf4j; +import org.springframework.stereotype.Service; +import org.dromara.property.domain.bo.AttendanceAreaBo; +import org.dromara.property.domain.vo.AttendanceAreaVo; +import org.dromara.property.domain.AttendanceArea; +import org.dromara.property.mapper.AttendanceAreaMapper; +import org.dromara.property.service.IAttendanceAreaService; + +import java.util.List; +import java.util.Map; +import java.util.Collection; + +/** + * 区域区域管理Service业务层处理 + * + * @author LionLi + * @date 2025-08-13 + */ +@Slf4j +@RequiredArgsConstructor +@Service +public class AttendanceAreaServiceImpl implements IAttendanceAreaService { + + private final AttendanceAreaMapper baseMapper; + + /** + * 查询区域区域管理 + * + * @param id 主键 + * @return 区域区域管理 + */ + @Override + public AttendanceAreaVo queryById(Long id){ + return baseMapper.selectVoById(id); + } + + /** + * 分页查询区域区域管理列表 + * + * @param bo 查询条件 + * @param pageQuery 分页参数 + * @return 区域区域管理分页列表 + */ + @Override + public TableDataInfo queryPageList(AttendanceAreaBo bo, PageQuery pageQuery) { + LambdaQueryWrapper lqw = buildQueryWrapper(bo); + Page result = baseMapper.selectVoPage(pageQuery.build(), lqw); + return TableDataInfo.build(result); + } + + /** + * 查询符合条件的区域区域管理列表 + * + * @param bo 查询条件 + * @return 区域区域管理列表 + */ + @Override + public List queryList(AttendanceAreaBo bo) { + LambdaQueryWrapper lqw = buildQueryWrapper(bo); + return baseMapper.selectVoList(lqw); + } + + private LambdaQueryWrapper buildQueryWrapper(AttendanceAreaBo bo) { + Map params = bo.getParams(); + LambdaQueryWrapper lqw = Wrappers.lambdaQuery(); + lqw.orderByAsc(AttendanceArea::getId); + lqw.eq(bo.getDeviceManageId() != null, AttendanceArea::getDeviceManageId, bo.getDeviceManageId()); + lqw.like(StringUtils.isNotBlank(bo.getArea()), AttendanceArea::getArea, bo.getArea()); + lqw.eq(StringUtils.isNotBlank(bo.getReamark()), AttendanceArea::getReamark, bo.getReamark()); + return lqw; + } + + /** + * 新增区域区域管理 + * + * @param bo 区域区域管理 + * @return 是否新增成功 + */ + @Override + public Boolean insertByBo(AttendanceAreaBo bo) { + AttendanceArea add = MapstructUtils.convert(bo, AttendanceArea.class); + if (ObjectUtil.isNotEmpty(bo.getDeviceManageId())) { + assert add != null; + // 将 deviceManageId 集合转换为以逗号分隔的字符串 +// String deviceManageIdsStr = StringUtils.join(bo.getDeviceManageId(), ","); + add.setDeviceManageId(bo.getDeviceManageId()); + } + validEntityBeforeSave(add); + boolean flag = baseMapper.insert(add) > 0; + if (flag) { + bo.setId(add.getId()); + } + return flag; + } + + /** + * 修改区域区域管理 + * + * @param bo 区域区域管理 + * @return 是否修改成功 + */ + @Override + public Boolean updateByBo(AttendanceAreaBo bo) { + AttendanceArea update = MapstructUtils.convert(bo, AttendanceArea.class); + validEntityBeforeSave(update); + return baseMapper.updateById(update) > 0; + } + + /** + * 保存前的数据校验 + */ + private void validEntityBeforeSave(AttendanceArea entity){ + //TODO 做一些数据校验,如唯一约束 + } + + /** + * 校验并批量删除区域区域管理信息 + * + * @param ids 待删除的主键集合 + * @param isValid 是否进行有效性校验 + * @return 是否删除成功 + */ + @Override + public Boolean deleteWithValidByIds(Collection ids, Boolean isValid) { + if(isValid){ + //TODO 做一些业务上的校验,判断是否需要校验 + } + return baseMapper.deleteByIds(ids) > 0; + } +} diff --git a/ruoyi-modules/Property/src/main/java/org/dromara/property/service/impl/AttendanceArrangementServiceImpl.java b/ruoyi-modules/Property/src/main/java/org/dromara/property/service/impl/AttendanceArrangementServiceImpl.java index 823732b7..588c7328 100644 --- a/ruoyi-modules/Property/src/main/java/org/dromara/property/service/impl/AttendanceArrangementServiceImpl.java +++ b/ruoyi-modules/Property/src/main/java/org/dromara/property/service/impl/AttendanceArrangementServiceImpl.java @@ -1,15 +1,11 @@ package org.dromara.property.service.impl; -import cn.hutool.core.date.DateUtil; 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 lombok.RequiredArgsConstructor; import lombok.extern.slf4j.Slf4j; -import org.apache.commons.beanutils.BeanUtils; import org.apache.dubbo.config.annotation.DubboReference; -import org.apache.dubbo.config.annotation.DubboService; import org.dromara.common.core.utils.MapstructUtils; import org.dromara.common.core.utils.StringUtils; import org.dromara.common.mybatis.core.page.PageQuery; @@ -21,17 +17,13 @@ import org.dromara.property.domain.vo.AttendanceArrangementVo; import org.dromara.property.domain.vo.AttendanceUserGroupVo; import org.dromara.property.mapper.*; import org.dromara.property.service.IAttendanceArrangementService; -import org.dromara.system.domain.SysUser; -import org.dromara.system.domain.vo.SysUserVo; -import org.dromara.system.mapper.SysUserMapper; -import org.dromara.system.service.ISysUserService; +import org.dromara.system.api.RemoteUserService; +import org.dromara.system.api.domain.vo.RemoteUserVo; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; -import java.time.DayOfWeek; import java.time.LocalDate; import java.time.ZoneId; -import java.time.temporal.WeekFields; import java.util.*; import java.util.stream.Collectors; @@ -61,8 +53,10 @@ public class AttendanceArrangementServiceImpl implements IAttendanceArrangementS private final AttendanceScheduleCycleMapper scheduleCycleMapper; + private final AttendanceAreaMapper attendanceAreaMapper; + @DubboReference - private final ISysUserService sysUserService; + private RemoteUserService remoteUserService; /** * 查询排班 * @@ -82,8 +76,14 @@ public class AttendanceArrangementServiceImpl implements IAttendanceArrangementS List userGroupList = userGroupMapper.selectVoList(Wrappers.lambdaQuery().eq(AttendanceUserGroup::getScheduleId, id)); //查询所有的用户信息 userGroupList.forEach(userGroup -> { - SysUserVo sysUserVo = sysUserService.selectUserById(userGroup.getEmployeeId()); - userGroup.setSysUser(sysUserVo); + RemoteUserVo userInfoById = remoteUserService.getUserInfoById(userGroup.getEmployeeId()); + userGroup.setRemoteUserVo(userInfoById); + + //获取deptId + Long deptId = userGroup.getDeptId(); + //根据deptId查询出部门名称 + String deptName = remoteUserService.selectDeptNamesByIds(Arrays.asList(deptId)).get(deptId); + userGroup.setDeptName(deptName); }); //将排班人员信息添加到排班信息中 vo.setUserGroupList(userGroupList); @@ -124,10 +124,14 @@ public class AttendanceArrangementServiceImpl implements IAttendanceArrangementS //将userList存到userGroupList中 userGroupVoList.forEach(userGroup -> { - SysUserVo sysUserVo = sysUserService.selectUserById(userGroup.getEmployeeId()); -// SysUserVo sysUserVo1 = sysUserService.selectUserById(userGroupVoList.get(0).getEmployeeId()); - userGroup.setSysUser(sysUserVo); -// userGroup.setSysUser(sysUserVo1); + + RemoteUserVo userInfoById = remoteUserService.getUserInfoById(userGroup.getEmployeeId()); + userGroup.setRemoteUserVo(userInfoById); + //获取deptId + Long deptId = userGroup.getDeptId(); + //根据deptId查询出部门名称 + String deptName = remoteUserService.selectDeptNamesByIds(Arrays.asList(deptId)).get(deptId); + userGroup.setDeptName(deptName); } ); @@ -141,7 +145,13 @@ public class AttendanceArrangementServiceImpl implements IAttendanceArrangementS //将考勤组的信息存到vo中 vo.setAttendanceGroup(attendanceGroup); - //3.查询班制信息 + //3.根据id查询区域信息 + Long areaId = vo.getAreaId(); + //根据区域id查询出区域的详细信息 + AttendanceArea attendanceArea = attendanceAreaMapper.selectById(areaId); + vo.setAttendanceArea(attendanceArea); + + //4.查询班制信息 //判断当前考勤组的班制是固定班制还是排班制 if (Objects.equals(attendanceGroup.getAttendanceType(), StatusConstant.FIXEDSCHEDULE)) { //3.1固定班制 @@ -197,7 +207,7 @@ public class AttendanceArrangementServiceImpl implements IAttendanceArrangementS } - //根据cycleDay查询出当前日期的班次信息 + //5.根据cycleDay查询出当前日期的班次信息 AttendanceScheduleCycle cycle = scheduleCycleMapper.selectOne(Wrappers.lambdaQuery().eq(AttendanceScheduleCycle::getGroupId, groupId).eq(AttendanceScheduleCycle::getDayNumber, cycleDay)); //将cycle存到vo中 vo.setScheduleCycle(cycle); diff --git a/ruoyi-modules/Property/src/main/java/org/dromara/property/service/impl/AttendanceUserGroupServiceImpl.java b/ruoyi-modules/Property/src/main/java/org/dromara/property/service/impl/AttendanceUserGroupServiceImpl.java index a4703391..b7535a88 100644 --- a/ruoyi-modules/Property/src/main/java/org/dromara/property/service/impl/AttendanceUserGroupServiceImpl.java +++ b/ruoyi-modules/Property/src/main/java/org/dromara/property/service/impl/AttendanceUserGroupServiceImpl.java @@ -1,30 +1,26 @@ package org.dromara.property.service.impl; -import org.apache.dubbo.config.annotation.DubboReference; -import org.apache.dubbo.config.annotation.DubboService; -import org.dromara.common.core.utils.MapstructUtils; -import org.dromara.common.core.utils.StringUtils; -import org.dromara.common.mybatis.core.page.TableDataInfo; -import org.dromara.common.mybatis.core.page.PageQuery; -import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.baomidou.mybatisplus.core.toolkit.Wrappers; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import lombok.RequiredArgsConstructor; import lombok.extern.slf4j.Slf4j; +import org.apache.dubbo.config.annotation.DubboReference; +import org.dromara.common.core.utils.MapstructUtils; +import org.dromara.common.mybatis.core.page.PageQuery; +import org.dromara.common.mybatis.core.page.TableDataInfo; import org.dromara.property.domain.*; -import org.dromara.property.domain.bo.AttendanceArrangementBo; -import org.dromara.property.domain.constant.StatusConstant; -import org.dromara.property.domain.vo.AttendanceArrangementVo; -import org.dromara.property.mapper.*; -import org.dromara.system.domain.vo.SysUserVo; -import org.dromara.system.service.ISysUserService; -import org.springframework.stereotype.Service; import org.dromara.property.domain.bo.AttendanceUserGroupBo; +import org.dromara.property.domain.constant.StatusConstant; import org.dromara.property.domain.vo.AttendanceUserGroupVo; +import org.dromara.property.mapper.*; import org.dromara.property.service.IAttendanceUserGroupService; +import org.dromara.system.api.RemoteDeptService; +import org.dromara.system.api.RemoteUserService; +import org.dromara.system.api.domain.vo.RemoteUserVo; +import org.springframework.stereotype.Service; import java.time.LocalDate; -import java.time.ZoneId; import java.time.temporal.ChronoUnit; import java.util.*; import java.util.stream.Collectors; @@ -52,8 +48,13 @@ public class AttendanceUserGroupServiceImpl implements IAttendanceUserGroupServi private final AttendanceScheduleCycleMapper scheduleCycleMapper; + private final AttendanceAreaMapper attendanceAreaMapper; + @DubboReference - private ISysUserService sysUserService; + private RemoteUserService remoteUserService; + + @DubboReference + private RemoteDeptService remoteDeptService; /** @@ -179,78 +180,96 @@ public class AttendanceUserGroupServiceImpl implements IAttendanceUserGroupServi Long scheduleId = vo.getScheduleId(); //根据employeeId查询出用户的详细信息 - SysUserVo sysUserVo = sysUserService.selectUserById(vo.getEmployeeId()); - vo.setSysUser(sysUserVo); + RemoteUserVo userInfoById = remoteUserService.getUserInfoById(vo.getEmployeeId()); + vo.setRemoteUserVo(userInfoById); + + + Long deptId = vo.getDeptId(); + String deptName = remoteUserService.selectDeptNamesByIds(Arrays.asList(deptId)).get(deptId); + vo.setDeptName(deptName); + + +// //通过employeeId查询出用户的部门信息 +// String deptInfo = remoteDeptService.selectDeptNameByIds(String.valueOf(vo.getDeptId())); +// vo.setDeptName(deptInfo); + //根据scheduleId查询出排班的详细信息 AttendanceArrangement attendanceArrangement = arrangementMapper.selectOne(Wrappers.lambdaQuery().eq(AttendanceArrangement::getId, scheduleId)); - // 假设每个vo只有一个scheduleId - Long userGroupListScheduleId = attendanceArrangement.getId(); - AttendanceArrangement arrangement = arrangementMapper.selectOne(Wrappers.lambdaQuery().eq(AttendanceArrangement::getId, userGroupListScheduleId)); - vo.setAttendanceArrangement(arrangement); + // 假设每个vo只有一个scheduleId + Long userGroupListScheduleId = attendanceArrangement.getId(); + AttendanceArrangement arrangement = arrangementMapper.selectOne(Wrappers.lambdaQuery().eq(AttendanceArrangement::getId, userGroupListScheduleId)); + vo.setAttendanceArrangement(arrangement); - // 根据scheduleId过滤出groupId - Long groupId = arrangement.getGroupId(); - // 根据groupId查询出考勤组的详细信息 - AttendanceGroup attendanceGroup = groupMapper.selectById(groupId); - vo.setAttendanceGroup(attendanceGroup); + // 根据scheduleId过滤出groupId + Long groupId = arrangement.getGroupId(); + // 根据groupId查询出考勤组的详细信息 + AttendanceGroup attendanceGroup = groupMapper.selectById(groupId); + vo.setAttendanceGroup(attendanceGroup); - // 判断当前考勤组的班制是固定班制还是排班制 - if (Objects.equals(attendanceGroup.getAttendanceType(), StatusConstant.FIXEDSCHEDULE)) { - // 固定班制 - // 根据考勤组id查询出班制信息的dayOfWeek - List weekSetList = weekSetMapper.selectList(Wrappers.lambdaQuery().eq(AttendanceWeekSet::getGroupId, groupId)); - // 将当前日期转换为周几 - int weekNumber = bo.getCurrentDate().getDayOfWeek().getValue(); - // 匹配weekNumber和weekSetList中的dayOfWeek,匹配成功则将weekSet存到vo中 - AttendanceWeekSet attendanceWeekSet = weekSetList.stream().filter(weekSet -> weekSet.getDayOfWeek() == weekNumber).findFirst().orElse(null); - if (attendanceWeekSet != null) { - // 根据过滤出来的attendanceWeekSet的weekSetId查询出shiftId - Long shiftId = attendanceWeekSet.getShiftId(); - // 根据shiftId查询出班次的详细信息 - AttendanceShift attendanceShift = shiftMapper.selectById(shiftId); - // 将attendanceShift存到vo中 - vo.setAttendanceShift(attendanceShift); - } - } else if (Objects.equals(attendanceGroup.getAttendanceType(), StatusConstant.SHIFTSCHEDULE)) { - // 排班制 - // 将startDate作为第一天,endDate作为最后一天,循环判断当前日期是第几天,取出当前天数的班次信息。 - LocalDate startDate = vo.getStartDate(); - LocalDate endDate = vo.getEndDate(); - LocalDate currentDate = bo.getCurrentDate(); - // 取出attendanceScheduleCycle表中的天数 - List cycleDaysList = scheduleCycleMapper.selectList(Wrappers.lambdaQuery().eq(AttendanceScheduleCycle::getGroupId, groupId)).stream() - .map(AttendanceScheduleCycle::getDayNumber) - .toList(); + //3.根据id查询区域信息 + Long areaId = arrangement.getAreaId(); + //根据区域id查询出区域的详细信息 + AttendanceArea attendanceArea = attendanceAreaMapper.selectById(areaId); + vo.setAttendanceArea(attendanceArea); - // 在startDate和endDate之间循环,判断当前日期是cycleDays中的第几天 - for (LocalDate date = startDate; date.isBefore(endDate) || date.isEqual(endDate); date = date.plusDays(1)) { - if (date.isEqual(currentDate)) { - // 判断当前日期是cycleDays中的第几天 - int dayNumber = (int) (ChronoUnit.DAYS.between(startDate, date) + 1); - int cycleDay = dayNumber % cycleDaysList.size(); - if (cycleDay == 0) { - cycleDay = cycleDaysList.size(); - } - // 根据cycleDay查询出当前日期的班次信息 - AttendanceScheduleCycle cycle = scheduleCycleMapper.selectOne(Wrappers.lambdaQuery() - .eq(AttendanceScheduleCycle::getGroupId, groupId) - .eq(AttendanceScheduleCycle::getDayNumber, cycleDay)); - if (cycle != null) { - // 将cycle存到vo中 - vo.setScheduleCycle(cycle); - // 根据cycleId查询出shiftId - Long shiftId = cycle.getShiftId(); - // 根据shiftId查询出班次的详细信息 - AttendanceShift attendanceShift = shiftMapper.selectById(shiftId); - // 将shift存到vo中 - vo.setAttendanceShift(attendanceShift); - } - break; // 找到当前日期后跳出循环 + // 判断当前考勤组的班制是固定班制还是排班制 + if (Objects.equals(attendanceGroup.getAttendanceType(), StatusConstant.FIXEDSCHEDULE)) { + // 固定班制 + // 根据考勤组id查询出班制信息的dayOfWeek + List weekSetList = weekSetMapper.selectList(Wrappers.lambdaQuery().eq(AttendanceWeekSet::getGroupId, groupId)); + // 将当前日期转换为周几 + int weekNumber = bo.getCurrentDate().getDayOfWeek().getValue(); + // 匹配weekNumber和weekSetList中的dayOfWeek,匹配成功则将weekSet存到vo中 + AttendanceWeekSet attendanceWeekSet = weekSetList.stream().filter(weekSet -> weekSet.getDayOfWeek() == weekNumber).findFirst().orElse(null); + if (attendanceWeekSet != null) { + // 根据过滤出来的attendanceWeekSet的weekSetId查询出shiftId + Long shiftId = attendanceWeekSet.getShiftId(); + // 根据shiftId查询出班次的详细信息 + AttendanceShift attendanceShift = shiftMapper.selectById(shiftId); + // 将attendanceShift存到vo中 + vo.setAttendanceShift(attendanceShift); + } + } else if (Objects.equals(attendanceGroup.getAttendanceType(), StatusConstant.SHIFTSCHEDULE)) { + // 排班制 + // 将startDate作为第一天,endDate作为最后一天,循环判断当前日期是第几天,取出当前天数的班次信息。 + LocalDate startDate = vo.getStartDate(); + LocalDate endDate = vo.getEndDate(); + LocalDate currentDate = bo.getCurrentDate(); + + // 取出attendanceScheduleCycle表中的天数 + List cycleDaysList = scheduleCycleMapper.selectList(Wrappers.lambdaQuery().eq(AttendanceScheduleCycle::getGroupId, groupId)).stream() + .map(AttendanceScheduleCycle::getDayNumber) + .toList(); + + // 在startDate和endDate之间循环,判断当前日期是cycleDays中的第几天 + for (LocalDate date = startDate; date.isBefore(endDate) || date.isEqual(endDate); date = date.plusDays(1)) { + if (date.isEqual(currentDate)) { + // 判断当前日期是cycleDays中的第几天 + int dayNumber = (int) (ChronoUnit.DAYS.between(startDate, date) + 1); + int cycleDay = dayNumber % cycleDaysList.size(); + if (cycleDay == 0) { + cycleDay = cycleDaysList.size(); } + // 根据cycleDay查询出当前日期的班次信息 + AttendanceScheduleCycle cycle = scheduleCycleMapper.selectOne(Wrappers.lambdaQuery() + .eq(AttendanceScheduleCycle::getGroupId, groupId) + .eq(AttendanceScheduleCycle::getDayNumber, cycleDay)); + if (cycle != null) { + // 将cycle存到vo中 + vo.setScheduleCycle(cycle); + // 根据cycleId查询出shiftId + Long shiftId = cycle.getShiftId(); + // 根据shiftId查询出班次的详细信息 + AttendanceShift attendanceShift = shiftMapper.selectById(shiftId); + // 将shift存到vo中 + vo.setAttendanceShift(attendanceShift); + } + break; // 找到当前日期后跳出循环 } } + } } return vo; }).collect(Collectors.toList())); diff --git a/ruoyi-modules/Property/src/main/java/org/dromara/property/service/impl/QuestionnaireServiceImpl.java b/ruoyi-modules/Property/src/main/java/org/dromara/property/service/impl/QuestionnaireServiceImpl.java new file mode 100644 index 00000000..01df710b --- /dev/null +++ b/ruoyi-modules/Property/src/main/java/org/dromara/property/service/impl/QuestionnaireServiceImpl.java @@ -0,0 +1,212 @@ +package org.dromara.property.service.impl; + +import cn.hutool.core.bean.BeanUtil; +import cn.hutool.core.collection.CollUtil; +import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper; +import org.dromara.common.core.utils.MapstructUtils; +import org.dromara.common.core.utils.StringUtils; +import org.dromara.common.mybatis.core.page.TableDataInfo; +import org.dromara.common.mybatis.core.page.PageQuery; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; +import com.baomidou.mybatisplus.core.toolkit.Wrappers; +import lombok.RequiredArgsConstructor; +import lombok.extern.slf4j.Slf4j; +import org.dromara.property.domain.QuestionnaireQuestion; +import org.dromara.property.domain.QuestionnaireQuestionItem; +import org.dromara.property.domain.bo.QuestionnaireQuestionBo; +import org.dromara.property.domain.bo.QuestionnaireQuestionItemBo; +import org.dromara.property.mapper.QuestionnaireQuestionItemMapper; +import org.dromara.property.mapper.QuestionnaireQuestionMapper; +import org.springframework.stereotype.Service; +import org.dromara.property.domain.bo.QuestionnaireBo; +import org.dromara.property.domain.vo.QuestionnaireVo; +import org.dromara.property.domain.Questionnaire; +import org.dromara.property.mapper.QuestionnaireMapper; +import org.dromara.property.service.IQuestionnaireService; +import org.springframework.transaction.annotation.Transactional; + +import java.util.List; +import java.util.Map; +import java.util.Collection; + +/** + * 调查问卷Service业务层处理 + * + * @author LionLi + * @date 2025-08-14 + */ +@Slf4j +@RequiredArgsConstructor +@Service +public class QuestionnaireServiceImpl implements IQuestionnaireService { + + private final QuestionnaireMapper baseMapper; + private final QuestionnaireQuestionMapper questionnaireQuestionMapper; + private final QuestionnaireQuestionItemMapper questionnaireQuestionItemMapper; + + /** + * 查询调查问卷 + * + * @param id 主键 + * @return 调查问卷 + */ + @Override + public QuestionnaireVo queryById(Long id) { + return baseMapper.selectVoById(id); + } + + /** + * 分页查询调查问卷列表 + * + * @param bo 查询条件 + * @param pageQuery 分页参数 + * @return 调查问卷分页列表 + */ + @Override + public TableDataInfo queryPageList(QuestionnaireBo bo, PageQuery pageQuery) { + LambdaQueryWrapper lqw = buildQueryWrapper(bo); + Page result = baseMapper.selectVoPage(pageQuery.build(), lqw); + return TableDataInfo.build(result); + } + + /** + * 查询符合条件的调查问卷列表 + * + * @param bo 查询条件 + * @return 调查问卷列表 + */ + @Override + public List queryList(QuestionnaireBo bo) { + LambdaQueryWrapper lqw = buildQueryWrapper(bo); + return baseMapper.selectVoList(lqw); + } + + private LambdaQueryWrapper buildQueryWrapper(QuestionnaireBo bo) { + Map params = bo.getParams(); + LambdaQueryWrapper lqw = Wrappers.lambdaQuery(); + lqw.orderByAsc(Questionnaire::getId); + lqw.like(StringUtils.isNotBlank(bo.getHead()), Questionnaire::getHead, bo.getHead()); + lqw.eq(StringUtils.isNotBlank(bo.getStatus()), Questionnaire::getStatus, bo.getStatus()); + return lqw; + } + + /** + * 新增调查问卷 + * + * @param bo 调查问卷 + * @return 是否新增成功 + */ + @Override + @Transactional(rollbackFor = Exception.class) + public Boolean insertByBo(QuestionnaireBo bo) { + Questionnaire add = MapstructUtils.convert(bo, Questionnaire.class); + boolean flag = baseMapper.insert(add) > 0; + if (flag) { + bo.setId(add.getId()); + validEntityBeforeAdd(bo); + } + return flag; + } + + /** + * 修改调查问卷 + * + * @param bo 调查问卷 + * @return 是否修改成功 + */ + @Override + @Transactional(rollbackFor = Exception.class) + public Boolean updateByBo(QuestionnaireBo bo) { + Questionnaire update = MapstructUtils.convert(bo, Questionnaire.class); + boolean flag = baseMapper.updateById(update) > 0; + if (flag) { + validEntityBeforeUpdate(bo); + } + return flag; + } + + /** + * 保存前的数据校验 + */ + private void validEntityBeforeAdd(QuestionnaireBo bo) { + //TODO 做一些数据校验,如唯一约束 + List questionnaireQuestions = bo.getQuestionnaireQuestions(); + if (CollUtil.isNotEmpty(questionnaireQuestions)) { + questionnaireQuestions.stream().forEach(questionnaireQuestionBo -> { + //新增问题 + questionnaireQuestionBo.setQuestionnaireId(bo.getId()); + QuestionnaireQuestion questionnaireQuestion = BeanUtil.copyProperties(questionnaireQuestionBo, QuestionnaireQuestion.class); + questionnaireQuestionMapper.insert(questionnaireQuestion); + List questionnaireQuestionItems = questionnaireQuestionBo.getQuestionnaireQuestionItems(); + if (CollUtil.isNotEmpty(questionnaireQuestionItems)) { + questionnaireQuestionItems.stream().forEach(questionnaireQuestionItemBo -> { + //新增问题项 + questionnaireQuestionItemBo.setQuestionId(questionnaireQuestion.getId()); + QuestionnaireQuestionItem questionnaireQuestionItem = BeanUtil.copyProperties(questionnaireQuestionItemBo, QuestionnaireQuestionItem.class); + questionnaireQuestionItemMapper.insert(questionnaireQuestionItem); + }); + } + }); + + } + } + + /** + * 更新前的数据校验 + */ + private void validEntityBeforeUpdate(QuestionnaireBo bo) { + List questionnaireQuestions = bo.getQuestionnaireQuestions(); + if (CollUtil.isNotEmpty(questionnaireQuestions)) { + //删除问题 + questionnaireQuestionMapper.delete(new LambdaUpdateWrapper().eq(QuestionnaireQuestion::getQuestionnaireId, bo.getId())); + questionnaireQuestions.stream().forEach(questionnaireQuestionBo -> { + //新增问题 + questionnaireQuestionBo.setQuestionnaireId(bo.getId()); + QuestionnaireQuestion questionnaireQuestion = BeanUtil.copyProperties(questionnaireQuestionBo, QuestionnaireQuestion.class); + questionnaireQuestionMapper.insert(questionnaireQuestion); + List questionnaireQuestionItems = questionnaireQuestionBo.getQuestionnaireQuestionItems(); + if (CollUtil.isNotEmpty(questionnaireQuestionItems)) { + //删除问题项 + questionnaireQuestionItemMapper.delete(new LambdaUpdateWrapper().eq(QuestionnaireQuestionItem::getQuestionId, questionnaireQuestion.getId())); + questionnaireQuestionItems.stream().forEach(questionnaireQuestionItemBo -> { + //新增问题项 + questionnaireQuestionItemBo.setQuestionId(questionnaireQuestion.getId()); + QuestionnaireQuestionItem questionnaireQuestionItem = BeanUtil.copyProperties(questionnaireQuestionItemBo, QuestionnaireQuestionItem.class); + questionnaireQuestionItemMapper.insert(questionnaireQuestionItem); + }); + } + }); + + } + } + + /** + * 校验并批量删除调查问卷信息 + * + * @param ids 待删除的主键集合 + * @param isValid 是否进行有效性校验 + * @return 是否删除成功 + */ + @Override + public Boolean deleteWithValidByIds(Collection ids, Boolean isValid) { + boolean flag = baseMapper.deleteByIds(ids) > 0; + if(flag){ + ids.stream().forEach(id -> { + //查询问题 + List questionnaireQuestionList = questionnaireQuestionMapper.selectList(new LambdaUpdateWrapper().eq(QuestionnaireQuestion::getQuestionnaireId, id)); + //查询问题项 + if (CollUtil.isNotEmpty(questionnaireQuestionList)) { + questionnaireQuestionList.stream().forEach(questionnaireQuestion -> { + boolean falg = questionnaireQuestionItemMapper.exists(new LambdaUpdateWrapper().eq(QuestionnaireQuestionItem::getQuestionId, questionnaireQuestion.getId())); + if (falg) { + questionnaireQuestionItemMapper.delete(new LambdaUpdateWrapper().eq(QuestionnaireQuestionItem::getQuestionId, questionnaireQuestion.getId())); + } + }); + } + }); + } + + return flag; + } +} diff --git a/ruoyi-modules/Property/src/main/resources/mapper/Property/QuestionnaireMapper.xml b/ruoyi-modules/Property/src/main/resources/mapper/Property/QuestionnaireMapper.xml new file mode 100644 index 00000000..310420a7 --- /dev/null +++ b/ruoyi-modules/Property/src/main/resources/mapper/Property/QuestionnaireMapper.xml @@ -0,0 +1,7 @@ + + + + + diff --git a/ruoyi-modules/Property/src/main/resources/mapper/Property/QuestionnaireQuestionItemMapper.xml b/ruoyi-modules/Property/src/main/resources/mapper/Property/QuestionnaireQuestionItemMapper.xml new file mode 100644 index 00000000..3f550081 --- /dev/null +++ b/ruoyi-modules/Property/src/main/resources/mapper/Property/QuestionnaireQuestionItemMapper.xml @@ -0,0 +1,7 @@ + + + + + diff --git a/ruoyi-modules/Property/src/main/resources/mapper/Property/QuestionnaireQuestionMapper.xml b/ruoyi-modules/Property/src/main/resources/mapper/Property/QuestionnaireQuestionMapper.xml new file mode 100644 index 00000000..296bf895 --- /dev/null +++ b/ruoyi-modules/Property/src/main/resources/mapper/Property/QuestionnaireQuestionMapper.xml @@ -0,0 +1,7 @@ + + + + + diff --git a/ruoyi-modules/Sis/src/main/java/org/dromara/sis/controller/AlarmPushController.java b/ruoyi-modules/Sis/src/main/java/org/dromara/sis/controller/AlarmPushController.java index 4029d2b3..71440087 100644 --- a/ruoyi-modules/Sis/src/main/java/org/dromara/sis/controller/AlarmPushController.java +++ b/ruoyi-modules/Sis/src/main/java/org/dromara/sis/controller/AlarmPushController.java @@ -131,6 +131,7 @@ public class AlarmPushController { private SisAlarmEventsBo convertToAlarmEvents(Map recordMap, Long recordId) { SisAlarmEventsBo sisAlarmEvents = new SisAlarmEventsBo(); sisAlarmEvents.setId(recordId); + // 转换类型和级别 // sisAlarmEvents.setType(convertToLong(recordMap.get("Type"))); sisAlarmEvents.setBigType(EventBigTypeEnum.EQUIPMENT_UP.getCode()); diff --git a/ruoyi-modules/pom.xml b/ruoyi-modules/pom.xml index 267aca5a..bb867d3f 100644 --- a/ruoyi-modules/pom.xml +++ b/ruoyi-modules/pom.xml @@ -14,7 +14,7 @@ ruoyi-job ruoyi-resource ruoyi-workflow - + Property diff --git a/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/system/service/impl/SysUserServiceImpl.java b/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/system/service/impl/SysUserServiceImpl.java index d42d1d44..5e9d71ac 100644 --- a/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/system/service/impl/SysUserServiceImpl.java +++ b/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/system/service/impl/SysUserServiceImpl.java @@ -45,7 +45,6 @@ import java.util.Map; @Slf4j @RequiredArgsConstructor @Service -@DubboService public class SysUserServiceImpl implements ISysUserService { private final SysUserMapper baseMapper; diff --git a/script/config/nacos/datasource.yml b/script/config/nacos/datasource.yml index 15210e86..5451080d 100644 --- a/script/config/nacos/datasource.yml +++ b/script/config/nacos/datasource.yml @@ -6,7 +6,7 @@ datasource: username: root password: 1234 gen: - url: jdbc:mysql://localhost:3306/ry-cloud?useUnicode=true&characterEncoding=utf8&zeroDateTimeBehavior=convertToNull&useSSL=true&serverTimezone=GMT%2B8&rewriteBatchedStatements=true&allowPublicKeyRetrieval=true + url: jdbc:mysql://localhost:3306/dimp?useUnicode=true&characterEncoding=utf8&zeroDateTimeBehavior=convertToNull&useSSL=true&serverTimezone=GMT%2B8&rewriteBatchedStatements=true&allowPublicKeyRetrieval=true username: root password: 1234 job: