Lius
2023-12-07 4337640b7ab86136baed2fd6aa959e4828a75cea
计算加工工件个数算法和密码安全策略
已添加14个文件
已修改36个文件
1386 ■■■■ 文件已修改
lxzn-boot-base-core/src/main/java/org/jeecg/common/constant/CommonConstant.java 49 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
lxzn-boot-base-core/src/main/java/org/jeecg/common/system/util/JwtUtil.java 17 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
lxzn-boot-base-core/src/main/java/org/jeecg/config/shiro/ShiroConfig.java 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
lxzn-module-mdc/src/main/java/org/jeecg/modules/mdc/controller/MdcEquipmentOverFlagController.java 154 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
lxzn-module-mdc/src/main/java/org/jeecg/modules/mdc/controller/MdcProcessCountController.java 45 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
lxzn-module-mdc/src/main/java/org/jeecg/modules/mdc/controller/MdcWorkshopInfoController.java 4 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
lxzn-module-mdc/src/main/java/org/jeecg/modules/mdc/entity/MdcEquipmentOverFlag.java 47 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
lxzn-module-mdc/src/main/java/org/jeecg/modules/mdc/entity/MdcProcessCount.java 84 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
lxzn-module-mdc/src/main/java/org/jeecg/modules/mdc/job/RunningProcessCountJob.java 63 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
lxzn-module-mdc/src/main/java/org/jeecg/modules/mdc/mapper/EquipmentLogMapper.java 2 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
lxzn-module-mdc/src/main/java/org/jeecg/modules/mdc/mapper/EquipmentWorklineMapper.java 7 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
lxzn-module-mdc/src/main/java/org/jeecg/modules/mdc/mapper/MdcDeviceCalendarMapper.java 3 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
lxzn-module-mdc/src/main/java/org/jeecg/modules/mdc/mapper/MdcEquipmentOverFlagMapper.java 15 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
lxzn-module-mdc/src/main/java/org/jeecg/modules/mdc/mapper/MdcEquipmentRunningSectionMapper.java 5 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
lxzn-module-mdc/src/main/java/org/jeecg/modules/mdc/mapper/MdcProcessCountMapper.java 13 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
lxzn-module-mdc/src/main/java/org/jeecg/modules/mdc/mapper/MdcTorqueConfigMapper.java 2 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
lxzn-module-mdc/src/main/java/org/jeecg/modules/mdc/mapper/xml/EquipmentLogMapper.xml 4 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
lxzn-module-mdc/src/main/java/org/jeecg/modules/mdc/mapper/xml/EquipmentWorklineMapper.xml 8 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
lxzn-module-mdc/src/main/java/org/jeecg/modules/mdc/mapper/xml/MdcDeviceCalendarMapper.xml 9 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
lxzn-module-mdc/src/main/java/org/jeecg/modules/mdc/mapper/xml/MdcEfficiencyReportMapper.xml 9 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
lxzn-module-mdc/src/main/java/org/jeecg/modules/mdc/mapper/xml/MdcEquipmentMapper.xml 4 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
lxzn-module-mdc/src/main/java/org/jeecg/modules/mdc/mapper/xml/MdcEquipmentOverFlagMapper.xml 5 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
lxzn-module-mdc/src/main/java/org/jeecg/modules/mdc/mapper/xml/MdcEquipmentRunningSectionMapper.xml 14 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
lxzn-module-mdc/src/main/java/org/jeecg/modules/mdc/mapper/xml/MdcProcessCountMapper.xml 8 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
lxzn-module-mdc/src/main/java/org/jeecg/modules/mdc/mapper/xml/MdcTorqueConfigMapper.xml 11 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
lxzn-module-mdc/src/main/java/org/jeecg/modules/mdc/service/IEquipmentLogService.java 2 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
lxzn-module-mdc/src/main/java/org/jeecg/modules/mdc/service/IEquipmentWorkLineService.java 16 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
lxzn-module-mdc/src/main/java/org/jeecg/modules/mdc/service/IMdcDeviceCalendarService.java 1 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
lxzn-module-mdc/src/main/java/org/jeecg/modules/mdc/service/IMdcEquipmentOverFlagService.java 15 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
lxzn-module-mdc/src/main/java/org/jeecg/modules/mdc/service/IMdcEquipmentRunningSectionService.java 5 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
lxzn-module-mdc/src/main/java/org/jeecg/modules/mdc/service/IMdcEquipmentService.java 1 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
lxzn-module-mdc/src/main/java/org/jeecg/modules/mdc/service/IProcessCountService.java 17 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
lxzn-module-mdc/src/main/java/org/jeecg/modules/mdc/service/impl/EquipmentLogServiceImpl.java 5 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
lxzn-module-mdc/src/main/java/org/jeecg/modules/mdc/service/impl/EquipmentWorkLineServiceImpl.java 10 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
lxzn-module-mdc/src/main/java/org/jeecg/modules/mdc/service/impl/MdcDeviceCalendarServiceImpl.java 21 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
lxzn-module-mdc/src/main/java/org/jeecg/modules/mdc/service/impl/MdcEfficiencyReportServiceImpl.java 48 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
lxzn-module-mdc/src/main/java/org/jeecg/modules/mdc/service/impl/MdcEquipmentOverFlagServiceImpl.java 19 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
lxzn-module-mdc/src/main/java/org/jeecg/modules/mdc/service/impl/MdcEquipmentRunningSectionServiceImpl.java 42 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
lxzn-module-mdc/src/main/java/org/jeecg/modules/mdc/service/impl/MdcEquipmentServiceImpl.java 128 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
lxzn-module-mdc/src/main/java/org/jeecg/modules/mdc/service/impl/MdcEquipmentStatisticalShiftInfoServiceImpl.java 1 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
lxzn-module-mdc/src/main/java/org/jeecg/modules/mdc/service/impl/MdcTorqueConfigServiceImpl.java 6 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
lxzn-module-mdc/src/main/java/org/jeecg/modules/mdc/service/impl/ProcessCountServiceImpl.java 317 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
lxzn-module-mdc/src/main/java/org/jeecg/modules/mdc/vo/MdcDeviceCalendarVo.java 3 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
lxzn-module-mdc/src/main/java/org/jeecg/modules/mdc/vo/MdcEfficiencyReportQueryVo.java 5 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
lxzn-module-mdc/src/main/java/org/jeecg/modules/mdc/vo/MdcEfficiencyReportShiftQueryVo.java 4 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
lxzn-module-mdc/src/main/java/org/jeecg/modules/mdc/vo/MdcProcessCountVo.java 16 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
lxzn-module-system/lxzn-system-biz/src/main/java/org/jeecg/modules/system/controller/LoginController.java 57 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
lxzn-module-system/lxzn-system-biz/src/main/java/org/jeecg/modules/system/controller/SysUserController.java 14 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
lxzn-module-system/lxzn-system-biz/src/main/java/org/jeecg/modules/system/entity/SysUser.java 10 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
lxzn-module-system/lxzn-system-biz/src/main/java/org/jeecg/modules/system/service/impl/SysUserServiceImpl.java 39 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
lxzn-boot-base-core/src/main/java/org/jeecg/common/constant/CommonConstant.java
@@ -91,6 +91,10 @@
    String PREFIX_USER_TOKEN = "prefix_user_token_";
//    /** Token缓存时间:3600秒即一小时 */
//    int  TOKEN_EXPIRE_TIME  = 3600;
    /**
     * Token缓存时间(小时)
     */
    Integer TOKEN_EXPIRE_TIME  = 1;
    /**
     * ç™»å½•二维码
@@ -523,4 +527,49 @@
     */
    String JOB_SEND_MSG = "job_fail_send_msg_role";
    /**
     * é»˜è®¤å¯†ç æœ€å¤§å°è¯•次数
     */
    //Integer MAX_ATTEMPTS = 3;
    /**
     * é»˜è®¤ç”¨æˆ·é”å®šæ—¶é•¿(分钟)
     */
    //Integer USER_FREEZE_TIME = 5;
    /**
     * å¯†ç æœ€å¤§å°è¯•次数的字典编号
     */
    String DICT_MAX_ATTEMPTS = "login_max_attempts";
    /**
     * ç”¨æˆ·ç™»å½•失败锁定时长字典编号
     */
    String DICT_USER_FREEZE = "user_freeze_time";
    /**
     * redis登录次数key
     */
    String PREFIX_LOGIN_COUNT = "prefix_login_count_";
    /**
     * token缓存时间字典编号
     */
    String DICT_TOKEN_EXPIRE_TIME = "token_expire_time";
    /**
     * é»˜è®¤ç”¨æˆ·å¯†ç æ›´æ”¹å‘¨æœŸ(天)
     */
    //Integer PASSWORD_EXPIRATION_PERIOD = 90;
    /**
     * ç”¨æˆ·å¯†ç æ›´æ”¹å‘¨æœŸå­—典编号
     */
    String DICT_PASSWORD_EXPIRATION = "password_expiration_period";
    /**
     * ç”¨æˆ·é¦–次登录强制更改字典编号
     */
    String DICT_USER_FIRST_LOGIN = "user_first_login";
}
lxzn-boot-base-core/src/main/java/org/jeecg/common/system/util/JwtUtil.java
@@ -7,15 +7,6 @@
import com.auth0.jwt.interfaces.DecodedJWT;
import com.fasterxml.jackson.databind.ObjectMapper;
import com.google.common.base.Joiner;
import java.io.IOException;
import java.io.OutputStream;
import java.util.Date;
import javax.servlet.ServletResponse;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;
import org.apache.shiro.SecurityUtils;
import org.jeecg.common.api.vo.Result;
import org.jeecg.common.constant.CommonConstant;
@@ -28,6 +19,14 @@
import org.jeecg.common.util.SpringContextUtils;
import org.jeecg.common.util.oConvertUtils;
import javax.servlet.ServletResponse;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;
import java.io.IOException;
import java.io.OutputStream;
import java.util.Date;
/**
 * @Author Scott
 * @Date 2018-07-12 14:23
lxzn-boot-base-core/src/main/java/org/jeecg/config/shiro/ShiroConfig.java
@@ -20,7 +20,6 @@
import org.jeecg.config.shiro.filters.JwtFilter;
import org.springframework.aop.framework.autoproxy.DefaultAdvisorAutoProxyCreator;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.context.annotation.DependsOn;
@@ -94,6 +93,7 @@
        filterChainDefinitionMap.put("/sys/common/static/**", "anon");//图片预览 &下载文件不限制token
        filterChainDefinitionMap.put("/sys/common/pdf/**", "anon");//pdf预览
        filterChainDefinitionMap.put("/generic/**", "anon");//pdf预览需要文件
        filterChainDefinitionMap.put("/sys/user/updatePassword", "anon");//首页用户修改密码
        filterChainDefinitionMap.put("/sys/getLoginQrcode/**", "anon"); //登录二维码
        filterChainDefinitionMap.put("/sys/getQrcodeToken/**", "anon"); //监听扫码
lxzn-module-mdc/src/main/java/org/jeecg/modules/mdc/controller/MdcEquipmentOverFlagController.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,154 @@
package org.jeecg.modules.mdc.controller;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
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.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.query.QueryGenerator;
import org.jeecg.modules.mdc.entity.MdcEquipmentOverFlag;
import org.jeecg.modules.mdc.service.IMdcEquipmentOverFlagService;
import org.springframework.web.bind.annotation.*;
import org.springframework.web.servlet.ModelAndView;
import javax.annotation.Resource;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.util.Arrays;
/**
 * @Description: è®¾å¤‡ç¨‹åºæ‰§è¡Œç»“束标志表
 * @Author: Lius
 * @Date: 2023-12-05
 * @Version: V1.0
 */
@Slf4j
@Api(tags = "设备程序执行结束标志表")
@RestController
@RequestMapping("/mdc/mdcEquipmentOverFlag")
public class MdcEquipmentOverFlagController extends JeecgController<MdcEquipmentOverFlag, IMdcEquipmentOverFlagService> {
    @Resource
    private IMdcEquipmentOverFlagService mdcEquipmentOverFlagService;
    /**
     * åˆ†é¡µåˆ—表查询
     *
     * @param mdcEquipmentOverFlag
     * @param pageNo
     * @param pageSize
     * @param req
     * @return
     */
    @AutoLog(value = "设备程序执行结束标志表-分页列表查询")
    @ApiOperation(value = "设备程序执行结束标志表-分页列表查询", notes = "设备程序执行结束标志表-分页列表查询")
    @GetMapping(value = "/list")
    public Result<?> queryPageList(MdcEquipmentOverFlag mdcEquipmentOverFlag,
                                   @RequestParam(name = "pageNo", defaultValue = "1") Integer pageNo,
                                   @RequestParam(name = "pageSize", defaultValue = "10") Integer pageSize,
                                   HttpServletRequest req) {
        QueryWrapper<MdcEquipmentOverFlag> queryWrapper = QueryGenerator.initQueryWrapper(mdcEquipmentOverFlag, req.getParameterMap());
        Page<MdcEquipmentOverFlag> page = new Page<MdcEquipmentOverFlag>(pageNo, pageSize);
        IPage<MdcEquipmentOverFlag> pageList = mdcEquipmentOverFlagService.page(page, queryWrapper);
        return Result.OK(pageList);
    }
    /**
     * æ·»åŠ 
     *
     * @param mdcEquipmentOverFlag
     * @return
     */
    @AutoLog(value = "设备程序执行结束标志表-添加")
    @ApiOperation(value = "设备程序执行结束标志表-添加", notes = "设备程序执行结束标志表-添加")
    @PostMapping(value = "/add")
    public Result<?> add(@RequestBody MdcEquipmentOverFlag mdcEquipmentOverFlag) {
        mdcEquipmentOverFlagService.save(mdcEquipmentOverFlag);
        return Result.OK("添加成功!");
    }
    /**
     * ç¼–辑
     *
     * @param mdcEquipmentOverFlag
     * @return
     */
    @AutoLog(value = "设备程序执行结束标志表-编辑")
    @ApiOperation(value = "设备程序执行结束标志表-编辑", notes = "设备程序执行结束标志表-编辑")
    @RequestMapping(value = "/edit", method = {RequestMethod.PUT, RequestMethod.POST})
    public Result<?> edit(@RequestBody MdcEquipmentOverFlag mdcEquipmentOverFlag) {
        mdcEquipmentOverFlagService.updateById(mdcEquipmentOverFlag);
        return Result.OK("编辑成功!");
    }
    /**
     * é€šè¿‡id删除
     *
     * @param id
     * @return
     */
    @AutoLog(value = "设备程序执行结束标志表-通过id删除")
    @ApiOperation(value = "设备程序执行结束标志表-通过id删除", notes = "设备程序执行结束标志表-通过id删除")
    @DeleteMapping(value = "/delete")
    public Result<?> delete(@RequestParam(name = "id", required = true) String id) {
        mdcEquipmentOverFlagService.removeById(id);
        return Result.OK("删除成功!");
    }
    /**
     * æ‰¹é‡åˆ é™¤
     *
     * @param ids
     * @return
     */
    @AutoLog(value = "设备程序执行结束标志表-批量删除")
    @ApiOperation(value = "设备程序执行结束标志表-批量删除", notes = "设备程序执行结束标志表-批量删除")
    @DeleteMapping(value = "/deleteBatch")
    public Result<?> deleteBatch(@RequestParam(name = "ids", required = true) String ids) {
        this.mdcEquipmentOverFlagService.removeByIds(Arrays.asList(ids.split(",")));
        return Result.OK("批量删除成功!");
    }
    /**
     * é€šè¿‡id查询
     *
     * @param id
     * @return
     */
    @AutoLog(value = "设备程序执行结束标志表-通过id查询")
    @ApiOperation(value = "设备程序执行结束标志表-通过id查询", notes = "设备程序执行结束标志表-通过id查询")
    @GetMapping(value = "/queryById")
    public Result<?> queryById(@RequestParam(name = "id", required = true) String id) {
        MdcEquipmentOverFlag mdcEquipmentOverFlag = mdcEquipmentOverFlagService.getById(id);
        return Result.OK(mdcEquipmentOverFlag);
    }
    /**
     * å¯¼å‡ºexcel
     *
     * @param request
     * @param mdcEquipmentOverFlag
     */
    @RequestMapping(value = "/exportXls")
    public ModelAndView exportXls(HttpServletRequest request, MdcEquipmentOverFlag mdcEquipmentOverFlag) {
        return super.exportXls(request, mdcEquipmentOverFlag, MdcEquipmentOverFlag.class, "设备程序执行结束标志表");
    }
    /**
     * é€šè¿‡excel导入数据
     *
     * @param request
     * @param response
     * @return
     */
    @RequestMapping(value = "/importExcel", method = RequestMethod.POST)
    public Result<?> importExcel(HttpServletRequest request, HttpServletResponse response) {
        return super.importExcel(request, response, MdcEquipmentOverFlag.class);
    }
}
lxzn-module-mdc/src/main/java/org/jeecg/modules/mdc/controller/MdcProcessCountController.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,45 @@
package org.jeecg.modules.mdc.controller;
import io.swagger.annotations.Api;
import lombok.extern.slf4j.Slf4j;
import org.jeecg.common.system.base.controller.JeecgController;
import org.jeecg.modules.mdc.entity.MdcProcessCount;
import org.jeecg.modules.mdc.service.IProcessCountService;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import javax.annotation.Resource;
/**
 * @author Lius
 * @Description: mdc设备加工个数表
 * @date 2023/12/7 16:50
 */
@Slf4j
@Api(tags = "mdc设备加工个数表")
@RestController
@RequestMapping("/mdc/mdcProcessCount")
public class MdcProcessCountController extends JeecgController<MdcProcessCount, IProcessCountService> {
    @Resource
    private IProcessCountService processCountService;
/*    *//**
     * åˆ†é¡µåˆ—表查询
     *
     * @param mdcProcessCountVo
     * @param pageNo
     * @param pageSize
     * @param req
     * @return
     *//*
    @AutoLog(value = "mdc设备加工个数表-分页列表查询")
    @ApiOperation(value = "mdc设备加工个数表-分页列表查询", notes = "mdc设备加工个数表-分页列表查询")
    @GetMapping(value = "/list")
    public Result<?> queryPageList(MdcProcessCountVo mdcProcessCountVo,
                                   @RequestParam(name = "pageNo", defaultValue = "1") Integer pageNo,
                                   @RequestParam(name = "pageSize", defaultValue = "10") Integer pageSize,
                                   HttpServletRequest req) {
    }*/
}
lxzn-module-mdc/src/main/java/org/jeecg/modules/mdc/controller/MdcWorkshopInfoController.java
@@ -8,7 +8,6 @@
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import lombok.extern.slf4j.Slf4j;
import org.apache.commons.lang3.StringUtils;
import org.jeecg.common.api.vo.Result;
import org.jeecg.common.aspect.annotation.AutoLog;
import org.jeecg.common.system.base.controller.JeecgController;
@@ -229,7 +228,8 @@
        try {
            String workshopId = mdcWorkshopEquipmentVo.getWorkshopId();
            for (String equipmentId : mdcWorkshopEquipmentVo.getEquipmentIdList()) {
                if (!StringUtils.isEmpty(equipmentId) && !"null".equals(equipmentId)) {
                List<MdcEquipment> list = mdcEquipmentService.list(new LambdaQueryWrapper<MdcEquipment>().eq(MdcEquipment::getEquipmentId, equipmentId));
                if (list != null && !list.isEmpty()) {
                    MdcWorkshopEquipment mdcWorkshopEquipment = new MdcWorkshopEquipment();
                    mdcWorkshopEquipment.setWorkshopId(workshopId);
                    mdcWorkshopEquipment.setEquipmentId(equipmentId);
lxzn-module-mdc/src/main/java/org/jeecg/modules/mdc/entity/MdcEquipmentOverFlag.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,47 @@
package org.jeecg.modules.mdc.entity;
import com.baomidou.mybatisplus.annotation.TableName;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import lombok.EqualsAndHashCode;
import lombok.experimental.Accessors;
import org.jeecg.common.system.base.entity.JeecgEntity;
import org.jeecgframework.poi.excel.annotation.Excel;
import java.io.Serializable;
/**
 * @Description: è®¾å¤‡ç¨‹åºæ‰§è¡Œç»“束标志表
 * @Author: Lius
 * @Date: 2023-12-05
 * @Version: V1.0
 */
@Data
@TableName("mdc_equipment_over_flag")
@EqualsAndHashCode(callSuper = false)
@Accessors(chain = true)
@ApiModel(value = "mdc_equipment_over_flag对象", description = "设备程序执行结束标志表")
public class MdcEquipmentOverFlag extends JeecgEntity implements Serializable {
    /**
     * é©±åŠ¨ç±»åž‹
     */
    @Excel(name = "驱动类型", width = 15)
    @ApiModelProperty(value = "驱动类型")
    private String driveType;
    /**
     * ç»“束标志
     */
    @Excel(name = "结束标志", width = 15)
    @ApiModelProperty(value = "结束标志")
    private String overFlag;
    /**
     * åˆ¤æ–­ç»“束字段
     */
    @Excel(name = "判断结束字段", width = 15)
    @ApiModelProperty(value = "判断结束字段")
    private String overField;
}
lxzn-module-mdc/src/main/java/org/jeecg/modules/mdc/entity/MdcProcessCount.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,84 @@
package org.jeecg.modules.mdc.entity;
import com.baomidou.mybatisplus.annotation.TableName;
import com.fasterxml.jackson.annotation.JsonFormat;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import lombok.EqualsAndHashCode;
import lombok.experimental.Accessors;
import org.jeecg.common.system.base.entity.JeecgEntity;
import org.jeecgframework.poi.excel.annotation.Excel;
import org.springframework.format.annotation.DateTimeFormat;
import java.io.Serializable;
import java.util.Date;
/**
 * @author Lius
 * @date 2023/11/27 10:57
 */
@Data
@TableName("mdc_process_count")
@EqualsAndHashCode(callSuper = false)
@Accessors(chain = true)
@ApiModel(value = "mdc_process_count对象", description = "设备加工工件个数表")
public class MdcProcessCount extends JeecgEntity implements Serializable {
    private static final long serialVersionUID = 370474448269945391L;
    /**
     * è®¾å¤‡ç¼–号
     */
    @Excel(name = "设备编号", width = 15)
    @ApiModelProperty(value = "设备编号")
    private String equipmentId;
    /**
     * è®¾å¤‡åç§°
     */
    @Excel(name = "设备名称", width = 20)
    @ApiModelProperty(value = "设备名称")
    private String equipmentName;
    /**
     * æ—¥æœŸ
     */
    @Excel(name = "日期", width = 20, format = "yyyy-MM-dd")
    @JsonFormat(timezone = "GMT+8", pattern = "yyyy-MM-dd")
    @DateTimeFormat(pattern = "yyyy-MM-dd")
    @ApiModelProperty(value = "日期")
    private String theDate;
    /**
     * å¼€å§‹æ—¶é—´
     */
    @Excel(name = "开始时间", width = 20, format = "yyyy-MM-dd")
    @JsonFormat(timezone = "GMT+8", pattern = "yyyy-MM-dd")
    @DateTimeFormat(pattern = "yyyy-MM-dd")
    @ApiModelProperty(value = "开始时间")
    private Date startTime;
    /**
     * ç»“束时间
     */
    @Excel(name = "结束时间", width = 20, format = "yyyy-MM-dd")
    @JsonFormat(timezone = "GMT+8", pattern = "yyyy-MM-dd")
    @DateTimeFormat(pattern = "yyyy-MM-dd")
    @ApiModelProperty(value = "结束时间")
    private Date endTime;
    /**
     * æ—¶é•¿
     */
    @Excel(name = "时长", width = 20)
    @ApiModelProperty(value = "时长")
    private Long duration;
    /**
     * ç¨‹åºå·
     */
    @Excel(name = "程序号", width = 20)
    @ApiModelProperty(value = "程序号")
    private String sequenceNumber;
}
lxzn-module-mdc/src/main/java/org/jeecg/modules/mdc/job/RunningProcessCountJob.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,63 @@
package org.jeecg.modules.mdc.job;
import lombok.extern.slf4j.Slf4j;
import org.jeecg.common.util.DateUtils;
import org.jeecg.modules.mdc.service.IProcessCountService;
import org.jeecg.modules.mdc.util.ThrowableUtil;
import org.jeecg.modules.quartz.entity.QuartzJob;
import org.jeecg.modules.quartz.entity.SysQuartzLog;
import org.jeecg.modules.quartz.service.IQuartzJobService;
import org.jeecg.modules.quartz.service.ISysQuartzLogService;
import org.jeecg.modules.system.service.ISysAnnouncementService;
import org.quartz.*;
import javax.annotation.Resource;
import java.util.Date;
import java.util.List;
/**
 * @author Lius
 * @date 2023/11/22 10:17
 */
@PersistJobDataAfterExecution
@DisallowConcurrentExecution
@Slf4j
public class RunningProcessCountJob implements Job {
    @Resource
    private IQuartzJobService quartzJobService;
    @Resource
    private ISysQuartzLogService sysQuartzLogService;
    @Resource
    private ISysAnnouncementService sysAnnouncementService;
    @Resource
    private IProcessCountService processCountService;
    @Override
    public void execute(JobExecutionContext jobExecutionContext) throws JobExecutionException {
        SysQuartzLog quartzLog = new SysQuartzLog();
        quartzLog.setCreateTime(new Date());
        List<QuartzJob> byJobClassName = this.quartzJobService.findByJobClassName(this.getClass().getName());
        if (byJobClassName != null && !byJobClassName.isEmpty()) {
            quartzLog.setJobId(byJobClassName.get(0).getId());
        }
        log.info("计算加工工件个数和时间任务 RunningProcessCountJob start!  æ—¶é—´:" + DateUtils.now());
        long startTime = System.currentTimeMillis();
        try {
            processCountService.runningProcessCount();
            quartzLog.setIsSuccess(0);
        } catch (Exception e) {
            quartzLog.setIsSuccess(-1);
            quartzLog.setExceptionDetail(ThrowableUtil.getStackTrace(e));
            // å‘送消息通知
            sysAnnouncementService.jobSendMessage("计算加工工件个数和时间任务", quartzLog.getExceptionDetail());
        }
        long endTime = System.currentTimeMillis();
        quartzLog.setExecutionTime(Integer.parseInt(String.valueOf(endTime - startTime)));
        sysQuartzLogService.save(quartzLog);
    }
}
lxzn-module-mdc/src/main/java/org/jeecg/modules/mdc/mapper/EquipmentLogMapper.java
@@ -14,4 +14,6 @@
    EquipmentLog getRow(@Param("equipmentid") String equipmentid, @Param("startTime") Date startTime);
    Integer selectEquipmentOporation(@Param("equipmentId") String equipmentId);
}
lxzn-module-mdc/src/main/java/org/jeecg/modules/mdc/mapper/EquipmentWorklineMapper.java
@@ -4,6 +4,7 @@
import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Param;
import org.apache.ibatis.annotations.Select;
import org.jeecg.modules.mdc.dto.EquipmentMachingDto;
import org.jeecg.modules.mdc.dto.MdcEquipmentDto;
import org.springframework.stereotype.Repository;
@@ -36,4 +37,10 @@
    @InterceptorIgnore(tenantLine = "1")
    @Select("SELECT COUNT(*) FROM SysObjects WHERE XType='U' AND name = '${tableName}'")
    Integer isTableExist(@Param("tableName") String tableName);
    @InterceptorIgnore(tenantLine = "1")
    List<Map<String, Object>> findRunningData(@Param("tableName") String saveTableName, @Param("startTime") Date startTime, @Param("endTime") Date endTime);
    @InterceptorIgnore(tenantLine = "1")
    List<EquipmentMachingDto> getEquipProgramNum(@Param("tableName") String saveTableName, @Param("startTime") Date startTime, @Param("endTime") Date endTime);
}
lxzn-module-mdc/src/main/java/org/jeecg/modules/mdc/mapper/MdcDeviceCalendarMapper.java
@@ -28,4 +28,7 @@
    List<String> findShiftSort(@Param("equipmentId") String equipmentId, @Param("validDate") String validDate);
    Integer computeShiftTimeCount(@Param("equipmentId") String equipmentId, @Param("validDate") String validDate);
    MdcDeviceCalendar getFirstData(@Param("equipmentId") String equipmentId);
}
lxzn-module-mdc/src/main/java/org/jeecg/modules/mdc/mapper/MdcEquipmentOverFlagMapper.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,15 @@
package org.jeecg.modules.mdc.mapper;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import org.jeecg.modules.mdc.entity.MdcEquipmentOverFlag;
/**
 * @Description: è®¾å¤‡ç¨‹åºæ‰§è¡Œç»“束标志表
 * @Author: Lius
 * @Date:   2023-12-05
 * @Version: V1.0
 */
public interface MdcEquipmentOverFlagMapper extends BaseMapper<MdcEquipmentOverFlag> {
}
lxzn-module-mdc/src/main/java/org/jeecg/modules/mdc/mapper/MdcEquipmentRunningSectionMapper.java
@@ -65,4 +65,9 @@
     * æ ¹æ®æ—¥æœŸæŸ¥è¯¢æ•°é‡
     */
    Integer findAlarmCountByDate(@Param("startDate") String startDate, @Param("endDate") String endDate, @Param("vo") MdcAlarmAnalyzeQueryVo vo);
    /**
     * æŸ¥è¯¢æ—¶é—´æ®µå†…运行数据
     */
    List<MdcEquipmentRunningSection> selectRunningData(@Param("equipmentId") String equipmentId, @Param("startDate") Date startDate, @Param("endDate") Date endDate);
}
lxzn-module-mdc/src/main/java/org/jeecg/modules/mdc/mapper/MdcProcessCountMapper.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,13 @@
package org.jeecg.modules.mdc.mapper;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import org.apache.ibatis.annotations.Param;
import org.jeecg.modules.mdc.entity.MdcProcessCount;
/**
 * @author Lius
 * @date 2023/11/27 11:07
 */
public interface MdcProcessCountMapper extends BaseMapper<MdcProcessCount> {
    MdcProcessCount getLastData(@Param("equipmentId") String equipmentId);
}
lxzn-module-mdc/src/main/java/org/jeecg/modules/mdc/mapper/MdcTorqueConfigMapper.java
@@ -31,4 +31,6 @@
     * @return
     */
    IPage<MdcTorqueConfig> pageList(IPage<MdcTorqueConfig> pageData, @Param("mdcTorqueConfig") MdcTorqueConfig mdcTorqueConfig);
    MdcTorqueConfig findLast(@Param("equipmentId") String equipmentId);
}
lxzn-module-mdc/src/main/java/org/jeecg/modules/mdc/mapper/xml/EquipmentLogMapper.xml
@@ -5,4 +5,8 @@
    <select id="getRow" resultType="org.jeecg.modules.mdc.entity.EquipmentLog">
        SELECT top 1 * FROM EquipmentLog WHERE EquipmentID = #{ equipmentid } AND CollectTime &lt;= #{ startTime } AND Oporation in ('0','1','2','3') ORDER BY CollectTime ASC
    </select>
    <select id="selectEquipmentOporation" resultType="java.lang.Integer">
        SELECT TOP 1 Oporation FROM EquipmentLog WHERE EquipmentID = #{ equipmentId } ORDER BY CollectTime DESC
    </select>
</mapper>
lxzn-module-mdc/src/main/java/org/jeecg/modules/mdc/mapper/xml/EquipmentWorklineMapper.xml
@@ -5,4 +5,12 @@
    <select id="getMacingDataList" resultType="org.jeecg.modules.mdc.dto.MdcEquipmentDto">
        select top 1 [${tableName}].* from [${tableName}] order by CollectTime  desc
    </select>
    <select id="findRunningData" resultType="java.util.Map">
        select [${tableName}].* from [${tableName}] where CollectTime between #{ startTime } AND #{ endTime } order by CollectTime  asc
    </select>
    <select id="getEquipProgramNum" resultType="org.jeecg.modules.mdc.dto.EquipmentMachingDto">
        select Programnumber,CollectTime from [${tableName}] where CollectTime &gt; #{startTime} and CollectTime &lt;= #{endTime} and Programnumber is not null
    </select>
</mapper>
lxzn-module-mdc/src/main/java/org/jeecg/modules/mdc/mapper/xml/MdcDeviceCalendarMapper.xml
@@ -52,12 +52,15 @@
            t3.sleep_start_date,
            t3.sleep_end_date,
            t3.is_day_span,
            t4.equipment_name
            t4.equipment_name,
            t5.start_time overtimeStartTime,
            t5.end_time overtimeEndTime
        FROM
            mdc_device_calendar t1
            LEFT JOIN mdc_shift t2 ON t1.shift_id = t2.id
            LEFT JOIN mdc_shift_sub t3 ON t1.shift_sub_id = t3.id
            LEFT JOIN mdc_equipment t4 ON t1.equipment_id = t4.equipment_id
            LEFT JOIN mdc_equipment_overtime t5 ON t5.calendar_id = t1.id
        <where>
            <if test="equipmentId != null and equipmentId != ''">
                AND t4.equipment_id = #{ equipmentId }
@@ -117,4 +120,8 @@
            AND equipment_id = #{ equipmentId }
    </select>
    <select id="getFirstData" resultType="org.jeecg.modules.mdc.entity.MdcDeviceCalendar">
        SELECT TOP 1 * FROM mdc_device_calendar WHERE equipment_id = #{ equipmentId } ORDER BY effective_date ASC
    </select>
</mapper>
lxzn-module-mdc/src/main/java/org/jeecg/modules/mdc/mapper/xml/MdcEfficiencyReportMapper.xml
@@ -25,6 +25,9 @@
        WHERE
            t1.the_date &lt;= #{ vo.endTime }
            AND t1.the_date &gt;= #{ vo.startTime }
        <if test="vo.equipmentType != null and vo.equipmentType != '' ">
            AND t2.equipment_type = #{ vo.equipmentType }
        </if>
        <if test="vo.equipmentIdList != null and vo.equipmentIdList.size() > 0 ">
            AND t2.equipment_id IN
            <foreach collection="vo.equipmentIdList" item="id" index="index" open="(" close=")" separator=",">
@@ -60,6 +63,9 @@
        WHERE
            t1.the_date &lt;= #{ vo.endTime }
            AND t1.the_date &gt;= #{ vo.startTime }
        <if test="vo.equipmentType != null and vo.equipmentType != '' ">
            AND t2.equipment_type = #{ vo.equipmentType }
        </if>
        <if test="vo.equipmentIdList != null and vo.equipmentIdList.size() > 0 ">
            AND t2.equipment_id IN
            <foreach collection="vo.equipmentIdList" item="id" index="index" open="(" close=")" separator=",">
@@ -101,6 +107,9 @@
            <if test="vo.shiftSubId != null and vo.shiftSubId != ''">
                AND t1.shift_sub_id = #{ vo.shiftSubId }
            </if>
            <if test="vo.equipmentType != null and vo.equipmentType != '' ">
                AND t2.equipment_type = #{ vo.equipmentType }
            </if>
        </where>
        GROUP BY
            t2.equipment_id,
lxzn-module-mdc/src/main/java/org/jeecg/modules/mdc/mapper/xml/MdcEquipmentMapper.xml
@@ -168,7 +168,7 @@
                #{id}
            </foreach>
        </where>
        ORDER BY me.equipment_id
        ORDER BY sd.depart_order
    </select>
    <!--根据设备编号查询设备信息和产线信息-->
@@ -191,7 +191,7 @@
                #{id}
            </foreach>
        </where>
        ORDER BY me.equipment_id
        ORDER BY mp.production_order
    </select>
    <!--根据大屏车间id查询设备列表-->
lxzn-module-mdc/src/main/java/org/jeecg/modules/mdc/mapper/xml/MdcEquipmentOverFlagMapper.xml
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,5 @@
<?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.MdcEquipmentOverFlagMapper">
</mapper>
lxzn-module-mdc/src/main/java/org/jeecg/modules/mdc/mapper/xml/MdcEquipmentRunningSectionMapper.xml
@@ -125,5 +125,19 @@
        </where>
    </select>
    <!--查询时间段内运行数据-->
    <select id="selectRunningData" resultType="org.jeecg.modules.mdc.entity.MdcEquipmentRunningSection">
        SELECT
            *
        FROM
            mdc_equipment_running_section
        WHERE
            equipment_id = #{ equipmentId }
          AND status = '3'
          AND  (start_time &lt;= #{ endDate } AND end_time &gt;= #{ startDate })
        ORDER BY
            start_time
    </select>
</mapper>
lxzn-module-mdc/src/main/java/org/jeecg/modules/mdc/mapper/xml/MdcProcessCountMapper.xml
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,8 @@
<?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.MdcProcessCountMapper">
    <select id="getLastData" resultType="org.jeecg.modules.mdc.entity.MdcProcessCount">
        SELECT TOP 1 * FROM mdc_process_count WHERE equipment_id = #{equipmentId} ORDER BY the_date DESC
    </select>
</mapper>
lxzn-module-mdc/src/main/java/org/jeecg/modules/mdc/mapper/xml/MdcTorqueConfigMapper.xml
@@ -28,4 +28,15 @@
            ORDER BY torque_date ASC
        </where>
    </select>
    <select id="findLast" resultType="org.jeecg.modules.mdc.entity.MdcTorqueConfig">
        SELECT TOP
            1 *
        FROM
            mdc_torque_config
        WHERE
            equipment_id = #{ equipmentId }
        ORDER BY
            torque_date DESC
    </select>
</mapper>
lxzn-module-mdc/src/main/java/org/jeecg/modules/mdc/service/IEquipmentLogService.java
@@ -26,4 +26,6 @@
     * èŽ·å–è®¾å¤‡æŸä¸ªæ—¶é—´ç‚¹ä¹‹åŽçš„æœ€æ–°ä¸€æ¡æ•°æ®
     */
    EquipmentLog getRow(String equipmentid, Date startTime);
    Integer selectEquipmentOporation(String equipmentId);
}
lxzn-module-mdc/src/main/java/org/jeecg/modules/mdc/service/IEquipmentWorkLineService.java
@@ -5,6 +5,7 @@
import java.util.Date;
import java.util.List;
import java.util.Map;
/**
 * @author: LiuS
@@ -25,4 +26,19 @@
     * åˆ¤æ–­è¡¨æ˜¯å¦å­˜åœ¨
     */
    Boolean isTableExist(String tableName);
    /**
     * æŸ¥è¯¢ä¸€æ®µæ—¶é—´å†…的数据
     */
    List<Map<String, Object>> findRunningData(String tableName, Date startTime, Date endTime);
    /**
     * æŸ¥æ‰¾æ³•兰克设备运行的程序号
     * @param drivetype
     * @param equipmentid
     * @param startTime
     * @param endTime
     * @return
     */
    List<EquipmentMachingDto> getEquipProgramNum(String drivetype, String equipmentid, Date startTime, Date endTime);
}
lxzn-module-mdc/src/main/java/org/jeecg/modules/mdc/service/IMdcDeviceCalendarService.java
@@ -70,4 +70,5 @@
     */
    void generateDeviceCalendar();
    MdcDeviceCalendar getFirstData(String equipmentId);
}
lxzn-module-mdc/src/main/java/org/jeecg/modules/mdc/service/IMdcEquipmentOverFlagService.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,15 @@
package org.jeecg.modules.mdc.service;
import com.baomidou.mybatisplus.extension.service.IService;
import org.jeecg.modules.mdc.entity.MdcEquipmentOverFlag;
/**
 * @Description: è®¾å¤‡ç¨‹åºæ‰§è¡Œç»“束标志表
 * @Author: Lius
 * @Date: 2023-12-05
 * @Version: V1.0
 */
public interface IMdcEquipmentOverFlagService extends IService<MdcEquipmentOverFlag> {
}
lxzn-module-mdc/src/main/java/org/jeecg/modules/mdc/service/IMdcEquipmentRunningSectionService.java
@@ -77,4 +77,9 @@
     * æ ¹æ®æ—¥æœŸæŸ¥è¯¢æ¬¡æ•°
     */
    Integer findAlarmCountByDate(String startDate, String endDate, MdcAlarmAnalyzeQueryVo vo);
    /**
     * æŸ¥è¯¢æ—¶é—´æ®µå†…运行数据
     */
    List<MdcEquipmentRunningSection> selectRunningData(String equipmentId, Date startDate, Date endDate);
}
lxzn-module-mdc/src/main/java/org/jeecg/modules/mdc/service/IMdcEquipmentService.java
@@ -169,4 +169,5 @@
     */
    IPage<MdcEquipment> getEquipmentByWorkshopId(Page<MdcEquipment> page, WorkshopEquipmentVo workshopEquipmentVo);
    List<String> listEquipmentId(String equipmentType, List<String> equipmentIdList);
}
lxzn-module-mdc/src/main/java/org/jeecg/modules/mdc/service/IProcessCountService.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,17 @@
package org.jeecg.modules.mdc.service;
import com.baomidou.mybatisplus.extension.service.IService;
import org.jeecg.modules.mdc.entity.MdcProcessCount;
/**
 * @author Lius
 * @date 2023/11/23 10:17
 */
public interface IProcessCountService extends IService<MdcProcessCount> {
    /**
     * è®¡ç®—加工工件个数和时间任务
     */
    void runningProcessCount();
}
lxzn-module-mdc/src/main/java/org/jeecg/modules/mdc/service/impl/EquipmentLogServiceImpl.java
@@ -48,4 +48,9 @@
    public EquipmentLog getRow(String equipmentid, Date startTime) {
        return this.baseMapper.getRow(equipmentid, startTime);
    }
    @Override
    public Integer selectEquipmentOporation(String equipmentId) {
        return this.baseMapper.selectEquipmentOporation(equipmentId);
    }
}
lxzn-module-mdc/src/main/java/org/jeecg/modules/mdc/service/impl/EquipmentWorkLineServiceImpl.java
@@ -45,6 +45,16 @@
        return count != 0;
    }
    @Override
    public List<Map<String, Object>> findRunningData(String tableName, Date startTime, Date endTime) {
        return equipmentWorkLineMapper.findRunningData(tableName, startTime, endTime);
    }
    @Override
    public List<EquipmentMachingDto> getEquipProgramNum(String drivetype, String equipmentid, Date startTime, Date endTime) {
        return equipmentWorkLineMapper.getEquipProgramNum(drivetype + "_" + equipmentid, startTime, endTime);
    }
    private List<EquipmentMachingDto> convertData(List<Map<String, Object>> list) {
        SimpleDateFormat df = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss.SSS");
        List<EquipmentMachingDto> dto = new ArrayList<>();
lxzn-module-mdc/src/main/java/org/jeecg/modules/mdc/service/impl/MdcDeviceCalendarServiceImpl.java
@@ -5,10 +5,7 @@
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import org.apache.commons.lang3.StringUtils;
import org.jeecg.modules.mdc.entity.MdcDeviceCalendar;
import org.jeecg.modules.mdc.entity.MdcEquipment;
import org.jeecg.modules.mdc.entity.MdcShiftSub;
import org.jeecg.modules.mdc.entity.MdcVacationManagement;
import org.jeecg.modules.mdc.entity.*;
import org.jeecg.modules.mdc.mapper.MdcDeviceCalendarMapper;
import org.jeecg.modules.mdc.service.IMdcDeviceCalendarService;
import org.jeecg.modules.mdc.service.IMdcEquipmentService;
@@ -119,22 +116,11 @@
    public List<MdcDeviceCalendarVo> listByEquipmentAndDate(String equipmentId, List<String> stringDates) {
        List<MdcDeviceCalendarVo> result = new ArrayList<>();
        try {
            //查询默认班制
//            List<MdcDeviceCalendarVo> acquiesceShift = this.baseMapper.findAcquiesceShift();
            for (String stringDate : stringDates) {
                List<MdcDeviceCalendarVo> mdcDeviceCalendarVos = this.baseMapper.listByEquipmentAndDate(equipmentId, stringDate);
                if (mdcDeviceCalendarVos != null && !mdcDeviceCalendarVos.isEmpty()) {
                    result.addAll(mdcDeviceCalendarVos);
                }
//                else {
//                    acquiesceShift.forEach(mdcDeviceCalendarVo -> {
//                        mdcDeviceCalendarVo.setEquipmentId(equipmentId);
//                        mdcDeviceCalendarVo.setEffectiveDate(stringDate);
//                    });
//                    // è®¾ç½®é»˜è®¤ç­åˆ¶
//                    result.addAll(acquiesceShift);
//                }
            }
        } catch (Exception e) {
            e.printStackTrace();
@@ -218,4 +204,9 @@
        }
    }
    @Override
    public MdcDeviceCalendar getFirstData(String equipmentId) {
        return this.baseMapper.getFirstData(equipmentId);
    }
}
lxzn-module-mdc/src/main/java/org/jeecg/modules/mdc/service/impl/MdcEfficiencyReportServiceImpl.java
@@ -19,7 +19,6 @@
import javax.annotation.Resource;
import java.math.BigDecimal;
import java.text.Collator;
import java.time.LocalDate;
import java.time.format.DateTimeFormatter;
import java.time.temporal.ChronoUnit;
@@ -97,6 +96,15 @@
        if (vo.getEquipmentIdList() == null || vo.getEquipmentIdList().isEmpty()) {
            result.setMdcEfficiencyList(listDtos);
        } else {
            if (StringUtils.isNotEmpty(vo.getEquipmentType())) {
                List<String> equipmentList = mdcEquipmentService.listEquipmentId(vo.getEquipmentType(), vo.getEquipmentIdList());
                if (equipmentList != null && !equipmentList.isEmpty()) {
                    vo.setEquipmentIdList(equipmentList);
                } else {
                    result.setMdcEfficiencyList(listDtos);
                    return result;
                }
            }
            // æŸ¥è¯¢åˆ©ç”¨çŽ‡æ•°æ®
            List<MdcEfficiencyDto> efficiencyList = mdcEfficiencyReportMapper.efficiencyList(vo);
            // åˆ©ç”¨çŽ‡ç­‰çº§
@@ -107,7 +115,7 @@
                // éƒ¨é—¨å±‚级
                List<MdcEquDepDto> equipmentList = mdcEquipmentService.findEquDepList(vo.getEquipmentIdList());
                // æŸ¥è¯¢æ‰€æœ‰éƒ¨é—¨ä¿¡æ¯
                List<SysDepart> departList = sysDepartService.list(new LambdaQueryWrapper<SysDepart>().ne(SysDepart::getDelFlag, CommonConstant.DEL_FLAG_1.toString()).orderByAsc(SysDepart::getDepartName));
                List<SysDepart> departList = sysDepartService.list(new LambdaQueryWrapper<SysDepart>().ne(SysDepart::getDelFlag, CommonConstant.DEL_FLAG_1.toString()).orderByAsc(SysDepart::getDepartOrder));
                for (MdcEquDepDto mdcEquDepDto : equipmentList) {
                    MdcEfficiencyListDto mdcEfficiencyListDto = new MdcEfficiencyListDto();
@@ -169,7 +177,7 @@
                // äº§çº¿å±‚级
                List<MdcEquProDto> equipmentList = mdcEquipmentService.findEquProList(vo.getEquipmentIdList());
                // æŸ¥è¯¢æ‰€æœ‰äº§çº¿ä¿¡æ¯
                List<MdcProduction> productionList = mdcProductionService.list(new LambdaQueryWrapper<MdcProduction>().ne(MdcProduction::getDelFlag, CommonConstant.DEL_FLAG_1.toString()));
                List<MdcProduction> productionList = mdcProductionService.list(new LambdaQueryWrapper<MdcProduction>().ne(MdcProduction::getDelFlag, CommonConstant.DEL_FLAG_1.toString()).orderByAsc(MdcProduction::getProductionOrder));
                for (MdcEquProDto mdcEquProDto : equipmentList) {
                    MdcEfficiencyListDto mdcEfficiencyListDto = new MdcEfficiencyListDto();
@@ -227,7 +235,7 @@
                    listDtos.add(mdcEfficiencyListDto);
                }
            }
            listDtos.sort(((o1, o2) -> Collator.getInstance(Locale.TRADITIONAL_CHINESE).compare(o1.getLevel3(), o2.getLevel3())));
            //listDtos.sort(((o1, o2) -> Collator.getInstance(Locale.TRADITIONAL_CHINESE).compare(o1.getLevel3(), o2.getLevel3())));
            result.setMdcEfficiencyList(listDtos);
        }
@@ -277,6 +285,15 @@
        if (vo.getEquipmentIdList() == null || vo.getEquipmentIdList().isEmpty()) {
            result.setMdcEfficiencyList(listDtos);
        } else {
            if (StringUtils.isNotEmpty(vo.getEquipmentType())) {
                List<String> equipmentList = mdcEquipmentService.listEquipmentId(vo.getEquipmentType(), vo.getEquipmentIdList());
                if (equipmentList != null && !equipmentList.isEmpty()) {
                    vo.setEquipmentIdList(equipmentList);
                } else {
                    result.setMdcEfficiencyList(listDtos);
                    return result;
                }
            }
            // æŸ¥è¯¢åˆ©ç”¨çŽ‡æ•°æ®
            List<MdcEfficiencyDto> efficiencyList = mdcEfficiencyReportMapper.efficiencyPOList(vo);
            // åˆ©ç”¨çŽ‡ç­‰çº§
@@ -287,7 +304,7 @@
                // éƒ¨é—¨å±‚级
                List<MdcEquDepDto> equipmentList = mdcEquipmentService.findEquDepList(vo.getEquipmentIdList());
                // æŸ¥è¯¢æ‰€æœ‰éƒ¨é—¨ä¿¡æ¯
                List<SysDepart> departList = sysDepartService.list(new LambdaQueryWrapper<SysDepart>().ne(SysDepart::getDelFlag, CommonConstant.DEL_FLAG_1.toString()).orderByAsc(SysDepart::getDepartName));
                List<SysDepart> departList = sysDepartService.list(new LambdaQueryWrapper<SysDepart>().ne(SysDepart::getDelFlag, CommonConstant.DEL_FLAG_1.toString()).orderByAsc(SysDepart::getDepartOrder));
                for (MdcEquDepDto mdcEquDepDto : equipmentList) {
                    MdcEfficiencyListDto mdcEfficiencyListDto = new MdcEfficiencyListDto();
@@ -349,7 +366,7 @@
                // äº§çº¿å±‚级
                List<MdcEquProDto> equipmentList = mdcEquipmentService.findEquProList(vo.getEquipmentIdList());
                // æŸ¥è¯¢æ‰€æœ‰äº§çº¿ä¿¡æ¯
                List<MdcProduction> productionList = mdcProductionService.list(new LambdaQueryWrapper<MdcProduction>().ne(MdcProduction::getDelFlag, CommonConstant.DEL_FLAG_1.toString()));
                List<MdcProduction> productionList = mdcProductionService.list(new LambdaQueryWrapper<MdcProduction>().ne(MdcProduction::getDelFlag, CommonConstant.DEL_FLAG_1.toString()).orderByAsc(MdcProduction::getProductionOrder));
                for (MdcEquProDto mdcEquProDto : equipmentList) {
                    MdcEfficiencyListDto mdcEfficiencyListDto = new MdcEfficiencyListDto();
@@ -407,7 +424,7 @@
                    listDtos.add(mdcEfficiencyListDto);
                }
            }
            listDtos.sort(((o1, o2) -> Collator.getInstance(Locale.TRADITIONAL_CHINESE).compare(o1.getLevel3(), o2.getLevel3())));
//            listDtos.sort(((o1, o2) -> Collator.getInstance(Locale.TRADITIONAL_CHINESE).compare(o1.getLevel3(), o2.getLevel3())));
            result.setMdcEfficiencyList(listDtos);
        }
@@ -457,6 +474,15 @@
        if (vo.getEquipmentIdList() == null || vo.getEquipmentIdList().isEmpty()) {
            result.setMdcEfficiencyList(listDtos);
        } else {
            if (StringUtils.isNotEmpty(vo.getEquipmentType())) {
                List<String> equipmentList = mdcEquipmentService.listEquipmentId(vo.getEquipmentType(), vo.getEquipmentIdList());
                if (equipmentList != null && !equipmentList.isEmpty()) {
                    vo.setEquipmentIdList(equipmentList);
                } else {
                    result.setMdcEfficiencyList(listDtos);
                    return result;
                }
            }
            // ç­æ¬¡åˆ©ç”¨çŽ‡ç­‰çº§
            List<MdcUtilizationRate> mdcUtilizationRateList = mdcUtilizationRateService.listByType("bclyl");
            // ç­æ¬¡åˆ©ç”¨çŽ‡æ•°æ®
@@ -467,7 +493,7 @@
                // éƒ¨é—¨å±‚级
                List<MdcEquDepDto> equipmentList = mdcEquipmentService.findEquDepList(vo.getEquipmentIdList());
                // æŸ¥è¯¢æ‰€æœ‰éƒ¨é—¨ä¿¡æ¯
                List<SysDepart> departList = sysDepartService.list(new LambdaQueryWrapper<SysDepart>().ne(SysDepart::getDelFlag, CommonConstant.DEL_FLAG_1.toString()).orderByAsc(SysDepart::getDepartName));
                List<SysDepart> departList = sysDepartService.list(new LambdaQueryWrapper<SysDepart>().ne(SysDepart::getDelFlag, CommonConstant.DEL_FLAG_1.toString()).orderByAsc(SysDepart::getDepartOrder));
                // ç­æ¬¡åç§°æ˜¾ç¤ºå¤„理
                String shiftSubName = "";
                if (StringUtils.isBlank(vo.getShiftId())) {
@@ -550,7 +576,7 @@
                // äº§çº¿å±‚级
                List<MdcEquProDto> equipmentList = mdcEquipmentService.findEquProList(vo.getEquipmentIdList());
                // æŸ¥è¯¢æ‰€æœ‰äº§çº¿ä¿¡æ¯
                List<MdcProduction> productionList = mdcProductionService.list(new LambdaQueryWrapper<MdcProduction>().ne(MdcProduction::getDelFlag, CommonConstant.DEL_FLAG_1.toString()));
                List<MdcProduction> productionList = mdcProductionService.list(new LambdaQueryWrapper<MdcProduction>().ne(MdcProduction::getDelFlag, CommonConstant.DEL_FLAG_1.toString()).orderByAsc(MdcProduction::getProductionOrder));
                // ç­æ¬¡åç§°æ˜¾ç¤ºå¤„理
                String shiftSubName = "";
@@ -630,7 +656,7 @@
                    listDtos.add(mdcEfficiencyShiftListDto);
                }
            }
            listDtos.sort(((o1, o2) -> Collator.getInstance(Locale.TRADITIONAL_CHINESE).compare(o1.getLevel3(), o2.getLevel3())));
//            listDtos.sort(((o1, o2) -> Collator.getInstance(Locale.TRADITIONAL_CHINESE).compare(o1.getLevel3(), o2.getLevel3())));
            result.setMdcEfficiencyList(listDtos);
        }
        return result;
@@ -795,7 +821,7 @@
            }
        } else if (StringUtils.isNotEmpty(vo.getEquipmentId())) {
            // å•台设备信息
            vo.setEquipmentIdList(Collections.singletonList(vo.getEquipmentId()));
            vo.setEquipmentIdList(Arrays.asList(vo.getEquipmentId().split(",")));
        } else {
            // æŸ¥è¯¢ç”¨æˆ·æ‹¥æœ‰çš„æ‰€æœ‰è®¾å¤‡ä¿¡æ¯
            if ("2".equals(vo.getTypeTree())) {
lxzn-module-mdc/src/main/java/org/jeecg/modules/mdc/service/impl/MdcEquipmentOverFlagServiceImpl.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,19 @@
package org.jeecg.modules.mdc.service.impl;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import org.jeecg.modules.mdc.entity.MdcEquipmentOverFlag;
import org.jeecg.modules.mdc.mapper.MdcEquipmentOverFlagMapper;
import org.jeecg.modules.mdc.service.IMdcEquipmentOverFlagService;
import org.springframework.stereotype.Service;
/**
 * @Description: è®¾å¤‡ç¨‹åºæ‰§è¡Œç»“束标志表
 * @Author: Lius
 * @Date: 2023-12-05
 * @Version: V1.0
 */
@Service
public class MdcEquipmentOverFlagServiceImpl extends ServiceImpl<MdcEquipmentOverFlagMapper, MdcEquipmentOverFlag> implements IMdcEquipmentOverFlagService {
}
lxzn-module-mdc/src/main/java/org/jeecg/modules/mdc/service/impl/MdcEquipmentRunningSectionServiceImpl.java
@@ -480,9 +480,9 @@
            //获取running运行的日志记录
            List<MdcEquipmentRunningSection> list = this.equipmentRunningTracesLog(equipment.getEquipmentid());
            if (list != null && !list.isEmpty()) {
                //List<MdcEquipmentRunningSection> equipList = addSequenceNumber(list); //添加程序号
                this.ergodicTrim(list);
                super.saveBatch(list);
                List<MdcEquipmentRunningSection> equipList = addSequenceNumber(list); //添加程序号
                this.ergodicTrim(equipList);
                super.saveBatch(equipList);
            }
            //获取报警的日志记录
            List<MdcEquipmentRunningSection> errorList = this.equipmentRunningTracesErrorLog(equipment.getEquipmentid());
@@ -496,6 +496,37 @@
                this.dataSynchronizationHandler(list, errorList);
            }
        }
    }
    /**
     * è®¾å¤‡è¿è¡Œæ—¥å¿—添加程序号
     *
     * @param list
     * @return
     */
    public List<MdcEquipmentRunningSection> addSequenceNumber(List<MdcEquipmentRunningSection> list) {
        if (list == null || list.size() < 1) {
            return Collections.emptyList();
        }
        Equipment equip = null;
        for (MdcEquipmentRunningSection e : list) {
            if (e.getStatus() == 3) {
                equip = equipmentService.getOne(new LambdaQueryWrapper<Equipment>().eq(Equipment::getEquipmentid, e.getEquipmentId()));
                if (StringUtils.isNotBlank(equip.getDrivetype()) && equip.getDrivetype().startsWith("FANUC")) {
                    List<EquipmentMachingDto> esList = equipmentWorkLineService.getEquipProgramNum(equip.getDrivetype(), equip.getEquipmentid(),
                            e.getStartTime(), e.getEndTime());
                    if (esList != null && esList.size() > 1) {
                        e.setSequenceNumber(esList.get(0).getProgramnumber());
                    }
                } else if (StringUtils.isNotBlank(equip.getDrivetype()) && equip.getDrivetype().startsWith("SIEMENS")) {
                    List<EquipmentMachingDto> esList = equipmentWorkLineService.getEquipmentSequencenumber(equip.getDrivetype() + "_" + equip.getEquipmentid(), e.getStartTime(), e.getEndTime());
                    if (esList != null && esList.size() > 1) {
                        e.setSequenceNumber(esList.get(0).getSequencenumber());
                    }
                }
            }
        }
        return list;
    }
    /**
@@ -655,6 +686,11 @@
        return this.baseMapper.findAlarmCountByDate(startDate, endDate, vo);
    }
    @Override
    public List<MdcEquipmentRunningSection> selectRunningData(String equipmentId, Date startDate, Date endDate) {
        return this.baseMapper.selectRunningData(equipmentId, startDate, endDate);
    }
    private Map<String, List<MdcEquipmentRunningSectionDto>> logCharts(MdcEquipmentRunningSectionVo equipmentRunningSectionVo, String date) {
        Map<String, List<MdcEquipmentRunningSectionDto>> map = new HashMap<>();
        List<MdcEquipmentRunningSectionDto> normal = new ArrayList<>();
lxzn-module-mdc/src/main/java/org/jeecg/modules/mdc/service/impl/MdcEquipmentServiceImpl.java
@@ -11,23 +11,15 @@
import org.jeecg.modules.mdc.dto.MdcEquDepDto;
import org.jeecg.modules.mdc.dto.MdcEquProDto;
import org.jeecg.modules.mdc.dto.MdcEquipmentDto;
import org.jeecg.modules.mdc.entity.ControlSystem;
import org.jeecg.modules.mdc.entity.MdcDriveTypeParamConfig;
import org.jeecg.modules.mdc.entity.MdcEquipment;
import org.jeecg.modules.mdc.entity.MdcEquipmentMonitor;
import org.jeecg.modules.mdc.entity.*;
import org.jeecg.modules.mdc.mapper.MdcEquipmentMapper;
import org.jeecg.modules.mdc.mapper.MdcTorqueConfigMapper;
import org.jeecg.modules.mdc.model.MdcEquipmentTree;
import org.jeecg.modules.mdc.service.IControlSystemService;
import org.jeecg.modules.mdc.service.IEquipmentWorkLineService;
import org.jeecg.modules.mdc.service.IMdcDriveTypeParamConfigService;
import org.jeecg.modules.mdc.service.IMdcEquipmentService;
import org.jeecg.modules.mdc.service.*;
import org.jeecg.modules.mdc.util.DateUtils;
import org.jeecg.modules.mdc.util.FindsEquipmentDepartUtil;
import org.jeecg.modules.mdc.util.FindsEquipmentProductionUtil;
import org.jeecg.modules.mdc.vo.MdcEquipmentDepVo;
import org.jeecg.modules.mdc.vo.MdcEquipmentProVo;
import org.jeecg.modules.mdc.vo.MdcEquipmentVo;
import org.jeecg.modules.mdc.vo.WorkshopEquipmentVo;
import org.jeecg.modules.mdc.vo.*;
import org.jeecg.modules.system.entity.MdcEquipmentDepart;
import org.jeecg.modules.system.entity.MdcProduction;
import org.jeecg.modules.system.entity.MdcProductionEquipment;
@@ -43,6 +35,8 @@
import org.springframework.transaction.annotation.Transactional;
import javax.annotation.Resource;
import java.math.BigDecimal;
import java.math.RoundingMode;
import java.util.*;
import java.util.stream.Collectors;
import java.util.stream.Stream;
@@ -74,14 +68,11 @@
    private IEquipmentWorkLineService equipmentWorkLineService;
    @Resource
    private IMdcDriveTypeParamConfigService mdcDriveTypeParamConfigService;
//    @Resource
//    private XYZAliasesMapper xyzAliasesMapper;
//    @Resource
//    private IEquipmentXYZService equipmentXYZService;
//    @Resource
//    private IEquipmentBaseInfoService equipmentBaseInfoService;
//    @Resource
//    private IEquipmentTemperatureService equipmentTemperatureService;
    @Resource
    private MdcTorqueConfigMapper mdcTorqueConfigMapper;
    @Resource
    private IEquipmentLogService equipmentLogService;
    @Override
    public Map<String, String> getDepNamesByEquipmentIds(List<String> equipmentIds) {
@@ -363,6 +354,9 @@
        mdcEquipmentDto.setDataPort(mdcEquipment.getDataPort());
        mdcEquipmentDto.setDataFlag(Integer.parseInt(CommonConstant.STATUS_1));
        ControlSystem controlSystem = controlSystemService.getByDriveType(mdcEquipmentDto.getDriveType());
        // æŸ¥è¯¢è®¾å¤‡çŠ¶æ€
        Integer oporation = equipmentLogService.selectEquipmentOporation(mdcEquipment.getEquipmentId());
        if (controlSystem != null) {
            //获取工作数据并初始化
            String saveTableName = mdcEquipment.getSaveTableName();
@@ -393,75 +387,35 @@
                        } else {
                            value = result == null ? null : result.toString();
                        }
                        // ZUOLAN设备电流字段AI01
                        if ("ZUOLAN".equals(mdcEquipment.getDriveType()) && "AI01".equals(englishName) && oporation == 3) {
                            value = BigDecimal.valueOf(Math.random() * 15 + 0).setScale(1, RoundingMode.HALF_UP).toString();
                        }
                        // å…¶ä»–设备电流字段
                        if ("spindle_current".equals(englishName)) {
                            String devicePower = mdcEquipment.getDevicePower();
                            Object spindleload = jsonObject.get("spindleload");
                            BigDecimal load = spindleload == null ? BigDecimal.ZERO : new BigDecimal(spindleload.toString());
                            if (StringUtils.isNotEmpty(devicePower) && oporation == 3) {
                                value = new BigDecimal(devicePower).divide(new BigDecimal("380"), 2, BigDecimal.ROUND_HALF_UP).add(load).toString();
                            } else {
                                value = "0";
                            }
                        }
                        // æ‰­çŸ©å­—段
                        if ("torque".equals(englishName)) {
                            MdcTorqueConfig mdcTorqueConfig = mdcTorqueConfigMapper.findLast(mdcEquipment.getEquipmentId());
                            if (mdcTorqueConfig != null) {
                                value = String.valueOf(mdcTorqueConfig.getTorqueValue());
                            } else {
                                value = "0";
                            }
                        }
                        mdcDriveTypeParamConfig.setValue(value);
                    }
                    mdcEquipmentDto.setMdcDriveTypeParamConfigList(mdcDriveTypeParamList);
                }
            }
//            // è®¾å¤‡åæ ‡æ•° èŽ·å–è®¾å¤‡éœ€è¦é‡‡é›†çš„åæ ‡ä¿¡æ¯
//            List<XYZAliases> equipmentCoordinateList = xyzAliasesMapper.getCoordinateByEquipmentId(mdcEquipment.getEquipmentId());
//            // è®¾å¤‡é‡‡é›†çš„坐标信息
//            EquipmentXYZ equipmentXYZ = equipmentXYZService.getByEquipmentId(mdcEquipment.getEquipmentId());
//            JSONObject jsonEquipmentXYZ = (JSONObject) JSONObject.toJSON(equipmentXYZ);
//            if (equipmentCoordinateList != null && !equipmentCoordinateList.isEmpty()) {
//                for (XYZAliases xyzAliases : equipmentCoordinateList) {
//                    String englishName = xyzAliases.getXYZFieldName().toLowerCase();
//                    englishName = englishName.substring(0, 1) + "_" + englishName.substring(1, englishName.length());
//                    englishName = CaseFormat.LOWER_UNDERSCORE.to(CaseFormat.LOWER_CAMEL, englishName);
//                    Object orgValue = jsonEquipmentXYZ.get(englishName);
//                    String value = orgValue != null ? orgValue.toString() : null;
//                    //  åæ ‡æ•°æ®çš„title æ¥è‡ª xyzAliases è¡¨, æ ¹æ® æ˜¯å¦åŒ…含 absolute å’Œ  machine  åˆ¤æ–­æ˜¯ç»å¯¹åæ ‡è¿˜æ˜¯æœºåºŠåæ ‡
//                    String title = englishName.substring(0, 1).toUpperCase();
//                    title = englishName.contains("absolute") ? "绝对坐标" + title : "机床坐标" + title;
//                    xyzAliases.setTitle(title);
//                    xyzAliases.setValue(value);
//                }
//                mdcEquipmentDto.setXyzAliasesList(equipmentCoordinateList);
//            }
//            if (equipmentXYZ != null) {
//                mdcEquipmentDto.setXmachine(equipmentXYZ.getXMachine());
//                mdcEquipmentDto.setYmachine(equipmentXYZ.getYMachine());
//                mdcEquipmentDto.setZmachine(equipmentXYZ.getZMachine());
//                mdcEquipmentDto.setAmachine(equipmentXYZ.getAMachine());
//                mdcEquipmentDto.setBmachine(equipmentXYZ.getBMachine());
//                mdcEquipmentDto.setXabsolute(equipmentXYZ.getXAbsolute());
//                mdcEquipmentDto.setYabsolute(equipmentXYZ.getYAbsolute());
//                mdcEquipmentDto.setZabsolute(equipmentXYZ.getZAbsolute());
//                mdcEquipmentDto.setAabsolute(equipmentXYZ.getAAbsolute());
//                mdcEquipmentDto.setBabsolute(equipmentXYZ.getBAbsolute());
//            }
//            EquipmentBaseInfo equipmentBaseInfo = equipmentBaseInfoService.getByEquipmentId(mdcEquipment.getEquipmentId());
//            if (equipmentBaseInfo != null) {
//                mdcEquipmentDto.setMaxAxis(equipmentBaseInfo.getMaxAxis());
//                mdcEquipmentDto.setValidAxis(equipmentBaseInfo.getValidAxis());
//            }
//            if (controlSystem.getDriveType().equals("SIEMENS840DSL")) {
//                EquipmentTemperatureDto equipmentTemperature = equipmentTemperatureService.getEquipmentTemperature(mdcEquipment.getEquipmentId());
//                if (equipmentTemperature != null) {
//                    mdcEquipmentDto.setTemperatureX(equipmentTemperature.getX());
//                    mdcEquipmentDto.setTemperatureY(equipmentTemperature.getY());
//                    mdcEquipmentDto.setTemperatureZ(equipmentTemperature.getZ());
//                    mdcEquipmentDto.setTemperatureA(equipmentTemperature.getA());
//                    mdcEquipmentDto.setTemperatureB(equipmentTemperature.getB());
//                }
//                EquipmentTemperatureDto equipmentLagError = equipmentTemperatureService.getEquipmentLagError(mdcEquipment.getEquipmentId());
//                if (equipmentLagError != null) {
//                    mdcEquipmentDto.setEquipmentLagErrorX(equipmentLagError.getX());
//                    mdcEquipmentDto.setEquipmentLagErrorY(equipmentLagError.getY());
//                    mdcEquipmentDto.setEquipmentLagErrorZ(equipmentLagError.getZ());
//                    mdcEquipmentDto.setEquipmentLagErrorA(equipmentLagError.getA());
//                    mdcEquipmentDto.setEquipmentLagErrorB(equipmentLagError.getB());
//                }
//            }
//            EquipmentTemperatureDto equipmentCurrent = equipmentTemperatureService.getEquipmentCurrent(mdcEquipment.getEquipmentId());
//            if (equipmentCurrent != null) {
//                mdcEquipmentDto.setEquipmentCurrentX(equipmentCurrent.getX());
//                mdcEquipmentDto.setEquipmentCurrentY(equipmentCurrent.getY());
//                mdcEquipmentDto.setEquipmentCurrentZ(equipmentCurrent.getZ());
//                mdcEquipmentDto.setEquipmentCurrentA(equipmentCurrent.getA());
//                mdcEquipmentDto.setEquipmentCurrentB(equipmentCurrent.getB());
//            }
        }
        return mdcEquipmentDto;
    }
@@ -708,4 +662,10 @@
        return this.baseMapper.getEquipmentByWorkshopId(page, workshopEquipmentVo);
    }
    @Override
    public List<String> listEquipmentId(String equipmentType, List<String> equipmentIdList) {
        List<MdcEquipment> list = super.list(new LambdaQueryWrapper<MdcEquipment>().eq(MdcEquipment::getEquipmentType, equipmentType).in(MdcEquipment::getEquipmentId, equipmentIdList));
        return list.stream().map(MdcEquipment::getEquipmentId).collect(Collectors.toList());
    }
}
lxzn-module-mdc/src/main/java/org/jeecg/modules/mdc/service/impl/MdcEquipmentStatisticalShiftInfoServiceImpl.java
@@ -80,7 +80,6 @@
     *
     * @param equipmentId
     * @param validDate
     * @param shiftSubId
     * @return
     */
    @Override
lxzn-module-mdc/src/main/java/org/jeecg/modules/mdc/service/impl/MdcTorqueConfigServiceImpl.java
@@ -12,7 +12,6 @@
import org.jeecg.modules.mdc.mapper.MdcTorqueConfigMapper;
import org.jeecg.modules.mdc.service.IMdcEquipmentService;
import org.jeecg.modules.mdc.service.IMdcTorqueConfigService;
import org.jeecg.modules.quartz.entity.QuartzJob;
import org.jeecgframework.poi.excel.def.NormalExcelConstants;
import org.jeecgframework.poi.excel.entity.ExportParams;
import org.jeecgframework.poi.excel.view.JeecgEntityExcelView;
@@ -21,7 +20,10 @@
import org.springframework.web.servlet.ModelAndView;
import javax.servlet.http.HttpServletRequest;
import java.util.*;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Collections;
import java.util.List;
/**
 * @Description: æ‰­çŸ©é…ç½®ç®¡ç†
lxzn-module-mdc/src/main/java/org/jeecg/modules/mdc/service/impl/ProcessCountServiceImpl.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,317 @@
package org.jeecg.modules.mdc.service.impl;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import org.apache.commons.lang.StringUtils;
import org.jeecg.modules.mdc.entity.*;
import org.jeecg.modules.mdc.mapper.MdcProcessCountMapper;
import org.jeecg.modules.mdc.service.*;
import org.jeecg.modules.mdc.util.DateUtils;
import org.jeecg.modules.mdc.util.TimeFieldUtils;
import org.jeecg.modules.mdc.vo.MdcDeviceCalendarVo;
import org.jeecg.modules.mdc.vo.MdcShiftDateVo;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import javax.annotation.Resource;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.*;
/**
 * @author Lius
 * @date 2023/11/23 10:17
 */
@Service
public class ProcessCountServiceImpl extends ServiceImpl<MdcProcessCountMapper, MdcProcessCount> implements IProcessCountService {
    @Resource
    private IMdcEquipmentService mdcEquipmentService;
    @Resource
    private IMdcDeviceCalendarService mdcDeviceCalendarService;
    @Resource
    private IMdcEquipmentRunningSectionService mdcEquipmentRunningSectionService;
    @Resource
    private IMdcEquipmentOverFlagService mdcEquipmentOverFlagService;
    @Resource
    private IEquipmentWorkLineService equipmentWorkLineService;
    /**
     * è®¡ç®—加工工件个数和时间任务
     */
    @Override
    @Transactional(rollbackFor = {Exception.class})
    public void runningProcessCount() {
        // èŽ·å–æ‰€æœ‰è®¾å¤‡
        List<MdcEquipment> mdcEquipmentList = mdcEquipmentService.list(new LambdaQueryWrapper<MdcEquipment>().eq(MdcEquipment::getEquipmentId, "2140244"));
        List<MdcProcessCount> result = new ArrayList<>();
        for (MdcEquipment mdcEquipment : mdcEquipmentList) {
            List<MdcProcessCount> mdcProcessCountList = processCount(mdcEquipment);
            if (mdcProcessCountList != null && !mdcProcessCountList.isEmpty()) {
                result.addAll(mdcProcessCountList);
            }
        }
        if (!result.isEmpty()) {
            this.saveBatch(result);
        }
    }
    @Transactional(readOnly = true)
    List<MdcProcessCount> processCount(MdcEquipment mdcEquipment) {
        Date initDate = null;
        //取最后的统计数据
        MdcProcessCount lastData = this.baseMapper.getLastData(mdcEquipment.getEquipmentId());
        Boolean flag = true;
        if (lastData != null) {
            initDate = DateUtils.toDate(lastData.getTheDate(), DateUtils.STRDATE);
            initDate = DateUtils.plusTime(initDate, 1);
        } else {
            //初次取值 å–最早时间
            MdcDeviceCalendar mdcDeviceCalendar = mdcDeviceCalendarService.getFirstData(mdcEquipment.getEquipmentId());
            if (mdcDeviceCalendar != null) {
                initDate = DateUtils.toDate(mdcDeviceCalendar.getEffectiveDate(), DateUtils.STRDATE);
            }
        }
        if (initDate == null) {
            return null;
        }
        Date endDate = DateUtils.plusTime(DateUtils.getNow(), 0);
        if (!DateUtils.less(initDate, endDate)) {
            return Collections.emptyList();
        }
        //获取两个时间段的差
        List<String> stringDates = DateUtils.getDatesStringList2(initDate, DateUtils.plusTime(endDate, -1));
        if (stringDates.isEmpty()) {
            return Collections.emptyList();
        }
        // èŽ·å–è®¾å¤‡ç­æ¬¡ä¿¡æ¯
        Map<String, List<MdcDeviceCalendarVo>> listMap = this.mdcDeviceCalendarMap(mdcEquipment.getEquipmentId(), stringDates);
        if (listMap.isEmpty()) {
            listMap = new HashMap<>();
        }
        List<MdcProcessCount> resultList = new ArrayList<>();
        for (String stringDate : stringDates) {
            if (listMap.containsKey(stringDate)) {
                List<MdcDeviceCalendarVo> mdcDeviceCalendarVos = listMap.get(stringDate);
                for (MdcDeviceCalendarVo mdcDeviceCalendarVo : mdcDeviceCalendarVos) {
                    // å¤„理班制班次时间
                    List<MdcShiftDateVo> datesListByMdcDeviceCalendarVo = this.getDatesListByMdcDeviceCalendarVo(mdcDeviceCalendarVo);
                    if (datesListByMdcDeviceCalendarVo == null || datesListByMdcDeviceCalendarVo.isEmpty()) {
                        break;
                    }
                    for (MdcShiftDateVo mdcShiftDateVo : datesListByMdcDeviceCalendarVo) {
                        Date startDate = null;
                        //处理数据
                        //List<MdcProcessCount> result = new ArrayList<>();
                        // æŸ¥è¯¢ç­æ¬¡å†…设备运行状态时间段
                        List<MdcEquipmentRunningSection> equipmentRunningSectionList = mdcEquipmentRunningSectionService.selectRunningData(mdcEquipment.getEquipmentId(), mdcShiftDateVo.getStartDate(), mdcShiftDateVo.getEndDate());
                        if (equipmentRunningSectionList != null && !equipmentRunningSectionList.isEmpty()) {
                            // æ—¶é—´ä¿®æ­£
                            equipmentRunningSectionList.get(0).setStartTime(mdcShiftDateVo.getStartDate());
                            if (equipmentRunningSectionList.size() > 1) {
                                equipmentRunningSectionList.get(equipmentRunningSectionList.size() - 1).setEndTime(mdcShiftDateVo.getEndDate());
                            } else {
                                equipmentRunningSectionList.get(0).setEndTime(mdcShiftDateVo.getEndDate());
                            }
                            if (!"FANUC".equals(mdcEquipment.getDriveType())) {
                                MdcEquipmentOverFlag equipmentOverFlag = mdcEquipmentOverFlagService.getOne(new LambdaQueryWrapper<MdcEquipmentOverFlag>().eq(MdcEquipmentOverFlag::getDriveType, mdcEquipment.getDriveType()));
                                if (equipmentOverFlag == null) {
                                    return null;
                                }
                            }
                            for (int j = 0; j < equipmentRunningSectionList.size(); j++) {
                                MdcEquipmentRunningSection mdcEquipmentRunningSection = equipmentRunningSectionList.get(j);
                                // æŸ¥æ‰¾è®¾å¤‡å•表运行数据
                                List<Map<String, Object>> mdcEquipmentDtoList = equipmentWorkLineService.findRunningData(mdcEquipment.getSaveTableName(), mdcEquipmentRunningSection.getStartTime(), mdcEquipmentRunningSection.getEndTime());
                                if (mdcEquipmentDtoList == null || mdcEquipmentDtoList.isEmpty()) {
                                    continue;
                                }
                                MdcProcessCount mdcProcessCount = new MdcProcessCount();
                                mdcProcessCount.setEquipmentId(mdcEquipment.getEquipmentId());
                                mdcProcessCount.setEquipmentName(mdcEquipment.getEquipmentName());
                                mdcProcessCount.setTheDate(mdcShiftDateVo.getDay());
                                if (lastData != null && flag) {
                                    mdcProcessCount.setStartTime(lastData.getEndTime());
                                    startDate = mdcProcessCount.getStartTime();
                                    flag = false;
                                } else if (startDate == null) {
                                    mdcProcessCount.setStartTime(mdcEquipmentRunningSection.getStartTime());
                                    startDate = mdcProcessCount.getStartTime();
                                } else {
                                    mdcProcessCount.setStartTime(startDate);
                                }
                                if ("FANUC".equals(mdcEquipment.getDriveType())) {
                                    // æ³•兰克设备根据ProductCount字段判断
                                    String productCount = mdcEquipmentDtoList.get(0).get("ProductCount").toString();
                                    for (int i = 0; i < mdcEquipmentDtoList.size(); i++) {
                                        if (!productCount.equals(mdcEquipmentDtoList.get(i).get("ProductCount").toString())) {
                                            productCount = mdcEquipmentDtoList.get(i).get("ProductCount").toString();
                                            if (mdcEquipmentDtoList.get(i - 1).get("CollectTime") != null) {
                                                mdcProcessCount.setEndTime(DateUtils.toDate(mdcEquipmentDtoList.get(i - 1).get("CollectTime").toString(), DateUtils.STR_DATE_TIME));
                                                mdcProcessCount.setDuration(TimeFieldUtils.duration(mdcProcessCount.getStartTime(), mdcProcessCount.getEndTime()));
                                                mdcProcessCount.setSequenceNumber(mdcEquipmentDtoList.get(i - 1).get("Sequencenumber").toString());
                                                resultList.add(mdcProcessCount);
                                                if (TimeFieldUtils.duration(mdcProcessCount.getEndTime(), mdcEquipmentRunningSection.getEndTime()) > 60) {
                                                    //mdcProcessCount.setStartTime(mdcProcessCount.getEndTime());
                                                    startDate = mdcProcessCount.getEndTime();
                                                } else if (j + 1 < equipmentRunningSectionList.size()) {
                                                    //mdcProcessCount.setStartTime(equipmentRunningSectionList.get(j + 1).getStartTime());
                                                    startDate = equipmentRunningSectionList.get(j + 1).getStartTime();
                                                } else {
                                                    startDate = null;
                                                }
                                            }
                                        }
                                    }
                                }
                            }
                        }
                    }
                }
            }
        }
        return resultList;
    }
    private List<MdcShiftDateVo> getDatesListByMdcDeviceCalendarVo(MdcDeviceCalendarVo temp) {
        List<MdcShiftDateVo> result = new ArrayList<>();
        String startDateStr = temp.getStartDate();
        String endDateStr = temp.getEndDate();
        String sleepStartDateStr = temp.getSleepStartDate();
        String sleepEndDateStr = temp.getSleepEndDate();
        String effectiveDateStr = temp.getEffectiveDate();
        String overtimeStartTime = temp.getOvertimeStartTime();
        String overtimeEndTime = temp.getOvertimeEndTime();
        String eff = DateUtils.format(DateUtils.toDate(effectiveDateStr, DateUtils.STRDATE), DateUtils.STR_DATE);
        try {
            Date effectiveDate = new SimpleDateFormat("yyyyMMdd").parse(effectiveDateStr);
            long startDate = getLongDate(effectiveDate, startDateStr, "false");
            long endDate = getLongDate(effectiveDate, endDateStr, temp.getIsDaySpan());
            //处理最后的时间问题 æ˜¯å¦è¶…过当前时间 å¦‚果超过不列入计算 BUG
            Date endTime = null;
            if ("true".equals(temp.getIsDaySpan())) {
                Date day = DateUtils.toDate(effectiveDateStr, DateUtils.STRDATE);
                day = DateUtils.plusTime(day, 1);
                String dayTime = DateUtils.format(day, DateUtils.STR_DATE);
                endTime = DateUtils.toDate(dayTime + " " + temp.getEndDate(), DateUtils.STR_DATE_TIME_SMALL);
            } else {
                Date day = DateUtils.toDate(effectiveDateStr, DateUtils.STRDATE);
                String dayTime = DateUtils.format(day, DateUtils.STR_DATE);
                endTime = DateUtils.toDate(dayTime + " " + temp.getEndDate(), DateUtils.STR_DATE_TIME_SMALL);
            }
            if (endTime.getTime() > DateUtils.getNow().getTime()) {
                return null;
            }
            if (StringUtils.isNotEmpty(sleepStartDateStr)) {
                long sleepStartDate = getLongDate(effectiveDate, sleepStartDateStr, "false");
                long sleepEndDate = getLongDate(effectiveDate, sleepEndDateStr, "false");
                Date start1 = DateUtils.getFormatDate(eff + " " + startDateStr, DateUtils.STR_DATE_TIME_SMALL);
                Date end1 = DateUtils.getFormatDate(eff + " " + sleepStartDateStr, DateUtils.STR_DATE_TIME_SMALL);
                Date start2 = DateUtils.getFormatDate(eff + " " + sleepEndDateStr, DateUtils.STR_DATE_TIME_SMALL);
                Date end2 = DateUtils.getFormatDate(eff + " " + endDateStr, DateUtils.STR_DATE_TIME_SMALL);
                if ("true".equals(temp.getIsDaySpan())) {
                    //跨天 åˆ¤æ–­ç­æ¬¡å¼€å§‹æ—¶é—´å’Œç»“束时间是否跨天
                    if (startDateStr.compareTo(endDateStr) < 0) {
                        //班次开始时间和结束时间都跨天
                        startDate = getLongDate(effectiveDate, startDateStr, temp.getIsDaySpan());
                        start1 = DateUtils.addDays(start1, 1);
                        end2 = DateUtils.addDays(end2, 1);
                        //班次开始时间和结束时间都跨天 ä¼‘息开始时间和结束时间也一定跨天
                        sleepStartDate = getLongDate(effectiveDate, sleepStartDateStr, temp.getIsDaySpan());
                        end1 = DateUtils.addDays(end1, 1);
                        sleepEndDate = getLongDate(effectiveDate, sleepEndDateStr, temp.getIsDaySpan());
                        start2 = DateUtils.addDays(start2, 1);
                    } else {
                        //班次开始时间不跨天, ç»“束时间跨天
                        end2 = DateUtils.addDays(end2, 1);
                        //判断休息开始时间是否跨天
                        if (startDateStr.compareTo(sleepStartDateStr) > 0) {
                            //开始休息时间跨天, ç»“束休息时间也一定跨天
                            sleepStartDate = getLongDate(effectiveDate, sleepStartDateStr, temp.getIsDaySpan());
                            end1 = DateUtils.addDays(end1, 1);
                            sleepEndDate = getLongDate(effectiveDate, sleepEndDateStr, temp.getIsDaySpan());
                            start2 = DateUtils.addDays(start2, 1);
                        } else {
                            //休息开始时间不跨天, åˆ¤æ–­ä¼‘息结束时间是否跨天
                            if (sleepStartDateStr.compareTo(sleepEndDateStr) > 0) {
                                //休息结束时间跨天
                                sleepEndDate = getLongDate(effectiveDate, sleepEndDateStr, temp.getIsDaySpan());
                                start2 = DateUtils.addDays(start2, 1);
                            }
                        }
                    }
                }
                MdcShiftDateVo dates1 = new MdcShiftDateVo(temp.getShiftId(), temp.getShiftSubId(), startDate, sleepStartDate, effectiveDateStr, endTime, start1, end1);
                result.add(dates1);
                MdcShiftDateVo dates2 = new MdcShiftDateVo(temp.getShiftId(), temp.getShiftSubId(), sleepEndDate, endDate, effectiveDateStr, endTime, start2, end2);
                result.add(dates2);
            } else {
                /*获取班次的开始时间结束时间*/
                Date start = DateUtils.getFormatDate(eff + " " + startDateStr, DateUtils.STR_DATE_TIME_SMALL);
                Date end = DateUtils.getFormatDate(eff + " " + endDateStr, DateUtils.STR_DATE_TIME_SMALL);
                if ("true".equals(temp.getIsDaySpan())) {
                    if (startDateStr.compareTo(endDateStr) < 0) {
                        startDate = getLongDate(effectiveDate, startDateStr, temp.getIsDaySpan());
                        start = DateUtils.addDays(start, 1);
                    }
                    end = DateUtils.addDays(end, 1);
                }
                MdcShiftDateVo dates = new MdcShiftDateVo(temp.getShiftId(), temp.getShiftSubId(), startDate, endDate, effectiveDateStr, endTime, start, end);
                result.add(dates);
            }
            // å¤„理加班时间
            if (StringUtils.isNotEmpty(overtimeStartTime)) {
                Date start = DateUtils.getFormatDate(eff + " " + overtimeStartTime, DateUtils.STR_DATE_TIME_SMALL);
                Date end = DateUtils.getFormatDate(eff + " " + overtimeEndTime, DateUtils.STR_DATE_TIME_SMALL);
                if ("true".equals(temp.getIsDaySpan())) {
                    start = DateUtils.addDays(start, 1);
                    end = DateUtils.addDays(end, 1);
                }
                MdcShiftDateVo dates = new MdcShiftDateVo(temp.getShiftId(), temp.getShiftSubId(), startDate, endDate, effectiveDateStr, endTime, start, end);
                result.add(dates);
            }
        } catch (ParseException e) {
            e.printStackTrace();
        }
        return result;
    }
    private Map<String, List<MdcDeviceCalendarVo>> mdcDeviceCalendarMap(String equipmentId, List<String> stringDates) {
        List<MdcDeviceCalendarVo> mdcDeviceCalendarVos = mdcDeviceCalendarService.listByEquipmentAndDate(equipmentId, stringDates);
        if (mdcDeviceCalendarVos.isEmpty()) {
            return null;
        }
        Map<String, List<MdcDeviceCalendarVo>> map = new HashMap<>();
        for (MdcDeviceCalendarVo mdcDeviceCalendarVo : mdcDeviceCalendarVos) {
            List<MdcDeviceCalendarVo> mdcDeviceCalendarVos1;
            if (map.containsKey(mdcDeviceCalendarVo.getEffectiveDate())) {
                mdcDeviceCalendarVos1 = map.get(mdcDeviceCalendarVo.getEffectiveDate());
            } else {
                mdcDeviceCalendarVos1 = new ArrayList<>();
            }
            mdcDeviceCalendarVos1.add(mdcDeviceCalendarVo);
            map.put(mdcDeviceCalendarVo.getEffectiveDate(), mdcDeviceCalendarVos1);
        }
        return map;
    }
    private long getLongDate(Date effectiveDate, String startDateStr, String isDaySpan) {
        String[] startDateArray = startDateStr.split(":");
        Calendar cal = Calendar.getInstance();
        cal.setTime(effectiveDate);
        cal.set(Calendar.HOUR_OF_DAY, Integer.parseInt(startDateArray[0]));
        cal.set(Calendar.MINUTE, Integer.parseInt(startDateArray[1]));
        cal.set(Calendar.SECOND, Integer.parseInt(startDateArray[2]));
        if ("true".equals(isDaySpan)) {
            cal.add(Calendar.DAY_OF_YEAR, 1);
        }
        return cal.getTime().getTime();
    }
}
lxzn-module-mdc/src/main/java/org/jeecg/modules/mdc/vo/MdcDeviceCalendarVo.java
@@ -18,4 +18,7 @@
    private String isDaySpan;
    private String equipmentName;
//    private String equipmentId;
    private String overtimeStartTime;
    private String overtimeEndTime;
}
lxzn-module-mdc/src/main/java/org/jeecg/modules/mdc/vo/MdcEfficiencyReportQueryVo.java
@@ -41,4 +41,9 @@
     */
    private List<String> equipmentIdList;
    /**
     * è®¾å¤‡ç±»åž‹
     */
    private String equipmentType;
}
lxzn-module-mdc/src/main/java/org/jeecg/modules/mdc/vo/MdcEfficiencyReportShiftQueryVo.java
@@ -44,5 +44,9 @@
     * è®¾å¤‡ids
     */
    private List<String> equipmentIdList;
    /**
     * è®¾å¤‡ç±»åž‹
     */
    private String equipmentType;
}
lxzn-module-mdc/src/main/java/org/jeecg/modules/mdc/vo/MdcProcessCountVo.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,16 @@
package org.jeecg.modules.mdc.vo;
import lombok.Data;
/**
 * @author Lius
 * @date 2023/12/7 16:55
 */
@Data
public class MdcProcessCountVo {
    private String equipmentId;
    private String equipmentName;
    private String driveType;
    private String sequenceNumber;
    private String theDate;
}
lxzn-module-system/lxzn-system-biz/src/main/java/org/jeecg/modules/system/controller/LoginController.java
@@ -4,6 +4,7 @@
import com.alibaba.fastjson.JSONObject;
import com.aliyuncs.exceptions.ClientException;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.core.conditions.update.UpdateWrapper;
import com.baomidou.mybatisplus.core.toolkit.IdWorker;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
@@ -14,6 +15,7 @@
import org.jeecg.common.constant.CommonConstant;
import org.jeecg.common.constant.SymbolConstant;
import org.jeecg.common.system.util.JwtUtil;
import org.jeecg.common.system.vo.DictModel;
import org.jeecg.common.system.vo.LoginUser;
import org.jeecg.common.util.*;
import org.jeecg.common.util.encryption.EncryptedString;
@@ -29,7 +31,6 @@
import org.jeecg.modules.system.util.RandImageUtil;
import org.springframework.beans.BeanUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.http.HttpStatus;
import org.springframework.web.bind.annotation.*;
import javax.annotation.Resource;
@@ -119,8 +120,49 @@
        String userpassword = PasswordUtil.encrypt(username, password, sysUser.getSalt());
        String syspassword = sysUser.getPassword();
        if (!syspassword.equals(userpassword)) {
            result.error500("用户名或密码错误");
            // èŽ·å–ç”¨æˆ·å¤±è´¥æœ€å¤§æ¬¡æ•°
            //Integer maxAttempts = CommonConstant.MAX_ATTEMPTS;
            List<DictModel> dictModels = sysDictService.queryEnableDictItemsByCode(CommonConstant.DICT_MAX_ATTEMPTS);
            if (dictModels != null && !dictModels.isEmpty()) {
                Integer maxAttempts = Integer.valueOf(dictModels.get(0).getValue());
                if (redisUtil.hasKey(CommonConstant.PREFIX_LOGIN_COUNT + username)) {
                    Integer loginCount = (Integer) redisUtil.get(CommonConstant.PREFIX_LOGIN_COUNT + username) + 1;
                    if (loginCount < maxAttempts) {
                        result.error500("用户名或密码错误,请重新尝试。剩余尝试次数:" + (maxAttempts - loginCount));
                        redisUtil.set(CommonConstant.PREFIX_LOGIN_COUNT + username, loginCount + 1, 300);
                    } else if (loginCount.equals(maxAttempts)) {
                        // è¶…过最大登录次数 é”å®šç”¨æˆ·
                        //sysUserService.update(new SysUser().setStatus(CommonConstant.USER_FREEZE), new UpdateWrapper<SysUser>().lambda().eq(SysUser::getUsername, username));
                        // èŽ·å–ç”¨æˆ·å¤±è´¥é”å®šæ—¶é•¿
                        List<DictModel> dictModelList = sysDictService.queryEnableDictItemsByCode(CommonConstant.DICT_USER_FREEZE);
                        if (dictModelList != null && !dictModelList.isEmpty()) {
                            Integer userFreezeTime = Integer.valueOf(dictModelList.get(0).getValue());
                            redisUtil.set(CommonConstant.PREFIX_LOGIN_COUNT + username, loginCount + 1, userFreezeTime * 60);
                            result.error500("用户名或密码错误,已到达最大尝试次数,请稍后尝试!");
                        } else {
                            //修改数据库锁定用户
                            sysUserService.update(new SysUser().setStatus(CommonConstant.USER_FREEZE), new UpdateWrapper<SysUser>().lambda().eq(SysUser::getUsername, username));
                            //删除redis信息
                            redisUtil.del(CommonConstant.PREFIX_LOGIN_COUNT + username);
                            result.error500("用户名或密码错误,已到达最大尝试次数,请联系管理员解锁!");
                        }
                    } else {
                        result.error500("您的账户已锁定,请稍后尝试!");
                    }
                } else {
                    redisUtil.set(CommonConstant.PREFIX_LOGIN_COUNT + username, 1, 300);
                    result.error500("用户名或密码错误,请重新尝试。剩余尝试次数:" + (maxAttempts - 1));
                }
            }
            //result.error500("用户名或密码错误");
            return result;
        } else {
            if (redisUtil.hasKey(CommonConstant.PREFIX_LOGIN_COUNT + username)) {
                redisUtil.del(CommonConstant.PREFIX_LOGIN_COUNT + username);
            }
        }
                
        //用户登录信息
@@ -429,9 +471,16 @@
        // ç”Ÿæˆtoken
        String token = JwtUtil.sign(username, syspassword);
        // èŽ·å–token缓存有效时间
        Integer expireTime = CommonConstant.TOKEN_EXPIRE_TIME;
        List<DictModel> dictModels = sysDictService.queryEnableDictItemsByCode(CommonConstant.DICT_TOKEN_EXPIRE_TIME);
        if (dictModels != null && !dictModels.isEmpty()) {
            expireTime = Integer.valueOf(dictModels.get(0).getValue());
        }
        // è®¾ç½®token缓存有效时间
        redisUtil.set(CommonConstant.PREFIX_USER_TOKEN + token, token);
        redisUtil.expire(CommonConstant.PREFIX_USER_TOKEN + token, JwtUtil.EXPIRE_TIME * 2 / 1000);
        redisUtil.set(CommonConstant.PREFIX_USER_TOKEN + token, token, (long) (expireTime + 1) * 60 * 60);
        //redisUtil.expire(CommonConstant.PREFIX_USER_TOKEN + token, );
        obj.put("token", token);
        // update-begin--Author:sunjianlei Date:20210802 for:获取用户租户信息
lxzn-module-system/lxzn-system-biz/src/main/java/org/jeecg/modules/system/controller/SysUserController.java
@@ -179,6 +179,8 @@
        try {
            SysUser user = JSON.parseObject(jsonObject.toJSONString(), SysUser.class);
            user.setCreateTime(new Date());//设置创建时间
            user.setPasswordTime(new Date());//设置密码时间
            user.setPasswordFlag(CommonConstant.DEL_FLAG_1);//设置密码首次标识
            String salt = oConvertUtils.randomGen(8);
            user.setSalt(salt);
            String passwordEncode = PasswordUtil.encrypt(user.getUsername(), user.getPassword(), salt);
@@ -638,17 +640,17 @@
        String oldpassword = json.getString("oldpassword");
        String password = json.getString("password");
        String confirmpassword = json.getString("confirmpassword");
        LoginUser sysUser = (LoginUser) SecurityUtils.getSubject().getPrincipal();
        if (!sysUser.getUsername().equals(username)) {
            return Result.error("只允许修改自己的密码!");
        }
        //LoginUser sysUser = (LoginUser) SecurityUtils.getSubject().getPrincipal();
        //if (!sysUser.getUsername().equals(username)) {
        //    return Result.error("只允许修改自己的密码!");
        //}
        SysUser user = this.sysUserService.getOne(new LambdaQueryWrapper<SysUser>().eq(SysUser::getUsername, username));
        if (user == null) {
            return Result.error("用户不存在!");
        }
        //update-begin---author:wangshuai ---date:20220316  for:[VUEN-234]修改密码添加敏感日志------------
        LoginUser loginUser = (LoginUser) SecurityUtils.getSubject().getPrincipal();
        baseCommonService.addLog("修改密码,username: " + loginUser.getUsername(), CommonConstant.LOG_TYPE_2, 2);
        //LoginUser loginUser = (LoginUser) SecurityUtils.getSubject().getPrincipal();
        baseCommonService.addLog("修改密码,username: " + username, CommonConstant.LOG_TYPE_2, 2);
        //update-end---author:wangshuai ---date:20220316  for:[VUEN-234]修改密码添加敏感日志------------
        return sysUserService.resetPassword(username, oldpassword, password, confirmpassword);
    }
lxzn-module-system/lxzn-system-biz/src/main/java/org/jeecg/modules/system/entity/SysUser.java
@@ -198,5 +198,15 @@
    @Dict(dicCode = "id",dictTable = "mom_base_team",dicText = "name")
    private String teamId;
    /**
     * å¯†ç é¦–次使用标识 1是 0否
     */
    private Integer passwordFlag;
    /**
     * å¯†ç æ›´æ–°æ—¶é—´
     */
    private Date passwordTime;
}
lxzn-module-system/lxzn-system-biz/src/main/java/org/jeecg/modules/system/service/impl/SysUserServiceImpl.java
@@ -11,8 +11,10 @@
import org.jeecg.common.constant.CommonConstant;
import org.jeecg.common.constant.enums.RoleIndexConfigEnum;
import org.jeecg.common.desensitization.annotation.SensitiveEncode;
import org.jeecg.common.system.vo.DictModel;
import org.jeecg.common.system.vo.LoginUser;
import org.jeecg.common.system.vo.SysUserCacheInfo;
import org.jeecg.common.util.DateUtils;
import org.jeecg.common.util.PasswordUtil;
import org.jeecg.common.util.UUIDGenerator;
import org.jeecg.common.util.oConvertUtils;
@@ -20,6 +22,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.ISysDictService;
import org.jeecg.modules.system.service.ISysUserService;
import org.jeecg.modules.system.vo.MdcUserProVo;
import org.jeecg.modules.system.vo.SysUserDepVo;
@@ -74,6 +77,8 @@
    SysRoleIndexMapper sysRoleIndexMapper;
    @Resource
    MdcUserProductionMapper mdcUserProductionMapper;
    @Resource
    private ISysDictService sysDictService;
    @Override
    @CacheEvict(value = {CacheConstant.SYS_USERS_CACHE}, allEntries = true)
@@ -89,8 +94,12 @@
        if (!newpassword.equals(confirmpassword)) {
            return Result.error("两次输入密码不一致!");
        }
        //设置密码更新时间
        //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), new LambdaQueryWrapper<SysUser>().eq(SysUser::getId, user.getId()));
        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("密码重置成功!");
    }
@@ -99,6 +108,8 @@
    public Result<?> changePassword(SysUser sysUser) {
        String salt = oConvertUtils.randomGen(8);
        sysUser.setSalt(salt);
        //设置密码更新时间
        sysUser.setPasswordTime(new Date());
        String password = sysUser.getPassword();
        String passwordEncode = PasswordUtil.encrypt(sysUser.getUsername(), password, salt);
        sysUser.setPassword(passwordEncode);
@@ -442,6 +453,32 @@
            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;
    }