Răsfoiți Sursa

家庭成员和意见反馈

zhangxin 2 săptămâni în urmă
părinte
comite
53baf8fdcf
30 a modificat fișierele cu 1478 adăugiri și 3 ștergeri
  1. 44 0
      national-motion-module-system/national-motion-system-biz/src/main/java/org/jeecg/modules/app/controller/my/AppFamilyMembersController.java
  2. 60 0
      national-motion-module-system/national-motion-system-biz/src/main/java/org/jeecg/modules/app/controller/my/AppFeedbackController.java
  3. 57 0
      national-motion-module-system/national-motion-system-biz/src/main/java/org/jeecg/modules/app/dto/AddFamilyMembersDTO.java
  4. 24 0
      national-motion-module-system/national-motion-system-biz/src/main/java/org/jeecg/modules/app/dto/AppFeedbackFindRequestDTO.java
  5. 42 0
      national-motion-module-system/national-motion-system-biz/src/main/java/org/jeecg/modules/app/dto/AppSubmitFeedbackRequestDTO.java
  6. 43 0
      national-motion-module-system/national-motion-system-biz/src/main/java/org/jeecg/modules/system/app/controller/CUserInfoController.java
  7. 175 0
      national-motion-module-system/national-motion-system-biz/src/main/java/org/jeecg/modules/system/app/controller/FamilyMembersController.java
  8. 179 0
      national-motion-module-system/national-motion-system-biz/src/main/java/org/jeecg/modules/system/app/controller/FeedbackController.java
  9. 62 0
      national-motion-module-system/national-motion-system-biz/src/main/java/org/jeecg/modules/system/app/dto/FindFamilyMembersResponseDTO.java
  10. 29 0
      national-motion-module-system/national-motion-system-biz/src/main/java/org/jeecg/modules/system/app/dto/FindPageCUserInfoRequestDTO.java
  11. 42 0
      national-motion-module-system/national-motion-system-biz/src/main/java/org/jeecg/modules/system/app/dto/FindPageCUserInfoResponseDTO.java
  12. 30 0
      national-motion-module-system/national-motion-system-biz/src/main/java/org/jeecg/modules/system/app/dto/FindPageRequestDTO.java
  13. 66 0
      national-motion-module-system/national-motion-system-biz/src/main/java/org/jeecg/modules/system/app/dto/FindResponseDTO.java
  14. 85 0
      national-motion-module-system/national-motion-system-biz/src/main/java/org/jeecg/modules/system/app/entity/AppFeedback.java
  15. 89 0
      national-motion-module-system/national-motion-system-biz/src/main/java/org/jeecg/modules/system/app/entity/FamilyMembers.java
  16. 43 0
      national-motion-module-system/national-motion-system-biz/src/main/java/org/jeecg/modules/system/app/enums/DelFlagEnum.java
  17. 46 0
      national-motion-module-system/national-motion-system-biz/src/main/java/org/jeecg/modules/system/app/enums/FeedbackTypeEnum.java
  18. 43 0
      national-motion-module-system/national-motion-system-biz/src/main/java/org/jeecg/modules/system/app/enums/ReplyStatusEnum.java
  19. 25 0
      national-motion-module-system/national-motion-system-biz/src/main/java/org/jeecg/modules/system/app/mapper/AppFeedbackMapper.java
  20. 22 0
      national-motion-module-system/national-motion-system-biz/src/main/java/org/jeecg/modules/system/app/mapper/FamilyMembersMapper.java
  21. 20 0
      national-motion-module-system/national-motion-system-biz/src/main/java/org/jeecg/modules/system/app/mapper/xml/AppFeedbackMapper.xml
  22. 5 0
      national-motion-module-system/national-motion-system-biz/src/main/java/org/jeecg/modules/system/app/mapper/xml/FamilyMembersMapper.xml
  23. 22 0
      national-motion-module-system/national-motion-system-biz/src/main/java/org/jeecg/modules/system/app/service/IAppFeedbackService.java
  24. 25 0
      national-motion-module-system/national-motion-system-biz/src/main/java/org/jeecg/modules/system/app/service/IFamilyMembersService.java
  25. 66 0
      national-motion-module-system/national-motion-system-biz/src/main/java/org/jeecg/modules/system/app/service/impl/AppFeedbackServiceImpl.java
  26. 100 0
      national-motion-module-system/national-motion-system-biz/src/main/java/org/jeecg/modules/system/app/service/impl/FamilyMembersServiceImpl.java
  27. 5 0
      national-motion-module-system/national-motion-system-biz/src/main/java/org/jeecg/modules/system/mapper/SysUserMapper.java
  28. 10 0
      national-motion-module-system/national-motion-system-biz/src/main/java/org/jeecg/modules/system/mapper/xml/SysUserMapper.xml
  29. 4 1
      national-motion-module-system/national-motion-system-biz/src/main/java/org/jeecg/modules/system/service/ISysUserService.java
  30. 15 2
      national-motion-module-system/national-motion-system-biz/src/main/java/org/jeecg/modules/system/service/impl/SysUserServiceImpl.java

+ 44 - 0
national-motion-module-system/national-motion-system-biz/src/main/java/org/jeecg/modules/app/controller/my/AppFamilyMembersController.java

@@ -0,0 +1,44 @@
+package org.jeecg.modules.app.controller.my;
+
+
+import io.swagger.v3.oas.annotations.Operation;
+import io.swagger.v3.oas.annotations.tags.Tag;
+import lombok.extern.slf4j.Slf4j;
+import org.jeecg.common.api.vo.Result;
+import org.jeecg.modules.app.dto.AddFamilyMembersDTO;
+import org.jeecg.modules.system.app.service.IFamilyMembersService;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.web.bind.annotation.*;
+
+/**
+ * 家庭成员
+ */
+@Slf4j
+@Tag(name = "APP家庭成员信息")
+@RestController()
+@RequestMapping("/app/my/familyMembers")
+public class AppFamilyMembersController {
+
+    @Autowired
+    IFamilyMembersService iFamilyMembersService;
+
+    @PostMapping("/addFamilyMembers")
+    @Operation(summary = "添加家庭成员")
+    public Result<String> addFamilyMembers(@RequestBody AddFamilyMembersDTO addFamilyMembersDTO){
+        return iFamilyMembersService.addFamilyMembers(addFamilyMembersDTO);
+    }
+
+    @PostMapping("/editFamilyMembers")
+    @Operation(summary = "修改家庭成员")
+    public Result<String> editFamilyMembers(@RequestBody AddFamilyMembersDTO addFamilyMembersDTO){
+        return iFamilyMembersService.editFamilyMembers(addFamilyMembersDTO);
+    }
+
+
+    @GetMapping("/deleteFamilyMembers")
+    @Operation(summary = "删除家庭成员")
+    public Result<String> deleteFamilyMembers(@RequestParam("id") String id){
+        return iFamilyMembersService.deleteFamilyMembers(id);
+    }
+
+}

+ 60 - 0
national-motion-module-system/national-motion-system-biz/src/main/java/org/jeecg/modules/app/controller/my/AppFeedbackController.java

@@ -0,0 +1,60 @@
+package org.jeecg.modules.app.controller.my;
+
+
+import com.baomidou.mybatisplus.core.metadata.IPage;
+import io.swagger.v3.oas.annotations.Operation;
+import io.swagger.v3.oas.annotations.tags.Tag;
+import lombok.extern.slf4j.Slf4j;
+import me.zhyd.oauth.utils.UuidUtils;
+import org.jeecg.common.api.vo.Result;
+import org.jeecg.modules.app.dto.AppFeedbackFindRequestDTO;
+import org.jeecg.modules.app.dto.AppSubmitFeedbackRequestDTO;
+import org.jeecg.modules.system.app.dto.FindPageRequestDTO;
+import org.jeecg.modules.system.app.dto.FindResponseDTO;
+import org.jeecg.modules.system.app.entity.AppFeedback;
+import org.jeecg.modules.system.app.service.IAppFeedbackService;
+import org.springframework.beans.BeanUtils;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.web.bind.annotation.*;
+
+
+/**
+ * 意见反馈
+ */
+@Slf4j
+@Tag(name = "app意见反馈相关接口")
+@RestController()
+@RequestMapping("/app/my/feedback")
+public class AppFeedbackController {
+
+    @Autowired
+    IAppFeedbackService iAppFeedbackService;
+
+
+    /**
+     * 查询意见反馈列表接口
+     * @param appFeedbackFindRequestDTO
+     * @return
+     */
+    @GetMapping("/findByPage")
+    @Operation(summary = "app意见反馈分页查询")
+    public Result<IPage<FindResponseDTO>> findByList(AppFeedbackFindRequestDTO appFeedbackFindRequestDTO){
+        FindPageRequestDTO findPageRequestDTO = new FindPageRequestDTO();
+        findPageRequestDTO.setUserId(appFeedbackFindRequestDTO.getUserId());
+        return Result.ok(iAppFeedbackService.findPage(appFeedbackFindRequestDTO.getPageNo(),appFeedbackFindRequestDTO.getPageSize(),findPageRequestDTO));
+    }
+
+
+    @PostMapping("/submitFeedback")
+    @Operation(summary = "提交意见反馈")
+    public Result<String> submitFeedback(@RequestBody AppSubmitFeedbackRequestDTO appSubmitFeedbackRequestDTO){
+        AppFeedback appFeedback = new AppFeedback();
+        BeanUtils.copyProperties(appSubmitFeedbackRequestDTO,appFeedback);
+        appFeedback.setId(UuidUtils.getUUID());
+        boolean save = iAppFeedbackService.save(appFeedback);
+        if (!save){
+            return Result.error("提交反馈意见失败,请联系管理员");
+        }
+        return Result.ok("提交成功");
+    }
+}

+ 57 - 0
national-motion-module-system/national-motion-system-biz/src/main/java/org/jeecg/modules/app/dto/AddFamilyMembersDTO.java

@@ -0,0 +1,57 @@
+package org.jeecg.modules.app.dto;
+
+import io.swagger.v3.oas.annotations.media.Schema;
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+import lombok.NonNull;
+import lombok.experimental.Accessors;
+
+/**
+ * 家庭成员
+ */
+@Data
+@Accessors(chain = true)
+@EqualsAndHashCode(callSuper = false)
+@Schema(description="APP添加家庭成员请求入参")
+public class AddFamilyMembersDTO {
+
+
+    @Schema(description = "id")
+    private String id;
+    /**姓名*/
+    @NonNull
+    @Schema(description = "姓名")
+    private String fullName;
+    /**用户编号*/
+    @Schema(description = "用户编号")
+    @NonNull
+    private String userId;
+    /**身份证号*/
+    @Schema(description = "身份证号")
+    @NonNull
+    private String identityCard;
+    /**身份证正面照*/
+    @NonNull
+    @Schema(description = "身份证正面照")
+    private String idCardFrontImg;
+    /**身份证反面照*/
+    @NonNull
+    @Schema(description = "身份证反面照")
+    private String idCardBackImg;
+    /**手机号*/
+    @NonNull
+    @Schema(description = "手机号")
+    private String phone;
+    /**实名状态 0-未实名 ;1-已实名*/
+    @Schema(description = "实名状态 0-未实名 ;1-已实名,默认未实名")
+    private Integer realNameStatus;
+    /**身份证反面照*/
+    @NonNull
+    @Schema(description = "实名认证照片")
+    private String realNameImg;
+
+    /**实名状态 0-未实名 ;1-已实名*/
+    @Schema(description = "用户类型0-本人;1-家人 默认家人")
+    private Integer userType;
+
+}

+ 24 - 0
national-motion-module-system/national-motion-system-biz/src/main/java/org/jeecg/modules/app/dto/AppFeedbackFindRequestDTO.java

@@ -0,0 +1,24 @@
+package org.jeecg.modules.app.dto;
+
+import io.swagger.v3.oas.annotations.media.Schema;
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+import lombok.experimental.Accessors;
+
+/**
+ * 意见反馈
+ */
+@Data
+@Accessors(chain = true)
+@EqualsAndHashCode(callSuper = false)
+@Schema(description="APP意见反馈请求入参")
+public class AppFeedbackFindRequestDTO  {
+
+    //用户编号
+    private String userId;
+    //当前页
+    private Integer pageNo=1;
+    //每页显示条数
+    private  Integer pageSize=10;
+
+}

+ 42 - 0
national-motion-module-system/national-motion-system-biz/src/main/java/org/jeecg/modules/app/dto/AppSubmitFeedbackRequestDTO.java

@@ -0,0 +1,42 @@
+package org.jeecg.modules.app.dto;
+
+import com.fasterxml.jackson.annotation.JsonFormat;
+import io.swagger.v3.oas.annotations.media.Schema;
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+import lombok.NonNull;
+import lombok.experimental.Accessors;
+import org.springframework.format.annotation.DateTimeFormat;
+
+import java.util.Date;
+
+/**
+ * 意见反馈
+ */
+@Data
+@Accessors(chain = true)
+@EqualsAndHashCode(callSuper = false)
+@Schema(description="APP意见反馈请求入参")
+public class AppSubmitFeedbackRequestDTO {
+
+    /**用户id*/
+    @NonNull
+    @Schema(description = "用户id")
+    private String userId;
+    /**反馈类型0-投诉吐槽;1-功能异常;2-用户体验;3-功能建议;4-其他*/
+    @NonNull
+    @Schema(description = "反馈类型0-投诉吐槽;1-功能异常;2-用户体验;3-功能建议;4-其他")
+    private Integer feedbackType;
+    /**反馈描述*/
+    @NonNull
+    @Schema(description = "反馈描述")
+    private String feedbackDescribed;
+    /**反馈图片地址,使用;进行隔开*/
+    @Schema(description = "反馈图片地址,使用;进行隔开")
+    private String feedbackImg;
+    /**创建时间*/
+    @JsonFormat(timezone = "GMT+8",pattern = "yyyy-MM-dd HH:mm:ss")
+    @DateTimeFormat(pattern="yyyy-MM-dd HH:mm:ss")
+    @Schema(description = "创建时间")
+    private Date createTime=new Date();
+}

+ 43 - 0
national-motion-module-system/national-motion-system-biz/src/main/java/org/jeecg/modules/system/app/controller/CUserInfoController.java

@@ -0,0 +1,43 @@
+package org.jeecg.modules.system.app.controller;
+
+
+import com.baomidou.mybatisplus.core.metadata.IPage;
+import io.swagger.v3.oas.annotations.Operation;
+import io.swagger.v3.oas.annotations.tags.Tag;
+import lombok.extern.slf4j.Slf4j;
+import org.jeecg.common.api.vo.Result;
+import org.jeecg.modules.system.app.dto.FindPageCUserInfoRequestDTO;
+import org.jeecg.modules.system.app.dto.FindPageCUserInfoResponseDTO;
+import org.jeecg.modules.system.service.ISysUserService;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.web.bind.annotation.GetMapping;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RequestParam;
+import org.springframework.web.bind.annotation.RestController;
+
+import javax.servlet.http.HttpServletRequest;
+
+/**
+ * @Description: 家庭成员信息表
+ * @Author: zx
+ * @Date:   2025-07-07
+ * @Version: V1.0
+ */
+@Tag(name="c端用户信息表")
+@RestController
+@RequestMapping("/cUserInfo")
+@Slf4j
+public class CUserInfoController {
+
+    @Autowired
+    ISysUserService iSysUserService;
+
+    @Operation(summary="家庭成员信息表-分页列表查询")
+    @GetMapping(value = "/list")
+    public Result<IPage<FindPageCUserInfoResponseDTO>> queryPageList(FindPageCUserInfoRequestDTO findPageCUserInfoRequestDTO,
+                                                                     @RequestParam(name="pageNo", defaultValue="1") Integer pageNo,
+                                                                     @RequestParam(name="pageSize", defaultValue="10") Integer pageSize,
+                                                                     HttpServletRequest req) {
+        return Result.OK(iSysUserService.findByCUserInfo(pageNo,pageSize,findPageCUserInfoRequestDTO));
+    }
+}

+ 175 - 0
national-motion-module-system/national-motion-system-biz/src/main/java/org/jeecg/modules/system/app/controller/FamilyMembersController.java

@@ -0,0 +1,175 @@
+package org.jeecg.modules.system.app.controller;
+
+import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
+import com.baomidou.mybatisplus.core.metadata.IPage;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import io.swagger.v3.oas.annotations.Operation;
+import io.swagger.v3.oas.annotations.tags.Tag;
+import lombok.extern.slf4j.Slf4j;
+import org.apache.shiro.authz.annotation.RequiresPermissions;
+import org.jeecg.common.api.vo.Result;
+import org.jeecg.common.aspect.annotation.AutoLog;
+import org.jeecg.common.system.base.controller.JeecgController;
+import org.jeecg.common.system.query.QueryGenerator;
+import org.jeecg.modules.system.app.dto.FindFamilyMembersResponseDTO;
+import org.jeecg.modules.system.app.entity.FamilyMembers;
+import org.jeecg.modules.system.app.service.IFamilyMembersService;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.web.bind.annotation.*;
+import org.springframework.web.servlet.ModelAndView;
+
+import javax.servlet.http.HttpServletRequest;
+import javax.servlet.http.HttpServletResponse;
+import java.util.Arrays;
+
+/**
+ * @Description: 家庭成员信息表
+ * @Author: zx
+ * @Date:   2025-07-07
+ * @Version: V1.0
+ */
+@Tag(name="家庭成员信息表")
+@RestController
+@RequestMapping("/familyMembers")
+@Slf4j
+public class FamilyMembersController extends JeecgController<FamilyMembers, IFamilyMembersService> {
+	@Autowired
+	private IFamilyMembersService familyMembersService;
+	
+	/**
+	 * 分页列表查询
+	 *
+	 * @param familyMembers
+	 * @param pageNo
+	 * @param pageSize
+	 * @param req
+	 * @return
+	 */
+	//@AutoLog(value = "家庭成员信息表-分页列表查询")
+	@Operation(summary="家庭成员信息表-分页列表查询")
+	@GetMapping(value = "/list")
+	public Result<IPage<FamilyMembers>> queryPageList(FamilyMembers familyMembers,
+								   @RequestParam(name="pageNo", defaultValue="1") Integer pageNo,
+								   @RequestParam(name="pageSize", defaultValue="10") Integer pageSize,
+								   HttpServletRequest req) {
+        QueryWrapper<FamilyMembers> queryWrapper = QueryGenerator.initQueryWrapper(familyMembers, req.getParameterMap());
+		Page<FamilyMembers> page = new Page<FamilyMembers>(pageNo, pageSize);
+		IPage<FamilyMembers> pageList = familyMembersService.page(page, queryWrapper);
+		return Result.OK(pageList);
+	}
+	
+	/**
+	 *   添加
+	 *
+	 * @param familyMembers
+	 * @return
+	 */
+	@AutoLog(value = "家庭成员信息表-添加")
+	@Operation(summary="家庭成员信息表-添加")
+	@RequiresPermissions("familyMembers:nm_family_members:add")
+	@PostMapping(value = "/add")
+	public Result<String> add(@RequestBody FamilyMembers familyMembers) {
+		familyMembersService.save(familyMembers);
+
+		return Result.OK("添加成功!");
+	}
+	
+	/**
+	 *  编辑
+	 *
+	 * @param familyMembers
+	 * @return
+	 */
+	@AutoLog(value = "家庭成员信息表-编辑")
+	@Operation(summary="家庭成员信息表-编辑")
+	@RequiresPermissions("familyMembers:nm_family_members:edit")
+	@RequestMapping(value = "/edit", method = {RequestMethod.PUT,RequestMethod.POST})
+	public Result<String> edit(@RequestBody FamilyMembers familyMembers) {
+		familyMembersService.updateById(familyMembers);
+		return Result.OK("编辑成功!");
+	}
+	
+	/**
+	 *   通过id删除
+	 *
+	 * @param id
+	 * @return
+	 */
+	@AutoLog(value = "家庭成员信息表-通过id删除")
+	@Operation(summary="家庭成员信息表-通过id删除")
+	@RequiresPermissions("familyMembers:nm_family_members:delete")
+	@DeleteMapping(value = "/delete")
+	public Result<String> delete(@RequestParam(name="id",required=true) String id) {
+		familyMembersService.removeById(id);
+		return Result.OK("删除成功!");
+	}
+	
+	/**
+	 *  批量删除
+	 *
+	 * @param ids
+	 * @return
+	 */
+	@AutoLog(value = "家庭成员信息表-批量删除")
+	@Operation(summary="家庭成员信息表-批量删除")
+	@RequiresPermissions("familyMembers:nm_family_members:deleteBatch")
+	@DeleteMapping(value = "/deleteBatch")
+	public Result<String> deleteBatch(@RequestParam(name="ids",required=true) String ids) {
+		this.familyMembersService.removeByIds(Arrays.asList(ids.split(",")));
+		return Result.OK("批量删除成功!");
+	}
+	
+	/**
+	 * 通过id查询
+	 *
+	 * @param id
+	 * @return
+	 */
+	//@AutoLog(value = "家庭成员信息表-通过id查询")
+	@Operation(summary="家庭成员信息表-通过id查询")
+	@GetMapping(value = "/queryById")
+	public Result<FamilyMembers> queryById(@RequestParam(name="id",required=true) String id) {
+		FamilyMembers familyMembers = familyMembersService.getById(id);
+		if(familyMembers==null) {
+			return Result.error("未找到对应数据");
+		}
+		return Result.OK(familyMembers);
+	}
+
+    /**
+    * 导出excel
+    *
+    * @param request
+    * @param familyMembers
+    */
+    @RequiresPermissions("familyMembers:nm_family_members:exportXls")
+    @RequestMapping(value = "/exportXls")
+    public ModelAndView exportXls(HttpServletRequest request, FamilyMembers familyMembers) {
+        return super.exportXls(request, familyMembers, FamilyMembers.class, "家庭成员信息表");
+    }
+
+    /**
+      * 通过excel导入数据
+    *
+    * @param request
+    * @param response
+    * @return
+    */
+    @RequiresPermissions("familyMembers:nm_family_members:importExcel")
+    @RequestMapping(value = "/importExcel", method = RequestMethod.POST)
+    public Result<?> importExcel(HttpServletRequest request, HttpServletResponse response) {
+        return super.importExcel(request, response, FamilyMembers.class);
+    }
+
+	 /**
+	  * 根据用户id查询家庭成员列表
+	  * @param userId
+	  * @return
+	  */
+
+	 @Operation(summary="家庭成员信息表-通过用户id查询家庭成员信息")
+	 @GetMapping(value = "/findByUserId")
+	 public Result<FindFamilyMembersResponseDTO> findByUserId(@RequestParam(name="userId",required=true) String userId) {
+		 return familyMembersService.findByUserId(userId);
+	 }
+}

+ 179 - 0
national-motion-module-system/national-motion-system-biz/src/main/java/org/jeecg/modules/system/app/controller/FeedbackController.java

@@ -0,0 +1,179 @@
+package org.jeecg.modules.system.app.controller;
+
+import com.baomidou.mybatisplus.core.metadata.IPage;
+import io.swagger.v3.oas.annotations.Operation;
+import io.swagger.v3.oas.annotations.tags.Tag;
+import lombok.extern.slf4j.Slf4j;
+import org.apache.shiro.SecurityUtils;
+import org.apache.shiro.authz.annotation.RequiresPermissions;
+import org.apache.shiro.subject.Subject;
+import org.jeecg.common.api.vo.Result;
+import org.jeecg.common.aspect.annotation.AutoLog;
+import org.jeecg.common.system.base.controller.JeecgController;
+import org.jeecg.common.system.vo.LoginUser;
+import org.jeecg.modules.system.app.dto.FindPageRequestDTO;
+import org.jeecg.modules.system.app.dto.FindResponseDTO;
+import org.jeecg.modules.system.app.entity.AppFeedback;
+import org.jeecg.modules.system.app.enums.ReplyStatusEnum;
+import org.jeecg.modules.system.app.service.IAppFeedbackService;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.web.bind.annotation.*;
+import org.springframework.web.servlet.ModelAndView;
+
+import javax.servlet.http.HttpServletRequest;
+import javax.servlet.http.HttpServletResponse;
+import java.util.Arrays;
+import java.util.Date;
+
+/**
+ * @Description: 意见反馈
+ * @Author: zx
+ * @Date:   2025-07-07
+ * @Version: V1.0
+ */
+@Tag(name="意见反馈")
+@RestController
+@RequestMapping("/appFeedback")
+@Slf4j
+public class FeedbackController extends JeecgController<AppFeedback, IAppFeedbackService> {
+	@Autowired
+	private IAppFeedbackService appFeedbackService;
+	
+	/**
+	 * 分页列表查询
+	 *
+	 * @param findPageRequestDTO
+	 * @param pageNo
+	 * @param pageSize
+	 * @param req
+	 * @return
+	 */
+	@Operation(summary="意见反馈-分页列表查询")
+	@GetMapping(value = "/list")
+	public Result<IPage<FindResponseDTO>> queryPageList(FindPageRequestDTO findPageRequestDTO,
+														@RequestParam(name="pageNo", defaultValue="1") Integer pageNo,
+														@RequestParam(name="pageSize", defaultValue="10") Integer pageSize,
+														HttpServletRequest req) {
+
+
+		IPage<FindResponseDTO> pageList = appFeedbackService.findPage(pageNo,pageSize, findPageRequestDTO);
+		return Result.OK(pageList);
+	}
+	
+	/**
+	 *   添加
+	 *
+	 * @param appFeedback
+	 * @return
+	 */
+	@AutoLog(value = "意见反馈-添加")
+	@Operation(summary="意见反馈-添加")
+	@RequiresPermissions("feedback:nm_feedback:add")
+	@PostMapping(value = "/add")
+	public Result<String> add(@RequestBody AppFeedback appFeedback) {
+		appFeedbackService.save(appFeedback);
+
+		return Result.OK("添加成功!");
+	}
+	
+	/**
+	 *  编辑
+	 *
+	 * @param appFeedback
+	 * @return
+	 */
+	@AutoLog(value = "意见反馈-编辑")
+	@Operation(summary="意见反馈-编辑")
+	@RequiresPermissions("feedback:nm_feedback:edit")
+	@RequestMapping(value = "/edit", method = {RequestMethod.PUT,RequestMethod.POST})
+	public Result<String> edit(@RequestBody AppFeedback appFeedback) {
+		Subject subject = SecurityUtils.getSubject();
+		LoginUser loginUser =null;
+		if (subject.isAuthenticated()) {
+			// 获取当前登录的用户信息
+			loginUser= (LoginUser) subject.getPrincipal();
+		}
+		if (loginUser==null){
+			return Result.error("当前未登录,请先登录;或者未获取到用户信息,请联系管理员");
+		}
+		appFeedback.setReplyStatus(ReplyStatusEnum.REPLIED.getCode());
+		appFeedback.setReplyUserId(loginUser.getId());
+		appFeedback.setUpdateTime(new Date());
+		appFeedback.setUpdateBy(loginUser.getId());
+		appFeedbackService.updateById(appFeedback);
+		return Result.OK("编辑成功!");
+	}
+	
+	/**
+	 *   通过id删除
+	 *
+	 * @param id
+	 * @return
+	 */
+	@AutoLog(value = "意见反馈-通过id删除")
+	@Operation(summary="意见反馈-通过id删除")
+	@RequiresPermissions("feedback:nm_feedback:delete")
+	@DeleteMapping(value = "/delete")
+	public Result<String> delete(@RequestParam(name="id",required=true) String id) {
+		appFeedbackService.removeById(id);
+		return Result.OK("删除成功!");
+	}
+	
+	/**
+	 *  批量删除
+	 *
+	 * @param ids
+	 * @return
+	 */
+	@AutoLog(value = "意见反馈-批量删除")
+	@Operation(summary="意见反馈-批量删除")
+	@RequiresPermissions("feedback:nm_feedback:deleteBatch")
+	@DeleteMapping(value = "/deleteBatch")
+	public Result<String> deleteBatch(@RequestParam(name="ids",required=true) String ids) {
+		this.appFeedbackService.removeByIds(Arrays.asList(ids.split(",")));
+		return Result.OK("批量删除成功!");
+	}
+	
+	/**
+	 * 通过id查询
+	 *
+	 * @param id
+	 * @return
+	 */
+	//@AutoLog(value = "意见反馈-通过id查询")
+	@Operation(summary="意见反馈-通过id查询")
+	@GetMapping(value = "/queryById")
+	public Result<FindResponseDTO> queryById(@RequestParam(name="id",required=true) String id) {
+		FindResponseDTO findResponseDTO = appFeedbackService.FindById(id);
+		if(findResponseDTO==null) {
+			return Result.error("未找到对应数据");
+		}
+		return Result.OK(findResponseDTO);
+	}
+
+    /**
+    * 导出excel
+    *
+    * @param request
+    * @param appFeedback
+    */
+    @RequiresPermissions("feedback:nm_feedback:exportXls")
+    @RequestMapping(value = "/exportXls")
+    public ModelAndView exportXls(HttpServletRequest request, AppFeedback appFeedback) {
+        return super.exportXls(request, appFeedback, AppFeedback.class, "意见反馈");
+    }
+
+    /**
+      * 通过excel导入数据
+    *
+    * @param request
+    * @param response
+    * @return
+    */
+    @RequiresPermissions("feedback:nm_feedback:importExcel")
+    @RequestMapping(value = "/importExcel", method = RequestMethod.POST)
+    public Result<?> importExcel(HttpServletRequest request, HttpServletResponse response) {
+        return super.importExcel(request, response, AppFeedback.class);
+    }
+
+}

+ 62 - 0
national-motion-module-system/national-motion-system-biz/src/main/java/org/jeecg/modules/system/app/dto/FindFamilyMembersResponseDTO.java

@@ -0,0 +1,62 @@
+package org.jeecg.modules.system.app.dto;
+
+import io.swagger.v3.oas.annotations.media.Schema;
+import lombok.AllArgsConstructor;
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+import lombok.NoArgsConstructor;
+import lombok.experimental.Accessors;
+import org.jeecg.modules.system.app.entity.FamilyMembers;
+
+import java.util.Date;
+import java.util.List;
+
+/**
+ * 意见反馈
+ */
+@Data
+@Accessors(chain = true)
+@EqualsAndHashCode(callSuper = false)
+@AllArgsConstructor
+@NoArgsConstructor
+@Schema(description="家庭成员返回参数")
+public class FindFamilyMembersResponseDTO {
+
+    @Schema(description = "id")
+    private String id;
+    /**
+     * 登录账号
+     */
+    @Schema(description = "登录账号")
+    private String username;
+
+    /**
+     * 真实姓名
+     */
+    @Schema(description = "真实姓名")
+    private String realname;
+    /**
+     * 头像
+     */
+    @Schema(description = "头像")
+    private String avatar;
+    /**
+     * 电话
+     */
+    @Schema(description = "电话")
+    private String phone;
+    /**
+     * 创建时间
+     */
+    @Schema(description = "创建时间")
+    private Date createTime;
+    /**
+     * 小程序openId
+     */
+    @Schema(description = "微信openId")
+    private String openid;
+
+    @Schema(description = "家庭成员列表")
+    private List<FamilyMembers> familyMembersList;
+
+}

+ 29 - 0
national-motion-module-system/national-motion-system-biz/src/main/java/org/jeecg/modules/system/app/dto/FindPageCUserInfoRequestDTO.java

@@ -0,0 +1,29 @@
+package org.jeecg.modules.system.app.dto;
+
+import io.swagger.v3.oas.annotations.media.Schema;
+import lombok.AllArgsConstructor;
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+import lombok.NoArgsConstructor;
+import lombok.experimental.Accessors;
+
+/**
+ * 意见反馈
+ */
+@Data
+@Accessors(chain = true)
+@EqualsAndHashCode(callSuper = false)
+@AllArgsConstructor
+@NoArgsConstructor
+@Schema(description="C端用户请求入参")
+public class FindPageCUserInfoRequestDTO {
+
+    //用户昵称
+    @Schema(description = "用户昵称")
+    private String username;
+    //实名状态 0-未实名 ;1-已实名
+    @Schema(description = "实名状态 0-未实名 ;1-已实名")
+    private Integer realNameStatus;
+
+
+}

+ 42 - 0
national-motion-module-system/national-motion-system-biz/src/main/java/org/jeecg/modules/system/app/dto/FindPageCUserInfoResponseDTO.java

@@ -0,0 +1,42 @@
+package org.jeecg.modules.system.app.dto;
+
+import com.fasterxml.jackson.annotation.JsonFormat;
+import io.swagger.v3.oas.annotations.media.Schema;
+import lombok.AllArgsConstructor;
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+import lombok.NoArgsConstructor;
+import lombok.experimental.Accessors;
+import org.springframework.format.annotation.DateTimeFormat;
+
+import java.util.Date;
+
+/**
+ * c端用户
+ */
+@Data
+@Accessors(chain = true)
+@EqualsAndHashCode(callSuper = false)
+@AllArgsConstructor
+@NoArgsConstructor
+@Schema(description="C端用户请求入参")
+public class FindPageCUserInfoResponseDTO {
+
+    //用户昵称
+    @Schema(description = "用户昵称")
+    private String username;
+    //实名状态 0-未实名 ;1-已实名
+    @Schema(description = "实名状态 0-未实名 ;1-已实名")
+    private Integer realNameStatus;
+    @Schema(description = "头像")
+    private String avatar;
+    @Schema(description = "手机号")
+    private String phone;
+    @Schema(description = "家庭成员数(包括自己)")
+    private Integer familyNum;
+    /**创建时间*/
+    @JsonFormat(timezone = "GMT+8",pattern = "yyyy-MM-dd HH:mm:ss")
+    @DateTimeFormat(pattern="yyyy-MM-dd HH:mm:ss")
+    @Schema(description = "创建时间")
+    private Date createTime;
+}

+ 30 - 0
national-motion-module-system/national-motion-system-biz/src/main/java/org/jeecg/modules/system/app/dto/FindPageRequestDTO.java

@@ -0,0 +1,30 @@
+package org.jeecg.modules.system.app.dto;
+
+import io.swagger.v3.oas.annotations.media.Schema;
+import lombok.AllArgsConstructor;
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+import lombok.NoArgsConstructor;
+import lombok.experimental.Accessors;
+/**
+ * 意见反馈
+ */
+@Data
+@Accessors(chain = true)
+@EqualsAndHashCode(callSuper = false)
+@AllArgsConstructor
+@NoArgsConstructor
+@Schema(description="意见反馈请求入参")
+public class FindPageRequestDTO {
+
+    //手机号
+    @Schema(description = "手机号")
+    private String phone;
+    //意见反馈类型
+    @Schema(description = "反馈类型")
+    private Integer feedbackType;
+    //用户id
+    @Schema(description = "用户id")
+    private String userId;
+
+}

+ 66 - 0
national-motion-module-system/national-motion-system-biz/src/main/java/org/jeecg/modules/system/app/dto/FindResponseDTO.java

@@ -0,0 +1,66 @@
+package org.jeecg.modules.system.app.dto;
+
+import com.fasterxml.jackson.annotation.JsonFormat;
+import io.swagger.v3.oas.annotations.media.Schema;
+import lombok.AllArgsConstructor;
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+import lombok.NoArgsConstructor;
+import lombok.experimental.Accessors;
+import org.jeecgframework.poi.excel.annotation.Excel;
+import org.springframework.format.annotation.DateTimeFormat;
+
+import java.util.Date;
+import java.util.List;
+
+/**
+ * 意见反馈
+ */
+@Data
+@Accessors(chain = true)
+@EqualsAndHashCode(callSuper = false)
+@AllArgsConstructor
+@NoArgsConstructor
+@Schema(description="意见反馈返回参数")
+public class FindResponseDTO {
+
+    @Schema(description = "主键id")
+    private String id;
+    /**用户id*/
+    @Excel(name = "用户名称", width = 15)
+    @Schema(description = "用户名称")
+    private String userName;
+    /**用户手机号*/
+    @Excel(name = "用户手机号", width = 15)
+    @Schema(description = "用户手机号")
+    private String phone;
+    /**反馈类型0-投诉吐槽;1-功能异常;2-用户体验;3-功能建议;4-其他*/
+    @Excel(name = "反馈类型0-投诉吐槽;1-功能异常;2-用户体验;3-功能建议;4-其他", width = 15)
+    @Schema(description = "反馈类型0-投诉吐槽;1-功能异常;2-用户体验;3-功能建议;4-其他")
+    private Integer feedbackType;
+    /**反馈描述*/
+    @Excel(name = "反馈描述", width = 15)
+    @Schema(description = "反馈描述")
+    private String feedbackDescribed;
+    /**反馈图片地址,使用;进行隔开*/
+    @Excel(name = "反馈图片地址,使用;进行隔开", width = 15)
+    @Schema(description = "反馈图片地址,使用;进行隔开")
+    private String feedbackImg;
+    /**回复状态0-未回复 1-已回复*/
+    @Excel(name = "回复状态0-未回复 1-已回复", width = 15)
+    @Schema(description = "回复状态0-未回复 1-已回复")
+    private Integer replyStatus;
+    /**回复内容*/
+    @Excel(name = "回复内容", width = 15)
+    @Schema(description = "回复内容")
+    private String replyContent;
+
+    /**创建时间*/
+    @JsonFormat(timezone = "GMT+8",pattern = "yyyy-MM-dd HH:mm:ss")
+    @DateTimeFormat(pattern="yyyy-MM-dd HH:mm:ss")
+    @Schema(description = "创建时间")
+    private Date createTime;
+    @Schema(description = "图片集合")
+    private List<String> feedbackImgList;
+
+}

+ 85 - 0
national-motion-module-system/national-motion-system-biz/src/main/java/org/jeecg/modules/system/app/entity/AppFeedback.java

@@ -0,0 +1,85 @@
+package org.jeecg.modules.system.app.entity;
+
+import com.baomidou.mybatisplus.annotation.IdType;
+import com.baomidou.mybatisplus.annotation.TableId;
+import com.baomidou.mybatisplus.annotation.TableLogic;
+import com.baomidou.mybatisplus.annotation.TableName;
+import com.fasterxml.jackson.annotation.JsonFormat;
+import io.swagger.v3.oas.annotations.media.Schema;
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+import lombok.experimental.Accessors;
+import org.jeecgframework.poi.excel.annotation.Excel;
+import org.springframework.format.annotation.DateTimeFormat;
+
+import java.io.Serializable;
+import java.util.Date;
+
+/**
+ * @Description: 意见反馈
+ * @Author: jeecg-boot
+ * @Date:   2025-07-07
+ * @Version: V1.0
+ */
+@Data
+@TableName("nm_feedback")
+@Accessors(chain = true)
+@EqualsAndHashCode(callSuper = false)
+@Schema(description="意见反馈")
+public class AppFeedback implements Serializable {
+    private static final long serialVersionUID = 1L;
+
+	/**主键id*/
+	@TableId(type = IdType.ASSIGN_ID)
+    @Schema(description = "主键id")
+    private String id;
+	/**用户id*/
+	@Excel(name = "用户id", width = 15)
+    @Schema(description = "用户id")
+    private String userId;
+	/**反馈类型0-投诉吐槽;1-功能异常;2-用户体验;3-功能建议;4-其他*/
+	@Excel(name = "反馈类型0-投诉吐槽;1-功能异常;2-用户体验;3-功能建议;4-其他", width = 15)
+    @Schema(description = "反馈类型0-投诉吐槽;1-功能异常;2-用户体验;3-功能建议;4-其他")
+    private Integer feedbackType;
+	/**反馈描述*/
+	@Excel(name = "反馈描述", width = 15)
+    @Schema(description = "反馈描述")
+    private String feedbackDescribed;
+	/**反馈图片地址,使用;进行隔开*/
+	@Excel(name = "反馈图片地址,使用;进行隔开", width = 15)
+    @Schema(description = "反馈图片地址,使用;进行隔开")
+    private String feedbackImg;
+	/**回复状态0-未回复 1-已回复*/
+	@Excel(name = "回复状态0-未回复 1-已回复", width = 15)
+    @Schema(description = "回复状态0-未回复 1-已回复")
+    private Integer replyStatus;
+	/**回复内容*/
+	@Excel(name = "回复内容", width = 15)
+    @Schema(description = "回复内容")
+    private String replyContent;
+	/**回复人id*/
+	@Excel(name = "回复人id", width = 15)
+    @Schema(description = "回复人id")
+    private String replyUserId;
+	/**创建人*/
+    @Schema(description = "创建人")
+    private String createBy;
+	/**创建时间*/
+	@JsonFormat(timezone = "GMT+8",pattern = "yyyy-MM-dd HH:mm:ss")
+    @DateTimeFormat(pattern="yyyy-MM-dd HH:mm:ss")
+    @Schema(description = "创建时间")
+    private Date createTime;
+	/**修改人*/
+    @Schema(description = "修改人")
+    private String updateBy;
+	/**修改时间*/
+	@JsonFormat(timezone = "GMT+8",pattern = "yyyy-MM-dd HH:mm:ss")
+    @DateTimeFormat(pattern="yyyy-MM-dd HH:mm:ss")
+    @Schema(description = "修改时间")
+    private Date updateTime;
+	/**删除标志;删除状态(0-正常,1-已删除)*/
+	@Excel(name = "删除标志;删除状态(0-正常,1-已删除)", width = 15)
+    @Schema(description = "删除标志;删除状态(0-正常,1-已删除)")
+    @TableLogic
+    private Integer delFlag;
+}

+ 89 - 0
national-motion-module-system/national-motion-system-biz/src/main/java/org/jeecg/modules/system/app/entity/FamilyMembers.java

@@ -0,0 +1,89 @@
+package org.jeecg.modules.system.app.entity;
+
+import com.baomidou.mybatisplus.annotation.IdType;
+import com.baomidou.mybatisplus.annotation.TableId;
+import com.baomidou.mybatisplus.annotation.TableLogic;
+import com.baomidou.mybatisplus.annotation.TableName;
+import com.fasterxml.jackson.annotation.JsonFormat;
+import io.swagger.v3.oas.annotations.media.Schema;
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+import lombok.experimental.Accessors;
+import org.jeecgframework.poi.excel.annotation.Excel;
+import org.springframework.format.annotation.DateTimeFormat;
+
+import java.io.Serializable;
+import java.util.Date;
+
+/**
+ * @Description: 家庭成员信息表
+ * @Author: jeecg-boot
+ * @Date:   2025-07-07
+ * @Version: V1.0
+ */
+@Data
+@TableName("nm_family_members")
+@Accessors(chain = true)
+@EqualsAndHashCode(callSuper = false)
+@Schema(description="家庭成员信息表")
+public class FamilyMembers implements Serializable {
+    private static final long serialVersionUID = 1L;
+
+	/**主键*/
+	@TableId(type = IdType.ASSIGN_ID)
+    @Schema(description = "主键")
+    private String id;
+	/**姓名*/
+	@Excel(name = "姓名", width = 15)
+    @Schema(description = "姓名")
+    private String fullName;
+	/**用户编号*/
+	@Excel(name = "用户编号", width = 15)
+    @Schema(description = "用户编号")
+    private String userId;
+	/**身份证号*/
+	@Excel(name = "身份证号", width = 15)
+    @Schema(description = "身份证号")
+    private String identityCard;
+	/**身份证正面照*/
+	@Excel(name = "身份证正面照", width = 15)
+    @Schema(description = "身份证正面照")
+    private String idCardFrontImg;
+	/**身份证反面照*/
+	@Excel(name = "身份证反面照", width = 15)
+    @Schema(description = "身份证反面照")
+    private String idCardBackImg;
+	/**手机号*/
+	@Excel(name = "手机号", width = 15)
+    @Schema(description = "手机号")
+    private String phone;
+	/**实名状态 0-未实名 ;1-已实名*/
+	@Excel(name = "实名状态 0-未实名 ;1-已实名", width = 15)
+    @Schema(description = "实名状态 0-未实名 ;1-已实名")
+    private Integer realNameStatus;
+    /**身份证反面照*/
+    @Excel(name = "实名认证照片", width = 15)
+    @Schema(description = "实名认证照片")
+    private String realNameImg;
+
+    /**实名状态 0-未实名 ;1-已实名*/
+    @Excel(name = "用户类型0-本人;1-家人", width = 15)
+    @Schema(description = "用户类型0-本人;1-家人")
+    private Integer userType;
+	/**创建时间*/
+	@JsonFormat(timezone = "GMT+8",pattern = "yyyy-MM-dd HH:mm:ss")
+    @DateTimeFormat(pattern="yyyy-MM-dd HH:mm:ss")
+    @Schema(description = "创建时间")
+    private Date createTime;
+	/**修改时间*/
+	@JsonFormat(timezone = "GMT+8",pattern = "yyyy-MM-dd HH:mm:ss")
+    @DateTimeFormat(pattern="yyyy-MM-dd HH:mm:ss")
+    @Schema(description = "修改时间")
+    private Date updateTime;
+
+    /**删除标志;删除状态(0-正常,1-已删除)*/
+    @Excel(name = "删除标志;删除状态(0-正常,1-已删除)", width = 15)
+    @Schema(description = "删除标志;删除状态(0-正常,1-已删除)")
+    @TableLogic
+    private Integer delFlag;
+}

+ 43 - 0
national-motion-module-system/national-motion-system-biz/src/main/java/org/jeecg/modules/system/app/enums/DelFlagEnum.java

@@ -0,0 +1,43 @@
+package org.jeecg.modules.system.app.enums;
+
+import org.jeecg.common.system.annotation.EnumDict;
+
+/**
+ * 回复状态枚举
+ */
+@EnumDict("delFlagEnum")
+public enum DelFlagEnum {
+//   0-投诉吐槽;1-功能异常;2-用户体验;3-功能建议;4-其他
+    NO_DELETE(0, "未删除"),
+    YES_DELETE(1, "已删除");
+
+    Integer code;
+    String name;
+    DelFlagEnum(Integer code, String name) {
+        this.code = code;
+        this.name = name;
+    }
+    public Integer getCode() {
+        return code;
+    }
+
+    public void setCode(Integer code) {
+        this.code = code;
+    }
+
+    public void setName(String name) {
+        this.name = name;
+    }
+
+    public String getName() {
+        return name;
+    }
+    public static DelFlagEnum getByCode(Integer code) {
+        for (DelFlagEnum value : values()) {
+            if (value.code.equals(code) ) {
+                return value;
+            }
+        }
+        return null;
+    }
+}

+ 46 - 0
national-motion-module-system/national-motion-system-biz/src/main/java/org/jeecg/modules/system/app/enums/FeedbackTypeEnum.java

@@ -0,0 +1,46 @@
+package org.jeecg.modules.system.app.enums;
+
+import org.jeecg.common.system.annotation.EnumDict;
+
+/**
+ * 意见反馈类型枚举
+ */
+@EnumDict("feedbackType")
+public enum FeedbackTypeEnum {
+//   0-投诉吐槽;1-功能异常;2-用户体验;3-功能建议;4-其他
+    TSTC(0, "投诉吐槽"),
+    GNYC(1, "功能异常"),
+    YHTY(2, "用户体验"),
+    GNJY(3, "功能建议"),
+    QT(4, "其他");
+
+    Integer code;
+    String name;
+    FeedbackTypeEnum(Integer code, String name) {
+        this.code = code;
+        this.name = name;
+    }
+    public Integer getCode() {
+        return code;
+    }
+
+    public void setCode(Integer code) {
+        this.code = code;
+    }
+
+    public void setName(String name) {
+        this.name = name;
+    }
+
+    public String getName() {
+        return name;
+    }
+    public static FeedbackTypeEnum getByCode(Integer code) {
+        for (FeedbackTypeEnum value : values()) {
+            if (value.code.equals(code) ) {
+                return value;
+            }
+        }
+        return null;
+    }
+}

+ 43 - 0
national-motion-module-system/national-motion-system-biz/src/main/java/org/jeecg/modules/system/app/enums/ReplyStatusEnum.java

@@ -0,0 +1,43 @@
+package org.jeecg.modules.system.app.enums;
+
+import org.jeecg.common.system.annotation.EnumDict;
+
+/**
+ * 回复状态枚举
+ */
+@EnumDict("ReplyStatus")
+public enum ReplyStatusEnum {
+//   0-投诉吐槽;1-功能异常;2-用户体验;3-功能建议;4-其他
+    REPLIED(0, "已回复"),
+    NO_REPLY(1, "未回复");
+
+    Integer code;
+    String name;
+    ReplyStatusEnum(Integer code, String name) {
+        this.code = code;
+        this.name = name;
+    }
+    public Integer getCode() {
+        return code;
+    }
+
+    public void setCode(Integer code) {
+        this.code = code;
+    }
+
+    public void setName(String name) {
+        this.name = name;
+    }
+
+    public String getName() {
+        return name;
+    }
+    public static ReplyStatusEnum getByCode(Integer code) {
+        for (ReplyStatusEnum value : values()) {
+            if (value.code.equals(code) ) {
+                return value;
+            }
+        }
+        return null;
+    }
+}

+ 25 - 0
national-motion-module-system/national-motion-system-biz/src/main/java/org/jeecg/modules/system/app/mapper/AppFeedbackMapper.java

@@ -0,0 +1,25 @@
+package org.jeecg.modules.system.app.mapper;
+
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.baomidou.mybatisplus.core.metadata.IPage;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import org.apache.ibatis.annotations.Param;
+import org.apache.ibatis.annotations.Select;
+import org.jeecg.modules.system.app.dto.FindPageRequestDTO;
+import org.jeecg.modules.system.app.dto.FindResponseDTO;
+import org.jeecg.modules.system.app.entity.AppFeedback;
+
+/**
+ * @Description: 意见反馈
+ * @Author: jeecg-boot
+ * @Date:   2025-07-07
+ * @Version: V1.0
+ */
+public interface AppFeedbackMapper extends BaseMapper<AppFeedback> {
+
+    IPage<FindResponseDTO> findPage(@Param("page")Page<FindResponseDTO> page, @Param("findPageRequestDTO") FindPageRequestDTO findPageRequestDTO);
+    @Select(" select  f.id,f.feedback_type,f.feedback_described,f.feedback_img,f.reply_status,f.reply_content,f.create_time,su.username,su.phone from nm_feedback f left join  sys_user su on f.user_id =su.id " +
+            "       where f.del_flag =0 AND f.id = #{id}")
+    FindResponseDTO findById(@Param("id") String id);
+
+}

+ 22 - 0
national-motion-module-system/national-motion-system-biz/src/main/java/org/jeecg/modules/system/app/mapper/FamilyMembersMapper.java

@@ -0,0 +1,22 @@
+package org.jeecg.modules.system.app.mapper;
+
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import org.apache.ibatis.annotations.Param;
+import org.apache.ibatis.annotations.Select;
+import org.jeecg.modules.system.app.entity.FamilyMembers;
+
+import java.util.List;
+
+/**
+ * @Description: 家庭成员信息表
+ * @Author: jeecg-boot
+ * @Date:   2025-07-07
+ * @Version: V1.0
+ */
+public interface FamilyMembersMapper extends BaseMapper<FamilyMembers> {
+
+    @Select("select  * from nm_family_members where  user_id = #{userId} order by user_type asc,create_time desc")
+    List<FamilyMembers> findByUserId(@Param("userId") String userId);
+
+
+}

+ 20 - 0
national-motion-module-system/national-motion-system-biz/src/main/java/org/jeecg/modules/system/app/mapper/xml/AppFeedbackMapper.xml

@@ -0,0 +1,20 @@
+<?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="org.jeecg.modules.system.app.mapper.AppFeedbackMapper">
+
+
+    <select id="findPage" resultType="org.jeecg.modules.system.app.dto.FindResponseDTO">
+        select  f.id,f.feedback_type,f.feedback_described,f.feedback_img,f.reply_status,f.reply_content,f.create_time,su.username,su.phone from nm_feedback f left join  sys_user su on f.user_id =su.id
+        where f.del_flag =0
+        <if test="findPageRequestDTO.phone != null and findPageRequestDTO.phone != ''">
+            and su.phone=#{findPageRequestDTO.phone}
+        </if>
+        <if test="findPageRequestDTO.feedbackType != null and findPageRequestDTO.feedbackType != ''">
+            and f.feedback_type=#{findPageRequestDTO.feedbackType}
+        </if>
+        <if test="findPageRequestDTO.userId != null and findPageRequestDTO.userId != ''">
+            and f.user_id=#{findPageRequestDTO.userId}
+        </if>
+        order by f.create_time desc
+    </select>
+</mapper>

+ 5 - 0
national-motion-module-system/national-motion-system-biz/src/main/java/org/jeecg/modules/system/app/mapper/xml/FamilyMembersMapper.xml

@@ -0,0 +1,5 @@
+<?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="org.jeecg.modules.system.app.mapper.FamilyMembersMapper">
+
+</mapper>

+ 22 - 0
national-motion-module-system/national-motion-system-biz/src/main/java/org/jeecg/modules/system/app/service/IAppFeedbackService.java

@@ -0,0 +1,22 @@
+package org.jeecg.modules.system.app.service;
+
+
+import com.baomidou.mybatisplus.core.metadata.IPage;
+import com.baomidou.mybatisplus.extension.service.IService;
+import org.jeecg.modules.system.app.dto.FindPageRequestDTO;
+import org.jeecg.modules.system.app.dto.FindResponseDTO;
+import org.jeecg.modules.system.app.entity.AppFeedback;
+
+
+/**
+ * @Description: 意见反馈
+ * @Author: jeecg-boot
+ * @Date:   2025-07-07
+ * @Version: V1.0
+ */
+public interface IAppFeedbackService extends IService<AppFeedback> {
+
+    IPage<FindResponseDTO> findPage(Integer pageNo,Integer pageSize, FindPageRequestDTO findPageRequestDTO);
+
+    FindResponseDTO FindById(String id);
+}

+ 25 - 0
national-motion-module-system/national-motion-system-biz/src/main/java/org/jeecg/modules/system/app/service/IFamilyMembersService.java

@@ -0,0 +1,25 @@
+package org.jeecg.modules.system.app.service;
+
+
+import com.baomidou.mybatisplus.extension.service.IService;
+import org.jeecg.common.api.vo.Result;
+import org.jeecg.modules.app.dto.AddFamilyMembersDTO;
+import org.jeecg.modules.system.app.dto.FindFamilyMembersResponseDTO;
+import org.jeecg.modules.system.app.entity.FamilyMembers;
+
+/**
+ * @Description: 家庭成员信息表
+ * @Author: jeecg-boot
+ * @Date:   2025-07-07
+ * @Version: V1.0
+ */
+public interface IFamilyMembersService extends IService<FamilyMembers> {
+
+    Result<FindFamilyMembersResponseDTO> findByUserId(String userId);
+
+    Result<String> addFamilyMembers(AddFamilyMembersDTO addFamilyMembersDTO);
+
+    Result<String> editFamilyMembers(AddFamilyMembersDTO addFamilyMembersDTO);
+
+    Result<String> deleteFamilyMembers(String id);
+}

+ 66 - 0
national-motion-module-system/national-motion-system-biz/src/main/java/org/jeecg/modules/system/app/service/impl/AppFeedbackServiceImpl.java

@@ -0,0 +1,66 @@
+package org.jeecg.modules.system.app.service.impl;
+
+
+import com.baomidou.mybatisplus.core.metadata.IPage;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import org.apache.commons.lang3.StringUtils;
+import org.jeecg.modules.system.app.dto.FindPageRequestDTO;
+import org.jeecg.modules.system.app.dto.FindResponseDTO;
+import org.jeecg.modules.system.app.entity.AppFeedback;
+import org.jeecg.modules.system.app.mapper.AppFeedbackMapper;
+import org.jeecg.modules.system.app.service.IAppFeedbackService;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Service;
+
+import java.util.ArrayList;
+import java.util.Arrays;
+import java.util.List;
+
+/**
+ * @Description: 意见反馈
+ * @Author: jeecg-boot
+ * @Date:   2025-07-07
+ * @Version: V1.0
+ */
+@Service
+public class AppFeedbackServiceImpl extends ServiceImpl<AppFeedbackMapper, AppFeedback> implements IAppFeedbackService {
+
+    @Autowired
+    AppFeedbackMapper appFeedbackMapper;
+
+    @Override
+    public IPage<FindResponseDTO> findPage(Integer pageNo,Integer pageSize, FindPageRequestDTO findPageRequestDTO) {
+        Page<FindResponseDTO> page = new Page<FindResponseDTO>(pageNo, pageSize);
+        IPage<FindResponseDTO> findPage = appFeedbackMapper.findPage(page, findPageRequestDTO);
+        if (findPage!=null){
+            for (FindResponseDTO record : findPage.getRecords()) {
+                if (StringUtils.isNotEmpty(record.getFeedbackImg())){
+                    imgSplit(record);
+                }
+            }
+        }
+        return findPage;
+    }
+
+    @Override
+    public FindResponseDTO FindById(String id) {
+        FindResponseDTO findResponseDTO = appFeedbackMapper.findById(id);
+        if (findResponseDTO!=null&&StringUtils.isNotEmpty(findResponseDTO.getFeedbackImg())){
+            imgSplit(findResponseDTO);
+        }
+        return findResponseDTO;
+    }
+
+
+    private static void imgSplit(FindResponseDTO findResponseDTO ){
+        List<String> strings = new ArrayList<>();
+        if (findResponseDTO.getFeedbackImg().indexOf(";")>0){
+            strings = Arrays.asList(findResponseDTO.getFeedbackImg().split(";"));
+        }else {
+            strings.add(findResponseDTO.getFeedbackImg());
+
+        }
+        findResponseDTO.setFeedbackImgList(strings);
+    }
+}

+ 100 - 0
national-motion-module-system/national-motion-system-biz/src/main/java/org/jeecg/modules/system/app/service/impl/FamilyMembersServiceImpl.java

@@ -0,0 +1,100 @@
+package org.jeecg.modules.system.app.service.impl;
+
+
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import me.zhyd.oauth.utils.UuidUtils;
+import org.apache.commons.lang3.StringUtils;
+import org.jeecg.common.api.vo.Result;
+import org.jeecg.modules.app.dto.AddFamilyMembersDTO;
+import org.jeecg.modules.system.app.dto.FindFamilyMembersResponseDTO;
+import org.jeecg.modules.system.app.entity.FamilyMembers;
+import org.jeecg.modules.system.app.enums.DelFlagEnum;
+import org.jeecg.modules.system.app.mapper.FamilyMembersMapper;
+import org.jeecg.modules.system.app.service.IFamilyMembersService;
+import org.jeecg.modules.system.entity.SysUser;
+import org.jeecg.modules.system.mapper.SysUserMapper;
+import org.springframework.beans.BeanUtils;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Service;
+
+import java.util.Date;
+import java.util.List;
+
+/**
+ * @Description: 家庭成员信息表
+ * @Author: jeecg-boot
+ * @Date:   2025-07-07
+ * @Version: V1.0
+ */
+@Service
+public class FamilyMembersServiceImpl extends ServiceImpl<FamilyMembersMapper, FamilyMembers> implements IFamilyMembersService {
+
+    @Autowired
+    FamilyMembersMapper familyMembersMapper;
+    @Autowired
+    SysUserMapper sysUserMapper;
+
+
+    @Override
+    public Result<FindFamilyMembersResponseDTO> findByUserId(String userId) {
+        if (StringUtils.isEmpty(userId)){
+            return Result.error("请求参数为空");
+        }
+        FindFamilyMembersResponseDTO findFamilyMembersResponseDTO = new FindFamilyMembersResponseDTO();
+
+        //查询用户信息
+        SysUser sysUser = sysUserMapper.selectById(userId);
+        if (sysUser==null){
+            return Result.error("未查询到用户信息,请核实是否正确");
+        }
+        BeanUtils.copyProperties(sysUser,findFamilyMembersResponseDTO);
+        //查询家庭成员列表信息
+        List<FamilyMembers> familyMembersList = familyMembersMapper.findByUserId(userId);
+        findFamilyMembersResponseDTO.setFamilyMembersList(familyMembersList);
+        return Result.ok(findFamilyMembersResponseDTO);
+    }
+
+    @Override
+    public Result<String> addFamilyMembers(AddFamilyMembersDTO addFamilyMembersDTO) {
+        FamilyMembers familyMembers = new FamilyMembers();
+        BeanUtils.copyProperties(addFamilyMembersDTO,familyMembers);
+        familyMembers.setId(UuidUtils.getUUID());
+        familyMembers.setCreateTime(new Date());
+        if (familyMembersMapper.insert(familyMembers)<1){
+            return Result.error("添加家庭成员失败,请联系管理员");
+        }
+        return Result.ok("添加成功");
+    }
+
+    @Override
+    public Result<String> editFamilyMembers(AddFamilyMembersDTO addFamilyMembersDTO) {
+        FamilyMembers familyMembers = new FamilyMembers();
+        BeanUtils.copyProperties(addFamilyMembersDTO,familyMembers);
+        if (StringUtils.isEmpty(familyMembers.getId())){
+            return Result.error("修改家庭成员失败,请选择家庭成员");
+        }
+        familyMembers.setUpdateTime(new Date());
+        if (familyMembersMapper.updateById(familyMembers)<1){
+            return Result.error("修改家庭成员失败,请联系管理员");
+        }
+        return Result.ok("修改成功");
+    }
+
+    @Override
+    public Result<String> deleteFamilyMembers(String id) {
+
+        if (StringUtils.isEmpty(id)){
+            return Result.error("删除失败,请选择需要删除的家庭成员");
+        }
+        FamilyMembers familyMembers = familyMembersMapper.selectById(id);
+        if (familyMembers==null){
+            return Result.error("删除失败,未查询到家庭成员");
+        }
+        familyMembers.setDelFlag(DelFlagEnum.NO_DELETE.getCode());
+        familyMembers.setUpdateTime(new Date());
+        if (familyMembersMapper.updateById(familyMembers)<1){
+            return Result.error("删除家庭成员失败,请联系管理员");
+        }
+        return Result.ok("删除成功");
+    }
+}

+ 5 - 0
national-motion-module-system/national-motion-system-biz/src/main/java/org/jeecg/modules/system/mapper/SysUserMapper.java

@@ -6,6 +6,8 @@ import com.baomidou.mybatisplus.core.toolkit.Constants;
 import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
 import org.apache.ibatis.annotations.Param;
 import org.apache.ibatis.annotations.Select;
+import org.jeecg.modules.system.app.dto.FindPageCUserInfoRequestDTO;
+import org.jeecg.modules.system.app.dto.FindPageCUserInfoResponseDTO;
 import org.jeecg.modules.system.entity.SysUser;
 import com.baomidou.mybatisplus.core.mapper.BaseMapper;
 import org.jeecg.modules.system.model.SysUserSysDepartModel;
@@ -231,4 +233,7 @@ public interface SysUserMapper extends BaseMapper<SysUser> {
 	 * @return
 	 **/
 	List<String> getUserIdListByRoleId(@Param("roleCode") String roleCode);
+
+    IPage<FindPageCUserInfoResponseDTO> findPage(Page<FindPageCUserInfoResponseDTO> page, FindPageCUserInfoRequestDTO findPageCUserInfoRequestDTO);
+
 }

+ 10 - 0
national-motion-module-system/national-motion-system-biz/src/main/java/org/jeecg/modules/system/mapper/xml/SysUserMapper.xml

@@ -303,4 +303,14 @@
 		SELECT b.id FROM `sys_role` a LEFT JOIN sys_user_role b ON a.id = b.role_id
 		WHERE a.role_code = #{roleCode}
 	</select>
+    <select id="findPage" resultType="org.jeecg.modules.system.app.dto.FindPageCUserInfoResponseDTO">
+		select * from (
+		select su.id,su.username,su.avatar,su.phone,su.create_time,fm.real_name_status from sys_user su
+		left join  nm_family_members fm on su.id=fm.userId
+		where su.del_flag=0 and su.org_code='A03' and fm.del_flag=0 and fm.user_type=0 ) t
+		left join
+		(select user_id, count(1) from nm_family_members group by  user_id ) t1 on  t.id=t1.user_id
+		order by  t.create_time desc
+
+	</select>
 </mapper>

+ 4 - 1
national-motion-module-system/national-motion-system-biz/src/main/java/org/jeecg/modules/system/service/ISysUserService.java

@@ -9,6 +9,8 @@ import com.baomidou.mybatisplus.extension.service.IService;
 import org.jeecg.common.api.vo.Result;
 import org.jeecg.common.system.vo.LoginUser;
 import org.jeecg.common.system.vo.SysUserCacheInfo;
+import org.jeecg.modules.system.app.dto.FindPageCUserInfoRequestDTO;
+import org.jeecg.modules.system.app.dto.FindPageCUserInfoResponseDTO;
 import org.jeecg.modules.system.entity.SysRoleIndex;
 import org.jeecg.modules.system.entity.SysUser;
 import org.jeecg.modules.system.model.SysUserSysDepartModel;
@@ -19,7 +21,6 @@ import org.springframework.transaction.annotation.Transactional;
 import org.springframework.web.servlet.ModelAndView;
 
 import javax.servlet.http.HttpServletRequest;
-import java.io.IOException;
 import java.util.Collection;
 import java.util.List;
 import java.util.Map;
@@ -482,4 +483,6 @@ public interface ISysUserService extends IService<SysUser> {
      * @param username
      */
     void updatePasswordNotBindPhone(String oldPassword, String password, String username);
+
+    IPage<FindPageCUserInfoResponseDTO> findByCUserInfo(Integer pageNo, Integer pageSize, FindPageCUserInfoRequestDTO findPageCUserInfoRequestDTO);
 }

+ 15 - 2
national-motion-module-system/national-motion-system-biz/src/main/java/org/jeecg/modules/system/service/impl/SysUserServiceImpl.java

@@ -37,6 +37,8 @@ import org.jeecg.config.mybatis.MybatisPlusSaasConfig;
 import org.jeecg.modules.base.service.BaseCommonService;
 import org.jeecg.modules.jmreport.common.util.OkConvertUtils;
 import org.jeecg.modules.message.handle.impl.SystemSendMsgHandle;
+import org.jeecg.modules.system.app.dto.FindPageCUserInfoRequestDTO;
+import org.jeecg.modules.system.app.dto.FindPageCUserInfoResponseDTO;
 import org.jeecg.modules.system.entity.*;
 import org.jeecg.modules.system.mapper.*;
 import org.jeecg.modules.system.model.SysUserSysDepartModel;
@@ -58,11 +60,9 @@ import org.jeecgframework.poi.excel.entity.ImportParams;
 import org.jeecgframework.poi.excel.view.JeecgEntityExcelView;
 import org.jetbrains.annotations.Nullable;
 import org.springframework.beans.BeanUtils;
-import org.springframework.beans.factory.NoSuchBeanDefinitionException;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.cache.annotation.CacheEvict;
 import org.springframework.cache.annotation.Cacheable;
-import org.springframework.context.annotation.Lazy;
 import org.springframework.stereotype.Service;
 import org.springframework.transaction.annotation.Transactional;
 import org.springframework.web.multipart.MultipartFile;
@@ -2356,4 +2356,17 @@ public class SysUserServiceImpl extends ServiceImpl<SysUserMapper, SysUser> impl
         String newPassWord = PasswordUtil.encrypt(username, password, user.getSalt());
         this.userMapper.update(new SysUser().setPassword(newPassWord), new LambdaQueryWrapper<SysUser>().eq(SysUser::getId, user.getId()));
     }
+
+	/**
+	 * 查询c端用户信息
+	 * @param pageNo
+	 * @param pageSize
+	 * @param findPageCUserInfoRequestDTO
+	 * @return
+	 */
+	@Override
+	public IPage<FindPageCUserInfoResponseDTO> findByCUserInfo(Integer pageNo, Integer pageSize, FindPageCUserInfoRequestDTO findPageCUserInfoRequestDTO) {
+		Page<FindPageCUserInfoResponseDTO> page = new Page<FindPageCUserInfoResponseDTO>(pageNo, pageSize);
+		return userMapper.findPage(page, findPageCUserInfoRequestDTO);
+	}
 }