wlzboy
15 小时以前 10354e63eb3298beb9ebcc029dd9f48d8936a272
ruoyi-system/src/main/java/com/ruoyi/system/service/impl/LegacyTransferSyncServiceImpl.java
@@ -3,6 +3,7 @@
import com.ruoyi.common.core.domain.entity.SysDept;
import com.ruoyi.common.core.domain.entity.SysUser;
import com.ruoyi.common.utils.DateUtils;
import com.ruoyi.common.utils.LongUtil;
import com.ruoyi.common.utils.MapValueUtils;
import com.ruoyi.common.utils.StringUtils;
import com.ruoyi.system.domain.SysTaskEmergency;
@@ -108,11 +109,11 @@
            for (Map<String, Object> order : transferOrders) {
                processedCount++;
                try {
                    String serviceOrdID = MapValueUtils.getStringValue(order, "ServiceOrdID");
                    String dispatchOrdID = MapValueUtils.getStringValue(order, "DispatchOrdID");
                    Long serviceOrdID = MapValueUtils.getLongValue(order, "ServiceOrdID");
                    Long dispatchOrdID = MapValueUtils.getLongValue(order, "DispatchOrdID");
                    
                    // 检查参数有效性
                    if (StringUtils.isEmpty(serviceOrdID)) {
                    if (serviceOrdID==null || serviceOrdID<=0) {
                        log.warn("第{}条数据服务单ID为空,跳过处理", processedCount);
                        continue;
                    }
@@ -164,41 +165,25 @@
     * @return 是否同步成功
     */
    @Override
    public boolean syncSingleTransferOrder(String serviceOrdID, String dispatchOrdID) {
        log.info("开始同步单个转运单: ServiceOrdID={}, DispatchOrdID={}", serviceOrdID, dispatchOrdID);
    public boolean syncSingleTransferOrder(Long serviceOrdID, Long dispatchOrdID) {
//        log.info("开始同步单个转运单: ServiceOrdID={}, DispatchOrdID={}", serviceOrdID, dispatchOrdID);
        
        try {
            // 检查参数有效性
            if (StringUtils.isEmpty(serviceOrdID)) {
            if (serviceOrdID == null || serviceOrdID <= 0) {
                log.error("服务单ID不能为空");
                return false;
            }
            // 直接查询指定的转运单信息
            Long serviceOrdIdLong = null;
            Long dispatchOrdIdLong = null;
            
            try {
                serviceOrdIdLong = Long.valueOf(serviceOrdID);
            } catch (NumberFormatException e) {
                log.error("服务单ID不是有效数字: {}", serviceOrdID);
                return false;
            }
            if (StringUtils.isNotEmpty(dispatchOrdID)) {
                try {
                    dispatchOrdIdLong = Long.valueOf(dispatchOrdID);
                } catch (NumberFormatException e) {
                    log.warn("调度单ID不是有效数字: {}", dispatchOrdID);
                }
            }
            List<Map<String, Object>> transferOrders = legacyTransferSyncMapper.selectTransferOrdersByIDs(serviceOrdIdLong, dispatchOrdIdLong);
            List<Map<String, Object>> transferOrders = legacyTransferSyncMapper.selectTransferOrdersByIDs(serviceOrdID, dispatchOrdID);
            Map<String, Object> order = transferOrders.get(0);
            // 检查是否已同步
            if (isTransferOrderSynced(serviceOrdID, dispatchOrdID)) {
                log.info("转运单已同步,跳过: ServiceOrdID={}, DispatchOrdID={}", serviceOrdID, dispatchOrdID);
//                log.info("转运单已同步,跳过: ServiceOrdID={}, DispatchOrdID={}", serviceOrdID, dispatchOrdID);
                updateTransferOrder(serviceOrdID, dispatchOrdID, order);
                return true;
            }
@@ -226,11 +211,11 @@
     * @param order
     * @return
     */
    private boolean updateTransferOrder(String serviceOrdID, String dispatchOrdID, Map<String, Object> order){
        log.info("开始同步单个转运单: ServiceOrdID={}, DispatchOrdID={}", serviceOrdID, dispatchOrdID);
    private boolean updateTransferOrder(Long serviceOrdID, Long dispatchOrdID, Map<String, Object> order){
//        log.info("开始同步单个转运单: ServiceOrdID={}, DispatchOrdID={}", serviceOrdID, dispatchOrdID);
        String sysTaskCode="";
        try {
            SysTaskEmergency emergency=sysTaskEmergencyMapper.selectByLegacyServiceOrdId(Long.parseLong(serviceOrdID));
            SysTaskEmergency emergency=sysTaskEmergencyMapper.selectByLegacyServiceOrdId(serviceOrdID);
            if(emergency.getNeedResync().equals(1)){
                log.info("新系统需要同步到旧系统那里,所以不要同步旧数据到新系统,serviceOrdID={}, DispatchOrdID={}", serviceOrdID, dispatchOrdID);
                return false;
@@ -273,14 +258,20 @@
            }
            SysDept dept=sysDeptService.selectDeptByServiceClass(serviceOrdClass);
            Long deptId=dept==null?null:dept.getDeptId();
            if(deptId==null){
                log.error("创建任务时,获取部门信息失败,serviceOrdID={}, DispatchOrdID={}", serviceOrdID, dispatchOrdID);
                return false;
            }
            createTaskVo.setDeptId(deptId);
            TaskUpdateVO updateTaskVo = new TaskUpdateVO();
            BeanUtils.copyProperties(createTaskVo, updateTaskVo);
            log.info("开始保存转运任务,serviceOrdID={}, DispatchOrdID={}", serviceOrdID, dispatchOrdID);
//            log.info("开始保存转运任务,serviceOrdID={}, DispatchOrdID={}", serviceOrdID, dispatchOrdID);
            int result = sysTaskService.updateTask(updateTaskVo,serviceOrdID,dispatchOrdID, serviceOrdNo, taskCreatorId,createUserName, deptId, ServiceOrd_CC_Time, ServiceOrd_CC_Time);
            if (result > 0) {
                log.info("转运单同步成功: ServiceOrdID={}, DispatchOrdID={}, 创建的任务ID={}", serviceOrdID, dispatchOrdID, result);
//                log.info("转运单同步成功: ServiceOrdID={}, DispatchOrdID={}, 创建的任务ID={}", serviceOrdID, dispatchOrdID, result);
                try {
                    notifyTransferOrderByWechat((long) result, serviceOrdID, dispatchOrdID, serviceOrdNo, ServiceOrd_CC_Time, dept, order);
@@ -307,8 +298,8 @@
     * @param order 转运单详细信息
     * @return 是否同步成功
     */
    private boolean syncSingleTransferOrder(String serviceOrdID, String dispatchOrdID, Map<String, Object> order) {
        log.info("开始同步单个转运单: ServiceOrdID={}, DispatchOrdID={}", serviceOrdID, dispatchOrdID);
    private boolean syncSingleTransferOrder(Long serviceOrdID, Long dispatchOrdID, Map<String, Object> order) {
//        log.info("开始同步单个转运单: ServiceOrdID={}, DispatchOrdID={}", serviceOrdID, dispatchOrdID);
        String sysTaskCode="";
        try {
            // 构造TaskCreateVO对象
@@ -350,12 +341,17 @@
            String createUserName= sysUser.getUserName();
            SysDept dept=sysDeptService.selectDeptByServiceClass(serviceOrdClass);
            Long deptId=dept==null?null:dept.getDeptId();
            if(deptId==null){
                log.error("创建任务时,获取部门信息失败,serviceOrdID={}, DispatchOrdID={} ServiceOrdClass:{}", serviceOrdID, dispatchOrdID, serviceOrdClass);
                return false;
            }
            createTaskVo.setDeptId(deptId);
            int result = sysTaskService.insertTask(createTaskVo,serviceOrdID,dispatchOrdID, serviceOrdNo, taskCreatorId,createUserName, deptId, ServiceOrd_CC_Time, ServiceOrd_CC_Time);
            if (result > 0) {
                log.info("转运单同步成功: ServiceOrdID={}, DispatchOrdID={}, 创建的任务ID={}", serviceOrdID, dispatchOrdID, result);
//                log.info("转运单同步成功: ServiceOrdID={}, DispatchOrdID={}, 创建的任务ID={}", serviceOrdID, dispatchOrdID, result);
                try {
                    notifyTransferOrderByWechat((long) result, serviceOrdID, dispatchOrdID, serviceOrdNo, ServiceOrd_CC_Time, dept, order);
@@ -383,10 +379,10 @@
     * @return 是否已同步
     */
    @Override
    public boolean isTransferOrderSynced(String serviceOrdID, String dispatchOrdID) {
    public boolean isTransferOrderSynced(Long serviceOrdID, Long dispatchOrdID) {
        try {
            // 检查参数有效性
            if (StringUtils.isEmpty(serviceOrdID)) {
            if (LongUtil.isEmpty(serviceOrdID)) {
                log.warn("服务单ID不能为空");
                return false;
            }
@@ -395,7 +391,7 @@
            // 条件:legacy_service_ord_id = serviceOrdID 或 legacy_dispatch_ord_id = dispatchOrdID
            
            try {
                SysTaskEmergency emergency = sysTaskEmergencyMapper.selectByLegacyServiceOrdId(Long.valueOf(serviceOrdID));
                SysTaskEmergency emergency = sysTaskEmergencyMapper.selectByLegacyServiceOrdId(serviceOrdID);
                if (emergency != null) {
                    return true;
                }
@@ -403,9 +399,9 @@
                log.warn("服务单ID不是有效数字: {}", serviceOrdID);
            }
            
            if (StringUtils.isNotEmpty(dispatchOrdID)) {
            if (LongUtil.isNotEmpty(dispatchOrdID)) {
                try {
                    SysTaskEmergency emergency = sysTaskEmergencyMapper.selectByLegacyDispatchOrdId(Long.valueOf(dispatchOrdID));
                    SysTaskEmergency emergency = sysTaskEmergencyMapper.selectByLegacyDispatchOrdId(dispatchOrdID);
                    if (emergency != null) {
                        return true;
                    }
@@ -441,7 +437,7 @@
     * @return TaskCreateVO对象
     */
    @Override
    public TaskCreateVO buildCreateTaskVo(String serviceOrdID, String dispatchOrdID, Map<String, Object> order) {
    public TaskCreateVO buildCreateTaskVo(Long serviceOrdID, Long dispatchOrdID, Map<String, Object> order) {
//        log.info("构造TaskCreateVO: ServiceOrdID={}, DispatchOrdID={}", serviceOrdID, dispatchOrdID);
        try {
@@ -451,7 +447,7 @@
                return null;
            }
            
            if (StringUtils.isEmpty(serviceOrdID)) {
            if (LongUtil.isEmpty(serviceOrdID)) {
                log.error("服务单ID不能为空");
                return null;
            }
@@ -465,9 +461,9 @@
            createTaskVo.setTaskType("EMERGENCY_TRANSFER"); // 急救转运任务
            
            // 设置单据类型和任务类型ID(从旧系统字段映射)
            if (StringUtils.isNotEmpty(serviceOrdClass)) {
                createTaskVo.setDocumentTypeId(serviceOrdClass);
            String ServiceOrdAreaType = MapValueUtils.getStringValue(order, "ServiceOrdAreaType");
            if (StringUtils.isNotEmpty(ServiceOrdAreaType)) {
                createTaskVo.setDocumentTypeId(ServiceOrdAreaType);
            }
            
            String serviceOrdType = MapValueUtils.getStringValue(order, "ServiceOrdType");
@@ -577,7 +573,7 @@
            createTaskVo.setPrice(MapValueUtils.getBigDecimalValue(order, "ServiceOrdTraTxnPrice"));
            // 距离信息需要从其他字段计算或获取
            if(dispatchOrdID!=null) {
            if(LongUtil.isNotEmpty(dispatchOrdID)) {
                // 设置执行人信息
                List<TaskCreateVO.AssigneeInfo> assignees = queryAssignees(dispatchOrdID);
                createTaskVo.setAssignees(assignees);
@@ -730,26 +726,20 @@
     * @param dispatchOrdID 调度单ID
     * @return 执行人信息列表
     */
    private List<TaskCreateVO.AssigneeInfo> queryAssignees(String dispatchOrdID) {
    private List<TaskCreateVO.AssigneeInfo> queryAssignees(Long dispatchOrdID) {
        long startTime = System.currentTimeMillis();
        try {
            // 检查参数有效性
            if (StringUtils.isEmpty(dispatchOrdID)) {
            if (LongUtil.isEmpty(dispatchOrdID)) {
                log.warn("调度单ID不能为空");
                return new ArrayList<>();
            }
            
            // 将String转换为Long,避免数据库类型不匹配导致的性能问题
            Long dispatchOrdIdLong;
            try {
                dispatchOrdIdLong = Long.valueOf(dispatchOrdID);
            } catch (NumberFormatException e) {
                log.error("调度单ID格式不正确: {}", dispatchOrdID, e);
                return new ArrayList<>();
            }
            
            // 从SQL Server查询执行人信息(使用Long类型,匹配BIGINT字段)
            List<Map<String, Object>> assigneeList = legacyTransferSyncMapper.selectAssigneesByDispatchOrdID(dispatchOrdIdLong);
            List<Map<String, Object>> assigneeList = legacyTransferSyncMapper.selectAssigneesByDispatchOrdID(dispatchOrdID);
            long queryTime = System.currentTimeMillis() - startTime;
            
            // 记录慢查询(超过500ms)
@@ -798,7 +788,7 @@
                }
            }
            
            log.debug("查询到{}个执行人,调度单ID: {}, 耗时: {}ms", assignees.size(), dispatchOrdID, System.currentTimeMillis() - startTime);
//            log.debug("查询到{}个执行人,调度单ID: {}, 耗时: {}ms", assignees.size(), dispatchOrdID, System.currentTimeMillis() - startTime);
            return assignees;
        } catch (Exception e) {
            long totalTime = System.currentTimeMillis() - startTime;
@@ -813,10 +803,10 @@
     * @param serviceOrdID 服务单ID
     * @return 病情ID列表
     */
    private String queryDiseaseIds(String serviceOrdID) {
    private String queryDiseaseIds(Long serviceOrdID) {
        try {
            // 检查参数有效性
            if (StringUtils.isEmpty(serviceOrdID)) {
            if (LongUtil.isEmpty(serviceOrdID) ) {
                log.warn("服务单ID不能为空");
                return null;
            }
@@ -840,8 +830,8 @@
    private void notifyTransferOrderByWechat(Long taskId,
                                             String serviceOrdID,
                                             String dispatchOrdID,
                                             Long serviceOrdID,
                                             Long dispatchOrdID,
                                             String serviceOrdNo,
                                             Date serviceOrdCcTime,
                                             SysDept dept,
@@ -850,7 +840,7 @@
            // 获取通知接收人列表
            List<SysUser> receivers = getWechatNotifyUsers(dispatchOrdID, dept);
            if (receivers == null || receivers.isEmpty()) {
                log.info("旧系统同步转运单无可用微信接收人,taskId={}", taskId);
//                log.info("旧系统同步转运单无可用微信接收人,taskId={}", taskId);
                return;
            }
@@ -864,13 +854,13 @@
            // 调用统一的微信通知服务
            int successCount = wechatTaskNotifyService.sendTaskNotifyMessage(taskId, userIds);
            log.info("旧系统同步转运单微信通知发送完成,taskId={}, 成功={}", taskId, successCount);
//            log.info("旧系统同步转运单微信通知发送完成,taskId={}, 成功={}", taskId, successCount);
        } catch (Exception e) {
            log.error("notifyTransferOrderByWechat发生异常, serviceOrdID={}, dispatchOrdID={}", serviceOrdID, dispatchOrdID, e);
        }
    }
    private List<SysUser> getWechatNotifyUsers(String dispatchOrdID, SysDept dept) {
    private List<SysUser> getWechatNotifyUsers(Long dispatchOrdID, SysDept dept) {
        try {
            List<SysUser> result = new ArrayList<>();