hyingbo
2025-06-10 29dcac1a7bb5758b6f9a39fd0738f6ab367b5418
操作工停机上报接口,操作工刷卡登录
已添加6个文件
已修改14个文件
512 ■■■■■ 文件已修改
lxzn-module-mdc-common/src/main/java/org/jeecg/modules/mdc/mapper/MdcEquipmentMapper.java 2 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
lxzn-module-mdc-common/src/main/java/org/jeecg/modules/mdc/mapper/xml/MdcEquipmentMapper.xml 14 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
lxzn-module-mdc-common/src/main/java/org/jeecg/modules/mdc/service/IMdcEquipmentService.java 6 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
lxzn-module-mdc-common/src/main/java/org/jeecg/modules/mdc/service/impl/MdcEquipmentServiceImpl.java 28 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
lxzn-module-mdc/src/main/java/org/jeecg/modules/mdc/controller/MdcDowntimeOperatorController.java 85 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
lxzn-module-mdc/src/main/java/org/jeecg/modules/mdc/controller/MdcDowntimeReasonController.java 23 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
lxzn-module-mdc/src/main/java/org/jeecg/modules/mdc/controller/MdcEquipmentController.java 11 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
lxzn-module-mdc/src/main/java/org/jeecg/modules/mdc/entity/MdcDowntime.java 13 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
lxzn-module-mdc/src/main/java/org/jeecg/modules/mdc/job/ScanDowntimeJob.java 1 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
lxzn-module-mdc/src/main/java/org/jeecg/modules/mdc/mapper/MdcDowntimeOperatorMapper.java 23 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
lxzn-module-mdc/src/main/java/org/jeecg/modules/mdc/mapper/xml/MdcDowntimeOperatorMapper.xml 14 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
lxzn-module-mdc/src/main/java/org/jeecg/modules/mdc/service/IMdcDowntimeOperatorService.java 23 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
lxzn-module-mdc/src/main/java/org/jeecg/modules/mdc/service/impl/MdcDowntimeServiceOperatorImpl.java 171 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
lxzn-module-mdc/src/main/java/org/jeecg/modules/mdc/vo/MdcDowntimeVo.java 10 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
lxzn-module-mdc/src/main/java/org/jeecg/modules/mdc/vo/SplitDowntimeVo.java 70 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
lxzn-module-system/lxzn-system-biz/src/main/java/org/jeecg/modules/cas/controller/CasClientController.java 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
lxzn-module-system/lxzn-system-biz/src/main/java/org/jeecg/modules/system/controller/LoginController.java 8 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
lxzn-module-system/lxzn-system-biz/src/main/java/org/jeecg/modules/system/controller/ThirdLoginController.java 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
lxzn-module-system/lxzn-system-biz/src/main/java/org/jeecg/modules/system/service/ISysUserService.java 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
lxzn-module-system/lxzn-system-biz/src/main/java/org/jeecg/modules/system/service/impl/SysUserServiceImpl.java 4 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
lxzn-module-mdc-common/src/main/java/org/jeecg/modules/mdc/mapper/MdcEquipmentMapper.java
@@ -140,4 +140,6 @@
    List<MdcEquipment> findByProIdsAndTeamCode(@Param("mdcProductionIds") List<String> mdcProductionIds, @Param("teamCodeList") List<String> teamCodeList);
    List<MdcEquipment> findByProIdsAndType(@Param("mdcProductionIds") List<String> mdcProductionIds, @Param("typeList") List<String> typeList);
    List<MdcEquipment> getEquipmentList(@Param("allProductionIds") List<String> allProductionIds);
}
lxzn-module-mdc-common/src/main/java/org/jeecg/modules/mdc/mapper/xml/MdcEquipmentMapper.xml
@@ -89,6 +89,20 @@
        </foreach>
    </select>
    <!--根据产线id查询设备id集合-->
    <select id="getEquipmentList" resultType="org.jeecg.modules.mdc.entity.MdcEquipment">
        SELECT
        me.*
        FROM
        mdc_equipment me
        LEFT JOIN mdc_production_equipment mpe ON me.id = mpe.equipment_id
        WHERE
        mpe.production_id IN
        <foreach collection="allProductionIds" index="index" item="id" open="(" separator="," close=")">
            #{id}
        </foreach>
    </select>
    <!--查询设备监控信息-->
    <select id="checkStatusFromEquipmentIds" resultType="org.jeecg.modules.mdc.entity.MdcEquipmentMonitor">
        SELECT
lxzn-module-mdc-common/src/main/java/org/jeecg/modules/mdc/service/IMdcEquipmentService.java
@@ -239,4 +239,10 @@
     * @return
     */
    List<MdcEquipment> findByProIdsAndType(List<String> allProductionIds, List<String> typeList);
    /**
     * æ ¹æ®ç”¨æˆ·æŸ¥è¯¢è®¾å¤‡åˆ—表信息
     * @return
     */
    List<MdcEquipment> getEquipmentList();
}
lxzn-module-mdc-common/src/main/java/org/jeecg/modules/mdc/service/impl/MdcEquipmentServiceImpl.java
@@ -4,6 +4,7 @@
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.core.toolkit.CollectionUtils;
import com.baomidou.mybatisplus.core.toolkit.StringPool;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import lombok.extern.slf4j.Slf4j;
@@ -1042,4 +1043,31 @@
        return this.baseMapper.findByProIdsAndType(allProductionIds, typeList);
    }
    @Override
    public List<MdcEquipment> getEquipmentList() {
        LoginUser user = (LoginUser) SecurityUtils.getSubject().getPrincipal();
        String userId = user.getId();
        if (StringUtils.isNotEmpty(user.getEquipmentIds())) {
            return this.baseMapper.selectList(new LambdaQueryWrapper<MdcEquipment>().eq(MdcEquipment::getEquipmentId, Arrays.asList(user.getEquipmentIds().split(StringPool.COMMA))));
        }
        //获取所有产线数据
        List<MdcProduction> productionList = mdcProductionService.list(new LambdaQueryWrapper<MdcProduction>().eq(MdcProduction::getDelFlag, CommonConstant.DEL_FLAG_0.toString()).orderByAsc(MdcProduction::getProductionOrder));
        //根据用户id获取拥有的产线信息集合
        List<String> productionIds = mdcUserProductionService.queryProductionIdsByUserId(userId);
        List<String> allProductionIds = new ArrayList<>();
        //找到所有产线id的上级id
        if (productionIds != null && !productionIds.isEmpty()) {
            for (String productionId : productionIds) {
                this.getAllProductionIds(productionList, productionId, allProductionIds);
            }
        }
        //根据产线集合查找所有设备id
        if (allProductionIds.isEmpty()) {
            return null;
        }
        List<MdcEquipment> equipmentIds = this.baseMapper.getEquipmentList(allProductionIds);
        return equipmentIds;
    }
}
lxzn-module-mdc/src/main/java/org/jeecg/modules/mdc/controller/MdcDowntimeOperatorController.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,85 @@
package org.jeecg.modules.mdc.controller;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import lombok.extern.slf4j.Slf4j;
import org.apache.shiro.SecurityUtils;
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.common.system.vo.LoginUser;
import org.jeecg.modules.mdc.dto.MdcDowntimeDto;
import org.jeecg.modules.mdc.entity.MdcDowntime;
import org.jeecg.modules.mdc.service.IMdcDowntimeOperatorService;
import org.jeecg.modules.mdc.vo.MdcDowntimeVo;
import org.jeecg.modules.mdc.vo.SplitDowntimeVo;
import org.springframework.web.bind.annotation.*;
import javax.annotation.Resource;
/**
 * @Description: æ“ä½œå·¥åœæœºå¾…机表
 * @Author: lius
 * @Date: 2025-03-12
 */
@Slf4j
@Api(tags = "操作工停机待机表")
@RestController
@RequestMapping("/mdc/operator/mdcDowntime")
public class MdcDowntimeOperatorController  extends JeecgController<MdcDowntime, IMdcDowntimeOperatorService> {
    @Resource
    private IMdcDowntimeOperatorService mdcDowntimeService;
    /**
     * åˆ†é¡µåˆ—表查询
     *
     * @param mdcDowntimeVo
     * @param pageNo
     * @param pageSize
     * @return
     */
    @AutoLog(value = "待机停机表-分页列表查询")
    @ApiOperation(value = "待机停机表-分页列表查询", notes = "待机停机表-分页列表查询")
    @GetMapping(value = "/list")
    public Result<?> queryPageList(MdcDowntimeVo mdcDowntimeVo,
                                   @RequestParam(name = "pageNo", defaultValue = "1") Integer pageNo,
                                   @RequestParam(name = "pageSize", defaultValue = "10") Integer pageSize) {
        LoginUser user = (LoginUser) SecurityUtils.getSubject().getPrincipal();
        String userId = user.getId();
        Page<MdcDowntimeDto> page = new Page<MdcDowntimeDto>(pageNo, pageSize);
        IPage<MdcDowntimeDto> pageList = mdcDowntimeService.pageList(mdcDowntimeVo, page);
        return Result.OK(pageList);
    }
    /**
     * ç»´æŠ¤åœæœº
     *
     * @param mdcDowntimeVo
     * @return
     */
    @AutoLog(value = "待机停机表-维护停机")
    @ApiOperation(value = "待机停机表-维护停机", notes = "待机停机表-维护停机")
    @RequestMapping(value = "/updateReason", method = {RequestMethod.PUT, RequestMethod.POST})
    public Result<?> updateReason(@RequestBody MdcDowntimeVo mdcDowntimeVo) {
        mdcDowntimeService.updateReason(mdcDowntimeVo);
        return Result.OK("编辑成功!");
    }
    /**
     * åœæœºæ‹†åˆ†
     *
     * @param splitDowntimeVo
     * @return
     */
    @AutoLog(value = "待机停机表-停机拆分")
    @ApiOperation(value = "待机停机表-停机拆分", notes = "待机停机表-停机拆分")
    @RequestMapping(value = "/splitDowntime", method = {RequestMethod.PUT, RequestMethod.POST})
    public Result<?> splitDowntime(@RequestBody SplitDowntimeVo splitDowntimeVo) {
        mdcDowntimeService.splitDowntime(splitDowntimeVo);
        return Result.OK("拆分成功!");
    }
}
lxzn-module-mdc/src/main/java/org/jeecg/modules/mdc/controller/MdcDowntimeReasonController.java
@@ -3,6 +3,7 @@
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.beust.jcommander.internal.Lists;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import lombok.extern.slf4j.Slf4j;
@@ -10,9 +11,9 @@
import org.jeecg.common.aspect.annotation.AutoLog;
import org.jeecg.common.system.base.controller.JeecgController;
import org.jeecg.common.system.query.QueryGenerator;
import org.jeecg.modules.mdc.dto.OptionsDto;
import org.jeecg.modules.mdc.entity.MdcDowntimeReason;
import org.jeecg.modules.mdc.service.IMdcDowntimeReasonService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;
import org.springframework.web.servlet.ModelAndView;
@@ -166,4 +167,24 @@
        return Result.OK(result);
    }
    /**
     * åœæœºåŽŸå› ä¸‹æ‹‰é€‰æ‹©
     *
     * @return
     */
    @AutoLog(value = "停机原因表-停机原因下拉选择")
    @ApiOperation(value = "停机原因表-停机原因下拉选择", notes = "停机原因表-停机原因下拉选择")
    @GetMapping(value = "/reasonList")
    public Result<List<OptionsDto>> reasonList() {
        List<MdcDowntimeReason> result = mdcDowntimeReasonService.list();
        List<OptionsDto> list = Lists.newArrayList();
        result.forEach(mdcDowntimeReason -> {
            OptionsDto optionsDto = new OptionsDto();
            optionsDto.setValue(mdcDowntimeReason.getId());
            optionsDto.setLabel(mdcDowntimeReason.getDowntimeDescription());
            list.add(optionsDto);
        });
        return Result.OK(list);
    }
}
lxzn-module-mdc/src/main/java/org/jeecg/modules/mdc/controller/MdcEquipmentController.java
@@ -111,6 +111,17 @@
    }
    /**
     * æ ¹æ®ç”¨æˆ·æŸ¥è¯¢è®¾å¤‡åˆ—表信息
     */
    @AutoLog(value = "设备表-根据用户查询设备列表信息")
    @ApiOperation(value = "设备表-根据用户查询设备列表信息", notes = "设备表-根据用户查询设备列表信息")
    @GetMapping(value = "/getEquipmentList")
    public Result<List<MdcEquipment>> getEquipmentList() {
        List<MdcEquipment> list = mdcEquipmentService.getEquipmentList();
        return Result.OK(list);
    }
    /**
     * è®¾å¤‡ç›‘控列表
     */
    @AutoLog(value = "设备表-设备监控列表")
lxzn-module-mdc/src/main/java/org/jeecg/modules/mdc/entity/MdcDowntime.java
@@ -81,5 +81,18 @@
    @Excel(name = "备注", width = 15)
    @ApiModelProperty(value = "备注")
    private String remark;
    /**
     * å½•入类型
     */
    @Excel(name = "录入类型", width = 15)
    @ApiModelProperty(value = "录入类型")
    @Dict(dicCode = "enter_type")
    private Integer enterType;
    /**
     * åœæœºæ—¶é•¿
     */
    @Excel(name = "停机时长", width = 15)
    @ApiModelProperty(value = "停机时长")
    private Integer shutdownDuration;
}
lxzn-module-mdc/src/main/java/org/jeecg/modules/mdc/job/ScanDowntimeJob.java
@@ -90,6 +90,7 @@
                    downtime.setTheDate(finalDate);
                    downtime.setStartDate(mdcEquipmentWaitSectionDto.getStartTime());
                    downtime.setEndDate(mdcEquipmentWaitSectionDto.getEndTime());
                    downtime.setShutdownDuration(DateUtils.differentMinutes(downtime.getStartDate(), downtime.getEndDate()));
                    return downtime;
                }).collect(Collectors.toList());
                if (!downtimeList.isEmpty()) {
lxzn-module-mdc/src/main/java/org/jeecg/modules/mdc/mapper/MdcDowntimeOperatorMapper.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,23 @@
package org.jeecg.modules.mdc.mapper;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.core.toolkit.Constants;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import org.apache.ibatis.annotations.Param;
import org.jeecg.modules.mdc.dto.MdcDowntimeDto;
import org.jeecg.modules.mdc.entity.MdcDowntime;
import org.jeecg.modules.mdc.vo.MdcDowntimeVo;
import java.util.List;
/**
 * @Description: æ“ä½œå·¥å¾…机停机表
 * @Author: lius
 * @Date: 2025-03-12
 */
public interface MdcDowntimeOperatorMapper extends BaseMapper<MdcDowntime> {
    IPage<MdcDowntimeDto> page(Page<MdcDowntimeDto> page, @Param(Constants.WRAPPER) QueryWrapper<MdcDowntimeDto> queryWrapper);
}
lxzn-module-mdc/src/main/java/org/jeecg/modules/mdc/mapper/xml/MdcDowntimeOperatorMapper.xml
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,14 @@
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="org.jeecg.modules.mdc.mapper.MdcDowntimeOperatorMapper">
    <select id="page" resultType="org.jeecg.modules.mdc.dto.MdcDowntimeDto">
        SELECT
            t1.* ,
            t2.downtime_type downtimeType,
            t2.downtime_description downtimeDescription
        FROM mdc_downtime t1 LEFT JOIN mdc_downtime_reason t2 ON t1.reason_id = t2.id
        ${ew.customSqlSegment}
        ORDER BY t1.create_time DESC
    </select>
</mapper>
lxzn-module-mdc/src/main/java/org/jeecg/modules/mdc/service/IMdcDowntimeOperatorService.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,23 @@
package org.jeecg.modules.mdc.service;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.baomidou.mybatisplus.extension.service.IService;
import org.jeecg.modules.mdc.dto.MdcDowntimeDto;
import org.jeecg.modules.mdc.entity.MdcDowntime;
import org.jeecg.modules.mdc.vo.MdcDowntimeVo;
import org.jeecg.modules.mdc.vo.SplitDowntimeVo;
/**
 * @Description: æ“ä½œå·¥å¾…机停机表
 * @Author: lius
 * @Date: 2025-03-12
 */
public interface IMdcDowntimeOperatorService extends IService<MdcDowntime> {
    IPage<MdcDowntimeDto> pageList(MdcDowntimeVo mdcDowntimeVo, Page<MdcDowntimeDto> page);
    void updateReason(MdcDowntimeVo mdcDowntimeVo);
    void splitDowntime(SplitDowntimeVo splitDowntimeVo);
}
lxzn-module-mdc/src/main/java/org/jeecg/modules/mdc/service/impl/MdcDowntimeServiceOperatorImpl.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,171 @@
package org.jeecg.modules.mdc.service.impl;
import cn.hutool.core.bean.BeanUtil;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.core.toolkit.CollectionUtils;
import com.baomidou.mybatisplus.core.toolkit.IdWorker;
import com.baomidou.mybatisplus.core.toolkit.StringPool;
import com.baomidou.mybatisplus.core.toolkit.Wrappers;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.beust.jcommander.internal.Lists;
import org.apache.commons.lang3.StringUtils;
import org.apache.shiro.SecurityUtils;
import org.jeecg.common.exception.JeecgBootException;
import org.jeecg.common.system.vo.LoginUser;
import org.jeecg.modules.mdc.dto.MdcDowntimeDto;
import org.jeecg.modules.mdc.entity.MdcDowntime;
import org.jeecg.modules.mdc.mapper.MdcDowntimeOperatorMapper;
import org.jeecg.modules.mdc.service.IMdcDowntimeOperatorService;
import org.jeecg.modules.mdc.service.IMdcEquipmentService;
import org.jeecg.modules.mdc.util.DateUtils;
import org.jeecg.modules.mdc.vo.MdcDowntimeVo;
import org.jeecg.modules.mdc.vo.SplitDowntimeVo;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import javax.annotation.Resource;
import java.util.*;
/**
 * @Description: æ“ä½œå·¥å¾…机停机表
 * @Author: lius
 * @Date: 2025-03-12
 */
@Service
public class MdcDowntimeServiceOperatorImpl extends ServiceImpl<MdcDowntimeOperatorMapper, MdcDowntime> implements IMdcDowntimeOperatorService {
    @Resource
    private IMdcEquipmentService mdcEquipmentService;
    @Override
    public IPage<MdcDowntimeDto> pageList(MdcDowntimeVo mdcDowntimeVo, Page<MdcDowntimeDto> page) {
        LoginUser user = (LoginUser) SecurityUtils.getSubject().getPrincipal();
        String userId = user.getId();
        // èŽ·å–è®¾å¤‡ID列表
        List<String> equipmentIds = Lists.newArrayList();
        if (StringUtils.isNotBlank(user.getEquipmentIds())) {
            equipmentIds = Arrays.asList(user.getEquipmentIds().split(StringPool.COMMA));
        }else {
            equipmentIds = getEquipmentIds(userId, mdcDowntimeVo);
        }
        // å¦‚果设备ID列表为空,直接返回空分页
        if (equipmentIds == null || equipmentIds.isEmpty()) {
            return new Page<>(page.getCurrent(), page.getSize(), 0);
        }
        QueryWrapper<MdcDowntimeDto> queryWrapper = Wrappers.query();
        if (CollectionUtils.isNotEmpty(equipmentIds)) {
            queryWrapper.in("t1.equipment_id", equipmentIds);
        }
        if (StringUtils.isNotBlank(mdcDowntimeVo.getEquipmentId())) {
            queryWrapper.eq("t1.equipment_id", mdcDowntimeVo.getEquipmentId());
        }
        if (Objects.nonNull(mdcDowntimeVo.getStartDate())) {
            queryWrapper.ge("t1.start_date", mdcDowntimeVo.getStartDate());
        }
        if (Objects.nonNull(mdcDowntimeVo.getEndDate())) {
            queryWrapper.le("t1.end_date", mdcDowntimeVo.getEndDate());
        }
        if (StringUtils.isNotBlank(mdcDowntimeVo.getDowntimeDescription())) {
            queryWrapper.eq("t2.id", mdcDowntimeVo.getDowntimeDescription());
        }
        return this.baseMapper.page(page, queryWrapper);
    }
    @Override
    @Transactional(rollbackFor = {Exception.class})
    public void updateReason(MdcDowntimeVo mdcDowntimeVo) {
        if (StringUtils.isEmpty(mdcDowntimeVo.getDownTimeIds())) {
            throw new JeecgBootException("请选择需要维护停机的数据");
        }
        List<MdcDowntime> mdcDowntimeList = this.listByIds(Arrays.asList(mdcDowntimeVo.getDownTimeIds().split(StringPool.COMMA)));
        mdcDowntimeList.forEach(mdcDowntime -> {
            mdcDowntime.setReasonId(mdcDowntimeVo.getReasonId());
        });
        this.updateBatchById(mdcDowntimeList);
    }
    @Transactional(rollbackFor = {Exception.class})
    @Override
    public void splitDowntime(SplitDowntimeVo splitDowntimeVo) {
        if (StringUtils.isBlank(splitDowntimeVo.getId())) {
            throw new JeecgBootException("请选择需要拆分停机的数据");
        }
        MdcDowntime mdcDowntime = this.getById(splitDowntimeVo.getId());
        if (StringUtils.isNotBlank(mdcDowntime.getReasonId())) {
            throw new JeecgBootException("已设置停机原因,无法拆分停机");
        }
        //比较拆分一段的日期是否再区间范围内(开始时间:startTime ç»“束时间:入无二段时间,则取endTime)
        if (Objects.nonNull(splitDowntimeVo.getFirstMiddleTime())) {
            //校验一段日期是否大于startTime,否,抛出异常
            if (Objects.isNull(splitDowntimeVo.getSecondMiddleTime())) {
                if (splitDowntimeVo.getStartDate().compareTo(splitDowntimeVo.getFirstMiddleTime()) != -1 || splitDowntimeVo.getFirstMiddleTime().compareTo(splitDowntimeVo.getEndDate()) != -1) {
                    throw new JeecgBootException("拆分一段时间未在开始时间和结束时间之内,请检查!");
                }
            }else {
                if (splitDowntimeVo.getStartDate().compareTo(splitDowntimeVo.getFirstMiddleTime()) != -1 || splitDowntimeVo.getFirstMiddleTime().compareTo(splitDowntimeVo.getSecondMiddleTime()) != -1) {
                    throw new JeecgBootException("拆分一段时间未在开始时间和拆分二段结束时间之内,请检查!");
                }
            }
        }else {
            throw new JeecgBootException("请维护拆分一段结束时间");
        }
        if (Objects.nonNull(splitDowntimeVo.getSecondMiddleTime())) {
            //校验二段日期是否存在于一段日期和endTime之间
            if (splitDowntimeVo.getFirstMiddleTime().compareTo(splitDowntimeVo.getSecondMiddleTime()) != -1 || splitDowntimeVo.getSecondMiddleTime().compareTo(splitDowntimeVo.getEndDate()) != -1) {
                throw new JeecgBootException("拆分二段时间未在拆分一段结束时间和结束时间之内,请检查!");
            }
        }
        List<MdcDowntime> list = Lists.newArrayList();
        //设置拆分1段
        if (Objects.nonNull(splitDowntimeVo.getFirstMiddleTime())) {
            list.add(checkMdcDowntime(mdcDowntime, splitDowntimeVo.getStartDate(), splitDowntimeVo.getFirstMiddleTime(), splitDowntimeVo.getFirstDowntimeDescription()));
        }
        //设置拆分2段,二段不存在则将endDate作为拆分二段
        if (Objects.nonNull(splitDowntimeVo.getSecondMiddleTime())) {
            list.add(checkMdcDowntime(mdcDowntime, splitDowntimeVo.getFirstMiddleTime(), splitDowntimeVo.getSecondMiddleTime(), splitDowntimeVo.getSecondDowntimeDescription()));
            list.add(checkMdcDowntime(mdcDowntime, splitDowntimeVo.getSecondMiddleTime(), splitDowntimeVo.getEndDate(), splitDowntimeVo.getThirdDowntimeDescription()));
        }else {
            list.add(checkMdcDowntime(mdcDowntime, splitDowntimeVo.getFirstMiddleTime(), splitDowntimeVo.getEndDate(), splitDowntimeVo.getThirdDowntimeDescription()));
        }
        //保存拆分数据并删除原有数据
        if (this.saveBatch(list)) {
            this.removeById(mdcDowntime);
        }
    }
    private MdcDowntime checkMdcDowntime(MdcDowntime mdcDowntime, Date startDate, Date endDate, String downtimeDescription) {
        MdcDowntime mdcDowntimeInfo = new MdcDowntime();
        BeanUtil.copyProperties(mdcDowntime, mdcDowntimeInfo);
        mdcDowntimeInfo.setId(IdWorker.getIdStr());
        mdcDowntimeInfo.setStartDate(startDate);
        mdcDowntimeInfo.setEndDate(endDate);
        mdcDowntimeInfo.setShutdownDuration(DateUtils.differentMinutes(startDate, endDate));
        mdcDowntimeInfo.setEnterType(2);
        mdcDowntimeInfo.setReasonId(StringUtils.isNotBlank(downtimeDescription) ? downtimeDescription : StringPool.EMPTY);
        return mdcDowntimeInfo;
    }
    private List<String> getEquipmentIds(String userId, MdcDowntimeVo mdcDowntimeVo) {
        if (StringUtils.isNotEmpty(mdcDowntimeVo.getEquipmentId())) {
            return Collections.singletonList(mdcDowntimeVo.getEquipmentId());
        }
        return mdcEquipmentService.getEquipmentIdsProduction(userId, null);
    }
}
lxzn-module-mdc/src/main/java/org/jeecg/modules/mdc/vo/MdcDowntimeVo.java
@@ -31,6 +31,16 @@
    private String parentId;
    /**
     * åœæœºåŽŸå› 
     */
    private String downtimeDescription;
    /**
     * åœæœºids
     */
    private String downTimeIds;
    /**
     * è®¾å¤‡ids
     */
    private List<String> equipmentIdList;
lxzn-module-mdc/src/main/java/org/jeecg/modules/mdc/vo/SplitDowntimeVo.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,70 @@
package org.jeecg.modules.mdc.vo;
import com.fasterxml.jackson.annotation.JsonFormat;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import org.springframework.format.annotation.DateTimeFormat;
import java.util.Date;
/**
 * åœæœºæ‹†åˆ†æ“ä½œå…¥å‚
 */
@Data
public class SplitDowntimeVo {
    /**
     * åœæœºæ‹†åˆ†id
     */
    private String id;
    /**
     * å¼€å§‹æ—¶é—´
     */
    @JsonFormat(timezone = "GMT+8", pattern = "yyyy-MM-dd HH:mm:ss")
    @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
    @ApiModelProperty(value = "开始时间")
    private Date startDate;
    /**
     * æ‹†åˆ†1段结束时间
     */
    @JsonFormat(timezone = "GMT+8", pattern = "yyyy-MM-dd HH:mm:ss")
    @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
    @ApiModelProperty(value = "拆分1段开始时间")
    private Date firstMiddleTime;
    /**
     * æ‹†åˆ†1段停机原因
     */
    @ApiModelProperty(value = "拆分1段停机原因")
    private String firstDowntimeDescription;
    /**
     * æ‹†åˆ†2段结束时间
     */
    @JsonFormat(timezone = "GMT+8", pattern = "yyyy-MM-dd HH:mm:ss")
    @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
    @ApiModelProperty(value = "拆分2段开始时间")
    private Date secondMiddleTime;
    /**
     * æ‹†åˆ†2段停机原因
     */
    @ApiModelProperty(value = "拆分2段停机原因")
    private String secondDowntimeDescription;
    /**
     * ç»“束时间
     */
    @JsonFormat(timezone = "GMT+8", pattern = "yyyy-MM-dd HH:mm:ss")
    @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
    @ApiModelProperty(value = "结束时间")
    private Date endDate;
    /**
     * æ‹†åˆ†3段停机原因
     */
    @ApiModelProperty(value = "拆分3段停机原因")
    private String thirdDowntimeDescription;
}
lxzn-module-system/lxzn-system-biz/src/main/java/org/jeecg/modules/cas/controller/CasClientController.java
@@ -74,7 +74,7 @@
            log.info("-------token----username---"+principal);
            //1. æ ¡éªŒç”¨æˆ·æ˜¯å¦æœ‰æ•ˆ
              SysUser sysUser = sysUserService.getUserByName(principal);
              result = sysUserService.checkUserIsEffective(sysUser);
              result = sysUserService.checkUserIsEffective(sysUser, null);
              if(!result.isSuccess()) {
                  return result;
              }
lxzn-module-system/lxzn-system-biz/src/main/java/org/jeecg/modules/system/controller/LoginController.java
@@ -121,7 +121,7 @@
        }
        SysUser sysUser = sysUserService.getOne(queryWrapper);
        //update-end-author:wangshuai date:20200601 for: ç™»å½•代码验证用户是否注销bug,if条件永远为false
        result = sysUserService.checkUserIsEffective(sysUser);
        result = sysUserService.checkUserIsEffective(sysUser, loginType);
        if(!result.isSuccess()) {
            return result;
        }
@@ -397,7 +397,7 @@
            }else {
                //登录模式,校验用户有效性
                SysUser sysUser = sysUserService.getUserByPhone(mobile);
                result = sysUserService.checkUserIsEffective(sysUser);
                result = sysUserService.checkUserIsEffective(sysUser, null);
                if(!result.isSuccess()) {
                    String message = result.getMessage();
                    String userNotExist="该用户不存在,请注册";
@@ -458,7 +458,7 @@
        //校验用户有效性
        SysUser sysUser = sysUserService.getUserByPhone(phone);
        result = sysUserService.checkUserIsEffective(sysUser);
        result = sysUserService.checkUserIsEffective(sysUser, null);
        if(!result.isSuccess()) {
            return result;
        }
@@ -626,7 +626,7 @@
        //1. æ ¡éªŒç”¨æˆ·æ˜¯å¦æœ‰æ•ˆ
        SysUser sysUser = sysUserService.getUserByName(username);
        result = sysUserService.checkUserIsEffective(sysUser);
        result = sysUserService.checkUserIsEffective(sysUser, null);
        if(!result.isSuccess()) {
            return result;
        }
lxzn-module-system/lxzn-system-biz/src/main/java/org/jeecg/modules/system/controller/ThirdLoginController.java
@@ -218,7 +218,7 @@
        //1. æ ¡éªŒç”¨æˆ·æ˜¯å¦æœ‰æ•ˆ
        SysUser sysUser = sysUserService.getUserByName(username);
        result = sysUserService.checkUserIsEffective(sysUser);
        result = sysUserService.checkUserIsEffective(sysUser, null);
        if(!result.isSuccess()) {
            return result;
        }
lxzn-module-system/lxzn-system-biz/src/main/java/org/jeecg/modules/system/service/ISysUserService.java
@@ -221,7 +221,7 @@
     * @param sysUser
     * @return
     */
    Result checkUserIsEffective(SysUser sysUser);
    Result checkUserIsEffective(SysUser sysUser, String loginType);
    /**
     * æŸ¥è¯¢è¢«é€»è¾‘删除的用户
lxzn-module-system/lxzn-system-biz/src/main/java/org/jeecg/modules/system/service/impl/SysUserServiceImpl.java
@@ -440,7 +440,7 @@
     * @return
     */
    @Override
    public Result<?> checkUserIsEffective(SysUser sysUser) {
    public Result<?> checkUserIsEffective(SysUser sysUser, String loginType) {
        Result<?> result = new Result<Object>();
        //情况1:根据用户信息查询,该用户不存在
        if (sysUser == null) {
@@ -464,7 +464,7 @@
        }
        //情况4:根据用户信息查询,该用户密码系首次使用,需修改密码
        List<DictModel> dictList = sysDictService.queryEnableDictItemsByCode(CommonConstant.DICT_USER_FIRST_LOGIN);
        if (dictList != null && !dictList.isEmpty()) {
        if (!"terminal".equals(loginType) && 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);