diff --git a/smart-flow-api/sa-admin/src/main/java/net/lab1024/sa/admin/module/business/jwpy/controller/WtczController.java b/smart-flow-api/sa-admin/src/main/java/net/lab1024/sa/admin/module/business/jwpy/controller/WtczController.java new file mode 100644 index 0000000..b1de755 --- /dev/null +++ b/smart-flow-api/sa-admin/src/main/java/net/lab1024/sa/admin/module/business/jwpy/controller/WtczController.java @@ -0,0 +1,73 @@ +package net.lab1024.sa.admin.module.business.jwpy.controller; + +import cn.dev33.satoken.annotation.SaCheckPermission; +import io.swagger.v3.oas.annotations.Operation; +import io.swagger.v3.oas.annotations.tags.Tag; +import jakarta.annotation.Resource; +import jakarta.validation.Valid; +import net.lab1024.sa.admin.module.business.jwpy.domain.form.WtczQueryForm; +import net.lab1024.sa.admin.module.business.jwpy.domain.form.WtczAddForm; +import net.lab1024.sa.admin.module.business.jwpy.domain.form.WtczUpdateForm; +import net.lab1024.sa.admin.module.business.jwpy.domain.vo.WtczVO; +import net.lab1024.sa.admin.module.business.jwpy.service.WtczService; +import net.lab1024.sa.base.common.domain.PageResult; +import net.lab1024.sa.base.common.domain.ResponseDTO; +import net.lab1024.sa.base.common.domain.ValidateList; +import org.springframework.web.bind.annotation.*; + +/** + * 警务评议与问题处置 控制器 + * + * @Author Antigravity + * @Date 2026-06-09 + */ +@RestController +@Tag(name = "业务功能-警务评议与问题处置") +public class WtczController { + + @Resource + private WtczService wtczService; + + @Operation(summary = "分页查询评议工单") + @PostMapping("/jwpy/wtcz/queryPage") + @SaCheckPermission("jwpy:flow:query") + public ResponseDTO> queryPage(@RequestBody @Valid WtczQueryForm queryForm) { + return wtczService.queryPage(queryForm); + } + + @Operation(summary = "添加评议工单") + @PostMapping("/jwpy/wtcz/add") + @SaCheckPermission("jwpy:flow:add") + public ResponseDTO add(@RequestBody @Valid WtczAddForm addForm) { + return wtczService.add(addForm); + } + + @Operation(summary = "修改评议工单") + @PostMapping("/jwpy/wtcz/update") + @SaCheckPermission("jwpy:flow:update") + public ResponseDTO update(@RequestBody @Valid WtczUpdateForm updateForm) { + return wtczService.update(updateForm); + } + + @Operation(summary = "删除评议工单") + @GetMapping("/jwpy/wtcz/delete/{id}") + @SaCheckPermission("jwpy:flow:delete") + public ResponseDTO delete(@PathVariable Long id) { + return wtczService.delete(id); + } + + @Operation(summary = "批量删除评议工单") + @PostMapping("/jwpy/wtcz/batchDelete") + @SaCheckPermission("jwpy:flow:delete") + public ResponseDTO batchDelete(@RequestBody ValidateList idList) { + return wtczService.batchDelete(idList); + } + + @Operation(summary = "获取工单详情(合并首访与回访记录)") + @GetMapping("/jwpy/wtcz/detail/{id}") + @SaCheckPermission("jwpy:flow:query") + public ResponseDTO getDetail(@PathVariable Long id) { + return wtczService.getDetail(id); + } +} + diff --git a/smart-flow-api/sa-admin/src/main/java/net/lab1024/sa/admin/module/business/jwpy/dao/MessageDetailDao.java b/smart-flow-api/sa-admin/src/main/java/net/lab1024/sa/admin/module/business/jwpy/dao/MessageDetailDao.java new file mode 100644 index 0000000..1f5047b --- /dev/null +++ b/smart-flow-api/sa-admin/src/main/java/net/lab1024/sa/admin/module/business/jwpy/dao/MessageDetailDao.java @@ -0,0 +1,15 @@ +package net.lab1024.sa.admin.module.business.jwpy.dao; + +import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import net.lab1024.sa.admin.module.business.jwpy.domain.entity.MessageDetailEntity; +import org.apache.ibatis.annotations.Mapper; + +/** + * 工单短信明细表 Dao + * + * @Author Antigravity + * @Date 2026-06-09 + */ +@Mapper +public interface MessageDetailDao extends BaseMapper { +} diff --git a/smart-flow-api/sa-admin/src/main/java/net/lab1024/sa/admin/module/business/jwpy/dao/WtczDao.java b/smart-flow-api/sa-admin/src/main/java/net/lab1024/sa/admin/module/business/jwpy/dao/WtczDao.java new file mode 100644 index 0000000..fe9e835 --- /dev/null +++ b/smart-flow-api/sa-admin/src/main/java/net/lab1024/sa/admin/module/business/jwpy/dao/WtczDao.java @@ -0,0 +1,15 @@ +package net.lab1024.sa.admin.module.business.jwpy.dao; + +import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import net.lab1024.sa.admin.module.business.jwpy.domain.entity.WtczEntity; +import org.apache.ibatis.annotations.Mapper; + +/** + * 工单主表 Dao + * + * @Author Antigravity + * @Date 2026-06-09 + */ +@Mapper +public interface WtczDao extends BaseMapper { +} diff --git a/smart-flow-api/sa-admin/src/main/java/net/lab1024/sa/admin/module/business/jwpy/dao/WtczHfhcDao.java b/smart-flow-api/sa-admin/src/main/java/net/lab1024/sa/admin/module/business/jwpy/dao/WtczHfhcDao.java new file mode 100644 index 0000000..1da4f1e --- /dev/null +++ b/smart-flow-api/sa-admin/src/main/java/net/lab1024/sa/admin/module/business/jwpy/dao/WtczHfhcDao.java @@ -0,0 +1,15 @@ +package net.lab1024.sa.admin.module.business.jwpy.dao; + +import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import net.lab1024.sa.admin.module.business.jwpy.domain.entity.WtczHfhcEntity; +import org.apache.ibatis.annotations.Mapper; + +/** + * 二次回访表 Dao + * + * @Author Antigravity + * @Date 2026-06-09 + */ +@Mapper +public interface WtczHfhcDao extends BaseMapper { +} diff --git a/smart-flow-api/sa-admin/src/main/java/net/lab1024/sa/admin/module/business/jwpy/dao/WtczYyDao.java b/smart-flow-api/sa-admin/src/main/java/net/lab1024/sa/admin/module/business/jwpy/dao/WtczYyDao.java new file mode 100644 index 0000000..1a9b46e --- /dev/null +++ b/smart-flow-api/sa-admin/src/main/java/net/lab1024/sa/admin/module/business/jwpy/dao/WtczYyDao.java @@ -0,0 +1,15 @@ +package net.lab1024.sa.admin.module.business.jwpy.dao; + +import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import net.lab1024.sa.admin.module.business.jwpy.domain.entity.WtczYyEntity; +import org.apache.ibatis.annotations.Mapper; + +/** + * 首访信息表 Dao + * + * @Author Antigravity + * @Date 2026-06-09 + */ +@Mapper +public interface WtczYyDao extends BaseMapper { +} diff --git a/smart-flow-api/sa-admin/src/main/java/net/lab1024/sa/admin/module/business/jwpy/domain/entity/MessageDetailEntity.java b/smart-flow-api/sa-admin/src/main/java/net/lab1024/sa/admin/module/business/jwpy/domain/entity/MessageDetailEntity.java new file mode 100644 index 0000000..c8e04b2 --- /dev/null +++ b/smart-flow-api/sa-admin/src/main/java/net/lab1024/sa/admin/module/business/jwpy/domain/entity/MessageDetailEntity.java @@ -0,0 +1,60 @@ +package net.lab1024.sa.admin.module.business.jwpy.domain.entity; + +import com.baomidou.mybatisplus.annotation.IdType; +import com.baomidou.mybatisplus.annotation.TableId; +import com.baomidou.mybatisplus.annotation.TableName; +import io.swagger.v3.oas.annotations.media.Schema; +import lombok.Data; + +import java.time.LocalDateTime; + +/** + * 工单短信明细表 实体类 + * + * @Author Antigravity + * @Date 2026-06-09 + */ +@Data +@TableName("t_message_detail") +@Schema(description = "工单短信明细表") +public class MessageDetailEntity { + + @TableId(type = IdType.AUTO) + @Schema(description = "主键ID") + private Long id; + + @Schema(description = "地市4位数字编码") + private String cityCode; + + @Schema(description = "所属单位编码(老警综编码)") + private String orgCode; + + @Schema(description = "短信业务类型:满意度回访、投诉回访、提醒通知") + private String messageType; + + @Schema(description = "接收短信的手机号(脱敏)") + private String messagePhone; + + @Schema(description = "发送给诉求人的短信内容") + private String messageSendContent; + + @Schema(description = "诉求人回复的短信内容") + private String messageAcceptContent; + + @Schema(description = "发送日期,格式YYYY-MM-DD") + private String sendDay; + + @Schema(description = "地市标准名称") + private String cityName; + + @Schema(description = "所属单位标准名称") + private String orgName; + + @Schema(description = "数据同步至省厅的时间") + private LocalDateTime syncTime; + + @Schema(description = "数据在本地系统创建的时间") + private LocalDateTime createTime; +} + + diff --git a/smart-flow-api/sa-admin/src/main/java/net/lab1024/sa/admin/module/business/jwpy/domain/entity/WtczEntity.java b/smart-flow-api/sa-admin/src/main/java/net/lab1024/sa/admin/module/business/jwpy/domain/entity/WtczEntity.java new file mode 100644 index 0000000..92ac60f --- /dev/null +++ b/smart-flow-api/sa-admin/src/main/java/net/lab1024/sa/admin/module/business/jwpy/domain/entity/WtczEntity.java @@ -0,0 +1,199 @@ +package net.lab1024.sa.admin.module.business.jwpy.domain.entity; + +import com.baomidou.mybatisplus.annotation.IdType; +import com.baomidou.mybatisplus.annotation.TableId; +import com.baomidou.mybatisplus.annotation.TableName; +import io.swagger.v3.oas.annotations.media.Schema; +import lombok.Data; + +import java.time.LocalDateTime; + +/** + * 工单主表 实体类 + * + * @Author Antigravity + * @Date 2026-06-09 + */ +@Data +@TableName("t_czzx_wtcz") +@Schema(description = "工单主表") +public class WtczEntity { + + @TableId(type = IdType.AUTO) + @Schema(description = "主键ID") + private Long id; + + @Schema(description = "工单受理编号(业务唯一标识)") + private String slbh; + + @Schema(description = "地市4位数字编码") + private String cityCode; + + @Schema(description = "地市标准名称") + private String cityName; + + @Schema(description = "诉求人提交诉求的时间") + private String sqsj; + + @Schema(description = "工单当前处理状态:0已录入、1办结中、2已办结") + private String gdzt; + + @Schema(description = "首访满意度结果:1满意、2不满意") + private String sfjg; + + @Schema(description = "诉求业务分类:01投诉、02咨询(求助)、03建议、04举报、05表扬、06其他") + private String sqfl; + + @Schema(description = "工单四级标签,格式:一级-二级-三级-四级") + private String gdbq; + + @Schema(description = "数据来源渠道:1短信评警回访、2民意热线、3网络民意、4民意拓展、5民意调查") + private String sjlyqd; + + @Schema(description = "数据来源业务分类,如12389热线、12345热线、110接处警、车驾管等") + private String sjlyNo; + + @Schema(description = "工单涉及的业务单位名称") + private String sjdwMc; + + @Schema(description = "涉及单位编码") + private String sjdwCode; + + @Schema(description = "涉及警种:交警、派出所、治安等") + private String sjjzMc; + + @Schema(description = "是否属实:1属实、2部分属实、3不属实、4查明其他情况") + private String ssqkNo; + + @Schema(description = "涉及民警名称") + private String sjmjMc; + + @Schema(description = "问责情况") + private String wzqkNo; + + @Schema(description = "属实具体情况描述") + private String trueFlag; + + @Schema(description = "是否涉企:0否、1是") + private Integer sfsq; + + @Schema(description = "诉求人提交的详细内容") + private String sqnr; + + @Schema(description = "工单的最终处理结果") + private String cljg; + + @Schema(description = "发送给诉求人的短信内容") + private String dxfsnr; + + @Schema(description = "短信回复内容") + private String dxhfnr; + + @Schema(description = "短信发送时间") + private String dxfssj; + + @Schema(description = "短信回复时间") + private String dxhfsj; + + @Schema(description = "工单处理提交时间") + private String tjsj; + + @Schema(description = "工单归属的单位编码") + private String orgCode; + + @Schema(description = "工单满意情况") + private String gdmyqk; + + @Schema(description = "工单数据创建时间") + private String createTime; + + @Schema(description = "数据同步至省厅的时间") + private LocalDateTime syncTime; + + @Schema(description = "所属单位名称") + private String orgName; + + @Schema(description = "企业名称") + private String qymc; + + @Schema(description = "民辅警身份:1民警、2辅警") + private Integer sfsjfj; + + @Schema(description = "姓名") + private String sjfjxm; + + @Schema(description = "警号") + private String sjfjjh; + + @Schema(description = "诉求人联系电话") + private String lxdh; + + @Schema(description = "诉求人身份证号") + private String sqrZjhm; + + @Schema(description = "性别:1男、2女") + private String sqrXb; + + + + @Schema(description = "访评员编号") + private String fpyNo; + + @Schema(description = "访评员姓名") + private String fpyName; + + @Schema(description = "涉及单位名称") + private String sjdwName; + + @Schema(description = "是否匿名 (0:否, 1:是)") + private Integer sfnm; + + @Schema(description = "涉及单位ID") + private Long sjdwId; + + @Schema(description = "涉及民警ID串") + private String sjmjIds; + + @Schema(description = "涉及警种编码") + private String sjjzNo; + + @Schema(description = "诉求人ID") + private Double sqrId; + + @Schema(description = "诉求人姓名") + private String sqrXm; + + @Schema(description = "诉求人户籍地详址") + private String sqrHjdxz; + + @Schema(description = "诉求人现住地详址") + private String sqrXzdxz; + + @Schema(description = "关联警情编号") + private String gljqBh; + + @Schema(description = "关联案件编号") + private String glajBh; + + @Schema(description = "诉求等级") + private String sqdj; + + @Schema(description = "关键字") + private String gjz; + + @Schema(description = "是否已延期") + private String sfyyq; + + @Schema(description = "问题描述") + private String wtms; + + @Schema(description = "提交人ID") + private Long tjrId; + + @Schema(description = "提交单位ID") + private Long tjdwId; + + @Schema(description = "群众满意情况") + private String qzmyqk; +} + diff --git a/smart-flow-api/sa-admin/src/main/java/net/lab1024/sa/admin/module/business/jwpy/domain/entity/WtczHfhcEntity.java b/smart-flow-api/sa-admin/src/main/java/net/lab1024/sa/admin/module/business/jwpy/domain/entity/WtczHfhcEntity.java new file mode 100644 index 0000000..e4ee33a --- /dev/null +++ b/smart-flow-api/sa-admin/src/main/java/net/lab1024/sa/admin/module/business/jwpy/domain/entity/WtczHfhcEntity.java @@ -0,0 +1,71 @@ +package net.lab1024.sa.admin.module.business.jwpy.domain.entity; + +import com.baomidou.mybatisplus.annotation.IdType; +import com.baomidou.mybatisplus.annotation.TableId; +import com.baomidou.mybatisplus.annotation.TableName; +import io.swagger.v3.oas.annotations.media.Schema; +import lombok.Data; + +import java.time.LocalDateTime; + +/** + * 二次回访表 实体类 + * + * @Author Antigravity + * @Date 2026-06-09 + */ +@Data +@TableName("t_czzx_wtcz_hfhc") +@Schema(description = "二次回访表") +public class WtczHfhcEntity { + + @TableId(type = IdType.AUTO) + @Schema(description = "主键ID") + private Long id; + + @Schema(description = "关联工单编号") + private String slbh; + + @Schema(description = "数据来源地市") + private String sourceCity; + + @Schema(description = "二次回访内容") + private String hfqksm; + + @Schema(description = "二次回访时间") + private LocalDateTime cjsj; + + @Schema(description = "诉求人电话(从主表获取)") + private String lxdh; + + @Schema(description = "二次回访人员名称") + private String tjrXm; + + @Schema(description = "二次回访满意度") + private String qzmyqkNo; + + @Schema(description = "附件UUID") + private String fjUuid; + + @Schema(description = "数据同步时间(增量时间)") + private LocalDateTime syncTime; + + @Schema(description = "数据创建时间") + private LocalDateTime createTime; + + @Schema(description = "所属单位代码") + private String orgCode; + + @Schema(description = "是否验证") + private String sfyz; + + @Schema(description = "下发阶段") + private String xfjd; + + @Schema(description = "办理单位ID") + private String bldwId; + + @Schema(description = "问题处置ID") + private String wtczId; +} + diff --git a/smart-flow-api/sa-admin/src/main/java/net/lab1024/sa/admin/module/business/jwpy/domain/entity/WtczYyEntity.java b/smart-flow-api/sa-admin/src/main/java/net/lab1024/sa/admin/module/business/jwpy/domain/entity/WtczYyEntity.java new file mode 100644 index 0000000..02cf7d3 --- /dev/null +++ b/smart-flow-api/sa-admin/src/main/java/net/lab1024/sa/admin/module/business/jwpy/domain/entity/WtczYyEntity.java @@ -0,0 +1,69 @@ +package net.lab1024.sa.admin.module.business.jwpy.domain.entity; + +import com.baomidou.mybatisplus.annotation.IdType; +import com.baomidou.mybatisplus.annotation.TableId; +import com.baomidou.mybatisplus.annotation.TableName; +import io.swagger.v3.oas.annotations.media.Schema; +import lombok.Data; + +import java.time.LocalDateTime; + +/** + * 首访信息表 实体类 + * + * @Author Antigravity + * @Date 2026-06-09 + */ +@Data +@TableName("t_czzx_wtcz_yy") +@Schema(description = "首访信息表") +public class WtczYyEntity { + + @TableId(type = IdType.AUTO) + @Schema(description = "主键ID") + private Long id; + + @Schema(description = "关联的工单受理编号") + private String slbh; + + @Schema(description = "首访数据所属地市") + private String sourceCity; + + @Schema(description = "首访通话开始时间") + private LocalDateTime thsj; + + @Schema(description = "诉求人通话号码(脱敏)") + private String thhm; + + @Schema(description = "呼叫方向:1呼入、2呼出、3自动呼入") + private String thfx; + + @Schema(description = "通话时长(秒)") + private Long thsc; + + @Schema(description = "录音文件地址") + private String lydz; + + @Schema(description = "通话单位") + private String thdwMc; + + @Schema(description = "数据创建时间") + private LocalDateTime createTime; + + @Schema(description = "数据同步时间(增量时间)") + private LocalDateTime syncTime; + + @Schema(description = "所属单位代码") + private String orgCode; + + @Schema(description = "录音电话") + private String lydh; + + @Schema(description = "通话单位ID") + private Long thdwId; + + @Schema(description = "语音通话记录表ID") + private Long yyId; +} + + diff --git a/smart-flow-api/sa-admin/src/main/java/net/lab1024/sa/admin/module/business/jwpy/domain/form/WtczAddForm.java b/smart-flow-api/sa-admin/src/main/java/net/lab1024/sa/admin/module/business/jwpy/domain/form/WtczAddForm.java new file mode 100644 index 0000000..bd35f49 --- /dev/null +++ b/smart-flow-api/sa-admin/src/main/java/net/lab1024/sa/admin/module/business/jwpy/domain/form/WtczAddForm.java @@ -0,0 +1,189 @@ +package net.lab1024.sa.admin.module.business.jwpy.domain.form; + +import io.swagger.v3.oas.annotations.media.Schema; +import jakarta.validation.constraints.NotBlank; +import lombok.Data; + +import java.time.LocalDateTime; + +/** + * 警务评议工单 新增表单 + * + * @Author Antigravity + * @Date 2026-06-09 + */ +@Data +public class WtczAddForm { + + @Schema(description = "工单受理编号", requiredMode = Schema.RequiredMode.REQUIRED) + @NotBlank(message = "工单受理编号 不能为空") + private String slbh; + + @Schema(description = "地市4位数字编码") + private String cityCode; + + @Schema(description = "地市标准名称") + private String cityName; + + @Schema(description = "诉求人提交诉求的时间") + private String sqsj; + + @Schema(description = "工单当前处理状态:0已录入、1办结中、2已办结") + private String gdzt; + + @Schema(description = "首访满意度结果:1满意、2不满意") + private String sfjg; + + @Schema(description = "诉求业务分类:01投诉、02咨询(求助)、03建议、04举报、05表扬、06其他") + private String sqfl; + + @Schema(description = "工单四级标签") + private String gdbq; + + @Schema(description = "数据来源渠道:1短信评警回访、2民意热线、3网络民意、4民意拓展、5民意调查") + private String sjlyqd; + + @Schema(description = "数据来源业务分类,如12389热线、12345热线、110接处警、车驾管等") + private String sjlyNo; + + @Schema(description = "工单涉及的业务单位名称") + private String sjdwMc; + + @Schema(description = "涉及单位编码") + private String sjdwCode; + + @Schema(description = "涉及警种名称") + private String sjjzMc; + + @Schema(description = "是否属实") + private String ssqkNo; + + @Schema(description = "涉及民警名称") + private String sjmjMc; + + @Schema(description = "问责情况") + private String wzqkNo; + + @Schema(description = "属实具体情况描述") + private String trueFlag; + + @Schema(description = "是否涉企:0否、1是") + private Integer sfsq; + + @Schema(description = "诉求人提交的详细内容") + private String sqnr; + + @Schema(description = "工单的最终处理结果") + private String cljg; + + @Schema(description = "发送给诉求人的短信内容") + private String dxfsnr; + + @Schema(description = "短信回复内容") + private String dxhfnr; + + @Schema(description = "短信发送时间") + private String dxfssj; + + @Schema(description = "短信回复时间") + private String dxhfsj; + + @Schema(description = "工单处理提交时间") + private String tjsj; + + @Schema(description = "工单归属的单位编码") + private String orgCode; + + @Schema(description = "工单满意情况") + private String gdmyqk; + + @Schema(description = "工单数据创建时间") + private String createTime; + + @Schema(description = "数据同步至省厅的时间") + private LocalDateTime syncTime; + + @Schema(description = "所属单位名称") + private String orgName; + + @Schema(description = "企业名称") + private String qymc; + + @Schema(description = "民辅警身份:1民警、2辅警") + private Integer sfsjfj; + + @Schema(description = "姓名") + private String sjfjxm; + + @Schema(description = "警号") + private String sjfjjh; + + @Schema(description = "诉求人联系电话") + private String lxdh; + + @Schema(description = "诉求人身份证号") + private String sqrZjhm; + + @Schema(description = "性别:1男、2女") + private String sqrXb; + + @Schema(description = "访评员编号") + private String fpyNo; + + @Schema(description = "访评员姓名") + private String fpyName; + + @Schema(description = "涉及单位名称") + private String sjdwName; + + @Schema(description = "是否匿名 (0:否, 1:是)") + private Integer sfnm; + + @Schema(description = "涉及单位ID") + private Long sjdwId; + + @Schema(description = "涉及民警ID串") + private String sjmjIds; + + @Schema(description = "涉及警种编码") + private String sjjzNo; + + @Schema(description = "诉求人ID") + private Double sqrId; + + @Schema(description = "诉求人姓名") + private String sqrXm; + + @Schema(description = "诉求人户籍地详址") + private String sqrHjdxz; + + @Schema(description = "诉求人现住地详址") + private String sqrXzdxz; + + @Schema(description = "关联警情编号") + private String gljqBh; + + @Schema(description = "关联案件编号") + private String glajBh; + + @Schema(description = "诉求等级") + private String sqdj; + + @Schema(description = "关键字") + private String gjz; + + @Schema(description = "是否已延期") + private String sfyyq; + + @Schema(description = "问题描述") + private String wtms; + + @Schema(description = "提交人ID") + private Long tjrId; + + @Schema(description = "提交单位ID") + private Long tjdwId; + + @Schema(description = "群众满意情况") + private String qzmyqk; +} diff --git a/smart-flow-api/sa-admin/src/main/java/net/lab1024/sa/admin/module/business/jwpy/domain/form/WtczQueryForm.java b/smart-flow-api/sa-admin/src/main/java/net/lab1024/sa/admin/module/business/jwpy/domain/form/WtczQueryForm.java new file mode 100644 index 0000000..6933276 --- /dev/null +++ b/smart-flow-api/sa-admin/src/main/java/net/lab1024/sa/admin/module/business/jwpy/domain/form/WtczQueryForm.java @@ -0,0 +1,37 @@ +package net.lab1024.sa.admin.module.business.jwpy.domain.form; + +import io.swagger.v3.oas.annotations.media.Schema; +import lombok.Data; +import net.lab1024.sa.base.common.domain.PageParam; + +/** + * 工单分页查询表单 + * + * @Author Antigravity + * @Date 2026-06-09 + */ +@Data +@Schema(description = "工单分页查询表单") +public class WtczQueryForm extends PageParam { + + @Schema(description = "数据来源渠道:1短信评警回访、2民意热线、3网络民意、4民意拓展、5民意调查") + private String sjlyqd; + + @Schema(description = "数据来源业务分类,如12389热线、12345热线、110接处警、车驾管等") + private String sjlyNo; + + @Schema(description = "工单受理编号(业务唯一标识)") + private String slbh; + + @Schema(description = "诉求人联系电话") + private String lxdh; + + @Schema(description = "姓名") + private String sjfjxm; + + @Schema(description = "工单当前处理状态:0已录入、1办结中、2已办结") + private String gdzt; + + @Schema(description = "删除标记:0未删,1已删") + private Boolean deletedFlag; +} diff --git a/smart-flow-api/sa-admin/src/main/java/net/lab1024/sa/admin/module/business/jwpy/domain/form/WtczUpdateForm.java b/smart-flow-api/sa-admin/src/main/java/net/lab1024/sa/admin/module/business/jwpy/domain/form/WtczUpdateForm.java new file mode 100644 index 0000000..01664ee --- /dev/null +++ b/smart-flow-api/sa-admin/src/main/java/net/lab1024/sa/admin/module/business/jwpy/domain/form/WtczUpdateForm.java @@ -0,0 +1,194 @@ +package net.lab1024.sa.admin.module.business.jwpy.domain.form; + +import io.swagger.v3.oas.annotations.media.Schema; +import jakarta.validation.constraints.NotBlank; +import jakarta.validation.constraints.NotNull; +import lombok.Data; + +import java.time.LocalDateTime; + +/** + * 警务评议工单 修改表单 + * + * @Author Antigravity + * @Date 2026-06-09 + */ +@Data +public class WtczUpdateForm { + + @Schema(description = "主键ID", requiredMode = Schema.RequiredMode.REQUIRED) + @NotNull(message = "主键ID 不能为空") + private Long id; + + @Schema(description = "工单受理编号", requiredMode = Schema.RequiredMode.REQUIRED) + @NotBlank(message = "工单受理编号 不能为空") + private String slbh; + + @Schema(description = "地市4位数字编码") + private String cityCode; + + @Schema(description = "地市标准名称") + private String cityName; + + @Schema(description = "诉求人提交诉求的时间") + private String sqsj; + + @Schema(description = "工单当前处理状态:0已录入、1办结中、2已办结") + private String gdzt; + + @Schema(description = "首访满意度结果:1满意、2不满意") + private String sfjg; + + @Schema(description = "诉求业务分类:01投诉、02咨询(求助)、03建议、04举报、05表扬、06其他") + private String sqfl; + + @Schema(description = "工单四级标签") + private String gdbq; + + @Schema(description = "数据来源渠道:1短信评警回访、2民意热线、3网络民意、4民意拓展、5民意调查") + private String sjlyqd; + + @Schema(description = "数据来源业务分类,如12389热线、12345热线、110接处警、车驾管等") + private String sjlyNo; + + @Schema(description = "工单涉及的业务单位名称") + private String sjdwMc; + + @Schema(description = "涉及单位编码") + private String sjdwCode; + + @Schema(description = "涉及警种名称") + private String sjjzMc; + + @Schema(description = "是否属实") + private String ssqkNo; + + @Schema(description = "涉及民警名称") + private String sjmjMc; + + @Schema(description = "问责情况") + private String wzqkNo; + + @Schema(description = "属实具体情况描述") + private String trueFlag; + + @Schema(description = "是否涉企:0否、1是") + private Integer sfsq; + + @Schema(description = "诉求人提交的详细内容") + private String sqnr; + + @Schema(description = "工单的最终处理结果") + private String cljg; + + @Schema(description = "发送给诉求人的短信内容") + private String dxfsnr; + + @Schema(description = "短信回复内容") + private String dxhfnr; + + @Schema(description = "短信发送时间") + private String dxfssj; + + @Schema(description = "短信回复时间") + private String dxhfsj; + + @Schema(description = "工单处理提交时间") + private String tjsj; + + @Schema(description = "工单归属的单位编码") + private String orgCode; + + @Schema(description = "工单满意情况") + private String gdmyqk; + + @Schema(description = "工单数据创建时间") + private String createTime; + + @Schema(description = "数据同步至省厅的时间") + private LocalDateTime syncTime; + + @Schema(description = "所属单位名称") + private String orgName; + + @Schema(description = "企业名称") + private String qymc; + + @Schema(description = "民辅警身份:1民警、2辅警") + private Integer sfsjfj; + + @Schema(description = "姓名") + private String sjfjxm; + + @Schema(description = "警号") + private String sjfjjh; + + @Schema(description = "诉求人联系电话") + private String lxdh; + + @Schema(description = "诉求人身份证号") + private String sqrZjhm; + + @Schema(description = "性别:1男、2女") + private String sqrXb; + + @Schema(description = "访评员编号") + private String fpyNo; + + @Schema(description = "访评员姓名") + private String fpyName; + + @Schema(description = "涉及单位名称") + private String sjdwName; + + @Schema(description = "是否匿名 (0:否, 1:是)") + private Integer sfnm; + + @Schema(description = "涉及单位ID") + private Long sjdwId; + + @Schema(description = "涉及民警ID串") + private String sjmjIds; + + @Schema(description = "涉及警种编码") + private String sjjzNo; + + @Schema(description = "诉求人ID") + private Double sqrId; + + @Schema(description = "诉求人姓名") + private String sqrXm; + + @Schema(description = "诉求人户籍地详址") + private String sqrHjdxz; + + @Schema(description = "诉求人现住地详址") + private String sqrXzdxz; + + @Schema(description = "关联警情编号") + private String gljqBh; + + @Schema(description = "关联案件编号") + private String glajBh; + + @Schema(description = "诉求等级") + private String sqdj; + + @Schema(description = "关键字") + private String gjz; + + @Schema(description = "是否已延期") + private String sfyyq; + + @Schema(description = "问题描述") + private String wtms; + + @Schema(description = "提交人ID") + private Long tjrId; + + @Schema(description = "提交单位ID") + private Long tjdwId; + + @Schema(description = "群众满意情况") + private String qzmyqk; +} diff --git a/smart-flow-api/sa-admin/src/main/java/net/lab1024/sa/admin/module/business/jwpy/domain/vo/WtczHfhcVO.java b/smart-flow-api/sa-admin/src/main/java/net/lab1024/sa/admin/module/business/jwpy/domain/vo/WtczHfhcVO.java new file mode 100644 index 0000000..85e5443 --- /dev/null +++ b/smart-flow-api/sa-admin/src/main/java/net/lab1024/sa/admin/module/business/jwpy/domain/vo/WtczHfhcVO.java @@ -0,0 +1,68 @@ +package net.lab1024.sa.admin.module.business.jwpy.domain.vo; + +import com.fasterxml.jackson.databind.annotation.JsonSerialize; +import io.swagger.v3.oas.annotations.media.Schema; +import lombok.Data; +import net.lab1024.sa.base.common.json.serializer.FileKeyVoSerializer; + +import java.time.LocalDateTime; + +/** + * 二次回访核实表 视图展示类 + * + * @Author Antigravity + * @Date 2026-06-09 + */ +@Data +@Schema(description = "二次回访核实视图对象") +public class WtczHfhcVO { + + @Schema(description = "主键ID") + private Long id; + + @Schema(description = "关联工单编号") + private String slbh; + + @Schema(description = "数据来源地市") + private String sourceCity; + + @Schema(description = "二次回访内容") + private String hfqksm; + + @Schema(description = "二次回访时间") + private LocalDateTime cjsj; + + @Schema(description = "诉求人电话(从主表获取)") + private String lxdh; + + @Schema(description = "二次回访人员名称") + private String tjrXm; + + @Schema(description = "二次回访满意度") + private String qzmyqkNo; + + @Schema(description = "附件UUID") + @JsonSerialize(using = FileKeyVoSerializer.class) + private String fjUuid; + + @Schema(description = "数据同步时间") + private LocalDateTime syncTime; + + @Schema(description = "数据创建时间") + private LocalDateTime createTime; + + @Schema(description = "所属单位代码") + private String orgCode; + + @Schema(description = "是否验证") + private String sfyz; + + @Schema(description = "下发阶段") + private String xfjd; + + @Schema(description = "办理单位ID") + private String bldwId; + + @Schema(description = "问题处置ID") + private String wtczId; +} diff --git a/smart-flow-api/sa-admin/src/main/java/net/lab1024/sa/admin/module/business/jwpy/domain/vo/WtczVO.java b/smart-flow-api/sa-admin/src/main/java/net/lab1024/sa/admin/module/business/jwpy/domain/vo/WtczVO.java new file mode 100644 index 0000000..9ac4b81 --- /dev/null +++ b/smart-flow-api/sa-admin/src/main/java/net/lab1024/sa/admin/module/business/jwpy/domain/vo/WtczVO.java @@ -0,0 +1,198 @@ +package net.lab1024.sa.admin.module.business.jwpy.domain.vo; + +import io.swagger.v3.oas.annotations.media.Schema; +import lombok.Data; + +import java.time.LocalDateTime; + +/** + * 工单主表 视图展示类 + * + * @Author Antigravity + * @Date 2026-06-09 + */ +@Data +@Schema(description = "工单主表视图对象") +public class WtczVO { + + @Schema(description = "主键ID") + private Long id; + + @Schema(description = "工单受理编号(业务唯一标识)") + private String slbh; + + @Schema(description = "地市4位数字编码") + private String cityCode; + + @Schema(description = "地市标准名称") + private String cityName; + + @Schema(description = "诉求人提交诉求的时间") + private String sqsj; + + @Schema(description = "工单当前处理状态:0已录入、1办结中、2已办结") + private String gdzt; + + @Schema(description = "首访满意度结果:1满意、2不满意") + private String sfjg; + + @Schema(description = "诉求业务分类:01投诉、02咨询(求助)、03建议、04举报、05表扬、06其他") + private String sqfl; + + @Schema(description = "工单四级标签") + private String gdbq; + + @Schema(description = "数据来源渠道:1短信评警回访、2民意热线、3网络民意、4民意拓展、5民意调查") + private String sjlyqd; + + @Schema(description = "数据来源业务分类,如12389热线、12345热线、110接处警、车驾管等") + private String sjlyNo; + + @Schema(description = "工单涉及的业务单位名称") + private String sjdwMc; + + @Schema(description = "涉及单位编码") + private String sjdwCode; + + @Schema(description = "涉及警种:交警、派出所、治安等") + private String sjjzMc; + + @Schema(description = "是否属实:1属实、2部分属实、3不属实、4查明其他情况") + private String ssqkNo; + + @Schema(description = "涉及民警名称") + private String sjmjMc; + + @Schema(description = "问责情况") + private String wzqkNo; + + @Schema(description = "属实具体情况描述") + private String trueFlag; + + @Schema(description = "是否涉企:0否、1是") + private Integer sfsq; + + @Schema(description = "诉求人提交的详细内容") + private String sqnr; + + @Schema(description = "工单的最终处理结果") + private String cljg; + + @Schema(description = "发送给诉求人的短信内容") + private String dxfsnr; + + @Schema(description = "诉求人回复的短信内容") + private String dxhfnr; + + @Schema(description = "短信发送时间") + private String dxfssj; + + @Schema(description = "短信回复时间") + private String dxhfsj; + + @Schema(description = "工单处理提交时间") + private String tjsj; + + @Schema(description = "工单归属的单位编码") + private String orgCode; + + @Schema(description = "工单满意情况") + private String gdmyqk; + + @Schema(description = "工单数据创建时间") + private String createTime; + + @Schema(description = "数据同步至省厅的时间") + private LocalDateTime syncTime; + + @Schema(description = "所属单位名称") + private String orgName; + + @Schema(description = "企业名称") + private String qymc; + + @Schema(description = "民辅警身份:1民警、2辅警") + private Integer sfsjfj; + + @Schema(description = "姓名") + private String sjfjxm; + + @Schema(description = "警号") + private String sjfjjh; + + @Schema(description = "诉求人联系电话") + private String lxdh; + + @Schema(description = "诉求人身份证号") + private String sqrZjhm; + + @Schema(description = "性别:1男、2女") + private String sqrXb; + + @Schema(description = "访评员编号") + private String fpyNo; + + @Schema(description = "访评员姓名") + private String fpyName; + + @Schema(description = "涉及单位名称") + private String sjdwName; + + @Schema(description = "是否匿名 (0:否, 1:是)") + private Integer sfnm; + + @Schema(description = "涉及单位ID") + private Long sjdwId; + + @Schema(description = "涉及民警ID串") + private String sjmjIds; + + @Schema(description = "涉及警种编码") + private String sjjzNo; + + @Schema(description = "诉求人ID") + private Double sqrId; + + @Schema(description = "诉求人姓名") + private String sqrXm; + + @Schema(description = "诉求人户籍地详址") + private String sqrHjdxz; + + @Schema(description = "诉求人现住地详址") + private String sqrXzdxz; + + @Schema(description = "关联警情编号") + private String gljqBh; + + @Schema(description = "关联案件编号") + private String glajBh; + + @Schema(description = "诉求等级") + private String sqdj; + + @Schema(description = "关键字") + private String gjz; + + @Schema(description = "是否已延期") + private String sfyyq; + + @Schema(description = "问题描述") + private String wtms; + + @Schema(description = "提交人ID") + private Long tjrId; + + @Schema(description = "提交单位ID") + private Long tjdwId; + + @Schema(description = "群众满意情况") + private String qzmyqk; + + @Schema(description = "首访通话语音列表") + private java.util.List czzxWtczYyList; + + @Schema(description = "二次回访记录列表") + private java.util.List czzxWtczHfhcList; +} + diff --git a/smart-flow-api/sa-admin/src/main/java/net/lab1024/sa/admin/module/business/jwpy/domain/vo/WtczYyVO.java b/smart-flow-api/sa-admin/src/main/java/net/lab1024/sa/admin/module/business/jwpy/domain/vo/WtczYyVO.java new file mode 100644 index 0000000..bc6eed1 --- /dev/null +++ b/smart-flow-api/sa-admin/src/main/java/net/lab1024/sa/admin/module/business/jwpy/domain/vo/WtczYyVO.java @@ -0,0 +1,65 @@ +package net.lab1024.sa.admin.module.business.jwpy.domain.vo; + +import com.fasterxml.jackson.databind.annotation.JsonSerialize; +import io.swagger.v3.oas.annotations.media.Schema; +import lombok.Data; +import net.lab1024.sa.base.common.json.serializer.FileKeyVoSerializer; + +import java.time.LocalDateTime; + +/** + * 首访语音信息表 视图展示类 + * + * @Author Antigravity + * @Date 2026-06-09 + */ +@Data +@Schema(description = "首访语音信息视图对象") +public class WtczYyVO { + + @Schema(description = "主键ID") + private Long id; + + @Schema(description = "关联的工单受理编号") + private String slbh; + + @Schema(description = "首访数据所属地市") + private String sourceCity; + + @Schema(description = "首访通话开始时间") + private LocalDateTime thsj; + + @Schema(description = "诉求人通话号码") + private String thhm; + + @Schema(description = "呼叫方向:1呼入、2呼出、3自动呼入") + private String thfx; + + @Schema(description = "通话时长(秒)") + private Long thsc; + + @Schema(description = "录音文件地址") + @JsonSerialize(using = FileKeyVoSerializer.class) + private String lydz; + + @Schema(description = "通话单位名称") + private String thdwMc; + + @Schema(description = "数据创建时间") + private LocalDateTime createTime; + + @Schema(description = "数据同步时间") + private LocalDateTime syncTime; + + @Schema(description = "所属单位代码") + private String orgCode; + + @Schema(description = "录音电话") + private String lydh; + + @Schema(description = "通话单位ID") + private Long thdwId; + + @Schema(description = "语音通话记录表ID") + private Long yyId; +} diff --git a/smart-flow-api/sa-admin/src/main/java/net/lab1024/sa/admin/module/business/jwpy/service/WtczService.java b/smart-flow-api/sa-admin/src/main/java/net/lab1024/sa/admin/module/business/jwpy/service/WtczService.java new file mode 100644 index 0000000..0a9dd2f --- /dev/null +++ b/smart-flow-api/sa-admin/src/main/java/net/lab1024/sa/admin/module/business/jwpy/service/WtczService.java @@ -0,0 +1,323 @@ +package net.lab1024.sa.admin.module.business.jwpy.service; + +import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; +import com.baomidou.mybatisplus.core.toolkit.Wrappers; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import jakarta.annotation.Resource; +import lombok.extern.slf4j.Slf4j; +import net.lab1024.sa.admin.module.business.jwpy.dao.WtczDao; +import net.lab1024.sa.admin.module.business.jwpy.dao.WtczYyDao; +import net.lab1024.sa.admin.module.business.jwpy.dao.WtczHfhcDao; +import net.lab1024.sa.admin.module.business.jwpy.domain.entity.WtczEntity; +import net.lab1024.sa.admin.module.business.jwpy.domain.entity.WtczYyEntity; +import net.lab1024.sa.admin.module.business.jwpy.domain.entity.WtczHfhcEntity; +import net.lab1024.sa.admin.module.business.jwpy.domain.form.WtczQueryForm; +import net.lab1024.sa.admin.module.business.jwpy.domain.form.WtczAddForm; +import net.lab1024.sa.admin.module.business.jwpy.domain.form.WtczUpdateForm; +import net.lab1024.sa.admin.module.business.jwpy.domain.vo.WtczVO; +import net.lab1024.sa.admin.module.business.jwpy.domain.vo.WtczYyVO; +import net.lab1024.sa.admin.module.business.jwpy.domain.vo.WtczHfhcVO; +import net.lab1024.sa.base.common.domain.PageResult; +import net.lab1024.sa.base.common.domain.ResponseDTO; +import net.lab1024.sa.base.common.util.SmartBeanUtil; +import net.lab1024.sa.base.common.util.SmartPageUtil; +import org.apache.commons.collections4.CollectionUtils; +import org.apache.commons.lang3.StringUtils; +import org.springframework.stereotype.Service; +import org.springframework.transaction.annotation.Transactional; + +import java.util.List; + +/** + * 警务评议与问题处置 业务服务类 + * + * @Author Antigravity + * @Date 2026-06-09 + */ +@Service +@Slf4j +public class WtczService { + + @Resource + private WtczDao wtczDao; + + @Resource + private WtczYyDao wtczYyDao; + + @Resource + private WtczHfhcDao wtczHfhcDao; + + /** + * 分页查询评议工单列表 + * + * @param queryForm 查询过滤参数 + * @return 分页展示结果 + */ + @SuppressWarnings("unchecked") + public ResponseDTO> queryPage(WtczQueryForm queryForm) { + Page page = (Page) SmartPageUtil.convert2PageQuery(queryForm); + LambdaQueryWrapper wrapper = Wrappers.lambdaQuery(); + + // 大类分类 (1短信评警回访、2民意热线、3网络民意、4民意拓展、5民意调查) + if (StringUtils.isNotBlank(queryForm.getSjlyqd())) { + wrapper.eq(WtczEntity::getSjlyqd, queryForm.getSjlyqd()); + } + + // 业务小类 (CZZX_SJLY_xx) + if (StringUtils.isNotBlank(queryForm.getSjlyNo())) { + this.initMockDataIfEmpty(queryForm.getSjlyNo()); + wrapper.eq(WtczEntity::getSjlyNo, queryForm.getSjlyNo()); + } + + // 工单状态 + if (StringUtils.isNotBlank(queryForm.getGdzt())) { + wrapper.eq(WtczEntity::getGdzt, queryForm.getGdzt()); + } + + // 受理编号 + if (StringUtils.isNotBlank(queryForm.getSlbh())) { + wrapper.eq(WtczEntity::getSlbh, queryForm.getSlbh()); + } + + // 手机号精确查询 + if (StringUtils.isNotBlank(queryForm.getLxdh())) { + wrapper.eq(WtczEntity::getLxdh, queryForm.getLxdh()); + } + + // 民警姓名模糊查询 + if (StringUtils.isNotBlank(queryForm.getSjfjxm())) { + wrapper.like(WtczEntity::getSjfjxm, queryForm.getSjfjxm()); + } + + // 按 ID 降序排列展示 + wrapper.orderByDesc(WtczEntity::getId); + + wtczDao.selectPage(page, wrapper); + List voList = SmartBeanUtil.copyList(page.getRecords(), WtczVO.class); + PageResult pageResult = SmartPageUtil.convert2PageResult(page, voList); + return ResponseDTO.ok(pageResult); + } + + /** + * 检测若该小类暂无数据,则自动往 t_czzx_wtcz、t_czzx_wtcz_yy、t_czzx_wtcz_hfhc 中注入 3 条 Mock 数据,方便流程联调与演示 + * + * @param sjlyNo 业务来源小类 + */ + private synchronized void initMockDataIfEmpty(String sjlyNo) { + Long count = wtczDao.selectCount(Wrappers.lambdaQuery().eq(WtczEntity::getSjlyNo, sjlyNo)); + if (count != null && count > 0) { + return; + } + + log.info("检测到业务小类 {} 暂无物理数据,开始自动初始化Mock测试数据...", sjlyNo); + + for (int i = 1; i <= 3; i++) { + String slbh = "GD-" + sjlyNo + "-20260609-" + String.format("%03d", i); + + WtczEntity entity = new WtczEntity(); + entity.setSlbh(slbh); + entity.setCityCode("3301"); + entity.setCityName("杭州市"); + entity.setSqsj("2026-06-09 10:00:00"); + // 工单当前处理状态:0已录入、1办结中、2已办结 + entity.setGdzt(String.valueOf(i - 1)); + // 首访满意度结果:1满意、2不满意 + entity.setSfjg(i == 1 ? "1" : "2"); + // 诉求分类 + entity.setSqfl("CZZX_SQFL_0" + i); + entity.setGdbq("民警服务-办事拖延-态度生硬"); + entity.setSjlyqd("1"); // 短信评警回访 + entity.setSjlyNo(sjlyNo); + entity.setSjdwMc("城东派出所"); + entity.setSjdwCode("330104001"); + entity.setSjjzMc("派出所"); + entity.setSsqkNo(i == 1 ? "3" : "1"); // 是否属实 + entity.setSjmjMc("张警官"); + entity.setWzqkNo(i == 1 ? "2" : "1"); // 问责情况 + entity.setTrueFlag("群众反馈的办事流程迟缓、警员态度急躁情况属实,已约谈教育相关责任人。"); + entity.setSfsq(0); + entity.setSqnr("群众于6月9日拨打110报警求助,派出所在接警响应与跟进处理阶段工作态度生硬,且未能及时反馈进展。"); + entity.setCljg("江干分局已约谈当值张警官,并由所领导带领当事人向群众赔礼道歉,现已达成谅解,整改措施已落实到位。"); + entity.setDxfsnr("【江干分局】您的警务评议工单已录入。"); + entity.setDxhfnr("收到了,希望改进。"); + entity.setDxfssj("2026-06-09 10:05:00"); + entity.setDxhfsj("2026-06-09 10:20:00"); + entity.setTjsj("2026-06-09 11:00:00"); + entity.setOrgCode("330104"); + entity.setGdmyqk(i == 1 ? "1" : "2"); + entity.setCreateTime("2026-06-09 10:00:00"); + entity.setOrgName("江干分局"); + entity.setSfsjfj(1); + entity.setLxdh("1385800000" + i); + entity.setSqrZjhm("3301041990010100" + i + "X"); + entity.setSqrXb(i == 1 ? "1" : "2"); + entity.setFpyNo("FPY-00" + i); + entity.setFpyName("王访评员"); + entity.setSjdwName("城东派出所"); + entity.setSfnm(0); + entity.setSjdwId(1001L); + entity.setSjmjIds("1002,1003"); + entity.setSjjzNo("SYSTEM_JZ_01"); + entity.setSqrId(10001.0); + entity.setSqrXm("陈先生"); + entity.setSqrHjdxz("浙江省杭州市江干区秋涛北路233号"); + entity.setSqrXzdxz("浙江省杭州市江干区新塘路99号"); + entity.setGljqBh("JQ-20260609-00" + i); + entity.setGlajBh("AJ-20260609-00" + i); + entity.setSqdj("01"); + entity.setGjz("态度"); + entity.setSfyyq("0"); + entity.setWtms("警员处理警情时态度生硬,未给予耐心解答"); + entity.setQzmyqk(i == 1 ? "CZZX_MYD_01" : "CZZX_MYD_03"); // 满意 / 不满意 + wtczDao.insert(entity); + + // 自动插入配套的首访录音 + WtczYyEntity yyEntity = new WtczYyEntity(); + yyEntity.setSlbh(slbh); + yyEntity.setSourceCity("杭州市"); + yyEntity.setThsj(java.time.LocalDateTime.now().minusHours(2)); + yyEntity.setThhm("1385800000" + i); + yyEntity.setThfx("2"); // 呼出 + yyEntity.setThsc(90L + i * 30L); + yyEntity.setLydz("https://www.w3school.com.cn/i/horse.mp3"); + yyEntity.setThdwMc("城东派出所"); + yyEntity.setCreateTime(java.time.LocalDateTime.now()); + yyEntity.setSyncTime(java.time.LocalDateTime.now()); + yyEntity.setOrgCode("330104"); + yyEntity.setLydh("0571-87280001"); + yyEntity.setThdwId(1001L); + yyEntity.setYyId(2000L + i); + wtczYyDao.insert(yyEntity); + + // 自动插入配套的二次回访核实记录 + WtczHfhcEntity hfhcEntity = new WtczHfhcEntity(); + hfhcEntity.setSlbh(slbh); + hfhcEntity.setSourceCity("杭州市"); + hfhcEntity.setHfqksm("电话回访核实:民警已主动上门致歉,群众表示接受道歉,并反馈称派出所的整改诚意足够,目前对处理情况表示满意。"); + hfhcEntity.setCjsj(java.time.LocalDateTime.now().minusMinutes(30)); + hfhcEntity.setLxdh("1385800000" + i); + hfhcEntity.setTjrXm("李回访员"); + hfhcEntity.setQzmyqkNo("1"); // 满意 + hfhcEntity.setFjUuid("fj-uuid-mock-00" + i); + hfhcEntity.setCreateTime(java.time.LocalDateTime.now()); + hfhcEntity.setSyncTime(java.time.LocalDateTime.now()); + hfhcEntity.setOrgCode("330104"); + hfhcEntity.setSfyz("1"); + hfhcEntity.setXfjd("3"); + hfhcEntity.setBldwId("1001"); + hfhcEntity.setWtczId(String.valueOf(entity.getId())); + wtczHfhcDao.insert(hfhcEntity); + } + } + + /** + * 添加评议工单 + * + * @param addForm 新增表单数据 + * @return 统一响应体 + */ + @Transactional(rollbackFor = Exception.class) + public ResponseDTO add(WtczAddForm addForm) { + // 校验受理编号是否唯一 + long count = wtczDao.selectCount(Wrappers.lambdaQuery().eq(WtczEntity::getSlbh, addForm.getSlbh())); + if (count > 0) { + return ResponseDTO.userErrorParam("受理编号已存在,不可重复添加"); + } + + WtczEntity entity = SmartBeanUtil.copy(addForm, WtczEntity.class); + wtczDao.insert(entity); + return ResponseDTO.ok("添加成功"); + } + + /** + * 更新评议工单 + * + * @param updateForm 修改表单数据 + * @return 统一响应体 + */ + @Transactional(rollbackFor = Exception.class) + public ResponseDTO update(WtczUpdateForm updateForm) { + WtczEntity entity = wtczDao.selectById(updateForm.getId()); + if (entity == null) { + return ResponseDTO.userErrorParam("要修改的工单不存在"); + } + + // 校验更新后的受理编号是否与其他工单冲突 + long count = wtczDao.selectCount(Wrappers.lambdaQuery() + .eq(WtczEntity::getSlbh, updateForm.getSlbh()) + .ne(WtczEntity::getId, updateForm.getId())); + if (count > 0) { + return ResponseDTO.userErrorParam("受理编号已被其他工单占用"); + } + + SmartBeanUtil.copyProperties(updateForm, entity); + wtczDao.updateById(entity); + return ResponseDTO.ok("更新成功"); + } + + /** + * 单个删除工单 + * + * @param id 工单主键ID + * @return 统一响应体 + */ + @Transactional(rollbackFor = Exception.class) + public ResponseDTO delete(Long id) { + if (id == null) { + return ResponseDTO.userErrorParam("ID不能为空"); + } + wtczDao.deleteById(id); + return ResponseDTO.ok("删除成功"); + } + + /** + * 批量删除工单 + * + * @param idList ID 列表 + * @return 统一响应体 + */ + @Transactional(rollbackFor = Exception.class) + public ResponseDTO batchDelete(List idList) { + if (CollectionUtils.isEmpty(idList)) { + return ResponseDTO.userErrorParam("待删除的列表不能为空"); + } + wtczDao.deleteBatchIds(idList); + return ResponseDTO.ok("批量删除成功"); + } + + /** + * 获取工单详情 (组合主表、首访通话录音以及二次回访历史信息) + * + * @param id 工单主键ID + * @return 整合后的工单详细视图 + */ + public ResponseDTO getDetail(Long id) { + WtczEntity entity = wtczDao.selectById(id); + if (entity == null) { + return ResponseDTO.userErrorParam("工单不存在"); + } + + WtczVO vo = SmartBeanUtil.copy(entity, WtczVO.class); + + // 1. 查询并聚合首访通话语音列表 + if (StringUtils.isNotBlank(vo.getSlbh())) { + List yyEntities = wtczYyDao.selectList(Wrappers.lambdaQuery() + .eq(WtczYyEntity::getSlbh, vo.getSlbh()) + .orderByDesc(WtczYyEntity::getId)); + if (CollectionUtils.isNotEmpty(yyEntities)) { + vo.setCzzxWtczYyList(SmartBeanUtil.copyList(yyEntities, WtczYyVO.class)); + } + + // 2. 查询并聚合二次回访核实记录 + List hfhcEntities = wtczHfhcDao.selectList(Wrappers.lambdaQuery() + .eq(WtczHfhcEntity::getSlbh, vo.getSlbh()) + .orderByDesc(WtczHfhcEntity::getId)); + if (CollectionUtils.isNotEmpty(hfhcEntities)) { + vo.setCzzxWtczHfhcList(SmartBeanUtil.copyList(hfhcEntities, WtczHfhcVO.class)); + } + } + + return ResponseDTO.ok(vo); + } +} + diff --git a/smart-flow-api/sa-admin/src/main/resources/mapper/business/jwpy/MessageDetailMapper.xml b/smart-flow-api/sa-admin/src/main/resources/mapper/business/jwpy/MessageDetailMapper.xml new file mode 100644 index 0000000..ec41385 --- /dev/null +++ b/smart-flow-api/sa-admin/src/main/resources/mapper/business/jwpy/MessageDetailMapper.xml @@ -0,0 +1,4 @@ + + + + diff --git a/smart-flow-api/sa-admin/src/main/resources/mapper/business/jwpy/WtczHfhcMapper.xml b/smart-flow-api/sa-admin/src/main/resources/mapper/business/jwpy/WtczHfhcMapper.xml new file mode 100644 index 0000000..2255ae3 --- /dev/null +++ b/smart-flow-api/sa-admin/src/main/resources/mapper/business/jwpy/WtczHfhcMapper.xml @@ -0,0 +1,4 @@ + + + + diff --git a/smart-flow-api/sa-admin/src/main/resources/mapper/business/jwpy/WtczMapper.xml b/smart-flow-api/sa-admin/src/main/resources/mapper/business/jwpy/WtczMapper.xml new file mode 100644 index 0000000..4c592dd --- /dev/null +++ b/smart-flow-api/sa-admin/src/main/resources/mapper/business/jwpy/WtczMapper.xml @@ -0,0 +1,4 @@ + + + + diff --git a/smart-flow-api/sa-admin/src/main/resources/mapper/business/jwpy/WtczYyMapper.xml b/smart-flow-api/sa-admin/src/main/resources/mapper/business/jwpy/WtczYyMapper.xml new file mode 100644 index 0000000..4a14101 --- /dev/null +++ b/smart-flow-api/sa-admin/src/main/resources/mapper/business/jwpy/WtczYyMapper.xml @@ -0,0 +1,4 @@ + + + + diff --git a/smart-flow-web/src/api/business/jwpy/wtcz-api.js b/smart-flow-web/src/api/business/jwpy/wtcz-api.js new file mode 100644 index 0000000..06c046a --- /dev/null +++ b/smart-flow-web/src/api/business/jwpy/wtcz-api.js @@ -0,0 +1,52 @@ +/** + * 警务评议与问题处置 api 封装 + * + * @Author: Antigravity + * @Date: 2026-06-09 + */ +import { postRequest, getRequest } from '/@/lib/axios'; + +export const wtczApi = { + + /** + * 分页查询评议工单 + */ + queryPage: (param) => { + return postRequest('/jwpy/wtcz/queryPage', param); + }, + + /** + * 添加工单 + */ + add: (param) => { + return postRequest('/jwpy/wtcz/add', param); + }, + + /** + * 修改工单 + */ + update: (param) => { + return postRequest('/jwpy/wtcz/update', param); + }, + + /** + * 删除工单 + */ + delete: (id) => { + return getRequest(`/jwpy/wtcz/delete/${id}`); + }, + + /** + * 批量删除工单 + */ + batchDelete: (idList) => { + return postRequest('/jwpy/wtcz/batchDelete', idList); + }, + + /** + * 获取工单详情 (组合首访语音和二次回访记录) + */ + getDetail: (id) => { + return getRequest(`/jwpy/wtcz/detail/${id}`); + } +}; diff --git a/smart-flow-web/src/constants/support/dict-const.js b/smart-flow-web/src/constants/support/dict-const.js index 285e665..2d7b7d3 100644 --- a/smart-flow-web/src/constants/support/dict-const.js +++ b/smart-flow-web/src/constants/support/dict-const.js @@ -15,8 +15,22 @@ export const DICT_SPLIT = ','; export const DICT_CODE_ENUM = { GOODS_PLACE: 'GOODS_PLACE', LEAVE_TYPE: 'LEAVE_TYPE', + SYSTEM_CLASSIFICATION: 'SYSTEM_CLASSIFICATION', // 数据大类 + BUSINESS_CLASSIFICATION: 'BUSINESS_CLASSIFICATION', // 业务小类 + SYSTEM_JZ: 'SYSTEM_JZ', // 涉及警种 + IS_FACT: 'IS_FACT', // 是否属实 (核查结论) + CALL_DIRECTION: 'CALL_DIRECTION', // 呼叫方向 + ORDER_SATISFACTION: 'ORDER_SATISFACTION', // 工单满意度 + IS_ENTERPRISE_RELATED: 'IS_ENTERPRISE_RELATED', // 是否涉企 + TRUTH_STATUS: 'TRUTH_STATUS', // 属实情况 (诉求属实分类) + CZZX_WZQK: 'CZZX_WZQK', // 问责情况 + CALLBACK_SATISFACTION: 'CALLBACK_SATISFACTION', // 回访满意度 + CZZX_SQFL: 'CZZX_SQFL', // 诉求分类 }; + + + export default { DICT_CODE_ENUM, }; diff --git a/smart-flow-web/src/views/jwpy/jwpy/flow/index.vue b/smart-flow-web/src/views/jwpy/jwpy/flow/index.vue index 50a6213..ab7118e 100644 --- a/smart-flow-web/src/views/jwpy/jwpy/flow/index.vue +++ b/smart-flow-web/src/views/jwpy/jwpy/flow/index.vue @@ -1,6 +1,13 @@ + \ No newline at end of file diff --git a/smart-flow-web/src/views/jwpy/jwpy/flow/wtcz-detail.vue b/smart-flow-web/src/views/jwpy/jwpy/flow/wtcz-detail.vue new file mode 100644 index 0000000..840eafb --- /dev/null +++ b/smart-flow-web/src/views/jwpy/jwpy/flow/wtcz-detail.vue @@ -0,0 +1,228 @@ + + + + + + diff --git a/smart-flow-web/src/views/jwpy/jwpy/flow/wtcz-form.vue b/smart-flow-web/src/views/jwpy/jwpy/flow/wtcz-form.vue new file mode 100644 index 0000000..9d42ead --- /dev/null +++ b/smart-flow-web/src/views/jwpy/jwpy/flow/wtcz-form.vue @@ -0,0 +1,283 @@ + + + +