浏览代码

1.新增资产投诉功能
2.资产绩效扣分统计报表统计投诉相关数据
3.我的订单返回项目负责人和客户经理id

GouGengquan 1 周之前
父节点
当前提交
5318f3f107

+ 118 - 0
biz-base/src/main/java/com/dayou/controller/AssetsComplaintController.java

@@ -0,0 +1,118 @@
+package com.dayou.controller;
+
+import com.dayou.dto.AssetsComplaintSelectDTO;
+import com.dayou.vo.AssetsComplaintVO;
+import org.apache.poi.xssf.usermodel.XSSFWorkbook;
+import lombok.extern.slf4j.Slf4j;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.web.bind.annotation.RequestMapping;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.baomidou.mybatisplus.core.metadata.IPage;
+import org.springframework.web.bind.annotation.RestController;
+import com.dayou.controller.BaseController;
+import com.dayou.service.IAssetsComplaintService;
+import com.dayou.entity.AssetsComplaint;
+import com.dayou.common.RestResponse;
+import org.springframework.web.bind.annotation.*;
+import com.dayou.utils.ConvertUtil;
+import com.dayou.utils.HttpKit;
+import com.dayou.exception.ErrorCode;
+
+import java.util.Date;
+import java.util.List;
+
+import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
+import org.springframework.http.MediaType;
+import org.springframework.web.multipart.MultipartFile;
+
+/**
+ * 资产业务项目投诉表
+ *
+ * @author GouGengquan
+ * @since 2025-07-16
+ */
+@RestController
+@RequestMapping("assetsComplaint")
+@Slf4j
+public class AssetsComplaintController extends BaseController {
+    @Autowired
+    private IAssetsComplaintService assetsComplaintService;
+
+    /**
+     * 查询投诉信息分页
+     *
+     * @param dto 查询参数
+     * @return List<AssetsComplaintVO>
+     */
+    @GetMapping("/page")
+    public RestResponse<Page<AssetsComplaintVO>> page(Page page, AssetsComplaintSelectDTO dto) {
+        Page<AssetsComplaintVO> pages = assetsComplaintService.selectPage(page, dto);
+        return RestResponse.data(pages);
+    }
+
+    /**
+     * 查询投诉信息集合
+     *
+     * @param dto 查询参数
+     * @return List<AssetsComplaintVO>
+     */
+    @GetMapping("/list")
+    public RestResponse<List<AssetsComplaintVO>> listData(AssetsComplaintSelectDTO dto) {
+        return RestResponse.data(assetsComplaintService.listData(dto));
+    }
+
+    /**
+     * 撤销投诉
+     */
+    @PutMapping("/cancel/{id}")
+    public RestResponse<Boolean> cancelComplaint(@PathVariable Long id) {
+        return RestResponse.data(assetsComplaintService.cancelComplaint(id));
+    }
+
+    /**
+     * 确认投诉
+     */
+    @PutMapping("/confirm/{id}")
+    public RestResponse<Boolean> confirmComplaint(@PathVariable Long id) {
+        return RestResponse.data(assetsComplaintService.confirmComplaint(id));
+    }
+
+    /**
+     * 资产业务项目投诉表详情
+     */
+    @GetMapping("/detail/{id}")
+    public RestResponse<AssetsComplaint> detail(@PathVariable Long id) {
+        AssetsComplaint xAssetsComplaint = assetsComplaintService.detail(id);
+        return RestResponse.data(xAssetsComplaint);
+    }
+
+    /**
+     * 资产业务项目投诉表新增
+     */
+    @PostMapping("/save")
+    public RestResponse<Boolean> save(@RequestBody AssetsComplaint assetsComplaint) {
+        Boolean ret = assetsComplaintService.add(assetsComplaint);
+        return RestResponse.data(ret);
+    }
+
+    /**
+     * 资产业务项目投诉表更新
+     */
+    @PutMapping("/update")
+    public RestResponse<Boolean> update(@RequestBody AssetsComplaint assetsComplaint) {
+        Boolean ret = assetsComplaintService.update(assetsComplaint);
+        return RestResponse.data(ret);
+    }
+
+    /**
+     * 资产业务项目投诉表删除
+     */
+    @DeleteMapping("/delete/{id}")
+    public RestResponse<Boolean> delete(@PathVariable Long id) {
+        Boolean ret = assetsComplaintService.delete(id);
+        return RestResponse.data(ret);
+    }
+
+
+}
+

+ 22 - 0
biz-base/src/main/java/com/dayou/controller/AssetsStatisticalStatementController.java

@@ -2,6 +2,7 @@ package com.dayou.controller;
 
 import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
 import com.dayou.common.RestResponse;
+import com.dayou.dto.AssetsComplaintSelectDTO;
 import com.dayou.dto.AssetsStatisticalSelectDTO;
 import com.dayou.service.IAssetsStatisticalStatementService;
 import com.dayou.vo.*;
@@ -97,6 +98,27 @@ public class AssetsStatisticalStatementController extends BaseController{
     }
 
     /**
+     * 查询投诉详情列表
+     * @param page 分页
+     * @param dto 查询dto
+     * @return Page<AssetsPerformanceDeductionDetailVO>
+     */
+    @GetMapping("/getAssetsComplaintDetail")
+    public RestResponse<Page<AssetsComplaintVO>> getAssetsComplaintDetail(Page page, AssetsComplaintSelectDTO dto) {
+        return RestResponse.data(assetsStatisticalStatementService.getAssetsComplaintDetail(page, dto));
+    }
+
+    /**
+     * 投诉详情列表导出
+     * @param dto 查询dto
+     */
+    @GetMapping("/getAssetsComplaintDetail/export")
+    public void assetsComplaintDetailExport(AssetsComplaintSelectDTO dto, HttpServletResponse response) throws IOException {
+        List<AssetsComplaintVO> result = assetsStatisticalStatementService.assetsComplaintDetailExport(dto);
+        exportPlus(response, "投诉详情", result, AssetsComplaintVO.class);
+    }
+
+    /**
      * 评估人员绩效扣分查询
      * @param dto 查询dto
      * @return List<AssetsPerformanceDeductionVO>

+ 36 - 0
dao/src/main/java/com/dayou/mapper/AssetsComplaintMapper.java

@@ -0,0 +1,36 @@
+package com.dayou.mapper;
+
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.dayou.dto.AssetsComplaintSelectDTO;
+import com.dayou.entity.AssetsComplaint;
+import com.dayou.dao.CustomBaseMapper;
+import com.dayou.vo.AssetsComplaintVO;
+import org.apache.ibatis.annotations.Param;
+
+import java.util.List;
+
+/**
+ * <p>
+ * 资产业务项目投诉表 Mapper 接口
+ * </p>
+ *
+ * @author GouGengquan
+ * @since 2025-07-16
+ */
+public interface AssetsComplaintMapper extends CustomBaseMapper<AssetsComplaint> {
+
+    /**
+     * 查询投诉信息分页
+     * @param dto 查询参数
+     * @return List<AssetsComplaintVO>
+     */
+    Page<AssetsComplaintVO> pageData(@Param("page") Page page,@Param("dto") AssetsComplaintSelectDTO dto);
+
+    /**
+     * 查询投诉信息集合
+     * @param dto 查询参数
+     * @return List<AssetsComplaintVO>
+     */
+    List<AssetsComplaintVO> listData(@Param("dto") AssetsComplaintSelectDTO dto);
+
+}

+ 16 - 0
dao/src/main/java/com/dayou/mapper/AssetsStatisticalStatementMapper.java

@@ -1,6 +1,7 @@
 package com.dayou.mapper;
 
 import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.dayou.dto.AssetsComplaintSelectDTO;
 import com.dayou.dto.AssetsStatisticalSelectDTO;
 import com.dayou.vo.*;
 import org.apache.ibatis.annotations.Param;
@@ -53,6 +54,21 @@ public interface AssetsStatisticalStatementMapper {
     List<AssetsPerformanceDeductionDetailVO> assetsPerformanceDeductionDetailExport(@Param("dto") AssetsStatisticalSelectDTO dto);
 
     /**
+     * 查询投诉详情列表
+     * @param page 分页
+     * @param dto 查询dto
+     * @return Page<AssetsPerformanceDeductionDetailVO>
+     */
+    Page<AssetsComplaintVO> getAssetsComplaintDetail(@Param("page") Page page, @Param("dto") AssetsComplaintSelectDTO dto);
+
+    /**
+     * 投诉详情列表导出
+     * @param dto 查询dto
+     * @return Page<AssetsPerformanceDeductionDetailVO>
+     */
+    List<AssetsComplaintVO> assetsComplaintDetailExport(@Param("dto") AssetsComplaintSelectDTO dto);
+
+    /**
      * 评估人员绩效扣分查询
      * @param dto 查询dto
      * @return List<AssetsPerformanceDeductionVO>

+ 75 - 0
dao/src/main/resources/mapper/AssetsComplaintMapper.xml

@@ -0,0 +1,75 @@
+<?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.dayou.mapper.AssetsComplaintMapper">
+
+    <!-- 通用查询映射结果 -->
+    <resultMap id="BaseResultMap" type="com.dayou.entity.AssetsComplaint">
+        <result column="id" property="id"/>
+        <result column="deleted" property="deleted"/>
+        <result column="created" property="created"/>
+        <result column="modified" property="modified"/>
+        <result column="complainant_id" property="complainantId"/>
+        <result column="respondent_id" property="respondentId"/>
+        <result column="reason" property="reason"/>
+        <result column="business_id" property="businessId"/>
+        <result column="order_id" property="orderId"/>
+        <result column="state" property="state"/>
+        <result column="confirm_date" property="checkDate"/>
+    </resultMap>
+
+    <!-- 通用查询结果列 -->
+    <sql id="Base_Column_List">
+        id,
+        deleted,
+        created,
+        modified,
+        complainant_id, respondent_id, reason, business_id, order_id, state, confirm_date
+    </sql>
+
+    <!--查询投诉信息分页-->
+    <select id="pageData" resultType="com.dayou.vo.AssetsComplaintVO">
+        <include refid="querySql" />
+    </select>
+
+    <!--查询投诉信息集合-->
+    <select id="listData" resultType="com.dayou.vo.AssetsComplaintVO">
+        <include refid="querySql" />
+    </select>
+
+    <sql id="querySql">
+        SELECT complaint.complainant_type,
+               complaint.id,
+               complaint.business_id,
+               complaint.order_id,
+               complaint.state,
+               checker.name AS checkerName,
+               complaint.check_date,
+               complaint.reason,
+               complainant.name AS complainantName,
+               respondent.name AS respondentName,
+               complaint.created
+        FROM assets_complaint AS complaint
+        LEFT JOIN user AS complainant ON complainant.id = complaint.complainant_id
+        LEFT JOIN user AS respondent ON respondent.id = complaint.respondent_id
+        LEFT JOIN user AS checker ON checker.id = complaint.checker_id
+        WHERE complaint.deleted = 0
+        <if test="dto != null">
+            <if test="dto.complainantId != null">
+                AND complaint.complainant_id = #{dto.complainantId}
+            </if>
+            <if test="dto.respondentId != null">
+                AND complaint.respondent_id = #{dto.respondentId}
+            </if>
+            <if test="dto.orderId != null">
+                AND complaint.order_id = #{dto.orderId}
+            </if>
+            <if test="dto.complainantType != null">
+                AND complaint.complainant_type = #{dto.complainantType}
+            </if>
+            <if test="dto.state != null">
+                AND complaint.state = #{dto.state}
+            </if>
+        </if>
+    </sql>
+
+</mapper>

+ 2 - 0
dao/src/main/resources/mapper/AssetsMapper.xml

@@ -255,8 +255,10 @@
         # invoice.real_amount AS invoiceRealAmount,
         (SELECT SUM(real_amount) FROM finance_invoice WHERE order_fund_id = fund.id AND finance_invoice.production_fund_id = pFund.id AND deleted = 0) AS invoiceRealAmount,
         #查询客户经理
+        assets.client_manager_id,
         (SELECT name FROM user WHERE id = assets.client_manager_id) AS clientManagerName,
         #查询项目负责人
+        assets.principal_id,
         (SELECT name FROM user WHERE id = assets.principal_id) AS principalName,
         #查询业务来源(即子级客户)
         (SELECT customer_company.name FROM customer_company WHERE customer_company.id = clientele_sub_id) AS customerSubName,

文件差异内容过多而无法显示
+ 94 - 2
dao/src/main/resources/mapper/AssetsStatisticalStatementMapper.xml


+ 58 - 0
domain/src/main/java/com/dayou/dto/AssetsComplaintSelectDTO.java

@@ -0,0 +1,58 @@
+package com.dayou.dto;
+
+import com.fasterxml.jackson.annotation.JsonFormat;
+import lombok.Data;
+
+import java.util.Date;
+
+@Data
+public class AssetsComplaintSelectDTO {
+
+    /**
+     * 投诉人用户id
+     */
+    private Long complainantId;
+
+    /**
+     * 被投诉项目负责人用户id
+     */
+    private Long respondentId;
+
+    /**
+     * 部门id
+     */
+    private Long departmentId;
+
+    /**
+     * 业务id
+     */
+    private Long businessId;
+
+    /**
+     * 关联的资产业务项目编号
+     */
+    private String orderId;
+
+    /**
+     * 投诉状态枚举(待确认、已确认、撤销)
+     */
+    private String state;
+
+    /**
+     * 投诉类型(内部投诉、外部投诉)
+     */
+    private String complainantType;
+
+    /**
+     * 筛选开始时间
+     */
+    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
+    private Date startTime;
+
+    /**
+     * 筛选结束时间
+     */
+    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
+    private Date endTime;
+
+}

+ 80 - 0
domain/src/main/java/com/dayou/entity/AssetsComplaint.java

@@ -0,0 +1,80 @@
+package com.dayou.entity;
+import com.dayou.common.BaseEntity;
+
+import java.io.Serializable;
+import java.time.LocalDateTime;
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+import com.dayou.annotation.ExcelSheet;
+import com.dayou.annotation.ExportCell;
+import com.dayou.annotation.ImportCell;
+/**
+ * <p>
+ * 资产业务项目投诉表
+ * </p>
+ *
+ * @author GouGengquan
+ * @since 2025-07-16
+ */
+@Data
+@EqualsAndHashCode(callSuper = true)
+@ExcelSheet(sheetName = "资产业务项目投诉表")
+public class AssetsComplaint extends BaseEntity implements Serializable {
+
+    private static final long serialVersionUID=1L;
+
+    /**
+     * 投诉类型枚举(内部/外部)
+     */
+    private String complainantType;
+
+    /**
+     * 投诉人用户id
+     */
+    private Long complainantId;
+
+    /**
+     * 被投诉项目负责人
+     */
+    private Long respondentId;
+
+    /**
+     * 投诉原因
+     */
+    @ImportCell
+    @ExportCell(columnName = "投诉原因")
+    private String reason;
+
+    /**
+     * 关联的资产业务id
+     */
+    private Long businessId;
+
+    /**
+     * 关联的资产业务项目编号
+     */
+    @ImportCell
+    @ExportCell(columnName = "关联的资产业务项目编号")
+    private String orderId;
+
+    /**
+     * 投诉状态枚举(待确认、已确认、撤销)
+     */
+    @ImportCell
+    @ExportCell(columnName = "投诉状态枚举(待确认、已确认、撤销)")
+    private String state;
+
+    /**
+     * 审核人id
+     */
+    private Long checkerId;
+
+    /**
+     * 确认投诉时间
+     */
+    @ImportCell
+    @ExportCell(columnName = "审核时间")
+    private LocalDateTime checkDate;
+
+
+}

+ 95 - 0
domain/src/main/java/com/dayou/vo/AssetsComplaintVO.java

@@ -0,0 +1,95 @@
+package com.dayou.vo;
+
+import com.fasterxml.jackson.annotation.JsonFormat;
+import lombok.Data;
+
+import java.time.LocalDateTime;
+import java.util.Date;
+
+@Data
+public class AssetsComplaintVO {
+
+    /**
+     * 主键自增id
+     */
+    protected Long id;
+
+    /**
+     * 投诉类型枚举(内部/外部)
+     */
+    private String complainantType;
+
+    /**
+     * 投诉人用户id
+     */
+    private Long complainantId;
+
+    /**
+     * 投诉人用户名
+     */
+    private String complainantName;
+
+    /**
+     * 被投诉项目负责人用户id
+     */
+    private Long respondentId;
+
+    /**
+     * 被投诉项目负责人用户名
+     */
+    private String respondentName;
+
+    /**
+     * 投诉原因
+     */
+    private String reason;
+
+    /**
+     * 关联的资产业务id
+     */
+    private Long businessId;
+
+    /**
+     * 关联的资产业务项目编号
+     */
+    private String orderId;
+
+    /**
+     * 投诉状态枚举(待确认、已确认、撤销)
+     */
+    private String state;
+
+    /**
+     * 审核人id
+     */
+    private Long checkerId;
+
+    /**
+     * 审核人姓名
+     */
+    private String checkerName;
+
+    /**
+     * 审核时间
+     */
+    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
+    private LocalDateTime checkDate;
+
+    /**
+     * 创建时间
+     */
+    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
+    private Date created;
+
+    /**
+     * 修改时间
+     */
+    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
+    private Date modified;
+
+    /**
+     * 标志位
+     */
+    private Boolean deleted;
+
+}

+ 53 - 41
domain/src/main/java/com/dayou/vo/AssetsPerformanceDeductionVO.java

@@ -82,47 +82,59 @@ public class AssetsPerformanceDeductionVO {
     @Excel(name = "四审严重错误")
     private Integer fourthCheckFatalMistakeScore;
 
-    /**
-     * 外部投诉一般错误扣分
-     */
-    @Excel(name = "外部投诉一般错误")
-    private Integer externalComplaintNormalMistakeScore;
-
-    /**
-     * 外部投诉较大错误扣分
-     */
-    @Excel(name = "外部投诉较大错误")
-    private Integer externalComplaintHardMistakeScore;
-
-    /**
-     * 外部投诉严重错误扣分
-     */
-    @Excel(name = "外部投诉严重错误")
-    private Integer externalComplaintFatalMistakeScore;
-
-    /**
-     * 外部投诉服务态度恶劣
-     */
-    @Excel(name = "服务态度恶劣")
-    private Integer badServiceAttitude;
-
-    /**
-     * 内部投诉一般错误扣分
-     */
-    @Excel(name = "内部投诉一般错误")
-    private Integer internalComplaintNormalMistakeScore;
-
-    /**
-     * 内部投诉较大错误扣分
-     */
-    @Excel(name = "内部投诉较大错误")
-    private Integer internalComplaintHardMistakeScore;
-
-    /**
-     * 内部投诉严重错误扣分
-     */
-    @Excel(name = "内部投诉严重错误")
-    private Integer internalComplaintFatalMistakeScore;
+//    /**
+//     * 外部投诉一般错误扣分
+//     */
+//    @Excel(name = "外部投诉一般错误")
+//    private Integer externalComplaintNormalMistakeScore;
+//
+//    /**
+//     * 外部投诉较大错误扣分
+//     */
+//    @Excel(name = "外部投诉较大错误")
+//    private Integer externalComplaintHardMistakeScore;
+//
+//    /**
+//     * 外部投诉严重错误扣分
+//     */
+//    @Excel(name = "外部投诉严重错误")
+//    private Integer externalComplaintFatalMistakeScore;
+//
+//    /**
+//     * 外部投诉服务态度恶劣
+//     */
+//    @Excel(name = "服务态度恶劣")
+//    private Integer badServiceAttitude;
+//
+//    /**
+//     * 内部投诉一般错误扣分
+//     */
+//    @Excel(name = "内部投诉一般错误")
+//    private Integer internalComplaintNormalMistakeScore;
+//
+//    /**
+//     * 内部投诉较大错误扣分
+//     */
+//    @Excel(name = "内部投诉较大错误")
+//    private Integer internalComplaintHardMistakeScore;
+//
+//    /**
+//     * 内部投诉严重错误扣分
+//     */
+//    @Excel(name = "内部投诉严重错误")
+//    private Integer internalComplaintFatalMistakeScore;
+
+    /**
+     * 内部投诉错误扣分
+     */
+    @Excel(name = "内部投诉错误扣分")
+    private Integer internalComplaintScore;
+
+    /**
+     * 外部投诉错误扣分
+     */
+    @Excel(name = "外部投诉错误扣分")
+    private Integer externalComplaintScore;
 
     /**
      * 扣分合计

+ 1 - 1
gen/src/main/java/com/dayou/CodeGenerator.java

@@ -46,7 +46,7 @@ public class CodeGenerator {
         //如果需要额外生成一个备份,则设置输出路径,否则直接设为null,因为下面每个模块已经单独设置了输出目录
         //gc.setOutputDir(projectPath+"/gen");
         gc.setOutputDir(null);
-        gc.setAuthor("wucl");
+        gc.setAuthor("GouGengquan");
         gc.setOpen(false);
         gc.setBaseResultMap(true);
         gc.setBaseColumnList(true);

+ 62 - 0
service/src/main/java/com/dayou/service/IAssetsComplaintService.java

@@ -0,0 +1,62 @@
+package com.dayou.service;
+
+import com.dayou.dto.AssetsComplaintSelectDTO;
+import com.dayou.entity.AssetsComplaint;
+import com.baomidou.mybatisplus.extension.service.IService;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.dayou.vo.AssetsComplaintVO;
+
+import java.util.List;
+
+/**
+ * <p>
+ * 资产业务项目投诉表 服务类
+ * </p>
+ *
+ * @author GouGengquan
+ * @since 2025-07-16
+ */
+public interface IAssetsComplaintService extends IService<AssetsComplaint> {
+
+    /**
+     * 查询投诉信息分页
+     * @param dto 查询参数
+     * @return List<AssetsComplaintVO>
+     */
+    Page<AssetsComplaintVO> selectPage(Page page, AssetsComplaintSelectDTO dto);
+
+    /**
+     * 查询投诉信息集合
+     * @param dto 查询参数
+     * @return List<AssetsComplaintVO>
+     */
+    List<AssetsComplaintVO> listData(AssetsComplaintSelectDTO dto);
+
+    /**
+     * 撤销投诉
+     * @param id 主键id
+     * @return Boolean
+     */
+    Boolean cancelComplaint(Long id);
+
+    /**
+     * 确认投诉
+     * @param id 主键id
+     * @return Boolean
+     */
+    Boolean confirmComplaint(Long id);
+
+    AssetsComplaint detail(Long id);
+
+    /**
+     * 新增投诉
+     * @param assetsComplaint 投诉信息
+     * @return Boolean
+     */
+    Boolean add(AssetsComplaint assetsComplaint);
+
+    Boolean update(AssetsComplaint assetsComplaint);
+
+    Boolean delete(Long id);
+
+}

+ 16 - 0
service/src/main/java/com/dayou/service/IAssetsStatisticalStatementService.java

@@ -1,6 +1,7 @@
 package com.dayou.service;
 
 import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.dayou.dto.AssetsComplaintSelectDTO;
 import com.dayou.dto.AssetsStatisticalSelectDTO;
 import com.dayou.vo.*;
 
@@ -60,6 +61,21 @@ public interface IAssetsStatisticalStatementService {
     List<AssetsPerformanceDeductionDetailVO> assetsPerformanceDeductionDetailExport(AssetsStatisticalSelectDTO dto);
 
     /**
+     * 查询投诉详情列表
+     * @param page 分页
+     * @param dto 查询dto
+     * @return Page<AssetsPerformanceDeductionDetailVO>
+     */
+    Page<AssetsComplaintVO> getAssetsComplaintDetail(Page page, AssetsComplaintSelectDTO dto);
+
+    /**
+     * 投诉详情列表导出
+     * @param dto 查询dto
+     * @return Page<AssetsPerformanceDeductionDetailVO>
+     */
+    List<AssetsComplaintVO> assetsComplaintDetailExport(AssetsComplaintSelectDTO dto);
+
+    /**
      * 评估人员绩效扣分查询
      * @param dto 查询dto
      * @return List<AssetsPerformanceDeductionVO>

+ 129 - 0
service/src/main/java/com/dayou/service/impl/AssetsComplaintServiceImpl.java

@@ -0,0 +1,129 @@
+package com.dayou.service.impl;
+
+import com.dayou.common.BaseEntity;
+import com.dayou.dto.AssetsComplaintSelectDTO;
+import com.dayou.entity.AssetsComplaint;
+import com.dayou.mapper.AssetsComplaintMapper;
+import com.dayou.service.IAssetsComplaintService;
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import com.dayou.utils.LoginContext;
+import com.dayou.vo.AssetsComplaintVO;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Service;
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.baomidou.mybatisplus.core.metadata.IPage;
+import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
+import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
+import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper;
+import com.baomidou.mybatisplus.core.conditions.update.UpdateWrapper;
+import com.dayou.utils.ExcelUtil;
+import org.apache.poi.ss.usermodel.Cell;
+import org.apache.poi.ss.usermodel.CellStyle;
+import org.apache.poi.ss.usermodel.Row;
+import org.apache.poi.ss.usermodel.Sheet;
+import org.apache.poi.xssf.usermodel.XSSFWorkbook;
+import org.springframework.web.multipart.MultipartFile;
+
+import java.util.Date;
+import java.util.List;
+import java.util.ArrayList;
+
+import org.springframework.transaction.annotation.Transactional;
+import com.dayou.enums.BatchTaskTypeEnum;
+
+/**
+ * <p>
+ * 资产业务项目投诉表 服务实现类
+ * </p>
+ *
+ * @author GouGengquan
+ * @since 2025-07-16
+ */
+@Service
+public class AssetsComplaintServiceImpl extends ServiceImpl<AssetsComplaintMapper, AssetsComplaint> implements IAssetsComplaintService {
+
+    @Autowired
+    private AssetsComplaintMapper assetsComplaintMapper;
+
+    /**
+     * 查询投诉信息分页
+     *
+     * @param dto 查询参数
+     * @return List<AssetsComplaintVO>
+     */
+    @Override
+    public Page<AssetsComplaintVO> selectPage(Page page, AssetsComplaintSelectDTO dto) {
+        return assetsComplaintMapper.pageData(page, dto);
+    }
+
+    /**
+     * 查询投诉信息集合
+     *
+     * @param dto 查询参数
+     * @return List<AssetsComplaintVO>
+     */
+    @Override
+    public List<AssetsComplaintVO> listData(AssetsComplaintSelectDTO dto) {
+        return assetsComplaintMapper.listData(dto);
+    }
+
+    /**
+     * 撤销投诉
+     *
+     * @param id 主键id
+     * @return Boolean
+     */
+    @Override
+    public Boolean cancelComplaint(Long id) {
+        return this.update(new LambdaUpdateWrapper<AssetsComplaint>()
+                .set(AssetsComplaint::getState, "CANCEL")
+                .set(AssetsComplaint::getCheckerId, LoginContext.getCurrentUserId())
+                .set(AssetsComplaint::getCheckDate, new Date())
+                .eq(BaseEntity::getId, id)
+                .eq(BaseEntity::getDeleted, false));
+    }
+
+    /**
+     * 确认投诉
+     *
+     * @param id 主键id
+     * @return Boolean
+     */
+    @Override
+    public Boolean confirmComplaint(Long id) {
+        return this.update(new LambdaUpdateWrapper<AssetsComplaint>()
+                .set(AssetsComplaint::getState, "CONFIRM")
+                .set(AssetsComplaint::getCheckerId, LoginContext.getCurrentUserId())
+                .set(AssetsComplaint::getCheckDate, new Date())
+                .eq(BaseEntity::getId, id)
+                .eq(BaseEntity::getDeleted, false));
+    }
+
+    @Override
+    public AssetsComplaint detail(Long id) {
+        return this.getById(id);
+    }
+
+    /**
+     * 新增投诉
+     * @param assetsComplaint 投诉信息
+     * @return Boolean
+     */
+    @Override
+    public Boolean add(AssetsComplaint assetsComplaint) {
+        assetsComplaint.setComplainantId(LoginContext.getCurrentUserId());
+        return this.save(assetsComplaint);
+    }
+
+    @Override
+    public Boolean update(AssetsComplaint assetsComplaint) {
+        return this.updateById(assetsComplaint);
+    }
+
+    @Override
+    public Boolean delete(Long id) {
+        //逻辑删除
+        return this.removeById(id);
+    }
+}

+ 22 - 0
service/src/main/java/com/dayou/service/impl/AssetsStatisticalStatementServiceImpl.java

@@ -5,6 +5,7 @@ import cn.hutool.core.util.ObjectUtil;
 import com.alibaba.fastjson.JSONArray;
 import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
 import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.dayou.dto.AssetsComplaintSelectDTO;
 import com.dayou.dto.AssetsStatisticalSelectDTO;
 import com.dayou.entity.AssetsEvaluationMethod;
 import com.dayou.entity.User;
@@ -129,6 +130,27 @@ public class AssetsStatisticalStatementServiceImpl implements IAssetsStatistical
     }
 
     /**
+     * 查询投诉详情列表
+     * @param page 分页
+     * @param dto 查询dto
+     * @return Page<AssetsPerformanceDeductionDetailVO>
+     */
+    @Override
+    public Page<AssetsComplaintVO> getAssetsComplaintDetail(Page page, AssetsComplaintSelectDTO dto) {
+        return assetsStatisticalStatementMapper.getAssetsComplaintDetail(page, dto);
+    }
+
+    /**
+     * 投诉详情列表导出
+     * @param dto 查询dto
+     * @return Page<AssetsPerformanceDeductionDetailVO>
+     */
+    @Override
+    public List<AssetsComplaintVO> assetsComplaintDetailExport(AssetsComplaintSelectDTO dto) {
+        return assetsStatisticalStatementMapper.assetsComplaintDetailExport(dto);
+    }
+
+    /**
      * 评估人员绩效扣分查询
      *
      * @param dto 查询dto

+ 26 - 1
sql/update_sql.sql

@@ -975,4 +975,29 @@ CREATE TABLE `business_number_recycle`  (
                                                   `created` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
                                                   `modified` timestamp(6) NOT NULL DEFAULT CURRENT_TIMESTAMP(6) ON UPDATE CURRENT_TIMESTAMP(6) COMMENT '修改时间',
                                                   PRIMARY KEY (`id`) USING BTREE
-) ENGINE = InnoDB AUTO_INCREMENT = 1 CHARACTER SET = utf8mb3 COLLATE = utf8mb3_unicode_ci COMMENT = '业务号回收' ROW_FORMAT = Dynamic;
+) ENGINE = InnoDB AUTO_INCREMENT = 1 CHARACTER SET = utf8mb3 COLLATE = utf8mb3_unicode_ci COMMENT = '业务号回收' ROW_FORMAT = Dynamic;
+
+/**
+  日期:2025-07-16
+  修改人:苟耕铨
+  未更新到test-env
+ */
+#  新增资产业务投诉表
+CREATE TABLE `assets_complaint`
+(
+    `id`               bigint(20)                                             NOT NULL AUTO_INCREMENT COMMENT '自增主键',
+    `complainant_type` enum ('INTERNAL','EXTERNAL')                           NOT NULL COMMENT '投诉类型枚举(内部/外部)',
+    `complainant_id`   bigint(20)                                             NOT NULL COMMENT '投诉人用户id',
+    `respondent_id`    bigint(20)                                             NOT NULL COMMENT '被投诉项目负责人用户id',
+    `reason`           varchar(500)                                           NOT NULL COMMENT '投诉原因',
+    `business_id`      bigint(20)                                             NOT NULL COMMENT '关联的资产业务id',
+    `order_id`         varchar(32) CHARACTER SET utf8 COLLATE utf8_unicode_ci NOT NULL COMMENT '关联的资产业务项目编号',
+    `state`            enum ('PENDING','CONFIRM','CANCEL')                    NOT NULL DEFAULT 'PENDING' COMMENT '投诉状态枚举(待确认、已确认、撤销)',
+    `checker_id`       bigint(20)                                                      DEFAULT NULL COMMENT '审核人id',
+    `check_date`       datetime                                                        DEFAULT NULL COMMENT '审核时间',
+    `deleted`          bit(1)                                                 NOT NULL DEFAULT b'0' COMMENT '逻辑删除标识:1:删除 0:未删除',
+    `created`          datetime                                               NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
+    `modified`         timestamp(6)                                           NOT NULL DEFAULT CURRENT_TIMESTAMP(6) ON UPDATE CURRENT_TIMESTAMP(6) COMMENT '修改时间',
+    PRIMARY KEY (`id`) USING BTREE
+) ENGINE = InnoDB
+  DEFAULT CHARSET = utf8mb4 COMMENT ='资产业务项目投诉表';