zhangherong
2025-07-11 0c929802702bca00b24b8c74f52723b21ba5b4c2
art: 查询岗位用户信息修改
已添加2个文件
已修改7个文件
1767 ■■■■ 文件已修改
db/ZHR/position_zhr.sql 补丁 | 查看 | 原始文档 | blame | 历史
lxzn-boot-base-core/src/main/java/org/jeecg/common/util/OrgCodeSplitUtil.java 30 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
lxzn-module-eam/src/main/java/org/jeecg/modules/eam/controller/EamTechnicalStatusEvaluationOrderController.java 155 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
lxzn-module-eam/src/main/java/org/jeecg/modules/eam/service/impl/EamMaintenanceStandardServiceImpl.java 240 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
lxzn-module-eam/src/main/java/org/jeecg/modules/eam/service/impl/EamTechnicalStatusEvaluationOrderServiceImpl.java 14 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
lxzn-module-system/lxzn-system-biz/src/main/java/org/jeecg/modules/system/service/IBaseFactoryService.java 7 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
lxzn-module-system/lxzn-system-biz/src/main/java/org/jeecg/modules/system/service/ISysUserService.java 13 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
lxzn-module-system/lxzn-system-biz/src/main/java/org/jeecg/modules/system/service/impl/BaseFactoryServiceImpl.java 21 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
lxzn-module-system/lxzn-system-biz/src/main/java/org/jeecg/modules/system/service/impl/SysUserServiceImpl.java 1287 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
db/ZHR/position_zhr.sql
lxzn-boot-base-core/src/main/java/org/jeecg/common/util/OrgCodeSplitUtil.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,30 @@
package org.jeecg.common.util;
import org.apache.commons.lang3.StringUtils;
import java.util.ArrayList;
import java.util.Collections;
import java.util.List;
public class OrgCodeSplitUtil {
    public static List<String> splitOrgCode(String orgCode) {
        if(StringUtils.isBlank(orgCode)) {
            return Collections.emptyList();
        }
        if(orgCode.length() % 3 != 0) {
            return Collections.emptyList();
        }
        List<String> list = new ArrayList<>();
        int length = orgCode.length();
        for (int i = length; i > 0; i -= 3) {
            list.add(orgCode.substring(0, i));
        }
        return list;
    }
    public static void main(String[] args) {
        String orgCode = "A01A01A01";
        List<String> list = splitOrgCode(orgCode);
        System.out.println(list);
    }
}
lxzn-module-eam/src/main/java/org/jeecg/modules/eam/controller/EamTechnicalStatusEvaluationOrderController.java
@@ -9,103 +9,96 @@
import org.jeecg.common.api.vo.Result;
import org.jeecg.common.aspect.annotation.AutoLog;
import org.jeecg.common.system.base.controller.JeecgController;
import org.jeecg.modules.eam.constant.BusinessCodeConst;
import org.jeecg.modules.eam.constant.OrderCreationMethodEnum;
import org.jeecg.modules.eam.entity.EamTechnicalStatusEvaluationOrder;
import org.jeecg.modules.eam.request.EamTechnicalStatusEvaluationOrderQuery;
import org.jeecg.modules.eam.request.EamTechnicalStatusEvaluationOrderRequest;
import org.jeecg.modules.eam.service.IEamTechnicalStatusEvaluationOrderService;
import org.jeecg.modules.system.service.ISysBusinessCodeRuleService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;
 /**
/**
 * @Description: æŠ€æœ¯çŠ¶æ€é‰´å®šå·¥å•
 * @Author: jeecg-boot
 * @Date:   2025-07-09
 * @Date: 2025-07-09
 * @Version: V1.0
 */
@Slf4j
@Api(tags="技术状态鉴定工单")
@Api(tags = "技术状态鉴定工单")
@RestController
@RequestMapping("/eam/eamTechnicalStatusEvaluationOrder")
public class EamTechnicalStatusEvaluationOrderController extends JeecgController<EamTechnicalStatusEvaluationOrder, IEamTechnicalStatusEvaluationOrderService> {
    @Autowired
    private IEamTechnicalStatusEvaluationOrderService eamTechnicalStatusEvaluationOrderService;
     @Autowired
     private ISysBusinessCodeRuleService businessCodeRuleService;
    /**
     * åˆ†é¡µåˆ—表查询
     *
     * @param query
     * @param pageNo
     * @param pageSize
     * @return
     */
    @ApiOperation(value="技术状态鉴定工单-分页列表查询", notes="技术状态鉴定工单-分页列表查询")
    @GetMapping(value = "/list")
    public Result<?> queryPageList(EamTechnicalStatusEvaluationOrderQuery query,
                                   @RequestParam(name="pageNo", defaultValue="1") Integer pageNo,
                                   @RequestParam(name="pageSize", defaultValue="10") Integer pageSize) {
        Page<EamTechnicalStatusEvaluationOrder> page = new Page<EamTechnicalStatusEvaluationOrder>(pageNo, pageSize);
        IPage<EamTechnicalStatusEvaluationOrder> pageList = eamTechnicalStatusEvaluationOrderService.queryPageList(page, query);
        return Result.OK(pageList);
    }
    /**
     * æ·»åŠ 
     *
     * @param request
     * @return
     */
    @AutoLog(value = "技术状态鉴定工单-添加")
    @ApiOperation(value="技术状态鉴定工单-添加", notes="技术状态鉴定工单-添加")
    @PostMapping(value = "/add")
    public Result<?> add(@RequestBody EamTechnicalStatusEvaluationOrderRequest request) {
        if (request == null) {
            return Result.error("添加的对象不能为空!");
        }
        if (CollectionUtil.isEmpty(request.getTableDetailList())) {
            return Result.error("检查项不能为空!");
        }
        String codeSeq = businessCodeRuleService.generateBusinessCodeSeq(BusinessCodeConst.TECHNICAL_STATUS_EVALUATION_ORDER_CODE_RULE);
        request.setOrderNum(codeSeq);
        request.setCreationMethod(OrderCreationMethodEnum.MANUAL.name());
        boolean b = eamTechnicalStatusEvaluationOrderService.addTechnicalStatusEvaluationOrder(request);
        if (!b) {
            return Result.error("添加失败!");
        }
        return Result.OK("添加成功!");
    }
    @Autowired
    private IEamTechnicalStatusEvaluationOrderService eamTechnicalStatusEvaluationOrderService;
     /**
      * é€šè¿‡id领取
      *
      * @param id
      * @return
      */
     @AutoLog(value = "技术状态鉴定工单-领取")
     @ApiOperation(value = "技术状态鉴定工单-领取", notes = "技术状态鉴定工单-领取")
     @GetMapping(value = "/collect")
     public Result<?> collect(@RequestParam(name = "id", required = true) String id) {
         boolean b = eamTechnicalStatusEvaluationOrderService.collect(id);
         if (!b) {
             Result.OK("领取失败!");
         }
         return Result.OK("领取成功!");
     }
    /**
     * åˆ†é¡µåˆ—表查询
     *
     * @param query
     * @param pageNo
     * @param pageSize
     * @return
     */
    @ApiOperation(value = "技术状态鉴定工单-分页列表查询", notes = "技术状态鉴定工单-分页列表查询")
    @GetMapping(value = "/list")
    public Result<?> queryPageList(EamTechnicalStatusEvaluationOrderQuery query,
                                   @RequestParam(name = "pageNo", defaultValue = "1") Integer pageNo,
                                   @RequestParam(name = "pageSize", defaultValue = "10") Integer pageSize) {
        Page<EamTechnicalStatusEvaluationOrder> page = new Page<EamTechnicalStatusEvaluationOrder>(pageNo, pageSize);
        IPage<EamTechnicalStatusEvaluationOrder> pageList = eamTechnicalStatusEvaluationOrderService.queryPageList(page, query);
        return Result.OK(pageList);
    }
    /**
     * æ·»åŠ 
     *
     * @param request
     * @return
     */
    @AutoLog(value = "技术状态鉴定工单-添加")
    @ApiOperation(value = "技术状态鉴定工单-添加", notes = "技术状态鉴定工单-添加")
    @PostMapping(value = "/add")
    public Result<?> add(@RequestBody EamTechnicalStatusEvaluationOrderRequest request) {
        if (request == null) {
            return Result.error("添加的对象不能为空!");
        }
        if (CollectionUtil.isEmpty(request.getTableDetailList())) {
            return Result.error("检查项不能为空!");
        }
        boolean b = eamTechnicalStatusEvaluationOrderService.addTechnicalStatusEvaluationOrder(request);
        if (!b) {
            return Result.error("添加失败!");
        }
        return Result.OK("添加成功!");
    }
    /**
     * é€šè¿‡id领取
     *
     * @param id
     * @return
     */
    @AutoLog(value = "技术状态鉴定工单-领取")
    @ApiOperation(value = "技术状态鉴定工单-领取", notes = "技术状态鉴定工单-领取")
    @GetMapping(value = "/collect")
    public Result<?> collect(@RequestParam(name = "id", required = true) String id) {
        boolean b = eamTechnicalStatusEvaluationOrderService.collect(id);
        if (!b) {
            Result.OK("领取失败!");
        }
        return Result.OK("领取成功!");
    }
     /**
     * é€šè¿‡id查询
     *
     * @param id
     * @return
     */
    @ApiOperation(value="技术状态鉴定工单-通过id查询", notes="技术状态鉴定工单-通过id查询")
    @GetMapping(value = "/queryById")
    public Result<?> queryById(@RequestParam(name="id",required=true) String id) {
        EamTechnicalStatusEvaluationOrder eamTechnicalStatusEvaluationOrder = eamTechnicalStatusEvaluationOrderService.getById(id);
        return Result.OK(eamTechnicalStatusEvaluationOrder);
    }
    /**
     * é€šè¿‡id查询
     *
     * @param id
     * @return
     */
    @ApiOperation(value = "技术状态鉴定工单-通过id查询", notes = "技术状态鉴定工单-通过id查询")
    @GetMapping(value = "/queryById")
    public Result<?> queryById(@RequestParam(name = "id", required = true) String id) {
        EamTechnicalStatusEvaluationOrder eamTechnicalStatusEvaluationOrder = eamTechnicalStatusEvaluationOrderService.getById(id);
        return Result.OK(eamTechnicalStatusEvaluationOrder);
    }
}
lxzn-module-eam/src/main/java/org/jeecg/modules/eam/service/impl/EamMaintenanceStandardServiceImpl.java
@@ -20,10 +20,6 @@
import org.jeecg.common.constant.CommonConstant;
import org.jeecg.common.exception.JeecgBootException;
import org.jeecg.common.system.vo.LoginUser;
import org.jeecg.modules.system.entity.BaseFactory;
import org.jeecg.modules.system.entity.BaseFactoryUser;
import org.jeecg.modules.system.entity.SysParams;
import org.jeecg.modules.system.service.*;
import org.jeecg.modules.eam.constant.BusinessCodeConst;
import org.jeecg.modules.eam.constant.EamMaintenanceStandardDetailCategory;
import org.jeecg.modules.eam.constant.MaintenanceStandardStatusEnum;
@@ -38,13 +34,17 @@
import org.jeecg.modules.eam.service.IEamEquipmentService;
import org.jeecg.modules.eam.service.IEamMaintenanceStandardDetailService;
import org.jeecg.modules.eam.service.IEamMaintenanceStandardService;
import org.jeecg.modules.eam.vo.*;
import org.jeecg.modules.eam.vo.EamMaintenanceStandardVo;
import org.jeecg.modules.flowable.apithird.business.entity.FlowMyBusiness;
import org.jeecg.modules.flowable.apithird.business.service.IFlowMyBusinessService;
import org.jeecg.modules.flowable.apithird.service.FlowCallBackServiceI;
import org.jeecg.modules.flowable.apithird.service.FlowCommonService;
import org.jeecg.modules.flowable.service.IFlowDefinitionService;
import org.jeecg.modules.flowable.service.IFlowTaskService;
import org.jeecg.modules.system.entity.BaseFactory;
import org.jeecg.modules.system.entity.BaseFactoryUser;
import org.jeecg.modules.system.entity.SysParams;
import org.jeecg.modules.system.service.*;
import org.jeecg.modules.system.vo.UserSelector;
import org.springframework.beans.BeanUtils;
import org.springframework.beans.factory.annotation.Autowired;
@@ -63,11 +63,11 @@
/**
 * @Description: ä¿å…»æ ‡å‡†
 * @Author: jeecg-boot
 * @Date:   2025-03-26
 * @Date: 2025-03-26
 * @Version: V1.0
 */
@Service("IEamMaintenanceStandardService")
public class EamMaintenanceStandardServiceImpl extends ServiceImpl<EamMaintenanceStandardMapper, EamMaintenanceStandard> implements IEamMaintenanceStandardService , FlowCallBackServiceI {
public class EamMaintenanceStandardServiceImpl extends ServiceImpl<EamMaintenanceStandardMapper, EamMaintenanceStandard> implements IEamMaintenanceStandardService, FlowCallBackServiceI {
    @Resource
    private EamMaintenanceStandardMapper eamMaintenanceStandardMapper;
@@ -124,45 +124,45 @@
            queryWrapper.in("e.equipment_code", equipArr);
        } else {
            //没有选择设备,根据中心过滤设备
            List<BaseFactoryUser> baseFactoryUserList=baseFactoryUserService.
                    list(new LambdaQueryWrapper<BaseFactoryUser>().eq(BaseFactoryUser::getUserId,sysUser.getId()));
            if(!CollectionUtils.isEmpty(baseFactoryUserList)){
            List<BaseFactoryUser> baseFactoryUserList = baseFactoryUserService.
                    list(new LambdaQueryWrapper<BaseFactoryUser>().eq(BaseFactoryUser::getUserId, sysUser.getId()));
            if (!CollectionUtils.isEmpty(baseFactoryUserList)) {
                Set<String> factoryIds = baseFactoryUserList.stream().map(BaseFactoryUser::getFactoryId).collect(Collectors.toSet());
                Set<String> factoryCode= baseFactoryService.listByIds(factoryIds).stream().map(BaseFactory::getOrgCode).collect(Collectors.toSet());
                Set<String> factoryCode = baseFactoryService.listByIds(factoryIds).stream().map(BaseFactory::getOrgCode).collect(Collectors.toSet());
                queryWrapper.in("e.factory_org_code", factoryCode);
            } else {
                return page;
            }
        }
        if(eamMaintenanceStandard != null) {
        if (eamMaintenanceStandard != null) {
            //编码 æ¨¡ç³ŠæŸ¥è¯¢
            if(StringUtils.isNotBlank(eamMaintenanceStandard.getStandardCode())) {
            if (StringUtils.isNotBlank(eamMaintenanceStandard.getStandardCode())) {
                queryWrapper.like("ems.standard_code", eamMaintenanceStandard.getStandardCode());
            }
            //名称 æ¨¡ç³ŠæŸ¥è¯¢
            if(StringUtils.isNotBlank(eamMaintenanceStandard.getStandardName())) {
            if (StringUtils.isNotBlank(eamMaintenanceStandard.getStandardName())) {
                queryWrapper.like("ems.standard_name", eamMaintenanceStandard.getStandardName());
            }
            //设备
            if(StringUtils.isNotBlank(eamMaintenanceStandard.getEquipmentId())) {
            if (StringUtils.isNotBlank(eamMaintenanceStandard.getEquipmentId())) {
                queryWrapper.eq("ems.equipment_id", eamMaintenanceStandard.getEquipmentId());
            }
            //保养分类
            if(StringUtils.isNotBlank(eamMaintenanceStandard.getMaintenanceCategory())) {
            if (StringUtils.isNotBlank(eamMaintenanceStandard.getMaintenanceCategory())) {
                queryWrapper.eq("ems.maintenance_category", eamMaintenanceStandard.getMaintenanceCategory());
            }
            //保养分类
            if(StringUtils.isNotBlank(eamMaintenanceStandard.getStandardStatus())) {
            if (StringUtils.isNotBlank(eamMaintenanceStandard.getStandardStatus())) {
                queryWrapper.eq("ems.standard_status", eamMaintenanceStandard.getStandardStatus());
            }
            //设备编码
            if(StringUtils.isNotBlank(eamMaintenanceStandard.getKeyword())) {
            if (StringUtils.isNotBlank(eamMaintenanceStandard.getKeyword())) {
                queryWrapper.and(wrapper -> wrapper.like("e.equipment_name", eamMaintenanceStandard.getKeyword())
                        .or()
                        .like("e.equipment_code", eamMaintenanceStandard.getKeyword()));
            }
            //id
            if(StringUtils.isNotBlank(eamMaintenanceStandard.getId())) {
            if (StringUtils.isNotBlank(eamMaintenanceStandard.getId())) {
                queryWrapper.eq("ems.id", eamMaintenanceStandard.getId());
            }
        }
@@ -177,19 +177,19 @@
        BeanUtils.copyProperties(standardRequest, entity);
        entity.setStandardStatus(MaintenanceStandardStatusEnum.WAIT_SUBMIT.name());
        //版本递增
        entity.setStandardVersion("v"+CommonConstant.OPERATE_TYPE_1);
        entity.setStandardVersion("v" + CommonConstant.OPERATE_TYPE_1);
        //设备处理
        entity.setEquipmentId(standardRequest.getEquipmentId());
        //删除标记
        entity.setDelFlag(CommonConstant.DEL_FLAG_0);
        //重复性校验
        EamMaintenanceStandard exist = checkDuplicate(entity.getEquipmentId(), entity.getMaintenanceCategory(),MaintenanceStandardStatusEnum.WAIT_SUBMIT.name());
        if(exist != null){
        EamMaintenanceStandard exist = checkDuplicate(entity.getEquipmentId(), entity.getMaintenanceCategory(), MaintenanceStandardStatusEnum.WAIT_SUBMIT.name());
        if (exist != null) {
            throw new JeecgBootException("设备标准已存在,不能重复添加!");
        }
        eamMaintenanceStandardMapper.insert(entity);
        //处理明细数据
        if(CollectionUtil.isNotEmpty(standardRequest.getTableDetailList())) {
        if (CollectionUtil.isNotEmpty(standardRequest.getTableDetailList())) {
            standardRequest.getTableDetailList().forEach(tableDetail -> {
                tableDetail.setStandardId(entity.getId());
            });
@@ -202,32 +202,32 @@
    @Transactional(rollbackFor = Exception.class)
    public boolean editMaintenanceStandard(EamMaintenanceStandardRequest standardRequest) {
        EamMaintenanceStandard entity = eamMaintenanceStandardMapper.selectById(standardRequest.getId());
        if(entity == null){
        if (entity == null) {
            throw new JeecgBootException("编辑的数据已删除,请刷新重试!");
        }
        entity.setStandardName(standardRequest.getStandardName());
        entity.setMaintenancePeriod(standardRequest.getMaintenancePeriod());
        eamMaintenanceStandardMapper.updateById(entity);
        //处理详情
        if(CollectionUtil.isNotEmpty(standardRequest.getTableDetailList())) {
        if (CollectionUtil.isNotEmpty(standardRequest.getTableDetailList())) {
            List<EamMaintenanceStandardDetail> addList = new ArrayList<>();
            List<EamMaintenanceStandardDetail> updateList = new ArrayList<>();
            standardRequest.getTableDetailList().forEach(tableDetail -> {
                tableDetail.setStandardId(entity.getId());
                if(tableDetail.getId() == null){
                if (tableDetail.getId() == null) {
                    addList.add(tableDetail);
                }else {
                } else {
                    updateList.add(tableDetail);
                }
            });
            if(CollectionUtil.isNotEmpty(addList)){
            if (CollectionUtil.isNotEmpty(addList)) {
                eamMaintenanceStandardDetailService.saveBatch(addList);
            }
            if(CollectionUtil.isNotEmpty(updateList)){
            if (CollectionUtil.isNotEmpty(updateList)) {
                eamMaintenanceStandardDetailService.updateBatchById(updateList);
            }
        }
        if(CollectionUtil.isNotEmpty(standardRequest.getRemoveDetailList())) {
        if (CollectionUtil.isNotEmpty(standardRequest.getRemoveDetailList())) {
            List<String> ids = standardRequest.getRemoveDetailList().stream().map(EamMaintenanceStandardDetail::getId).collect(Collectors.toList());
            eamMaintenanceStandardDetailService.removeBatchByIds(ids);
        }
@@ -238,7 +238,7 @@
    @Transactional(rollbackFor = Exception.class)
    public boolean upgradeMaintenanceStandard(EamMaintenanceStandardRequest standardRequest) {
        EamMaintenanceStandard entity = eamMaintenanceStandardMapper.selectById(standardRequest.getId());
        if(entity == null){
        if (entity == null) {
            throw new JeecgBootException("编辑的数据已删除,请刷新重试!");
        }
@@ -258,7 +258,7 @@
        if (matcher.find()) {
            try {
                int mainVersion = Integer.parseInt(matcher.group(1));
                newEntity.setStandardVersion("v"+(mainVersion+1));
                newEntity.setStandardVersion("v" + (mainVersion + 1));
            } catch (NumberFormatException ignored) {
            }
        }
@@ -267,13 +267,13 @@
        //删除标记
        newEntity.setDelFlag(CommonConstant.DEL_FLAG_0);
        //重复性校验
        EamMaintenanceStandard exist = checkDuplicate(newEntity.getEquipmentId(), newEntity.getMaintenanceCategory(),MaintenanceStandardStatusEnum.WAIT_SUBMIT.name());
        if(exist != null){
        EamMaintenanceStandard exist = checkDuplicate(newEntity.getEquipmentId(), newEntity.getMaintenanceCategory(), MaintenanceStandardStatusEnum.WAIT_SUBMIT.name());
        if (exist != null) {
            throw new JeecgBootException("设备标准已存在,不能重复添加!");
        }
        eamMaintenanceStandardMapper.insert(newEntity);
        //处理明细数据
        if(CollectionUtil.isNotEmpty(standardRequest.getTableDetailList())) {
        if (CollectionUtil.isNotEmpty(standardRequest.getTableDetailList())) {
            standardRequest.getTableDetailList().forEach(tableDetail -> {
                tableDetail.setId(null);
                tableDetail.setCreateBy(null);
@@ -288,7 +288,7 @@
    }
    @Override
    public EamMaintenanceStandard checkDuplicate(String equipmentId, String maintenanceCategory,String standardStatus) {
    public EamMaintenanceStandard checkDuplicate(String equipmentId, String maintenanceCategory, String standardStatus) {
        LambdaQueryWrapper<EamMaintenanceStandard> queryWrapper = new LambdaQueryWrapper<>();
        queryWrapper.eq(EamMaintenanceStandard::getEquipmentId, equipmentId);
        queryWrapper.eq(EamMaintenanceStandard::getMaintenanceCategory, maintenanceCategory);
@@ -297,7 +297,7 @@
        queryWrapper.orderByDesc(EamMaintenanceStandard::getStandardVersion);
        List<EamMaintenanceStandard> list = eamMaintenanceStandardMapper.selectList(queryWrapper);
        if(CollectionUtil.isEmpty(list)) {
        if (CollectionUtil.isEmpty(list)) {
            return null;
        }
        return list.get(0);
@@ -305,12 +305,13 @@
    /**
     * æŸ¥è¯¢æ ‡å‡†åˆ—表-前端展示该用户拥有的标准
     * @param keyword è®¾å¤‡ç¼–号
     *
     * @param keyword             è®¾å¤‡ç¼–号
     * @param maintenanceCategory ä¿å…»ç±»åž‹
     * @return
     */
    @Override
    public List<EamMaintenanceStandard> queryListByKeywordAndCategory(String keyword, String equipmentId, Integer pageSize, String maintenanceCategory){
    public List<EamMaintenanceStandard> queryListByKeywordAndCategory(String keyword, String equipmentId, Integer pageSize, String maintenanceCategory) {
        Page<EamMaintenanceStandard> page = new Page<EamMaintenanceStandard>(1, pageSize);
        EamMaintenanceStandard query = new EamMaintenanceStandard();
        query.setEquipmentId(equipmentId);
@@ -335,28 +336,29 @@
    /**
     * æµç¨‹å¯åЍ,保存对应的数据
     *
     * @param id
     * @return
     */
    @Override
    public Result<?> saveEamMaintenanceStandardProcess(String id){
    public Result<?> saveEamMaintenanceStandardProcess(String id) {
        LoginUser user = (LoginUser) SecurityUtils.getSubject().getPrincipal();
        EamMaintenanceStandard maintenanceStandard=this.getById(id);
        if (maintenanceStandard==null){
        EamMaintenanceStandard maintenanceStandard = this.getById(id);
        if (maintenanceStandard == null) {
            return Result.error("未找到对应保养标准");
        }
        System.out.println("保养规范流程:" + maintenanceStandard.getId());
        flowCommonService.initActBusiness(maintenanceStandard.getStandardName()+"规范进行流程审核",
        flowCommonService.initActBusiness(maintenanceStandard.getStandardName() + "规范进行流程审核",
                maintenanceStandard.getId(), "IEamMaintenanceStandardService", "eam_maintenance_standard", null);
        Map<String, Object> variables = new HashMap<>();
        variables.put("dataId", maintenanceStandard.getId());
        variables.put("organization", "保养规范启动流程");
        variables.put("comment", "保养规范启动流程");
        variables.put("proofreading",true);
        Result result= flowDefinitionService.startProcessInstanceByKey("eam_maintenance_standard", variables);
        variables.put("proofreading", true);
        Result result = flowDefinitionService.startProcessInstanceByKey("eam_maintenance_standard", variables);
        if (!result.isSuccess()) {
            super.removeById(maintenanceStandard.getId());
        }else {
        } else {
            maintenanceStandard.setStandardStatus(MaintenanceStandardStatusEnum.WAIT_REPAIR_DIRECTOR.name());
            maintenanceStandard.setDesigner(user.getUsername());
            maintenanceStandard.setDesignTime(new Date());
@@ -370,11 +372,10 @@
                return Result.error("流程记录不存在");
            }
            FlowMyBusiness flowMyBusiness = businessList.get(0);
            EamEquipment eamEquipment=eamEquipmentService.getById(maintenanceStandard.getEquipmentId());
            BaseFactory baseFactory=baseFactoryService.getOne(new QueryWrapper<BaseFactory>().eq("org_code", eamEquipment.getFactoryOrgCode()));
            List<UserSelector> userSelectorList=sysUserService.selectOperatorFactoryList(eamEquipment.getEquipmentCode(),baseFactory.getId(), BusinessCodeConst.PCR0008);
            EamEquipment eamEquipment = eamEquipmentService.getById(maintenanceStandard.getEquipmentId());
            List<UserSelector> userSelectorList = sysUserService.selectOperatorList(eamEquipment.getEquipmentCode(), eamEquipment.getFactoryOrgCode(), BusinessCodeConst.PCR0008);
            if (!CollectionUtils.isEmpty(userSelectorList)) {
                List<String> usernameList=userSelectorList.stream().map(UserSelector::getUsername).collect(Collectors.toList());
                List<String> usernameList = userSelectorList.stream().map(UserSelector::getUsername).collect(Collectors.toList());
                flowMyBusiness.setTodoUsers(JSON.toJSONString(usernameList));
                flowMyBusinessService.updateById(flowMyBusiness);
            }
@@ -384,11 +385,12 @@
    /**
     * å®¡æ‰¹æ“ä½œ
     *
     * @param eamMaintenanceStandardVo
     * @return
     */
    @Override
    public Result<?> auditEamMaintenanceStandard(EamMaintenanceStandardVo eamMaintenanceStandardVo){
    public Result<?> auditEamMaintenanceStandard(EamMaintenanceStandardVo eamMaintenanceStandardVo) {
        try {
            // å‚数校验
            if (StrUtil.isEmpty(eamMaintenanceStandardVo.getTaskId()) || StrUtil.isEmpty(eamMaintenanceStandardVo.getDataId())) {
@@ -442,23 +444,22 @@
            Result result = flowTaskService.complete(eamMaintenanceStandardVo);
            if (result.isSuccess()) {
                if (eamMaintenanceStandardVo.getRepairManagerApproveResult() != null) {
                    if (eamMaintenanceStandardVo.getRepairManagerApproveResult().equals("1")){
                    if (eamMaintenanceStandardVo.getRepairManagerApproveResult().equals("1")) {
                        List<FlowMyBusiness> newbusinessList = flowMyBusinessService.list(
                                new QueryWrapper<FlowMyBusiness>()
                                        .eq("process_instance_id", eamMaintenanceStandardVo.getInstanceId()));
                        FlowMyBusiness newflowMyBusiness = newbusinessList.get(0);
                        eamMaintenanceStandard.setStandardStatus(MaintenanceStandardStatusEnum.WAIT_TECHNICAL_DIRECTOR.name());
                        //获取flow的流程实例id,设置下一步的处理人员
                        EamMaintenanceStandard maintenanceStandard=this.getById(eamMaintenanceStandardVo.getDataId());
                        EamEquipment eamEquipment=eamEquipmentService.getById(maintenanceStandard.getEquipmentId());
                        BaseFactory baseFactory=baseFactoryService.getOne(new QueryWrapper<BaseFactory>().eq("org_code", eamEquipment.getFactoryOrgCode()));
                        List<UserSelector> userSelectorList=sysUserService.selectOperatorFactoryList(eamEquipment.getEquipmentCode(),baseFactory.getId(), BusinessCodeConst.PCR0009);
                        EamMaintenanceStandard maintenanceStandard = this.getById(eamMaintenanceStandardVo.getDataId());
                        EamEquipment eamEquipment = eamEquipmentService.getById(maintenanceStandard.getEquipmentId());
                        List<UserSelector> userSelectorList = sysUserService.selectOperatorList(eamEquipment.getEquipmentCode(), eamEquipment.getFactoryOrgCode(), BusinessCodeConst.PCR0009);
                        if (!CollectionUtils.isEmpty(userSelectorList)) {
                            List<String> usernameList=userSelectorList.stream().map(UserSelector::getUsername).collect(Collectors.toList());
                            List<String> usernameList = userSelectorList.stream().map(UserSelector::getUsername).collect(Collectors.toList());
                            newflowMyBusiness.setTodoUsers(JSON.toJSONString(usernameList));
                            flowMyBusinessService.updateById(newflowMyBusiness);
                        }
                    }else {
                    } else {
                        eamMaintenanceStandard.setStandardStatus(MaintenanceStandardStatusEnum.WAIT_SUBMIT.name());
                    }
                    eamMaintenanceStandard.setRepairManager(user.getUsername());
@@ -467,15 +468,15 @@
                    eamMaintenanceStandard.setRepairManagerApproveComment(eamMaintenanceStandardVo.getComment());
                }
                if (eamMaintenanceStandardVo.getTechnicalManagerApproveResult() != null) {
                    if (eamMaintenanceStandardVo.getTechnicalManagerApproveResult().equals("1")){
                    if (eamMaintenanceStandardVo.getTechnicalManagerApproveResult().equals("1")) {
                        eamMaintenanceStandard.setStandardStatus(MaintenanceStandardStatusEnum.START.name());
                        //判断是否进行升版,通过设备编号、保养分类、状态进行筛选
                        EamMaintenanceStandard maintenanceStandard=this.getById(eamMaintenanceStandardVo.getDataId());
                        QueryWrapper<EamMaintenanceStandard> queryWrapper=new QueryWrapper<>();
                        EamMaintenanceStandard maintenanceStandard = this.getById(eamMaintenanceStandardVo.getDataId());
                        QueryWrapper<EamMaintenanceStandard> queryWrapper = new QueryWrapper<>();
                        queryWrapper.eq("equipment_id", maintenanceStandard.getEquipmentId());
                        queryWrapper.eq("maintenance_category", maintenanceStandard.getMaintenanceCategory());
                        queryWrapper.eq("standard_status", MaintenanceStandardStatusEnum.START.name());
                        List<EamMaintenanceStandard> list=eamMaintenanceStandardMapper.selectList(queryWrapper);
                        List<EamMaintenanceStandard> list = eamMaintenanceStandardMapper.selectList(queryWrapper);
                        if (!CollectionUtils.isEmpty(list)) {
                            //作废原有
                            for (EamMaintenanceStandard eamMaintenanceStandard1 : list) {
@@ -483,7 +484,7 @@
                                this.updateById(eamMaintenanceStandard1);
                            }
                        }
                    }else {
                    } else {
                        eamMaintenanceStandard.setStandardStatus(MaintenanceStandardStatusEnum.WAIT_SUBMIT.name());
                    }
                    eamMaintenanceStandard.setTechnicalManager(user.getUsername());
@@ -546,9 +547,10 @@
    /*导入点检文件Excel--------------------------开始*/
    /**
        * ç‚¹æ£€è¡¨å¯¼å…¥å…¥å£
    */
     * ç‚¹æ£€è¡¨å¯¼å…¥å…¥å£
     */
    @Override
    @Transactional(rollbackFor = Exception.class)
    public Result<?> importPointInspectionExcel(MultipartFile file) {
@@ -562,7 +564,7 @@
            EamMaintenanceStandard eamMaintenanceStandard = extractDeviceInfo(sheet);
            if (eamMaintenanceStandard == null) {
                return Result.error("设备信息提取失败");
            }else {
            } else {
                if (eamMaintenanceStandard.getEquipmentId() == null) {
                    return Result.error("设备信息提取失败");
                }
@@ -570,8 +572,8 @@
            eamMaintenanceStandard.setStandardName(name);
            EamMaintenanceStandard exist = checkDuplicate(eamMaintenanceStandard.getEquipmentId(), eamMaintenanceStandard.getMaintenanceCategory(),MaintenanceStandardStatusEnum.START.name());
            if(exist != null){
            EamMaintenanceStandard exist = checkDuplicate(eamMaintenanceStandard.getEquipmentId(), eamMaintenanceStandard.getMaintenanceCategory(), MaintenanceStandardStatusEnum.START.name());
            if (exist != null) {
                return Result.error(name + ": è®¾å¤‡æ ‡å‡†å·²å­˜åœ¨ï¼Œä¸èƒ½é‡å¤æ·»åŠ ");
            }
@@ -579,13 +581,13 @@
            // 2. æå–每日点检项目
            List<EamMaintenanceStandardDetail> dailyDetails = extractDailyItems(sheet, eamMaintenanceStandard);
            if(dailyDetails.isEmpty()){
            if (dailyDetails.isEmpty()) {
                return Result.error("未找到每日点检项目");
            }
            // 3. æå–周保养项目
            List<EamMaintenanceStandardDetail> weeklyDetails = extractWeeklyItems(sheet, eamMaintenanceStandard);
            if(weeklyDetails.isEmpty()){
            if (weeklyDetails.isEmpty()) {
                return Result.error("未找到周保养项目");
            }
@@ -601,12 +603,12 @@
            SysParams sysParams = sysParamsService.getSysPramBySettingKey("maintenance_import_type");
            if (sysParams != null) {
                if (sysParams.getSettingValue().equals("1")){
                if (sysParams.getSettingValue().equals("1")) {
                    //触发保养流程
                    eamMaintenanceStandard.setStandardStatus(MaintenanceStandardStatusEnum.WAIT_SUBMIT.name());
                    eamMaintenanceStandardMapper.updateById(eamMaintenanceStandard);
                }
            }else {
            } else {
                return Result.error("未找到保养流程导入相关配置,请联系管理员");
            }
@@ -618,8 +620,8 @@
    }
    /**
        * æå–点检表标题
    */
     * æå–点检表标题
     */
    private String extractInspectionTitle(MultipartFile file) {
        try (Workbook workbook = WorkbookFactory.create(file.getInputStream())) {
            Sheet sheet = workbook.getSheetAt(0);
@@ -643,7 +645,7 @@
    }
    /**
        * æå–点检表之前的文字
     * æå–点检表之前的文字
     */
    private String extractTextBeforeInspection(String title) {
        if (StringUtils.isBlank(title)) {
@@ -655,8 +657,8 @@
    }
    /**
        * æå–设备信息
    */
     * æå–设备信息
     */
    private EamMaintenanceStandard extractDeviceInfo(Sheet sheet) {
        Row headerRow = sheet.getRow(0);
        if (headerRow == null) {
@@ -691,7 +693,7 @@
            EamEquipment equipments = eamEquipmentService.selectByEquipmentCode(standard.getEquipmentCode());
            if (equipments == null) {
                return null;
            }else {
            } else {
                standard.setEquipmentId(equipments.getId());
            }
        }
@@ -708,7 +710,7 @@
    }
    /**
        * è§£æžæ—¥æœŸå­—符串
     * è§£æžæ—¥æœŸå­—符串
     */
    private Date parseDate(String dateStr) throws ParseException {
        // å°è¯•多种日期格式
@@ -734,22 +736,22 @@
    }
    /**
        * æå–每日点检项目
    */
     * æå–每日点检项目
     */
    private List<EamMaintenanceStandardDetail> extractDailyItems(Sheet sheet, EamMaintenanceStandard standard) {
        return extractItems(sheet, standard, "点检项目", "完成数据/要求", "DAY_INSPECTION");
    }
    /**
        * æå–周保养项目
    */
     * æå–周保养项目
     */
    private List<EamMaintenanceStandardDetail> extractWeeklyItems(Sheet sheet, EamMaintenanceStandard standard) {
        return extractItems(sheet, standard, "周保养项目", "检查标准", "WEEK_INSPECTION");
    }
    /**
        * é€šç”¨é¡¹ç›®æå–方法
    */
     * é€šç”¨é¡¹ç›®æå–方法
     */
    private List<EamMaintenanceStandardDetail> extractItems(Sheet sheet, EamMaintenanceStandard standard,
                                                            String primaryHeader, String secondaryHeader,
                                                            String itemCategory) {
@@ -792,7 +794,7 @@
    }
    /**
        * æŸ¥æ‰¾è¡¨æ ¼åŒºåŸŸ
     * æŸ¥æ‰¾è¡¨æ ¼åŒºåŸŸ
     */
    private int[] findTableSection(Sheet sheet, String primaryHeader, String secondaryHeader) {
        for (int rowIdx = 0; rowIdx <= sheet.getLastRowNum(); rowIdx++) {
@@ -809,8 +811,8 @@
    }
    /**
        * æ£€æŸ¥æ˜¯å¦ä¸ºè¡¨å¤´è¡Œ
    */
     * æ£€æŸ¥æ˜¯å¦ä¸ºè¡¨å¤´è¡Œ
     */
    private boolean isHeaderRow(Row row, String header1, String header2) {
        boolean foundHeader1 = false;
        boolean foundHeader2 = false;
@@ -828,7 +830,7 @@
    }
    /**
        * æŸ¥æ‰¾æ•°æ®ç»“束位置
     * æŸ¥æ‰¾æ•°æ®ç»“束位置
     */
    private int findDataEnd(Sheet sheet, int startRow) {
        for (int rowIdx = startRow; rowIdx <= sheet.getLastRowNum(); rowIdx++) {
@@ -849,8 +851,8 @@
    }
    /**
        * è¯†åˆ«ç­¾å­—行特征
    */
     * è¯†åˆ«ç­¾å­—行特征
     */
    private boolean isSignatureRow(Row row) {
        for (int colIdx = 0; colIdx < row.getLastCellNum(); colIdx++) {
            Cell cell = row.getCell(colIdx);
@@ -867,7 +869,7 @@
    /**
     * è¯†åˆ«æ–°è¡¨å¤´å¼€å§‹
    */
     */
    private boolean isNewHeaderStart(Row row) {
        for (int colIdx = 0; colIdx < row.getLastCellNum(); colIdx++) {
            Cell cell = row.getCell(colIdx);
@@ -882,8 +884,8 @@
    }
    /**
        * æ£€æŸ¥è¡Œæ˜¯å¦ä¸ºç©º
    */
     * æ£€æŸ¥è¡Œæ˜¯å¦ä¸ºç©º
     */
    private boolean isEmptyRow(Row row) {
        if (row == null) return true;
        for (int colIdx = 0; colIdx < row.getLastCellNum(); colIdx++) {
@@ -899,8 +901,8 @@
    }
    /**
        * ä½¿ç”¨æ­£åˆ™æå–字段
    */
     * ä½¿ç”¨æ­£åˆ™æå–字段
     */
    private String extractField(String text, String regex) {
        if (StringUtils.isBlank(text)) return "";
        Pattern pattern = Pattern.compile(regex);
@@ -909,8 +911,8 @@
    }
    /**
        * èŽ·å–å•å…ƒæ ¼å­—ç¬¦ä¸²å€¼
    */
     * èŽ·å–å•å…ƒæ ¼å­—ç¬¦ä¸²å€¼
     */
    private String getCellStringValue(Cell cell) {
        if (cell == null) return "";
        switch (cell.getCellType()) {
@@ -931,8 +933,8 @@
    }
    /**
        * å¤„理公式单元格
    */
     * å¤„理公式单元格
     */
    private String handleFormulaCell(Cell cell) {
        try {
            FormulaEvaluator evaluator = cell.getSheet().getWorkbook().getCreationHelper().createFormulaEvaluator();
@@ -941,10 +943,14 @@
            if (cellValue == null) return "";
            switch (cellValue.getCellType()) {
                case STRING: return cellValue.getStringValue();
                case NUMERIC: return String.valueOf((int) cellValue.getNumberValue());
                case BOOLEAN: return String.valueOf(cellValue.getBooleanValue());
                default: return "";
                case STRING:
                    return cellValue.getStringValue();
                case NUMERIC:
                    return String.valueOf((int) cellValue.getNumberValue());
                case BOOLEAN:
                    return String.valueOf(cellValue.getBooleanValue());
                default:
                    return "";
            }
        } catch (Exception e) {
            return "";
@@ -956,6 +962,7 @@
    /**
     * ç»Ÿä¸€ä¿å…»è§„范导入入口
     *
     * @param file ä¸Šä¼ æ–‡ä»¶
     * @param type ä¿å…»ç±»åž‹ (SECOND/THIRD)
     * @return å¯¼å…¥ç»“果(包含成功/失败信息)
@@ -988,15 +995,15 @@
                    }
                    // æå–设备信息
                    standard = extractDeviceInfo(table,type);
                    standard = extractDeviceInfo(table, type);
                    if (standard == null) {
                        return Result.error(fileName + ": è®¾å¤‡ä¿¡æ¯æå–失败");
                    }
                    // é…ç½®ç±»åž‹ç›¸å…³å‚æ•°
                    configureStandard(standard, type, file);
                    EamMaintenanceStandard exist = checkDuplicate(standard.getEquipmentId(), standard.getMaintenanceCategory(),MaintenanceStandardStatusEnum.START.name());
                    if(exist != null){
                    EamMaintenanceStandard exist = checkDuplicate(standard.getEquipmentId(), standard.getMaintenanceCategory(), MaintenanceStandardStatusEnum.START.name());
                    if (exist != null) {
                        return Result.error(fileName + ": è®¾å¤‡æ ‡å‡†å·²å­˜åœ¨ï¼Œä¸èƒ½é‡å¤æ·»åŠ ");
                    }
                    eamMaintenanceStandardMapper.insert(standard);
@@ -1043,7 +1050,7 @@
                    standard.setStandardStatus(MaintenanceStandardStatusEnum.WAIT_SUBMIT.name());
                    eamMaintenanceStandardMapper.updateById(standard);
                }
            }else {
            } else {
                return Result.error("未找到保养流程导入相关配置,请联系管理员");
            }
@@ -1058,7 +1065,7 @@
    /**
     * åŽå¤„理方法:根据不同类型进行处理
    */
     */
    private void processItemsAfterExtraction(List<EamMaintenanceStandardDetail> items, String type) {
        if ("SECOND".equals(type)) {
            // äºŒçº§ä¿å…»: åˆ é™¤æ²¡æœ‰åºå·çš„æ•°æ®
@@ -1071,7 +1078,7 @@
            }
            // 2. ä¸ºç¼ºå¤±éƒ¨ä½çš„æ•°æ®å¡«å……前一条的保养部位
            String lastPart = "";
            int i =1;
            int i = 1;
            for (EamMaintenanceStandardDetail item : items) {
                item.setItemCode(i);
                if (item.getItemPart() != null && !item.getItemPart().isEmpty()) {
@@ -1083,6 +1090,7 @@
            }
        }
    }
    /**
     * æå–二级保养项目(区分第一页和后续页面)
     */
@@ -1121,7 +1129,7 @@
                if (row.getTableCells().size() > 1) {
                    String seqText = getCellText(row.getCell(1));
                    try {
                        if (!seqText.equals("序号")){
                        if (!seqText.equals("序号")) {
                            item.setItemCode(Integer.parseInt(seqText.trim()));
                        }
                    } catch (NumberFormatException e) {
@@ -1248,7 +1256,7 @@
    /**
     * æ–‡æ¡£ç±»åž‹æ ¡éªŒ - é˜²æ­¢äºŒä¿ä¼ å…¥ä¸‰ä¿æˆ–反之
    */
     */
    private boolean isWrongDocumentType(XWPFTable table, String requestedType) {
        boolean hasRepairTitle = false;
        boolean hasOperatorTitle = false;
@@ -1295,7 +1303,7 @@
    /**
     * æå–设备基本信息
     */
    private EamMaintenanceStandard extractDeviceInfo(XWPFTable table,String type) {
    private EamMaintenanceStandard extractDeviceInfo(XWPFTable table, String type) {
        if (table.getNumberOfRows() < 2) return null;
        // æå–前两行数据
@@ -1314,11 +1322,11 @@
            EamEquipment equipments = eamEquipmentService.selectByEquipmentCode(standard.getEquipmentCode());
            if (equipments == null) {
                return null;
            }else {
            } else {
                standard.setEquipmentId(equipments.getId());
            }
            if (type.equals("THIRD")){
                EamEquipmentExtend eamEquipmentExtend=eamEquipmentExtendService.getById(standard.getEquipmentId());
            if (type.equals("THIRD")) {
                EamEquipmentExtend eamEquipmentExtend = eamEquipmentExtendService.getById(standard.getEquipmentId());
                standard.setMaintenancePeriod(eamEquipmentExtend.getThirdMaintenancePeriod());
            }
        }
lxzn-module-eam/src/main/java/org/jeecg/modules/eam/service/impl/EamTechnicalStatusEvaluationOrderServiceImpl.java
@@ -40,6 +40,7 @@
import org.jeecg.modules.system.service.IBaseFactoryUserService;
import org.jeecg.modules.system.service.ISysBusinessCodeRuleService;
import org.jeecg.modules.system.service.ISysUserService;
import org.jeecg.modules.system.vo.UserSelector;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
@@ -228,6 +229,11 @@
        if(sysUser == null) {
            throw new JeecgBootException("不是维修工,无法领取此工单!");
        }
        List<UserSelector> userSelectors = sysUserService.selectOperatorList(equipment.getEquipmentCode(), equipment.getFactoryOrgCode(), BusinessCodeConst.PCR0002);
        if (CollectionUtil.isEmpty(userSelectors)) {
            throw new JeecgBootException("设备未分配给车间班组长,无法进入下级审批!");
        }
        entity.setEvaluator(sysUser.getUsername());
        entity.setEvaluationStatus(TechnicalStatusEvaluationOrderStatusEnum.UNDER_EVALUATION.name());
        entity.setActualStartTime(new Date());
@@ -245,10 +251,10 @@
            variables.put("organization", entity.getRemark());
            variables.put("comment", entity.getRemark());
        }
//        variables.put("proofreading", true);
//        List<String> usernames = new ArrayList<>();
//        usernames.add(entity.getOperator());
//        variables.put("NextAssignee", usernames);
        variables.put("proofreading", true);
        List<String> usernames = new ArrayList<>();
        usernames.add(entity.getEquipmentCode());
        variables.put("NextAssignee", usernames);
//        Result result = flowDefinitionService.startProcessInstanceByKey("second_maintenance_process", variables);
//        if (result != null) {
//            //更新设备保养状态
lxzn-module-system/lxzn-system-biz/src/main/java/org/jeecg/modules/system/service/IBaseFactoryService.java
@@ -67,4 +67,11 @@
     * @param orgCode
     */
    String factoryDataNameByOrgCode(String orgCode);
    /**
     * æ ¹æ® orgCode æŸ¥è¯¢ factoryIds ä»¥éƒ½å¥½åˆ†å‰²
     * @param orgCode
     * @return
     */
    List<String> queryFactoryIdsByOrgCode(String orgCode);
}
lxzn-module-system/lxzn-system-biz/src/main/java/org/jeecg/modules/system/service/ISysUserService.java
@@ -344,20 +344,11 @@
    /**
     * é€‰æ‹©ç”¨æˆ·
     * @param equipmentCode é€‰æ‹©çš„设备ID
     * @param productionId é€‰æ‹©çš„车间ID
     * @param factoryOrgCode é€‰æ‹©çš„中心信息
     * @param positionCode å²—位编号
     * @return
     */
    List<UserSelector> selectOperatorList(String equipmentCode, String productionId, String positionCode);
    /**
     * é€‰æ‹©ç”¨æˆ·
     * @param equipmentCode é€‰æ‹©çš„设备ID
     * @param factoryId é€‰æ‹©çš„车间ID
     * @param positionCode å²—位编号
     * @return
     */
    List<UserSelector> selectOperatorFactoryList(String equipmentCode, String factoryId, String positionCode);
    List<UserSelector> selectOperatorList(String equipmentCode, String factoryOrgCode, String positionCode);
    /**
     * é€‰æ‹©ç”¨æˆ·
lxzn-module-system/lxzn-system-biz/src/main/java/org/jeecg/modules/system/service/impl/BaseFactoryServiceImpl.java
@@ -1,5 +1,6 @@
package org.jeecg.modules.system.service.impl;
import cn.hutool.core.collection.CollectionUtil;
import cn.hutool.core.util.StrUtil;
import com.alibaba.fastjson.JSONObject;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
@@ -11,6 +12,7 @@
import org.jeecg.common.constant.FillRuleConstant;
import org.jeecg.common.exception.JeecgBootException;
import org.jeecg.common.util.FillRuleUtil;
import org.jeecg.common.util.OrgCodeSplitUtil;
import org.jeecg.common.util.oConvertUtils;
import org.jeecg.modules.system.entity.BaseFactory;
import org.jeecg.modules.system.entity.BaseFactoryUser;
@@ -29,6 +31,7 @@
import org.springframework.transaction.annotation.Transactional;
import java.util.*;
import java.util.stream.Collectors;
/**
 * @Description: è®¾å¤‡è½¦é—´ç®¡ç†
@@ -362,4 +365,22 @@
        }
        return null;
    }
    @Override
    public List<String> queryFactoryIdsByOrgCode(String orgCode) {
        //分割 orgCode
        List<String> orgCodeArr = OrgCodeSplitUtil.splitOrgCode(orgCode);
        if(CollectionUtil.isEmpty(orgCodeArr)){
            return Collections.emptyList();
        }
        LambdaQueryWrapper<BaseFactory> query = new LambdaQueryWrapper<>();
        query.in(BaseFactory::getOrgCode, orgCodeArr);
        query.eq(BaseFactory::getDelFlag, CommonConstant.DEL_FLAG_0);
        List<BaseFactory> list = this.getBaseMapper().selectList(query);
        Set<String> collect = list.stream().map(BaseFactory::getId).collect(Collectors.toSet());
        if(CollectionUtil.isEmpty(collect)){
            return Collections.emptyList();
        }
        return new ArrayList<>(collect);
    }
}
lxzn-module-system/lxzn-system-biz/src/main/java/org/jeecg/modules/system/service/impl/SysUserServiceImpl.java
@@ -1,5 +1,6 @@
package org.jeecg.modules.system.service.impl;
import cn.hutool.core.collection.CollectionUtil;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.core.metadata.IPage;
@@ -23,6 +24,7 @@
import org.jeecg.modules.system.entity.*;
import org.jeecg.modules.system.mapper.*;
import org.jeecg.modules.system.model.SysUserSysDepartModel;
import org.jeecg.modules.system.service.IBaseFactoryService;
import org.jeecg.modules.system.service.ISysDictService;
import org.jeecg.modules.system.service.ISysUserService;
import org.jeecg.modules.system.vo.EamUserRepDepVo;
@@ -52,38 +54,40 @@
@Slf4j
public class SysUserServiceImpl extends ServiceImpl<SysUserMapper, SysUser> implements ISysUserService {
    @Autowired
    private SysUserMapper userMapper;
    @Autowired
    private SysPermissionMapper sysPermissionMapper;
    @Autowired
    private SysUserRoleMapper sysUserRoleMapper;
    @Autowired
    private SysUserDepartMapper sysUserDepartMapper;
    @Autowired
    private SysDepartMapper sysDepartMapper;
    @Autowired
    private SysRoleMapper sysRoleMapper;
    @Autowired
    private SysDepartRoleUserMapper departRoleUserMapper;
    @Autowired
    private SysDepartRoleMapper sysDepartRoleMapper;
    @Resource
    private BaseCommonService baseCommonService;
    @Autowired
    private SysThirdAccountMapper sysThirdAccountMapper;
    @Autowired
    ThirdAppWechatEnterpriseServiceImpl wechatEnterpriseService;
    @Autowired
    ThirdAppDingtalkServiceImpl dingtalkService;
    @Autowired
    SysRoleIndexMapper sysRoleIndexMapper;
    @Resource
    MdcUserProductionMapper mdcUserProductionMapper;
    @Resource
    EamBaseRepairDepartUserMapper eamBaseRepairDepartUserMapper;
    @Resource
    private ISysDictService sysDictService;
    @Resource
    private SysUserMapper userMapper;
    @Resource
    private SysPermissionMapper sysPermissionMapper;
    @Resource
    private SysUserRoleMapper sysUserRoleMapper;
    @Resource
    private SysUserDepartMapper sysUserDepartMapper;
    @Resource
    private SysDepartMapper sysDepartMapper;
    @Resource
    private SysRoleMapper sysRoleMapper;
    @Resource
    private SysDepartRoleUserMapper departRoleUserMapper;
    @Resource
    private SysDepartRoleMapper sysDepartRoleMapper;
    @Resource
    private BaseCommonService baseCommonService;
    @Resource
    private SysThirdAccountMapper sysThirdAccountMapper;
    @Autowired
    ThirdAppWechatEnterpriseServiceImpl wechatEnterpriseService;
    @Autowired
    ThirdAppDingtalkServiceImpl dingtalkService;
    @Resource
    SysRoleIndexMapper sysRoleIndexMapper;
    @Resource
    MdcUserProductionMapper mdcUserProductionMapper;
    @Resource
    EamBaseRepairDepartUserMapper eamBaseRepairDepartUserMapper;
    @Resource
    private ISysDictService sysDictService;
    @Autowired
    private IBaseFactoryService factoryService;
    @Override
    @CacheEvict(value = {CacheConstant.SYS_USERS_CACHE}, allEntries = true)
@@ -99,10 +103,10 @@
        if (!newpassword.equals(confirmpassword)) {
            return Result.error("两次输入密码不一致!");
        }
        //设置密码更新时间
        //sysUser.setPasswordTime(new Date());
        //设置密码首次登录失效
        //sysUser.setPasswordFlag(CommonConstant.DEL_FLAG_0);
        //设置密码更新时间
        //sysUser.setPasswordTime(new Date());
        //设置密码首次登录失效
        //sysUser.setPasswordFlag(CommonConstant.DEL_FLAG_0);
        String password = PasswordUtil.encrypt(username, newpassword, user.getSalt());
        this.userMapper.update(new SysUser().setPassword(password).setPasswordTime(new Date()).setPasswordFlag(CommonConstant.DEL_FLAG_0), new LambdaQueryWrapper<SysUser>().eq(SysUser::getId, user.getId()));
        return Result.ok("密码重置成功!");
@@ -113,10 +117,10 @@
    public Result<?> changePassword(SysUser sysUser) {
        String salt = oConvertUtils.randomGen(8);
        sysUser.setSalt(salt);
        //设置密码更新时间
        sysUser.setPasswordTime(new Date());
        //管理员修改密码,设置用户首次登录
        //sysUser.setPasswordFlag();
        //设置密码更新时间
        sysUser.setPasswordTime(new Date());
        //管理员修改密码,设置用户首次登录
        //sysUser.setPasswordFlag();
        String password = sysUser.getPassword();
        String passwordEncode = PasswordUtil.encrypt(sysUser.getUsername(), password, salt);
        sysUser.setPassword(passwordEncode);
@@ -125,209 +129,213 @@
    }
    @Override
    @CacheEvict(value={CacheConstant.SYS_USERS_CACHE}, allEntries=true)
    @Transactional(rollbackFor = Exception.class)
    public boolean deleteUser(String userId) {
        //1.删除用户
        this.removeById(userId);
        return false;
    }
    @CacheEvict(value = {CacheConstant.SYS_USERS_CACHE}, allEntries = true)
    @Transactional(rollbackFor = Exception.class)
    public boolean deleteUser(String userId) {
        //1.删除用户
        this.removeById(userId);
        return false;
    }
    @Override
    @CacheEvict(value={CacheConstant.SYS_USERS_CACHE}, allEntries=true)
    @Transactional(rollbackFor = Exception.class)
    public boolean deleteBatchUsers(String userIds) {
        //1.删除用户
        this.removeByIds(Arrays.asList(userIds.split(",")));
        return false;
    }
    @Override
    @CacheEvict(value = {CacheConstant.SYS_USERS_CACHE}, allEntries = true)
    @Transactional(rollbackFor = Exception.class)
    public boolean deleteBatchUsers(String userIds) {
        //1.删除用户
        this.removeByIds(Arrays.asList(userIds.split(",")));
        return false;
    }
    @Override
    public SysUser getUserByName(String username) {
        return userMapper.getUserByName(username);
    }
    @Override
    public SysUser getUserByName(String username) {
        return userMapper.getUserByName(username);
    }
    @Override
    @Transactional(rollbackFor = Exception.class)
    public void addUserWithRole(SysUser user, String roles) {
        this.save(user);
        if(oConvertUtils.isNotEmpty(roles)) {
            String[] arr = roles.split(",");
            for (String roleId : arr) {
                SysUserRole userRole = new SysUserRole(user.getId(), roleId);
                sysUserRoleMapper.insert(userRole);
            }
        }
    }
    @Override
    @Transactional(rollbackFor = Exception.class)
    public void addUserWithRole(SysUser user, String roles) {
        this.save(user);
        if (oConvertUtils.isNotEmpty(roles)) {
            String[] arr = roles.split(",");
            for (String roleId : arr) {
                SysUserRole userRole = new SysUserRole(user.getId(), roleId);
                sysUserRoleMapper.insert(userRole);
            }
        }
    }
    @Override
    @CacheEvict(value= {CacheConstant.SYS_USERS_CACHE}, allEntries=true)
    @Transactional(rollbackFor = Exception.class)
    public void editUserWithRole(SysUser user, String roles) {
        this.updateById(user);
        //先删后加
        sysUserRoleMapper.delete(new QueryWrapper<SysUserRole>().lambda().eq(SysUserRole::getUserId, user.getId()));
        if(oConvertUtils.isNotEmpty(roles)) {
            String[] arr = roles.split(",");
            for (String roleId : arr) {
                SysUserRole userRole = new SysUserRole(user.getId(), roleId);
                sysUserRoleMapper.insert(userRole);
            }
        }
    }
    @Override
    @CacheEvict(value = {CacheConstant.SYS_USERS_CACHE}, allEntries = true)
    @Transactional(rollbackFor = Exception.class)
    public void editUserWithRole(SysUser user, String roles) {
        this.updateById(user);
        //先删后加
        sysUserRoleMapper.delete(new QueryWrapper<SysUserRole>().lambda().eq(SysUserRole::getUserId, user.getId()));
        if (oConvertUtils.isNotEmpty(roles)) {
            String[] arr = roles.split(",");
            for (String roleId : arr) {
                SysUserRole userRole = new SysUserRole(user.getId(), roleId);
                sysUserRoleMapper.insert(userRole);
            }
        }
    }
    @Override
    public List<String> getRole(String username) {
        return sysUserRoleMapper.getRoleByUserName(username);
    }
    @Override
    public List<String> getRole(String username) {
        return sysUserRoleMapper.getRoleByUserName(username);
    }
    /**
     * èŽ·å–åŠ¨æ€é¦–é¡µè·¯ç”±é…ç½®
     * @param username
     * @param version
     * @return
     */
    @Override
    public SysRoleIndex getDynamicIndexByUserRole(String username,String version) {
        List<String> roles = sysUserRoleMapper.getRoleByUserName(username);
        String componentUrl = RoleIndexConfigEnum.getIndexByRoles(roles);
        SysRoleIndex roleIndex = new SysRoleIndex(componentUrl);
        //只有 X-Version=v3 çš„æ—¶å€™ï¼Œæ‰è¯»å–sys_role_index表获取角色首页配置
        if (oConvertUtils.isNotEmpty(version) && roles!=null && roles.size()>0) {
            LambdaQueryWrapper<SysRoleIndex> routeIndexQuery = new LambdaQueryWrapper();
            //用户所有角色
            routeIndexQuery.in(SysRoleIndex::getRoleCode, roles);
            //角色首页状态0:未开启  1:开启
            routeIndexQuery.eq(SysRoleIndex::getStatus, CommonConstant.STATUS_1);
            //优先级正序排序
            routeIndexQuery.orderByAsc(SysRoleIndex::getPriority);
            List<SysRoleIndex> list = sysRoleIndexMapper.selectList(routeIndexQuery);
            if (null != list && list.size() > 0) {
                roleIndex = list.get(0);
            }
        }
    /**
     * èŽ·å–åŠ¨æ€é¦–é¡µè·¯ç”±é…ç½®
     *
     * @param username
     * @param version
     * @return
     */
    @Override
    public SysRoleIndex getDynamicIndexByUserRole(String username, String version) {
        List<String> roles = sysUserRoleMapper.getRoleByUserName(username);
        String componentUrl = RoleIndexConfigEnum.getIndexByRoles(roles);
        SysRoleIndex roleIndex = new SysRoleIndex(componentUrl);
        //只有 X-Version=v3 çš„æ—¶å€™ï¼Œæ‰è¯»å–sys_role_index表获取角色首页配置
        if (oConvertUtils.isNotEmpty(version) && roles != null && roles.size() > 0) {
            LambdaQueryWrapper<SysRoleIndex> routeIndexQuery = new LambdaQueryWrapper();
            //用户所有角色
            routeIndexQuery.in(SysRoleIndex::getRoleCode, roles);
            //角色首页状态0:未开启  1:开启
            routeIndexQuery.eq(SysRoleIndex::getStatus, CommonConstant.STATUS_1);
            //优先级正序排序
            routeIndexQuery.orderByAsc(SysRoleIndex::getPriority);
            List<SysRoleIndex> list = sysRoleIndexMapper.selectList(routeIndexQuery);
            if (null != list && list.size() > 0) {
                roleIndex = list.get(0);
            }
        }
        //如果componentUrl为空,则返回空
        if(oConvertUtils.isEmpty(roleIndex.getComponent())){
            return null;
        }
        return roleIndex;
    }
        //如果componentUrl为空,则返回空
        if (oConvertUtils.isEmpty(roleIndex.getComponent())) {
            return null;
        }
        return roleIndex;
    }
    /**
     * é€šè¿‡ç”¨æˆ·åèŽ·å–ç”¨æˆ·è§’è‰²é›†åˆ
     * @param username ç”¨æˆ·å
    /**
     * é€šè¿‡ç”¨æˆ·åèŽ·å–ç”¨æˆ·è§’è‰²é›†åˆ
     *
     * @param username ç”¨æˆ·å
     * @return è§’色集合
     */
    @Override
    public Set<String> getUserRolesSet(String username) {
        // æŸ¥è¯¢ç”¨æˆ·æ‹¥æœ‰çš„角色集合
        List<String> roles = sysUserRoleMapper.getRoleByUserName(username);
        log.info("-------通过数据库读取用户拥有的角色Rules------username: " + username + ",Roles size: " + (roles == null ? 0 : roles.size()));
        return new HashSet<>(roles);
    }
     */
    @Override
    public Set<String> getUserRolesSet(String username) {
        // æŸ¥è¯¢ç”¨æˆ·æ‹¥æœ‰çš„角色集合
        List<String> roles = sysUserRoleMapper.getRoleByUserName(username);
        log.info("-------通过数据库读取用户拥有的角色Rules------username: " + username + ",Roles size: " + (roles == null ? 0 : roles.size()));
        return new HashSet<>(roles);
    }
    /**
     * é€šè¿‡ç”¨æˆ·åèŽ·å–ç”¨æˆ·æƒé™é›†åˆ
     *
     * @param username ç”¨æˆ·å
     * @return æƒé™é›†åˆ
     */
    @Override
    public Set<String> getUserPermissionsSet(String username) {
        Set<String> permissionSet = new HashSet<>();
        List<SysPermission> permissionList = sysPermissionMapper.queryByUser(username);
        for (SysPermission po : permissionList) {
    /**
     * é€šè¿‡ç”¨æˆ·åèŽ·å–ç”¨æˆ·æƒé™é›†åˆ
     *
     * @param username ç”¨æˆ·å
     * @return æƒé™é›†åˆ
     */
    @Override
    public Set<String> getUserPermissionsSet(String username) {
        Set<String> permissionSet = new HashSet<>();
        List<SysPermission> permissionList = sysPermissionMapper.queryByUser(username);
        for (SysPermission po : permissionList) {
//            // TODO URL规则有问题?
//            if (oConvertUtils.isNotEmpty(po.getUrl())) {
//                permissionSet.add(po.getUrl());
//            }
            if (oConvertUtils.isNotEmpty(po.getPerms())) {
                permissionSet.add(po.getPerms());
            }
        }
        log.info("-------通过数据库读取用户拥有的权限Perms------username: "+ username+",Perms size: "+ (permissionSet==null?0:permissionSet.size()) );
        return permissionSet;
    }
            if (oConvertUtils.isNotEmpty(po.getPerms())) {
                permissionSet.add(po.getPerms());
            }
        }
        log.info("-------通过数据库读取用户拥有的权限Perms------username: " + username + ",Perms size: " + (permissionSet == null ? 0 : permissionSet.size()));
        return permissionSet;
    }
    /**
     * å‡çº§SpringBoot2.6.6,不允许循环依赖
     * @author:qinfeng
     * @update: 2022-04-07
     * @param username
     * @return
     */
    @Override
    public SysUserCacheInfo getCacheUser(String username) {
        SysUserCacheInfo info = new SysUserCacheInfo();
        info.setOneDepart(true);
        if(oConvertUtils.isEmpty(username)) {
            return null;
        }
    /**
     * å‡çº§SpringBoot2.6.6,不允许循环依赖
     *
     * @param username
     * @return
     * @author:qinfeng
     * @update: 2022-04-07
     */
    @Override
    public SysUserCacheInfo getCacheUser(String username) {
        SysUserCacheInfo info = new SysUserCacheInfo();
        info.setOneDepart(true);
        if (oConvertUtils.isEmpty(username)) {
            return null;
        }
        //查询用户信息
        SysUser sysUser = userMapper.getUserByName(username);
        if(sysUser!=null) {
            info.setSysUserCode(sysUser.getUsername());
            info.setSysUserName(sysUser.getRealname());
            info.setSysOrgCode(sysUser.getOrgCode());
        }
        //查询用户信息
        SysUser sysUser = userMapper.getUserByName(username);
        if (sysUser != null) {
            info.setSysUserCode(sysUser.getUsername());
            info.setSysUserName(sysUser.getRealname());
            info.setSysOrgCode(sysUser.getOrgCode());
        }
        //多部门支持in查询
        List<SysDepart> list = sysDepartMapper.queryUserDeparts(sysUser.getId());
        List<String> sysMultiOrgCode = new ArrayList<String>();
        if(list==null || list.size()==0) {
            //当前用户无部门
            //sysMultiOrgCode.add("0");
        }else if(list.size()==1) {
            sysMultiOrgCode.add(list.get(0).getOrgCode());
        }else {
            info.setOneDepart(false);
            for (SysDepart dpt : list) {
                sysMultiOrgCode.add(dpt.getOrgCode());
            }
        }
        info.setSysMultiOrgCode(sysMultiOrgCode);
        //多部门支持in查询
        List<SysDepart> list = sysDepartMapper.queryUserDeparts(sysUser.getId());
        List<String> sysMultiOrgCode = new ArrayList<String>();
        if (list == null || list.size() == 0) {
            //当前用户无部门
            //sysMultiOrgCode.add("0");
        } else if (list.size() == 1) {
            sysMultiOrgCode.add(list.get(0).getOrgCode());
        } else {
            info.setOneDepart(false);
            for (SysDepart dpt : list) {
                sysMultiOrgCode.add(dpt.getOrgCode());
            }
        }
        info.setSysMultiOrgCode(sysMultiOrgCode);
        return info;
    }
        return info;
    }
    /**
     * æ ¹æ®éƒ¨é—¨Id查询
     *
     * @param page
     * @param departId éƒ¨é—¨id
     * @param username ç”¨æˆ·è´¦æˆ·åç§°
     * @return
     */
    @Override
    public IPage<SysUser> getUserByDepId(Page<SysUser> page, String departId,String username) {
        return userMapper.getUserByDepId(page, departId,username);
    }
    @Override
    public IPage<SysUser> getUserByDepId(Page<SysUser> page, String departId, String username) {
        return userMapper.getUserByDepId(page, departId, username);
    }
    @Override
    public IPage<SysUser> getUserByDepIds(Page<SysUser> page, List<String> departIds, String username) {
        return userMapper.getUserByDepIds(page, departIds,username);
    }
    @Override
    public IPage<SysUser> getUserByDepIds(Page<SysUser> page, List<String> departIds, String username) {
        return userMapper.getUserByDepIds(page, departIds, username);
    }
    @Override
    public Map<String, String> getDepNamesByUserIds(List<String> userIds) {
        List<SysUserDepVo> list = this.baseMapper.getDepNamesByUserIds(userIds);
    @Override
    public Map<String, String> getDepNamesByUserIds(List<String> userIds) {
        List<SysUserDepVo> list = this.baseMapper.getDepNamesByUserIds(userIds);
        Map<String, String> res = new HashMap(5);
        list.forEach(item -> {
                    if (res.get(item.getUserId()) == null) {
                        res.put(item.getUserId(), item.getDepartName());
                    } else {
                        res.put(item.getUserId(), res.get(item.getUserId()) + "," + item.getDepartName());
                    }
                }
        );
        return res;
    }
        Map<String, String> res = new HashMap(5);
        list.forEach(item -> {
                    if (res.get(item.getUserId()) == null) {
                        res.put(item.getUserId(), item.getDepartName());
                    } else {
                        res.put(item.getUserId(), res.get(item.getUserId()) + "," + item.getDepartName());
                    }
                }
        );
        return res;
    }
    //update-begin-author:taoyan date:2022-9-13 for: VUEN-2245【漏洞】发现新漏洞待处理20220906 ----sql注入  æ–¹æ³•没有使用,注掉
    //update-begin-author:taoyan date:2022-9-13 for: VUEN-2245【漏洞】发现新漏洞待处理20220906 ----sql注入  æ–¹æ³•没有使用,注掉
/*    @Override
    public IPage<SysUser> getUserByDepartIdAndQueryWrapper(Page<SysUser> page, String departId, QueryWrapper<SysUser> queryWrapper) {
        LambdaQueryWrapper<SysUser> lambdaQueryWrapper = queryWrapper.lambda();
@@ -337,211 +345,214 @@
        return userMapper.selectPage(page, lambdaQueryWrapper);
    }*/
    //update-end-author:taoyan date:2022-9-13 for: VUEN-2245【漏洞】发现新漏洞待处理20220906 ----sql注入 æ–¹æ³•没有使用,注掉
    //update-end-author:taoyan date:2022-9-13 for: VUEN-2245【漏洞】发现新漏洞待处理20220906 ----sql注入 æ–¹æ³•没有使用,注掉
    @Override
    public IPage<SysUserSysDepartModel> queryUserByOrgCode(String orgCode, SysUser userParams, IPage page) {
        List<SysUserSysDepartModel> list = baseMapper.getUserByOrgCode(page, orgCode, userParams);
        Integer total = baseMapper.getUserByOrgCodeTotal(orgCode, userParams);
    @Override
    public IPage<SysUserSysDepartModel> queryUserByOrgCode(String orgCode, SysUser userParams, IPage page) {
        List<SysUserSysDepartModel> list = baseMapper.getUserByOrgCode(page, orgCode, userParams);
        Integer total = baseMapper.getUserByOrgCodeTotal(orgCode, userParams);
        IPage<SysUserSysDepartModel> result = new Page<>(page.getCurrent(), page.getSize(), total);
        result.setRecords(list);
        IPage<SysUserSysDepartModel> result = new Page<>(page.getCurrent(), page.getSize(), total);
        result.setRecords(list);
        return result;
    }
        return result;
    }
    /**
     * æ ¹æ®è§’色Id查询
     *
     * @param page
     * @param roleId è§’色id
     * @param roleId   è§’色id
     * @param username ç”¨æˆ·è´¦æˆ·åç§°
     * @return
     */
    @Override
    public IPage<SysUser> getUserByRoleId(Page<SysUser> page, String roleId, String username) {
        return userMapper.getUserByRoleId(page,roleId,username);
    }
    @Override
    public IPage<SysUser> getUserByRoleId(Page<SysUser> page, String roleId, String username) {
        return userMapper.getUserByRoleId(page, roleId, username);
    }
    /**
     * æ ¹æ®è®¾å¤‡è½¦é—´ç®¡ç†Id查询
     * @param page
     * @param baseFactoryId è®¾å¤‡è½¦é—´ç®¡ç†Id
     * @return
     */
    public IPage<SysUser> getUserByworkShopDepartId(Page<SysUser> page,String baseFactoryId,String username){
        return userMapper.getUserByWorkShopDepartId(page,baseFactoryId,username);
    }
    /**
     * æ ¹æ®è®¾å¤‡è½¦é—´ç®¡ç†Id查询
     *
     * @param page
     * @param baseFactoryId è®¾å¤‡è½¦é—´ç®¡ç†Id
     * @return
     */
    public IPage<SysUser> getUserByworkShopDepartId(Page<SysUser> page, String baseFactoryId, String username) {
        return userMapper.getUserByWorkShopDepartId(page, baseFactoryId, username);
    }
    @Override
    @CacheEvict(value= {CacheConstant.SYS_USERS_CACHE}, key="#username")
    public void updateUserDepart(String username,String orgCode) {
        baseMapper.updateUserDepart(username, orgCode);
    }
    @Override
    @CacheEvict(value = {CacheConstant.SYS_USERS_CACHE}, key = "#username")
    public void updateUserDepart(String username, String orgCode) {
        baseMapper.updateUserDepart(username, orgCode);
    }
    @Override
    public SysUser getUserByPhone(String phone) {
        return userMapper.getUserByPhone(phone);
    }
    @Override
    public SysUser getUserByPhone(String phone) {
        return userMapper.getUserByPhone(phone);
    }
    @Override
    public SysUser getUserByEmail(String email) {
        return userMapper.getUserByEmail(email);
    }
    @Override
    public SysUser getUserByEmail(String email) {
        return userMapper.getUserByEmail(email);
    }
    @Override
    @Transactional(rollbackFor = Exception.class)
    public void addUserWithDepart(SysUser user, String selectedParts) {
    @Override
    @Transactional(rollbackFor = Exception.class)
    public void addUserWithDepart(SysUser user, String selectedParts) {
//        this.save(user);  //保存角色的时候已经添加过一次了
        if(oConvertUtils.isNotEmpty(selectedParts)) {
            String[] arr = selectedParts.split(",");
            for (String deaprtId : arr) {
                SysUserDepart userDeaprt = new SysUserDepart(user.getId(), deaprtId);
                sysUserDepartMapper.insert(userDeaprt);
            }
        }
    }
        if (oConvertUtils.isNotEmpty(selectedParts)) {
            String[] arr = selectedParts.split(",");
            for (String deaprtId : arr) {
                SysUserDepart userDeaprt = new SysUserDepart(user.getId(), deaprtId);
                sysUserDepartMapper.insert(userDeaprt);
            }
        }
    }
    @Override
    @Transactional(rollbackFor = Exception.class)
    @CacheEvict(value={CacheConstant.SYS_USERS_CACHE}, allEntries=true)
    public void editUserWithDepart(SysUser user, String departs) {
    @Override
    @Transactional(rollbackFor = Exception.class)
    @CacheEvict(value = {CacheConstant.SYS_USERS_CACHE}, allEntries = true)
    public void editUserWithDepart(SysUser user, String departs) {
        //更新角色的时候已经更新了一次了,可以再跟新一次
        this.updateById(user);
        String[] arr = {};
        if(oConvertUtils.isNotEmpty(departs)){
            arr = departs.split(",");
        }
        //查询已关联部门
        List<SysUserDepart> userDepartList = sysUserDepartMapper.selectList(new QueryWrapper<SysUserDepart>().lambda().eq(SysUserDepart::getUserId, user.getId()));
        if(userDepartList != null && userDepartList.size()>0){
            for(SysUserDepart depart : userDepartList ){
                //修改已关联部门删除部门用户角色关系
                if(!Arrays.asList(arr).contains(depart.getDepId())){
                    List<SysDepartRole> sysDepartRoleList = sysDepartRoleMapper.selectList(
                            new QueryWrapper<SysDepartRole>().lambda().eq(SysDepartRole::getDepartId,depart.getDepId()));
                    List<String> roleIds = sysDepartRoleList.stream().map(SysDepartRole::getId).collect(Collectors.toList());
                    if(roleIds != null && roleIds.size()>0){
                        departRoleUserMapper.delete(new QueryWrapper<SysDepartRoleUser>().lambda().eq(SysDepartRoleUser::getUserId, user.getId())
                                .in(SysDepartRoleUser::getDroleId,roleIds));
                    }
                }
            }
        }
        //先删后加
        sysUserDepartMapper.delete(new QueryWrapper<SysUserDepart>().lambda().eq(SysUserDepart::getUserId, user.getId()));
        if(oConvertUtils.isNotEmpty(departs)) {
            for (String departId : arr) {
                SysUserDepart userDepart = new SysUserDepart(user.getId(), departId);
                sysUserDepartMapper.insert(userDepart);
            }
        }
    }
        this.updateById(user);
        String[] arr = {};
        if (oConvertUtils.isNotEmpty(departs)) {
            arr = departs.split(",");
        }
        //查询已关联部门
        List<SysUserDepart> userDepartList = sysUserDepartMapper.selectList(new QueryWrapper<SysUserDepart>().lambda().eq(SysUserDepart::getUserId, user.getId()));
        if (userDepartList != null && userDepartList.size() > 0) {
            for (SysUserDepart depart : userDepartList) {
                //修改已关联部门删除部门用户角色关系
                if (!Arrays.asList(arr).contains(depart.getDepId())) {
                    List<SysDepartRole> sysDepartRoleList = sysDepartRoleMapper.selectList(
                            new QueryWrapper<SysDepartRole>().lambda().eq(SysDepartRole::getDepartId, depart.getDepId()));
                    List<String> roleIds = sysDepartRoleList.stream().map(SysDepartRole::getId).collect(Collectors.toList());
                    if (roleIds != null && roleIds.size() > 0) {
                        departRoleUserMapper.delete(new QueryWrapper<SysDepartRoleUser>().lambda().eq(SysDepartRoleUser::getUserId, user.getId())
                                .in(SysDepartRoleUser::getDroleId, roleIds));
                    }
                }
            }
        }
        //先删后加
        sysUserDepartMapper.delete(new QueryWrapper<SysUserDepart>().lambda().eq(SysUserDepart::getUserId, user.getId()));
        if (oConvertUtils.isNotEmpty(departs)) {
            for (String departId : arr) {
                SysUserDepart userDepart = new SysUserDepart(user.getId(), departId);
                sysUserDepartMapper.insert(userDepart);
            }
        }
    }
    /**
       * æ ¡éªŒç”¨æˆ·æ˜¯å¦æœ‰æ•ˆ
     * @param sysUser
     * @return
     */
    @Override
    public Result<?> checkUserIsEffective(SysUser sysUser) {
        Result<?> result = new Result<Object>();
        //情况1:根据用户信息查询,该用户不存在
        if (sysUser == null) {
            result.error500("该用户不存在,请注册");
            baseCommonService.addLog("用户登录失败,用户不存在!", CommonConstant.LOG_TYPE_1, null);
            return result;
        }
        //情况2:根据用户信息查询,该用户已注销
        //update-begin---author:王帅   Date:20200601  for:if条件永远为falsebug------------
        if (CommonConstant.DEL_FLAG_1.equals(sysUser.getDelFlag())) {
        //update-end---author:王帅   Date:20200601  for:if条件永远为falsebug------------
            baseCommonService.addLog("用户登录失败,用户名:" + sysUser.getUsername() + "已注销!", CommonConstant.LOG_TYPE_1, null);
            result.error500("该用户已注销");
            return result;
        }
        //情况3:根据用户信息查询,该用户已冻结
        if (CommonConstant.USER_FREEZE.equals(sysUser.getStatus())) {
            baseCommonService.addLog("用户登录失败,用户名:" + sysUser.getUsername() + "已冻结!", CommonConstant.LOG_TYPE_1, null);
            result.error500("该用户已冻结");
            return result;
        }
        //情况4:根据用户信息查询,该用户密码系首次使用,需修改密码
        List<DictModel> dictList = sysDictService.queryEnableDictItemsByCode(CommonConstant.DICT_USER_FIRST_LOGIN);
        if (dictList != null && !dictList.isEmpty()) {
            if (CommonConstant.DEL_FLAG_1.equals(Integer.valueOf(dictList.get(0).getValue())) && CommonConstant.DEL_FLAG_1.equals(sysUser.getPasswordFlag())) {
                baseCommonService.addLog("用户登录失败,用户名:" + sysUser.getUsername() + "系首次登录系统,请重置密码!", CommonConstant.LOG_TYPE_1, null);
                result.setCode(5001);
                result.setMessage("用户密码系默认密码,需重置密码后重新登录密码!");
                result.setSuccess(false);
                return result;
            }
        }
        //情况5:根据用户信息查询,该用户密码是否已过更改周期
        Date passwordTime = sysUser.getPasswordTime();
        //Integer passwordExpirationPeriod = CommonConstant.PASSWORD_EXPIRATION_PERIOD;
        List<DictModel> dictModelList = sysDictService.queryEnableDictItemsByCode(CommonConstant.DICT_PASSWORD_EXPIRATION);
        if (dictModelList != null && !dictModelList.isEmpty()) {
            Integer passwordExpirationPeriod = Integer.valueOf(dictModelList.get(0).getValue());
            Date dayAfter = DateUtils.getDayAfter(passwordTime, passwordExpirationPeriod);
            if (new Date().after(dayAfter)) {
                baseCommonService.addLog("用户登录失败,用户名:" + sysUser.getUsername() + "密码已过有效期,请重置密码!", CommonConstant.LOG_TYPE_1, null);
                result.setCode(5002);
                result.setMessage("用户密码已过有效期,请重置密码!");
                result.setSuccess(false);
                return result;
            }
        }
        return result;
    }
    /**
     * æ ¡éªŒç”¨æˆ·æ˜¯å¦æœ‰æ•ˆ
     *
     * @param sysUser
     * @return
     */
    @Override
    public Result<?> checkUserIsEffective(SysUser sysUser) {
        Result<?> result = new Result<Object>();
        //情况1:根据用户信息查询,该用户不存在
        if (sysUser == null) {
            result.error500("该用户不存在,请注册");
            baseCommonService.addLog("用户登录失败,用户不存在!", CommonConstant.LOG_TYPE_1, null);
            return result;
        }
        //情况2:根据用户信息查询,该用户已注销
        //update-begin---author:王帅   Date:20200601  for:if条件永远为falsebug------------
        if (CommonConstant.DEL_FLAG_1.equals(sysUser.getDelFlag())) {
            //update-end---author:王帅   Date:20200601  for:if条件永远为falsebug------------
            baseCommonService.addLog("用户登录失败,用户名:" + sysUser.getUsername() + "已注销!", CommonConstant.LOG_TYPE_1, null);
            result.error500("该用户已注销");
            return result;
        }
        //情况3:根据用户信息查询,该用户已冻结
        if (CommonConstant.USER_FREEZE.equals(sysUser.getStatus())) {
            baseCommonService.addLog("用户登录失败,用户名:" + sysUser.getUsername() + "已冻结!", CommonConstant.LOG_TYPE_1, null);
            result.error500("该用户已冻结");
            return result;
        }
        //情况4:根据用户信息查询,该用户密码系首次使用,需修改密码
        List<DictModel> dictList = sysDictService.queryEnableDictItemsByCode(CommonConstant.DICT_USER_FIRST_LOGIN);
        if (dictList != null && !dictList.isEmpty()) {
            if (CommonConstant.DEL_FLAG_1.equals(Integer.valueOf(dictList.get(0).getValue())) && CommonConstant.DEL_FLAG_1.equals(sysUser.getPasswordFlag())) {
                baseCommonService.addLog("用户登录失败,用户名:" + sysUser.getUsername() + "系首次登录系统,请重置密码!", CommonConstant.LOG_TYPE_1, null);
                result.setCode(5001);
                result.setMessage("用户密码系默认密码,需重置密码后重新登录密码!");
                result.setSuccess(false);
                return result;
            }
        }
        //情况5:根据用户信息查询,该用户密码是否已过更改周期
        Date passwordTime = sysUser.getPasswordTime();
        //Integer passwordExpirationPeriod = CommonConstant.PASSWORD_EXPIRATION_PERIOD;
        List<DictModel> dictModelList = sysDictService.queryEnableDictItemsByCode(CommonConstant.DICT_PASSWORD_EXPIRATION);
        if (dictModelList != null && !dictModelList.isEmpty()) {
            Integer passwordExpirationPeriod = Integer.valueOf(dictModelList.get(0).getValue());
            Date dayAfter = DateUtils.getDayAfter(passwordTime, passwordExpirationPeriod);
            if (new Date().after(dayAfter)) {
                baseCommonService.addLog("用户登录失败,用户名:" + sysUser.getUsername() + "密码已过有效期,请重置密码!", CommonConstant.LOG_TYPE_1, null);
                result.setCode(5002);
                result.setMessage("用户密码已过有效期,请重置密码!");
                result.setSuccess(false);
                return result;
            }
        }
        return result;
    }
    @Override
    public List<SysUser> queryLogicDeleted() {
        return this.queryLogicDeleted(null);
    }
    @Override
    public List<SysUser> queryLogicDeleted() {
        return this.queryLogicDeleted(null);
    }
    @Override
    public List<SysUser> queryLogicDeleted(LambdaQueryWrapper<SysUser> wrapper) {
        if (wrapper == null) {
            wrapper = new LambdaQueryWrapper<>();
        }
        wrapper.eq(SysUser::getDelFlag, CommonConstant.DEL_FLAG_1);
        return userMapper.selectLogicDeleted(wrapper);
    }
    @Override
    public List<SysUser> queryLogicDeleted(LambdaQueryWrapper<SysUser> wrapper) {
        if (wrapper == null) {
            wrapper = new LambdaQueryWrapper<>();
        }
        wrapper.eq(SysUser::getDelFlag, CommonConstant.DEL_FLAG_1);
        return userMapper.selectLogicDeleted(wrapper);
    }
    @Override
    @CacheEvict(value={CacheConstant.SYS_USERS_CACHE}, allEntries=true)
    public boolean revertLogicDeleted(List<String> userIds, SysUser updateEntity) {
        return userMapper.revertLogicDeleted(userIds, updateEntity) > 0;
    }
    @Override
    @CacheEvict(value = {CacheConstant.SYS_USERS_CACHE}, allEntries = true)
    public boolean revertLogicDeleted(List<String> userIds, SysUser updateEntity) {
        return userMapper.revertLogicDeleted(userIds, updateEntity) > 0;
    }
    @Override
    @Transactional(rollbackFor = Exception.class)
    public boolean removeLogicDeleted(List<String> userIds) {
        // 1. åˆ é™¤ç”¨æˆ·
        int line = userMapper.deleteLogicDeleted(userIds);
        // 2. åˆ é™¤ç”¨æˆ·éƒ¨é—¨å…³ç³»
        line += sysUserDepartMapper.delete(new LambdaQueryWrapper<SysUserDepart>().in(SysUserDepart::getUserId, userIds));
        // 3. åˆ é™¤ç”¨æˆ·äº§çº¿å…³ç³»
        line += mdcUserProductionMapper.delete(new LambdaQueryWrapper<MdcUserProduction>().in(MdcUserProduction::getUserId, userIds));
        //3. åˆ é™¤ç”¨æˆ·è§’色关系
        line += sysUserRoleMapper.delete(new LambdaQueryWrapper<SysUserRole>().in(SysUserRole::getUserId, userIds));
        //4.同步删除第三方App的用户
        try {
            dingtalkService.removeThirdAppUser(userIds);
            wechatEnterpriseService.removeThirdAppUser(userIds);
        } catch (Exception e) {
            log.error("同步删除第三方App的用户失败:", e);
        }
        //5. åˆ é™¤ç¬¬ä¸‰æ–¹ç”¨æˆ·è¡¨ï¼ˆå› ä¸ºç¬¬4步需要用到第三方用户表,所以在他之后删)
        line += sysThirdAccountMapper.delete(new LambdaQueryWrapper<SysThirdAccount>().in(SysThirdAccount::getSysUserId, userIds));
    @Override
    @Transactional(rollbackFor = Exception.class)
    public boolean removeLogicDeleted(List<String> userIds) {
        // 1. åˆ é™¤ç”¨æˆ·
        int line = userMapper.deleteLogicDeleted(userIds);
        // 2. åˆ é™¤ç”¨æˆ·éƒ¨é—¨å…³ç³»
        line += sysUserDepartMapper.delete(new LambdaQueryWrapper<SysUserDepart>().in(SysUserDepart::getUserId, userIds));
        // 3. åˆ é™¤ç”¨æˆ·äº§çº¿å…³ç³»
        line += mdcUserProductionMapper.delete(new LambdaQueryWrapper<MdcUserProduction>().in(MdcUserProduction::getUserId, userIds));
        //3. åˆ é™¤ç”¨æˆ·è§’色关系
        line += sysUserRoleMapper.delete(new LambdaQueryWrapper<SysUserRole>().in(SysUserRole::getUserId, userIds));
        //4.同步删除第三方App的用户
        try {
            dingtalkService.removeThirdAppUser(userIds);
            wechatEnterpriseService.removeThirdAppUser(userIds);
        } catch (Exception e) {
            log.error("同步删除第三方App的用户失败:", e);
        }
        //5. åˆ é™¤ç¬¬ä¸‰æ–¹ç”¨æˆ·è¡¨ï¼ˆå› ä¸ºç¬¬4步需要用到第三方用户表,所以在他之后删)
        line += sysThirdAccountMapper.delete(new LambdaQueryWrapper<SysThirdAccount>().in(SysThirdAccount::getSysUserId, userIds));
        return line != 0;
    }
        return line != 0;
    }
    @Override
    @Transactional(rollbackFor = Exception.class)
@@ -551,280 +562,264 @@
        return true;
    }
    @Override
    public void saveThirdUser(SysUser sysUser) {
        //保存用户
        String userid = UUIDGenerator.generate();
        sysUser.setId(userid);
        baseMapper.insert(sysUser);
        //获取第三方角色
        SysRole sysRole = sysRoleMapper.selectOne(new LambdaQueryWrapper<SysRole>().eq(SysRole::getRoleCode, "third_role"));
        //保存用户角色
        SysUserRole userRole = new SysUserRole();
        userRole.setRoleId(sysRole.getId());
        userRole.setUserId(userid);
        sysUserRoleMapper.insert(userRole);
    }
    @Override
    public void saveThirdUser(SysUser sysUser) {
        //保存用户
        String userid = UUIDGenerator.generate();
        sysUser.setId(userid);
        baseMapper.insert(sysUser);
        //获取第三方角色
        SysRole sysRole = sysRoleMapper.selectOne(new LambdaQueryWrapper<SysRole>().eq(SysRole::getRoleCode, "third_role"));
        //保存用户角色
        SysUserRole userRole = new SysUserRole();
        userRole.setRoleId(sysRole.getId());
        userRole.setUserId(userid);
        sysUserRoleMapper.insert(userRole);
    }
    @Override
    public List<SysUser> queryByDepIds(List<String> departIds, String username) {
        return userMapper.queryByDepIds(departIds,username);
    }
    @Override
    public List<SysUser> queryByDepIds(List<String> departIds, String username) {
        return userMapper.queryByDepIds(departIds, username);
    }
    @Override
    @Transactional(rollbackFor = Exception.class)
    public void saveUser(SysUser user, String selectedRoles, String selectedDeparts, String selectedProductions, String selectedRepairDeparts) {
        //step.1 ä¿å­˜ç”¨æˆ·
        this.save(user);
        //step.2 ä¿å­˜è§’色
        if(oConvertUtils.isNotEmpty(selectedRoles)) {
            String[] arr = selectedRoles.split(",");
            for (String roleId : arr) {
                SysUserRole userRole = new SysUserRole(user.getId(), roleId);
                sysUserRoleMapper.insert(userRole);
            }
        }
        //step.3 ä¿å­˜æ‰€å±žéƒ¨é—¨
        if(oConvertUtils.isNotEmpty(selectedDeparts)) {
            String[] arr = selectedDeparts.split(",");
            for (String deaprtId : arr) {
                SysUserDepart userDeaprt = new SysUserDepart(user.getId(), deaprtId);
                sysUserDepartMapper.insert(userDeaprt);
            }
        }
        //step.4 ä¿å­˜æ‰€å±žäº§çº¿
        if (oConvertUtils.isNotEmpty(selectedProductions)) {
            String[] arr = selectedProductions.split(",");
            for (String productionId : arr) {
                MdcUserProduction mdcUserProduction = new MdcUserProduction(user.getId(), productionId);
                mdcUserProductionMapper.insert(mdcUserProduction);
            }
        }
        //step.5 ä¿å­˜æ‰€å±žç»´ä¿®éƒ¨é—¨
        if (oConvertUtils.isNotEmpty(selectedRepairDeparts)) {
            String[] arr = selectedRepairDeparts.split(",");
            for (String repairDepartId : arr) {
                EamBaseRepairDepartUser eamBaseRepairDepartUser = new EamBaseRepairDepartUser(user.getId(), repairDepartId);
                eamBaseRepairDepartUserMapper.insert(eamBaseRepairDepartUser);
            }
        }
    }
    @Override
    @Transactional(rollbackFor = Exception.class)
    public void saveUser(SysUser user, String selectedRoles, String selectedDeparts, String selectedProductions, String selectedRepairDeparts) {
        //step.1 ä¿å­˜ç”¨æˆ·
        this.save(user);
        //step.2 ä¿å­˜è§’色
        if (oConvertUtils.isNotEmpty(selectedRoles)) {
            String[] arr = selectedRoles.split(",");
            for (String roleId : arr) {
                SysUserRole userRole = new SysUserRole(user.getId(), roleId);
                sysUserRoleMapper.insert(userRole);
            }
        }
        //step.3 ä¿å­˜æ‰€å±žéƒ¨é—¨
        if (oConvertUtils.isNotEmpty(selectedDeparts)) {
            String[] arr = selectedDeparts.split(",");
            for (String deaprtId : arr) {
                SysUserDepart userDeaprt = new SysUserDepart(user.getId(), deaprtId);
                sysUserDepartMapper.insert(userDeaprt);
            }
        }
        //step.4 ä¿å­˜æ‰€å±žäº§çº¿
        if (oConvertUtils.isNotEmpty(selectedProductions)) {
            String[] arr = selectedProductions.split(",");
            for (String productionId : arr) {
                MdcUserProduction mdcUserProduction = new MdcUserProduction(user.getId(), productionId);
                mdcUserProductionMapper.insert(mdcUserProduction);
            }
        }
        //step.5 ä¿å­˜æ‰€å±žç»´ä¿®éƒ¨é—¨
        if (oConvertUtils.isNotEmpty(selectedRepairDeparts)) {
            String[] arr = selectedRepairDeparts.split(",");
            for (String repairDepartId : arr) {
                EamBaseRepairDepartUser eamBaseRepairDepartUser = new EamBaseRepairDepartUser(user.getId(), repairDepartId);
                eamBaseRepairDepartUserMapper.insert(eamBaseRepairDepartUser);
            }
        }
    }
    @Override
    @Transactional(rollbackFor = Exception.class)
    @CacheEvict(value={CacheConstant.SYS_USERS_CACHE}, allEntries=true)
    public void editUser(SysUser user, String roles, String departs, String productions, String repairDeparts) {
        //step.1 ä¿®æ”¹ç”¨æˆ·åŸºç¡€ä¿¡æ¯
        this.updateById(user);
        //step.2 ä¿®æ”¹è§’色
        //处理用户角色 å…ˆåˆ åŽåŠ 
        sysUserRoleMapper.delete(new QueryWrapper<SysUserRole>().lambda().eq(SysUserRole::getUserId, user.getId()));
        if(oConvertUtils.isNotEmpty(roles)) {
            String[] arr = roles.split(",");
            for (String roleId : arr) {
                SysUserRole userRole = new SysUserRole(user.getId(), roleId);
                sysUserRoleMapper.insert(userRole);
            }
        }
    @Override
    @Transactional(rollbackFor = Exception.class)
    @CacheEvict(value = {CacheConstant.SYS_USERS_CACHE}, allEntries = true)
    public void editUser(SysUser user, String roles, String departs, String productions, String repairDeparts) {
        //step.1 ä¿®æ”¹ç”¨æˆ·åŸºç¡€ä¿¡æ¯
        this.updateById(user);
        //step.2 ä¿®æ”¹è§’色
        //处理用户角色 å…ˆåˆ åŽåŠ 
        sysUserRoleMapper.delete(new QueryWrapper<SysUserRole>().lambda().eq(SysUserRole::getUserId, user.getId()));
        if (oConvertUtils.isNotEmpty(roles)) {
            String[] arr = roles.split(",");
            for (String roleId : arr) {
                SysUserRole userRole = new SysUserRole(user.getId(), roleId);
                sysUserRoleMapper.insert(userRole);
            }
        }
        //step.3 ä¿®æ”¹éƒ¨é—¨
        String[] arr = {};
        if(oConvertUtils.isNotEmpty(departs)){
            arr = departs.split(",");
        }
        //查询已关联部门
        List<SysUserDepart> userDepartList = sysUserDepartMapper.selectList(new QueryWrapper<SysUserDepart>().lambda().eq(SysUserDepart::getUserId, user.getId()));
        if(userDepartList != null && userDepartList.size()>0){
            for(SysUserDepart depart : userDepartList ){
                //修改已关联部门删除部门用户角色关系
                if(!Arrays.asList(arr).contains(depart.getDepId())){
                    List<SysDepartRole> sysDepartRoleList = sysDepartRoleMapper.selectList(
                            new QueryWrapper<SysDepartRole>().lambda().eq(SysDepartRole::getDepartId,depart.getDepId()));
                    List<String> roleIds = sysDepartRoleList.stream().map(SysDepartRole::getId).collect(Collectors.toList());
                    if(roleIds != null && roleIds.size()>0){
                        departRoleUserMapper.delete(new QueryWrapper<SysDepartRoleUser>().lambda().eq(SysDepartRoleUser::getUserId, user.getId())
                                .in(SysDepartRoleUser::getDroleId,roleIds));
                    }
                }
            }
        }
        //先删后加
        sysUserDepartMapper.delete(new QueryWrapper<SysUserDepart>().lambda().eq(SysUserDepart::getUserId, user.getId()));
        if(oConvertUtils.isNotEmpty(departs)) {
            for (String departId : arr) {
                SysUserDepart userDepart = new SysUserDepart(user.getId(), departId);
                sysUserDepartMapper.insert(userDepart);
            }
        }
        //step.4 ä¿®æ”¹äº§çº¿
        String[] array = {};
        if(oConvertUtils.isNotEmpty(productions)){
            array = productions.split(",");
        }
        //先删后加
        mdcUserProductionMapper.delete(new QueryWrapper<MdcUserProduction>().lambda().eq(MdcUserProduction::getUserId, user.getId()));
        if (oConvertUtils.isNotEmpty(productions)) {
            for (String productionId : array) {
                MdcUserProduction mdcUserProduction = new MdcUserProduction(user.getId(), productionId);
                mdcUserProductionMapper.insert(mdcUserProduction);
            }
        }
        //step.5 ä¿®æ”¹ç»´ä¿®éƒ¨é—¨
        String[] arrayRepDep = {};
        if(oConvertUtils.isNotEmpty(repairDeparts)){
            arrayRepDep = repairDeparts.split(",");
        }
        //先删后加
        eamBaseRepairDepartUserMapper.delete(new QueryWrapper<EamBaseRepairDepartUser>().lambda().eq(EamBaseRepairDepartUser::getUserId, user.getId()));
        if (oConvertUtils.isNotEmpty(repairDeparts)) {
            for (String repairDepartId : arrayRepDep) {
                EamBaseRepairDepartUser eamBaseRepairDepartUser = new EamBaseRepairDepartUser(user.getId(), repairDepartId);
                eamBaseRepairDepartUserMapper.insert(eamBaseRepairDepartUser);
            }
        }
        //step.5 ä¿®æ”¹æ‰‹æœºå·å’Œé‚®ç®±
        // æ›´æ–°æ‰‹æœºå·ã€é‚®ç®±ç©ºå­—符串为 null
        userMapper.updateNullByEmptyString("email");
        userMapper.updateNullByEmptyString("phone");
        //step.3 ä¿®æ”¹éƒ¨é—¨
        String[] arr = {};
        if (oConvertUtils.isNotEmpty(departs)) {
            arr = departs.split(",");
        }
        //查询已关联部门
        List<SysUserDepart> userDepartList = sysUserDepartMapper.selectList(new QueryWrapper<SysUserDepart>().lambda().eq(SysUserDepart::getUserId, user.getId()));
        if (userDepartList != null && userDepartList.size() > 0) {
            for (SysUserDepart depart : userDepartList) {
                //修改已关联部门删除部门用户角色关系
                if (!Arrays.asList(arr).contains(depart.getDepId())) {
                    List<SysDepartRole> sysDepartRoleList = sysDepartRoleMapper.selectList(
                            new QueryWrapper<SysDepartRole>().lambda().eq(SysDepartRole::getDepartId, depart.getDepId()));
                    List<String> roleIds = sysDepartRoleList.stream().map(SysDepartRole::getId).collect(Collectors.toList());
                    if (roleIds != null && roleIds.size() > 0) {
                        departRoleUserMapper.delete(new QueryWrapper<SysDepartRoleUser>().lambda().eq(SysDepartRoleUser::getUserId, user.getId())
                                .in(SysDepartRoleUser::getDroleId, roleIds));
                    }
                }
            }
        }
        //先删后加
        sysUserDepartMapper.delete(new QueryWrapper<SysUserDepart>().lambda().eq(SysUserDepart::getUserId, user.getId()));
        if (oConvertUtils.isNotEmpty(departs)) {
            for (String departId : arr) {
                SysUserDepart userDepart = new SysUserDepart(user.getId(), departId);
                sysUserDepartMapper.insert(userDepart);
            }
        }
        //step.4 ä¿®æ”¹äº§çº¿
        String[] array = {};
        if (oConvertUtils.isNotEmpty(productions)) {
            array = productions.split(",");
        }
        //先删后加
        mdcUserProductionMapper.delete(new QueryWrapper<MdcUserProduction>().lambda().eq(MdcUserProduction::getUserId, user.getId()));
        if (oConvertUtils.isNotEmpty(productions)) {
            for (String productionId : array) {
                MdcUserProduction mdcUserProduction = new MdcUserProduction(user.getId(), productionId);
                mdcUserProductionMapper.insert(mdcUserProduction);
            }
        }
        //step.5 ä¿®æ”¹ç»´ä¿®éƒ¨é—¨
        String[] arrayRepDep = {};
        if (oConvertUtils.isNotEmpty(repairDeparts)) {
            arrayRepDep = repairDeparts.split(",");
        }
        //先删后加
        eamBaseRepairDepartUserMapper.delete(new QueryWrapper<EamBaseRepairDepartUser>().lambda().eq(EamBaseRepairDepartUser::getUserId, user.getId()));
        if (oConvertUtils.isNotEmpty(repairDeparts)) {
            for (String repairDepartId : arrayRepDep) {
                EamBaseRepairDepartUser eamBaseRepairDepartUser = new EamBaseRepairDepartUser(user.getId(), repairDepartId);
                eamBaseRepairDepartUserMapper.insert(eamBaseRepairDepartUser);
            }
        }
        //step.5 ä¿®æ”¹æ‰‹æœºå·å’Œé‚®ç®±
        // æ›´æ–°æ‰‹æœºå·ã€é‚®ç®±ç©ºå­—符串为 null
        userMapper.updateNullByEmptyString("email");
        userMapper.updateNullByEmptyString("phone");
    }
    }
    @Override
    public List<String> userIdToUsername(Collection<String> userIdList) {
        LambdaQueryWrapper<SysUser> queryWrapper = new LambdaQueryWrapper<>();
        queryWrapper.in(SysUser::getId, userIdList);
        List<SysUser> userList = super.list(queryWrapper);
        return userList.stream().map(SysUser::getUsername).collect(Collectors.toList());
    }
    @Override
    public List<String> userIdToUsername(Collection<String> userIdList) {
        LambdaQueryWrapper<SysUser> queryWrapper = new LambdaQueryWrapper<>();
        queryWrapper.in(SysUser::getId, userIdList);
        List<SysUser> userList = super.list(queryWrapper);
        return userList.stream().map(SysUser::getUsername).collect(Collectors.toList());
    }
    @Override
    @Cacheable(cacheNames=CacheConstant.SYS_USERS_CACHE, key="#username")
    @SensitiveEncode
    public LoginUser getEncodeUserInfo(String username){
        if(oConvertUtils.isEmpty(username)) {
            return null;
        }
        LoginUser loginUser = new LoginUser();
        SysUser sysUser = userMapper.getUserByName(username);
        if(sysUser==null) {
            return null;
        }
        BeanUtils.copyProperties(sysUser, loginUser);
        return loginUser;
    }
    @Override
    @Cacheable(cacheNames = CacheConstant.SYS_USERS_CACHE, key = "#username")
    @SensitiveEncode
    public LoginUser getEncodeUserInfo(String username) {
        if (oConvertUtils.isEmpty(username)) {
            return null;
        }
        LoginUser loginUser = new LoginUser();
        SysUser sysUser = userMapper.getUserByName(username);
        if (sysUser == null) {
            return null;
        }
        BeanUtils.copyProperties(sysUser, loginUser);
        return loginUser;
    }
    @Override
    public Map<String, String> getProNamesByUserIds(List<String> userIds) {
        List<MdcUserProVo> list = this.baseMapper.getProNamesByUserIds(userIds);
    @Override
    public Map<String, String> getProNamesByUserIds(List<String> userIds) {
        List<MdcUserProVo> list = this.baseMapper.getProNamesByUserIds(userIds);
        Map<String, String> res = new HashMap<>(5);
        list.forEach(item -> {
            if (res.get(item.getUserId()) == null) {
                res.put(item.getUserId(), item.getProductionName());
            } else {
                res.put(item.getUserId(), res.get(item.getUserId()) + "," + item.getProductionName());
            }
        });
        return res;
    }
        Map<String, String> res = new HashMap<>(5);
        list.forEach(item -> {
            if (res.get(item.getUserId()) == null) {
                res.put(item.getUserId(), item.getProductionName());
            } else {
                res.put(item.getUserId(), res.get(item.getUserId()) + "," + item.getProductionName());
            }
        });
        return res;
    }
    @Override
    public Map<String, String> getRepDepNamesByUserIds(List<String> userIds) {
        List<EamUserRepDepVo> list = this.baseMapper.getRepDepNamesByUserIds(userIds);
    @Override
    public Map<String, String> getRepDepNamesByUserIds(List<String> userIds) {
        List<EamUserRepDepVo> list = this.baseMapper.getRepDepNamesByUserIds(userIds);
        Map<String, String> res = new HashMap<>(5);
        list.forEach(item -> {
            if (res.get(item.getUserId()) == null) {
                res.put(item.getUserId(), item.getRepairDepartName());
            } else {
                res.put(item.getUserId(), res.get(item.getUserId()) + "," + item.getRepairDepartName());
            }
        });
        return res;
    }
        Map<String, String> res = new HashMap<>(5);
        list.forEach(item -> {
            if (res.get(item.getUserId()) == null) {
                res.put(item.getUserId(), item.getRepairDepartName());
            } else {
                res.put(item.getUserId(), res.get(item.getUserId()) + "," + item.getRepairDepartName());
            }
        });
        return res;
    }
    // æ ¹æ®è§’色Id查询该角色下的所有用户信息
    @Override
    public List<SysUser> getAllUsersByRoleId(String roleId) {
        return userMapper.getAllUsersByRoleId(roleId);
    }
    // æ ¹æ®è§’色Id查询该角色下的所有用户信息
    @Override
    public List<SysUser> getAllUsersByRoleId(String roleId) {
        return userMapper.getAllUsersByRoleId(roleId);
    }
    /**
     * æ ¹æ®è§’色编码查询用户id集合
     */
    @Override
    public List<String> getUserByRoleCode(String roleCode) {
        return this.baseMapper.getUserByRoleCode(roleCode);
    }
    /**
     * æ ¹æ®è§’色编码查询用户id集合
     */
    @Override
    public List<String> getUserByRoleCode(String roleCode) {
        return this.baseMapper.getUserByRoleCode(roleCode);
    }
    /**
     * æ ¹æ®è§’色编码列表查询用户id集合
     */
    @Override
    public List<SysUser> getUserByRoleCodeList(List<String> roleCodeList) {
        return this.baseMapper.getUserByRoleCodeList(roleCodeList);
    }
    /**
     * æ ¹æ®è§’色编码列表查询用户id集合
     */
    @Override
    public List<SysUser> getUserByRoleCodeList(List<String> roleCodeList) {
        return this.baseMapper.getUserByRoleCodeList(roleCodeList);
    }
    /**
     * æ ¹æ®è§’色编码和设备编号查询用户
     */
    @Override
    public List<SysUser> getEquipmentAdmin(String roleCode, String equipmentId) {
        return this.baseMapper.getEquipmentAdmin(roleCode, equipmentId);
    }
    /**
     * æ ¹æ®è§’色编码和设备编号查询用户
     */
    @Override
    public List<SysUser> getEquipmentAdmin(String roleCode, String equipmentId) {
        return this.baseMapper.getEquipmentAdmin(roleCode, equipmentId);
    }
    @Override
    public List<UserSelector> selectOperatorList(String equipmentCode, String productionId, String positionCode) {
        LambdaQueryWrapper<SysUser> queryWrapper = new LambdaQueryWrapper<>();
        queryWrapper.eq(SysUser::getPost, positionCode);
        if(StringUtils.isNotBlank(equipmentCode)) {
            queryWrapper.and(q -> q.isNull(SysUser::getEquipmentIds).or().eq(SysUser::getEquipmentIds, "").or().like(SysUser::getEquipmentIds, equipmentCode));
        }
        if(StringUtils.isNotBlank(productionId)) {
            queryWrapper.exists("select 1 from mdc_user_production t where t.user_id=sys_user.id and t.pro_id={0}", productionId);
        }
        queryWrapper.eq(SysUser::getDelFlag, CommonConstant.DEL_FLAG_0);
        queryWrapper.eq(SysUser::getStatus, CommonConstant.DEL_FLAG_1);
        queryWrapper.orderByDesc(SysUser::getId);
        List<SysUser> sysUsers = userMapper.selectList(queryWrapper);
        List<UserSelector> collect = sysUsers.stream().map(user -> new UserSelector(user.getId(), user.getUsername(), user.getRealname())).collect(Collectors.toList());
        return collect;
    }
    @Override
    public List<UserSelector> selectOperatorList(String equipmentCode, String factoryOrgCode, String positionCode) {
        LambdaQueryWrapper<SysUser> queryWrapper = new LambdaQueryWrapper<>();
        queryWrapper.eq(SysUser::getPost, positionCode);
        if (StringUtils.isNotBlank(equipmentCode)) {
            queryWrapper.and(q -> q.isNull(SysUser::getEamEquipmentIds).or().eq(SysUser::getEquipmentIds, "").or().like(SysUser::getEamEquipmentIds, equipmentCode));
        }
        if (StringUtils.isNotBlank(factoryOrgCode)) {
            List<String> factoryIds = factoryService.queryFactoryIdsByOrgCode(factoryOrgCode);
            if (CollectionUtil.isNotEmpty(factoryIds)) {
                String factory = String.join(",", factoryIds);
                String inClause = "(" + factory + ")";
                queryWrapper.exists("select 1 from eam_base_factory_user t where t.user_id=sys_user.id and t.factory_id in {0}", inClause);
            } else {
                return Collections.emptyList();
            }
        }
        queryWrapper.eq(SysUser::getDelFlag, CommonConstant.DEL_FLAG_0);
        queryWrapper.eq(SysUser::getStatus, CommonConstant.DEL_FLAG_1);
        queryWrapper.orderByDesc(SysUser::getId);
        List<SysUser> sysUsers = userMapper.selectList(queryWrapper);
        if (CollectionUtil.isEmpty(sysUsers)) {
            return Collections.emptyList();
        }
        return sysUsers.stream().map(user -> new UserSelector(user.getId(), user.getUsername(), user.getRealname())).collect(Collectors.toList());
    }
    /**
     * é€‰æ‹©ç”¨æˆ·
     * @param equipmentCode é€‰æ‹©çš„设备ID
     * @param factoryId é€‰æ‹©çš„工厂ID
     * @param positionCode å²—位编号
     * @return
     */
    @Override
    public List<UserSelector> selectOperatorFactoryList(String equipmentCode, String factoryId, String positionCode){
        LambdaQueryWrapper<SysUser> queryWrapper = new LambdaQueryWrapper<>();
        queryWrapper.eq(SysUser::getPost, positionCode);
//        if(StringUtils.isNotBlank(equipmentCode)) {
//            queryWrapper.and(q -> q.isNull(SysUser::getEquipmentIds).or().eq(SysUser::getEquipmentIds, "").or().like(SysUser::getEquipmentIds, equipmentCode));
//        }
//        if(StringUtils.isNotBlank(factoryId)) {
//            queryWrapper.exists("select 1 from eam_base_factory_user t where t.user_id=sys_user.id and t.factory_id={0}", factoryId);
//        }
        queryWrapper.eq(SysUser::getDelFlag, CommonConstant.DEL_FLAG_0);
        queryWrapper.eq(SysUser::getStatus, CommonConstant.DEL_FLAG_1);
        queryWrapper.orderByDesc(SysUser::getId);
        List<SysUser> sysUsers = userMapper.selectList(queryWrapper);
        List<UserSelector> collect = sysUsers.stream().map(user -> new UserSelector(user.getId(), user.getUsername(), user.getRealname())).collect(Collectors.toList());
        return collect;
    }
    @Override
    public List<UserSelector> selectOperatorList(String positionCode) {
        LambdaQueryWrapper<SysUser> queryWrapper = new LambdaQueryWrapper<>();
        queryWrapper.eq(SysUser::getPost, positionCode);
        queryWrapper.eq(SysUser::getDelFlag, CommonConstant.DEL_FLAG_0);
        queryWrapper.eq(SysUser::getStatus, CommonConstant.DEL_FLAG_1);
        queryWrapper.orderByDesc(SysUser::getId);
        List<SysUser> sysUsers = userMapper.selectList(queryWrapper);
        List<UserSelector> collect = sysUsers.stream().map(user -> new UserSelector(user.getId(), user.getUsername(), user.getRealname())).collect(Collectors.toList());
        return collect;
    }
    @Override
    public List<UserSelector> selectOperatorList(String positionCode) {
        LambdaQueryWrapper<SysUser> queryWrapper = new LambdaQueryWrapper<>();
        queryWrapper.eq(SysUser::getPost, positionCode);
        queryWrapper.eq(SysUser::getDelFlag, CommonConstant.DEL_FLAG_0);
        queryWrapper.eq(SysUser::getStatus, CommonConstant.DEL_FLAG_1);
        queryWrapper.orderByDesc(SysUser::getId);
        List<SysUser> sysUsers = userMapper.selectList(queryWrapper);
        List<UserSelector> collect = sysUsers.stream().map(user -> new UserSelector(user.getId(), user.getUsername(), user.getRealname())).collect(Collectors.toList());
        return collect;
    }
}