Browse Source

1、用户数据同步。2、执法计划数据同步。3、企业投诉数据同步、企业投诉进度查询。

dev-longgang
masiyuan 2 days ago
parent
commit
3d9f10dc4d
  1. BIN
      .gitignore
  2. 127
      zdxt-modules/zdxt-enforcement-code/src/main/java/com/zdxt/enforcementcode/controller/externalInterface/LongGangInterfaceController.java
  3. 13
      zdxt-modules/zdxt-enforcement-code/src/main/java/com/zdxt/enforcementcode/domain/EnterpriseComplaint.java
  4. 5
      zdxt-modules/zdxt-enforcement-code/src/main/java/com/zdxt/enforcementcode/domain/bean/DashboardAreaInfo.java
  5. 27
      zdxt-modules/zdxt-enforcement-code/src/main/java/com/zdxt/enforcementcode/domain/bo/externalInterface/LongGangQueryComplaintBo.java
  6. 24
      zdxt-modules/zdxt-enforcement-code/src/main/java/com/zdxt/enforcementcode/domain/bo/externalInterface/LongGangQueryPlanBo.java
  7. 24
      zdxt-modules/zdxt-enforcement-code/src/main/java/com/zdxt/enforcementcode/domain/bo/externalInterface/LongGangQueryUserBo.java
  8. 6
      zdxt-modules/zdxt-enforcement-code/src/main/java/com/zdxt/enforcementcode/domain/vo/DashboardAreaInfoVo.java
  9. 32
      zdxt-modules/zdxt-enforcement-code/src/main/java/com/zdxt/enforcementcode/domain/vo/externalInterface/LongGangComplaintSyncPageVo.java
  10. 178
      zdxt-modules/zdxt-enforcement-code/src/main/java/com/zdxt/enforcementcode/domain/vo/externalInterface/LongGangComplaintSyncVo.java
  11. 34
      zdxt-modules/zdxt-enforcement-code/src/main/java/com/zdxt/enforcementcode/domain/vo/externalInterface/LongGangPlanSyncPageVo.java
  12. 58
      zdxt-modules/zdxt-enforcement-code/src/main/java/com/zdxt/enforcementcode/domain/vo/externalInterface/LongGangPlanSyncVo.java
  13. 32
      zdxt-modules/zdxt-enforcement-code/src/main/java/com/zdxt/enforcementcode/domain/vo/externalInterface/LongGangUserSyncPageVo.java
  14. 81
      zdxt-modules/zdxt-enforcement-code/src/main/java/com/zdxt/enforcementcode/domain/vo/externalInterface/LongGangUserSyncVo.java
  15. 17
      zdxt-modules/zdxt-enforcement-code/src/main/java/com/zdxt/enforcementcode/mapper/EfcodeCpPlanMapper.java
  16. 20
      zdxt-modules/zdxt-enforcement-code/src/main/java/com/zdxt/enforcementcode/mapper/EnterpriseComplaintMapper.java
  17. 30
      zdxt-modules/zdxt-enforcement-code/src/main/java/com/zdxt/enforcementcode/mapper/LongGangUserQueryMapper.java
  18. 2
      zdxt-modules/zdxt-enforcement-code/src/main/java/com/zdxt/enforcementcode/service/IDashboardAreaInfoService.java
  19. 11
      zdxt-modules/zdxt-enforcement-code/src/main/java/com/zdxt/enforcementcode/service/IEnterpriseComplaintService.java
  20. 19
      zdxt-modules/zdxt-enforcement-code/src/main/java/com/zdxt/enforcementcode/service/ILongGangUserQueryService.java
  21. 11
      zdxt-modules/zdxt-enforcement-code/src/main/java/com/zdxt/enforcementcode/service/IOutEfcodeCpPlanService.java
  22. 12
      zdxt-modules/zdxt-enforcement-code/src/main/java/com/zdxt/enforcementcode/service/impl/DashboardAreaInfoServiceImpl.java
  23. 45
      zdxt-modules/zdxt-enforcement-code/src/main/java/com/zdxt/enforcementcode/service/impl/EnterpriseComplaintServiceImpl.java
  24. 70
      zdxt-modules/zdxt-enforcement-code/src/main/java/com/zdxt/enforcementcode/service/impl/LongGangUserQueryServiceImpl.java
  25. 38
      zdxt-modules/zdxt-enforcement-code/src/main/java/com/zdxt/enforcementcode/service/impl/OutEfcodeCpPlanServiceImpl.java
  26. 35
      zdxt-modules/zdxt-enforcement-code/src/main/resources/mapper/enforcementcode/EfcodeCpPlanMapper.xml
  27. 50
      zdxt-modules/zdxt-enforcement-code/src/main/resources/mapper/enforcementcode/EnterpriseComplaintMapper.xml
  28. 47
      zdxt-modules/zdxt-enforcement-code/src/main/resources/mapper/enforcementcode/LongGangUserQueryMapper.xml

BIN
.gitignore

Binary file not shown.

127
zdxt-modules/zdxt-enforcement-code/src/main/java/com/zdxt/enforcementcode/controller/externalInterface/LongGangInterfaceController.java

@ -5,17 +5,19 @@ import cn.hutool.core.util.StrUtil;
import com.zdxt.enforcementcode.common.util.DataFilterUtil; import com.zdxt.enforcementcode.common.util.DataFilterUtil;
import com.zdxt.enforcementcode.common.util.StringUtils; import com.zdxt.enforcementcode.common.util.StringUtils;
import com.zdxt.enforcementcode.domain.EfcodeCpPlan; import com.zdxt.enforcementcode.domain.EfcodeCpPlan;
import com.zdxt.enforcementcode.domain.MssqOrderFlow;
import com.zdxt.enforcementcode.domain.SysApiPlatformConfigEntity; import com.zdxt.enforcementcode.domain.SysApiPlatformConfigEntity;
import com.zdxt.enforcementcode.domain.bo.EfcodeCpPlanBo; import com.zdxt.enforcementcode.domain.bo.EfcodeCpPlanBo;
import com.zdxt.enforcementcode.domain.bo.EfcodeCpTaskBo; import com.zdxt.enforcementcode.domain.bo.EfcodeCpTaskBo;
import com.zdxt.enforcementcode.domain.bo.externalInterface.LongGangQueryPlanBo;
import com.zdxt.enforcementcode.domain.bo.externalInterface.LongGangQueryUserBo;
import com.zdxt.enforcementcode.domain.bo.externalInterface.*; import com.zdxt.enforcementcode.domain.bo.externalInterface.*;
import com.zdxt.enforcementcode.domain.vo.DashboardAreaInfoVo;
import com.zdxt.enforcementcode.domain.vo.EfcodeCpPlanVo; import com.zdxt.enforcementcode.domain.vo.EfcodeCpPlanVo;
import com.zdxt.enforcementcode.domain.vo.EnterpriseInformationVo; import com.zdxt.enforcementcode.domain.vo.EnterpriseInformationVo;
import com.zdxt.enforcementcode.domain.vo.SrzDeptVo; import com.zdxt.enforcementcode.domain.vo.SrzDeptVo;
import com.zdxt.enforcementcode.domain.vo.externalInterface.LongGangCaseSyncVo; import com.zdxt.enforcementcode.domain.vo.externalInterface.*;
import com.zdxt.enforcementcode.domain.vo.externalInterface.LongGangCreatePlanVo;
import com.zdxt.enforcementcode.service.*; import com.zdxt.enforcementcode.service.*;
import io.swagger.v3.oas.annotations.tags.Tag;
import lombok.RequiredArgsConstructor; import lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j; import lombok.extern.slf4j.Slf4j;
import org.dromara.common.core.domain.R; import org.dromara.common.core.domain.R;
@ -31,7 +33,6 @@ import org.springframework.web.bind.annotation.*;
import java.util.ArrayList; import java.util.ArrayList;
import java.util.List; import java.util.List;
import java.util.Map;
import java.util.stream.Collectors; import java.util.stream.Collectors;
@Slf4j @Slf4j
@ -43,6 +44,7 @@ import java.util.stream.Collectors;
public class LongGangInterfaceController { public class LongGangInterfaceController {
private static final String HEADER_APP_KEY = "App-Key"; private static final String HEADER_APP_KEY = "App-Key";
private static final String LG_AREA_CODE = "440307000";
private final IOutEfcodeCpPlanService outEfcodeCpPlanService; private final IOutEfcodeCpPlanService outEfcodeCpPlanService;
private final IOutEfcodeCpTaskService outEfcodeCpTaskService; private final IOutEfcodeCpTaskService outEfcodeCpTaskService;
@ -50,6 +52,9 @@ public class LongGangInterfaceController {
private final IEnterpriseInformationService enterpriseInformationService; private final IEnterpriseInformationService enterpriseInformationService;
private final ISysDeptService sysDeptService; private final ISysDeptService sysDeptService;
private final ILongGangCaseQueryService longGangCaseQueryService; private final ILongGangCaseQueryService longGangCaseQueryService;
private final IDashboardAreaInfoService dashboardAreaInfoService;
private final ILongGangUserQueryService longGangUserQueryService;
private final IEnterpriseComplaintService enterpriseComplaintService;
/** /**
* 渠道认证:校验 appKey 并返回 channelNo * 渠道认证:校验 appKey 并返回 channelNo
@ -413,4 +418,118 @@ public class LongGangInterfaceController {
return R.ok(vo); return R.ok(vo);
} }
/**
* 外部接口-执法计划同步
* 分页查询本渠道下已产生任务的计划,支持通过 startTime/endTime(计划更新时间)做增量同步。
*
* @param appKey 请求头 App-Key,用于识别调用渠道
* @param bo 查询参数(pageNum、pageSize、startTime、endTime)
* @return 计划分页结果
*/
@SaIgnore
@Log(title = "外部接口-执法计划同步", businessType = BusinessType.OTHER)
@PostMapping("/plan/sync")
public R<LongGangPlanSyncPageVo> syncPlan(
@RequestHeader(value = HEADER_APP_KEY, required = false) String appKey,
@RequestBody LongGangQueryPlanBo bo) {
// 渠道认证
R<String> authResult = authenticateChannel(appKey);
if (!R.isSuccess(authResult)) {
return R.fail(authResult.getMsg());
}
String channelNo = authResult.getData();
// 根据行政区code查询龙岗区code
DashboardAreaInfoVo areaInfoVo = dashboardAreaInfoService.getAreaInfoByCode(LG_AREA_CODE);
if (areaInfoVo == null) {
return R.fail("未找到龙岗区行政区信息");
}
LongGangPlanSyncPageVo vo = outEfcodeCpPlanService.syncPlan(bo, areaInfoVo.getCode());
log.info("[外部接口] 同步执法计划, appKey={}, channelNo={}, startTime={}, endTime={}, pageNum={}, pageSize={}, total={}",
appKey, channelNo, bo.getStartTime(), bo.getEndTime(), vo.getPageNum(), vo.getPageSize(), vo.getTotal());
return R.ok(vo);
}
/**
* 外部接口-龙岗区用户同步
* 分页查询龙岗区(行政区编码 440307000)下的用户,支持通过 startTime/endTime(用户更新时间)做增量同步。
*
* @param appKey 请求头 App-Key,用于识别调用渠道
* @param bo 查询参数(pageNum、pageSize、startTime、endTime)
* @return 用户分页结果
*/
@SaIgnore
@Log(title = "外部接口-龙岗区用户同步", businessType = BusinessType.OTHER)
@PostMapping("/user/sync")
public R<LongGangUserSyncPageVo> syncUser(
@RequestHeader(value = HEADER_APP_KEY, required = false) String appKey,
@RequestBody LongGangQueryUserBo bo) {
// 渠道认证
R<String> authResult = authenticateChannel(appKey);
if (!R.isSuccess(authResult)) {
return R.fail(authResult.getMsg());
}
String channelNo = authResult.getData();
// 根据行政区code查询龙岗区code
DashboardAreaInfoVo areaInfoVo = dashboardAreaInfoService.getAreaInfoByCode(LG_AREA_CODE);
if (areaInfoVo == null) {
return R.fail("未找到龙岗区行政区信息");
}
// sys_user、sys_dept连表根据code查询龙岗区用户信息
LongGangUserSyncPageVo vo = longGangUserQueryService.syncUser(bo, areaInfoVo.getCode());
log.info("[外部接口] 同步用户, appKey={}, channelNo={}, startTime={}, endTime={}, pageNum={}, pageSize={}, total={}",
appKey, channelNo, bo.getStartTime(), bo.getEndTime(), vo.getPageNum(), vo.getPageSize(), vo.getTotal());
return R.ok(vo);
}
@SaIgnore
@Log(title = "外部接口-龙岗区企业投诉同步", businessType = BusinessType.OTHER)
@PostMapping("/complaint/sync")
public R<LongGangComplaintSyncPageVo> syncComplaint(
@RequestHeader(value = HEADER_APP_KEY, required = false) String appKey,
@RequestBody LongGangQueryComplaintBo bo) {
R<String> authResult = authenticateChannel(appKey);
if (!R.isSuccess(authResult)) {
return R.fail(authResult.getMsg());
}
String channelNo = authResult.getData();
// 根据行政区code查询龙岗区code
DashboardAreaInfoVo areaInfoVo = dashboardAreaInfoService.getAreaInfoByCode(LG_AREA_CODE);
if (areaInfoVo == null) {
return R.fail("未找到龙岗区行政区信息");
}
LongGangComplaintSyncPageVo vo = enterpriseComplaintService.syncComplaint(bo, areaInfoVo.getCode());
log.info("[外部接口] 同步企业投诉, appKey={}, channelNo={}, startTime={}, endTime={}, pageNum={}, pageSize={}, total={}",
appKey, channelNo, bo.getStartTime(), bo.getEndTime(), vo.getPageNum(), vo.getPageSize(), vo.getTotal());
return R.ok(vo);
}
@SaIgnore
@Log(title = "外部接口-龙岗区企业投诉进度详情", businessType = BusinessType.OTHER)
@PostMapping("/complaint/detail")
public R<List<MssqOrderFlow>> getComplaintDetail(
@RequestHeader(value = HEADER_APP_KEY, required = false) String appKey,
@RequestBody LongGangQueryComplaintBo bo) {
R<String> authResult = authenticateChannel(appKey);
if (!R.isSuccess(authResult)) {
return R.fail(authResult.getMsg());
}
String channelNo = authResult.getData();
String complaintId = bo.getComplaintId();
List<MssqOrderFlow> mssqOrderFlowList = enterpriseComplaintService.selectEnterpriseComplaintProcess(complaintId);
log.info("[外部接口] 获取企业投诉详情, appKey={}, channelNo={}, complaintId={}",
appKey, channelNo, complaintId);
return R.ok(mssqOrderFlowList);
}
} }

13
zdxt-modules/zdxt-enforcement-code/src/main/java/com/zdxt/enforcementcode/domain/EnterpriseComplaint.java

@ -1,13 +1,14 @@
package com.zdxt.enforcementcode.domain; package com.zdxt.enforcementcode.domain;
import org.dromara.common.mybatis.core.domain.BaseEntity; import com.baomidou.mybatisplus.annotation.TableField;
import com.baomidou.mybatisplus.annotation.*; import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.annotation.TableName;
import lombok.Data; import lombok.Data;
import lombok.EqualsAndHashCode; import lombok.EqualsAndHashCode;
import java.util.Date; import org.dromara.common.mybatis.core.domain.BaseEntity;
import com.fasterxml.jackson.annotation.JsonFormat;
import java.io.Serial; import java.io.Serial;
import java.util.Date;
import java.util.List; import java.util.List;
/** /**
@ -158,12 +159,16 @@ public class EnterpriseComplaint extends BaseEntity {
/** /**
* 投诉事项编码 多个逗号隔开 * 投诉事项编码 多个逗号隔开
*/ */
@TableField(exist = false)
private String enforceTypeStr; private String enforceTypeStr;
@TableField(exist = false)
private String complaintTypeStr; private String complaintTypeStr;
@TableField(exist = false)
private String createTimeStr; private String createTimeStr;
/** /**
* 民生诉求数据处置流程 * 民生诉求数据处置流程
*/ */
@TableField(exist = false)
private List<MssqOrderFlow> mssqOrderFlows; private List<MssqOrderFlow> mssqOrderFlows;
} }

5
zdxt-modules/zdxt-enforcement-code/src/main/java/com/zdxt/enforcementcode/domain/bean/DashboardAreaInfo.java

@ -37,6 +37,11 @@ public class DashboardAreaInfo extends BaseEntity {
*/ */
private String name; private String name;
/**
* 行政区编码
*/
private String areaCode;
/** /**
* 父级编码 * 父级编码
*/ */

27
zdxt-modules/zdxt-enforcement-code/src/main/java/com/zdxt/enforcementcode/domain/bo/externalInterface/LongGangQueryComplaintBo.java

@ -0,0 +1,27 @@
package com.zdxt.enforcementcode.domain.bo.externalInterface;
import io.swagger.v3.oas.annotations.media.Schema;
import lombok.Data;
/**
* @author msy
* @Date: 2026/11/10
*/
@Data
public class LongGangQueryComplaintBo {
@Schema(description = "页码,从1开始,默认1")
private Integer pageNum = 1;
@Schema(description = "每页条数,默认 100")
private Integer pageSize = 100;
@Schema(description = "开始时间(yyyy-MM-dd HH:mm:ss)")
private String startTime;
@Schema(description = "结束时间(yyyy-MM-dd HH:mm:ss)")
private String endTime;
@Schema(description = "投诉id")
private String complaintId;
}

24
zdxt-modules/zdxt-enforcement-code/src/main/java/com/zdxt/enforcementcode/domain/bo/externalInterface/LongGangQueryPlanBo.java

@ -0,0 +1,24 @@
package com.zdxt.enforcementcode.domain.bo.externalInterface;
import io.swagger.v3.oas.annotations.media.Schema;
import lombok.Data;
/**
* @author msy
* @Date: 2026/11/10
*/
@Data
public class LongGangQueryPlanBo {
@Schema(description = "页码,从1开始,默认1")
private Integer pageNum = 1;
@Schema(description = "每页条数,默认 100")
private Integer pageSize = 100;
@Schema(description = "开始时间(yyyy-MM-dd HH:mm:ss)")
private String startTime;
@Schema(description = "结束时间(yyyy-MM-dd HH:mm:ss)")
private String endTime;
}

24
zdxt-modules/zdxt-enforcement-code/src/main/java/com/zdxt/enforcementcode/domain/bo/externalInterface/LongGangQueryUserBo.java

@ -0,0 +1,24 @@
package com.zdxt.enforcementcode.domain.bo.externalInterface;
import io.swagger.v3.oas.annotations.media.Schema;
import lombok.Data;
/**
* @author msy
* @Date: 2026/11/10
*/
@Data
public class LongGangQueryUserBo {
@Schema(description = "页码,从1开始,默认1")
private Integer pageNum = 1;
@Schema(description = "每页条数,默认 100")
private Integer pageSize = 100;
@Schema(description = "开始时间(yyyy-MM-dd HH:mm:ss)")
private String startTime;
@Schema(description = "结束时间(yyyy-MM-dd HH:mm:ss)")
private String endTime;
}

6
zdxt-modules/zdxt-enforcement-code/src/main/java/com/zdxt/enforcementcode/domain/vo/DashboardAreaInfoVo.java

@ -45,6 +45,12 @@ public class DashboardAreaInfoVo implements Serializable {
@ExcelProperty(value = "名称") @ExcelProperty(value = "名称")
private String name; private String name;
/**
* 行政区编码
*/
@ExcelProperty(value = "行政区编码")
private String areaCode;
/** /**
* 父级编码 * 父级编码
*/ */

32
zdxt-modules/zdxt-enforcement-code/src/main/java/com/zdxt/enforcementcode/domain/vo/externalInterface/LongGangComplaintSyncPageVo.java

@ -0,0 +1,32 @@
package com.zdxt.enforcementcode.domain.vo.externalInterface;
import io.swagger.v3.oas.annotations.media.Schema;
import lombok.Data;
import java.io.Serial;
import java.io.Serializable;
import java.util.ArrayList;
import java.util.List;
/**
* @author msy
* @Date: 2026/11/10
*/
@Data
public class LongGangComplaintSyncPageVo implements Serializable {
@Serial
private static final long serialVersionUID = 1L;
@Schema(description = "页码,从1开始")
private Integer pageNum;
@Schema(description = "每页条数")
private Integer pageSize;
@Schema(description = "总条数")
private Long total;
@Schema(description = "投诉列表")
private List<LongGangComplaintSyncVo> list = new ArrayList<>();
}

178
zdxt-modules/zdxt-enforcement-code/src/main/java/com/zdxt/enforcementcode/domain/vo/externalInterface/LongGangComplaintSyncVo.java

@ -0,0 +1,178 @@
package com.zdxt.enforcementcode.domain.vo.externalInterface;
import io.swagger.v3.oas.annotations.media.Schema;
import lombok.Data;
import java.io.Serial;
import java.io.Serializable;
import java.util.Date;
/**
* @author msy
* @Date: 2026/11/10
*/
@Data
public class LongGangComplaintSyncVo implements Serializable {
@Serial
private static final long serialVersionUID = 1L;
/**
* 主键ID
*/
private String id;
/**
* 关联执法记录ID
*/
@Schema(description = "关联执法记录ID")
private String relId;
/**
* 执法类型
*/
@Schema(description = "执法类型")
private Long enforceType;
/**
* 问题描述
*/
@Schema(description = "问题描述")
private String problemDescription;
/**
* 联系人
*/
@Schema(description = "联系人")
private String linkman;
/**
* 联系方式
*/
@Schema(description = "联系方式")
private String linkmanTel;
/**
* 是否删除 0 否 1 是
*/
@Schema(description = "是否删除 0 否 1 是")
private Long isDelete;
/**
* 投诉对接12345案件类型
*/
@Schema(description = "投诉对接12345案件类型")
private String caseType;
/**
*
*/
private Long authorization;
/**
*
*/
private Long comOrOpi;
/**
*
*/
private String enterpriseAddress;
/**
*
*/
private String proWoCode;
/**
*
*/
private Long status;
/**
*
*/
private Date evaluateTime;
/**
*
*/
private String enterpriseNumber;
/**
*
*/
private String enterpriseName;
/**
* 执法部门多个-逗号隔开
*/
@Schema(description = "执法部门多个-逗号隔开")
private String complaintDepartments;
/**
* 执法部门id多个-逗号隔开
*/
@Schema(description = "执法部门id多个-逗号隔开")
private String complaintDepartmentIds;
/**
* 执法时间
*/
@Schema(description = "执法时间")
private Date enforcementTime;
/**
* 投诉类型 0 系默认 1 联合检查
*/
@Schema(description = "投诉类型 0 系默认 1 联合检查")
private Long complaintType;
/**
* 投诉事项编码,多个逗号隔开
*/
@Schema(description = "投诉事项编码,多个逗号隔开")
private String complaintItemCodes;
/**
* 投诉事项名称,多个逗号隔开
*/
@Schema(description = "投诉事项名称,多个逗号隔开")
private String complaintItemNames;
/**
* 同步过来的处理时间
*/
@Schema(description = "同步过来的处理时间")
private String handleTime;
/**
* 投诉事项(对应记录表执法/入企事项)
*/
@Schema(description = "投诉事项(对应记录表执法/入企事项)")
private String complaintRecordItem;
/**
* 数据类型 0行政 1 非行政
*/
@Schema(description = "数据类型 0行政 1 非行政")
private Long recordType;
/**
* 详细地址
*/
@Schema(description = "详细地址")
private String detailedAddress;
/**
* 创建时间
*/
@Schema(description = "创建时间")
private Date createTime;
/**
* 更新时间
*/
@Schema(description = "更新时间")
private Date updateTime;
}

34
zdxt-modules/zdxt-enforcement-code/src/main/java/com/zdxt/enforcementcode/domain/vo/externalInterface/LongGangPlanSyncPageVo.java

@ -0,0 +1,34 @@
package com.zdxt.enforcementcode.domain.vo.externalInterface;
import io.swagger.v3.oas.annotations.media.Schema;
import lombok.Data;
import java.io.Serial;
import java.io.Serializable;
import java.util.ArrayList;
import java.util.List;
/**
* 外部接口-执法计划同步分页结果
*
* @author msy
* @Date: 2026/11/10
*/
@Data
public class LongGangPlanSyncPageVo implements Serializable {
@Serial
private static final long serialVersionUID = 1L;
@Schema(description = "页码,从1开始")
private Integer pageNum;
@Schema(description = "每页条数")
private Integer pageSize;
@Schema(description = "总条数")
private Long total;
@Schema(description = "计划列表")
private List<LongGangPlanSyncVo> list = new ArrayList<>();
}

58
zdxt-modules/zdxt-enforcement-code/src/main/java/com/zdxt/enforcementcode/domain/vo/externalInterface/LongGangPlanSyncVo.java

@ -0,0 +1,58 @@
package com.zdxt.enforcementcode.domain.vo.externalInterface;
import io.swagger.v3.oas.annotations.media.Schema;
import lombok.Data;
import java.io.Serial;
import java.io.Serializable;
import java.util.Date;
/**
* @author msy
* @Date: 2026/11/10
*/
@Data
public class LongGangPlanSyncVo implements Serializable {
@Serial
private static final long serialVersionUID = 1L;
@Schema(description = "计划id")
private String planId;
@Schema(description = "任务id")
private String taskId;
@Schema(description = "外部流水号")
private String outSerialNo;
@Schema(description = "执法单位ID")
private String bureauDeptId;
@Schema(description = "执法单位名称")
private String bureauDeptName;
@Schema(description = "计划执行日期(如 2025-05-08)")
private Date planDate;
@Schema(description = "执行时段:1=上午,2=下午,3=其他")
private Long planTime;
@Schema(description = "被检查企业/机构名称")
private String enterpriseName;
@Schema(description = "被检查企业/机构信用代码")
private String enterpriseNumber;
@Schema(description = "执法人员姓名(多个逗号分隔)")
private String enforceUserNames;
@Schema(description = "执法人员ID(多个逗号分隔)")
private String enforceUserIds;
@Schema(description = "创建时间")
private Date createTime;
@Schema(description = "更新时间")
private Date updateTime;
}

32
zdxt-modules/zdxt-enforcement-code/src/main/java/com/zdxt/enforcementcode/domain/vo/externalInterface/LongGangUserSyncPageVo.java

@ -0,0 +1,32 @@
package com.zdxt.enforcementcode.domain.vo.externalInterface;
import io.swagger.v3.oas.annotations.media.Schema;
import lombok.Data;
import java.io.Serial;
import java.io.Serializable;
import java.util.ArrayList;
import java.util.List;
/**
* @author msy
* @Date: 2026/11/10
*/
@Data
public class LongGangUserSyncPageVo implements Serializable {
@Serial
private static final long serialVersionUID = 1L;
@Schema(description = "页码,从1开始")
private Integer pageNum;
@Schema(description = "每页条数")
private Integer pageSize;
@Schema(description = "总条数")
private Long total;
@Schema(description = "用户列表")
private List<LongGangUserSyncVo> list = new ArrayList<>();
}

81
zdxt-modules/zdxt-enforcement-code/src/main/java/com/zdxt/enforcementcode/domain/vo/externalInterface/LongGangUserSyncVo.java

@ -0,0 +1,81 @@
package com.zdxt.enforcementcode.domain.vo.externalInterface;
import io.swagger.v3.oas.annotations.media.Schema;
import lombok.Data;
import java.util.Date;
/**
*
* @author msy
* @Date: 2026/11/10
*/
@Data
public class LongGangUserSyncVo {
@Schema(description = "用户ID")
private Long userId;
@Schema(description = "部门ID")
private String deptId;
@Schema(description = "用户账号")
private String userName;
@Schema(description = "用户昵称")
private String nickName;
@Schema(description = "用户类型(sys_user系统用户)")
private String userType;
@Schema(description = "用户邮箱")
private String email;
@Schema(description = "手机号码")
private String phonenumber;
@Schema(description = "用户性别")
private String sex;
@Schema(description = "账号状态(0正常 1停用)")
private String status;
@Schema(description = "删除标志(0代表存在 1代表删除)")
private String delFlag;
@Schema(description = "备注")
private String remark;
@Schema(description = "登录账号")
private String loginName;
@Schema(description = "用户类型")
private String type;
@Schema(description = "执法证件号")
private String lawCertificateNum;
@Schema(description = "姓名")
private String fullname;
@Schema(description = "是否删除 (0否;1是)")
private String isDeleted;
@Schema(description = "是否禁用 (0否;1是)")
private String isDisabled;
@Schema(description = "创建日期(时间戳)")
private String createAt;
@Schema(description = "更新日期(时间戳)")
private String updateAt;
@Schema(description = "创建时间")
private Date createTime;
@Schema(description = "更新时间")
private Date updateTime;
@Schema(description = "加密备注二")
private String cryptoRemarkTwo;
}

17
zdxt-modules/zdxt-enforcement-code/src/main/java/com/zdxt/enforcementcode/mapper/EfcodeCpPlanMapper.java

@ -4,9 +4,12 @@ import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.zdxt.enforcementcode.domain.EfcodeCpPlan; import com.zdxt.enforcementcode.domain.EfcodeCpPlan;
import com.zdxt.enforcementcode.domain.bo.EfcodeCpPlanBo; import com.zdxt.enforcementcode.domain.bo.EfcodeCpPlanBo;
import com.zdxt.enforcementcode.domain.vo.EfcodeCpPlanVo; import com.zdxt.enforcementcode.domain.vo.EfcodeCpPlanVo;
import com.zdxt.enforcementcode.domain.vo.externalInterface.LongGangPlanSyncVo;
import org.apache.ibatis.annotations.Param; import org.apache.ibatis.annotations.Param;
import org.dromara.common.mybatis.core.mapper.BaseMapperPlus; import org.dromara.common.mybatis.core.mapper.BaseMapperPlus;
import java.util.Date;
/** /**
* 行政执法检查计划-计划Mapper接口 * 行政执法检查计划-计划Mapper接口
* *
@ -35,4 +38,18 @@ public interface EfcodeCpPlanMapper extends BaseMapperPlus<EfcodeCpPlan, EfcodeC
@Param("bureauDeptId") String bureauDeptId @Param("bureauDeptId") String bureauDeptId
); );
/**
* 分页查询指定区域执法单位下已产生任务的计划,支持按更新时间区间增量同步
*
* @param page 分页参数
* @param areaCode 行政区编码(dashboard_area_info.code)
* @param startTime 更新时间起(含),null 不限
* @param endTime 更新时间止(含),null 不限
* @return 计划分页数据
*/
Page<LongGangPlanSyncVo> selectSyncPage(Page<LongGangPlanSyncVo> page,
@Param("areaCode") String areaCode,
@Param("startTime") Date startTime,
@Param("endTime") Date endTime);
} }

20
zdxt-modules/zdxt-enforcement-code/src/main/java/com/zdxt/enforcementcode/mapper/EnterpriseComplaintMapper.java

@ -1,9 +1,14 @@
package com.zdxt.enforcementcode.mapper; package com.zdxt.enforcementcode.mapper;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.zdxt.enforcementcode.domain.EnterpriseComplaint; import com.zdxt.enforcementcode.domain.EnterpriseComplaint;
import com.zdxt.enforcementcode.domain.vo.EnterpriseComplaintVo; import com.zdxt.enforcementcode.domain.vo.EnterpriseComplaintVo;
import com.zdxt.enforcementcode.domain.vo.externalInterface.LongGangComplaintSyncVo;
import org.apache.ibatis.annotations.Param;
import org.dromara.common.mybatis.core.mapper.BaseMapperPlus; import org.dromara.common.mybatis.core.mapper.BaseMapperPlus;
import java.util.Date;
/** /**
* 企业执法-在线投诉Mapper接口 * 企业执法-在线投诉Mapper接口
* *
@ -19,4 +24,19 @@ public interface EnterpriseComplaintMapper extends BaseMapperPlus<EnterpriseComp
* @return 企业执法-在线投诉 * @return 企业执法-在线投诉
*/ */
EnterpriseComplaint selectEnterpriseComplaintById(String id); EnterpriseComplaint selectEnterpriseComplaintById(String id);
/**
* 按所属区域分页查询投诉,支持按更新时间区间增量同步
* <p>只要投诉关联的执法单位中有一个属于该区域即计入</p>
*
* @param page 分页参数
* @param areaCode 行政区编码(dashboard_area_info.code)
* @param startTime 更新时间起(含),null 不限
* @param endTime 更新时间止(含),null 不限
* @return 投诉分页数据
*/
Page<LongGangComplaintSyncVo> selectSyncPage(Page<LongGangComplaintSyncVo> page,
@Param("areaCode") String areaCode,
@Param("startTime") Date startTime,
@Param("endTime") Date endTime);
} }

30
zdxt-modules/zdxt-enforcement-code/src/main/java/com/zdxt/enforcementcode/mapper/LongGangUserQueryMapper.java

@ -0,0 +1,30 @@
package com.zdxt.enforcementcode.mapper;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.zdxt.enforcementcode.domain.vo.externalInterface.LongGangUserSyncVo;
import org.apache.ibatis.annotations.Param;
import java.util.Date;
/**
* 龙岗外部接口-用户同步查询 Mapper
*
* @author msy
*/
public interface LongGangUserQueryMapper {
/**
* 按所属区域分页查询用户,支持按更新时间区间增量同步
*
* @param page 分页参数
* @param areaCode 龙岗区行政区编码(dashboard_area_info.code)
* @param startTime 更新时间起(含),null 不限
* @param endTime 更新时间止(含),null 不限
* @return 用户分页数据
*/
Page<LongGangUserSyncVo> selectUserSyncPage(Page<LongGangUserSyncVo> page,
@Param("areaCode") String areaCode,
@Param("startTime") Date startTime,
@Param("endTime") Date endTime);
}

2
zdxt-modules/zdxt-enforcement-code/src/main/java/com/zdxt/enforcementcode/service/IDashboardAreaInfoService.java

@ -72,4 +72,6 @@ public interface IDashboardAreaInfoService {
List<Tree<String>> buildAreaTree(); List<Tree<String>> buildAreaTree();
List<DashboardDomainDeptVo> getDomainInfo(); List<DashboardDomainDeptVo> getDomainInfo();
DashboardAreaInfoVo getAreaInfoByCode(String code);
} }

11
zdxt-modules/zdxt-enforcement-code/src/main/java/com/zdxt/enforcementcode/service/IEnterpriseComplaintService.java

@ -3,6 +3,8 @@ package com.zdxt.enforcementcode.service;
import com.zdxt.enforcementcode.domain.MssqOrderFlow; import com.zdxt.enforcementcode.domain.MssqOrderFlow;
import com.zdxt.enforcementcode.domain.vo.EnterpriseComplaintVo; import com.zdxt.enforcementcode.domain.vo.EnterpriseComplaintVo;
import com.zdxt.enforcementcode.domain.bo.EnterpriseComplaintBo; import com.zdxt.enforcementcode.domain.bo.EnterpriseComplaintBo;
import com.zdxt.enforcementcode.domain.vo.externalInterface.LongGangComplaintSyncPageVo;
import com.zdxt.enforcementcode.domain.bo.externalInterface.LongGangQueryComplaintBo;
import org.dromara.common.mybatis.core.page.TableDataInfo; import org.dromara.common.mybatis.core.page.TableDataInfo;
import org.dromara.common.mybatis.core.page.PageQuery; import org.dromara.common.mybatis.core.page.PageQuery;
@ -74,4 +76,13 @@ public interface IEnterpriseComplaintService {
* @return 企业执法-在线投诉 * @return 企业执法-在线投诉
*/ */
List<MssqOrderFlow> selectEnterpriseComplaintProcess(String id); List<MssqOrderFlow> selectEnterpriseComplaintProcess(String id);
/**
* 分页查询指定区域的企业投诉,支持按更新时间区间增量同步
*
* @param bo 查询参数(pageNum、pageSize、startTime、endTime)
* @param areaCode 行政区编码(dashboard_area_info.code)
* @return 投诉分页结果
*/
LongGangComplaintSyncPageVo syncComplaint(LongGangQueryComplaintBo bo, String areaCode);
} }

19
zdxt-modules/zdxt-enforcement-code/src/main/java/com/zdxt/enforcementcode/service/ILongGangUserQueryService.java

@ -0,0 +1,19 @@
package com.zdxt.enforcementcode.service;
import com.zdxt.enforcementcode.domain.bo.externalInterface.LongGangQueryUserBo;
import com.zdxt.enforcementcode.domain.vo.externalInterface.LongGangUserSyncPageVo;
/**
* 龙岗外部接口-用户同步查询
*/
public interface ILongGangUserQueryService {
/**
* 分页查询龙岗区用户,支持按更新时间区间增量同步。
*
* @param bo 查询参数(pageNum、pageSize、startTime、endTime)
* @param areaCode 龙岗区行政区编码(dashboard_area_info.code)
* @return 用户分页结果
*/
LongGangUserSyncPageVo syncUser(LongGangQueryUserBo bo, String areaCode);
}

11
zdxt-modules/zdxt-enforcement-code/src/main/java/com/zdxt/enforcementcode/service/IOutEfcodeCpPlanService.java

@ -2,7 +2,9 @@ package com.zdxt.enforcementcode.service;
import com.zdxt.enforcementcode.domain.EfcodeCpReserve; import com.zdxt.enforcementcode.domain.EfcodeCpReserve;
import com.zdxt.enforcementcode.domain.bo.EfcodeCpPlanBo; import com.zdxt.enforcementcode.domain.bo.EfcodeCpPlanBo;
import com.zdxt.enforcementcode.domain.bo.externalInterface.LongGangQueryPlanBo;
import com.zdxt.enforcementcode.domain.vo.EfcodeCpPlanVo; import com.zdxt.enforcementcode.domain.vo.EfcodeCpPlanVo;
import com.zdxt.enforcementcode.domain.vo.externalInterface.LongGangPlanSyncPageVo;
import org.dromara.common.mybatis.core.page.PageQuery; import org.dromara.common.mybatis.core.page.PageQuery;
import org.dromara.common.mybatis.core.page.TableDataInfo; import org.dromara.common.mybatis.core.page.TableDataInfo;
import org.springframework.transaction.annotation.Transactional; import org.springframework.transaction.annotation.Transactional;
@ -53,6 +55,15 @@ public interface IOutEfcodeCpPlanService {
*/ */
EfcodeCpPlanVo queryByOutSerialNoAndChannelNo(String outSerialNo, String channelNo); EfcodeCpPlanVo queryByOutSerialNoAndChannelNo(String outSerialNo, String channelNo);
/**
* 分页查询指定区域执法单位下已产生任务的计划,支持按更新时间区间增量同步
*
* @param bo 查询参数(pageNum、pageSize、startTime、endTime)
* @param areaCode 行政区编码(dashboard_area_info.code)
* @return 计划分页结果
*/
LongGangPlanSyncPageVo syncPlan(LongGangQueryPlanBo bo, String areaCode);
/** /**
* 新增行政执法检查计划-计划 * 新增行政执法检查计划-计划
* *

12
zdxt-modules/zdxt-enforcement-code/src/main/java/com/zdxt/enforcementcode/service/impl/DashboardAreaInfoServiceImpl.java

@ -120,5 +120,17 @@ public class DashboardAreaInfoServiceImpl implements IDashboardAreaInfoService {
return dashboardDomainDeptMapper.getDomainInfo(); return dashboardDomainDeptMapper.getDomainInfo();
} }
@Override
public DashboardAreaInfoVo getAreaInfoByCode(String code) {
if (StringUtils.isBlank(code)) {
return null;
}
LambdaQueryWrapper<DashboardAreaInfo> lqw = Wrappers.lambdaQuery();
lqw.eq(DashboardAreaInfo::getAreaCode, code)
.eq(DashboardAreaInfo::getIsDelete, "0")
.last("LIMIT 1");
return baseMapper.selectVoOne(lqw);
}
} }

45
zdxt-modules/zdxt-enforcement-code/src/main/java/com/zdxt/enforcementcode/service/impl/EnterpriseComplaintServiceImpl.java

@ -1,12 +1,17 @@
package com.zdxt.enforcementcode.service.impl; package com.zdxt.enforcementcode.service.impl;
import cn.hutool.core.date.DateUtil;
import cn.hutool.core.util.StrUtil;
import com.alibaba.fastjson.JSONArray; import com.alibaba.fastjson.JSONArray;
import com.alibaba.fastjson.JSONObject; import com.alibaba.fastjson.JSONObject;
import com.zdxt.enforcementcode.domain.MssqAddOrder;
import com.zdxt.enforcementcode.domain.MssqOrderFlow; import com.zdxt.enforcementcode.domain.MssqOrderFlow;
import com.zdxt.enforcementcode.domain.bo.MssqAddOrderBo; import com.zdxt.enforcementcode.domain.bo.MssqAddOrderBo;
import com.zdxt.enforcementcode.domain.vo.externalInterface.LongGangComplaintSyncPageVo;
import com.zdxt.enforcementcode.domain.vo.externalInterface.LongGangComplaintSyncVo;
import com.zdxt.enforcementcode.domain.bo.externalInterface.LongGangQueryComplaintBo;
import com.zdxt.enforcementcode.service.IMssqApiService; import com.zdxt.enforcementcode.service.IMssqApiService;
import org.apache.commons.compress.utils.Lists; import org.apache.commons.compress.utils.Lists;
import org.dromara.common.core.exception.ServiceException;
import org.dromara.common.core.utils.MapstructUtils; import org.dromara.common.core.utils.MapstructUtils;
import org.dromara.common.core.utils.StringUtils; import org.dromara.common.core.utils.StringUtils;
import org.dromara.common.mybatis.core.page.TableDataInfo; import org.dromara.common.mybatis.core.page.TableDataInfo;
@ -24,6 +29,7 @@ import com.zdxt.enforcementcode.mapper.EnterpriseComplaintMapper;
import com.zdxt.enforcementcode.service.IEnterpriseComplaintService; import com.zdxt.enforcementcode.service.IEnterpriseComplaintService;
import java.util.Collections; import java.util.Collections;
import java.util.Date;
import java.util.List; import java.util.List;
import java.util.Map; import java.util.Map;
import java.util.Collection; import java.util.Collection;
@ -39,6 +45,10 @@ import java.util.Collection;
@Service @Service
public class EnterpriseComplaintServiceImpl implements IEnterpriseComplaintService { public class EnterpriseComplaintServiceImpl implements IEnterpriseComplaintService {
private static final int DEFAULT_PAGE_NUM = 1;
private static final int DEFAULT_PAGE_SIZE = 100;
private static final int MAX_PAGE_SIZE = 500;
private final EnterpriseComplaintMapper baseMapper; private final EnterpriseComplaintMapper baseMapper;
private final IMssqApiService mssqApiService; private final IMssqApiService mssqApiService;
@ -195,4 +205,37 @@ public class EnterpriseComplaintServiceImpl implements IEnterpriseComplaintServi
} }
return Lists.newArrayList(); return Lists.newArrayList();
} }
@Override
public LongGangComplaintSyncPageVo syncComplaint(LongGangQueryComplaintBo bo, String areaCode) {
if (bo == null) {
bo = new LongGangQueryComplaintBo();
}
int pageNum = bo.getPageNum() == null || bo.getPageNum() < 1 ? DEFAULT_PAGE_NUM : bo.getPageNum();
int pageSize = bo.getPageSize() == null || bo.getPageSize() < 1 ? DEFAULT_PAGE_SIZE : Math.min(bo.getPageSize(), MAX_PAGE_SIZE);
Date startTime = parseTime(bo.getStartTime(), "开始时间");
Date endTime = parseTime(bo.getEndTime(), "结束时间");
Page<LongGangComplaintSyncVo> page = baseMapper.selectSyncPage(
new Page<>(pageNum, pageSize), areaCode, startTime, endTime);
LongGangComplaintSyncPageVo vo = new LongGangComplaintSyncPageVo();
vo.setPageNum(pageNum);
vo.setPageSize(pageSize);
vo.setTotal(page.getTotal());
vo.setList(page.getRecords());
return vo;
}
private Date parseTime(String time, String fieldName) {
if (StrUtil.isBlank(time)) {
return null;
}
try {
return DateUtil.parse(time);
} catch (Exception e) {
throw new ServiceException(fieldName + "格式错误,应为 yyyy-MM-dd HH:mm:ss");
}
}
} }

70
zdxt-modules/zdxt-enforcement-code/src/main/java/com/zdxt/enforcementcode/service/impl/LongGangUserQueryServiceImpl.java

@ -0,0 +1,70 @@
package com.zdxt.enforcementcode.service.impl;
import cn.hutool.core.date.DateUtil;
import cn.hutool.core.util.StrUtil;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.zdxt.enforcementcode.common.util.CommonUtil;
import com.zdxt.enforcementcode.domain.bo.externalInterface.LongGangQueryUserBo;
import com.zdxt.enforcementcode.domain.vo.externalInterface.LongGangUserSyncPageVo;
import com.zdxt.enforcementcode.domain.vo.externalInterface.LongGangUserSyncVo;
import com.zdxt.enforcementcode.mapper.LongGangUserQueryMapper;
import com.zdxt.enforcementcode.service.ILongGangUserQueryService;
import lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j;
import org.dromara.common.core.exception.ServiceException;
import org.springframework.stereotype.Service;
import java.util.Date;
/**
* 龙岗外部接口-用户同步查询。
* 按所属区域分页查询用户,供第三方按更新时间增量同步。
*/
@Slf4j
@RequiredArgsConstructor
@Service
public class LongGangUserQueryServiceImpl implements ILongGangUserQueryService {
private static final int DEFAULT_PAGE_NUM = 1;
private static final int DEFAULT_PAGE_SIZE = 100;
private static final int MAX_PAGE_SIZE = 500;
private final LongGangUserQueryMapper userQueryMapper;
@Override
public LongGangUserSyncPageVo syncUser(LongGangQueryUserBo bo, String areaCode) {
int pageNum = bo.getPageNum() == null || bo.getPageNum() < 1 ? DEFAULT_PAGE_NUM : bo.getPageNum();
int pageSize = bo.getPageSize() == null || bo.getPageSize() < 1 ? DEFAULT_PAGE_SIZE : Math.min(bo.getPageSize(), MAX_PAGE_SIZE);
Date startTime = parseTime(bo.getStartTime(), "开始时间");
Date endTime = parseTime(bo.getEndTime(), "结束时间");
Page<LongGangUserSyncVo> page = userQueryMapper.selectUserSyncPage(
new Page<>(pageNum, pageSize), areaCode, startTime, endTime);
// crypto_remark_two 可能存 AES 密文或明文: 明文直接使用, 密文解密后使用.
page.getRecords().parallelStream().forEach(record -> {
String phone = record.getCryptoRemarkTwo();
record.setPhonenumber(CommonUtil.isPhoneEncrypted(phone) ? CommonUtil.decryptPhone(phone) : phone);
});
LongGangUserSyncPageVo vo = new LongGangUserSyncPageVo();
vo.setPageNum(pageNum);
vo.setPageSize(pageSize);
vo.setTotal(page.getTotal());
vo.setList(page.getRecords());
return vo;
}
private Date parseTime(String time, String fieldName) {
if (StrUtil.isBlank(time)) {
return null;
}
try {
return DateUtil.parse(time);
} catch (Exception e) {
throw new ServiceException(fieldName + "格式错误,应为 yyyy-MM-dd HH:mm:ss");
}
}
}

38
zdxt-modules/zdxt-enforcement-code/src/main/java/com/zdxt/enforcementcode/service/impl/OutEfcodeCpPlanServiceImpl.java

@ -1,5 +1,6 @@
package com.zdxt.enforcementcode.service.impl; package com.zdxt.enforcementcode.service.impl;
import cn.hutool.core.date.DateUtil;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper; import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper;
import com.baomidou.mybatisplus.core.toolkit.Wrappers; import com.baomidou.mybatisplus.core.toolkit.Wrappers;
@ -9,10 +10,13 @@ import com.zdxt.enforcementcode.domain.EfcodeCpPlan;
import com.zdxt.enforcementcode.domain.EfcodeCpPlanUsers; import com.zdxt.enforcementcode.domain.EfcodeCpPlanUsers;
import com.zdxt.enforcementcode.domain.EfcodeCpReserve; import com.zdxt.enforcementcode.domain.EfcodeCpReserve;
import com.zdxt.enforcementcode.domain.bo.EfcodeCpPlanBo; import com.zdxt.enforcementcode.domain.bo.EfcodeCpPlanBo;
import com.zdxt.enforcementcode.domain.bo.externalInterface.LongGangQueryPlanBo;
import com.zdxt.enforcementcode.domain.vo.EfcodeCpPlanVo; import com.zdxt.enforcementcode.domain.vo.EfcodeCpPlanVo;
import com.zdxt.enforcementcode.domain.vo.EfcodeCpReserveVo; import com.zdxt.enforcementcode.domain.vo.EfcodeCpReserveVo;
import com.zdxt.enforcementcode.domain.vo.EnterpriseInformationVo; import com.zdxt.enforcementcode.domain.vo.EnterpriseInformationVo;
import com.zdxt.enforcementcode.domain.vo.SsztJbxx110497NewVo; import com.zdxt.enforcementcode.domain.vo.SsztJbxx110497NewVo;
import com.zdxt.enforcementcode.domain.vo.externalInterface.LongGangPlanSyncPageVo;
import com.zdxt.enforcementcode.domain.vo.externalInterface.LongGangPlanSyncVo;
import com.zdxt.enforcementcode.mapper.EfcodeCpPlanMapper; import com.zdxt.enforcementcode.mapper.EfcodeCpPlanMapper;
import com.zdxt.enforcementcode.mapper.EfcodeCpPlanUsersMapper; import com.zdxt.enforcementcode.mapper.EfcodeCpPlanUsersMapper;
import com.zdxt.enforcementcode.mapper.EfcodeCpReserveMapper; import com.zdxt.enforcementcode.mapper.EfcodeCpReserveMapper;
@ -47,6 +51,10 @@ import java.util.stream.Collectors;
@Service @Service
public class OutEfcodeCpPlanServiceImpl implements IOutEfcodeCpPlanService { public class OutEfcodeCpPlanServiceImpl implements IOutEfcodeCpPlanService {
private static final int DEFAULT_PAGE_NUM = 1;
private static final int DEFAULT_PAGE_SIZE = 100;
private static final int MAX_PAGE_SIZE = 500;
private final EfcodeCpPlanMapper baseMapper; private final EfcodeCpPlanMapper baseMapper;
private final EfcodeCpPlanUsersMapper efcodeCpPlanUsersMapper; private final EfcodeCpPlanUsersMapper efcodeCpPlanUsersMapper;
private final EfcodeCpReserveMapper efcodeCpReserveMapper; private final EfcodeCpReserveMapper efcodeCpReserveMapper;
@ -1429,4 +1437,34 @@ public class OutEfcodeCpPlanServiceImpl implements IOutEfcodeCpPlanService {
return baseMapper.selectVoOne(lqw); return baseMapper.selectVoOne(lqw);
} }
@Override
public LongGangPlanSyncPageVo syncPlan(LongGangQueryPlanBo bo, String areaCode) {
int pageNum = bo.getPageNum() == null || bo.getPageNum() < 1 ? DEFAULT_PAGE_NUM : bo.getPageNum();
int pageSize = bo.getPageSize() == null || bo.getPageSize() < 1 ? DEFAULT_PAGE_SIZE : Math.min(bo.getPageSize(), MAX_PAGE_SIZE);
Date startTime = parseTime(bo.getStartTime(), "开始时间");
Date endTime = parseTime(bo.getEndTime(), "结束时间");
Page<LongGangPlanSyncVo> page = baseMapper.selectSyncPage(
new Page<>(pageNum, pageSize), areaCode, startTime, endTime);
LongGangPlanSyncPageVo vo = new LongGangPlanSyncPageVo();
vo.setPageNum(pageNum);
vo.setPageSize(pageSize);
vo.setTotal(page.getTotal());
vo.setList(page.getRecords());
return vo;
}
private Date parseTime(String time, String fieldName) {
if (StringUtils.isBlank(time)) {
return null;
}
try {
return DateUtil.parse(time);
} catch (Exception e) {
throw new ServiceException(fieldName + "格式错误,应为 yyyy-MM-dd HH:mm:ss");
}
}
} }

35
zdxt-modules/zdxt-enforcement-code/src/main/resources/mapper/enforcementcode/EfcodeCpPlanMapper.xml

@ -125,4 +125,39 @@
ORDER BY cp.plan_date DESC, cp.plan_time DESC ORDER BY cp.plan_date DESC, cp.plan_time DESC
</select> </select>
<!-- 外部接口-执法计划同步: 已产生任务、指定区域执法单位下的未删除计划,
支持按 update_time 区间增量同步; 按更新时间升序保证增量翻页顺序稳定 -->
<select id="selectSyncPage" resultType="com.zdxt.enforcementcode.domain.vo.externalInterface.LongGangPlanSyncVo">
SELECT
cp.id AS planId,
cp.task_id,
cp.out_serial_no,
cp.bureau_dept_id,
cp.bureau_dept_name,
cp.plan_date,
cp.plan_time,
cp.enterprise_name,
cp.enterprise_number,
cp.enforce_user_names,
cp.enforce_user_ids,
cp.create_time,
cp.update_time
FROM efcode_cp_plan cp
WHERE cp.is_delete = 0
AND cp.task_id IS NOT NULL
AND cp.task_id != ''
AND EXISTS (
SELECT 1 FROM sys_dept sd
WHERE sd.dept_id = cp.bureau_dept_id
AND sd.area_node = #{areaCode}
)
<if test="startTime != null">
AND cp.update_time &gt;= #{startTime}
</if>
<if test="endTime != null">
AND cp.update_time &lt;= #{endTime}
</if>
ORDER BY cp.update_time ASC, cp.id ASC
</select>
</mapper> </mapper>

50
zdxt-modules/zdxt-enforcement-code/src/main/resources/mapper/enforcementcode/EnterpriseComplaintMapper.xml

@ -45,4 +45,54 @@
<include refid="selectEnterpriseComplaintVo"/> <include refid="selectEnterpriseComplaintVo"/>
where id = #{id} where id = #{id}
</select> </select>
<!-- 按所属区域分页查询投诉(供第三方增量同步):
complaint_department_ids 为逗号分隔的执法单位ID, 任一单位命中该区域即计入;
用 EXISTS 而非 INNER JOIN, 避免一条投诉命中多个同区单位时被放大成多行;
已删除投诉不外发 -->
<select id="selectSyncPage" resultType="com.zdxt.enforcementcode.domain.vo.externalInterface.LongGangComplaintSyncVo">
SELECT
c.id,
c.rel_id,
c.enforce_type,
c.problem_description,
c.linkman,
c.linkman_tel,
c.is_delete,
c.case_type,
c.authorization,
c.com_or_opi,
c.enterprise_address,
c.pro_wo_code,
c.status,
c.evaluate_time,
c.enterprise_number,
c.enterprise_name,
c.complaint_departments,
c.complaint_department_ids,
c.enforcement_time,
c.complaint_type,
c.complaint_item_codes,
c.complaint_item_names,
c.handle_time,
c.complaint_record_item,
c.record_type,
c.detailed_address,
c.create_time,
c.update_time
FROM enterprise_complaint c
WHERE c.is_delete = 0
AND EXISTS (
SELECT 1 FROM sys_dept sd
WHERE sd.area_node = #{areaCode}
AND FIND_IN_SET(sd.dept_id, c.complaint_department_ids)
)
<if test="startTime != null">
AND c.update_time &gt;= #{startTime}
</if>
<if test="endTime != null">
AND c.update_time &lt;= #{endTime}
</if>
ORDER BY c.update_time ASC, c.id ASC
</select>
</mapper> </mapper>

47
zdxt-modules/zdxt-enforcement-code/src/main/resources/mapper/enforcementcode/LongGangUserQueryMapper.xml

@ -0,0 +1,47 @@
<?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.zdxt.enforcementcode.mapper.LongGangUserQueryMapper">
<!-- 按所属区域(sys_dept.area_node → dashboard_area_info.code)分页查询未删除用户,
支持按 sys_user.update_time 区间增量同步; 按更新时间升序保证增量翻页顺序稳定 -->
<select id="selectUserSyncPage" resultType="com.zdxt.enforcementcode.domain.vo.externalInterface.LongGangUserSyncVo">
SELECT
u.user_id,
u.dept_id,
u.user_name,
u.nick_name,
u.user_type,
u.email,
u.phonenumber,
u.crypto_remark_two,
u.sex,
u.status,
u.del_flag,
u.remark,
u.login_name,
u.type,
u.law_certificate_num,
u.fullname,
u.isDeleted,
u.isDisabled,
u.createAt,
u.updateAt,
u.create_time,
u.update_time
FROM sys_user u
INNER JOIN sys_dept d ON u.dept_id = d.dept_id
WHERE u.del_flag = '0'
AND d.del_flag = '0'
AND d.area_node = #{areaCode}
<if test="startTime != null">
AND u.update_time &gt;= #{startTime}
</if>
<if test="endTime != null">
AND u.update_time &lt;= #{endTime}
</if>
ORDER BY u.update_time ASC, u.user_id ASC
</select>
</mapper>
Loading…
Cancel
Save