package com.ruoyi.business.controller;

import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.ruoyi.common.core.controller.BaseController;
import com.ruoyi.common.core.domain.AddTreeSelect;
import com.ruoyi.common.core.domain.AjaxResult;
import com.ruoyi.common.core.domain.TreeSelect;
import com.ruoyi.common.core.domain.entity.SysDept;
import com.ruoyi.common.core.domain.entity.SysUser;
import com.ruoyi.common.core.page.TableDataInfo;
import com.ruoyi.common.core.redis.RedisCache;
import com.ruoyi.common.utils.spring.SpringUtils;
import com.ruoyi.database.domain.ApprovalProcess;
import com.ruoyi.database.domain.BaseAddressInfo;
import com.ruoyi.database.domain.BusinessTripApproval;
import com.ruoyi.database.domain.dto.ApprovaltBusinessDto;
import com.ruoyi.database.domain.gwglLog;
import com.ruoyi.database.service.ApprovalProcessService;
import com.ruoyi.database.service.BaseAddressInfoService;
import com.ruoyi.database.service.BusinessTripApprovalService;
import com.ruoyi.database.service.gwglLogService;
import com.ruoyi.system.service.ISysDeptService;
import com.ruoyi.system.service.ISysUserService;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import lombok.RequiredArgsConstructor;
import org.springframework.web.bind.annotation.*;

import java.text.SimpleDateFormat;
import java.util.*;
import java.util.stream.Collectors;

/**
 * @Description BusinessTripApprovalController
 * @Author lijingtong
 * @Date 2025-05-29
 */

@RestController
@RequestMapping("/BusinessTripApproval")
@RequiredArgsConstructor
@Api(tags = "出差审批单")
public class BusinessTripApprovalController extends BaseController {

    private final BusinessTripApprovalService businessTripApprovalService;
    private final ISysUserService sysUserService;
    private final ISysDeptService sysDeptService;
    private final BaseAddressInfoService baseAddressInfoService;
    private final ApprovalProcessService approvalsProcessService;
    private final gwglLogService gwglLogService;


    @PostMapping("/list")
    @ApiOperation("查询出差申请")
    public TableDataInfo list(BusinessTripApproval businessTripApproval) {
        startPage();
        QueryWrapper<BusinessTripApproval> queryWrapper = new QueryWrapper<>(businessTripApproval);
        queryWrapper.orderByDesc("create_time");
        List<BusinessTripApproval> list = businessTripApprovalService.list(queryWrapper);
        long size = businessTripApprovalService.count(queryWrapper);
        return getDataTableEnhance(list, size);
    }


    @PostMapping("/add")
    @ApiOperation("新增出差申请")
    public AjaxResult add(@RequestBody BusinessTripApproval dto) {
        SysUser user = getLoginUser().getUser();
        if (dto.getHasOffcialCar() == null) {
            throw new RuntimeException("请选择是否自带公务车辆");
        }
        if (dto.getHasOffcialCar() != null && dto.getHasOffcialCar() == 1) {
            if (dto.getUseCarType() == null) {
                throw new RuntimeException("请选择用车方式");
            }
        }
        if (dto.getStartDate() == null || dto.getEndDate() == null) {
            throw new RuntimeException("请选择出差时间范围");
        }
        if (dto.getDestinationId() == null) {
            throw new RuntimeException("请选择出差目的地");
        }
        dto.setUserName(user.getNickName());
        dto.setUserId(user.getUserId());
        dto.setDepartment(user.getDept().getDeptName());
        List<Long> togUserIdList = dto.getTogUserIdList();
        int isLeader = 0;
        if (user.getIsLeader() != null) {
            isLeader = 1;
        }
        StringBuilder ids = new StringBuilder();
        if (togUserIdList != null && !togUserIdList.isEmpty()) {
            for (Long aLong : togUserIdList) {
                if (ids.length() > 0) {
                    ids.append(",");
                }
                ids.append(aLong);
                SysUser user1 = sysUserService.selectUserById(aLong);
                if (user1.getIsLeader() != null) {
                    isLeader = 1;
                }
            }
            dto.setTogUserIds(ids.toString());
        }

        String s = OrderNumberGenerator();
        dto.setApplyNo(s);
        UUID uuid = UUID.randomUUID();
        String uuids = uuid.toString();
        dto.setUuid(uuids);
        BaseAddressInfo byId = baseAddressInfoService.getById(dto.getDestinationId());
        ApprovalProcess approvalProcess = new ApprovalProcess();
        approvalProcess.setApprovalNo(s);
        approvalProcess.setProcessTitle("出差呈请");
        approvalProcess.setSubmitterName(user.getNickName());
        approvalProcess.setSubmitterId(user.getUserId());
        approvalProcess.setSubmitTime(new Date().getTime());
        approvalProcess.setMatterType(2);
        approvalProcess.setReadStatus(0);
        approvalProcess.setBusinessTripDestination(byId.getAddName());
        approvalProcess.setStartTime(dto.getStartDate());
        approvalProcess.setEndTime(dto.getEndDate());
        approvalProcess.setCreateTime(new Date().getTime());
        approvalProcess.setUuid(uuids);
        List<Long> longs = new ArrayList<>();
        if (isLeader == 1) {
            if (dto.getHasOffcialCar() == 1) {
                approvalProcess.setApprovalStatusH(100);
                longs.add(2165L);
            } else {
                approvalProcess.setApprovalStatusH(400);
                longs.add(1660L);
                longs.add(1661L);
            }
        } else {
            approvalProcess.setApprovalStatusH(1);
            longs.add(user.getDept().getLeaderId());
        }
        addLog(approvalProcess, longs);
        return toAjax(businessTripApprovalService.save(dto)
                && approvalsProcessService.save(approvalProcess)
        );
    }


    /*@GetMapping("/userList")
    @ApiOperation("查询用户人员列表")
    public AjaxResult applyList() {
        *//*List<SysUser> sysUsers = sysUserService.selectList();
        List<SysDept> sysDepts = sysDeptService.selectDeptList(new SysDept());
        sysDepts = sysDepts.stream()
                .filter(dept -> dept.getDeptId() != 131000) // 过滤掉id为131000的部门
                .collect(Collectors.toList());
        List<SysDept> depts = sysDeptService.buildDeptTree(sysDepts);
        Map<Long, List<SysUser>> deptUsersMap = new HashMap<>();
        for (SysUser user : sysUsers) {
            deptUsersMap.computeIfAbsent(user.getDeptId(), k -> new ArrayList<>()).add(user);
        }
        return AjaxResult.success(buildTree(depts, deptUsersMap));*//*

        // 获取当前用户ID
        // 获取当前用户ID
        Long userId = getLoginUser().getUser().getUserId();
        // 查询用户和部门
        List<SysUser> sysUsers = sysUserService.selectList();
        List<SysDept> sysDepts = sysDeptService.selectDeptList(new SysDept());
        sysDepts = sysDepts.stream()
                .filter(dept -> dept.getDeptId() != 131000) // 过滤掉id为131000的部门
                .collect(Collectors.toList());

        // 构建部门树
        List<SysDept> depts = sysDeptService.buildDeptTree(sysDepts);

        // 查找当前用户所在部门
        SysUser currentUser = sysUsers.stream()
                .filter(user -> user.getUserId().equals(userId))
                .findFirst()
                .orElse(null);

        Long currentDeptId = currentUser != null ? currentUser.getDeptId() : null;

        // 构建用户映射
        Map<Long, List<SysUser>> deptUsersMap = new HashMap<>();
        for (SysUser user : sysUsers) {
            deptUsersMap.computeIfAbsent(user.getDeptId(), k -> new ArrayList<>()).add(user);
        }

        // 构建树结构
        List<TreeSelect> treeList = new ArrayList<>();

        // 在最外层顶部添加当前部门资源（如果找到）
        if (currentDeptId != null) {
            SysDept currentDept = findDeptById(depts, currentDeptId);
            if (currentDept != null) {
                TreeSelect currentDeptNode = buildDeptNode(currentDept, deptUsersMap);
                treeList.add(currentDeptNode);
            }
        }

        // 保持原有部门树结构不变
        treeList.addAll(buildTree(depts, deptUsersMap));

        return AjaxResult.success(treeList);
    }

    private TreeSelect buildDeptNode(SysDept dept, Map<Long, List<SysUser>> deptUsersMap) {
        TreeSelect treeSelect = new TreeSelect();
        treeSelect.setId(dept.getDeptId());
        treeSelect.setLabel(dept.getDeptName());

        // 添加部门下的用户
        List<TreeSelect> children = new ArrayList<>();
        List<SysUser> users = deptUsersMap.getOrDefault(dept.getDeptId(), Collections.emptyList());
        for (SysUser user : users) {
            TreeSelect userNode = new TreeSelect();
            userNode.setLabel(user.getNickName());
            userNode.setId(user.getUserId());
            userNode.setDictId(dept.getDeptId());
            userNode.setDictName(dept.getDeptName());
            children.add(userNode);
        }

        // 递归添加所有子部门
        for (SysDept child : dept.getChildren()) {
            children.add(buildDeptNode(child, deptUsersMap));
        }

        if (!children.isEmpty()) {
            treeSelect.setChildren(children);
        }

        return treeSelect;
    }
    private SysDept findDeptById(List<SysDept> depts, Long deptId) {
        for (SysDept dept : depts) {
            SysDept found = findDeptInTree(dept, deptId);
            if (found != null) {
                return found;
            }
        }
        return null;
    }

    // 辅助方法：在部门树中递归查找指定ID的部门
    private SysDept findDeptInTree(SysDept dept, Long deptId) {
        if (dept.getDeptId().equals(deptId)) {
            return dept;
        }
        for (SysDept child : dept.getChildren()) {
            SysDept found = findDeptInTree(child, deptId);
            if (found != null) {
                return found;
            }
        }
        return null;
    }*/

    @GetMapping("/userList")
    @ApiOperation("查询用户人员列表")
    public AjaxResult applyList() {
//        Long currentUserId = getCurrentUserId();
        Long currentUserId = getLoginUser().getUser().getUserId();
        List<SysUser> sysUsers = sysUserService.selectList();
        List<SysDept> sysDepts = sysDeptService.selectDeptList(new SysDept());

        // 过滤无效部门并复制原始列表（避免修改原始数据）
        List<SysDept> originalDepts = sysDepts.stream()
                .filter(dept -> dept.getDeptId() != 131000)
                .collect(Collectors.toList());

        // 构建原始部门树
        List<SysDept> deptTree = sysDeptService.buildDeptTree(originalDepts);

        // 查找当前部门并从原始树中移除
        SysDept currentDept = removeCurrentDeptFromTree(deptTree, currentUserId, sysUsers);

        // 构建用户映射
        Map<Long, List<SysUser>> deptUsersMap = sysUsers.stream()
                .collect(Collectors.groupingBy(SysUser::getDeptId));

        // 构建结果：先添加当前部门（作为独立顶级节点），再添加原始树（已移除当前部门）
        List<TreeSelect> treeList = new ArrayList<>();
        if (currentDept != null) {
            treeList.add(buildCurrentDeptNode(currentDept, deptUsersMap));
        }
        treeList.addAll(buildTree(deptTree, deptUsersMap)); // 原始树已不含当前部门

        return AjaxResult.success(treeList);
    }

    // 从部门树中查找并移除当前部门
    private SysDept removeCurrentDeptFromTree(List<SysDept> deptTree, Long currentUserId, List<SysUser> sysUsers) {
        SysUser currentUser = sysUsers.stream()
                .filter(user -> user.getUserId().equals(currentUserId))
                .findFirst()
                .orElse(null);
        if (currentUser == null) return null;

        Long currentDeptId = currentUser.getDeptId();
        SysDept currentDept = findDeptInTree(deptTree, currentDeptId);

        // 递归从原始树中移除当前部门（避免重复显示）
        if (currentDept != null) {
            removeDeptFromParent(deptTree, currentDeptId);
        }
        return currentDept;
    }
    private TreeSelect buildDeptNode(SysDept dept, Map<Long, List<SysUser>> deptUsersMap) {
        TreeSelect treeSelect = new TreeSelect();
        treeSelect.setId(dept.getDeptId());
        treeSelect.setLabel(dept.getDeptName());

        // 添加部门下的用户
        List<TreeSelect> children = new ArrayList<>();
        List<SysUser> users = deptUsersMap.getOrDefault(dept.getDeptId(), Collections.emptyList());
        for (SysUser user : users) {
            TreeSelect userNode = new TreeSelect();
            userNode.setLabel(user.getNickName());
            userNode.setId(user.getUserId());
            userNode.setDictId(dept.getDeptId());
            userNode.setDictName(dept.getDeptName());
            children.add(userNode);
        }

        // 递归添加所有子部门
        for (SysDept child : dept.getChildren()) {
            children.add(buildDeptNode(child, deptUsersMap));
        }

        if (!children.isEmpty()) {
            treeSelect.setChildren(children);
        }

        return treeSelect;
    }
    // 递归查找部门节点
    private SysDept findDeptInTree(List<SysDept> depts, Long deptId) {
        for (SysDept dept : depts) {
            if (dept.getDeptId().equals(deptId)) {
                return dept;
            }
            SysDept found = findDeptInTree(dept.getChildren(), deptId);
            if (found != null) {
                return found;
            }
        }
        return null;
    }

    // 递归从父节点中移除指定部门
    private void removeDeptFromParent(List<SysDept> depts, Long deptId) {
        depts.removeIf(dept -> dept.getDeptId().equals(deptId)); // 移除顶级节点
        depts.forEach(dept -> dept.getChildren().removeIf(child -> child.getDeptId().equals(deptId))); // 移除子节点
        depts.forEach(dept -> removeDeptFromParent(dept.getChildren(), deptId)); // 深层递归
    }

    // 构建当前部门节点（仅显示一次在最外层）
    private TreeSelect buildCurrentDeptNode(SysDept dept, Map<Long, List<SysUser>> deptUsersMap) {
        TreeSelect node = new TreeSelect();
        node.setId(dept.getDeptId());
        node.setLabel(dept.getDeptName());

        // 添加当前部门的用户和子部门（保持原有层级）
        List<TreeSelect> children = new ArrayList<>();
        deptUsersMap.getOrDefault(dept.getDeptId(), Collections.emptyList()).forEach(user -> {
            TreeSelect userNode = new TreeSelect();
            userNode.setLabel(user.getNickName());
            userNode.setId(user.getUserId());
            userNode.setDictId(dept.getDeptId());
            userNode.setDictName(dept.getDeptName());
            children.add(userNode);
        });
        dept.getChildren().forEach(child -> children.add(buildDeptNode(child, deptUsersMap))); // 递归子部门

        if (!children.isEmpty()) {
            node.setChildren(children);
        }
        return node;
    }

    // 原始buildTree方法（仅处理原始树，不含当前部门）
    private List<TreeSelect> buildTree(List<SysDept> depts, Map<Long, List<SysUser>> deptUsersMap) {
        return depts.stream().map(dept -> {
            TreeSelect treeSelect = new TreeSelect();
            treeSelect.setId(dept.getDeptId());
            treeSelect.setLabel(dept.getDeptName());

            // 处理当前部门以外的用户和子部门
            List<TreeSelect> children = deptUsersMap.getOrDefault(dept.getDeptId(), Collections.emptyList()).stream()
                    .map(user -> {
                        TreeSelect userNode = new TreeSelect();
                        userNode.setLabel(user.getNickName());
                        userNode.setId(user.getUserId());
                        userNode.setDictId(dept.getDeptId());
                        userNode.setDictName(dept.getDeptName());
                        return userNode;
                    })
                    .collect(Collectors.toList());

            children.addAll(buildTree(dept.getChildren(), deptUsersMap)); // 递归原始树的子部门

            if (!children.isEmpty()) {
                treeSelect.setChildren(children);
            }
            return treeSelect;
        }).collect(Collectors.toList());
    }

    // 获取当前用户ID（保持不变）



    /*public List<TreeSelect> buildTree(List<SysDept> depts, Map<Long, List<SysUser>> deptUsersMap) {
        List<TreeSelect> treeList = new ArrayList<>();
        for (SysDept dept : depts) {
            TreeSelect treeSelect = new TreeSelect();
            treeSelect.setId(dept.getDeptId());
            treeSelect.setLabel(dept.getDeptName());
            // 分配用户到部门
            List<SysUser> users = deptUsersMap.getOrDefault(dept.getDeptId(), Collections.emptyList());
            // 这里可以根据需要处理用户信息，比如只存储用户名或创建包含用户详细信息的子对象
            // 这里简单示例，只存储用户名列表
            List<TreeSelect> children = new ArrayList<>();
            if (users != null) {
                for (SysUser sysUser : users) {
                    TreeSelect treeSelect1 = new TreeSelect();
                    treeSelect1.setLabel(sysUser.getNickName());
                    treeSelect1.setId(sysUser.getUserId());
                    treeSelect1.setDictId(dept.getDeptId());
                    treeSelect1.setDictName(dept.getDeptName());
                    children.add(treeSelect1);
                }
            }
            // 递归处理子部门
            children.addAll(buildTree(dept.getChildren(), deptUsersMap));
            if (!children.isEmpty()) {
                treeSelect.setChildren(children); // 注意：这里我们重置了children，因为前面我们错误地将它设置为了用户名字符串列表
            }

            treeList.add(treeSelect);
        }
        return treeList;
    }*/


    @GetMapping("/addressList")
    @ApiOperation("查询地址信息列表")
    public AjaxResult addressList() {
        List<BaseAddressInfo> allAddresses = baseAddressInfoService.list();
        Map<Long, List<BaseAddressInfo>> addressMap = allAddresses.stream()
                .collect(Collectors.groupingBy(BaseAddressInfo::getTopId));
        List<AddTreeSelect> tree = buildTree(addressMap, 0L);
        return AjaxResult.success(tree);
    }

    private List<AddTreeSelect> buildTree(
            Map<Long, List<BaseAddressInfo>> addressMap,
            Long parentId
    ) {
        List<BaseAddressInfo> children = addressMap.get(parentId);
        if (children == null) return Collections.emptyList();

        return children.stream()
                .map(info -> {
                    AddTreeSelect node = new AddTreeSelect();
                    node.setId(info.getId());
                    node.setLabel(info.getAddName());
                    node.setValue(info.getId().toString());
                    node.setChildren(buildTree(addressMap, info.getId()));
                    return node;
                })
                .collect(Collectors.toList());
    }

    private static SimpleDateFormat sdf = new SimpleDateFormat("yyyyMMdd");
    private static final String DATA_KEY = "DDATAKEY:";

    public static String OrderNumberGenerator() {
        String format = sdf.format(new Date());
        RedisCache bean = SpringUtils.getBean(RedisCache.class);
        bean.setCacheObject(DATA_KEY + format, bean.getCacheObject(DATA_KEY + format) == null ? 1 : (Integer) (bean.getCacheObject(DATA_KEY + format)) + 1);
        return format + String.format("%04d", (Integer) (bean.getCacheObject(DATA_KEY + format)));
    }


    @ApiOperation("审批出差申请")
    @PostMapping("/approval")
    public AjaxResult approval(@RequestBody ApprovaltBusinessDto dto) {
        SysUser user = getLoginUser().getUser();
        String uuid = dto.getUuid();
        if (uuid == null) {
            throw new RuntimeException("uuid不可为空");
        }
        if (dto.getState() == null) {
            throw new RuntimeException("请选择通过或者驳回");
        }
        gwglLog one = gwglLogService.lambdaQuery()
                .eq(gwglLog::getUuid, uuid)
                .orderByDesc(gwglLog::getCreateTime)
                .last("LIMIT 1")
                .one();
        Integer checkState = one.getCheckState();
        if (checkState != 0) {
            throw new RuntimeException("记录已被处理");
        }
        String checkUserId = one.getCheckUserId();
        List<Long> longs = new ArrayList<>();
        if (checkUserId != null) {
            if (checkUserId.contains(",")) {
                String[] split = checkUserId.split(",");
                for (String s : split) {
                    longs.add(Long.parseLong(s));
                }
            } else {
                longs.add(Long.parseLong(checkUserId));
            }
        }
        if (longs.isEmpty() || !longs.contains(user.getUserId())) {
            throw new RuntimeException("当前用户无法操作");
        }
        ApprovalProcess approvalProcess = approvalsProcessService.lambdaQuery()
                .eq(ApprovalProcess::getUuid, uuid)
                .last("LIMIT 1")
                .one();
        BusinessTripApproval businessTripApproval = businessTripApprovalService.lambdaQuery()
                .eq(BusinessTripApproval::getUuid,uuid)
                .last("LIMIT 1")
                .one();
        Integer approvalStatus = approvalProcess.getApprovalStatusH();

        if (dto.getState() == 1) {
            if (approvalStatus == 1) {
                List<Long> userIds = new ArrayList<>();
                if (businessTripApproval.getHasOffcialCar() == 1) {
                    approvalProcess.setApprovalStatusH(100);
                    userIds.add(2165L);
                    addLog(approvalProcess, userIds);
                } else {
                    approvalProcess.setApprovalStatusH(500);
//                    userIds.add(1660L);
//                    userIds.add(1661L);
                }
            }
            if (approvalStatus == 100) {
                if (dto.getDriverName() == null) {
                    throw new RuntimeException("驾驶员姓名不可为空");
                }
                if (dto.getPlateNo() == null) {
                    throw new RuntimeException("车牌号不可为空");
                }
                approvalProcess.setApprovalStatusH(200);
                List<Long> userIds = new ArrayList<>();
                userIds.add(2157L);
                addLog(approvalProcess, userIds);
            }
            if (approvalStatus == 200) {
                if (dto.getLeaderId() == null) {
                    throw new RuntimeException("请选择分管局领导");
                }
                approvalProcess.setApprovalStatusH(300);
                List<Long> userIds = new ArrayList<>();
                userIds.add(dto.getLeaderId());
                addLog(approvalProcess, userIds);
            }
            if (approvalStatus == 300) {
                approvalProcess.setApprovalStatusH(400);
                List<Long> userIds = new ArrayList<>();
                userIds.add(1660L);
                userIds.add(1661L);
                addLog(approvalProcess, userIds);
            }
            if (approvalStatus == 400) {
                approvalProcess.setApprovalStatusH(500);
                if (businessTripApproval.getHasOffcialCar() == 1) {
                    approvalProcess.setApprovalStatusH(450);
                    List<Long> userIds = new ArrayList<>();
                    userIds.add(approvalProcess.getSubmitterId());
                    addLog(approvalProcess, userIds);
                }
            }
            if (approvalStatus == 450) {
                approvalProcess.setApprovalStatusH(500);
            }
            one.setCheckState(dto.getState());
            one.setCheckTime(System.currentTimeMillis() / 1000L);
            one.setReason(dto.getReason());
            boolean updateById = gwglLogService.updateById(one);
            boolean updateById1 = approvalsProcessService.updateById(approvalProcess);
            return toAjax(updateById1 && updateById);
        } else if (dto.getState() == 2) {
            if (dto.getReason() == null) {
                throw new RuntimeException("驳回意见不可为空");
            }
            if (approvalStatus == 100 || approvalStatus == 200 || approvalStatus == 300) {
                approvalProcess.setApprovalStatusH(400);
                List<Long> userIds = new ArrayList<>();
                userIds.add(1660L);
                userIds.add(1661L);
                addLog(approvalProcess, userIds);
            }else {
                approvalProcess.setApprovalStatusH(0);
                List<Long> userIds = new ArrayList<>();
                userIds.add(approvalProcess.getSubmitterId());
                addLog(approvalProcess, userIds);
            }
            one.setCheckState(dto.getState());
            one.setCheckTime(System.currentTimeMillis() / 1000L);
            one.setReason(dto.getReason());
            boolean updateById = gwglLogService.updateById(one);
            boolean updateById1 = approvalsProcessService.updateById(approvalProcess);
            return toAjax(updateById1 && updateById);
        } else {
            throw new RuntimeException("处理结果参数不正确");
        }
    }


    public Boolean addLog(ApprovalProcess approvalProcess, List<Long> userIds) {
        gwglLog gwglLog = new gwglLog();
        gwglLog.setUserId(approvalProcess.getSubmitterId());
        gwglLog.setUserName(approvalProcess.getSubmitterName());
        gwglLog.setCheckState(0);
        gwglLog.setUuid(approvalProcess.getUuid());
        gwglLog.setApprovalStatusH(approvalProcess.getApprovalStatusH());
        gwglLog.setCreateTime(System.currentTimeMillis() / 1000L);
        SysUser user = new SysUser();
        StringBuilder name = new StringBuilder();
        StringBuilder ids = new StringBuilder();
        for (Long userId : userIds) {
            SysUser user1 = sysUserService.selectUserById(userId);
            if (name.length() > 0) {
                name.append(",");
            }
            name.append(user1.getNickName());
            if (ids.length() > 0) {
                ids.append(",");
            }
            ids.append(user1.getUserId());
        }
        gwglLog.setCheckUserId(ids.toString());
        gwglLog.setChecker(name.toString());
        if (user.getDept() != null) {
            gwglLog.setCheckDeptName(user.getDept().getDeptName());
        }
        gwglLog.setCheckDeptId(user.getDeptId());
        return gwglLogService.save(gwglLog);
    }
}
