对接统一监管门户待办,优化信用修复待办取值的部分
This commit is contained in:
parent
6b4f96c8e2
commit
a61d15221b
|
|
@ -212,6 +212,12 @@ public class TSTaskList extends Model<TSTaskList> {
|
|||
@TableField("ORIGIN")
|
||||
private String origin;
|
||||
|
||||
/**
|
||||
* 统一监管门户推送状态:wA-未推送,wB-已推送
|
||||
*/
|
||||
@TableField("ISPUSH")
|
||||
private String ispush;
|
||||
|
||||
/**
|
||||
* 主体类型
|
||||
*/
|
||||
|
|
|
|||
|
|
@ -179,4 +179,14 @@ public interface TSTaskListMapper extends BaseMapper<TSTaskList> {
|
|||
|
||||
List<AbnEntLocStatistic> tsAbnEntLocStatistic(@Param("customParamMap") Map<String, Object> customParamMap);
|
||||
|
||||
/**
|
||||
* 查询 Kettle 写入但尚未创建统一监管门户推送记录的外网信用修复待办
|
||||
*/
|
||||
List<TSTaskList> selectUnpushedJgmhRepairTasks(@Param("limit") Integer limit);
|
||||
|
||||
/**
|
||||
* 批量标记待办已推送到统一监管门户
|
||||
*/
|
||||
int updateJgmhPushedByTasklistIds(@Param("tasklistids") List<String> tasklistids);
|
||||
|
||||
}
|
||||
|
|
|
|||
|
|
@ -10,6 +10,11 @@ public interface IJgmhPortalTodoService {
|
|||
*/
|
||||
void createPushRecord(TSTaskList taskListModel);
|
||||
|
||||
/**
|
||||
* 扫描 Kettle 写入的未推送外网信用修复待办,并创建推送记录
|
||||
*/
|
||||
void scanAndCreatePushRecords();
|
||||
|
||||
/**
|
||||
* 批量推送待办事项(定时任务调用)
|
||||
*/
|
||||
|
|
|
|||
|
|
@ -1,7 +1,10 @@
|
|||
package com.chinaweal.aiccs.door.service.impl;
|
||||
|
||||
import com.alibaba.fastjson.JSON;
|
||||
import com.chinaweal.aiccs.aiccs.business.entity.TSRefGroupAndUser;
|
||||
import com.chinaweal.aiccs.aiccs.business.entity.TSTaskList;
|
||||
import com.chinaweal.aiccs.aiccs.business.mapper.TSTaskListMapper;
|
||||
import com.chinaweal.aiccs.aiccs.business.service.TSRefGroupAndUserService;
|
||||
import com.chinaweal.aiccs.aiccs.business.service.TSTaskListService;
|
||||
import com.chinaweal.aiccs.common.constant.BaseDataConstant;
|
||||
import com.chinaweal.aiccs.door.dto.JgmhDebugPushResult;
|
||||
|
|
@ -43,6 +46,8 @@ public class JgmhPortalTodoServiceImpl implements IJgmhPortalTodoService {
|
|||
private String redirectUrl;
|
||||
@Value("${jgmhDoor.mobileRedirectUrl:}")
|
||||
private String mobileRedirectUrl;
|
||||
@Value("${jgmhDoor.scanBatchSize:200}")
|
||||
private Integer scanBatchSize;
|
||||
|
||||
@Resource
|
||||
private JgmhDoorApi jgmhDoorApi;
|
||||
|
|
@ -51,6 +56,10 @@ public class JgmhPortalTodoServiceImpl implements IJgmhPortalTodoService {
|
|||
@Resource
|
||||
private TSTaskListService taskListService;
|
||||
@Resource
|
||||
private TSTaskListMapper taskListMapper;
|
||||
@Resource
|
||||
private TSRefGroupAndUserService refGroupAndUserService;
|
||||
@Resource
|
||||
private TUsersService tUsersService;
|
||||
@Resource
|
||||
private RedisService redisService;
|
||||
|
|
@ -106,7 +115,7 @@ public class JgmhPortalTodoServiceImpl implements IJgmhPortalTodoService {
|
|||
}
|
||||
|
||||
/**
|
||||
* 创建待推送记录(工作流启动时调用)
|
||||
* 创建待推送记录(工作流启动时调用/定时扫描调用)
|
||||
*
|
||||
* 三重过滤条件:
|
||||
* 1. BUSTYPE in ('7','12','14','33','27') — 信用修复业务
|
||||
|
|
@ -140,13 +149,21 @@ public class JgmhPortalTodoServiceImpl implements IJgmhPortalTodoService {
|
|||
return;
|
||||
}
|
||||
|
||||
// 获取门户用户ID
|
||||
String portalUserId = getPortalUserId(taskListModel.getSignuserid());
|
||||
if (portalUserId == null) {
|
||||
log.info("统一监管门户待办推送:用户未关联IMS账号,signuserid={}", taskListModel.getSignuserid());
|
||||
boolean exists = pushRecordService.lambdaQuery()
|
||||
.eq(PortalTodoPushRecord::getTasklistid, taskListModel.getTasklistid())
|
||||
.count() > 0;
|
||||
if (exists) {
|
||||
log.debug("统一监管门户待办推送:推送记录已存在,跳过创建。tasklistid={}", taskListModel.getTasklistid());
|
||||
return;
|
||||
}
|
||||
|
||||
List<String> imsUserIds = resolveCandidateImsUserIds(taskListModel);
|
||||
if (imsUserIds.isEmpty()) {
|
||||
log.info("统一监管门户待办推送:无有效IMS用户,跳过。tasklistid={}", taskListModel.getTasklistid());
|
||||
return;
|
||||
}
|
||||
String usersidValue = joinAndTruncate(imsUserIds, 500);
|
||||
|
||||
// 创建推送记录
|
||||
// DBSXID 使用 tasklistid(因为只有2步且无回退,不存在多人共享问题)
|
||||
PortalTodoPushRecord record = new PortalTodoPushRecord();
|
||||
|
|
@ -155,15 +172,15 @@ public class JgmhPortalTodoServiceImpl implements IJgmhPortalTodoService {
|
|||
record.setDbsxid(taskListModel.getTasklistid());
|
||||
record.setDbsxmc(taskListModel.getBusname());
|
||||
record.setDbsxzt(1); // 待办
|
||||
record.setUsersid(portalUserId);
|
||||
record.setUsersid(usersidValue);
|
||||
record.setPushstatus("0"); // 待推送
|
||||
record.setPushcount(0);
|
||||
record.setCreatetime(LocalDateTime.now());
|
||||
record.setUpdatetime(LocalDateTime.now());
|
||||
pushRecordService.save(record);
|
||||
|
||||
log.info("统一监管门户待办推送:创建推送记录,tasklistid={}, bustype={}, usersid={}",
|
||||
taskListModel.getTasklistid(), taskListModel.getBustype(), portalUserId);
|
||||
log.info("统一监管门户待办推送:创建推送记录,tasklistid={}, bustype={}, 候选人数={}, usersid长度={}",
|
||||
taskListModel.getTasklistid(), taskListModel.getBustype(), imsUserIds.size(), usersidValue.length());
|
||||
}
|
||||
|
||||
/**
|
||||
|
|
@ -191,6 +208,31 @@ public class JgmhPortalTodoServiceImpl implements IJgmhPortalTodoService {
|
|||
log.info("统一监管门户待办推送:用户点击办理,标记为已办,tasklistid={}", tasklistid);
|
||||
}
|
||||
|
||||
/**
|
||||
* 扫描 Kettle 写入的未推送外网信用修复待办,并创建推送记录
|
||||
*/
|
||||
@Override
|
||||
public void scanAndCreatePushRecords() {
|
||||
if (!enableTask) return;
|
||||
|
||||
List<TSTaskList> tasks = taskListMapper.selectUnpushedJgmhRepairTasks(scanBatchSize == null ? 200 : scanBatchSize);
|
||||
if (tasks == null || tasks.isEmpty()) {
|
||||
log.info("统一监管门户待办扫描:无 Kettle 未推送待办");
|
||||
return;
|
||||
}
|
||||
|
||||
int count = 0;
|
||||
for (TSTaskList task : tasks) {
|
||||
try {
|
||||
createPushRecord(task);
|
||||
count++;
|
||||
} catch (Exception e) {
|
||||
log.error("统一监管门户待办扫描:创建推送记录失败,tasklistid={}", task.getTasklistid(), e);
|
||||
}
|
||||
}
|
||||
log.info("统一监管门户待办扫描:扫描到{}条,处理{}条", tasks.size(), count);
|
||||
}
|
||||
|
||||
/**
|
||||
* 批量推送待办事项(定时任务调用)
|
||||
*/
|
||||
|
|
@ -231,10 +273,15 @@ public class JgmhPortalTodoServiceImpl implements IJgmhPortalTodoService {
|
|||
try {
|
||||
ForestResponse<String> response = jgmhDoorApi.pushTodoItems(token, requestDto);
|
||||
if (response.isSuccess()) {
|
||||
List<String> tasklistids = new ArrayList<>();
|
||||
for (PortalTodoPushRecord record : pendingRecords) {
|
||||
record.setPushstatus("1");
|
||||
record.setPushcount(record.getPushcount() + 1);
|
||||
record.setLastpushtime(LocalDateTime.now());
|
||||
tasklistids.add(record.getTasklistid());
|
||||
}
|
||||
if (!tasklistids.isEmpty()) {
|
||||
taskListMapper.updateJgmhPushedByTasklistIds(tasklistids);
|
||||
}
|
||||
log.info("统一监管门户待办推送:推送成功,记录数={}", pendingRecords.size());
|
||||
} else {
|
||||
|
|
@ -322,19 +369,20 @@ public class JgmhPortalTodoServiceImpl implements IJgmhPortalTodoService {
|
|||
}
|
||||
result.setTaskListPreview(buildTaskListPreview(taskList));
|
||||
|
||||
// 3. 获取门户用户ID
|
||||
String portalUserId = getPortalUserId(taskList.getSignuserid());
|
||||
if (portalUserId == null) {
|
||||
// 3. 解析候选受理人组 → 拼接 USERSID
|
||||
List<String> imsUserIds = resolveCandidateImsUserIds(taskList);
|
||||
if (imsUserIds.isEmpty()) {
|
||||
return result.setSuccess(false)
|
||||
.setMessage("当前 tasklistid 的签收人未关联 IMS 账号,无法推送。signuserid="
|
||||
+ taskList.getSignuserid());
|
||||
.setMessage("无有效IMS用户,无法推送。signuserid=" + taskList.getSignuserid()
|
||||
+ ", acceptgroupid=" + taskList.getAcceptgroupid());
|
||||
}
|
||||
String usersidValue = joinAndTruncate(imsUserIds, 500);
|
||||
|
||||
// 4. 查询或临时构造推送记录(不写库)
|
||||
PortalTodoPushRecord record = pushRecordService.lambdaQuery()
|
||||
List<PortalTodoPushRecord> records = pushRecordService.lambdaQuery()
|
||||
.eq(PortalTodoPushRecord::getTasklistid, tasklistid)
|
||||
.last("LIMIT 1")
|
||||
.one();
|
||||
.list();
|
||||
PortalTodoPushRecord record = records.isEmpty() ? null : records.get(0);
|
||||
if (record == null) {
|
||||
record = new PortalTodoPushRecord();
|
||||
record.setTasklistid(tasklistid);
|
||||
|
|
@ -342,8 +390,8 @@ public class JgmhPortalTodoServiceImpl implements IJgmhPortalTodoService {
|
|||
record.setDbsxid(tasklistid);
|
||||
record.setDbsxmc(taskList.getBusname());
|
||||
record.setDbsxzt(1); // 默认按"待办"推送
|
||||
record.setUsersid(portalUserId);
|
||||
}
|
||||
record.setUsersid(usersidValue);
|
||||
|
||||
// 5. 组装推送数据
|
||||
JgmhTodoItemDto item = buildTodoItem(record);
|
||||
|
|
@ -387,6 +435,57 @@ public class JgmhPortalTodoServiceImpl implements IJgmhPortalTodoService {
|
|||
return token.substring(0, 4) + "****" + token.substring(token.length() - 4);
|
||||
}
|
||||
|
||||
/**
|
||||
* 解析待办候选受理人对应的统一监管门户用户ID列表
|
||||
*/
|
||||
private List<String> resolveCandidateImsUserIds(TSTaskList taskListModel) {
|
||||
List<String> localUserIds = new ArrayList<>();
|
||||
|
||||
if (StringUtils.isNotBlank(taskListModel.getSignuserid())) {
|
||||
localUserIds.add(taskListModel.getSignuserid());
|
||||
} else if (StringUtils.isNotBlank(taskListModel.getAcceptgroupid())) {
|
||||
List<TSRefGroupAndUser> groupUsers = refGroupAndUserService.lambdaQuery()
|
||||
.eq(TSRefGroupAndUser::getGroupid, taskListModel.getAcceptgroupid())
|
||||
.list();
|
||||
for (TSRefGroupAndUser groupUser : groupUsers) {
|
||||
if (StringUtils.isNotBlank(groupUser.getUserid())) {
|
||||
localUserIds.add(groupUser.getUserid());
|
||||
}
|
||||
}
|
||||
} else {
|
||||
log.warn("统一监管门户待办推送:signuserid 和 acceptgroupid 均为空,无法确定候选受理人。tasklistid={}",
|
||||
taskListModel.getTasklistid());
|
||||
}
|
||||
|
||||
List<String> imsUserIds = new ArrayList<>();
|
||||
for (String localUserId : localUserIds) {
|
||||
String portalUserId = getPortalUserId(localUserId);
|
||||
if (StringUtils.isNotBlank(portalUserId)) {
|
||||
imsUserIds.add(portalUserId);
|
||||
}
|
||||
}
|
||||
Collections.sort(imsUserIds);
|
||||
return imsUserIds;
|
||||
}
|
||||
|
||||
/**
|
||||
* 将用户ID列表用英文逗号拼接,并截断到指定最大长度
|
||||
*/
|
||||
private String joinAndTruncate(List<String> imsUserIds, int maxLen) {
|
||||
if (imsUserIds.isEmpty()) return "";
|
||||
|
||||
StringBuilder sb = new StringBuilder();
|
||||
for (int i = 0; i < imsUserIds.size(); i++) {
|
||||
String userId = imsUserIds.get(i);
|
||||
String segment = i == 0 ? userId : "," + userId;
|
||||
if (sb.length() + segment.length() > maxLen) {
|
||||
break;
|
||||
}
|
||||
sb.append(segment);
|
||||
}
|
||||
return sb.toString();
|
||||
}
|
||||
|
||||
/** 提取 tstasklist 关键字段用于调试查看 */
|
||||
private Map<String, Object> buildTaskListPreview(TSTaskList t) {
|
||||
Map<String, Object> m = new LinkedHashMap<>();
|
||||
|
|
@ -395,7 +494,9 @@ public class JgmhPortalTodoServiceImpl implements IJgmhPortalTodoService {
|
|||
m.put("busname", t.getBusname());
|
||||
m.put("origin", t.getOrigin());
|
||||
m.put("busstatus", t.getBusstatus());
|
||||
m.put("ispush", t.getIspush());
|
||||
m.put("signuserid", t.getSignuserid());
|
||||
m.put("acceptgroupid", t.getAcceptgroupid());
|
||||
m.put("linkname", t.getLinkname());
|
||||
m.put("sendertime", t.getSendertime());
|
||||
m.put("deadlineDate", t.getDeadlineDate());
|
||||
|
|
|
|||
|
|
@ -35,6 +35,7 @@ public class JgmhPortalTodoPushScheduled {
|
|||
|
||||
try {
|
||||
log.info("【统一监管门户待办推送任务】开始执行");
|
||||
jgmhPortalTodoService.scanAndCreatePushRecords();
|
||||
jgmhPortalTodoService.pushPendingTodoItems();
|
||||
log.info("【统一监管门户待办推送任务】执行完成");
|
||||
} catch (Exception e) {
|
||||
|
|
|
|||
|
|
@ -152,6 +152,7 @@ jgmhDoor:
|
|||
redirectUrl: ${JGMH_DOOR_REDIRECT_URL:} # PC端待办跳转地址,需根据环境配置
|
||||
mobileRedirectUrl: ${JGMH_DOOR_MOBILE_REDIRECT_URL:} # 移动端待办跳转地址
|
||||
debugEnabled: ${JGMH_DOOR_DEBUG_ENABLED:false} # 单笔调试推送接口开关,生产环境建议关闭
|
||||
scanBatchSize: ${JGMH_DOOR_SCAN_BATCH_SIZE:200} # 单次扫描Kettle未推送待办的最大处理条数
|
||||
|
||||
punishment:
|
||||
api:
|
||||
|
|
|
|||
|
|
@ -29,6 +29,8 @@
|
|||
<result column="CREATEUSERNAME" property="createUsername" />
|
||||
<result column="CREATETIME" property="createTime" />
|
||||
<result column="ISDEADLINE" property="isdeadline" />
|
||||
<result column="ORIGIN" property="origin" />
|
||||
<result column="ISPUSH" property="ispush" />
|
||||
</resultMap>
|
||||
|
||||
<resultMap id="TaskListUnionMap" type="com.chinaweal.aiccs.aiccs.business.entity.dto.TaskListUnionDto">
|
||||
|
|
@ -1764,4 +1766,28 @@
|
|||
GROUP BY DECORG
|
||||
</select>
|
||||
|
||||
<select id="selectUnpushedJgmhRepairTasks" resultMap="BaseResultMap">
|
||||
SELECT * FROM (
|
||||
SELECT t.*
|
||||
FROM TSTASKLIST t
|
||||
LEFT JOIN PORTAL_TODO_PUSH_RECORD p ON t.TASKLISTID = p.TASKLISTID
|
||||
WHERE t.BUSTYPE IN ('7','12','14','33','27')
|
||||
AND t.ORIGIN = '1'
|
||||
AND t.BUSSTATUS = '-1'
|
||||
AND t.ISPUSH = 'wA'
|
||||
AND p.ID IS NULL
|
||||
ORDER BY t.CREATETIME ASC
|
||||
)
|
||||
WHERE ROWNUM <= #{limit}
|
||||
</select>
|
||||
|
||||
<update id="updateJgmhPushedByTasklistIds">
|
||||
UPDATE TSTASKLIST
|
||||
SET ISPUSH = 'wB'
|
||||
WHERE TASKLISTID IN
|
||||
<foreach collection="tasklistids" item="tasklistid" open="(" separator="," close=")">
|
||||
#{tasklistid}
|
||||
</foreach>
|
||||
</update>
|
||||
|
||||
</mapper>
|
||||
|
|
|
|||
Loading…
Reference in New Issue