新火炬后端单体项目初始化代码
Houjie
4 天以前 14943f4a30e027dcf8956272192666524a851eff
安灯发起、安灯处理  安灯响应
已添加1个文件
已修改11个文件
396 ■■■■ 文件已修改
src/main/java/org/jeecg/modules/andon/controller/AndonButtonConfigController.java 13 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/org/jeecg/modules/andon/controller/AndonOrderController.java 55 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/org/jeecg/modules/andon/controller/AndonResponseConfigController.java 4 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/org/jeecg/modules/andon/dto/AndonOrdeDto.java 151 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/org/jeecg/modules/andon/mapper/AndonButtonConfigMapper.java 8 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/org/jeecg/modules/andon/mapper/xml/AndonButtonConfigMapper.xml 59 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/org/jeecg/modules/andon/service/IAndonButtonConfigService.java 8 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/org/jeecg/modules/andon/service/IAndonResponseConfigService.java 27 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/org/jeecg/modules/andon/service/impl/AndonButtonConfigServiceImpl.java 14 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/org/jeecg/modules/andon/service/impl/AndonResponseConfigServiceImpl.java 35 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/org/jeecg/modules/base/service/impl/FactoryServiceImpl.java 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/org/jeecg/modules/feishu/service/FeishuUserService.java 20 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/org/jeecg/modules/andon/controller/AndonButtonConfigController.java
@@ -11,6 +11,7 @@
import org.jeecg.common.system.base.controller.JeecgController;
import org.jeecg.common.system.query.QueryGenerator;
import org.jeecg.modules.andon.dto.AndonButtonDTO;
import org.jeecg.modules.andon.dto.AndonOrdeDto;
import org.jeecg.modules.andon.entity.AndonButtonConfig;
import org.jeecg.modules.andon.service.IAndonButtonConfigService;
import org.jeecg.modules.andon.service.impl.AndonOrderServiceImpl;
@@ -84,8 +85,8 @@
     */
    @ApiOperation(value = "安灯发起-分页列表查询", notes = "安灯发起-分页列表查询")
    @GetMapping(value = "/queryUserAndonCallList")
    public Result<List<AndonButtonDTO>> queryUserAndonCallList(@RequestParam("factoryId") String factoryId) {
        List<AndonButtonDTO> list = andonButtonConfigService.queryUserAndonCallList(factoryId);
    public Result<List<AndonOrdeDto>> queryUserAndonCallList(@RequestParam("factoryId") String factoryId, @RequestParam("orderStatus") String orderStatus) {
        List<AndonOrdeDto> list = andonButtonConfigService.queryUserAndonCallList(factoryId,orderStatus);
        return Result.OK(list);
    }
@@ -97,8 +98,8 @@
     */
    @ApiOperation(value = "安灯响应-分页列表查询", notes = "安灯响应-分页列表查询")
    @GetMapping(value = "/queryUserAndonRespondList")
    public Result<List<AndonButtonDTO>> queryUserAndonRespondList(@RequestParam("factoryId") String factoryId) {
        List<AndonButtonDTO> list = andonButtonConfigService.queryUserAndonRespondList(factoryId);
    public Result<List<AndonOrdeDto>> queryUserAndonRespondList(@RequestParam("factoryId") String factoryId, @RequestParam("orderStatus") String orderStatus) {
        List<AndonOrdeDto> list = andonButtonConfigService.queryUserAndonRespondList(factoryId,orderStatus);
        return Result.OK(list);
    }
@@ -110,8 +111,8 @@
     */
    @ApiOperation(value = "安灯响应-分页列表查询", notes = "安灯响应-分页列表查询")
    @GetMapping(value = "/queryUserAndonHandelList")
    public Result<List<AndonButtonDTO>> queryUserAndonHandelList(@RequestParam("factoryId") String factoryId) {
        List<AndonButtonDTO> list = andonButtonConfigService.queryUserAndonHandelList(factoryId);
    public Result<List<AndonOrdeDto>> queryUserAndonHandelList(@RequestParam("factoryId") String factoryId ,@RequestParam("orderStatus") String orderStatus) {
        List<AndonOrdeDto> list = andonButtonConfigService.queryUserAndonHandelList(factoryId,orderStatus);
        return Result.OK(list);
    }
    /**
src/main/java/org/jeecg/modules/andon/controller/AndonOrderController.java
@@ -6,12 +6,16 @@
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import lombok.extern.slf4j.Slf4j;
import org.apache.shiro.SecurityUtils;
import org.jeecg.common.api.vo.Result;
import org.jeecg.common.aspect.annotation.AutoLog;
import org.jeecg.common.system.base.controller.JeecgController;
import org.jeecg.common.system.query.QueryGenerator;
import org.jeecg.common.system.vo.LoginUser;
import org.jeecg.modules.andon.dto.AndonOrdeDto;
import org.jeecg.modules.andon.entity.AndonOrder;
import org.jeecg.modules.andon.service.IAndonOrderService;
import org.jeecg.modules.andon.service.IAndonResponseConfigService;
import org.jeecg.modules.system.entity.SysUser;
import org.jeecg.modules.system.service.ISysUserService;
import org.springframework.beans.factory.annotation.Autowired;
@@ -20,6 +24,7 @@
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.sql.Date;
import java.util.Arrays;
/**
@@ -37,6 +42,8 @@
    private IAndonOrderService andonOrderService;
    @Autowired
    private IAndonResponseConfigService andonResponseConfigService;
    /**
     * åˆ†é¡µåˆ—表查询
@@ -71,21 +78,62 @@
    @ApiOperation(value = "安灯工单-添加", notes = "安灯工单-添加")
    @PostMapping(value = "/add")
    public Result<String> add(@RequestBody AndonOrder andonOrder) {
        // æ ¹æ®button_id查询对应的产线ID
        if (andonOrder.getButtonId() != null) {
            String productionLineId = andonResponseConfigService.getProductionLineIdByButtonId(andonOrder.getButtonId());
            if (productionLineId != null) {
                andonOrder.setFactoryId(productionLineId);
            }
        }
        andonOrderService.save(andonOrder);
        return Result.OK("添加成功!");
    }
    /**
     * æ·»åŠ 
     *
     * @param andonOrder
     * @return
     */
    @AutoLog(value = "安灯APP工单-添加")
    @ApiOperation(value = "安灯APP工单-添加", notes = "安灯APP工单-添加")
    @PostMapping(value = "/app/add")
    public Result<String> appAdd(@RequestBody AndonOrder andonOrder) {
        // æ ¹æ®button_id查询对应的产线ID
        andonOrder.setAndonLevel("1");
        andonOrder.setFactoryId(andonOrder.getFactoryId());
        andonOrder.setOperator(andonOrder.getOperator());
        String Responder = andonResponseConfigService.getResponderByButtonId(andonOrder.getButtonId(),andonOrder.getFactoryId());
        andonOrder.setResponder(Responder);
        andonOrder.setProcessor(Responder);
        andonOrder.setOperateTime(new java.sql.Timestamp(System.currentTimeMillis()));
        andonOrderService.save(andonOrder);
        // åˆ›å»ºAndonOrderDto对象并复制属性
        AndonOrdeDto andonOrderDto = new AndonOrdeDto();
        // å¤åˆ¶å¿…要属性到Dto对象
        andonOrderDto.setId(andonOrder.getId());
        andonOrderDto.setButtonId(andonOrder.getButtonId());
        andonOrderDto.setFactoryId(andonOrder.getFactoryId());
        andonOrderDto.setOperator(andonOrder.getOperator());
        andonOrderDto.setResponder(andonOrder.getResponder());
        andonOrderDto.setProcessor(andonOrder.getProcessor());
        andonOrderDto.setAndonLevel(andonOrder.getAndonLevel());
        andonOrderDto.setOperateTime(andonOrder.getOperateTime());
        andonResponseConfigService.sendAndonNotification(andonOrderDto);
        return Result.OK("添加成功!");
    }
    /**
     * APP安灯响应操作
     *
     * @param orderId
     * @param id
     * @return
     */
    @ApiOperation(value = "APP安灯响应操作", notes = "APP安灯响应操作")
    @GetMapping(value = "/AndonRespond")
    public Result<String> AndonRespond(@RequestParam("orderId") String orderId) {
        AndonOrder andonOrder = andonOrderService.getById(orderId);
    public Result<String> AndonRespond(@RequestParam("id") String id) {
        AndonOrder andonOrder = andonOrderService.getById(id);
        andonOrder.setOrderStatus("2");
        andonOrderService.updateById(andonOrder);
        return Result.OK("响应成功!");
@@ -94,7 +142,6 @@
    /**
     * APP安灯处理操作
     *
     *
     * @return
     */
src/main/java/org/jeecg/modules/andon/controller/AndonResponseConfigController.java
@@ -11,6 +11,7 @@
import org.jeecg.common.system.base.controller.JeecgController;
import org.jeecg.common.system.query.QueryGenerator;
import org.jeecg.modules.andon.dto.AndonButtonDTO;
import org.jeecg.modules.andon.dto.AndonOrdeDto;
import org.jeecg.modules.andon.entity.AndonResponseConfig;
import org.jeecg.modules.andon.service.IAndonResponseConfigService;
import org.springframework.beans.factory.annotation.Autowired;
@@ -68,9 +69,8 @@
    @AutoLog(value = "安灯工单-发送飞书消息")
    @ApiOperation(value = "安灯工单-发送飞书消息", notes = "安灯工单-发送飞书消息")
    @PostMapping(value = "/sendMessage")
    public Result<String> sendMessage(@RequestBody AndonButtonDTO andonButtonDTO) {
    public Result<String> sendMessage(@RequestBody AndonOrdeDto andonButtonDTO) {
        try {
            andonButtonDTO.setBlinkingFlag(1);
            // è°ƒç”¨æœåŠ¡å±‚å¤„ç†ä¸šåŠ¡é€»è¾‘
            andonResponseConfigService.sendAndonNotification(andonButtonDTO);
            return Result.OK("添加成功!");
src/main/java/org/jeecg/modules/andon/dto/AndonOrdeDto.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,151 @@
package org.jeecg.modules.andon.dto;
import com.baomidou.mybatisplus.annotation.IdType;
import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.annotation.TableLogic;
import com.fasterxml.jackson.annotation.JsonFormat;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import org.jeecg.common.aspect.annotation.Dict;
import org.springframework.format.annotation.DateTimeFormat;
import java.util.Date;
@Data
public class AndonOrdeDto {
    /**主键*/
    @TableId(type = IdType.ASSIGN_ID)
    @ApiModelProperty(value = "主键")
    private String id;
    /**创建人*/
    @ApiModelProperty(value = "创建人")
    private String createBy;
    /**创建日期*/
    @JsonFormat(timezone = "GMT+8",pattern = "yyyy-MM-dd HH:mm:ss")
    @DateTimeFormat(pattern="yyyy-MM-dd HH:mm:ss")
    @ApiModelProperty(value = "创建日期")
    private Date createTime;
    /**更新人*/
    @ApiModelProperty(value = "更新人")
    private String updateBy;
    /**更新日期*/
    @JsonFormat(timezone = "GMT+8",pattern = "yyyy-MM-dd HH:mm:ss")
    @DateTimeFormat(pattern="yyyy-MM-dd HH:mm:ss")
    @ApiModelProperty(value = "更新日期")
    private Date updateTime;
    /**删除标记*/
    @ApiModelProperty(value = "删除标记")
    @TableLogic
    private Integer delFlag;
    /**产线ID*/
    @ApiModelProperty(value = "产线ID")
    @Dict(dictTable = "base_factory", dicCode = "id", dicText = "factory_name")
    private String factoryId;
    /**安灯类型*/
    @ApiModelProperty(value = "安灯类型")
    @Dict(dictTable = "andon_button_config", dicCode = "id", dicText = "button_name")
    private String buttonId;
    /**安灯人*/
    @Dict(dictTable = "sys_user", dicCode = "id", dicText = "username")
    @ApiModelProperty(value = "安灯人")
    private String operator;
    /**安灯时间*/
    @JsonFormat(timezone = "GMT+8",pattern = "yyyy-MM-dd HH:mm:ss")
    @DateTimeFormat(pattern="yyyy-MM-dd HH:mm:ss")
    @ApiModelProperty(value = "安灯时间")
    private Date operateTime;
    /**安灯等级*/
    @Dict(dicCode = "andon_level")
    @ApiModelProperty(value = "安灯等级")
    private String andonLevel;
    /**响应人*/
    @Dict(dictTable = "sys_user", dicCode = "id", dicText = "username")
    @ApiModelProperty(value = "响应人")
    private String responder;
    /**响应时间*/
    @JsonFormat(timezone = "GMT+8",pattern = "yyyy-MM-dd HH:mm:ss")
    @DateTimeFormat(pattern="yyyy-MM-dd HH:mm:ss")
    @ApiModelProperty(value = "响应时间")
    private Date responseTime;
    /**处理人*/
    @Dict(dictTable = "sys_user", dicCode = "id", dicText = "username")
    @ApiModelProperty(value = "处理人")
    private String processor;
    /**处理完成时间*/
    @JsonFormat(timezone = "GMT+8",pattern = "yyyy-MM-dd HH:mm:ss")
    @DateTimeFormat(pattern="yyyy-MM-dd HH:mm:ss")
    @ApiModelProperty(value = "处理完成时间")
    private Date processTime;
    /**安灯状态*/
    @Dict(dicCode = "order_status")
    @ApiModelProperty(value = "安灯状态")
    private String orderStatus;
    /**问题描述*/
    @ApiModelProperty(value = "问题描述")
    private String problemDescreption;
    /**处理结果描述*/
    @ApiModelProperty(value = "处理结果描述")
    private String resolutionDescreption;
    @ApiModelProperty(value = "一级响应人openId")
    private String responderOpenId;
    @ApiModelProperty(value = "二级响应人openId")
    private String secondResponderOpenId;
    @ApiModelProperty(value = "三级响应人openId")
    private String thirdResponderOpenId;
    @ApiModelProperty(value = "三级响应人")
    private String thirdResponder;
    @ApiModelProperty(value = "二级响应人")
    private String secondResponder;
    /**产线名称*/
    @ApiModelProperty(value = "产线名称")
    private String factoryName;
    /**产线名称*/
    @ApiModelProperty(value = "工厂名称")
    private String parentFactoryName;
    /**一级响应时长*/
    @ApiModelProperty(value = "一级响应时长")
    private Integer upgradeResponseDuration;
    /**按钮名称*/
    @ApiModelProperty(value = "按钮名称")
    private String buttonName;
    /**
     * å®‰ç¯äººåç§°
     */
    @ApiModelProperty(value = "安灯人名称")
    private String operatorName;
    /**二级响应时长*/
    @ApiModelProperty(value = "二级响应时长")
    private Integer secondUpgradeResponseDuration;
    /**三级级响应时长*/
    @ApiModelProperty(value = "三级响应时长")
    private Integer thirdUpgradeResponseDuration;
}
src/main/java/org/jeecg/modules/andon/mapper/AndonButtonConfigMapper.java
@@ -3,6 +3,7 @@
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import org.apache.ibatis.annotations.Param;
import org.jeecg.modules.andon.dto.AndonButtonDTO;
import org.jeecg.modules.andon.dto.AndonOrdeDto;
import org.jeecg.modules.andon.entity.AndonButtonConfig;
import java.util.List;
@@ -27,22 +28,21 @@
     * @param factoryId
     * @return
     */
    List<AndonButtonDTO> queryUserAndonCallList(String factoryId);
    List<AndonOrdeDto> queryUserAndonCallList(String factoryId, String orderStatus);
    /**
     * å“åº”安灯列表
     * @param factoryId
     * @return
     */
    List<AndonButtonDTO> queryUserAndonRespondList(String factoryId);
    List<AndonOrdeDto> queryUserAndonRespondList(String factoryId, String orderStatus);
    /**
     * å¤„理安灯列表
     * @param factoryId
     * @return
     */
    List<AndonButtonDTO> queryUserAndonHandelList(String factoryId);
    List<AndonOrdeDto> queryUserAndonHandelList(String factoryId, String orderStatus);
}
src/main/java/org/jeecg/modules/andon/mapper/xml/AndonButtonConfigMapper.xml
@@ -28,49 +28,26 @@
        where arc.factory_id=#{factoryId};
    </select>
    <select id="queryUserAndonCallList" resultType="org.jeecg.modules.andon.dto.AndonButtonDTO">
        select arc.id,
               abc.id          as buttonId,
               abc.button_name as buttonName,
               abc.button_code as buttonCode,
               (select count(1)
                from andon_order ao
                where ao.button_id = arc.button_id
                  and ao.factory_id = arc.factory_id
                  and ao.order_status = '1') as blinkingFlag,
               STUFF((SELECT ',' + CAST (ao.id AS VARCHAR)
                      FROM andon_order ao
                      WHERE ao.button_id = arc.button_id
                        and ao.factory_id = arc.factory_id
                        and ao.order_status = '1'
                   FOR XML PATH ('')), 1, 1, '') as orderIds,
               bf.factory_name as factoryName,
               parent_bf.factory_name as parentFactoryName,
               abc.upgrade_response_duration as upgradeResponseDuration,
               abc.second_upgrade_response_duration as secondUpgradeResponseDuration,
               arc.firster_responder as responder,
               arc.second_responder,
               arc.third_responder,
               STUFF((SELECT ',' + ao.order_status
                      FROM andon_order ao
                      WHERE ao.button_id = arc.button_id
                        and ao.factory_id = arc.factory_id
                        and ao.order_status = '1'
                   FOR XML PATH ('')), 1, 1, '') as orderStatus
        from andon_response_config arc
                 left join andon_button_config abc
                           on arc.button_id = abc.id
                 left join base_factory bf on arc.factory_id = bf.id
                 left join base_factory parent_bf on bf.parent_id = parent_bf.id
        where arc.factory_id=#{factoryId}
          and (select count (1)
               from andon_order ao
               where ao.button_id = arc.button_id
                 and ao.factory_id = arc.factory_id
                 and ao.order_status = '1') = 1
    <select id="queryUserAndonCallList" resultType="org.jeecg.modules.andon.dto.AndonOrdeDto">
        SELECT
            ao.*,
            bf.factory_name as factoryName,
            parent_bf.factory_name as parentFactoryName,
            abc.button_name as buttonName,
            abc.upgrade_response_duration as upgradeResponseDuration,
            abc.second_upgrade_response_duration as secondUpgradeResponseDuration,
            su.username as operatorName
        FROM andon_order ao
                 LEFT JOIN base_factory bf ON ao.factory_id = bf.id
                 LEFT JOIN base_factory parent_bf ON bf.parent_id = parent_bf.id
                 LEFT JOIN andon_button_config abc ON ao.button_id = abc.id
                 LEFT JOIN sys_user su ON ao.operator = su.id
        WHERE ao.factory_id = #{factoryId}
          AND ao.del_flag = 0
          AND ao.order_status = #{orderStatus}
    </select>
    <select id="queryUserAndonRespondList" resultType="org.jeecg.modules.andon.dto.AndonButtonDTO">
    <select id="queryUserAndonRespondList" resultType="org.jeecg.modules.andon.dto.AndonOrdeDto">
        select arc.id,
               abc.id                               as buttonId,
               abc.button_name                      as buttonName,
src/main/java/org/jeecg/modules/andon/service/IAndonButtonConfigService.java
@@ -2,6 +2,7 @@
import com.baomidou.mybatisplus.extension.service.IService;
import org.jeecg.modules.andon.dto.AndonButtonDTO;
import org.jeecg.modules.andon.dto.AndonOrdeDto;
import org.jeecg.modules.andon.entity.AndonButtonConfig;
import java.util.List;
@@ -28,21 +29,20 @@
     * @param factoryId
     * @return
     */
    List<AndonButtonDTO> queryUserAndonCallList(String factoryId);
    List<AndonOrdeDto> queryUserAndonCallList(String factoryId, String orderStatus);
    /**
     * æŸ¥è¯¢ç”¨æˆ·å‘起安灯响应列表
     * @param factoryId
     * @return
     */
    List<AndonButtonDTO> queryUserAndonRespondList(String factoryId);
    List<AndonOrdeDto> queryUserAndonRespondList(String factoryId,String orderStatus);
    /**
     * æŸ¥è¯¢ç”¨æˆ·å‘起安灯处理列表
     * @param factoryId
     * @return
     */
    List<AndonButtonDTO> queryUserAndonHandelList(String factoryId);
    List<AndonOrdeDto> queryUserAndonHandelList(String factoryId,String orderStatus);
}
src/main/java/org/jeecg/modules/andon/service/IAndonResponseConfigService.java
@@ -2,6 +2,8 @@
import com.baomidou.mybatisplus.extension.service.IService;
import org.jeecg.modules.andon.dto.AndonButtonDTO;
import org.jeecg.modules.andon.dto.AndonOrdeDto;
import org.jeecg.modules.andon.entity.AndonOrder;
import org.jeecg.modules.andon.entity.AndonResponseConfig;
import java.util.List;
@@ -17,11 +19,34 @@
    /**
     * æ ¹æ®button_id获取产线ID
     * @param buttonId
     * @return
     */
    String getProductionLineIdByButtonId(String buttonId);
    /**
     * æ ¹æ®button_id获取响应人
     * @param buttonId
     * @return
     */
    String getResponderByButtonId(String buttonId,String factoryId);
    /**
     * æ ¹æ®button_id和factory_id获取响应配置对象
     * @param buttonId æŒ‰é’®ID
     * @param factoryId å·¥åŽ‚/产线ID
     * @return AndonResponseConfig å“åº”配置对象
     */
    AndonResponseConfig getResponseConfigByButtonIdAndFactoryId(String buttonId, String factoryId);
    /**
     * å‘送安灯通知
     * @param andonButtonDTO å®‰ç¯æŒ‰é’®DTO
     * @return ç»“æžœ
     */
    void sendAndonNotification(AndonButtonDTO andonButtonDTO);
    void sendAndonNotification(AndonOrdeDto andonButtonDTO);
}
src/main/java/org/jeecg/modules/andon/service/impl/AndonButtonConfigServiceImpl.java
@@ -1,7 +1,9 @@
package org.jeecg.modules.andon.service.impl;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import liquibase.pro.packaged.S;
import org.jeecg.modules.andon.dto.AndonButtonDTO;
import org.jeecg.modules.andon.dto.AndonOrdeDto;
import org.jeecg.modules.andon.entity.AndonButtonConfig;
import org.jeecg.modules.andon.mapper.AndonButtonConfigMapper;
import org.jeecg.modules.andon.service.IAndonButtonConfigService;
@@ -30,18 +32,18 @@
    }
    @Override
    public List<AndonButtonDTO> queryUserAndonCallList(String factoryId) {
        return baseMapper.queryUserAndonCallList(factoryId);
    public List<AndonOrdeDto> queryUserAndonCallList(String factoryId, String orderStatus) {
        return baseMapper.queryUserAndonCallList(factoryId, orderStatus);
    }
    @Override
    public List<AndonButtonDTO> queryUserAndonRespondList(String factoryId) {
        return baseMapper.queryUserAndonRespondList(factoryId);
    public List<AndonOrdeDto> queryUserAndonRespondList(String factoryId, String orderStatus) {
        return baseMapper.queryUserAndonRespondList(factoryId, orderStatus);
    }
    @Override
    public List<AndonButtonDTO> queryUserAndonHandelList(String factoryId) {
        return baseMapper.queryUserAndonHandelList(factoryId);
    public List<AndonOrdeDto> queryUserAndonHandelList(String factoryId, String orderStatus) {
        return baseMapper.queryUserAndonHandelList(factoryId, orderStatus);
    }
src/main/java/org/jeecg/modules/andon/service/impl/AndonResponseConfigServiceImpl.java
@@ -6,6 +6,7 @@
import org.apache.shiro.SecurityUtils;
import org.jeecg.common.system.vo.LoginUser;
import org.jeecg.modules.andon.dto.AndonButtonDTO;
import org.jeecg.modules.andon.dto.AndonOrdeDto;
import org.jeecg.modules.andon.entity.AndonButtonConfig;
import org.jeecg.modules.andon.entity.AndonOrder;
import org.jeecg.modules.andon.entity.AndonResponseConfig;
@@ -51,10 +52,35 @@
        return baseMapper.getAndonResponseConfigByFactoryIdAndButtonId(factoryId, buttonId);
    }
    @Override
    public String getProductionLineIdByButtonId(String buttonId) {
        QueryWrapper<AndonResponseConfig> queryWrapper = new QueryWrapper<>();
        queryWrapper.eq("button_id", buttonId);
        AndonResponseConfig config = this.getOne(queryWrapper);
        return config != null ? config.getFactoryId() : null;
    }
    @Override
    public String getResponderByButtonId(String buttonId,String factoryId) {
        QueryWrapper<AndonResponseConfig> queryWrapper = new QueryWrapper<>();
        queryWrapper.eq("button_id", buttonId);
        queryWrapper.eq("factory_id", factoryId); // å‡è®¾factory_id对应产线ID
        AndonResponseConfig config = this.getOne(queryWrapper, false);
        return config != null ? config.getFirsterResponder() : null;
    }
    @Override
    public AndonResponseConfig getResponseConfigByButtonIdAndFactoryId(String buttonId, String factoryId) {
        QueryWrapper<AndonResponseConfig> queryWrapper = new QueryWrapper<>();
        queryWrapper.eq("button_id", buttonId);
        queryWrapper.eq("factory_id", factoryId);
        // ä½¿ç”¨false参数,当查询到多条记录时不会抛出异常,而是返回第一条
        return this.getOne(queryWrapper, false);
    }
    @Override
    public void sendAndonNotification(AndonButtonDTO andonButtonDTO) {
    public void sendAndonNotification(AndonOrdeDto andonButtonDTO) {
        /**
         * 1. éªŒè¯å·¥å•状态
         */
@@ -62,16 +88,13 @@
            log.warn("请求参数为空");
            throw new IllegalArgumentException("请求参数不能为空");
        }
        /**
         * è®¾ç½®å®‰ç¯äºº
         */
        /**
         * 2. èŽ·å–å“åº”é…ç½®
         */
        AndonResponseConfig andonResponseConfig = this.getById(andonButtonDTO.getId());
        AndonResponseConfig andonResponseConfig = getResponseConfigByButtonIdAndFactoryId(andonButtonDTO.getButtonId(), andonButtonDTO.getFactoryId());
        AndonOrder andonOrder = andonOrderService.getById(andonButtonDTO.getOrderIds());
        AndonOrder andonOrder = andonOrderService.getById(andonButtonDTO.getId());
        if (andonOrder == null) {
            log.warn("未找到ID为[{}]的安灯订单");
            throw new IllegalArgumentException("未找到对应的安灯订单");
src/main/java/org/jeecg/modules/base/service/impl/FactoryServiceImpl.java
@@ -192,7 +192,7 @@
        List<String> list = Arrays.asList(productionIds.split(","));
        LambdaQueryWrapper<Factory> queryWrapper = new LambdaQueryWrapper<>();
        queryWrapper.eq(Factory::getDelFlag, CommonConstant.DEL_FLAG_0);
//        queryWrapper.eq(Factory::getFactoryCategory, "PRODUCTION_LINE");
        queryWrapper.eq(Factory::getFactoryCategory, "3");
        queryWrapper.in(Factory::getId, list);
        queryWrapper.orderByAsc(Factory::getSorter);
        return super.list(queryWrapper);
src/main/java/org/jeecg/modules/feishu/service/FeishuUserService.java
@@ -5,7 +5,7 @@
import org.jeecg.common.util.PasswordUtil;
import org.jeecg.common.util.RestUtil;
import org.jeecg.common.util.oConvertUtils;
import org.jeecg.modules.andon.dto.AndonButtonDTO;
import org.jeecg.modules.andon.dto.AndonOrdeDto;
import org.jeecg.modules.mes.entity.FeishuUser;
import org.jeecg.modules.system.entity.SysUser;
import org.jeecg.modules.system.service.ISysUserService;
@@ -139,7 +139,7 @@
     * 2. ä¸€çº§å“åº”时长后检查状态,未处理则发送二级
     * 3. äºŒçº§å“åº”时长后检查状态,未处理则发送三级
     */
    public boolean sendAndonNotification(String accessToken, AndonButtonDTO andonOrde) {
    public boolean sendAndonNotification(String accessToken, AndonOrdeDto andonOrde) {
        try {
            String currentTime = sdf.format(new Date());
            log.info("【{}】触发一级响应(初级响应),安灯ID: {}", currentTime, andonOrde.getId());
@@ -178,7 +178,7 @@
     * å‘送指定级别的通知
     * @param level 1-一级,2-二级,3-三级
     */
    private boolean sendLevelNotification(String accessToken, AndonButtonDTO andonOrde, int level) {
    private boolean sendLevelNotification(String accessToken, AndonOrdeDto andonOrde, int level) {
        try {
            String levelDesc = getLevelDesc(level);
            String openId = getResponderOpenId(andonOrde, level);
@@ -250,7 +250,7 @@
     * @param currentLevel å½“前级别
     * @param delayMinutes å»¶è¿Ÿåˆ†é’Ÿæ•°ï¼ˆç”±å½“前级别响应时长决定)
     */
    private void scheduleNextLevelNotification(String accessToken, AndonButtonDTO andonOrde, int currentLevel, int delayMinutes) {
    private void scheduleNextLevelNotification(String accessToken, AndonOrdeDto andonOrde, int currentLevel, int delayMinutes) {
        int nextLevel = currentLevel + 1;
        if (nextLevel > 3) {
            log.info("已到达最高级别通知,无需继续调度,安灯ID: {}", andonOrde.getId());
@@ -306,7 +306,7 @@
    /**
     * æž„建通知内容(优化分隔符,提升可读性)
     */
    private String buildNotificationContent(AndonButtonDTO andonOrde, int level) {
    private String buildNotificationContent(AndonOrdeDto andonOrde, int level) {
        // èŽ·å–å·¥åŽ‚åç§°å’Œäº§çº¿åç§°ï¼Œåšç©ºå€¼ä¿æŠ¤
        String parentFactoryName = andonOrde.getParentFactoryName() != null ? andonOrde.getParentFactoryName() : "未知工厂";
        String factoryName = andonOrde.getFactoryName() != null ? andonOrde.getFactoryName() : "未知产线";
@@ -358,7 +358,7 @@
    /**
     * éªŒè¯é€šçŸ¥ç›¸å…³å‚æ•°
     */
    private boolean validateNotificationParams(AndonButtonDTO andonOrde) {
    private boolean validateNotificationParams(AndonOrdeDto andonOrde) {
        if (andonOrde == null) {
            log.error("安灯订单信息为空");
            return false;
@@ -401,7 +401,7 @@
    }
    // å·¥å…·æ–¹æ³•:获取响应人openId
    private String getResponderOpenId(AndonButtonDTO andonOrde, int level) {
    private String getResponderOpenId(AndonOrdeDto andonOrde, int level) {
        switch (level) {
            case 1: return andonOrde.getResponderOpenId();
            case 2: return andonOrde.getSecondResponderOpenId();
@@ -411,7 +411,7 @@
    }
    // å·¥å…·æ–¹æ³•:获取响应人名称
    private String getResponderName(AndonButtonDTO andonOrde, int level) {
    private String getResponderName(AndonOrdeDto andonOrde, int level) {
        String name = null;
        switch (level) {
            case 1:
@@ -430,7 +430,7 @@
    }
    // å·¥å…·æ–¹æ³•:获取响应时长(一级=二级延迟,二级=三级延迟)
    private int getResponseDuration(AndonButtonDTO andonOrde, int level) {
    private int getResponseDuration(AndonOrdeDto andonOrde, int level) {
        int duration = 0;
        switch (level) {
            case 1:
@@ -449,7 +449,7 @@
    }
    // å·¥å…·æ–¹æ³•:判断指定级别响应人是否有效
    private boolean hasValidResponder(AndonButtonDTO andonOrde, int level) {
    private boolean hasValidResponder(AndonOrdeDto andonOrde, int level) {
        String openId = getResponderOpenId(andonOrde, level);
        return openId != null && !openId.isEmpty();
    }