Просмотр исходного кода

Merge branch 'master' of http://60.171.161.56:20000/tjf/yuanqu

wangmengwei 7 месяцев назад
Родитель
Сommit
f97be9810c
57 измененных файлов с 4440 добавлено и 99 удалено
  1. 92 0
      ruoyi-admin/src/main/java/com/ruoyi/web/controller/food/MenuFoodController.java
  2. 91 0
      ruoyi-admin/src/main/java/com/ruoyi/web/controller/food/MenuFoodRecordController.java
  3. 162 0
      ruoyi-admin/src/main/java/com/ruoyi/web/controller/meeting/AbstractSignature.java
  4. 53 0
      ruoyi-admin/src/main/java/com/ruoyi/web/controller/meeting/LfasrSignature.java
  5. 14 22
      ruoyi-admin/src/main/java/com/ruoyi/web/controller/meeting/MeetingRecordsController.java
  6. 165 0
      ruoyi-admin/src/main/java/com/ruoyi/web/controller/meeting/RealTimeController.java
  7. 91 0
      ruoyi-admin/src/main/java/com/ruoyi/web/controller/sign/SignInController.java
  8. 7 13
      ruoyi-admin/src/main/java/com/ruoyi/web/controller/system/SysDictTypeController.java
  9. 2 0
      ruoyi-admin/src/main/java/com/ruoyi/web/controller/system/SysLoginController.java
  10. 99 0
      ruoyi-admin/src/main/java/com/ruoyi/web/controller/vote/VoteResultController.java
  11. 91 0
      ruoyi-admin/src/main/java/com/ruoyi/web/controller/vote/VoteThemeController.java
  12. 1 1
      ruoyi-admin/src/main/resources/application-prod.yml
  13. 2 2
      ruoyi-admin/src/main/resources/application.yml
  14. 18 8
      ruoyi-common/pom.xml
  15. 65 0
      ruoyi-common/src/main/java/com/ruoyi/common/utils/EncryptUtil.java
  16. 1 0
      ruoyi-common/src/main/java/com/ruoyi/common/utils/file/MimeTypeUtils.java
  17. 91 0
      ruoyi-common/src/main/java/com/ruoyi/common/utils/xunfei/CryptTools.java
  18. 163 0
      ruoyi-common/src/main/java/com/ruoyi/common/utils/xunfei/HttpConnector.java
  19. 281 0
      ruoyi-common/src/main/java/com/ruoyi/common/utils/xunfei/HttpUtil.java
  20. 1 0
      ruoyi-framework/src/main/java/com/ruoyi/framework/config/SecurityConfig.java
  21. 1 1
      ruoyi-generator/src/main/resources/generator.yml
  22. 16 3
      ruoyi-system/src/main/java/com/ruoyi/system/domain/ConferenceRoomOrder.java
  23. 79 14
      ruoyi-system/src/main/java/com/ruoyi/system/domain/MeetingRecords.java
  24. 167 0
      ruoyi-system/src/main/java/com/ruoyi/system/domain/MenuFood.java
  25. 171 0
      ruoyi-system/src/main/java/com/ruoyi/system/domain/MenuFoodRecord.java
  26. 164 0
      ruoyi-system/src/main/java/com/ruoyi/system/domain/SignIn.java
  27. 64 0
      ruoyi-system/src/main/java/com/ruoyi/system/domain/VoteOption.java
  28. 151 0
      ruoyi-system/src/main/java/com/ruoyi/system/domain/VoteResult.java
  29. 79 0
      ruoyi-system/src/main/java/com/ruoyi/system/domain/VoteTheme.java
  30. 23 0
      ruoyi-system/src/main/java/com/ruoyi/system/domain/vo/MenuFoodVo.java
  31. 3 2
      ruoyi-system/src/main/java/com/ruoyi/system/mapper/MeetingRecordsMapper.java
  32. 64 0
      ruoyi-system/src/main/java/com/ruoyi/system/mapper/MenuFoodMapper.java
  33. 62 0
      ruoyi-system/src/main/java/com/ruoyi/system/mapper/MenuFoodRecordMapper.java
  34. 62 0
      ruoyi-system/src/main/java/com/ruoyi/system/mapper/SignInMapper.java
  35. 62 0
      ruoyi-system/src/main/java/com/ruoyi/system/mapper/VoteResultMapper.java
  36. 89 0
      ruoyi-system/src/main/java/com/ruoyi/system/mapper/VoteThemeMapper.java
  37. 1 1
      ruoyi-system/src/main/java/com/ruoyi/system/service/IMeetingRecordsService.java
  38. 62 0
      ruoyi-system/src/main/java/com/ruoyi/system/service/IMenuFoodRecordService.java
  39. 64 0
      ruoyi-system/src/main/java/com/ruoyi/system/service/IMenuFoodService.java
  40. 62 0
      ruoyi-system/src/main/java/com/ruoyi/system/service/ISignInService.java
  41. 70 0
      ruoyi-system/src/main/java/com/ruoyi/system/service/IVoteResultService.java
  42. 62 0
      ruoyi-system/src/main/java/com/ruoyi/system/service/IVoteThemeService.java
  43. 35 24
      ruoyi-system/src/main/java/com/ruoyi/system/service/impl/MeetingRecordsServiceImpl.java
  44. 98 0
      ruoyi-system/src/main/java/com/ruoyi/system/service/impl/MenuFoodRecordServiceImpl.java
  45. 131 0
      ruoyi-system/src/main/java/com/ruoyi/system/service/impl/MenuFoodServiceImpl.java
  46. 131 0
      ruoyi-system/src/main/java/com/ruoyi/system/service/impl/SignInServiceImpl.java
  47. 50 0
      ruoyi-system/src/main/java/com/ruoyi/system/service/impl/Task.java
  48. 158 0
      ruoyi-system/src/main/java/com/ruoyi/system/service/impl/VoteResultServiceImpl.java
  49. 127 0
      ruoyi-system/src/main/java/com/ruoyi/system/service/impl/VoteThemeServiceImpl.java
  50. 6 0
      ruoyi-system/src/main/resources/mapper/system/ConferenceRoomOrderMapper.xml
  51. 33 7
      ruoyi-system/src/main/resources/mapper/system/MeetingRecordsMapper.xml
  52. 151 0
      ruoyi-system/src/main/resources/mapper/system/MenuFoodMapper.xml
  53. 116 0
      ruoyi-system/src/main/resources/mapper/system/MenuFoodRecordMapper.xml
  54. 116 0
      ruoyi-system/src/main/resources/mapper/system/SignInMapper.xml
  55. 1 1
      ruoyi-system/src/main/resources/mapper/system/SysUserMapper.xml
  56. 107 0
      ruoyi-system/src/main/resources/mapper/system/VoteResultMapper.xml
  57. 112 0
      ruoyi-system/src/main/resources/mapper/system/VoteThemeMapper.xml

+ 92 - 0
ruoyi-admin/src/main/java/com/ruoyi/web/controller/food/MenuFoodController.java

@@ -0,0 +1,92 @@
+package com.ruoyi.web.controller.food;
+
+import com.ruoyi.common.annotation.Log;
+import com.ruoyi.common.core.controller.BaseController;
+import com.ruoyi.common.core.domain.AjaxResult;
+import com.ruoyi.common.core.page.TableDataInfo;
+import com.ruoyi.common.enums.BusinessType;
+import com.ruoyi.common.utils.poi.ExcelUtil;
+import com.ruoyi.system.domain.MenuFood;
+import com.ruoyi.system.domain.vo.MenuFoodVo;
+import com.ruoyi.system.service.IMenuFoodService;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.security.access.prepost.PreAuthorize;
+import org.springframework.web.bind.annotation.*;
+
+import javax.servlet.http.HttpServletResponse;
+import java.util.List;
+
+/**
+ * 每日食谱Controller
+ *
+ * @author boman
+ * @date 2024-11-07
+ */
+@RestController
+@RequestMapping("/system/menuFood")
+public class MenuFoodController extends BaseController {
+    @Autowired
+    private IMenuFoodService menuFoodService;
+
+    /**
+     * 查询每日食谱列表
+     */
+    @PreAuthorize("@ss.hasPermi('system:menuFood:list')")
+    @GetMapping("/list")
+    public TableDataInfo list(MenuFood menuFood) {
+        startPage();
+        List<MenuFood> list = menuFoodService.selectMenuFoodList(menuFood);
+        return getDataTable(list);
+    }
+
+    /**
+     * 导出每日食谱列表
+     */
+    @PreAuthorize("@ss.hasPermi('system:menuFood:export')")
+    @Log(title = "每日食谱", businessType = BusinessType.EXPORT)
+    @PostMapping("/export")
+    public void export(HttpServletResponse response, MenuFood menuFood) {
+        List<MenuFood> list = menuFoodService.selectMenuFoodList(menuFood);
+        ExcelUtil<MenuFood> util = new ExcelUtil<MenuFood>(MenuFood.class);
+        util.exportExcel(response, list, "每日食谱数据");
+    }
+
+    /**
+     * 获取每日食谱详细信息
+     */
+    @PreAuthorize("@ss.hasPermi('system:menuFood:query')")
+    @GetMapping(value = "/{menuFoodId}")
+    public AjaxResult getInfo(@PathVariable("menuFoodId") Long menuFoodId) {
+        return success(menuFoodService.selectMenuFoodByMenuFoodId(menuFoodId));
+    }
+
+    /**
+     * 新增每日食谱
+     */
+    @PreAuthorize("@ss.hasPermi('system:menuFood:add')")
+    @Log(title = "每日食谱", businessType = BusinessType.INSERT)
+    @PostMapping
+    public AjaxResult add(@RequestBody MenuFoodVo menuFoodVo) {
+        return toAjax(menuFoodService.batchMenuFoodVo(menuFoodVo));
+    }
+
+    /**
+     * 修改每日食谱
+     */
+    @PreAuthorize("@ss.hasPermi('system:menuFood:edit')")
+    @Log(title = "每日食谱", businessType = BusinessType.UPDATE)
+    @PostMapping("/put")
+    public AjaxResult edit(@RequestBody MenuFood menuFood) {
+        return toAjax(menuFoodService.updateMenuFood(menuFood));
+    }
+
+    /**
+     * 删除每日食谱
+     */
+    @PreAuthorize("@ss.hasPermi('system:menuFood:remove')")
+    @Log(title = "每日食谱", businessType = BusinessType.DELETE)
+    @GetMapping("/delete/{menuFoodIds}")
+    public AjaxResult remove(@PathVariable Long[] menuFoodIds) {
+        return toAjax(menuFoodService.deleteMenuFoodByMenuFoodIds(menuFoodIds));
+    }
+}

+ 91 - 0
ruoyi-admin/src/main/java/com/ruoyi/web/controller/food/MenuFoodRecordController.java

@@ -0,0 +1,91 @@
+package com.ruoyi.web.controller.food;
+
+import com.ruoyi.common.annotation.Log;
+import com.ruoyi.common.core.controller.BaseController;
+import com.ruoyi.common.core.domain.AjaxResult;
+import com.ruoyi.common.core.page.TableDataInfo;
+import com.ruoyi.common.enums.BusinessType;
+import com.ruoyi.common.utils.poi.ExcelUtil;
+import com.ruoyi.system.domain.MenuFoodRecord;
+import com.ruoyi.system.service.IMenuFoodRecordService;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.security.access.prepost.PreAuthorize;
+import org.springframework.web.bind.annotation.*;
+
+import javax.servlet.http.HttpServletResponse;
+import java.util.List;
+
+/**
+ * 每日食谱记录Controller
+ *
+ * @author boman
+ * @date 2024-11-07
+ */
+@RestController
+@RequestMapping("/system/foodRecord")
+public class MenuFoodRecordController extends BaseController {
+    @Autowired
+    private IMenuFoodRecordService menuFoodRecordService;
+
+    /**
+     * 查询每日食谱记录列表
+     */
+    @PreAuthorize("@ss.hasPermi('system:foodRecord:list')")
+    @GetMapping("/list")
+    public TableDataInfo list(MenuFoodRecord menuFoodRecord) {
+        startPage();
+        List<MenuFoodRecord> list = menuFoodRecordService.selectMenuFoodRecordList(menuFoodRecord);
+        return getDataTable(list);
+    }
+
+    /**
+     * 导出每日食谱记录列表
+     */
+    @PreAuthorize("@ss.hasPermi('system:foodRecord:export')")
+    @Log(title = "每日食谱记录", businessType = BusinessType.EXPORT)
+    @PostMapping("/export")
+    public void export(HttpServletResponse response, MenuFoodRecord menuFoodRecord) {
+        List<MenuFoodRecord> list = menuFoodRecordService.selectMenuFoodRecordList(menuFoodRecord);
+        ExcelUtil<MenuFoodRecord> util = new ExcelUtil<MenuFoodRecord>(MenuFoodRecord.class);
+        util.exportExcel(response, list, "每日食谱记录数据");
+    }
+
+    /**
+     * 获取每日食谱记录详细信息
+     */
+    @PreAuthorize("@ss.hasPermi('system:foodRecord:query')")
+    @GetMapping(value = "/{menuFoodRecordId}")
+    public AjaxResult getInfo(@PathVariable("menuFoodRecordId") Long menuFoodRecordId) {
+        return success(menuFoodRecordService.selectMenuFoodRecordByMenuFoodRecordId(menuFoodRecordId));
+    }
+
+    /**
+     * 新增每日食谱记录
+     */
+    @PreAuthorize("@ss.hasPermi('system:foodRecord:add')")
+    @Log(title = "每日食谱记录", businessType = BusinessType.INSERT)
+    @PostMapping
+    public AjaxResult add(@RequestBody MenuFoodRecord menuFoodRecord) {
+        return toAjax(menuFoodRecordService.insertMenuFoodRecord(menuFoodRecord));
+    }
+
+    /**
+     * 修改每日食谱记录
+     */
+    @PreAuthorize("@ss.hasPermi('system:foodRecord:edit')")
+    @Log(title = "每日食谱记录", businessType = BusinessType.UPDATE)
+    @PostMapping("/put")
+    public AjaxResult edit(@RequestBody MenuFoodRecord menuFoodRecord) {
+        return toAjax(menuFoodRecordService.updateMenuFoodRecord(menuFoodRecord));
+    }
+
+    /**
+     * 删除每日食谱记录
+     */
+    @PreAuthorize("@ss.hasPermi('system:foodRecord:remove')")
+    @Log(title = "每日食谱记录", businessType = BusinessType.DELETE)
+    @GetMapping("/delete/{menuFoodRecordIds}")
+    public AjaxResult remove(@PathVariable Long[] menuFoodRecordIds) {
+        return toAjax(menuFoodRecordService.deleteMenuFoodRecordByMenuFoodRecordIds(menuFoodRecordIds));
+    }
+}

+ 162 - 0
ruoyi-admin/src/main/java/com/ruoyi/web/controller/meeting/AbstractSignature.java

@@ -0,0 +1,162 @@
+package com.ruoyi.web.controller.meeting;
+
+import java.net.MalformedURLException;
+import java.net.URL;
+import java.security.SignatureException;
+
+/**
+ * 加签加密抽象类
+ *
+ * @author : jun
+ * @date : 2021年04月08日
+ */
+public abstract class AbstractSignature {
+    /**
+     * 签名ID
+     */
+    private String id;
+
+    /**
+     * 加密key
+     */
+    private String key;
+
+    /**
+     * 服务url
+     */
+    private String url;
+
+    /**
+     * 加密算法
+     */
+    private String encryptType;
+
+    /**
+     * 待加密原始字符
+     */
+    private String originSign;
+
+    /**
+     * 最终生成的签名
+     */
+    protected String signa;
+
+    /**
+     * 时间戳timestamp
+     */
+    private String ts;
+
+    /**
+     * 请求类型,默认get
+     */
+    protected String requestMethod = "GET";
+
+    /**
+     * @param id
+     * @param key
+     * @param url
+     */
+    public AbstractSignature(String id, String key, String url) {
+        this.id = id;
+        this.key = key;
+        this.url = url;
+        this.ts = generateTs();
+    }
+
+    /**
+     * 可设置请求类型
+     * @param id
+     * @param key
+     * @param url
+     * @param isPost 是否为POST
+     */
+    public AbstractSignature(String id, String key, String url, boolean isPost) {
+        this.id = id;
+        this.key = key;
+        this.url = url;
+        if (isPost) {
+            this.requestMethod = "POST";
+        }else{
+            this.requestMethod = "GET";
+        }
+
+        this.ts = generateTs();
+    }
+
+    /**
+     * 生成ts时间
+     */
+    public String generateTs() {
+        return String.valueOf(System.currentTimeMillis() / 1000L);
+    }
+
+
+    /**
+     * 完成签名,返回完整签名
+     *
+     * @return
+     * @throws SignatureException
+     */
+    public abstract String getSigna() throws SignatureException;
+
+    public String generateOriginSign() throws SignatureException {
+        try {
+            URL url = new URL(this.getUrl());
+
+            return "host: " + url.getHost() + "\n" +
+                    "date: " + this.getTs() + "\n" +
+                    "GET " + url.getPath() + " HTTP/1.1";
+        } catch (MalformedURLException e) {
+            throw new SignatureException("MalformedURLException:" + e.getMessage());
+        }
+    }
+
+
+    public String getId() {
+        return id;
+    }
+
+    public void setId(String id) {
+        this.id = id;
+    }
+
+    public String getKey() {
+        return key;
+    }
+
+    public void setKey(String key) {
+        this.key = key;
+    }
+
+    public String getOriginSign() {
+        return originSign;
+    }
+
+    public void setOriginSign(String originSign) {
+        this.originSign = originSign;
+    }
+
+    public String getTs() {
+        return ts;
+    }
+
+    public void setTs(String ts) {
+        this.ts = ts;
+    }
+
+    public String getUrl() {
+        return url;
+    }
+
+    public void setUrl(String url) {
+        this.url = url;
+    }
+
+    public String getEncryptType() {
+        return encryptType;
+    }
+
+    public void setEncryptType(String encryptType) {
+        this.encryptType = encryptType;
+    }
+}

+ 53 - 0
ruoyi-admin/src/main/java/com/ruoyi/web/controller/meeting/LfasrSignature.java

@@ -0,0 +1,53 @@
+package com.ruoyi.web.controller.meeting;
+
+
+import com.ruoyi.common.utils.xunfei.CryptTools;
+import cn.hutool.core.util.ObjectUtil;
+import java.security.NoSuchAlgorithmException;
+import java.security.SignatureException;
+
+/**
+ * Lfasr能力签名实体
+ *
+ * @author : jun
+ * @date : 2021年03月29日
+ */
+public class LfasrSignature extends AbstractSignature {
+
+    /**
+     *
+     * @param appId
+     * @param keySecret
+     */
+    public LfasrSignature(String appId, String keySecret) {
+        super(appId, keySecret, null);
+    }
+
+    @Override
+    public String getSigna() throws SignatureException {
+        if (ObjectUtil.isEmpty(this.signa)) {
+            this.setOriginSign(generateOriginSign());
+            this.signa = generateSignature();
+        }
+        return this.signa;
+    }
+
+    /**
+     * 生成最终的签名,需要先生成原始sign
+     *
+     * @throws SignatureException
+     */
+    public String generateSignature() throws SignatureException {
+        return CryptTools.hmacEncrypt(CryptTools.HMAC_SHA1, this.getOriginSign(), this.getKey());
+    }
+
+    /**
+     * 生成待加密原始字符
+     *
+     * @throws NoSuchAlgorithmException
+     */
+    @Override
+    public String generateOriginSign() throws SignatureException {
+        return CryptTools.md5Encrypt(this.getId() + this.getTs());
+    }
+}

+ 14 - 22
ruoyi-admin/src/main/java/com/ruoyi/web/controller/meeting/MeetingRecordsController.java

@@ -19,23 +19,20 @@ import java.util.List;
  * 会议记录Controller
  *
  * @author boman
- * @date 2024-10-22
+ * @date 2024-11-04
  */
 @RestController
-@RequestMapping("/system/records")
-public class MeetingRecordsController extends BaseController
-{
+@RequestMapping("/records")
+public class MeetingRecordsController extends BaseController {
     @Autowired
     private IMeetingRecordsService meetingRecordsService;
 
-/**
- * 查询会议记录列表
- */
-@PreAuthorize("@ss.hasPermi('system:records:list')")
-@GetMapping("/list")
-    public TableDataInfo list(MeetingRecords meetingRecords)
-    {
-        startPage();
+    /**
+     * 查询会议记录列表
+     */
+    @PreAuthorize("@ss.hasPermi('system:records:list')")
+    @GetMapping("/list")
+    public TableDataInfo list(MeetingRecords meetingRecords) {
         List<MeetingRecords> list = meetingRecordsService.selectMeetingRecordsList(meetingRecords);
         return getDataTable(list);
     }
@@ -46,8 +43,7 @@ public class MeetingRecordsController extends BaseController
     @PreAuthorize("@ss.hasPermi('system:records:export')")
     @Log(title = "会议记录", businessType = BusinessType.EXPORT)
     @PostMapping("/export")
-    public void export(HttpServletResponse response, MeetingRecords meetingRecords)
-    {
+    public void export(HttpServletResponse response, MeetingRecords meetingRecords) {
         List<MeetingRecords> list = meetingRecordsService.selectMeetingRecordsList(meetingRecords);
         ExcelUtil<MeetingRecords> util = new ExcelUtil<MeetingRecords>(MeetingRecords.class);
         util.exportExcel(response, list, "会议记录数据");
@@ -58,8 +54,7 @@ public class MeetingRecordsController extends BaseController
      */
     @PreAuthorize("@ss.hasPermi('system:records:query')")
     @GetMapping(value = "/{recordId}")
-    public AjaxResult getInfo(@PathVariable("recordId") Long recordId)
-    {
+    public AjaxResult getInfo(@PathVariable("recordId") Long recordId) {
         return success(meetingRecordsService.selectMeetingRecordsByRecordId(recordId));
     }
 
@@ -69,8 +64,7 @@ public class MeetingRecordsController extends BaseController
     @PreAuthorize("@ss.hasPermi('system:records:add')")
     @Log(title = "会议记录", businessType = BusinessType.INSERT)
     @PostMapping
-    public AjaxResult add(@RequestBody MeetingRecords meetingRecords)
-    {
+    public AjaxResult add(@RequestBody MeetingRecords meetingRecords) {
         return toAjax(meetingRecordsService.insertMeetingRecords(meetingRecords));
     }
 
@@ -80,8 +74,7 @@ public class MeetingRecordsController extends BaseController
     @PreAuthorize("@ss.hasPermi('system:records:edit')")
     @Log(title = "会议记录", businessType = BusinessType.UPDATE)
     @PostMapping("/put")
-    public AjaxResult edit(@RequestBody MeetingRecords meetingRecords)
-    {
+    public AjaxResult edit(@RequestBody MeetingRecords meetingRecords) {
         return toAjax(meetingRecordsService.updateMeetingRecords(meetingRecords));
     }
 
@@ -91,8 +84,7 @@ public class MeetingRecordsController extends BaseController
     @PreAuthorize("@ss.hasPermi('system:records:remove')")
     @Log(title = "会议记录", businessType = BusinessType.DELETE)
     @GetMapping("/delete/{recordIds}")
-    public AjaxResult remove(@PathVariable Long[] recordIds)
-    {
+    public AjaxResult remove(@PathVariable Long[] recordIds) {
         return toAjax(meetingRecordsService.deleteMeetingRecordsByRecordIds(recordIds));
     }
 }

Разница между файлами не показана из-за своего большого размера
+ 165 - 0
ruoyi-admin/src/main/java/com/ruoyi/web/controller/meeting/RealTimeController.java


+ 91 - 0
ruoyi-admin/src/main/java/com/ruoyi/web/controller/sign/SignInController.java

@@ -0,0 +1,91 @@
+package com.ruoyi.web.controller.sign;
+
+import com.ruoyi.common.annotation.Log;
+import com.ruoyi.common.core.controller.BaseController;
+import com.ruoyi.common.core.domain.AjaxResult;
+import com.ruoyi.common.core.page.TableDataInfo;
+import com.ruoyi.common.enums.BusinessType;
+import com.ruoyi.common.utils.poi.ExcelUtil;
+import com.ruoyi.system.domain.SignIn;
+import com.ruoyi.system.service.ISignInService;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.security.access.prepost.PreAuthorize;
+import org.springframework.web.bind.annotation.*;
+
+import javax.servlet.http.HttpServletResponse;
+import java.util.List;
+
+/**
+ * 会议室签到Controller
+ *
+ * @author boman
+ * @date 2024-11-04
+ */
+@RestController
+@RequestMapping("/sign")
+public class SignInController extends BaseController {
+    @Autowired
+    private ISignInService signInService;
+
+    /**
+     * 查询会议室签到列表
+     */
+    @PreAuthorize("@ss.hasPermi('system:in:list')")
+    @GetMapping("/list")
+    public TableDataInfo list(SignIn signIn) {
+        startPage();
+        List<SignIn> list = signInService.selectSignInList(signIn);
+        return getDataTable(list);
+    }
+
+    /**
+     * 导出会议室签到列表
+     */
+    @PreAuthorize("@ss.hasPermi('system:in:export')")
+    @Log(title = "会议室签到", businessType = BusinessType.EXPORT)
+    @PostMapping("/export")
+    public void export(HttpServletResponse response, SignIn signIn) {
+        List<SignIn> list = signInService.selectSignInList(signIn);
+        ExcelUtil<SignIn> util = new ExcelUtil<SignIn>(SignIn.class);
+        util.exportExcel(response, list, "会议室签到数据");
+    }
+
+    /**
+     * 获取会议室签到详细信息
+     */
+    @PreAuthorize("@ss.hasPermi('system:in:query')")
+    @GetMapping(value = "/{signInId}")
+    public AjaxResult getInfo(@PathVariable("signInId") Long signInId) {
+        return success(signInService.selectSignInBySignInId(signInId));
+    }
+
+    /**
+     * 新增会议室签到
+     */
+    @PreAuthorize("@ss.hasPermi('system:in:add')")
+    @Log(title = "会议室签到", businessType = BusinessType.INSERT)
+    @PostMapping
+    public AjaxResult add(@RequestBody SignIn signIn) {
+        return toAjax(signInService.insertSignIn(signIn));
+    }
+
+    /**
+     * 修改会议室签到
+     */
+    @PreAuthorize("@ss.hasPermi('system:in:edit')")
+    @Log(title = "会议室签到", businessType = BusinessType.UPDATE)
+    @PostMapping("/put")
+    public AjaxResult edit(@RequestBody SignIn signIn) {
+        return toAjax(signInService.updateSignIn(signIn));
+    }
+
+    /**
+     * 删除会议室签到
+     */
+    @PreAuthorize("@ss.hasPermi('system:in:remove')")
+    @Log(title = "会议室签到", businessType = BusinessType.DELETE)
+    @GetMapping("/delete/{signInIds}")
+    public AjaxResult remove(@PathVariable Long[] signInIds) {
+        return toAjax(signInService.deleteSignInBySignInIds(signInIds));
+    }
+}

+ 7 - 13
ruoyi-admin/src/main/java/com/ruoyi/web/controller/system/SysDictTypeController.java

@@ -1,18 +1,5 @@
 package com.ruoyi.web.controller.system;
 
-import java.util.List;
-import javax.servlet.http.HttpServletResponse;
-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.DeleteMapping;
-import org.springframework.web.bind.annotation.GetMapping;
-import org.springframework.web.bind.annotation.PathVariable;
-import org.springframework.web.bind.annotation.PostMapping;
-import org.springframework.web.bind.annotation.PutMapping;
-import org.springframework.web.bind.annotation.RequestBody;
-import org.springframework.web.bind.annotation.RequestMapping;
-import org.springframework.web.bind.annotation.RestController;
 import com.ruoyi.common.annotation.Log;
 import com.ruoyi.common.core.controller.BaseController;
 import com.ruoyi.common.core.domain.AjaxResult;
@@ -21,6 +8,13 @@ import com.ruoyi.common.core.page.TableDataInfo;
 import com.ruoyi.common.enums.BusinessType;
 import com.ruoyi.common.utils.poi.ExcelUtil;
 import com.ruoyi.system.service.ISysDictTypeService;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.security.access.prepost.PreAuthorize;
+import org.springframework.validation.annotation.Validated;
+import org.springframework.web.bind.annotation.*;
+
+import javax.servlet.http.HttpServletResponse;
+import java.util.List;
 
 /**
  * 数据字典信息

+ 2 - 0
ruoyi-admin/src/main/java/com/ruoyi/web/controller/system/SysLoginController.java

@@ -111,10 +111,12 @@ public class SysLoginController
         {
             SysUser user = loginUser.getUser();
             String userName = user.getUserName();
+            String nickName = user.getNickName();
             Long userId = user.getUserId();
             String avatar = user.getAvatar();
             Map<String,Object> map = new HashMap<>(2);
             map.put("userName",userName);
+            map.put("nickName",nickName);
             map.put("userId",userId);
             map.put("avatar",avatar);
             return AjaxResult.success(map);

+ 99 - 0
ruoyi-admin/src/main/java/com/ruoyi/web/controller/vote/VoteResultController.java

@@ -0,0 +1,99 @@
+package com.ruoyi.web.controller.vote;
+
+import com.ruoyi.common.annotation.Log;
+import com.ruoyi.common.core.controller.BaseController;
+import com.ruoyi.common.core.domain.AjaxResult;
+import com.ruoyi.common.core.page.TableDataInfo;
+import com.ruoyi.common.enums.BusinessType;
+import com.ruoyi.common.utils.poi.ExcelUtil;
+import com.ruoyi.system.domain.VoteResult;
+import com.ruoyi.system.service.IVoteResultService;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.security.access.prepost.PreAuthorize;
+import org.springframework.web.bind.annotation.*;
+
+import javax.servlet.http.HttpServletResponse;
+import java.util.List;
+
+/**
+ * 投票结果Controller
+ *
+ * @author boman
+ * @date 2024-11-15
+ */
+@RestController
+@RequestMapping("/voteResult")
+public class VoteResultController extends BaseController {
+    @Autowired
+    private IVoteResultService voteResultService;
+
+    /**
+     * 查询投票结果列表
+     */
+    @PreAuthorize("@ss.hasPermi('system:result:list')")
+    @GetMapping("/list")
+    public TableDataInfo list(VoteResult voteResult) {
+        List<VoteResult> list = voteResultService.selectVoteResultList(voteResult);
+        return getDataTable(list);
+    }
+
+    /**
+     * 前端查询投票结果前端
+     */
+    @PreAuthorize("@ss.hasPermi('system:result:statistics')")
+    @PostMapping("/statistics")
+    public AjaxResult statistics(@RequestBody VoteResult voteResult) {
+        return voteResultService.statistics(voteResult);
+    }
+
+    /**
+     * 导出投票结果列表
+     */
+    @PreAuthorize("@ss.hasPermi('system:result:export')")
+    @Log(title = "投票结果", businessType = BusinessType.EXPORT)
+    @PostMapping("/export")
+    public void export(HttpServletResponse response, VoteResult voteResult) {
+        List<VoteResult> list = voteResultService.selectVoteResultList(voteResult);
+        ExcelUtil<VoteResult> util = new ExcelUtil<VoteResult>(VoteResult.class);
+        util.exportExcel(response, list, "投票结果数据");
+    }
+
+    /**
+     * 获取投票结果详细信息
+     */
+    @PreAuthorize("@ss.hasPermi('system:result:query')")
+    @GetMapping(value = "/{voteResultId}")
+    public AjaxResult getInfo(@PathVariable("voteResultId") Long voteResultId) {
+        return success(voteResultService.selectVoteResultByVoteResultId(voteResultId));
+    }
+
+    /**
+     * 新增投票结果
+     */
+    @PreAuthorize("@ss.hasPermi('system:result:add')")
+    @Log(title = "投票结果", businessType = BusinessType.INSERT)
+    @PostMapping
+    public AjaxResult add(@RequestBody VoteResult voteResult) {
+        return toAjax(voteResultService.insertVoteResult(voteResult));
+    }
+
+    /**
+     * 修改投票结果
+     */
+    @PreAuthorize("@ss.hasPermi('system:result:edit')")
+    @Log(title = "投票结果", businessType = BusinessType.UPDATE)
+    @PostMapping("/put")
+    public AjaxResult edit(@RequestBody VoteResult voteResult) {
+        return toAjax(voteResultService.updateVoteResult(voteResult));
+    }
+
+    /**
+     * 删除投票结果
+     */
+    @PreAuthorize("@ss.hasPermi('system:result:remove')")
+    @Log(title = "投票结果", businessType = BusinessType.DELETE)
+    @GetMapping("/delete/{voteResultIds}")
+    public AjaxResult remove(@PathVariable Long[] voteResultIds) {
+        return toAjax(voteResultService.deleteVoteResultByVoteResultIds(voteResultIds));
+    }
+}

+ 91 - 0
ruoyi-admin/src/main/java/com/ruoyi/web/controller/vote/VoteThemeController.java

@@ -0,0 +1,91 @@
+package com.ruoyi.web.controller.vote;
+
+import com.ruoyi.common.annotation.Log;
+import com.ruoyi.common.core.controller.BaseController;
+import com.ruoyi.common.core.domain.AjaxResult;
+import com.ruoyi.common.core.page.TableDataInfo;
+import com.ruoyi.common.enums.BusinessType;
+import com.ruoyi.common.utils.poi.ExcelUtil;
+import com.ruoyi.system.domain.VoteTheme;
+import com.ruoyi.system.service.IVoteThemeService;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.security.access.prepost.PreAuthorize;
+import org.springframework.web.bind.annotation.*;
+
+import javax.servlet.http.HttpServletResponse;
+import java.util.List;
+
+/**
+ * 投票主题Controller
+ *
+ * @author boman
+ * @date 2024-11-15
+ */
+@RestController
+@RequestMapping("/theme")
+public class VoteThemeController extends BaseController {
+    @Autowired
+    private IVoteThemeService voteThemeService;
+
+    /**
+     * 查询投票主题列表
+     */
+    @PreAuthorize("@ss.hasPermi('system:theme:list')")
+    @GetMapping("/list")
+    public TableDataInfo list(VoteTheme voteTheme) {
+        startPage();
+        List<VoteTheme> list = voteThemeService.selectVoteThemeList(voteTheme);
+        return getDataTable(list);
+    }
+
+    /**
+     * 导出投票主题列表
+     */
+    @PreAuthorize("@ss.hasPermi('system:theme:export')")
+    @Log(title = "投票主题", businessType = BusinessType.EXPORT)
+    @PostMapping("/export")
+    public void export(HttpServletResponse response, VoteTheme voteTheme) {
+        List<VoteTheme> list = voteThemeService.selectVoteThemeList(voteTheme);
+        ExcelUtil<VoteTheme> util = new ExcelUtil<VoteTheme>(VoteTheme.class);
+        util.exportExcel(response, list, "投票主题数据");
+    }
+
+    /**
+     * 获取投票主题详细信息
+     */
+    @PreAuthorize("@ss.hasPermi('system:theme:query')")
+    @GetMapping(value = "/{themeId}")
+    public AjaxResult getInfo(@PathVariable("themeId") Long themeId) {
+        return success(voteThemeService.selectVoteThemeByThemeId(themeId));
+    }
+
+    /**
+     * 新增投票主题
+     */
+    @PreAuthorize("@ss.hasPermi('system:theme:add')")
+    @Log(title = "投票主题", businessType = BusinessType.INSERT)
+    @PostMapping
+    public AjaxResult add(@RequestBody VoteTheme voteTheme) {
+        return voteThemeService.insertVoteTheme(voteTheme);
+    }
+
+    /**
+     * 修改投票主题
+     */
+    @PreAuthorize("@ss.hasPermi('system:theme:edit')")
+    @Log(title = "投票主题", businessType = BusinessType.UPDATE)
+    @PostMapping("/put")
+    public AjaxResult edit(@RequestBody VoteTheme voteTheme) {
+        return toAjax(voteThemeService.updateVoteTheme(voteTheme));
+    }
+
+    /**
+     * 删除投票主题
+     */
+    @PreAuthorize("@ss.hasPermi('system:theme:remove')")
+    @Log(title = "投票主题", businessType = BusinessType.DELETE)
+    @GetMapping("/delete/{themeIds}")
+    public AjaxResult remove(@PathVariable Long[] themeIds) {
+        return toAjax(voteThemeService.deleteVoteThemeByThemeIds(themeIds));
+    }
+}

+ 1 - 1
ruoyi-admin/src/main/resources/application-prod.yml

@@ -9,7 +9,7 @@ ruoyi:
     # 实例演示开关
     demoEnabled: true
     # 文件路径 示例( Windows配置D:/ruoyi/uploadPath,Linux配置 /home/ruoyi/uploadPath)
-    profile: /home/ruoyi/uploadPath
+    profile: /home/ruoyi/uploadPath/yuanqu
     # 获取ip地址开关
     addressEnabled: false
     # 验证码类型 math 数组计算 char 字符验证

+ 2 - 2
ruoyi-admin/src/main/resources/application.yml

@@ -20,7 +20,7 @@ spring:
     basename: i18n/messages
   profiles:
     active: druid
-    #active: prod
+#    active: prod
   # 文件上传
   servlet:
     multipart:
@@ -41,7 +41,7 @@ token:
   # 令牌密钥
   secret: abcdefghijklmnopqrstuvwxyz
   # 令牌有效期(默认30分钟)
-  expireTime: 30
+  expireTime: 720
 
 # MyBatis配置
 mybatis:

+ 18 - 8
ruoyi-common/pom.xml

@@ -16,7 +16,17 @@
     </description>
 
     <dependencies>
-
+        <!--讯飞语音识别需要的-->
+        <dependency>
+            <groupId>cn.hutool</groupId>
+            <artifactId>hutool-all</artifactId>
+            <version>5.7.21</version>
+        </dependency>
+        <dependency>
+        <groupId>com.google.code.gson</groupId>
+        <artifactId>gson</artifactId>
+        <version>2.9.0</version>
+    </dependency>
         <!-- Spring框架基本的核心工具 -->
         <dependency>
             <groupId>org.springframework</groupId>
@@ -52,19 +62,19 @@
             <groupId>org.apache.commons</groupId>
             <artifactId>commons-lang3</artifactId>
         </dependency>
-  
+
         <!-- JSON工具类 -->
         <dependency>
             <groupId>com.fasterxml.jackson.core</groupId>
             <artifactId>jackson-databind</artifactId>
         </dependency>
-        
+
         <!-- 动态数据源 -->
-		<dependency>
-			<groupId>com.baomidou</groupId>
-			<artifactId>dynamic-datasource-spring-boot-starter</artifactId>
-			<version>3.5.2</version>
-		</dependency>
+        <dependency>
+            <groupId>com.baomidou</groupId>
+            <artifactId>dynamic-datasource-spring-boot-starter</artifactId>
+            <version>3.5.2</version>
+        </dependency>
 
         <!-- 阿里JSON解析器 -->
         <dependency>

+ 65 - 0
ruoyi-common/src/main/java/com/ruoyi/common/utils/EncryptUtil.java

@@ -0,0 +1,65 @@
+package com.ruoyi.common.utils;
+
+import org.apache.commons.codec.binary.Base64;
+
+import javax.crypto.Mac;
+import javax.crypto.spec.SecretKeySpec;
+import java.io.UnsupportedEncodingException;
+import java.security.InvalidKeyException;
+import java.security.MessageDigest;
+import java.security.NoSuchAlgorithmException;
+import java.security.SignatureException;
+
+public class EncryptUtil {
+
+    /**
+     * 加密数字签名(基于HMACSHA1算法)
+     * 
+     * @param encryptText
+     * @param encryptKey
+     * @return
+     * @throws SignatureException
+     */
+    public static String HmacSHA1Encrypt(String encryptText, String encryptKey) throws SignatureException {
+        byte[] rawHmac = null;
+        try {
+            byte[] data = encryptKey.getBytes("UTF-8");
+            SecretKeySpec secretKey = new SecretKeySpec(data, "HmacSHA1");
+            Mac mac = Mac.getInstance("HmacSHA1");
+            mac.init(secretKey);
+            byte[] text = encryptText.getBytes("UTF-8");
+            rawHmac = mac.doFinal(text);
+        } catch (InvalidKeyException e) {
+            throw new SignatureException("InvalidKeyException:" + e.getMessage());
+        } catch (NoSuchAlgorithmException e) {
+            throw new SignatureException("NoSuchAlgorithmException:" + e.getMessage());
+        } catch (UnsupportedEncodingException e) {
+            throw new SignatureException("UnsupportedEncodingException:" + e.getMessage());
+        }
+        String oauth = new String(Base64.encodeBase64(rawHmac));
+        
+        return oauth;
+    }
+
+    public final static String MD5(String pstr) {
+        char md5String[] = { '0', '1', '2', '3', '4', '5', '6', '7', '8', '9', 'a', 'b', 'c', 'd', 'e', 'f' };
+        try {
+            byte[] btInput = pstr.getBytes();
+            MessageDigest mdInst = MessageDigest.getInstance("MD5");
+            mdInst.update(btInput);
+            byte[] md = mdInst.digest();
+            int j = md.length;
+            char str[] = new char[j * 2];
+            int k = 0;
+            for (int i = 0; i < j; i++) { // i = 0
+                byte byte0 = md[i]; // 95
+                str[k++] = md5String[byte0 >>> 4 & 0xf]; // 5
+                str[k++] = md5String[byte0 & 0xf]; // F
+            }
+
+            return new String(str);
+        } catch (Exception e) {
+            return null;
+        }
+    }
+}

+ 1 - 0
ruoyi-common/src/main/java/com/ruoyi/common/utils/file/MimeTypeUtils.java

@@ -31,6 +31,7 @@ public class MimeTypeUtils
             "bmp", "gif", "jpg", "jpeg", "png",
             // word excel powerpoint
             "doc", "docx", "xls", "xlsx", "ppt", "pptx", "html", "htm", "txt",
+            "wav","mp4","mp3",
             // 压缩文件
             "rar", "zip", "gz", "bz2",
             // 视频格式

+ 91 - 0
ruoyi-common/src/main/java/com/ruoyi/common/utils/xunfei/CryptTools.java

@@ -0,0 +1,91 @@
+package com.ruoyi.common.utils.xunfei;
+
+
+import javax.crypto.Mac;
+import javax.crypto.spec.SecretKeySpec;
+import java.nio.charset.StandardCharsets;
+import java.security.InvalidKeyException;
+import java.security.MessageDigest;
+import java.security.NoSuchAlgorithmException;
+import java.security.SignatureException;
+import java.util.Base64;
+
+/**
+ * @author <ydwang16@iflytek.com>
+ * @description 加解密工具
+ * @date 2021/3/24
+ */
+public class CryptTools {
+
+    public static final String HMAC_SHA1 = "HmacSHA1";
+
+    public static final String HMAC_SHA256 = "HmacSHA256";
+
+    private static final char[] md5String = {
+            '0', '1', '2', '3', '4', '5', '6', '7', '8', '9',
+            'a', 'b', 'c', 'd', 'e', 'f'};
+
+
+    /**
+     * HMAC加解密
+     *
+     * @param encryptType 加密方式
+     * @param plainText   明文
+     * @param encryptKey  加密密钥
+     * @return
+     * @throws SignatureException
+     */
+    public static String hmacEncrypt(String encryptType, String plainText, String encryptKey) throws SignatureException {
+
+        try {
+            byte[] data = encryptKey.getBytes(StandardCharsets.UTF_8);
+            SecretKeySpec secretKey = new SecretKeySpec(data, encryptType);
+            Mac mac = Mac.getInstance(encryptType);
+            mac.init(secretKey);
+            byte[] text = plainText.getBytes(StandardCharsets.UTF_8);
+            byte[] rawHmac = mac.doFinal(text);
+            return Base64.getEncoder().encodeToString(rawHmac);
+        } catch (InvalidKeyException e) {
+            throw new SignatureException("InvalidKeyException:" + e.getMessage());
+        } catch (NoSuchAlgorithmException e) {
+            throw new SignatureException("NoSuchAlgorithmException:" + e.getMessage());
+        }
+    }
+
+    /**
+     * Md5加密
+     *
+     * @param pstr 加密字符串
+     * @return
+     * @throws NoSuchAlgorithmException
+     */
+    public static String md5Encrypt(String pstr) throws SignatureException {
+
+        try {
+            byte[] btInput = pstr.getBytes();
+            MessageDigest mdInst = MessageDigest.getInstance("MD5");
+            mdInst.update(btInput);
+            byte[] md = mdInst.digest();
+            int j = md.length;
+            char[] str = new char[j * 2];
+            int k = 0;
+            for (byte byte0 : md) {
+                str[k++] = md5String[byte0 >>> 4 & 0xF];
+                str[k++] = md5String[byte0 & 0xF];
+            }
+            return new String(str);
+        } catch (NoSuchAlgorithmException e) {
+            throw new SignatureException("NoSuchAlgorithmException:" + e.getMessage());
+        }
+    }
+
+    /**
+     * BASE64加密
+     *
+     * @param plainText
+     * @return
+     */
+    public static String base64Encode(String plainText) {
+        return Base64.getEncoder().encodeToString(plainText.getBytes(StandardCharsets.UTF_8));
+    }
+}

+ 163 - 0
ruoyi-common/src/main/java/com/ruoyi/common/utils/xunfei/HttpConnector.java

@@ -0,0 +1,163 @@
+package com.ruoyi.common.utils.xunfei;
+
+import org.apache.http.Consts;
+import org.apache.http.HttpStatus;
+import org.apache.http.NameValuePair;
+import org.apache.http.client.HttpRequestRetryHandler;
+import org.apache.http.client.config.RequestConfig;
+import org.apache.http.client.entity.UrlEncodedFormEntity;
+import org.apache.http.client.methods.CloseableHttpResponse;
+import org.apache.http.client.methods.HttpPost;
+import org.apache.http.client.methods.HttpRequestBase;
+import org.apache.http.entity.ByteArrayEntity;
+import org.apache.http.entity.ContentType;
+import org.apache.http.entity.StringEntity;
+import org.apache.http.impl.client.CloseableHttpClient;
+import org.apache.http.impl.client.HttpClientBuilder;
+import org.apache.http.impl.client.HttpClients;
+import org.apache.http.impl.conn.PoolingHttpClientConnectionManager;
+import org.apache.http.message.BasicNameValuePair;
+import org.apache.http.util.EntityUtils;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+import javax.net.ssl.SSLException;
+import java.io.IOException;
+import java.io.InterruptedIOException;
+import java.net.UnknownHostException;
+import java.util.*;
+
+/**
+ * http client
+ *
+ * @author : iflytek
+ * @date : 2022年03月15日
+ */
+public class HttpConnector {
+    private static final Logger log = LoggerFactory.getLogger(HttpConnector.class);
+    private final PoolingHttpClientConnectionManager pool = new PoolingHttpClientConnectionManager();
+    private CloseableHttpClient httpClient;
+
+    private HttpConnector() {
+    }
+
+    public static HttpConnector build(int maxConnections, int connTimeout, int soTimeout, int retryCount) {
+        HttpConnector connector = ConnectorBuilder.CONNECTOR;
+        connector.pool.setMaxTotal(maxConnections);
+        connector.pool.setDefaultMaxPerRoute(5);
+
+        RequestConfig.Builder builder = RequestConfig.custom().setConnectionRequestTimeout(5000)
+                .setConnectTimeout(connTimeout).setSocketTimeout(soTimeout);
+
+        HttpClientBuilder httpClientBuilder = HttpClients.custom().setDefaultRequestConfig(builder.build())
+                .setConnectionManager(connector.pool);
+        if (retryCount > 0) {
+            HttpRequestRetryHandler retryHandler = (exception, executionCount, context) -> {
+                if (executionCount > retryCount) {
+                    return false;
+                }
+                if (exception instanceof InterruptedIOException) {
+                    return false;
+                }
+                if (exception instanceof UnknownHostException) {
+                    return false;
+                }
+                if (exception instanceof SSLException) {
+                    return false;
+                }
+                log.info("HttpConnector 第" + executionCount + "次重试");
+                return true;
+            };
+            httpClientBuilder.setRetryHandler(retryHandler);
+        }
+        connector.httpClient = httpClientBuilder.build();
+        return connector;
+    }
+
+    private static List<NameValuePair> convertMapToPair(Map<String, String> params) {
+        List<NameValuePair> pairs = new ArrayList<>();
+        for (Map.Entry<String, String> entry : params.entrySet()) {
+            pairs.add(new BasicNameValuePair(entry.getKey(), entry.getValue()));
+        }
+        return pairs;
+    }
+
+    public String post(String url, Map<String, String> param) throws IOException {
+        HttpPost httpPost = new HttpPost(url);
+        httpPost.setEntity(new UrlEncodedFormEntity(convertMapToPair(param), Consts.UTF_8));
+        return doExecute(httpPost, Consts.UTF_8.toString());
+    }
+
+    public String postByJson(String url, String jsonStr) throws IOException {
+        HttpPost httpPost = new HttpPost(url);
+        httpPost.setHeader("Content-Type", "application/json;charset=UTF-8");
+        httpPost.setEntity(new StringEntity(jsonStr, Consts.UTF_8));
+        return doExecute(httpPost, Consts.UTF_8.toString());
+    }
+
+    public String postByBytes(String url, Map<String, String> param, byte[] bytes) throws IOException {
+        HttpPost httpPost = new HttpPost(url);
+        // 设置 header
+        for (String key : param.keySet()) {
+            httpPost.setHeader(key, param.get(key));
+        }
+        if (Objects.nonNull(bytes)) {
+            httpPost.setEntity(new ByteArrayEntity(bytes));
+        }
+        return doExecute(httpPost, Consts.UTF_8.toString());
+    }
+
+    public String post(String url, Map<String, String> header, Map<String, String> param) throws IOException {
+        HttpPost httpPost = new HttpPost(url);
+        //setHeader,添加头文件
+        Set<String> keys = header.keySet();
+        for (String key : keys) {
+            httpPost.setHeader(key, header.get(key));
+        }
+        httpPost.setEntity(new UrlEncodedFormEntity(convertMapToPair(param), Consts.UTF_8));
+        return doExecute(httpPost, Consts.UTF_8.toString());
+    }
+
+    public String post(String url, String param) throws IOException {
+        HttpPost httpPost = new HttpPost(url);
+        httpPost.addHeader("Content-Type", "application/json;charset=utf-8");
+        StringEntity httpEntity = new StringEntity(param, ContentType.APPLICATION_JSON);
+        httpPost.setEntity(httpEntity);
+        return doExecute(httpPost, Consts.UTF_8.toString());
+    }
+
+
+    private String doExecute(HttpRequestBase requestBase, String charset) throws IOException {
+        String result;
+        CloseableHttpResponse response = null;
+        try {
+            response = this.httpClient.execute(requestBase);
+            int statusCode = response.getStatusLine().getStatusCode();
+            result = (charset == null) ? EntityUtils.toString(response.getEntity()) : EntityUtils.toString(response.getEntity(), charset);
+            if (statusCode != HttpStatus.SC_OK) {
+                log.warn("request:{} , status:{} , result:{}", requestBase.getURI(), statusCode, result);
+            }
+
+        } finally {
+            if (null != response) {
+                EntityUtils.consumeQuietly(response.getEntity());
+            }
+            if (null != requestBase) {
+                requestBase.releaseConnection();
+            }
+        }
+        return result;
+    }
+
+    public void release() {
+        try {
+            this.httpClient.close();
+        } catch (IOException e) {
+            e.printStackTrace();
+        }
+    }
+
+    private static class ConnectorBuilder {
+        private static final HttpConnector CONNECTOR = new HttpConnector();
+    }
+}

+ 281 - 0
ruoyi-common/src/main/java/com/ruoyi/common/utils/xunfei/HttpUtil.java

@@ -0,0 +1,281 @@
+package com.ruoyi.common.utils.xunfei;
+
+import org.apache.http.Consts;
+import org.apache.http.HttpEntity;
+import org.apache.http.HttpStatus;
+import org.apache.http.client.config.RequestConfig;
+import org.apache.http.client.methods.CloseableHttpResponse;
+import org.apache.http.client.methods.HttpGet;
+import org.apache.http.client.methods.HttpPost;
+import org.apache.http.client.methods.HttpRequestBase;
+import org.apache.http.entity.ByteArrayEntity;
+import org.apache.http.entity.ContentType;
+import org.apache.http.entity.InputStreamEntity;
+import org.apache.http.entity.StringEntity;
+import org.apache.http.impl.client.CloseableHttpClient;
+import org.apache.http.impl.client.HttpClients;
+import org.apache.http.impl.conn.PoolingHttpClientConnectionManager;
+import org.apache.http.util.EntityUtils;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+import java.io.*;
+import java.net.URL;
+import java.net.URLConnection;
+import java.net.URLEncoder;
+import java.util.Map;
+import java.util.Map.Entry;
+import java.util.Set;
+
+/**
+ * HTTP请求工具类
+ */
+public class HttpUtil {
+    private HttpUtil() {
+    }
+
+    private static final Logger LOGGER = LoggerFactory.getLogger(HttpUtil.class);
+
+    private static final String UTF8 = "UTF-8";
+    /**
+     * 组件的httpClient
+     */
+    private static CloseableHttpClient httpClient;
+
+    static {
+        // 听见服务、流控组件连接池
+        PoolingHttpClientConnectionManager pool = new PoolingHttpClientConnectionManager();
+        pool.setMaxTotal(600);//客户端总并行链接最大数
+        pool.setDefaultMaxPerRoute(200);//每个主机的最大并行链接数
+        httpClient = HttpClients.createMinimal(pool);
+    }
+
+    /**
+     * 请求的upload接口, 发送音频创建转写订单
+     *
+     * @param url       请求地址
+     * @param in        需要转写的音频流
+     * @return 返回结果
+     */
+    public static String iflyrecUpload(String url,  InputStream in) {
+        // 1、准备参数
+        HttpPost httpPost = new HttpPost(url);
+        // 设置超时时间, 防止504的时候会耗时30分钟
+        RequestConfig requestConfig = RequestConfig.custom()
+                //从连接池中获取连接的超时时间
+                .setConnectionRequestTimeout(5000)
+                //与服务器连接超时时间, 指的是连接一个url的连接等待时间
+                .setConnectTimeout(600000)
+                // 读取超时, 指的是连接上一个url,获取response的返回等待时间
+                .setSocketTimeout(600000).build();
+        httpPost.setConfig(requestConfig);
+        HttpEntity requestEntity = new InputStreamEntity(in, ContentType.APPLICATION_JSON);
+        //System.out.println("---"+requestEntity);
+        httpPost.setEntity(requestEntity);
+
+        // 2、执行请求
+        return doExecute(httpPost, null);
+    }
+
+    /**
+     * 请求听见的获取结果接口
+     *
+     * @param url       请求路径
+     * @return 返回结果
+     */
+    public static String iflyrecGet(String url) {
+        // 1、准备参数
+        HttpGet httpget = new HttpGet(url);
+        // 2、执行请求
+        return doExecute(httpget, UTF8);
+    }
+
+    /**
+     * 流控组件调用
+     *
+     * @param url 请求路径
+     * @return 返回结果
+     */
+    public static String flowCtrlGet(String url) {
+        // 1、准备参数
+        HttpGet httpget = new HttpGet(url);
+        RequestConfig requestConfig = RequestConfig.custom()
+                //从连接池中获取连接的超时时间
+                .setConnectionRequestTimeout(500)
+                //与服务器连接超时时间
+                .setConnectTimeout(500)
+                // 读取超时
+                .setSocketTimeout(500).build();
+        httpget.setConfig(requestConfig);
+        // 2、执行请求
+        return doExecute(httpget, null);
+    }
+
+    /**
+     * 流传输的post
+     *
+     * @param url  请求路径
+     * @param body 字节流数据
+     * @return 返回结果
+     */
+    public static String post(String url, byte[] body) {
+        // 1、准备参数
+        HttpPost httpPost = new HttpPost(url);
+        httpPost.setEntity(new ByteArrayEntity(body, ContentType.create("application/octet-stream", Consts.UTF_8)));
+        // 2、执行请求
+        return doExecute(httpPost, UTF8);
+    }
+
+    /**
+     * 带字符串参数的post请求
+     *
+     * @param url   请求路径
+     * @param param 字符串参数
+     * @return 返回结果
+     */
+    public static String post(String url, String param) {
+        // 1、准备参数
+        HttpPost httpPost = new HttpPost(url);
+        // 设置超时时间
+        RequestConfig requestConfig = RequestConfig.custom()
+                //从连接池中获取连接的超时时间
+                .setConnectionRequestTimeout(1000)
+                //与服务器连接超时时间, 指的是连接一个url的连接等待时间
+                .setConnectTimeout(10000)
+                // 读取超时, 指的是连接上一个url,获取response的返回等待时间
+                .setSocketTimeout(10000).build();
+        httpPost.setConfig(requestConfig);
+        httpPost.setEntity(new StringEntity(param, ContentType.APPLICATION_JSON));
+        // 2、执行请求
+        return doExecute(httpPost, null);
+    }
+
+    /**
+     * 发送HttpGet请求
+     *
+     * @param url 请求路径
+     * @return 返回结果
+     */
+    public static String sendGet(String url) {
+        // 1、准备参数
+        HttpGet httpget = new HttpGet(url);
+        // 2、执行请求
+        return doExecute(httpget, null);
+    }
+
+    /**
+     * 执行网络请求
+     *
+     * @param requestBase http请求对象
+     * @param charset     字符集
+     * @return 返回结果
+     */
+    private static String doExecute(HttpRequestBase requestBase, String charset) {
+        String result = null;
+        try (CloseableHttpResponse response = httpClient.execute(requestBase)) {
+            // 3、检查结果状态
+            int statusCode = response.getStatusLine().getStatusCode();
+            if (statusCode != HttpStatus.SC_OK) {
+                LOGGER.error("网络异常");
+                return null;
+            }
+            // 4、获取结果
+            result = charset == null
+                    ? EntityUtils.toString(response.getEntity())
+                    : EntityUtils.toString(response.getEntity(), charset);
+        } catch (Exception e) {
+            LOGGER.error("网络异常", e);
+        }
+        return result;
+    }
+
+    /**
+     * 发送post请求
+     *
+     * @param url    请求路径
+     * @param header 请求头
+     * @param body   请求数据
+     * @return 返回结果
+     */
+    public static String postWithHeader(String url, Map<String, String> header, String body) {
+        StringBuilder result = new StringBuilder();
+        BufferedReader in = null;
+        PrintWriter out = null;
+        InputStreamReader is = null;
+        try {
+            // 设置 url
+            URL realUrl = new URL(url);
+            URLConnection connection = realUrl.openConnection();
+            // 设置 header
+            for (Entry<String, String> entry : header.entrySet()) {
+                connection.setRequestProperty(entry.getKey(), entry.getValue());
+            }
+            // 设置请求 body
+            connection.setDoOutput(true);
+            connection.setDoInput(true);
+            out = new PrintWriter(connection.getOutputStream());
+            // 保存body
+            out.print(body);
+            // 发送body
+            out.flush();
+            // 获取响应body
+            is = new InputStreamReader(connection.getInputStream());
+            in = new BufferedReader(is);
+            String line;
+            while ((line = in.readLine()) != null) {
+                result.append(line);
+            }
+        } catch (Exception e) {
+            LOGGER.error("HttpUtil postWithHeader Exception!", e);
+            return null;
+        } finally {
+            if (is != null) {
+                try {
+                    is.close();
+                } catch (IOException e) {
+                    LOGGER.error("close IO resource Exception!", e);
+                }
+            }
+            if (in != null) {
+                try {
+                    in.close();
+                } catch (IOException e) {
+                    LOGGER.error("close IO resource Exception!", e);
+                }
+            }
+            if (out != null) {
+                out.close();
+            }
+        }
+        return result.toString();
+    }
+
+    /**
+     * 将集合转换为路径参数
+     *
+     * @param param 集合参数
+     * @return 路径参数
+     * @author white
+     */
+    public static String parseMapToPathParam(Map<String, Object> param) {
+        StringBuilder sb = new StringBuilder();
+        try {
+            Set<Entry<String, Object>> entryset = param.entrySet();
+            boolean isFirst = true;
+            for (Entry<String, Object> entry : entryset) {
+                if (!isFirst) {
+                    sb.append("&");
+                } else {
+                    isFirst = false;
+                }
+                sb.append(URLEncoder.encode(entry.getKey(), UTF8));
+                sb.append("=");
+                sb.append(URLEncoder.encode(entry.getValue().toString(), UTF8));
+            }
+        } catch (UnsupportedEncodingException e) {
+            LOGGER.error("HttpUtil parseMapToPathParam Exception!", e);
+        }
+
+        return sb.toString();
+    }
+}

+ 1 - 0
ruoyi-framework/src/main/java/com/ruoyi/framework/config/SecurityConfig.java

@@ -115,6 +115,7 @@ public class SecurityConfig extends WebSecurityConfigurerAdapter
                 // 静态资源,可匿名访问
                 .antMatchers(HttpMethod.GET, "/", "/*.html", "/**/*.html", "/**/*.css", "/**/*.js", "/profile/**").permitAll()
                 .antMatchers("/swagger-ui.html", "/swagger-resources/**", "/webjars/**", "/*/api-docs", "/druid/**","/system/app/new").permitAll()
+                .antMatchers("/real/time/getResult/**").permitAll()
                 // 除上面外的所有请求全部需要鉴权认证
                 .anyRequest().authenticated()
                 .and()

+ 1 - 1
ruoyi-generator/src/main/resources/generator.yml

@@ -1,7 +1,7 @@
 # 代码生成
 gen:
   # 作者
-  author: biman
+  author: boman
   # 默认生成包路径 system 需改成自己的模块名称 如 system monitor tool
   packageName: com.ruoyi.system
   # 自动去除表前缀,默认是false

+ 16 - 3
ruoyi-system/src/main/java/com/ruoyi/system/domain/ConferenceRoomOrder.java

@@ -1,11 +1,12 @@
 package com.ruoyi.system.domain;
 
-import java.util.Date;
 import com.fasterxml.jackson.annotation.JsonFormat;
-import org.apache.commons.lang3.builder.ToStringBuilder;
-import org.apache.commons.lang3.builder.ToStringStyle;
 import com.ruoyi.common.annotation.Excel;
 import com.ruoyi.common.core.domain.BaseEntity;
+import org.apache.commons.lang3.builder.ToStringBuilder;
+import org.apache.commons.lang3.builder.ToStringStyle;
+
+import java.util.Date;
 
 /**
  * 会议室预约对象 conference_room_order
@@ -51,6 +52,10 @@ public class ConferenceRoomOrder extends BaseEntity
      * 是否需要席卡
      */
     private String useXk;
+    /**
+     * 席卡详情
+     */
+    private String xkDetail;
 
     /** 会议开始时间 */
     @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
@@ -66,6 +71,14 @@ public class ConferenceRoomOrder extends BaseEntity
     @Excel(name = "创建部门")
     private Long createDept;
 
+    public String getXkDetail() {
+        return xkDetail;
+    }
+
+    public void setXkDetail(String xkDetail) {
+        this.xkDetail = xkDetail;
+    }
+
     public String getUseXk() {
         return useXk;
     }

+ 79 - 14
ruoyi-system/src/main/java/com/ruoyi/system/domain/MeetingRecords.java

@@ -1,15 +1,16 @@
 package com.ruoyi.system.domain;
 
-import org.apache.commons.lang3.builder.ToStringBuilder;
-import org.apache.commons.lang3.builder.ToStringStyle;
 import com.ruoyi.common.annotation.Excel;
 import com.ruoyi.common.core.domain.BaseEntity;
+import org.apache.commons.lang3.builder.ToStringBuilder;
+import org.apache.commons.lang3.builder.ToStringStyle;
+import org.springframework.web.multipart.MultipartFile;
 
 /**
  * 会议记录对象 meeting_records
  * 
  * @author boman
- * @date 2024-10-22
+ * @date 2024-11-04
  */
 public class MeetingRecords extends BaseEntity
 {
@@ -25,26 +26,60 @@ public class MeetingRecords extends BaseEntity
     /** 记录内容 */
     @Excel(name = "记录内容")
     private String recordContent;
+    /**
+     * 音频文件地址
+     */
+    private String audioUrl;
 
-    public void setRecordId(Long recordId) 
-    {
-        this.recordId = recordId;
+    /** 说话人ID */
+    @Excel(name = "说话人ID")
+    private Long userId;
+
+    /** 说话头像地址 */
+    @Excel(name = "说话头像地址")
+    private String avatar;
+
+    /** 说话人昵称 */
+    @Excel(name = "说话人昵称")
+    private String nickName;
+    /**
+     * 会议音频文件
+     */
+    private MultipartFile file;
+
+    public String getAudioUrl() {
+        return audioUrl;
     }
 
-    public Long getRecordId() 
-    {
+    public void setAudioUrl(String audioUrl) {
+        this.audioUrl = audioUrl;
+    }
+
+    public MultipartFile getFile() {
+        return file;
+    }
+
+    public void setFile(MultipartFile file) {
+        this.file = file;
+    }
+
+    public Long getRecordId() {
         return recordId;
     }
-    public void setConferenceRoomOrderId(Long conferenceRoomOrderId) 
-    {
-        this.conferenceRoomOrderId = conferenceRoomOrderId;
+
+    public void setRecordId(Long recordId) {
+        this.recordId = recordId;
     }
 
-    public Long getConferenceRoomOrderId() 
-    {
+    public Long getConferenceRoomOrderId() {
         return conferenceRoomOrderId;
     }
-    public void setRecordContent(String recordContent) 
+
+    public void setConferenceRoomOrderId(Long conferenceRoomOrderId) {
+        this.conferenceRoomOrderId = conferenceRoomOrderId;
+    }
+
+    public void setRecordContent(String recordContent)
     {
         this.recordContent = recordContent;
     }
@@ -53,6 +88,33 @@ public class MeetingRecords extends BaseEntity
     {
         return recordContent;
     }
+    public void setUserId(Long userId) 
+    {
+        this.userId = userId;
+    }
+
+    public Long getUserId() 
+    {
+        return userId;
+    }
+    public void setAvatar(String avatar) 
+    {
+        this.avatar = avatar;
+    }
+
+    public String getAvatar() 
+    {
+        return avatar;
+    }
+    public void setNickName(String nickName) 
+    {
+        this.nickName = nickName;
+    }
+
+    public String getNickName() 
+    {
+        return nickName;
+    }
 
     @Override
     public String toString() {
@@ -60,6 +122,9 @@ public class MeetingRecords extends BaseEntity
             .append("recordId", getRecordId())
             .append("conferenceRoomOrderId", getConferenceRoomOrderId())
             .append("recordContent", getRecordContent())
+            .append("userId", getUserId())
+            .append("avatar", getAvatar())
+            .append("nickName", getNickName())
             .append("createTime", getCreateTime())
             .append("updateBy", getUpdateBy())
             .append("updateTime", getUpdateTime())

+ 167 - 0
ruoyi-system/src/main/java/com/ruoyi/system/domain/MenuFood.java

@@ -0,0 +1,167 @@
+package com.ruoyi.system.domain;
+
+import org.apache.commons.lang3.builder.ToStringBuilder;
+import org.apache.commons.lang3.builder.ToStringStyle;
+import com.ruoyi.common.annotation.Excel;
+import com.ruoyi.common.core.domain.BaseEntity;
+
+/**
+ * 每日食谱对象 menu_food
+ * 
+ * @author boman
+ * @date 2024-11-07
+ */
+public class MenuFood extends BaseEntity
+{
+    private static final long serialVersionUID = 1L;
+
+    /** 食谱ID */
+    private Long menuFoodId;
+
+    /** 食谱日期 周一 */
+    @Excel(name = "食谱日期 周一")
+    private String menuFoodTime;
+
+    /** 就餐人员类型 1:职工 2:领导 */
+    @Excel(name = "就餐人员类型 1:职工 2:领导")
+    private String menuFoodType;
+
+    /** 食谱早餐详情 */
+    @Excel(name = "食谱早餐详情")
+    private String menuFoodDetailBk;
+
+    /** 食谱中餐详情 */
+    @Excel(name = "食谱中餐详情")
+    private String menuFoodDetailLu;
+
+    /** 食谱晚餐详情 */
+    @Excel(name = "食谱晚餐详情")
+    private String menuFoodDetailDi;
+
+    /** 食堂名称 */
+    @Excel(name = "食堂名称")
+    private String canteenName;
+
+    /** 食堂id */
+    @Excel(name = "食堂id")
+    private Long canteenId;
+
+    /** 是否启用 */
+    @Excel(name = "是否启用")
+    private String isUse;
+
+    /** 创建部门 */
+    private Long createDept;
+
+    public void setMenuFoodId(Long menuFoodId) 
+    {
+        this.menuFoodId = menuFoodId;
+    }
+
+    public Long getMenuFoodId() 
+    {
+        return menuFoodId;
+    }
+    public void setMenuFoodTime(String menuFoodTime) 
+    {
+        this.menuFoodTime = menuFoodTime;
+    }
+
+    public String getMenuFoodTime() 
+    {
+        return menuFoodTime;
+    }
+    public void setMenuFoodType(String menuFoodType) 
+    {
+        this.menuFoodType = menuFoodType;
+    }
+
+    public String getMenuFoodType() 
+    {
+        return menuFoodType;
+    }
+    public void setMenuFoodDetailBk(String menuFoodDetailBk) 
+    {
+        this.menuFoodDetailBk = menuFoodDetailBk;
+    }
+
+    public String getMenuFoodDetailBk() 
+    {
+        return menuFoodDetailBk;
+    }
+    public void setMenuFoodDetailLu(String menuFoodDetailLu) 
+    {
+        this.menuFoodDetailLu = menuFoodDetailLu;
+    }
+
+    public String getMenuFoodDetailLu() 
+    {
+        return menuFoodDetailLu;
+    }
+    public void setMenuFoodDetailDi(String menuFoodDetailDi) 
+    {
+        this.menuFoodDetailDi = menuFoodDetailDi;
+    }
+
+    public String getMenuFoodDetailDi() 
+    {
+        return menuFoodDetailDi;
+    }
+    public void setCanteenName(String canteenName) 
+    {
+        this.canteenName = canteenName;
+    }
+
+    public String getCanteenName() 
+    {
+        return canteenName;
+    }
+    public void setCanteenId(Long canteenId) 
+    {
+        this.canteenId = canteenId;
+    }
+
+    public Long getCanteenId() 
+    {
+        return canteenId;
+    }
+    public void setIsUse(String isUse) 
+    {
+        this.isUse = isUse;
+    }
+
+    public String getIsUse() 
+    {
+        return isUse;
+    }
+    public void setCreateDept(Long createDept) 
+    {
+        this.createDept = createDept;
+    }
+
+    public Long getCreateDept() 
+    {
+        return createDept;
+    }
+
+    @Override
+    public String toString() {
+        return new ToStringBuilder(this,ToStringStyle.MULTI_LINE_STYLE)
+            .append("menuFoodId", getMenuFoodId())
+            .append("menuFoodTime", getMenuFoodTime())
+            .append("menuFoodType", getMenuFoodType())
+            .append("menuFoodDetailBk", getMenuFoodDetailBk())
+            .append("menuFoodDetailLu", getMenuFoodDetailLu())
+            .append("menuFoodDetailDi", getMenuFoodDetailDi())
+            .append("canteenName", getCanteenName())
+            .append("canteenId", getCanteenId())
+            .append("isUse", getIsUse())
+            .append("createDept", getCreateDept())
+            .append("createBy", getCreateBy())
+            .append("createTime", getCreateTime())
+            .append("updateBy", getUpdateBy())
+            .append("updateTime", getUpdateTime())
+            .append("remark", getRemark())
+            .toString();
+    }
+}

+ 171 - 0
ruoyi-system/src/main/java/com/ruoyi/system/domain/MenuFoodRecord.java

@@ -0,0 +1,171 @@
+package com.ruoyi.system.domain;
+
+import com.fasterxml.jackson.annotation.JsonFormat;
+import com.ruoyi.common.annotation.Excel;
+import com.ruoyi.common.core.domain.BaseEntity;
+import org.apache.commons.lang3.builder.ToStringBuilder;
+import org.apache.commons.lang3.builder.ToStringStyle;
+
+import java.util.Date;
+
+/**
+ * 每日食谱记录对象 menu_food_record
+ * 
+ * @author boman
+ * @date 2024-11-07
+ */
+public class MenuFoodRecord extends BaseEntity
+{
+    private static final long serialVersionUID = 1L;
+
+    /** 食谱ID */
+    private Long menuFoodRecordId;
+
+    /** 食谱日期 周一 */
+    @Excel(name = "食谱日期 周一")
+    private String menuFoodTime;
+
+    /** 就餐人员类型 1:职工 2:领导 */
+    @Excel(name = "就餐人员类型 1:职工 2:领导")
+    private String menuFoodType;
+
+    /** 食谱早餐详情 */
+    @Excel(name = "食谱早餐详情")
+    private String menuFoodDetailBk;
+
+    /** 食谱中餐详情 */
+    @Excel(name = "食谱中餐详情")
+    private String menuFoodDetailLu;
+
+    /** 食谱午餐详情 */
+    @Excel(name = "食谱午餐详情")
+    private String menuFoodDetailDi;
+
+    /** 食堂名称 */
+    @Excel(name = "食堂名称")
+    private String canteenName;
+
+    /** 食堂id */
+    @Excel(name = "食堂id")
+    private Long canteenId;
+
+    /** 记录时间 */
+    @JsonFormat(pattern = "yyyy-MM-dd")
+    @Excel(name = "记录时间", width = 30, dateFormat = "yyyy-MM-dd")
+    private Date recordTime;
+
+    /** 创建部门 */
+    private Long createDept;
+
+    public void setMenuFoodRecordId(Long menuFoodRecordId) 
+    {
+        this.menuFoodRecordId = menuFoodRecordId;
+    }
+
+    public Long getMenuFoodRecordId() 
+    {
+        return menuFoodRecordId;
+    }
+    public void setMenuFoodTime(String menuFoodTime) 
+    {
+        this.menuFoodTime = menuFoodTime;
+    }
+
+    public String getMenuFoodTime() 
+    {
+        return menuFoodTime;
+    }
+    public void setMenuFoodType(String menuFoodType) 
+    {
+        this.menuFoodType = menuFoodType;
+    }
+
+    public String getMenuFoodType() 
+    {
+        return menuFoodType;
+    }
+    public void setMenuFoodDetailBk(String menuFoodDetailBk) 
+    {
+        this.menuFoodDetailBk = menuFoodDetailBk;
+    }
+
+    public String getMenuFoodDetailBk() 
+    {
+        return menuFoodDetailBk;
+    }
+    public void setMenuFoodDetailLu(String menuFoodDetailLu) 
+    {
+        this.menuFoodDetailLu = menuFoodDetailLu;
+    }
+
+    public String getMenuFoodDetailLu() 
+    {
+        return menuFoodDetailLu;
+    }
+    public void setMenuFoodDetailDi(String menuFoodDetailDi) 
+    {
+        this.menuFoodDetailDi = menuFoodDetailDi;
+    }
+
+    public String getMenuFoodDetailDi() 
+    {
+        return menuFoodDetailDi;
+    }
+    public void setCanteenName(String canteenName) 
+    {
+        this.canteenName = canteenName;
+    }
+
+    public String getCanteenName() 
+    {
+        return canteenName;
+    }
+    public void setCanteenId(Long canteenId) 
+    {
+        this.canteenId = canteenId;
+    }
+
+    public Long getCanteenId() 
+    {
+        return canteenId;
+    }
+    public void setRecordTime(Date recordTime) 
+    {
+        this.recordTime = recordTime;
+    }
+
+    public Date getRecordTime() 
+    {
+        return recordTime;
+    }
+    public void setCreateDept(Long createDept) 
+    {
+        this.createDept = createDept;
+    }
+
+    public Long getCreateDept() 
+    {
+        return createDept;
+    }
+
+    @Override
+    public String toString() {
+        return new ToStringBuilder(this,ToStringStyle.MULTI_LINE_STYLE)
+            .append("menuFoodRecordId", getMenuFoodRecordId())
+            .append("menuFoodTime", getMenuFoodTime())
+            .append("menuFoodType", getMenuFoodType())
+            .append("menuFoodDetailBk", getMenuFoodDetailBk())
+            .append("menuFoodDetailLu", getMenuFoodDetailLu())
+            .append("menuFoodDetailDi", getMenuFoodDetailDi())
+            .append("canteenName", getCanteenName())
+            .append("canteenId", getCanteenId())
+            .append("recordTime", getRecordTime())
+            .append("createDept", getCreateDept())
+            .append("createBy", getCreateBy())
+            .append("createTime", getCreateTime())
+            .append("updateBy", getUpdateBy())
+            .append("updateTime", getUpdateTime())
+            .append("remark", getRemark())
+            .toString();
+    }
+}

+ 164 - 0
ruoyi-system/src/main/java/com/ruoyi/system/domain/SignIn.java

@@ -0,0 +1,164 @@
+package com.ruoyi.system.domain;
+
+import com.fasterxml.jackson.annotation.JsonFormat;
+import com.ruoyi.common.annotation.Excel;
+import com.ruoyi.common.core.domain.BaseEntity;
+import org.apache.commons.lang3.builder.ToStringBuilder;
+import org.apache.commons.lang3.builder.ToStringStyle;
+
+import java.util.Date;
+
+/**
+ * 会议室签到对象 sign_in
+ * 
+ * @author boman
+ * @date 2024-11-04
+ */
+public class SignIn extends BaseEntity
+{
+    private static final long serialVersionUID = 1L;
+
+    /** 签到ID */
+    private Long signInId;
+
+    /** 会议室预约ID */
+    @Excel(name = "会议室预约ID")
+    private Long conferenceRoomOrderId;
+    /** 会议室预约名称 */
+    private String conferenceRoomOrderName;
+
+    /** 会议室ID */
+    @Excel(name = "会议室ID")
+    private Long conferenceRoomId;
+    /** 会议室名称 */
+    private String conferenceRoomName;
+
+    /** 用户id */
+    @Excel(name = "用户id")
+    private Long userId;
+
+    /** 用户头像地址 */
+    @Excel(name = "用户头像地址")
+    private String avatar;
+
+    /** 用户名称 */
+    @Excel(name = "用户名称")
+    private String nickName;
+
+    /** 签到时间 */
+    @JsonFormat(pattern = "yyyy-MM-dd")
+    @Excel(name = "签到时间", width = 30, dateFormat = "yyyy-MM-dd")
+    private Date signTime;
+
+    /** 创建部门 */
+    @Excel(name = "创建部门")
+    private Long createDept;
+
+    public String getConferenceRoomOrderName() {
+        return conferenceRoomOrderName;
+    }
+
+    public void setConferenceRoomOrderName(String conferenceRoomOrderName) {
+        this.conferenceRoomOrderName = conferenceRoomOrderName;
+    }
+
+    public String getConferenceRoomName() {
+        return conferenceRoomName;
+    }
+
+    public void setConferenceRoomName(String conferenceRoomName) {
+        this.conferenceRoomName = conferenceRoomName;
+    }
+
+    public void setSignInId(Long signInId)
+    {
+        this.signInId = signInId;
+    }
+
+    public Long getSignInId() 
+    {
+        return signInId;
+    }
+    public void setConferenceRoomOrderId(Long conferenceRoomOrderId) 
+    {
+        this.conferenceRoomOrderId = conferenceRoomOrderId;
+    }
+
+    public Long getConferenceRoomOrderId() 
+    {
+        return conferenceRoomOrderId;
+    }
+    public void setConferenceRoomId(Long conferenceRoomId) 
+    {
+        this.conferenceRoomId = conferenceRoomId;
+    }
+
+    public Long getConferenceRoomId() 
+    {
+        return conferenceRoomId;
+    }
+    public void setUserId(Long userId) 
+    {
+        this.userId = userId;
+    }
+
+    public Long getUserId() 
+    {
+        return userId;
+    }
+    public void setAvatar(String avatar) 
+    {
+        this.avatar = avatar;
+    }
+
+    public String getAvatar() 
+    {
+        return avatar;
+    }
+    public void setNickName(String nickName) 
+    {
+        this.nickName = nickName;
+    }
+
+    public String getNickName() 
+    {
+        return nickName;
+    }
+    public void setSignTime(Date signTime) 
+    {
+        this.signTime = signTime;
+    }
+
+    public Date getSignTime() 
+    {
+        return signTime;
+    }
+    public void setCreateDept(Long createDept) 
+    {
+        this.createDept = createDept;
+    }
+
+    public Long getCreateDept() 
+    {
+        return createDept;
+    }
+
+    @Override
+    public String toString() {
+        return new ToStringBuilder(this,ToStringStyle.MULTI_LINE_STYLE)
+            .append("signInId", getSignInId())
+            .append("conferenceRoomOrderId", getConferenceRoomOrderId())
+            .append("conferenceRoomId", getConferenceRoomId())
+            .append("userId", getUserId())
+            .append("avatar", getAvatar())
+            .append("nickName", getNickName())
+            .append("signTime", getSignTime())
+            .append("createDept", getCreateDept())
+            .append("createBy", getCreateBy())
+            .append("createTime", getCreateTime())
+            .append("updateBy", getUpdateBy())
+            .append("updateTime", getUpdateTime())
+            .append("remark", getRemark())
+            .toString();
+    }
+}

+ 64 - 0
ruoyi-system/src/main/java/com/ruoyi/system/domain/VoteOption.java

@@ -0,0 +1,64 @@
+package com.ruoyi.system.domain;
+
+import com.ruoyi.common.annotation.Excel;
+import org.apache.commons.lang3.builder.ToStringBuilder;
+import org.apache.commons.lang3.builder.ToStringStyle;
+
+/**
+ * 投票选项对象 vote_option
+ * 
+ * @author boman
+ * @date 2024-11-15
+ */
+public class VoteOption
+{
+    private static final long serialVersionUID = 1L;
+
+    /** 选项ID,主键 */
+    private Long optionId;
+
+    /** 选项名称 */
+    @Excel(name = "选项名称")
+    private String optionName;
+
+    /** 所属主题ID */
+    @Excel(name = "所属主题ID")
+    private Long themeId;
+
+    public void setOptionId(Long optionId) 
+    {
+        this.optionId = optionId;
+    }
+
+    public Long getOptionId() 
+    {
+        return optionId;
+    }
+    public void setOptionName(String optionName) 
+    {
+        this.optionName = optionName;
+    }
+
+    public String getOptionName() 
+    {
+        return optionName;
+    }
+    public void setThemeId(Long themeId) 
+    {
+        this.themeId = themeId;
+    }
+
+    public Long getThemeId() 
+    {
+        return themeId;
+    }
+
+    @Override
+    public String toString() {
+        return new ToStringBuilder(this,ToStringStyle.MULTI_LINE_STYLE)
+            .append("optionId", getOptionId())
+            .append("optionName", getOptionName())
+            .append("themeId", getThemeId())
+            .toString();
+    }
+}

+ 151 - 0
ruoyi-system/src/main/java/com/ruoyi/system/domain/VoteResult.java

@@ -0,0 +1,151 @@
+package com.ruoyi.system.domain;
+
+import org.apache.commons.lang3.builder.ToStringBuilder;
+import org.apache.commons.lang3.builder.ToStringStyle;
+import com.ruoyi.common.annotation.Excel;
+import com.ruoyi.common.core.domain.BaseEntity;
+
+/**
+ * 投票结果对象 vote_result
+ * 
+ * @author boman
+ * @date 2024-11-15
+ */
+public class VoteResult extends BaseEntity
+{
+    private static final long serialVersionUID = 1L;
+
+    /** 投票结果ID */
+    private Long voteResultId;
+
+    /** 所属主题ID */
+    @Excel(name = "所属主题ID")
+    private Long themeId;
+
+    /** 投票标题 */
+    @Excel(name = "投票标题")
+    private String themeContent;
+
+    /** 选项ID */
+    @Excel(name = "选项ID")
+    private Long optionId;
+
+    /** 选项名称 */
+    @Excel(name = "选项名称")
+    private String optionName;
+
+    /** 会议id(关联会议预约表) */
+    @Excel(name = "会议id(关联会议预约表)")
+    private Long conferenceRoomOrderId;
+
+    /** 投票人ID */
+    @Excel(name = "投票人ID")
+    private Long userId;
+
+    /** 投票人头像地址 */
+    @Excel(name = "投票人头像地址")
+    private String avatar;
+
+    /** 投票人昵称 */
+    @Excel(name = "投票人昵称")
+    private String nickName;
+
+    public Long getConferenceRoomOrderId() {
+        return conferenceRoomOrderId;
+    }
+
+    public void setConferenceRoomOrderId(Long conferenceRoomOrderId) {
+        this.conferenceRoomOrderId = conferenceRoomOrderId;
+    }
+
+    public void setVoteResultId(Long voteResultId)
+    {
+        this.voteResultId = voteResultId;
+    }
+
+    public Long getVoteResultId() 
+    {
+        return voteResultId;
+    }
+    public void setThemeId(Long themeId) 
+    {
+        this.themeId = themeId;
+    }
+
+    public Long getThemeId() 
+    {
+        return themeId;
+    }
+    public void setThemeContent(String themeContent) 
+    {
+        this.themeContent = themeContent;
+    }
+
+    public String getThemeContent() 
+    {
+        return themeContent;
+    }
+    public void setOptionId(Long optionId) 
+    {
+        this.optionId = optionId;
+    }
+
+    public Long getOptionId() 
+    {
+        return optionId;
+    }
+    public void setOptionName(String optionName) 
+    {
+        this.optionName = optionName;
+    }
+
+    public String getOptionName() 
+    {
+        return optionName;
+    }
+    public void setUserId(Long userId) 
+    {
+        this.userId = userId;
+    }
+
+    public Long getUserId() 
+    {
+        return userId;
+    }
+    public void setAvatar(String avatar) 
+    {
+        this.avatar = avatar;
+    }
+
+    public String getAvatar() 
+    {
+        return avatar;
+    }
+    public void setNickName(String nickName) 
+    {
+        this.nickName = nickName;
+    }
+
+    public String getNickName() 
+    {
+        return nickName;
+    }
+
+    @Override
+    public String toString() {
+        return new ToStringBuilder(this,ToStringStyle.MULTI_LINE_STYLE)
+            .append("voteResultId", getVoteResultId())
+            .append("themeId", getThemeId())
+            .append("themeContent", getThemeContent())
+            .append("optionId", getOptionId())
+            .append("optionName", getOptionName())
+            .append("userId", getUserId())
+            .append("avatar", getAvatar())
+            .append("nickName", getNickName())
+            .append("createTime", getCreateTime())
+            .append("updateBy", getUpdateBy())
+            .append("updateTime", getUpdateTime())
+            .append("remark", getRemark())
+            .toString();
+    }
+}

+ 79 - 0
ruoyi-system/src/main/java/com/ruoyi/system/domain/VoteTheme.java

@@ -0,0 +1,79 @@
+package com.ruoyi.system.domain;
+
+import com.ruoyi.common.annotation.Excel;
+import org.apache.commons.lang3.builder.ToStringBuilder;
+import org.apache.commons.lang3.builder.ToStringStyle;
+
+import java.util.List;
+
+/**
+ * 投票主题对象 vote_theme
+ * 
+ * @author boman
+ * @date 2024-11-15
+ */
+public class VoteTheme
+{
+    private static final long serialVersionUID = 1L;
+
+    /** 投票主题ID,主键 */
+    private Long themeId;
+
+    /** 投票标题 */
+    @Excel(name = "投票标题")
+    private String themeContent;
+
+    /** 所属会议ID */
+    @Excel(name = "所属会议ID")
+    private Long conferenceRoomOrderId;
+
+    /** 投票选项信息 */
+    private List<VoteOption> voteOptionList;
+
+    public void setThemeId(Long themeId) 
+    {
+        this.themeId = themeId;
+    }
+
+    public Long getThemeId() 
+    {
+        return themeId;
+    }
+    public void setThemeContent(String themeContent) 
+    {
+        this.themeContent = themeContent;
+    }
+
+    public String getThemeContent() 
+    {
+        return themeContent;
+    }
+
+    public Long getConferenceRoomOrderId() {
+        return conferenceRoomOrderId;
+    }
+
+    public void setConferenceRoomOrderId(Long conferenceRoomOrderId) {
+        this.conferenceRoomOrderId = conferenceRoomOrderId;
+    }
+
+    public List<VoteOption> getVoteOptionList()
+    {
+        return voteOptionList;
+    }
+
+    public void setVoteOptionList(List<VoteOption> voteOptionList)
+    {
+        this.voteOptionList = voteOptionList;
+    }
+
+    @Override
+    public String toString() {
+        return new ToStringBuilder(this,ToStringStyle.MULTI_LINE_STYLE)
+            .append("themeId", getThemeId())
+            .append("themeContent", getThemeContent())
+            .append("conferenceRoomOrderId", getConferenceRoomOrderId())
+            .append("voteOptionList", getVoteOptionList())
+            .toString();
+    }
+}

+ 23 - 0
ruoyi-system/src/main/java/com/ruoyi/system/domain/vo/MenuFoodVo.java

@@ -0,0 +1,23 @@
+package com.ruoyi.system.domain.vo;
+
+import com.ruoyi.system.domain.MenuFood;
+
+import java.util.List;
+
+/**
+ * 新增菜谱使用
+ * @Author: tjf
+ * @Date: 2024/11/7 17:13
+ * @Describe:
+ */
+public class MenuFoodVo {
+    private List<MenuFood> menuFoodList;
+
+    public List<MenuFood> getMenuFoodList() {
+        return menuFoodList;
+    }
+
+    public void setMenuFoodList(List<MenuFood> menuFoodList) {
+        this.menuFoodList = menuFoodList;
+    }
+}

+ 3 - 2
ruoyi-system/src/main/java/com/ruoyi/system/mapper/MeetingRecordsMapper.java

@@ -8,16 +8,17 @@ import java.util.List;
  * 会议记录Mapper接口
  * 
  * @author boman
- * @date 2024-10-22
+ * @date 2024-11-04
  */
 public interface MeetingRecordsMapper 
 {
     /**
      * 查询会议记录
      * 
-     * @param recordId 会议记录主键
+     * @param conferenceRoomOrderId 会议id
      * @return 会议记录
      */
+    public MeetingRecords selectMeetingRecordsByConferenceRoomOrderId(Long conferenceRoomOrderId);
     public MeetingRecords selectMeetingRecordsByRecordId(Long recordId);
 
     /**

+ 64 - 0
ruoyi-system/src/main/java/com/ruoyi/system/mapper/MenuFoodMapper.java

@@ -0,0 +1,64 @@
+package com.ruoyi.system.mapper;
+
+import com.ruoyi.system.domain.MenuFood;
+
+import java.util.List;
+
+/**
+ * 每日食谱Mapper接口
+ * 
+ * @author boman
+ * @date 2024-11-07
+ */
+public interface MenuFoodMapper 
+{
+    /**
+     * 查询每日食谱
+     * 
+     * @param menuFoodId 每日食谱主键
+     * @return 每日食谱
+     */
+    public MenuFood selectMenuFoodByMenuFoodId(Long menuFoodId);
+
+    /**
+     * 查询每日食谱列表
+     * 
+     * @param menuFood 每日食谱
+     * @return 每日食谱集合
+     */
+    public List<MenuFood> selectMenuFoodList(MenuFood menuFood);
+
+    /**
+     * 新增每日食谱
+     * 
+     * @param menuFood 每日食谱
+     * @return 结果
+     */
+    public int insertMenuFood(MenuFood menuFood);
+    public int batchMenuFoodVo(List<MenuFood> menuFood);
+
+    /**
+     * 修改每日食谱
+     * 
+     * @param menuFood 每日食谱
+     * @return 结果
+     */
+    public int updateMenuFood(MenuFood menuFood);
+    public int updateMenuFoodTime(String menuFoodTime);
+
+    /**
+     * 删除每日食谱
+     * 
+     * @param menuFoodId 每日食谱主键
+     * @return 结果
+     */
+    public int deleteMenuFoodByMenuFoodId(Long menuFoodId);
+
+    /**
+     * 批量删除每日食谱
+     * 
+     * @param menuFoodIds 需要删除的数据主键集合
+     * @return 结果
+     */
+    public int deleteMenuFoodByMenuFoodIds(Long[] menuFoodIds);
+}

+ 62 - 0
ruoyi-system/src/main/java/com/ruoyi/system/mapper/MenuFoodRecordMapper.java

@@ -0,0 +1,62 @@
+package com.ruoyi.system.mapper;
+
+import com.ruoyi.system.domain.MenuFoodRecord;
+
+import java.util.List;
+
+/**
+ * 每日食谱记录Mapper接口
+ * 
+ * @author boman
+ * @date 2024-11-07
+ */
+public interface MenuFoodRecordMapper 
+{
+    /**
+     * 查询每日食谱记录
+     * 
+     * @param menuFoodRecordId 每日食谱记录主键
+     * @return 每日食谱记录
+     */
+    public MenuFoodRecord selectMenuFoodRecordByMenuFoodRecordId(Long menuFoodRecordId);
+
+    /**
+     * 查询每日食谱记录列表
+     * 
+     * @param menuFoodRecord 每日食谱记录
+     * @return 每日食谱记录集合
+     */
+    public List<MenuFoodRecord> selectMenuFoodRecordList(MenuFoodRecord menuFoodRecord);
+
+    /**
+     * 新增每日食谱记录
+     * 
+     * @param menuFoodRecord 每日食谱记录
+     * @return 结果
+     */
+    public int insertMenuFoodRecord(MenuFoodRecord menuFoodRecord);
+
+    /**
+     * 修改每日食谱记录
+     * 
+     * @param menuFoodRecord 每日食谱记录
+     * @return 结果
+     */
+    public int updateMenuFoodRecord(MenuFoodRecord menuFoodRecord);
+
+    /**
+     * 删除每日食谱记录
+     * 
+     * @param menuFoodRecordId 每日食谱记录主键
+     * @return 结果
+     */
+    public int deleteMenuFoodRecordByMenuFoodRecordId(Long menuFoodRecordId);
+
+    /**
+     * 批量删除每日食谱记录
+     * 
+     * @param menuFoodRecordIds 需要删除的数据主键集合
+     * @return 结果
+     */
+    public int deleteMenuFoodRecordByMenuFoodRecordIds(Long[] menuFoodRecordIds);
+}

+ 62 - 0
ruoyi-system/src/main/java/com/ruoyi/system/mapper/SignInMapper.java

@@ -0,0 +1,62 @@
+package com.ruoyi.system.mapper;
+
+import com.ruoyi.system.domain.SignIn;
+
+import java.util.List;
+
+/**
+ * 会议室签到Mapper接口
+ * 
+ * @author boman
+ * @date 2024-11-04
+ */
+public interface SignInMapper 
+{
+    /**
+     * 查询会议室签到
+     * 
+     * @param signInId 会议室签到主键
+     * @return 会议室签到
+     */
+    public SignIn selectSignInBySignInId(Long signInId);
+
+    /**
+     * 查询会议室签到列表
+     * 
+     * @param signIn 会议室签到
+     * @return 会议室签到集合
+     */
+    public List<SignIn> selectSignInList(SignIn signIn);
+
+    /**
+     * 新增会议室签到
+     * 
+     * @param signIn 会议室签到
+     * @return 结果
+     */
+    public int insertSignIn(SignIn signIn);
+
+    /**
+     * 修改会议室签到
+     * 
+     * @param signIn 会议室签到
+     * @return 结果
+     */
+    public int updateSignIn(SignIn signIn);
+
+    /**
+     * 删除会议室签到
+     * 
+     * @param signInId 会议室签到主键
+     * @return 结果
+     */
+    public int deleteSignInBySignInId(Long signInId);
+
+    /**
+     * 批量删除会议室签到
+     * 
+     * @param signInIds 需要删除的数据主键集合
+     * @return 结果
+     */
+    public int deleteSignInBySignInIds(Long[] signInIds);
+}

+ 62 - 0
ruoyi-system/src/main/java/com/ruoyi/system/mapper/VoteResultMapper.java

@@ -0,0 +1,62 @@
+package com.ruoyi.system.mapper;
+
+import com.ruoyi.system.domain.VoteResult;
+
+import java.util.List;
+
+/**
+ * 投票结果Mapper接口
+ * 
+ * @author boman
+ * @date 2024-11-15
+ */
+public interface VoteResultMapper 
+{
+    /**
+     * 查询投票结果
+     * 
+     * @param voteResultId 投票结果主键
+     * @return 投票结果
+     */
+    public VoteResult selectVoteResultByVoteResultId(Long voteResultId);
+
+    /**
+     * 查询投票结果列表
+     * 
+     * @param voteResult 投票结果
+     * @return 投票结果集合
+     */
+    public List<VoteResult> selectVoteResultList(VoteResult voteResult);
+
+    /**
+     * 新增投票结果
+     * 
+     * @param voteResult 投票结果
+     * @return 结果
+     */
+    public int insertVoteResult(VoteResult voteResult);
+
+    /**
+     * 修改投票结果
+     * 
+     * @param voteResult 投票结果
+     * @return 结果
+     */
+    public int updateVoteResult(VoteResult voteResult);
+
+    /**
+     * 删除投票结果
+     * 
+     * @param voteResultId 投票结果主键
+     * @return 结果
+     */
+    public int deleteVoteResultByVoteResultId(Long voteResultId);
+
+    /**
+     * 批量删除投票结果
+     * 
+     * @param voteResultIds 需要删除的数据主键集合
+     * @return 结果
+     */
+    public int deleteVoteResultByVoteResultIds(Long[] voteResultIds);
+}

+ 89 - 0
ruoyi-system/src/main/java/com/ruoyi/system/mapper/VoteThemeMapper.java

@@ -0,0 +1,89 @@
+package com.ruoyi.system.mapper;
+
+import com.ruoyi.system.domain.VoteOption;
+import com.ruoyi.system.domain.VoteTheme;
+
+import java.util.List;
+
+/**
+ * 投票主题Mapper接口
+ * 
+ * @author boman
+ * @date 2024-11-15
+ */
+public interface VoteThemeMapper 
+{
+    /**
+     * 查询投票主题
+     * 
+     * @param themeId 投票主题主键
+     * @return 投票主题
+     */
+    public VoteTheme selectVoteThemeByThemeId(Long themeId);
+    public List<VoteTheme> selectVoteThemeByConferenceRoomOrderId(Long conferenceRoomOrderId);
+
+    /**
+     * 查询投票主题列表
+     * 
+     * @param voteTheme 投票主题
+     * @return 投票主题集合
+     */
+    public List<VoteTheme> selectVoteThemeList(VoteTheme voteTheme);
+
+    /**
+     * 新增投票主题
+     * 
+     * @param voteTheme 投票主题
+     * @return 结果
+     */
+    public int insertVoteTheme(VoteTheme voteTheme);
+
+    /**
+     * 修改投票主题
+     * 
+     * @param voteTheme 投票主题
+     * @return 结果
+     */
+    public int updateVoteTheme(VoteTheme voteTheme);
+
+    /**
+     * 删除投票主题
+     * 
+     * @param themeId 投票主题主键
+     * @return 结果
+     */
+    public int deleteVoteThemeByThemeId(Long themeId);
+
+    /**
+     * 批量删除投票主题
+     * 
+     * @param themeIds 需要删除的数据主键集合
+     * @return 结果
+     */
+    public int deleteVoteThemeByThemeIds(Long[] themeIds);
+
+    /**
+     * 批量删除投票选项
+     * 
+     * @param themeIds 需要删除的数据主键集合
+     * @return 结果
+     */
+    public int deleteVoteOptionByThemeIds(Long[] themeIds);
+    
+    /**
+     * 批量新增投票选项
+     * 
+     * @param voteOptionList 投票选项列表
+     * @return 结果
+     */
+    public int batchVoteOption(List<VoteOption> voteOptionList);
+    
+
+    /**
+     * 通过投票主题主键删除投票选项信息
+     * 
+     * @param themeId 投票主题ID
+     * @return 结果
+     */
+    public int deleteVoteOptionByThemeId(Long themeId);
+}

+ 1 - 1
ruoyi-system/src/main/java/com/ruoyi/system/service/IMeetingRecordsService.java

@@ -8,7 +8,7 @@ import java.util.List;
  * 会议记录Service接口
  * 
  * @author boman
- * @date 2024-10-22
+ * @date 2024-11-04
  */
 public interface IMeetingRecordsService 
 {

+ 62 - 0
ruoyi-system/src/main/java/com/ruoyi/system/service/IMenuFoodRecordService.java

@@ -0,0 +1,62 @@
+package com.ruoyi.system.service;
+
+import com.ruoyi.system.domain.MenuFoodRecord;
+
+import java.util.List;
+
+/**
+ * 每日食谱记录Service接口
+ * 
+ * @author boman
+ * @date 2024-11-07
+ */
+public interface IMenuFoodRecordService 
+{
+    /**
+     * 查询每日食谱记录
+     * 
+     * @param menuFoodRecordId 每日食谱记录主键
+     * @return 每日食谱记录
+     */
+    public MenuFoodRecord selectMenuFoodRecordByMenuFoodRecordId(Long menuFoodRecordId);
+
+    /**
+     * 查询每日食谱记录列表
+     * 
+     * @param menuFoodRecord 每日食谱记录
+     * @return 每日食谱记录集合
+     */
+    public List<MenuFoodRecord> selectMenuFoodRecordList(MenuFoodRecord menuFoodRecord);
+
+    /**
+     * 新增每日食谱记录
+     * 
+     * @param menuFoodRecord 每日食谱记录
+     * @return 结果
+     */
+    public int insertMenuFoodRecord(MenuFoodRecord menuFoodRecord);
+
+    /**
+     * 修改每日食谱记录
+     * 
+     * @param menuFoodRecord 每日食谱记录
+     * @return 结果
+     */
+    public int updateMenuFoodRecord(MenuFoodRecord menuFoodRecord);
+
+    /**
+     * 批量删除每日食谱记录
+     * 
+     * @param menuFoodRecordIds 需要删除的每日食谱记录主键集合
+     * @return 结果
+     */
+    public int deleteMenuFoodRecordByMenuFoodRecordIds(Long[] menuFoodRecordIds);
+
+    /**
+     * 删除每日食谱记录信息
+     * 
+     * @param menuFoodRecordId 每日食谱记录主键
+     * @return 结果
+     */
+    public int deleteMenuFoodRecordByMenuFoodRecordId(Long menuFoodRecordId);
+}

+ 64 - 0
ruoyi-system/src/main/java/com/ruoyi/system/service/IMenuFoodService.java

@@ -0,0 +1,64 @@
+package com.ruoyi.system.service;
+
+import com.ruoyi.system.domain.MenuFood;
+import com.ruoyi.system.domain.vo.MenuFoodVo;
+
+import java.util.List;
+
+/**
+ * 每日食谱Service接口
+ * 
+ * @author boman
+ * @date 2024-11-07
+ */
+public interface IMenuFoodService 
+{
+    /**
+     * 查询每日食谱
+     * 
+     * @param menuFoodId 每日食谱主键
+     * @return 每日食谱
+     */
+    public MenuFood selectMenuFoodByMenuFoodId(Long menuFoodId);
+
+    /**
+     * 查询每日食谱列表
+     * 
+     * @param menuFood 每日食谱
+     * @return 每日食谱集合
+     */
+    public List<MenuFood> selectMenuFoodList(MenuFood menuFood);
+
+    /**
+     * 新增每日食谱
+     * 
+     * @param menuFood 每日食谱
+     * @return 结果
+     */
+    public int insertMenuFood(MenuFood menuFood);
+    public int batchMenuFoodVo(MenuFoodVo menuFoodVo);
+
+    /**
+     * 修改每日食谱
+     * 
+     * @param menuFood 每日食谱
+     * @return 结果
+     */
+    public int updateMenuFood(MenuFood menuFood);
+
+    /**
+     * 批量删除每日食谱
+     * 
+     * @param menuFoodIds 需要删除的每日食谱主键集合
+     * @return 结果
+     */
+    public int deleteMenuFoodByMenuFoodIds(Long[] menuFoodIds);
+
+    /**
+     * 删除每日食谱信息
+     * 
+     * @param menuFoodId 每日食谱主键
+     * @return 结果
+     */
+    public int deleteMenuFoodByMenuFoodId(Long menuFoodId);
+}

+ 62 - 0
ruoyi-system/src/main/java/com/ruoyi/system/service/ISignInService.java

@@ -0,0 +1,62 @@
+package com.ruoyi.system.service;
+
+import com.ruoyi.system.domain.SignIn;
+
+import java.util.List;
+
+/**
+ * 会议室签到Service接口
+ * 
+ * @author boman
+ * @date 2024-11-04
+ */
+public interface ISignInService 
+{
+    /**
+     * 查询会议室签到
+     * 
+     * @param signInId 会议室签到主键
+     * @return 会议室签到
+     */
+    public SignIn selectSignInBySignInId(Long signInId);
+
+    /**
+     * 查询会议室签到列表
+     * 
+     * @param signIn 会议室签到
+     * @return 会议室签到集合
+     */
+    public List<SignIn> selectSignInList(SignIn signIn);
+
+    /**
+     * 新增会议室签到
+     * 
+     * @param signIn 会议室签到
+     * @return 结果
+     */
+    public int insertSignIn(SignIn signIn);
+
+    /**
+     * 修改会议室签到
+     * 
+     * @param signIn 会议室签到
+     * @return 结果
+     */
+    public int updateSignIn(SignIn signIn);
+
+    /**
+     * 批量删除会议室签到
+     * 
+     * @param signInIds 需要删除的会议室签到主键集合
+     * @return 结果
+     */
+    public int deleteSignInBySignInIds(Long[] signInIds);
+
+    /**
+     * 删除会议室签到信息
+     * 
+     * @param signInId 会议室签到主键
+     * @return 结果
+     */
+    public int deleteSignInBySignInId(Long signInId);
+}

+ 70 - 0
ruoyi-system/src/main/java/com/ruoyi/system/service/IVoteResultService.java

@@ -0,0 +1,70 @@
+package com.ruoyi.system.service;
+
+import com.ruoyi.common.core.domain.AjaxResult;
+import com.ruoyi.system.domain.VoteResult;
+
+import java.util.List;
+
+/**
+ * 投票结果Service接口
+ * 
+ * @author boman
+ * @date 2024-11-15
+ */
+public interface IVoteResultService 
+{
+    /**
+     * 查询投票结果
+     * 
+     * @param voteResultId 投票结果主键
+     * @return 投票结果
+     */
+    public VoteResult selectVoteResultByVoteResultId(Long voteResultId);
+
+    /**
+     * 查询投票结果列表
+     * 
+     * @param voteResult 投票结果
+     * @return 投票结果集合
+     */
+    public List<VoteResult> selectVoteResultList(VoteResult voteResult);
+
+    /**
+     * 前端查询投票结果前端
+     * @param voteResult
+     * @return
+     */
+    public AjaxResult statistics(VoteResult voteResult);
+
+    /**
+     * 新增投票结果
+     * 
+     * @param voteResult 投票结果
+     * @return 结果
+     */
+    public int insertVoteResult(VoteResult voteResult);
+
+    /**
+     * 修改投票结果
+     * 
+     * @param voteResult 投票结果
+     * @return 结果
+     */
+    public int updateVoteResult(VoteResult voteResult);
+
+    /**
+     * 批量删除投票结果
+     * 
+     * @param voteResultIds 需要删除的投票结果主键集合
+     * @return 结果
+     */
+    public int deleteVoteResultByVoteResultIds(Long[] voteResultIds);
+
+    /**
+     * 删除投票结果信息
+     * 
+     * @param voteResultId 投票结果主键
+     * @return 结果
+     */
+    public int deleteVoteResultByVoteResultId(Long voteResultId);
+}

+ 62 - 0
ruoyi-system/src/main/java/com/ruoyi/system/service/IVoteThemeService.java

@@ -0,0 +1,62 @@
+package com.ruoyi.system.service;
+
+import com.ruoyi.common.core.domain.AjaxResult;
+import com.ruoyi.system.domain.VoteTheme;
+import java.util.List;
+
+/**
+ * 投票主题Service接口
+ * 
+ * @author boman
+ * @date 2024-11-15
+ */
+public interface IVoteThemeService 
+{
+    /**
+     * 查询投票主题
+     * 
+     * @param themeId 投票主题主键
+     * @return 投票主题
+     */
+    public VoteTheme selectVoteThemeByThemeId(Long themeId);
+
+    /**
+     * 查询投票主题列表
+     * 
+     * @param voteTheme 投票主题
+     * @return 投票主题集合
+     */
+    public List<VoteTheme> selectVoteThemeList(VoteTheme voteTheme);
+
+    /**
+     * 新增投票主题
+     * 
+     * @param voteTheme 投票主题
+     * @return 结果
+     */
+    public AjaxResult insertVoteTheme(VoteTheme voteTheme);
+
+    /**
+     * 修改投票主题
+     * 
+     * @param voteTheme 投票主题
+     * @return 结果
+     */
+    public int updateVoteTheme(VoteTheme voteTheme);
+
+    /**
+     * 批量删除投票主题
+     * 
+     * @param themeIds 需要删除的投票主题主键集合
+     * @return 结果
+     */
+    public int deleteVoteThemeByThemeIds(Long[] themeIds);
+
+    /**
+     * 删除投票主题信息
+     * 
+     * @param themeId 投票主题主键
+     * @return 结果
+     */
+    public int deleteVoteThemeByThemeId(Long themeId);
+}

+ 35 - 24
ruoyi-system/src/main/java/com/ruoyi/system/service/impl/MeetingRecordsServiceImpl.java

@@ -1,8 +1,11 @@
 package com.ruoyi.system.service.impl;
 
+import com.ruoyi.common.core.domain.entity.SysUser;
 import com.ruoyi.common.utils.DateUtils;
+import com.ruoyi.common.utils.StringUtils;
 import com.ruoyi.system.domain.MeetingRecords;
 import com.ruoyi.system.mapper.MeetingRecordsMapper;
+import com.ruoyi.system.mapper.SysUserMapper;
 import com.ruoyi.system.service.IMeetingRecordsService;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
@@ -11,87 +14,95 @@ import java.util.List;
 
 /**
  * 会议记录Service业务层处理
- * 
+ *
  * @author boman
- * @date 2024-10-22
+ * @date 2024-11-04
  */
 @Service
-public class MeetingRecordsServiceImpl implements IMeetingRecordsService 
-{
+public class MeetingRecordsServiceImpl implements IMeetingRecordsService {
     @Autowired
     private MeetingRecordsMapper meetingRecordsMapper;
+    @Autowired
+    private SysUserMapper sysUserMapper;
 
     /**
      * 查询会议记录
-     * 
+     *
      * @param recordId 会议记录主键
      * @return 会议记录
      */
     @Override
-    public MeetingRecords selectMeetingRecordsByRecordId(Long recordId)
-    {
+    public MeetingRecords selectMeetingRecordsByRecordId(Long recordId) {
         return meetingRecordsMapper.selectMeetingRecordsByRecordId(recordId);
     }
 
     /**
      * 查询会议记录列表
-     * 
+     *
      * @param meetingRecords 会议记录
      * @return 会议记录
      */
     @Override
-    public List<MeetingRecords> selectMeetingRecordsList(MeetingRecords meetingRecords)
-    {
+    public List<MeetingRecords> selectMeetingRecordsList(MeetingRecords meetingRecords) {
         return meetingRecordsMapper.selectMeetingRecordsList(meetingRecords);
     }
 
     /**
      * 新增会议记录
-     * 
+     *
      * @param meetingRecords 会议记录
      * @return 结果
      */
     @Override
-    public int insertMeetingRecords(MeetingRecords meetingRecords)
-    {
-        meetingRecords.setCreateTime(DateUtils.getNowDate());
-        return meetingRecordsMapper.insertMeetingRecords(meetingRecords);
+    public int insertMeetingRecords(MeetingRecords meetingRecords) {
+        int row = 0;
+        Long userId = meetingRecords.getUserId();
+        SysUser sysUser = sysUserMapper.selectUserById(userId);
+        if (sysUser != null) {
+            String avatar = sysUser.getAvatar();
+            if (StringUtils.isNotBlank(avatar)) {
+                meetingRecords.setAvatar(avatar);
+            }
+            String nickName = sysUser.getNickName();
+            if (StringUtils.isNotBlank(nickName)) {
+                meetingRecords.setNickName(nickName);
+            }
+            row = meetingRecordsMapper.insertMeetingRecords(meetingRecords);
+        }
+        return row;
     }
 
     /**
      * 修改会议记录
-     * 
+     *
      * @param meetingRecords 会议记录
      * @return 结果
      */
     @Override
-    public int updateMeetingRecords(MeetingRecords meetingRecords)
-    {
+    public int updateMeetingRecords(MeetingRecords meetingRecords) {
         meetingRecords.setUpdateTime(DateUtils.getNowDate());
         return meetingRecordsMapper.updateMeetingRecords(meetingRecords);
     }
 
     /**
      * 批量删除会议记录
-     * 
+     *
      * @param recordIds 需要删除的会议记录主键
      * @return 结果
      */
     @Override
-    public int deleteMeetingRecordsByRecordIds(Long[] recordIds)
-    {
+    public int deleteMeetingRecordsByRecordIds(Long[] recordIds) {
         return meetingRecordsMapper.deleteMeetingRecordsByRecordIds(recordIds);
     }
 
     /**
      * 删除会议记录信息
-     * 
+     *
      * @param recordId 会议记录主键
      * @return 结果
      */
     @Override
-    public int deleteMeetingRecordsByRecordId(Long recordId)
-    {
+    public int deleteMeetingRecordsByRecordId(Long recordId) {
         return meetingRecordsMapper.deleteMeetingRecordsByRecordId(recordId);
     }
 }

+ 98 - 0
ruoyi-system/src/main/java/com/ruoyi/system/service/impl/MenuFoodRecordServiceImpl.java

@@ -0,0 +1,98 @@
+package com.ruoyi.system.service.impl;
+
+import com.ruoyi.common.utils.DateUtils;
+import com.ruoyi.system.domain.MenuFoodRecord;
+import com.ruoyi.system.mapper.MenuFoodRecordMapper;
+import com.ruoyi.system.service.IMenuFoodRecordService;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Service;
+
+import java.util.List;
+
+/**
+ * 每日食谱记录Service业务层处理
+ * 
+ * @author boman
+ * @date 2024-11-07
+ */
+@Service
+public class MenuFoodRecordServiceImpl implements IMenuFoodRecordService 
+{
+    @Autowired
+    private MenuFoodRecordMapper menuFoodRecordMapper;
+
+    /**
+     * 查询每日食谱记录
+     * 
+     * @param menuFoodRecordId 每日食谱记录主键
+     * @return 每日食谱记录
+     */
+    @Override
+    public MenuFoodRecord selectMenuFoodRecordByMenuFoodRecordId(Long menuFoodRecordId)
+    {
+        return menuFoodRecordMapper.selectMenuFoodRecordByMenuFoodRecordId(menuFoodRecordId);
+    }
+
+    /**
+     * 查询每日食谱记录列表
+     * 
+     * @param menuFoodRecord 每日食谱记录
+     * @return 每日食谱记录
+     */
+    @Override
+    public List<MenuFoodRecord> selectMenuFoodRecordList(MenuFoodRecord menuFoodRecord)
+    {
+        return menuFoodRecordMapper.selectMenuFoodRecordList(menuFoodRecord);
+    }
+
+    /**
+     * 新增每日食谱记录
+     * 
+     * @param menuFoodRecord 每日食谱记录
+     * @return 结果
+     */
+    @Override
+    public int insertMenuFoodRecord(MenuFoodRecord menuFoodRecord)
+    {
+        menuFoodRecord.setCreateTime(DateUtils.getNowDate());
+        menuFoodRecord.setRecordTime(DateUtils.getNowDate());
+        return menuFoodRecordMapper.insertMenuFoodRecord(menuFoodRecord);
+    }
+
+    /**
+     * 修改每日食谱记录
+     * 
+     * @param menuFoodRecord 每日食谱记录
+     * @return 结果
+     */
+    @Override
+    public int updateMenuFoodRecord(MenuFoodRecord menuFoodRecord)
+    {
+        menuFoodRecord.setUpdateTime(DateUtils.getNowDate());
+        return menuFoodRecordMapper.updateMenuFoodRecord(menuFoodRecord);
+    }
+
+    /**
+     * 批量删除每日食谱记录
+     * 
+     * @param menuFoodRecordIds 需要删除的每日食谱记录主键
+     * @return 结果
+     */
+    @Override
+    public int deleteMenuFoodRecordByMenuFoodRecordIds(Long[] menuFoodRecordIds)
+    {
+        return menuFoodRecordMapper.deleteMenuFoodRecordByMenuFoodRecordIds(menuFoodRecordIds);
+    }
+
+    /**
+     * 删除每日食谱记录信息
+     * 
+     * @param menuFoodRecordId 每日食谱记录主键
+     * @return 结果
+     */
+    @Override
+    public int deleteMenuFoodRecordByMenuFoodRecordId(Long menuFoodRecordId)
+    {
+        return menuFoodRecordMapper.deleteMenuFoodRecordByMenuFoodRecordId(menuFoodRecordId);
+    }
+}

+ 131 - 0
ruoyi-system/src/main/java/com/ruoyi/system/service/impl/MenuFoodServiceImpl.java

@@ -0,0 +1,131 @@
+package com.ruoyi.system.service.impl;
+
+import com.ruoyi.common.utils.DateUtils;
+import com.ruoyi.system.domain.MenuFood;
+import com.ruoyi.system.domain.vo.MenuFoodVo;
+import com.ruoyi.system.mapper.MenuFoodMapper;
+import com.ruoyi.system.service.IMenuFoodService;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Service;
+import org.springframework.transaction.annotation.Transactional;
+
+import java.util.List;
+
+/**
+ * 每日食谱Service业务层处理
+ * 
+ * @author boman
+ * @date 2024-11-07
+ */
+@Service
+public class MenuFoodServiceImpl implements IMenuFoodService 
+{
+    @Autowired
+    private MenuFoodMapper menuFoodMapper;
+
+    /**
+     * 查询每日食谱
+     * 
+     * @param menuFoodId 每日食谱主键
+     * @return 每日食谱
+     */
+    @Override
+    public MenuFood selectMenuFoodByMenuFoodId(Long menuFoodId)
+    {
+        return menuFoodMapper.selectMenuFoodByMenuFoodId(menuFoodId);
+    }
+
+    /**
+     * 查询每日食谱列表
+     * 
+     * @param menuFood 每日食谱
+     * @return 每日食谱
+     */
+    @Override
+    public List<MenuFood> selectMenuFoodList(MenuFood menuFood)
+    {
+        return menuFoodMapper.selectMenuFoodList(menuFood);
+    }
+
+    /**
+     * 新增每日食谱
+     * 
+     * @param menuFood 每日食谱
+     * @return 结果
+     */
+    @Override
+    public int insertMenuFood(MenuFood menuFood)
+    {
+        menuFood.setCreateTime(DateUtils.getNowDate());
+        return menuFoodMapper.insertMenuFood(menuFood);
+    }
+    /**
+     * 新增每日食谱批量
+     *
+     * @param menuFoodVo 每日食谱
+     * @return 结果
+     */
+    @Override
+    @Transactional(rollbackFor = Exception.class)
+    public int batchMenuFoodVo(MenuFoodVo menuFoodVo) {
+        List<MenuFood> menuFoodList = menuFoodVo.getMenuFoodList();
+        int row = 0;
+        if (menuFoodList != null && menuFoodList.size() >0){
+            //如果是启用,查询对应日期是否有已经启用的数据,改为不启用
+            for (MenuFood menuFood : menuFoodList) {
+                String isUse = menuFood.getIsUse();
+                String menuFoodTime = menuFood.getMenuFoodTime();
+                if ("Y".equals(isUse)){
+                    //把对应日期改为不启用
+                    menuFoodMapper.updateMenuFoodTime(menuFoodTime);
+                }
+            }
+            row = menuFoodMapper.batchMenuFoodVo(menuFoodList);
+        }
+        return row;
+    }
+
+    /**
+     * 修改每日食谱
+     * 
+     * @param menuFood 每日食谱
+     * @return 结果
+     */
+    @Override
+    @Transactional(rollbackFor = Exception.class)
+    public int updateMenuFood(MenuFood menuFood)
+    {
+        String isUse = menuFood.getIsUse();
+        String menuFoodTime = menuFood.getMenuFoodTime();
+        if ("Y".equals(isUse)){
+            //把对应日期改为不启用
+            menuFoodMapper.updateMenuFoodTime(menuFoodTime);
+        }
+        menuFood.setUpdateTime(DateUtils.getNowDate());
+        return menuFoodMapper.updateMenuFood(menuFood);
+    }
+
+    /**
+     * 批量删除每日食谱
+     * 
+     * @param menuFoodIds 需要删除的每日食谱主键
+     * @return 结果
+     */
+    @Override
+    public int deleteMenuFoodByMenuFoodIds(Long[] menuFoodIds)
+    {
+        return menuFoodMapper.deleteMenuFoodByMenuFoodIds(menuFoodIds);
+    }
+
+    /**
+     * 删除每日食谱信息
+     * 
+     * @param menuFoodId 每日食谱主键
+     * @return 结果
+     */
+    @Override
+    public int deleteMenuFoodByMenuFoodId(Long menuFoodId)
+    {
+        return menuFoodMapper.deleteMenuFoodByMenuFoodId(menuFoodId);
+    }
+}

+ 131 - 0
ruoyi-system/src/main/java/com/ruoyi/system/service/impl/SignInServiceImpl.java

@@ -0,0 +1,131 @@
+package com.ruoyi.system.service.impl;
+
+import com.ruoyi.common.core.domain.entity.SysUser;
+import com.ruoyi.common.utils.DateUtils;
+import com.ruoyi.common.utils.StringUtils;
+import com.ruoyi.system.domain.ConferenceRoomOrder;
+import com.ruoyi.system.domain.SignIn;
+import com.ruoyi.system.mapper.ConferenceRoomOrderMapper;
+import com.ruoyi.system.mapper.SignInMapper;
+import com.ruoyi.system.mapper.SysUserMapper;
+import com.ruoyi.system.service.ISignInService;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Service;
+
+import java.util.List;
+
+/**
+ * 会议室签到Service业务层处理
+ *
+ * @author boman
+ * @date 2024-11-04
+ */
+@Service
+public class SignInServiceImpl implements ISignInService {
+    @Autowired
+    private SignInMapper signInMapper;
+    @Autowired
+    private SysUserMapper sysUserMapper;
+    @Autowired
+    private ConferenceRoomOrderMapper conferenceRoomOrderMapper;
+
+
+    /**
+     * 查询会议室签到
+     *
+     * @param signInId 会议室签到主键
+     * @return 会议室签到
+     */
+    @Override
+    public SignIn selectSignInBySignInId(Long signInId) {
+        return signInMapper.selectSignInBySignInId(signInId);
+    }
+
+    /**
+     * 查询会议室签到列表
+     *
+     * @param signIn 会议室签到
+     * @return 会议室签到
+     */
+    @Override
+    public List<SignIn> selectSignInList(SignIn signIn) {
+        return signInMapper.selectSignInList(signIn);
+    }
+
+    /**
+     * 新增会议室签到
+     *
+     * @param signIn 会议室签到
+     * @return 结果
+     */
+    @Override
+    public int insertSignIn(SignIn signIn) {
+        int row = 0;
+        Long userId = signIn.getUserId();
+        SysUser sysUser = sysUserMapper.selectUserById(userId);
+        if (sysUser != null) {
+            String avatar = sysUser.getAvatar();
+            if (StringUtils.isNotBlank(avatar)) {
+                signIn.setAvatar(avatar);
+            }
+            String nickName = sysUser.getNickName();
+            if (StringUtils.isNotBlank(nickName)) {
+                signIn.setNickName(nickName);
+            }
+        }
+        signIn.setSignTime(DateUtils.getNowDate());
+        //先去查询用户是否已经签到
+        SignIn sign = new SignIn();
+        Long conferenceRoomOrderId = signIn.getConferenceRoomOrderId();
+        ConferenceRoomOrder conferenceRoomOrder = conferenceRoomOrderMapper.selectConferenceRoomOrderByConferenceRoomOrderId(conferenceRoomOrderId);
+        if (conferenceRoomOrder != null){
+            sign.setConferenceRoomName(conferenceRoomOrder.getConferenceRoomName());
+            sign.setConferenceRoomOrderName(conferenceRoomOrder.getConferenceName());
+            sign.setConferenceRoomOrderId(conferenceRoomOrderId);
+            sign.setUserId(userId);
+            List<SignIn> signIns = signInMapper.selectSignInList(sign);
+            if (signIns != null && signIns.size() > 0) {
+                Long signInId = signIns.get(0).getSignInId();
+                signIn.setSignInId(signInId);
+                row = signInMapper.updateSignIn(signIn);
+            } else {
+                row = signInMapper.insertSignIn(signIn);
+            }
+        }
+        return row;
+    }
+
+    /**
+     * 修改会议室签到
+     *
+     * @param signIn 会议室签到
+     * @return 结果
+     */
+    @Override
+    public int updateSignIn(SignIn signIn) {
+        signIn.setUpdateTime(DateUtils.getNowDate());
+        return signInMapper.updateSignIn(signIn);
+    }
+
+    /**
+     * 批量删除会议室签到
+     *
+     * @param signInIds 需要删除的会议室签到主键
+     * @return 结果
+     */
+    @Override
+    public int deleteSignInBySignInIds(Long[] signInIds) {
+        return signInMapper.deleteSignInBySignInIds(signInIds);
+    }
+
+    /**
+     * 删除会议室签到信息
+     *
+     * @param signInId 会议室签到主键
+     * @return 结果
+     */
+    @Override
+    public int deleteSignInBySignInId(Long signInId) {
+        return signInMapper.deleteSignInBySignInId(signInId);
+    }
+}

+ 50 - 0
ruoyi-system/src/main/java/com/ruoyi/system/service/impl/Task.java

@@ -0,0 +1,50 @@
+package com.ruoyi.system.service.impl;
+
+
+import com.google.gson.Gson;
+import com.ruoyi.common.utils.DateUtils;
+import com.ruoyi.system.domain.MenuFood;
+import com.ruoyi.system.domain.MenuFoodRecord;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.scheduling.annotation.Async;
+import org.springframework.stereotype.Component;
+
+import java.time.LocalDate;
+import java.time.format.DateTimeFormatter;
+import java.util.List;
+import java.util.Locale;
+
+/**
+ * 定时任务
+ */
+@Component
+public class Task {
+    @Autowired
+    private MenuFoodRecordServiceImpl menuFoodRecordService;
+    @Autowired
+    private MenuFoodServiceImpl menuFoodService;
+    private static final Gson GSON = new Gson();
+
+    /***
+     *每日食谱记录定时任务
+     * 每天23点执行
+     * @throws Exception
+     */
+    @Async
+    //@Scheduled(cron = "0 0 23 * * ? ")
+    public void popover() throws Exception {
+        // 获取当前日期
+        LocalDate currentDate = LocalDate.now();
+        // 格式化日期为星期几,使用中文环境
+        String currentDayOfWeek = currentDate.format(DateTimeFormatter.ofPattern("E", Locale.CHINA));
+        MenuFood menuFood = new MenuFood();
+        menuFood.setMenuFoodTime(currentDayOfWeek);
+        menuFood.setIsUse("Y");
+        List<MenuFood> menuFoods = menuFoodService.selectMenuFoodList(menuFood);
+        if (menuFoods != null && menuFoods.size() > 0) {
+            MenuFoodRecord menuFoodRecord = GSON.fromJson(GSON.toJson(menuFoods.get(0)), MenuFoodRecord.class);
+            menuFoodRecord.setRecordTime(DateUtils.getNowDate());
+            menuFoodRecordService.insertMenuFoodRecord(menuFoodRecord);
+        }
+    }
+}

+ 158 - 0
ruoyi-system/src/main/java/com/ruoyi/system/service/impl/VoteResultServiceImpl.java

@@ -0,0 +1,158 @@
+package com.ruoyi.system.service.impl;
+
+import com.ruoyi.common.core.domain.AjaxResult;
+import com.ruoyi.common.utils.DateUtils;
+import com.ruoyi.system.domain.VoteOption;
+import com.ruoyi.system.domain.VoteResult;
+import com.ruoyi.system.domain.VoteTheme;
+import com.ruoyi.system.mapper.VoteResultMapper;
+import com.ruoyi.system.mapper.VoteThemeMapper;
+import com.ruoyi.system.service.IVoteResultService;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Service;
+
+import java.util.ArrayList;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+import java.util.stream.Collectors;
+
+/**
+ * 投票结果Service业务层处理
+ * 
+ * @author boman
+ * @date 2024-11-15
+ */
+@Service
+public class VoteResultServiceImpl implements IVoteResultService 
+{
+    @Autowired
+    private VoteResultMapper voteResultMapper;
+    @Autowired
+    private VoteThemeMapper voteThemeMapper;
+
+    /**
+     * 查询投票结果
+     * 
+     * @param voteResultId 投票结果主键
+     * @return 投票结果
+     */
+    @Override
+    public VoteResult selectVoteResultByVoteResultId(Long voteResultId)
+    {
+        return voteResultMapper.selectVoteResultByVoteResultId(voteResultId);
+    }
+
+    /**
+     * 查询投票结果列表
+     * 
+     * @param voteResult 投票结果
+     * @return 投票结果
+     */
+    @Override
+    public List<VoteResult> selectVoteResultList(VoteResult voteResult)
+    {
+        return voteResultMapper.selectVoteResultList(voteResult);
+    }
+
+    /**
+     * 前端查询投票结果前端
+     * @param voteResult
+     * @return
+     */
+    @Override
+    public AjaxResult statistics(VoteResult voteResult) {
+        List<VoteTheme> voteThemes = voteThemeMapper.selectVoteThemeByConferenceRoomOrderId(voteResult.getConferenceRoomOrderId());
+        if (voteThemes.size() > 0){
+            //根据会议预约id conferenceRoomOrderId 查询所有投票记录
+            List<VoteResult> voteResults = voteResultMapper.selectVoteResultList(voteResult);
+            List<Map<String,Object>> list = new ArrayList<>();
+            for (VoteTheme voteTheme : voteThemes) {
+                Map<String,Object> themeMap = new HashMap<>();
+                List<Map<String,Object>> optionList = new ArrayList<>();
+                //标题id
+                themeMap.put("themeId",voteTheme.getThemeId());
+                //标题
+                themeMap.put("themeContent",voteTheme.getThemeContent());
+                //总人数
+                themeMap.put("total",0);
+                //选项
+                themeMap.put("voteOptionList",optionList);
+                if (voteResults.size() > 0){
+                    Map<Long, List<VoteResult>> voteResultList = voteResults.stream().collect(Collectors.groupingBy(VoteResult::getThemeId));
+                    if (voteResultList.get(voteTheme.getThemeId()) != null && voteResultList.get(voteTheme.getThemeId()).size() >0){
+                        themeMap.put("total",voteResultList.get(voteTheme.getThemeId()).size());
+                    }
+                }
+                List<VoteOption> voteOptionList = voteTheme.getVoteOptionList();
+                for (VoteOption voteOption : voteOptionList) {
+                    Map<String,Object> optionMap = new HashMap<>(3);
+                    optionMap.put("optionId",voteOption.getOptionId());
+                    optionMap.put("optionName",voteOption.getOptionName());
+                    optionMap.put("total",0);
+                    //投票记录根据投票选项进行分组
+                    Map<Long, List<VoteResult>> voteResultsOptionIdValue = voteResults.stream().collect(Collectors.groupingBy(VoteResult::getOptionId));
+                    if (voteResultsOptionIdValue.size() > 0){
+                        if (voteResultsOptionIdValue.get(voteOption.getOptionId()) != null && voteResultsOptionIdValue.get(voteOption.getOptionId()).size() > 0){
+                            optionMap.put("total",voteResultsOptionIdValue.get(voteOption.getOptionId()).size());
+                        }
+                    }
+                    optionList.add(optionMap);
+                }
+                list.add(themeMap);
+            }
+            return AjaxResult.success(list);
+        }
+        return AjaxResult.error();
+    }
+
+    /**
+     * 新增投票结果
+     * 
+     * @param voteResult 投票结果
+     * @return 结果
+     */
+    @Override
+    public int insertVoteResult(VoteResult voteResult)
+    {
+        voteResult.setCreateTime(DateUtils.getNowDate());
+        return voteResultMapper.insertVoteResult(voteResult);
+    }
+
+    /**
+     * 修改投票结果
+     * 
+     * @param voteResult 投票结果
+     * @return 结果
+     */
+    @Override
+    public int updateVoteResult(VoteResult voteResult)
+    {
+        voteResult.setUpdateTime(DateUtils.getNowDate());
+        return voteResultMapper.updateVoteResult(voteResult);
+    }
+
+    /**
+     * 批量删除投票结果
+     * 
+     * @param voteResultIds 需要删除的投票结果主键
+     * @return 结果
+     */
+    @Override
+    public int deleteVoteResultByVoteResultIds(Long[] voteResultIds)
+    {
+        return voteResultMapper.deleteVoteResultByVoteResultIds(voteResultIds);
+    }
+
+    /**
+     * 删除投票结果信息
+     * 
+     * @param voteResultId 投票结果主键
+     * @return 结果
+     */
+    @Override
+    public int deleteVoteResultByVoteResultId(Long voteResultId)
+    {
+        return voteResultMapper.deleteVoteResultByVoteResultId(voteResultId);
+    }
+}

+ 127 - 0
ruoyi-system/src/main/java/com/ruoyi/system/service/impl/VoteThemeServiceImpl.java

@@ -0,0 +1,127 @@
+package com.ruoyi.system.service.impl;
+
+import com.ruoyi.common.core.domain.AjaxResult;
+import com.ruoyi.common.utils.StringUtils;
+import com.ruoyi.system.domain.VoteOption;
+import com.ruoyi.system.domain.VoteTheme;
+import com.ruoyi.system.mapper.VoteThemeMapper;
+import com.ruoyi.system.service.IVoteThemeService;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Service;
+import org.springframework.transaction.annotation.Transactional;
+
+import java.util.ArrayList;
+import java.util.List;
+
+/**
+ * 投票主题Service业务层处理
+ *
+ * @author boman
+ * @date 2024-11-15
+ */
+@Service
+public class VoteThemeServiceImpl implements IVoteThemeService {
+    @Autowired
+    private VoteThemeMapper voteThemeMapper;
+
+    /**
+     * 查询投票主题
+     *
+     * @param themeId 投票主题主键
+     * @return 投票主题
+     */
+    @Override
+    public VoteTheme selectVoteThemeByThemeId(Long themeId) {
+        return voteThemeMapper.selectVoteThemeByThemeId(themeId);
+    }
+
+    /**
+     * 查询投票主题列表
+     *
+     * @param voteTheme 投票主题
+     * @return 投票主题
+     */
+    @Override
+    public List<VoteTheme> selectVoteThemeList(VoteTheme voteTheme) {
+        return voteThemeMapper.selectVoteThemeList(voteTheme);
+    }
+
+    /**
+     * 新增投票主题
+     *
+     * @param voteTheme 投票主题
+     * @return 结果
+     */
+    @Transactional
+    @Override
+    public AjaxResult insertVoteTheme(VoteTheme voteTheme) {
+        int rows = voteThemeMapper.insertVoteTheme(voteTheme);
+        insertVoteOption(voteTheme);
+        if (rows > 0) {
+            VoteTheme voteThemeBack = voteThemeMapper.selectVoteThemeByThemeId(voteTheme.getThemeId());
+            return AjaxResult.success(voteThemeBack);
+        } else {
+            return AjaxResult.error();
+        }
+    }
+
+    /**
+     * 修改投票主题
+     *
+     * @param voteTheme 投票主题
+     * @return 结果
+     */
+    @Transactional
+    @Override
+    public int updateVoteTheme(VoteTheme voteTheme) {
+        voteThemeMapper.deleteVoteOptionByThemeId(voteTheme.getThemeId());
+        insertVoteOption(voteTheme);
+        return voteThemeMapper.updateVoteTheme(voteTheme);
+    }
+
+    /**
+     * 批量删除投票主题
+     *
+     * @param themeIds 需要删除的投票主题主键
+     * @return 结果
+     */
+    @Transactional
+    @Override
+    public int deleteVoteThemeByThemeIds(Long[] themeIds) {
+        voteThemeMapper.deleteVoteOptionByThemeIds(themeIds);
+        return voteThemeMapper.deleteVoteThemeByThemeIds(themeIds);
+    }
+
+    /**
+     * 删除投票主题信息
+     *
+     * @param themeId 投票主题主键
+     * @return 结果
+     */
+    @Transactional
+    @Override
+    public int deleteVoteThemeByThemeId(Long themeId) {
+        voteThemeMapper.deleteVoteOptionByThemeId(themeId);
+        return voteThemeMapper.deleteVoteThemeByThemeId(themeId);
+    }
+
+    /**
+     * 新增投票选项信息
+     *
+     * @param voteTheme 投票主题对象
+     */
+    public void insertVoteOption(VoteTheme voteTheme) {
+        List<VoteOption> voteOptionList = voteTheme.getVoteOptionList();
+        Long themeId = voteTheme.getThemeId();
+        if (StringUtils.isNotNull(voteOptionList)) {
+            List<VoteOption> list = new ArrayList<VoteOption>();
+            for (VoteOption voteOption : voteOptionList) {
+                voteOption.setThemeId(themeId);
+                list.add(voteOption);
+            }
+            if (list.size() > 0) {
+                voteThemeMapper.batchVoteOption(list);
+            }
+        }
+    }
+}

+ 6 - 0
ruoyi-system/src/main/resources/mapper/system/ConferenceRoomOrderMapper.xml

@@ -16,6 +16,7 @@
         <result property="startTime" column="start_time"/>
         <result property="endTime" column="end_time"/>
         <result property="useXk" column="use_xk"/>
+        <result property="xkDetail" column="xk_detail"/>
         <result property="createDept" column="create_dept"/>
         <result property="createBy" column="create_by"/>
         <result property="createTime" column="create_time"/>
@@ -36,6 +37,7 @@
                start_time,
                end_time,
                use_xk,
+               xk_detail,
                create_dept,
                create_by,
                create_time,
@@ -67,6 +69,7 @@
             <if test="startTime != null ">and start_time = #{startTime}</if>
             <if test="endTime != null ">and end_time = #{endTime}</if>
             <if test="useXk != null and useXk != ''">and use_xk = #{useXk}</if>
+            <if test="xkDetail != null and xkDetail != ''">and xk_detail = #{xkDetail}</if>
             <if test="createDept != null ">and create_dept = #{createDept}</if>
         </where>
         order by end_time DESC
@@ -141,6 +144,7 @@
             <if test="startTime != null">start_time,</if>
             <if test="endTime != null">end_time,</if>
             <if test="useXk != null">use_xk,</if>
+            <if test="xkDetail != null">xk_detail,</if>
             <if test="createDept != null">create_dept,</if>
             <if test="createBy != null">create_by,</if>
             <if test="createTime != null">create_time,</if>
@@ -159,6 +163,7 @@
             <if test="startTime != null">#{startTime},</if>
             <if test="endTime != null">#{endTime},</if>
             <if test="useXk != null">#{useXk},</if>
+            <if test="xkDetail != null">#{xkDetail},</if>
             <if test="createDept != null">#{createDept},</if>
             <if test="createBy != null">#{createBy},</if>
             <if test="createTime != null">#{createTime},</if>
@@ -181,6 +186,7 @@
             <if test="startTime != null">start_time = #{startTime},</if>
             <if test="endTime != null">end_time = #{endTime},</if>
             <if test="useXk != null">use_xk = #{useXk},</if>
+            <if test="xkDetail != null">xk_detail = #{xkDetail},</if>
             <if test="createDept != null">create_dept = #{createDept},</if>
             <if test="createBy != null">create_by = #{createBy},</if>
             <if test="createTime != null">create_time = #{createTime},</if>

+ 33 - 7
ruoyi-system/src/main/resources/mapper/system/MeetingRecordsMapper.xml

@@ -8,6 +8,10 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
         <result property="recordId"    column="record_id"    />
         <result property="conferenceRoomOrderId"    column="conference_room_order_id"    />
         <result property="recordContent"    column="record_content"    />
+        <result property="audioUrl"    column="audio_url"    />
+        <result property="userId"    column="user_id"    />
+        <result property="avatar"    column="avatar"    />
+        <result property="nickName"    column="nick_name"    />
         <result property="createTime"    column="create_time"    />
         <result property="updateBy"    column="update_by"    />
         <result property="updateTime"    column="update_time"    />
@@ -15,7 +19,7 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
     </resultMap>
 
     <sql id="selectMeetingRecordsVo">
-        select record_id, conference_room_order_id, record_content, create_time, update_by, update_time, remark from meeting_records
+        select record_id, conference_room_order_id,audio_url, record_content, user_id, avatar, nick_name, create_time, update_by, update_time, remark from meeting_records
     </sql>
 
     <select id="selectMeetingRecordsList" parameterType="MeetingRecords" resultMap="MeetingRecordsResult">
@@ -23,31 +27,49 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
         <where>  
             <if test="conferenceRoomOrderId != null "> and conference_room_order_id = #{conferenceRoomOrderId}</if>
             <if test="recordContent != null  and recordContent != ''"> and record_content = #{recordContent}</if>
+            <if test="userId != null "> and user_id = #{userId}</if>
+            <if test="avatar != null  and avatar != ''"> and avatar = #{avatar}</if>
+            <if test="nickName != null  and nickName != ''"> and nick_name like concat('%', #{nickName}, '%')</if>
         </where>
+        order by create_time
     </select>
     
+    <select id="selectMeetingRecordsByConferenceRoomOrderId" parameterType="Long" resultMap="MeetingRecordsResult">
+        <include refid="selectMeetingRecordsVo"/>
+        where conference_room_order_id = #{conferenceRoomOrderId} limit 1
+    </select>
     <select id="selectMeetingRecordsByRecordId" parameterType="Long" resultMap="MeetingRecordsResult">
         <include refid="selectMeetingRecordsVo"/>
         where record_id = #{recordId}
     </select>
-        
+
     <insert id="insertMeetingRecords" parameterType="MeetingRecords" useGeneratedKeys="true" keyProperty="recordId">
         insert into meeting_records
         <trim prefix="(" suffix=")" suffixOverrides=",">
-            <if test="conferenceRoomOrderId != null">conference_room_order_id,</if>
+            <if test="recordId != null and recordId != ''">record_id,</if>
+            <if test="conferenceRoomOrderId != null ">conference_room_order_id,</if>
             <if test="recordContent != null">record_content,</if>
-            <if test="createTime != null">create_time,</if>
+            <if test="audioUrl != null and audioUrl != ''">audio_url,</if>
+            <if test="userId != null">user_id,</if>
+            <if test="avatar != null">avatar,</if>
+            <if test="nickName != null and nickName != ''">nick_name,</if>
             <if test="updateBy != null">update_by,</if>
             <if test="updateTime != null">update_time,</if>
             <if test="remark != null">remark,</if>
+            create_time
          </trim>
         <trim prefix="values (" suffix=")" suffixOverrides=",">
+            <if test="recordId != null and recordId != ''">#{recordId},</if>
             <if test="conferenceRoomOrderId != null">#{conferenceRoomOrderId},</if>
             <if test="recordContent != null">#{recordContent},</if>
-            <if test="createTime != null">#{createTime},</if>
+            <if test="audioUrl != null and audioUrl != ''">#{audioUrl},</if>
+            <if test="userId != null">#{userId},</if>
+            <if test="avatar != null">#{avatar},</if>
+            <if test="nickName != null and nickName != ''">#{nickName},</if>
             <if test="updateBy != null">#{updateBy},</if>
             <if test="updateTime != null">#{updateTime},</if>
             <if test="remark != null">#{remark},</if>
+            sysdate()
          </trim>
     </insert>
 
@@ -56,15 +78,19 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
         <trim prefix="SET" suffixOverrides=",">
             <if test="conferenceRoomOrderId != null">conference_room_order_id = #{conferenceRoomOrderId},</if>
             <if test="recordContent != null">record_content = #{recordContent},</if>
-            <if test="createTime != null">create_time = #{createTime},</if>
+            <if test="audioUrl != null and audioUrl != ''">audio_url =#{audioUrl},</if>
+            <if test="userId != null">user_id = #{userId},</if>
+            <if test="avatar != null">avatar = #{avatar},</if>
+            <if test="nickName != null and nickName != ''">nick_name = #{nickName},</if>
             <if test="updateBy != null">update_by = #{updateBy},</if>
             <if test="updateTime != null">update_time = #{updateTime},</if>
             <if test="remark != null">remark = #{remark},</if>
+            create_time = sysdate(),
         </trim>
         where record_id = #{recordId}
     </update>
 
-    <delete id="deleteMeetingRecordsByRecordId" parameterType="Long">
+    <delete id="deleteMeetingRecordsByRecordId" parameterType="String">
         delete from meeting_records where record_id = #{recordId}
     </delete>
 

+ 151 - 0
ruoyi-system/src/main/resources/mapper/system/MenuFoodMapper.xml

@@ -0,0 +1,151 @@
+<?xml version="1.0" encoding="UTF-8" ?>
+<!DOCTYPE mapper
+        PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
+        "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
+<mapper namespace="com.ruoyi.system.mapper.MenuFoodMapper">
+
+    <resultMap type="MenuFood" id="MenuFoodResult">
+        <result property="menuFoodId" column="menu_food_id"/>
+        <result property="menuFoodTime" column="menu_food_time"/>
+        <result property="menuFoodType" column="menu_food_type"/>
+        <result property="menuFoodDetailBk" column="menu_food_detail_bk"/>
+        <result property="menuFoodDetailLu" column="menu_food_detail_lu"/>
+        <result property="menuFoodDetailDi" column="menu_food_detail_di"/>
+        <result property="canteenName" column="canteen_name"/>
+        <result property="canteenId" column="canteen_id"/>
+        <result property="isUse" column="is_use"/>
+        <result property="createDept" column="create_dept"/>
+        <result property="createBy" column="create_by"/>
+        <result property="createTime" column="create_time"/>
+        <result property="updateBy" column="update_by"/>
+        <result property="updateTime" column="update_time"/>
+        <result property="remark" column="remark"/>
+    </resultMap>
+
+    <sql id="selectMenuFoodVo">
+        select menu_food_id,
+               menu_food_time,
+               menu_food_type,
+               menu_food_detail_bk,
+               menu_food_detail_lu,
+               menu_food_detail_di,
+               canteen_name,
+               canteen_id,
+               is_use,
+               create_dept,
+               create_by,
+               create_time,
+               update_by,
+               update_time,
+               remark
+        from menu_food
+    </sql>
+
+    <select id="selectMenuFoodList" parameterType="MenuFood" resultMap="MenuFoodResult">
+        <include refid="selectMenuFoodVo"/>
+        <where>
+            <if test="menuFoodTime != null  and menuFoodTime != ''">and menu_food_time = #{menuFoodTime}</if>
+            <if test="menuFoodType != null  and menuFoodType != ''">and menu_food_type = #{menuFoodType}</if>
+            <if test="menuFoodDetailBk != null  and menuFoodDetailBk != ''">and menu_food_detail_bk =
+                #{menuFoodDetailBk}
+            </if>
+            <if test="menuFoodDetailLu != null  and menuFoodDetailLu != ''">and menu_food_detail_lu =
+                #{menuFoodDetailLu}
+            </if>
+            <if test="menuFoodDetailDi != null  and menuFoodDetailDi != ''">and menu_food_detail_di =
+                #{menuFoodDetailDi}
+            </if>
+            <if test="canteenName != null  and canteenName != ''">and canteen_name like concat('%', #{canteenName},
+                '%')
+            </if>
+            <if test="canteenId != null ">and canteen_id = #{canteenId}</if>
+            <if test="isUse != null  and isUse != ''">and is_use = #{isUse}</if>
+        </where>
+        order by menu_food_time,is_use DESC
+    </select>
+
+    <select id="selectMenuFoodByMenuFoodId" parameterType="Long" resultMap="MenuFoodResult">
+        <include refid="selectMenuFoodVo"/>
+        where menu_food_id = #{menuFoodId}
+    </select>
+
+    <insert id="insertMenuFood" parameterType="MenuFood" useGeneratedKeys="true" keyProperty="menuFoodId">
+        insert into menu_food
+        <trim prefix="(" suffix=")" suffixOverrides=",">
+            <if test="menuFoodTime != null">menu_food_time,</if>
+            <if test="menuFoodType != null">menu_food_type,</if>
+            <if test="menuFoodDetailBk != null">menu_food_detail_bk,</if>
+            <if test="menuFoodDetailLu != null">menu_food_detail_lu,</if>
+            <if test="menuFoodDetailDi != null">menu_food_detail_di,</if>
+            <if test="canteenName != null">canteen_name,</if>
+            <if test="canteenId != null">canteen_id,</if>
+            <if test="isUse != null">is_use,</if>
+            <if test="createDept != null">create_dept,</if>
+            <if test="createBy != null">create_by,</if>
+            <if test="createTime != null">create_time,</if>
+            <if test="updateBy != null">update_by,</if>
+            <if test="updateTime != null">update_time,</if>
+            <if test="remark != null">remark,</if>
+        </trim>
+        <trim prefix="values (" suffix=")" suffixOverrides=",">
+            <if test="menuFoodTime != null">#{menuFoodTime},</if>
+            <if test="menuFoodType != null">#{menuFoodType},</if>
+            <if test="menuFoodDetailBk != null">#{menuFoodDetailBk},</if>
+            <if test="menuFoodDetailLu != null">#{menuFoodDetailLu},</if>
+            <if test="menuFoodDetailDi != null">#{menuFoodDetailDi},</if>
+            <if test="canteenName != null">#{canteenName},</if>
+            <if test="canteenId != null">#{canteenId},</if>
+            <if test="isUse != null">#{isUse},</if>
+            <if test="createDept != null">#{createDept},</if>
+            <if test="createBy != null">#{createBy},</if>
+            <if test="createTime != null">#{createTime},</if>
+            <if test="updateBy != null">#{updateBy},</if>
+            <if test="updateTime != null">#{updateTime},</if>
+            <if test="remark != null">#{remark},</if>
+        </trim>
+    </insert>
+
+    <insert id="batchMenuFoodVo">
+        insert into menu_food(menu_food_time, menu_food_detail_bk, menu_food_detail_lu, menu_food_detail_di, is_use,
+        create_time, remark) values
+        <foreach item="item" index="index" collection="list" separator=",">
+            (#{item.menuFoodTime},#{item.menuFoodDetailBk},#{item.menuFoodDetailLu},#{item.menuFoodDetailDi},#{item.isUse},sysdate(),#{item.remark})
+        </foreach>
+    </insert>
+    <update id="updateMenuFood" parameterType="MenuFood">
+        update menu_food
+        <trim prefix="SET" suffixOverrides=",">
+            <if test="menuFoodTime != null">menu_food_time = #{menuFoodTime},</if>
+            <if test="menuFoodType != null">menu_food_type = #{menuFoodType},</if>
+            <if test="menuFoodDetailBk != null">menu_food_detail_bk = #{menuFoodDetailBk},</if>
+            <if test="menuFoodDetailLu != null">menu_food_detail_lu = #{menuFoodDetailLu},</if>
+            <if test="menuFoodDetailDi != null">menu_food_detail_di = #{menuFoodDetailDi},</if>
+            <if test="canteenName != null">canteen_name = #{canteenName},</if>
+            <if test="canteenId != null">canteen_id = #{canteenId},</if>
+            <if test="isUse != null">is_use = #{isUse},</if>
+            <if test="createDept != null">create_dept = #{createDept},</if>
+            <if test="createBy != null">create_by = #{createBy},</if>
+            <if test="createTime != null">create_time = #{createTime},</if>
+            <if test="updateBy != null">update_by = #{updateBy},</if>
+            <if test="updateTime != null">update_time = #{updateTime},</if>
+            <if test="remark != null">remark = #{remark},</if>
+        </trim>
+        where menu_food_id = #{menuFoodId}
+    </update>
+    <update id="updateMenuFoodTime" parameterType="string">
+        update menu_food set is_use = 'N' where menu_food_time = #{menuFoodTime}
+    </update>
+
+    <delete id="deleteMenuFoodByMenuFoodId" parameterType="Long">
+        delete
+        from menu_food
+        where menu_food_id = #{menuFoodId}
+    </delete>
+
+    <delete id="deleteMenuFoodByMenuFoodIds" parameterType="String">
+        delete from menu_food where menu_food_id in
+        <foreach item="menuFoodId" collection="array" open="(" separator="," close=")">
+            #{menuFoodId}
+        </foreach>
+    </delete>
+</mapper>

+ 116 - 0
ruoyi-system/src/main/resources/mapper/system/MenuFoodRecordMapper.xml

@@ -0,0 +1,116 @@
+<?xml version="1.0" encoding="UTF-8" ?>
+<!DOCTYPE mapper
+PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
+"http://mybatis.org/dtd/mybatis-3-mapper.dtd">
+<mapper namespace="com.ruoyi.system.mapper.MenuFoodRecordMapper">
+    
+    <resultMap type="MenuFoodRecord" id="MenuFoodRecordResult">
+        <result property="menuFoodRecordId"    column="menu_food_record_id"    />
+        <result property="menuFoodTime"    column="menu_food_time"    />
+        <result property="menuFoodType"    column="menu_food_type"    />
+        <result property="menuFoodDetailBk"    column="menu_food_detail_bk"    />
+        <result property="menuFoodDetailLu"    column="menu_food_detail_lu"    />
+        <result property="menuFoodDetailDi"    column="menu_food_detail_di"    />
+        <result property="canteenName"    column="canteen_name"    />
+        <result property="canteenId"    column="canteen_id"    />
+        <result property="recordTime"    column="record_time"    />
+        <result property="createDept"    column="create_dept"    />
+        <result property="createBy"    column="create_by"    />
+        <result property="createTime"    column="create_time"    />
+        <result property="updateBy"    column="update_by"    />
+        <result property="updateTime"    column="update_time"    />
+        <result property="remark"    column="remark"    />
+    </resultMap>
+
+    <sql id="selectMenuFoodRecordVo">
+        select menu_food_record_id, menu_food_time, menu_food_type, menu_food_detail_bk, menu_food_detail_lu, menu_food_detail_di, canteen_name, canteen_id, record_time, create_dept, create_by, create_time, update_by, update_time, remark from menu_food_record
+    </sql>
+
+    <select id="selectMenuFoodRecordList" parameterType="MenuFoodRecord" resultMap="MenuFoodRecordResult">
+        <include refid="selectMenuFoodRecordVo"/>
+        <where>  
+            <if test="menuFoodTime != null  and menuFoodTime != ''"> and menu_food_time = #{menuFoodTime}</if>
+            <if test="menuFoodType != null  and menuFoodType != ''"> and menu_food_type = #{menuFoodType}</if>
+            <if test="menuFoodDetailBk != null  and menuFoodDetailBk != ''"> and menu_food_detail_bk = #{menuFoodDetailBk}</if>
+            <if test="menuFoodDetailLu != null  and menuFoodDetailLu != ''"> and menu_food_detail_lu = #{menuFoodDetailLu}</if>
+            <if test="menuFoodDetailDi != null  and menuFoodDetailDi != ''"> and menu_food_detail_di = #{menuFoodDetailDi}</if>
+            <if test="canteenName != null  and canteenName != ''"> and canteen_name like concat('%', #{canteenName}, '%')</if>
+            <if test="canteenId != null "> and canteen_id = #{canteenId}</if>
+            <if test="recordTime != null "> and record_time = #{recordTime}</if>
+        </where>
+        order by record_time DESC
+    </select>
+    
+    <select id="selectMenuFoodRecordByMenuFoodRecordId" parameterType="Long" resultMap="MenuFoodRecordResult">
+        <include refid="selectMenuFoodRecordVo"/>
+        where menu_food_record_id = #{menuFoodRecordId}
+    </select>
+        
+    <insert id="insertMenuFoodRecord" parameterType="MenuFoodRecord" useGeneratedKeys="true" keyProperty="menuFoodRecordId">
+        insert into menu_food_record
+        <trim prefix="(" suffix=")" suffixOverrides=",">
+            <if test="menuFoodTime != null">menu_food_time,</if>
+            <if test="menuFoodType != null">menu_food_type,</if>
+            <if test="menuFoodDetailBk != null">menu_food_detail_bk,</if>
+            <if test="menuFoodDetailLu != null">menu_food_detail_lu,</if>
+            <if test="menuFoodDetailDi != null">menu_food_detail_di,</if>
+            <if test="canteenName != null">canteen_name,</if>
+            <if test="canteenId != null">canteen_id,</if>
+            <if test="recordTime != null">record_time,</if>
+            <if test="createDept != null">create_dept,</if>
+            <if test="createBy != null">create_by,</if>
+            <if test="createTime != null">create_time,</if>
+            <if test="updateBy != null">update_by,</if>
+            <if test="updateTime != null">update_time,</if>
+            <if test="remark != null">remark,</if>
+         </trim>
+        <trim prefix="values (" suffix=")" suffixOverrides=",">
+            <if test="menuFoodTime != null">#{menuFoodTime},</if>
+            <if test="menuFoodType != null">#{menuFoodType},</if>
+            <if test="menuFoodDetailBk != null">#{menuFoodDetailBk},</if>
+            <if test="menuFoodDetailLu != null">#{menuFoodDetailLu},</if>
+            <if test="menuFoodDetailDi != null">#{menuFoodDetailDi},</if>
+            <if test="canteenName != null">#{canteenName},</if>
+            <if test="canteenId != null">#{canteenId},</if>
+            <if test="recordTime != null">#{recordTime},</if>
+            <if test="createDept != null">#{createDept},</if>
+            <if test="createBy != null">#{createBy},</if>
+            <if test="createTime != null">#{createTime},</if>
+            <if test="updateBy != null">#{updateBy},</if>
+            <if test="updateTime != null">#{updateTime},</if>
+            <if test="remark != null">#{remark},</if>
+         </trim>
+    </insert>
+
+    <update id="updateMenuFoodRecord" parameterType="MenuFoodRecord">
+        update menu_food_record
+        <trim prefix="SET" suffixOverrides=",">
+            <if test="menuFoodTime != null">menu_food_time = #{menuFoodTime},</if>
+            <if test="menuFoodType != null">menu_food_type = #{menuFoodType},</if>
+            <if test="menuFoodDetailBk != null">menu_food_detail_bk = #{menuFoodDetailBk},</if>
+            <if test="menuFoodDetailLu != null">menu_food_detail_lu = #{menuFoodDetailLu},</if>
+            <if test="menuFoodDetailDi != null">menu_food_detail_di = #{menuFoodDetailDi},</if>
+            <if test="canteenName != null">canteen_name = #{canteenName},</if>
+            <if test="canteenId != null">canteen_id = #{canteenId},</if>
+            <if test="recordTime != null">record_time = #{recordTime},</if>
+            <if test="createDept != null">create_dept = #{createDept},</if>
+            <if test="createBy != null">create_by = #{createBy},</if>
+            <if test="createTime != null">create_time = #{createTime},</if>
+            <if test="updateBy != null">update_by = #{updateBy},</if>
+            <if test="updateTime != null">update_time = #{updateTime},</if>
+            <if test="remark != null">remark = #{remark},</if>
+        </trim>
+        where menu_food_record_id = #{menuFoodRecordId}
+    </update>
+
+    <delete id="deleteMenuFoodRecordByMenuFoodRecordId" parameterType="Long">
+        delete from menu_food_record where menu_food_record_id = #{menuFoodRecordId}
+    </delete>
+
+    <delete id="deleteMenuFoodRecordByMenuFoodRecordIds" parameterType="String">
+        delete from menu_food_record where menu_food_record_id in 
+        <foreach item="menuFoodRecordId" collection="array" open="(" separator="," close=")">
+            #{menuFoodRecordId}
+        </foreach>
+    </delete>
+</mapper>

+ 116 - 0
ruoyi-system/src/main/resources/mapper/system/SignInMapper.xml

@@ -0,0 +1,116 @@
+<?xml version="1.0" encoding="UTF-8" ?>
+<!DOCTYPE mapper
+PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
+"http://mybatis.org/dtd/mybatis-3-mapper.dtd">
+<mapper namespace="com.ruoyi.system.mapper.SignInMapper">
+    
+    <resultMap type="SignIn" id="SignInResult">
+        <result property="signInId"    column="sign_in_id"    />
+        <result property="conferenceRoomOrderId"    column="conference_room_order_id"    />
+        <result property="conferenceRoomOrderName"    column="conference_room_order_name"    />
+        <result property="conferenceRoomId"    column="conference_room_id"    />
+        <result property="conferenceRoomName"    column="conference_room_name"    />
+        <result property="userId"    column="user_id"    />
+        <result property="avatar"    column="avatar"    />
+        <result property="nickName"    column="nick_name"    />
+        <result property="signTime"    column="sign_time"    />
+        <result property="createDept"    column="create_dept"    />
+        <result property="createBy"    column="create_by"    />
+        <result property="createTime"    column="create_time"    />
+        <result property="updateBy"    column="update_by"    />
+        <result property="updateTime"    column="update_time"    />
+        <result property="remark"    column="remark"    />
+    </resultMap>
+
+    <sql id="selectSignInVo">
+        select sign_in_id, conference_room_order_id,conference_room_order_name, conference_room_id,conference_room_name, user_id, avatar, nick_name, sign_time, create_dept, create_by, create_time, update_by, update_time, remark from sign_in
+    </sql>
+
+    <select id="selectSignInList" parameterType="SignIn" resultMap="SignInResult">
+        <include refid="selectSignInVo"/>
+        <where>  
+            <if test="conferenceRoomOrderId != null "> and conference_room_order_id = #{conferenceRoomOrderId}</if>
+            <if test="conferenceRoomOrderName != null and conferenceRoomOrderName != ''"> and conference_room_order_name = #{conferenceRoomOrderName}</if>
+            <if test="conferenceRoomId != null "> and conference_room_id = #{conferenceRoomId}</if>
+            <if test="conferenceRoomName != null and conferenceRoomName != '' "> and conferenceRoomName = #{conference_room_name}</if>
+            <if test="userId != null "> and user_id = #{userId}</if>
+            <if test="avatar != null  and avatar != ''"> and avatar = #{avatar}</if>
+            <if test="nickName != null  and nickName != ''"> and nick_name like concat('%', #{nickName}, '%')</if>
+            <if test="signTime != null "> and sign_time = #{signTime}</if>
+            <if test="createDept != null "> and create_dept = #{createDept}</if>
+        </where>
+    </select>
+    
+    <select id="selectSignInBySignInId" parameterType="Long" resultMap="SignInResult">
+        <include refid="selectSignInVo"/>
+        where sign_in_id = #{signInId}
+    </select>
+        
+    <insert id="insertSignIn" parameterType="SignIn" useGeneratedKeys="true" keyProperty="signInId">
+        insert into sign_in
+        <trim prefix="(" suffix=")" suffixOverrides=",">
+            <if test="conferenceRoomOrderId != null">conference_room_order_id,</if>
+            <if test="conferenceRoomOrderName != null and conferenceRoomOrderName != ''">conference_room_order_name,</if>
+            <if test="conferenceRoomId != null">conference_room_id,</if>
+            <if test="conferenceRoomName != null and conferenceRoomName != ''">conference_room_name,</if>
+            <if test="userId != null">user_id,</if>
+            <if test="avatar != null">avatar,</if>
+            <if test="nickName != null">nick_name,</if>
+            <if test="signTime != null">sign_time,</if>
+            <if test="createDept != null">create_dept,</if>
+            <if test="createBy != null">create_by,</if>
+            <if test="updateBy != null">update_by,</if>
+            <if test="updateTime != null">update_time,</if>
+            <if test="remark != null">remark,</if>
+            create_time
+         </trim>
+        <trim prefix="values (" suffix=")" suffixOverrides=",">
+            <if test="conferenceRoomOrderId != null">#{conferenceRoomOrderId},</if>
+            <if test="conferenceRoomOrderName != null and conferenceRoomOrderName != ''">#{conferenceRoomOrderName},</if>
+            <if test="conferenceRoomId != null">#{conferenceRoomId},</if>
+            <if test="conferenceRoomName != null and conferenceRoomName != ''">#{conferenceRoomName},</if>
+            <if test="userId != null">#{userId},</if>
+            <if test="avatar != null">#{avatar},</if>
+            <if test="nickName != null">#{nickName},</if>
+            <if test="signTime != null">#{signTime},</if>
+            <if test="createDept != null">#{createDept},</if>
+            <if test="createBy != null">#{createBy},</if>
+            <if test="updateBy != null">#{updateBy},</if>
+            <if test="updateTime != null">#{updateTime},</if>
+            <if test="remark != null">#{remark},</if>
+            sysdate()
+         </trim>
+    </insert>
+
+    <update id="updateSignIn" parameterType="SignIn">
+        update sign_in
+        <trim prefix="SET" suffixOverrides=",">
+            <if test="conferenceRoomOrderId != null">conference_room_order_id = #{conferenceRoomOrderId},</if>
+            <if test="conferenceRoomOrderName != null and conferenceRoomOrderName != ''">conference_room_order_name = #{conferenceRoomOrderName},</if>
+            <if test="conferenceRoomId != null">conference_room_id = #{conferenceRoomId},</if>
+            <if test="conferenceRoomName != null and conferenceRoomName != ''">conference_room_name = #{conferenceRoomName},</if>
+            <if test="userId != null">user_id = #{userId},</if>
+            <if test="avatar != null">avatar = #{avatar},</if>
+            <if test="nickName != null">nick_name = #{nickName},</if>
+            <if test="signTime != null">sign_time = #{signTime},</if>
+            <if test="createDept != null">create_dept = #{createDept},</if>
+            <if test="createBy != null">create_by = #{createBy},</if>
+            <if test="createTime != null">create_time = #{createTime},</if>
+            <if test="updateBy != null">update_by = #{updateBy},</if>
+            <if test="updateTime != null">update_time = #{updateTime},</if>
+            <if test="remark != null">remark = #{remark},</if>
+        </trim>
+        where sign_in_id = #{signInId}
+    </update>
+
+    <delete id="deleteSignInBySignInId" parameterType="Long">
+        delete from sign_in where sign_in_id = #{signInId}
+    </delete>
+
+    <delete id="deleteSignInBySignInIds" parameterType="String">
+        delete from sign_in where sign_in_id in 
+        <foreach item="signInId" collection="array" open="(" separator="," close=")">
+            #{signInId}
+        </foreach>
+    </delete>
+</mapper>

+ 1 - 1
ruoyi-system/src/main/resources/mapper/system/SysUserMapper.xml

@@ -150,7 +150,7 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
 		select user_id, email from sys_user where email = #{email} and del_flag = '0' limit 1
 	</select>
     <select id="getUserInfoList" parameterType="Long" resultMap="SysUserVoResult">
-		select user_id, user_name,phonenumber,avatar from sys_user where user_id in
+		select user_id, user_name,nick_name,phonenumber,avatar from sys_user where user_id in
 		<foreach collection="array" item="userId" open="(" separator="," close=")">
 			#{userId}
 		</foreach>

+ 107 - 0
ruoyi-system/src/main/resources/mapper/system/VoteResultMapper.xml

@@ -0,0 +1,107 @@
+<?xml version="1.0" encoding="UTF-8" ?>
+<!DOCTYPE mapper
+PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
+"http://mybatis.org/dtd/mybatis-3-mapper.dtd">
+<mapper namespace="com.ruoyi.system.mapper.VoteResultMapper">
+    
+    <resultMap type="VoteResult" id="VoteResultResult">
+        <result property="voteResultId"    column="vote_result_id"    />
+        <result property="themeId"    column="theme_id"    />
+        <result property="themeContent"    column="theme_content"    />
+        <result property="optionId"    column="option_id"    />
+        <result property="optionName"    column="option_name"    />
+        <result property="conferenceRoomOrderId"    column="conference_room_order_id"    />
+        <result property="userId"    column="user_id"    />
+        <result property="avatar"    column="avatar"    />
+        <result property="nickName"    column="nick_name"    />
+        <result property="createTime"    column="create_time"    />
+        <result property="updateBy"    column="update_by"    />
+        <result property="updateTime"    column="update_time"    />
+        <result property="remark"    column="remark"    />
+    </resultMap>
+
+    <sql id="selectVoteResultVo">
+        select vote_result_id, theme_id, theme_content, option_id, option_name,conference_room_order_id, user_id, avatar, nick_name, create_time, update_by, update_time, remark from vote_result
+    </sql>
+
+    <select id="selectVoteResultList" parameterType="VoteResult" resultMap="VoteResultResult">
+        <include refid="selectVoteResultVo"/>
+        <where>  
+            <if test="themeId != null "> and theme_id = #{themeId}</if>
+            <if test="themeContent != null  and themeContent != ''"> and theme_content = #{themeContent}</if>
+            <if test="optionId != null "> and option_id = #{optionId}</if>
+            <if test="optionName != null  and optionName != ''"> and option_name like concat('%', #{optionName}, '%')</if>
+            <if test="conferenceRoomOrderId != null "> and conference_room_order_id = #{conferenceRoomOrderId}</if>
+            <if test="userId != null "> and user_id = #{userId}</if>
+            <if test="avatar != null  and avatar != ''"> and avatar = #{avatar}</if>
+            <if test="nickName != null  and nickName != ''"> and nick_name like concat('%', #{nickName}, '%')</if>
+        </where>
+    </select>
+    
+    <select id="selectVoteResultByVoteResultId" parameterType="Long" resultMap="VoteResultResult">
+        <include refid="selectVoteResultVo"/>
+        where vote_result_id = #{voteResultId}
+    </select>
+        
+    <insert id="insertVoteResult" parameterType="VoteResult" useGeneratedKeys="true" keyProperty="voteResultId">
+        insert into vote_result
+        <trim prefix="(" suffix=")" suffixOverrides=",">
+            <if test="themeId != null">theme_id,</if>
+            <if test="themeContent != null and themeContent != ''">theme_content,</if>
+            <if test="optionId != null">option_id,</if>
+            <if test="optionName != null and optionName != ''">option_name,</if>
+            <if test="conferenceRoomOrderId != null">conference_room_order_id,</if>
+            <if test="userId != null">user_id,</if>
+            <if test="avatar != null">avatar,</if>
+            <if test="nickName != null and nickName != ''">nick_name,</if>
+            <if test="createTime != null">create_time,</if>
+            <if test="updateBy != null">update_by,</if>
+            <if test="updateTime != null">update_time,</if>
+            <if test="remark != null">remark,</if>
+         </trim>
+        <trim prefix="values (" suffix=")" suffixOverrides=",">
+            <if test="themeId != null">#{themeId},</if>
+            <if test="themeContent != null and themeContent != ''">#{themeContent},</if>
+            <if test="optionId != null">#{optionId},</if>
+            <if test="optionName != null and optionName != ''">#{optionName},</if>
+            <if test="conferenceRoomOrderId != null">#{conferenceRoomOrderId},</if>
+            <if test="userId != null">#{userId},</if>
+            <if test="avatar != null">#{avatar},</if>
+            <if test="nickName != null and nickName != ''">#{nickName},</if>
+            <if test="createTime != null">#{createTime},</if>
+            <if test="updateBy != null">#{updateBy},</if>
+            <if test="updateTime != null">#{updateTime},</if>
+            <if test="remark != null">#{remark},</if>
+         </trim>
+    </insert>
+
+    <update id="updateVoteResult" parameterType="VoteResult">
+        update vote_result
+        <trim prefix="SET" suffixOverrides=",">
+            <if test="themeId != null">theme_id = #{themeId},</if>
+            <if test="themeContent != null and themeContent != ''">theme_content = #{themeContent},</if>
+            <if test="optionId != null">option_id = #{optionId},</if>
+            <if test="optionName != null and optionName != ''">option_name = #{optionName},</if>
+            <if test="conferenceRoomOrderId != null">conference_room_order_id = #{conferenceRoomOrderId},</if>
+            <if test="userId != null">user_id = #{userId},</if>
+            <if test="avatar != null">avatar = #{avatar},</if>
+            <if test="nickName != null and nickName != ''">nick_name = #{nickName},</if>
+            <if test="createTime != null">create_time = #{createTime},</if>
+            <if test="updateBy != null">update_by = #{updateBy},</if>
+            <if test="updateTime != null">update_time = #{updateTime},</if>
+            <if test="remark != null">remark = #{remark},</if>
+        </trim>
+        where vote_result_id = #{voteResultId}
+    </update>
+
+    <delete id="deleteVoteResultByVoteResultId" parameterType="Long">
+        delete from vote_result where vote_result_id = #{voteResultId}
+    </delete>
+
+    <delete id="deleteVoteResultByVoteResultIds" parameterType="String">
+        delete from vote_result where vote_result_id in 
+        <foreach item="voteResultId" collection="array" open="(" separator="," close=")">
+            #{voteResultId}
+        </foreach>
+    </delete>
+</mapper>

+ 112 - 0
ruoyi-system/src/main/resources/mapper/system/VoteThemeMapper.xml

@@ -0,0 +1,112 @@
+<?xml version="1.0" encoding="UTF-8" ?>
+<!DOCTYPE mapper
+        PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
+        "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
+<mapper namespace="com.ruoyi.system.mapper.VoteThemeMapper">
+
+    <resultMap type="VoteTheme" id="VoteThemeResult">
+        <result property="themeId" column="theme_id"/>
+        <result property="themeContent" column="theme_content"/>
+        <result property="conferenceRoomOrderId" column="conference_room_order_id"/>
+    </resultMap>
+
+    <resultMap id="VoteThemeVoteOptionResult" type="VoteTheme" extends="VoteThemeResult">
+        <collection property="voteOptionList" notNullColumn="sub_option_id" javaType="java.util.List"
+                    resultMap="VoteOptionResult"/>
+    </resultMap>
+
+    <resultMap type="VoteOption" id="VoteOptionResult">
+        <result property="optionId" column="sub_option_id"/>
+        <result property="optionName" column="sub_option_name"/>
+        <result property="themeId" column="sub_theme_id"/>
+    </resultMap>
+
+    <sql id="selectVoteThemeVo">
+        select theme_id, theme_content, conference_room_order_id
+        from vote_theme
+    </sql>
+
+    <select id="selectVoteThemeList" parameterType="VoteTheme" resultMap="VoteThemeResult">
+        <include refid="selectVoteThemeVo"/>
+        <where>
+            <if test="themeContent != null  and themeContent != ''">and theme_content = #{themeContent}</if>
+            <if test="conferenceRoomOrderId != null ">and conference_room_order_id = #{conferenceRoomOrderId}</if>
+        </where>
+    </select>
+
+    <select id="selectVoteThemeByThemeId" parameterType="Long" resultMap="VoteThemeVoteOptionResult">
+        select a.theme_id,
+               a.theme_content,
+               a.conference_room_order_id,
+               b.option_id   as sub_option_id,
+               b.option_name as sub_option_name,
+               b.theme_id    as sub_theme_id
+        from vote_theme a
+                 left join vote_option b on b.theme_id = a.theme_id
+        where a.theme_id = #{themeId}
+    </select>
+    <select id="selectVoteThemeByConferenceRoomOrderId" parameterType="Long" resultMap="VoteThemeVoteOptionResult">
+        select a.theme_id,
+               a.theme_content,
+               a.conference_room_order_id,
+               b.option_id   as sub_option_id,
+               b.option_name as sub_option_name,
+               b.theme_id    as sub_theme_id
+        from vote_theme a
+                 left join vote_option b on b.theme_id = a.theme_id
+        where a.conference_room_order_id = #{ConferenceRoomOrderId}
+    </select>
+    <insert id="insertVoteTheme" parameterType="VoteTheme" useGeneratedKeys="true" keyProperty="themeId">
+        insert into vote_theme
+        <trim prefix="(" suffix=")" suffixOverrides=",">
+            <if test="themeContent != null and themeContent != ''">theme_content,</if>
+            <if test="conferenceRoomOrderId != null">conference_room_order_id,</if>
+        </trim>
+        <trim prefix="values (" suffix=")" suffixOverrides=",">
+            <if test="themeContent != null and themeContent != ''">#{themeContent},</if>
+            <if test="conferenceRoomOrderId != null">#{conferenceRoomOrderId},</if>
+        </trim>
+    </insert>
+
+    <update id="updateVoteTheme" parameterType="VoteTheme">
+        update vote_theme
+        <trim prefix="SET" suffixOverrides=",">
+            <if test="themeContent != null and themeContent != ''">theme_content = #{themeContent},</if>
+            <if test="conferenceRoomOrderId != null">conference_room_order_id = #{conferenceRoomOrderId},</if>
+        </trim>
+        where theme_id = #{themeId}
+    </update>
+
+    <delete id="deleteVoteThemeByThemeId" parameterType="Long">
+        delete
+        from vote_theme
+        where theme_id = #{themeId}
+    </delete>
+
+    <delete id="deleteVoteThemeByThemeIds" parameterType="String">
+        delete from vote_theme where theme_id in
+        <foreach item="themeId" collection="array" open="(" separator="," close=")">
+            #{themeId}
+        </foreach>
+    </delete>
+
+    <delete id="deleteVoteOptionByThemeIds" parameterType="String">
+        delete from vote_option where theme_id in
+        <foreach item="themeId" collection="array" open="(" separator="," close=")">
+            #{themeId}
+        </foreach>
+    </delete>
+
+    <delete id="deleteVoteOptionByThemeId" parameterType="Long">
+        delete
+        from vote_option
+        where theme_id = #{themeId}
+    </delete>
+
+    <insert id="batchVoteOption">
+        insert into vote_option( option_id, option_name, theme_id) values
+        <foreach item="item" index="index" collection="list" separator=",">
+            ( #{item.optionId}, #{item.optionName}, #{item.themeId})
+        </foreach>
+    </insert>
+</mapper>

Некоторые файлы не были показаны из-за большого количества измененных файлов