cuilei
2025-06-12 6a31114515df20724a3396580d89992c31e5ca2a
Merge remote-tracking branch 'origin/master'
已添加16个文件
已修改3个文件
已删除1个文件
1086 ■■■■■ 文件已修改
lxzn-module-mdc/src/main/java/org/jeecg/modules/board/controller/DtBoardController.java 11 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
lxzn-module-mdc/src/main/java/org/jeecg/modules/board/mapper/DtBoardMapper.java 17 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
lxzn-module-mdc/src/main/java/org/jeecg/modules/board/mapper/xml/DtBoardMapper.xml 27 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
lxzn-module-mdc/src/main/java/org/jeecg/modules/board/service/IDtBoardService.java 2 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
lxzn-module-mdc/src/main/java/org/jeecg/modules/board/service/impl/DtBoardServiceImpl.java 28 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
lxzn-module-mdc/src/main/java/org/jeecg/modules/board/vo/EquRepair.java 26 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
lxzn-module-mdc/src/main/java/org/jeecg/modules/mdc/controller/AndonOrderController.java 44 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
lxzn-module-mdc/src/main/java/org/jeecg/modules/mdc/controller/MdcEquipmentPunchController.java 70 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
lxzn-module-mdc/src/main/java/org/jeecg/modules/mdc/entity/AndonOrder.java 164 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
lxzn-module-mdc/src/main/java/org/jeecg/modules/mdc/entity/MdcEquipmentPunch.java 145 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
lxzn-module-mdc/src/main/java/org/jeecg/modules/mdc/mapper/AndonOrderMapper.java 14 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
lxzn-module-mdc/src/main/java/org/jeecg/modules/mdc/mapper/MdcEquipmentPunchMapper.java 18 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
lxzn-module-mdc/src/main/java/org/jeecg/modules/mdc/mapper/xml/AndonOrderMapper.xml 5 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
lxzn-module-mdc/src/main/java/org/jeecg/modules/mdc/mapper/xml/MdcEquipmentPunchMapper.xml 42 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
lxzn-module-mdc/src/main/java/org/jeecg/modules/mdc/service/IAndonOrderService.java 15 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
lxzn-module-mdc/src/main/java/org/jeecg/modules/mdc/service/IMdcEquipmentPunchService.java 21 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
lxzn-module-mdc/src/main/java/org/jeecg/modules/mdc/service/impl/AndonOrderServiceImpl.java 89 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
lxzn-module-mdc/src/main/java/org/jeecg/modules/mdc/service/impl/MdcEquipmentPunchServiceImpl.java 234 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
lxzn-module-mdc/src/main/java/org/jeecg/modules/mdc/vo/AndonOrderWebSocketVo.java 52 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
lxzn-module-msi/src/main/java/org/jeecg/modules/msi/utils/WebServiceUtil.java 62 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
lxzn-module-mdc/src/main/java/org/jeecg/modules/board/controller/DtBoardController.java
@@ -85,11 +85,12 @@
        return Result.OK(result);
    }
//    @ApiOperation(value = "数字孪生看板-设备故障", notes = "数字孪生看板-设备故障")
//    @GetMapping("/equAlarmList")
//    public Result<?> equAlarmList(@ApiParam(value = "productionId", required = true) String productionId) {
//        dtBoardService.
//    }
    @ApiOperation(value = "数字孪生看板-设备故障", notes = "数字孪生看板-设备故障")
    @GetMapping("/equRepairList")
    public Result<?> equRepairList(@ApiParam(value = "productionId", required = true) String productionId) {
        List<EquRepair> result = dtBoardService.equRepairList(productionId);
        return Result.OK(result);
    }
}
lxzn-module-mdc/src/main/java/org/jeecg/modules/board/mapper/DtBoardMapper.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,17 @@
package org.jeecg.modules.board.mapper;
import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Param;
import org.jeecg.modules.board.vo.EquRepair;
import java.util.List;
/**
 * @Author: Lius
 * @CreateTime: 2025-06-11
 * @Description:
 */
@Mapper
public interface DtBoardMapper {
    List<EquRepair> equRepairList(@Param("equipmentIdList") List<String> equipmentIdList, @Param("date") String date);
}
lxzn-module-mdc/src/main/java/org/jeecg/modules/board/mapper/xml/DtBoardMapper.xml
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,27 @@
<?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.board.mapper.DtBoardMapper">
    <select id="equRepairList" resultType="org.jeecg.modules.board.vo.EquRepair">
        SELECT
            t3.equipment_code equipmentId,
            COUNT(*) faultNum,
            ROUND(
                    SUM(DATEDIFF(MINUTE, t2.fault_start_time, t1.actual_end_time)) / 60.0,
                    2
            ) faultTime
        FROM
            eam_repair_order t1
                LEFT JOIN eam_report_repair t2 ON t1.report_id = t2.id
                LEFT JOIN eam_equipment t3 ON t1.equipment_id = t3.id
        WHERE
            t1.repair_status = 'COMPLETE'
            AND t2.fault_start_time > #{date}
            AND t3.equipment_code IN
            <foreach collection="equipmentIdList" item="id" index="index" open="(" close=")" separator=",">
                #{ id }
            </foreach>
        GROUP BY
            t3.equipment_code
    </select>
</mapper>
lxzn-module-mdc/src/main/java/org/jeecg/modules/board/service/IDtBoardService.java
@@ -27,4 +27,6 @@
    List<EquDowntimeInfo> equDowntimeStatistics(String productionId);
    List<EquAlarm> equAlarmList(String productionId);
    List<EquRepair> equRepairList(String productionId);
}
lxzn-module-mdc/src/main/java/org/jeecg/modules/board/service/impl/DtBoardServiceImpl.java
@@ -5,8 +5,10 @@
import org.apache.commons.lang3.StringUtils;
import org.jeecg.common.constant.CommonConstant;
import org.jeecg.common.system.vo.DictModel;
import org.jeecg.modules.board.mapper.DtBoardMapper;
import org.jeecg.modules.board.service.IDtBoardService;
import org.jeecg.modules.board.vo.*;
import org.jeecg.modules.eam.service.IEamRepairOrderService;
import org.jeecg.modules.mdc.constant.MdcConstant;
import org.jeecg.modules.mdc.entity.*;
import org.jeecg.modules.mdc.service.*;
@@ -20,6 +22,8 @@
import java.math.BigDecimal;
import java.math.RoundingMode;
import java.time.LocalDate;
import java.time.LocalDateTime;
import java.time.format.DateTimeFormatter;
import java.util.*;
import java.util.stream.Collectors;
@@ -63,6 +67,9 @@
    @Resource
    private IMdcAlarmInfoService mdcAlarmInfoService;
    @Resource
    private DtBoardMapper dtBoardMapper;
    /**
     * è½¦é—´ä¿¡æ¯
@@ -337,4 +344,25 @@
        return result;
    }
    /**
     * è®¾å¤‡æ•…éšœ
     * @param productionId
     * @return
     */
    @Override
    public List<EquRepair> equRepairList(String productionId) {
        List<String> proIds = mdcProductionService.findChildByProId(productionId);
        if (proIds == null || proIds.isEmpty()) {
            return null;
        }
        List<String> equipmentIdList = mdcEquipmentService.getEquIdsByProIds(proIds);
        if (equipmentIdList == null || equipmentIdList.isEmpty()) {
            return null;
        }
        LocalDateTime currentDate = LocalDate.now().minusMonths(1).atStartOfDay();
        String format = currentDate.format(DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss"));
        List<EquRepair> result = dtBoardMapper.equRepairList(equipmentIdList, format);
        return result;
    }
}
lxzn-module-mdc/src/main/java/org/jeecg/modules/board/vo/EquRepair.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,26 @@
package org.jeecg.modules.board.vo;
import lombok.Data;
import java.math.BigDecimal;
/**
 * @Author: Lius
 * @CreateTime: 2025-06-10
 * @Description: è®¾å¤‡æ•…éšœ
 */
@Data
public class EquRepair {
    /**
     * è®¾å¤‡ç¼–号
     */
    private String equipmentId;
    /**
     *  æ•…障次数
     */
    private BigDecimal faultNum;
    /**
     * æ•…障时长
     */
    private BigDecimal faultTime;
}
lxzn-module-mdc/src/main/java/org/jeecg/modules/mdc/controller/AndonOrderController.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,44 @@
package org.jeecg.modules.mdc.controller;
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.modules.mdc.entity.AndonOrder;
import org.jeecg.modules.mdc.service.IAndonOrderService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
 /**
 * @Description: andon_order
 * @Author: jeecg-boot
 * @Date:   2025-06-11
 * @Version: V1.0
 */
@Api(tags="andon_order")
@RestController
@RequestMapping("/AndonOrder/andonOrder")
@Slf4j
public class AndonOrderController extends JeecgController<AndonOrder, IAndonOrderService> {
    @Autowired
    private IAndonOrderService andonOrderService;
     /**
      * ç¨‹åºå‘¼å«
      *
      * @param andonOrder
      * @return
      */
     @AutoLog(value = "安灯工单-程序呼叫")
     @ApiOperation(value = "安灯工单-程序呼叫", notes = "安灯工单-程序呼叫")
     @PostMapping(value = "/procedureCall")
     public Result<?> procedureCall(@RequestBody AndonOrder andonOrder) {
         andonOrderService.procedureCall(andonOrder);
         return Result.OK("呼叫成功!");
     }
}
lxzn-module-mdc/src/main/java/org/jeecg/modules/mdc/controller/MdcEquipmentPunchController.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,70 @@
package org.jeecg.modules.mdc.controller;
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.modules.mdc.entity.MdcEquipmentPunch;
import org.jeecg.modules.mdc.service.IMdcEquipmentPunchService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;
import java.util.List;
/**
 * @Description: mdc_equipment_punch
 * @Author: jeecg-boot
 * @Date:   2025-06-09
 * @Version: V1.0
 */
@Api(tags="上下班打卡记录表")
@RestController
@RequestMapping("/mdcEquipmentPunch")
@Slf4j
public class MdcEquipmentPunchController extends JeecgController<MdcEquipmentPunch, IMdcEquipmentPunchService> {
    @Autowired
    private IMdcEquipmentPunchService mdcEquipmentPunchService;
    private static final String msg = "打卡成功!";
    /**
     * æŸ¥è¯¢å½“前登录人所负责设备打卡情况
     *
     * @return
     */
    @ApiOperation(value="查询当前登录人所负责设备打卡情况", notes="查询当前登录人所负责设备打卡情况")
    @GetMapping(value = "/list")
    public Result<List<MdcEquipmentPunch>> queryList() {
        return Result.OK(mdcEquipmentPunchService.queryList());
    }
    /**
     *   ä¸Šç­æ‰“卡
     *
     * @param mdcEquipmentPunch
     * @return
     */
    @AutoLog(value = "上班打卡")
    @ApiOperation(value="上班打卡", notes="上班打卡")
    @PostMapping(value = "/workUp")
    public Result<String> workUp(@RequestBody MdcEquipmentPunch mdcEquipmentPunch) {
        mdcEquipmentPunchService.workUp(mdcEquipmentPunch);
        return Result.OK(msg);
    }
    /**
     *   ä¸‹ç­æ‰“卡
     *
     * @param mdcEquipmentPunch
     * @return
     */
    @AutoLog(value = "下班打卡")
    @ApiOperation(value="下班打卡", notes="下班打卡")
    @PostMapping(value = "/workDown")
    public Result<String> workDown(@RequestBody MdcEquipmentPunch mdcEquipmentPunch) {
        mdcEquipmentPunchService.workDown(mdcEquipmentPunch);
        return Result.OK(msg);
    }
}
lxzn-module-mdc/src/main/java/org/jeecg/modules/mdc/entity/AndonOrder.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,164 @@
package org.jeecg.modules.mdc.entity;
import java.io.Serializable;
import java.io.UnsupportedEncodingException;
import java.util.Date;
import java.math.BigDecimal;
import cn.hutool.core.date.DatePattern;
import com.baomidou.mybatisplus.annotation.IdType;
import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.annotation.TableName;
import com.baomidou.mybatisplus.annotation.TableLogic;
import lombok.Data;
import com.fasterxml.jackson.annotation.JsonFormat;
import org.springframework.format.annotation.DateTimeFormat;
import org.jeecgframework.poi.excel.annotation.Excel;
import org.jeecg.common.aspect.annotation.Dict;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.EqualsAndHashCode;
import lombok.experimental.Accessors;
/**
 * @Description: andon_order
 * @Author: jeecg-boot
 * @Date: 2025-06-11
 * @Version: V1.0
 */
@Data
@TableName("andon_order")
@Accessors(chain = true)
@EqualsAndHashCode(callSuper = false)
@ApiModel(value = "andon_order对象", description = "andon_order")
public class AndonOrder implements Serializable {
    private static final long serialVersionUID = 1L;
    /**
     * ä¸»é”®
     */
    @TableId(type = IdType.ASSIGN_ID)
    @ApiModelProperty(value = "主键")
    private String id;
    /**
     * è®¾å¤‡ç¼–号
     */
    @Excel(name = "设备编号", width = 15)
    @ApiModelProperty(value = "设备编号")
    private String equipmentId;
    /**
     * æ‰€å±žåŽ‚æˆ¿
     */
    @Excel(name = "所属厂房", width = 15)
    @ApiModelProperty(value = "所属厂房")
    private String plantName;
    /**
     * å®‰ç¯ç±»åž‹
     */
    @Excel(name = "安灯类型", width = 15)
    @ApiModelProperty(value = "安灯类型")
    private String andonType;
    /**
     * å®‰ç¯äºº(呼叫人)
     */
    @Excel(name = "安灯人", width = 15)
    @ApiModelProperty(value = "安灯人")
    private String operator;
    /**
     * å‘¼å«åŽŸå› 
     */
    @Excel(name = "呼叫原因", width = 15)
    @ApiModelProperty(value = "呼叫原因")
    private String callReason;
    /**
     * å®‰ç¯æ—¶é—´
     */
    @Excel(name = "安灯时间", width = 15, format = DatePattern.NORM_DATETIME_PATTERN)
    @JsonFormat(timezone = "GMT+8", pattern = DatePattern.NORM_DATETIME_PATTERN)
    @DateTimeFormat(pattern = DatePattern.NORM_DATETIME_PATTERN)
    @ApiModelProperty(value = "安灯时间")
    private Date operateTime;
    /**
     * å“åº”人(责任人)
     */
    @Excel(name = "响应人", width = 15)
    @ApiModelProperty(value = "响应人")
    private String responder;
    /**
     * å“åº”æ—¶é—´
     */
    @Excel(name = "响应时间", width = 15, format = DatePattern.NORM_DATETIME_PATTERN)
    @JsonFormat(timezone = "GMT+8", pattern = DatePattern.NORM_DATETIME_PATTERN)
    @DateTimeFormat(pattern = DatePattern.NORM_DATETIME_PATTERN)
    @ApiModelProperty(value = "响应时间")
    private Date responseTime;
    /**
     * å¤„理人
     */
    @Excel(name = "处理人", width = 15)
    @ApiModelProperty(value = "处理人")
    private String processor;
    /**
     * å¤„理完成时间
     */
    @Excel(name = "处理完成时间", width = 15, format = DatePattern.NORM_DATETIME_PATTERN)
    @JsonFormat(timezone = "GMT+8", pattern = DatePattern.NORM_DATETIME_PATTERN)
    @DateTimeFormat(pattern = DatePattern.NORM_DATETIME_PATTERN)
    @ApiModelProperty(value = "处理完成时间")
    private Date processTime;
    /**
     * å®‰ç¯çŠ¶æ€;待响应、待处理、已完成
     */
    @Excel(name = "安灯状态;待响应、待处理、已完成", width = 15)
    @ApiModelProperty(value = "安灯状态;待响应、待处理、已完成")
    private String orderStatus;
    /**
     * é—®é¢˜æè¿°
     */
    @Excel(name = "问题描述", width = 15)
    @ApiModelProperty(value = "问题描述")
    private String problemDescreption;
    /**
     * å¤„理结果描述
     */
    @Excel(name = "处理结果描述", width = 15)
    @ApiModelProperty(value = "处理结果描述")
    private String resolutionDescreption;
    /**
     * å¤„理结果图片
     */
    @Excel(name = "处理结果图片", width = 15)
    @ApiModelProperty(value = "处理结果图片")
    private String imageFiles;
    /**
     * åˆ é™¤æ ‡è®°
     */
    @Excel(name = "删除标记", width = 15)
    @ApiModelProperty(value = "删除标记")
    @TableLogic
    private Integer delFlag;
    /**
     * åˆ›å»ºäºº
     */
    @ApiModelProperty(value = "创建人")
    private String createBy;
    /**
     * åˆ›å»ºæ—¶é—´
     */
    @JsonFormat(timezone = "GMT+8", pattern = DatePattern.NORM_DATETIME_PATTERN)
    @DateTimeFormat(pattern = DatePattern.NORM_DATETIME_PATTERN)
    @ApiModelProperty(value = "创建时间")
    private Date createTime;
    /**
     * æ›´æ–°äºº
     */
    @ApiModelProperty(value = "更新人")
    private String updateBy;
    /**
     * æ›´æ–°æ—¶é—´
     */
    @JsonFormat(timezone = "GMT+8", pattern = DatePattern.NORM_DATETIME_PATTERN)
    @DateTimeFormat(pattern = DatePattern.NORM_DATETIME_PATTERN)
    @ApiModelProperty(value = "更新时间")
    private Date updateTime;
}
lxzn-module-mdc/src/main/java/org/jeecg/modules/mdc/entity/MdcEquipmentPunch.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,145 @@
package org.jeecg.modules.mdc.entity;
import java.io.Serializable;
import java.util.Date;
import cn.hutool.core.date.DatePattern;
import com.baomidou.mybatisplus.annotation.IdType;
import com.baomidou.mybatisplus.annotation.TableField;
import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.annotation.TableName;
import lombok.Data;
import com.fasterxml.jackson.annotation.JsonFormat;
import org.jeecg.common.aspect.annotation.Dict;
import org.springframework.format.annotation.DateTimeFormat;
import org.jeecgframework.poi.excel.annotation.Excel;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.EqualsAndHashCode;
import lombok.experimental.Accessors;
/**
 * @Description: mdc_equipment_punch
 * @Author: jeecg-boot
 * @Date: 2025-06-09
 * @Version: V1.0
 */
@Data
@TableName("mdc_equipment_punch")
@Accessors(chain = true)
@EqualsAndHashCode(callSuper = false)
@ApiModel(value = "mdc_equipment_punch对象", description = "mdc_equipment_punch")
public class MdcEquipmentPunch implements Serializable {
    private static final long serialVersionUID = 1L;
    /**
     * id
     */
    @TableId(type = IdType.ASSIGN_ID)
    @ApiModelProperty(value = "id")
    private String id;
    /**
     * è®¾å¤‡ç¼–号
     */
    @Excel(name = "设备编号", width = 15)
    @ApiModelProperty(value = "设备编号")
    private String equipmentId;
    /**
     * æ‰“卡用户
     */
    @Excel(name = "打卡用户", width = 15)
    @ApiModelProperty(value = "打卡用户")
    private String punchUser;
    /**
     * æ‰“卡用户账号
     */
    @Excel(name = "打卡用户账号", width = 15)
    @ApiModelProperty(value = "打卡用户账号")
    @TableField(exist = false)
    private String punchUserRealName;
    /**
     * æ‰“卡用户名称
     */
    @Excel(name = "打卡用户名称", width = 15)
    @ApiModelProperty(value = "打卡用户名称")
    @TableField(exist = false)
    private String punchUserUserName;
    /**
     * ä¸Šç­æ—¶é—´
     */
    @Excel(name = "上班时间", width = 15, format = DatePattern.NORM_DATETIME_PATTERN)
    @JsonFormat(timezone = "GMT+8", pattern = DatePattern.NORM_DATETIME_PATTERN)
    @DateTimeFormat(pattern = DatePattern.NORM_DATETIME_PATTERN)
    @ApiModelProperty(value = "上班时间")
    private Date checkInTime;
    /**
     * ä¸‹ç­æ—¶é—´
     */
    @Excel(name = "下班时间", width = 15, format = DatePattern.NORM_DATETIME_PATTERN)
    @JsonFormat(timezone = "GMT+8", pattern = DatePattern.NORM_DATETIME_PATTERN)
    @DateTimeFormat(pattern = DatePattern.NORM_DATETIME_PATTERN)
    @ApiModelProperty(value = "下班时间")
    private Date checkOutTime;
    /**
     * è®°å½•日期
     */
    @Excel(name = "记录日期", width = 15)
    @ApiModelProperty(value = "记录日期")
    private String recordDate;
    /**
     * ç­æ¬¡
     */
    @Excel(name = "班次", width = 15)
    @ApiModelProperty(value = "班次")
    @Dict(dicCode = "shift_schedule")
    private Integer shiftSchedule;
    /**
     * ç­æ¬¡åç§°
     */
    @Excel(name = "班次名称", width = 15)
    @ApiModelProperty(value = "班次名称")
    @TableField(exist = false)
    private String shiftScheduleName;
    /**
     * æ˜¯å¦ç¼ºå¡
     */
    @Excel(name = "是否缺卡", width = 15)
    @ApiModelProperty(value = "是否缺卡")
    private Integer isAbsent;
    /**
     * æ˜¯å¦è¿Ÿåˆ°
     */
    @Excel(name = "是否迟到", width = 15)
    @ApiModelProperty(value = "是否迟到")
    private Integer isLate;
    /**
     * æ˜¯å¦æ—©é€€
     */
    @Excel(name = "是否早退", width = 15)
    @ApiModelProperty(value = "是否早退")
    private Integer isEarly;
    /**
     * åˆ›å»ºäºº
     */
    @ApiModelProperty(value = "创建人")
    private String createBy;
    /**
     * åˆ›å»ºæ—¶é—´
     */
    @JsonFormat(timezone = "GMT+8", pattern = DatePattern.NORM_DATETIME_PATTERN)
    @DateTimeFormat(pattern = DatePattern.NORM_DATETIME_PATTERN)
    @ApiModelProperty(value = "创建时间")
    private Date createTime;
    /**
     * æ›´æ–°äºº
     */
    @ApiModelProperty(value = "更新人")
    private String updateBy;
    /**
     * æ›´æ–°æ—¶é—´
     */
    @JsonFormat(timezone = "GMT+8", pattern = DatePattern.NORM_DATETIME_PATTERN)
    @DateTimeFormat(pattern = DatePattern.NORM_DATETIME_PATTERN)
    @ApiModelProperty(value = "更新时间")
    private Date updateTime;
}
lxzn-module-mdc/src/main/java/org/jeecg/modules/mdc/mapper/AndonOrderMapper.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,14 @@
package org.jeecg.modules.mdc.mapper;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import org.jeecg.modules.mdc.entity.AndonOrder;
/**
 * @Description: andon_order
 * @Author: jeecg-boot
 * @Date:   2025-06-11
 * @Version: V1.0
 */
public interface AndonOrderMapper extends BaseMapper<AndonOrder> {
}
lxzn-module-mdc/src/main/java/org/jeecg/modules/mdc/mapper/MdcEquipmentPunchMapper.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,18 @@
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.MdcEquipmentPunch;
import java.util.List;
/**
 * @Description: mdc_equipment_punch
 * @Author: jeecg-boot
 * @Date:   2025-06-09
 * @Version: V1.0
 */
public interface MdcEquipmentPunchMapper extends BaseMapper<MdcEquipmentPunch> {
    List<MdcEquipmentPunch> list(@Param("equipmentIds") List<String> equipmentIds, @Param("date") String date);
}
lxzn-module-mdc/src/main/java/org/jeecg/modules/mdc/mapper/xml/AndonOrderMapper.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.AndonOrderMapper">
</mapper>
lxzn-module-mdc/src/main/java/org/jeecg/modules/mdc/mapper/xml/MdcEquipmentPunchMapper.xml
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,42 @@
<?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.MdcEquipmentPunchMapper">
    <select id="list" resultType="org.jeecg.modules.mdc.entity.MdcEquipmentPunch">
        SELECT
          p.id,
          p.equipment_id,
          p.punch_user,
          p.check_in_time,
          p.check_out_time,
          p.record_date,
          p.is_absent,
          p.is_late,
          p.is_early,
          p.create_by,
          p.create_time,
          p.update_by,
          p.update_time,
          p.shift_schedule,
          u.realname punchUserRealName,
          u.username punchUserUserName,
          d1.item_text shiftScheduleName
        FROM
          mdc_equipment_punch p
          INNER JOIN sys_user u ON u.id = p.punch_user
          INNER JOIN (SELECT i1.item_text, i1.item_value
                      FROM sys_dict_item i1
                          LEFT JOIN sys_dict i2 ON i2.id = i1.dict_id
                      WHERE i2.dict_code = 'shift_schedule') d1
              ON d1.item_value = CAST (p.shift_schedule AS nvarchar)
        where 1=1
        AND p.equipment_id IN
        <foreach collection="equipmentIds" item="equipmentId" open="(" close=")" separator=",">
            #{equipmentId}
        </foreach>
        <if test="date != null and date != ''">
            AND p.record_date = #{date}
        </if>
        order by p.equipment_id desc, p.shift_schedule asc
    </select>
</mapper>
lxzn-module-mdc/src/main/java/org/jeecg/modules/mdc/service/IAndonOrderService.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,15 @@
package org.jeecg.modules.mdc.service;
import com.baomidou.mybatisplus.extension.service.IService;
import org.jeecg.modules.mdc.entity.AndonOrder;
/**
 * @Description: andon_order
 * @Author: jeecg-boot
 * @Date:   2025-06-11
 * @Version: V1.0
 */
public interface IAndonOrderService extends IService<AndonOrder> {
    void procedureCall(AndonOrder andonOrder);
}
lxzn-module-mdc/src/main/java/org/jeecg/modules/mdc/service/IMdcEquipmentPunchService.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,21 @@
package org.jeecg.modules.mdc.service;
import com.baomidou.mybatisplus.extension.service.IService;
import org.jeecg.modules.mdc.entity.MdcEquipmentPunch;
import java.util.List;
/**
 * @Description: mdc_equipment_punch
 * @Author: jeecg-boot
 * @Date:   2025-06-09
 * @Version: V1.0
 */
public interface IMdcEquipmentPunchService extends IService<MdcEquipmentPunch> {
    List<MdcEquipmentPunch> queryList();
    void workUp(MdcEquipmentPunch mdcEquipmentPunch);
    void workDown(MdcEquipmentPunch mdcEquipmentPunch);
}
lxzn-module-mdc/src/main/java/org/jeecg/modules/mdc/service/impl/AndonOrderServiceImpl.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,89 @@
package org.jeecg.modules.mdc.service.impl;
import cn.hutool.core.date.DatePattern;
import com.alibaba.fastjson.JSONObject;
import com.baomidou.mybatisplus.core.toolkit.StringPool;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import org.apache.commons.compress.utils.Lists;
import org.apache.commons.lang3.StringUtils;
import org.apache.shiro.SecurityUtils;
import org.jeecg.common.constant.WebsocketConst;
import org.jeecg.common.exception.JeecgBootException;
import org.jeecg.common.system.vo.LoginUser;
import org.jeecg.modules.mdc.dto.MdcEquProDto;
import org.jeecg.modules.mdc.entity.AndonOrder;
import org.jeecg.modules.mdc.mapper.AndonOrderMapper;
import org.jeecg.modules.mdc.service.IAndonOrderService;
import org.jeecg.modules.mdc.service.IMdcEquipmentService;
import org.jeecg.modules.mdc.util.DateUtils;
import org.jeecg.modules.mdc.vo.AndonOrderWebSocketVo;
import org.jeecg.modules.message.websocket.WebSocket;
import org.jeecg.modules.system.service.ISysUserService;
import org.springframework.stereotype.Service;
import javax.annotation.Resource;
import java.util.*;
import java.util.stream.Collectors;
/**
 * @Description: andon_order
 * @Author: jeecg-boot
 * @Date:   2025-06-11
 * @Version: V1.0
 */
@Service
public class AndonOrderServiceImpl extends ServiceImpl<AndonOrderMapper, AndonOrder> implements IAndonOrderService {
    @Resource
    private IMdcEquipmentService mdcEquipmentService;
    @Resource
    private WebSocket webSocket;
    @Resource
    private ISysUserService userService;
    @Override
    public void procedureCall(AndonOrder andonOrder) {
        if (StringUtils.isBlank(andonOrder.getEquipmentId())) {
            throw new JeecgBootException("请选择设备!");
        }
        LoginUser user = (LoginUser) SecurityUtils.getSubject().getPrincipal();
        String userId = user.getId();
        List<String> equipmentIds = Arrays.asList(andonOrder.getEquipmentId().split(StringPool.COMMA));
        List<MdcEquProDto> equipmentList = mdcEquipmentService.findEquProList(equipmentIds);
        Map<String, MdcEquProDto> equipmentIdToProductionIdMap = equipmentList.stream().collect(Collectors.toMap(MdcEquProDto::getEquipmentId, comRateDto -> comRateDto));
        List<AndonOrder> list = Lists.newArrayList();
        for (String equipmentId : equipmentIds) {
            AndonOrder andonOrderInfo = new AndonOrder();
            andonOrderInfo.setEquipmentId(equipmentId);
            andonOrderInfo.setPlantName(equipmentIdToProductionIdMap != null && equipmentIdToProductionIdMap.containsKey(equipmentId) ? equipmentIdToProductionIdMap.get(equipmentId).getId() : null);
            andonOrderInfo.setAndonType(StringPool.ONE);
            andonOrderInfo.setOperator(andonOrder.getOperator());
            andonOrderInfo.setOperateTime(new Date());
            andonOrderInfo.setResponder(userId);
            andonOrderInfo.setCallReason(andonOrder.getCallReason());
            list.add(andonOrderInfo);
        }
        if (this.saveBatch(list)) {
            List<AndonOrderWebSocketVo> andonOrderWebSocketVoList = Lists.newArrayList();
            //设置websocket请求消息数据
            for (AndonOrder order : list) {
                AndonOrderWebSocketVo andonOrderWebSocketVo = new AndonOrderWebSocketVo();
                andonOrderWebSocketVo.setEquipmentId(order.getEquipmentId());
                andonOrderWebSocketVo.setCallPersonnel(userService.getById(order.getOperator()).getRealname());
                andonOrderWebSocketVo.setCallTime(DateUtils.format(order.getOperateTime(), DatePattern.NORM_DATE_PATTERN));
                andonOrderWebSocketVo.setCallReason(order.getCallReason());
                andonOrderWebSocketVo.setAndonType("程序呼叫");
                andonOrderWebSocketVo.setPersonResponsible(user.getRealname());
                andonOrderWebSocketVo.setPlantName(equipmentIdToProductionIdMap != null && equipmentIdToProductionIdMap.containsKey(order.getEquipmentId()) ? equipmentIdToProductionIdMap.get(order.getEquipmentId()).getProductionName() : null);
                andonOrderWebSocketVoList.add(andonOrderWebSocketVo);
            }
            //发送websocket请求
            JSONObject jsonObject = new JSONObject();
            jsonObject.put(WebsocketConst.MSG_CMD, "andon");
            jsonObject.put("data", andonOrderWebSocketVoList);
            webSocket.sendMessage(jsonObject.toJSONString());
        }
    }
}
lxzn-module-mdc/src/main/java/org/jeecg/modules/mdc/service/impl/MdcEquipmentPunchServiceImpl.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,234 @@
package org.jeecg.modules.mdc.service.impl;
import cn.hutool.core.date.DatePattern;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.core.toolkit.CollectionUtils;
import com.baomidou.mybatisplus.core.toolkit.StringPool;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import org.apache.commons.compress.utils.Lists;
import org.apache.commons.lang3.StringUtils;
import org.apache.shiro.SecurityUtils;
import org.jeecg.common.exception.JeecgBootException;
import org.jeecg.common.system.vo.LoginUser;
import org.jeecg.modules.mdc.entity.MdcEquipmentPunch;
import org.jeecg.modules.mdc.mapper.MdcEquipmentPunchMapper;
import org.jeecg.modules.mdc.service.IMdcEquipmentPunchService;
import org.jeecg.modules.mdc.service.IMdcEquipmentService;
import org.jeecg.modules.mdc.util.DateUtils;
import org.springframework.stereotype.Service;
import javax.annotation.Resource;
import java.util.*;
import java.util.stream.Collectors;
/**
 * @Description: mdc_equipment_punch
 * @Author: jeecg-boot
 * @Date:   2025-06-09
 * @Version: V1.0
 */
@Service
public class MdcEquipmentPunchServiceImpl extends ServiceImpl<MdcEquipmentPunchMapper, MdcEquipmentPunch> implements IMdcEquipmentPunchService {
    @Resource
    private IMdcEquipmentService mdcEquipmentService;
    /**
     * æŸ¥è¯¢å½“前登录人所负责设备打卡情况
     * @return
     */
    @Override
    public List<MdcEquipmentPunch> queryList() {
        LoginUser user = (LoginUser) SecurityUtils.getSubject().getPrincipal();
        String userId = user.getId();
        List<String> equipmentIds = Lists.newArrayList();
        if (StringUtils.isNotBlank(user.getEquipmentIds())) {
            equipmentIds = Arrays.asList(user.getEquipmentIds().split(StringPool.COMMA));
        }else {
            equipmentIds = mdcEquipmentService.getEquipmentIdsProduction(userId, null);
        }
        if (CollectionUtils.isEmpty(equipmentIds)) {
            return Lists.newArrayList();
        }
        if (StringUtils.isBlank(userId)) {
            return Lists.newArrayList();
        }
        //根据设备、当前日期查询打卡记录
        List<MdcEquipmentPunch> mdcEquipmentPunches = this.baseMapper.list(equipmentIds, DateUtils.format(new Date(), DatePattern.PURE_DATE_PATTERN));
        return mdcEquipmentPunches;
    }
    /**
     * ä¸Šç­æ‰“卡
     * @param mdcEquipmentPunch
     */
    @Override
    public void workUp(MdcEquipmentPunch mdcEquipmentPunch) {
        LoginUser user = (LoginUser) SecurityUtils.getSubject().getPrincipal();
        String userId = user.getId();
        if (StringUtils.isBlank(mdcEquipmentPunch.getEquipmentId())) {
            throw new JeecgBootException("请选择打卡设备!");
        }
        /**
         * æ ¡éªŒæ˜¯å¦åœ¨æœ‰æ•ˆæ‰“卡范围之内
         *      æ—©ç­ä¸Šç­å¡æœ‰æ•ˆèŒƒå›´ä¸ºï¼š00:00:00 ~ 17:30:00
         *      æ™šç­ä¸Šç­å¡æœ‰æ•ˆèŒƒå›´ä¸ºï¼š00:00:00 ~ 23:00:00
         */
        Date startDate = DateUtils.getFormatDate(
                DateUtils.format(mdcEquipmentPunch.getCheckInTime(), DatePattern.NORM_DATE_PATTERN) + " 00:00:00",
                DatePattern.NORM_DATETIME_PATTERN
        );
        Date endDate = DateUtils.getFormatDate(
                DateUtils.format(mdcEquipmentPunch.getCheckInTime(), DatePattern.NORM_DATE_PATTERN) + " 17:30:00",
                DatePattern.NORM_DATETIME_PATTERN
        );
        if (mdcEquipmentPunch.getShiftSchedule() == 2) {
            //晚班无效打卡时间范围
            endDate = DateUtils.getFormatDate(
                    DateUtils.format(mdcEquipmentPunch.getCheckInTime(), DatePattern.NORM_DATE_PATTERN) + " 23:00:00",
                    DatePattern.NORM_DATETIME_PATTERN
            );
        }
        if (startDate.compareTo(mdcEquipmentPunch.getCheckInTime()) == 1 || endDate.compareTo(mdcEquipmentPunch.getCheckInTime()) == -1) {
            throw new JeecgBootException("未在有效上班打卡时间内,不能打卡!");
        }
        //查询所选设备当天是否已打上班卡
        List<String> equipmentIdList = Arrays.asList(mdcEquipmentPunch.getEquipmentId().split(StringPool.COMMA));
        String currentDate = DateUtils.format(mdcEquipmentPunch.getCheckInTime(), DatePattern.PURE_DATE_PATTERN);
        //早班上班正常最晚打卡时间
        String checkInTime = DateUtils.format(mdcEquipmentPunch.getCheckInTime(), DatePattern.NORM_DATE_PATTERN) + " 08:30:00";
        //查询当前设备、当前打卡类型打卡记录
        List<MdcEquipmentPunch> equipmentPunchList = this.list(new LambdaQueryWrapper<MdcEquipmentPunch>()
                .eq(MdcEquipmentPunch::getShiftSchedule, mdcEquipmentPunch.getShiftSchedule())
                .eq(MdcEquipmentPunch::getRecordDate, currentDate)
                .in(MdcEquipmentPunch::getEquipmentId, equipmentIdList));
        List<MdcEquipmentPunch> mdcEquipmentPunchList = equipmentPunchList.stream().filter(equipmentPunch -> Objects.nonNull(equipmentPunch.getCheckInTime())).collect(Collectors.toList());
        if (CollectionUtils.isNotEmpty(mdcEquipmentPunchList)) {
            List<String> equipmentIds = equipmentPunchList.stream()
                    .filter(mdcEquipmentPunchInfo -> Objects.nonNull(mdcEquipmentPunchInfo.getCheckInTime()))
                    .map(MdcEquipmentPunch::getEquipmentId)
                    .distinct()
                    .collect(Collectors.toList());
            throw new JeecgBootException("设备[" + StringUtils.join(equipmentIds, StringPool.COMMA) + "]已打卡,无需重复打卡");
        }
        List<MdcEquipmentPunch> list = Lists.newArrayList();
        //特殊处理晚班上班卡
        if (mdcEquipmentPunch.getShiftSchedule() == 2) {
            //晚班正常上班卡最晚打卡时间
            checkInTime = DateUtils.format(mdcEquipmentPunch.getCheckInTime(), DatePattern.NORM_DATE_PATTERN) + " 17:00:00";
        }
        for (String equipment : equipmentIdList) {
            Optional<MdcEquipmentPunch> first = equipmentPunchList.stream().filter(equipmentPunch -> Objects.isNull(equipmentPunch.getCheckInTime()) && equipment.equals(equipmentPunch.getEquipmentId())).findFirst();
            MdcEquipmentPunch equipmentPunch = new MdcEquipmentPunch();
            if (first.isPresent()) {
                equipmentPunch = first.get();
            }else {
                equipmentPunch.setEquipmentId(equipment);
                equipmentPunch.setPunchUser(userId);
                equipmentPunch.setRecordDate(currentDate);
                equipmentPunch.setShiftSchedule(mdcEquipmentPunch.getShiftSchedule());
                equipmentPunch.setIsAbsent(0);
                equipmentPunch.setIsEarly(0);
            }
            equipmentPunch.setCheckInTime(mdcEquipmentPunch.getCheckInTime());
            //打卡时间大于8:30/17:00时为迟到打卡
            equipmentPunch.setIsLate(mdcEquipmentPunch.getCheckInTime().compareTo(DateUtils.getFormatDate(checkInTime, DatePattern.NORM_DATETIME_PATTERN)) == 1 ? 1 : 0);
            list.add(equipmentPunch);
        }
        this.saveOrUpdateBatch(list);
    }
    @Override
    public void workDown(MdcEquipmentPunch mdcEquipmentPunch) {
        LoginUser user = (LoginUser) SecurityUtils.getSubject().getPrincipal();
        String userId = user.getId();
        if (StringUtils.isBlank(mdcEquipmentPunch.getEquipmentId())) {
            throw new JeecgBootException("请选择打卡设备!");
        }
        /**
         * æ ¡éªŒå½“前下班卡是否在有效下班打卡范围之内
         *      æ—©ç­ä¸‹ç­æ— æ•ˆæ‰“卡时间范围为00:00:00 ~ 08:30:00
         *      æ™šç­ä¸‹ç­æ— æ•ˆæ‰“卡时间范围为00:00:00 ~ 17:00:00
         */
        Date startDate = DateUtils.getFormatDate(
                DateUtils.format(mdcEquipmentPunch.getCheckOutTime(), DatePattern.NORM_DATE_PATTERN) + " 00:00:00",
                DatePattern.NORM_DATETIME_PATTERN
        );
        Date endDate = DateUtils.getFormatDate(
                DateUtils.format(mdcEquipmentPunch.getCheckOutTime(), DatePattern.NORM_DATE_PATTERN) + " 08:30:00",
                DatePattern.NORM_DATETIME_PATTERN
        );
        Date checkOutTime = DateUtils.getFormatDate(
                DateUtils.format(mdcEquipmentPunch.getCheckOutTime(), DatePattern.NORM_DATE_PATTERN) + " 17:30:00",
                DatePattern.NORM_DATETIME_PATTERN
        );
        if (mdcEquipmentPunch.getShiftSchedule() == 2) {
            //晚班无效打卡时间范围
            endDate = DateUtils.getFormatDate(
                    DateUtils.format(mdcEquipmentPunch.getCheckOutTime(), DatePattern.NORM_DATE_PATTERN) + " 17:00:00",
                    DatePattern.NORM_DATETIME_PATTERN
            );
            //晚班正常下班最早打卡时间
            checkOutTime = DateUtils.getFormatDate(
                    DateUtils.format(mdcEquipmentPunch.getCheckOutTime(), DatePattern.NORM_DATE_PATTERN) + " 23:00:00",
                    DatePattern.NORM_DATETIME_PATTERN
            );
        }
        if (startDate.compareTo(mdcEquipmentPunch.getCheckOutTime()) == 1
                || endDate.compareTo(mdcEquipmentPunch.getCheckOutTime()) == 1) {
            throw new JeecgBootException("未在有效下班打卡时间内,不能打卡!");
        }
        //查询当前所选设备是否存在上班打卡记录
        List<String> equipmentIdList = Arrays.asList(mdcEquipmentPunch.getEquipmentId().split(StringPool.COMMA));
        String currentDate = DateUtils.format(mdcEquipmentPunch.getCheckOutTime(), DatePattern.PURE_DATE_PATTERN);
        List<MdcEquipmentPunch> equipmentPunchList = this.list(new LambdaQueryWrapper<MdcEquipmentPunch>()
                .eq(MdcEquipmentPunch::getShiftSchedule, mdcEquipmentPunch.getShiftSchedule())
                .eq(MdcEquipmentPunch::getRecordDate, currentDate)
                .in(MdcEquipmentPunch::getEquipmentId, equipmentIdList));
        List<MdcEquipmentPunch> list = Lists.newArrayList();
        for (String equipmentId : equipmentIdList) {
            Optional<MdcEquipmentPunch> mdcEquipmentPunchOptional = equipmentPunchList.stream()
                    .filter(mdcEquipmentPunch1 -> mdcEquipmentPunch1.getEquipmentId().equals(equipmentId))
                    .findFirst();
            MdcEquipmentPunch equipmentPunch = new MdcEquipmentPunch();
            if (mdcEquipmentPunchOptional.isPresent()) {
                equipmentPunch = mdcEquipmentPunchOptional.get();
            }else {
                equipmentPunch.setIsAbsent(1);
                equipmentPunch.setIsLate(0);
                equipmentPunch.setEquipmentId(equipmentId);
                equipmentPunch.setShiftSchedule(mdcEquipmentPunch.getShiftSchedule());
                equipmentPunch.setPunchUser(userId);
                equipmentPunch.setRecordDate(currentDate);
            }
            equipmentPunch.setCheckOutTime(mdcEquipmentPunch.getCheckOutTime());
            //下班打卡时间早于17:30/23:00则为早退
            equipmentPunch.setIsEarly(checkOutTime.compareTo(mdcEquipmentPunch.getCheckOutTime()) == 1 ? 1 : 0);
            list.add(equipmentPunch);
        }
        this.saveOrUpdateBatch(list);
    }
}
lxzn-module-mdc/src/main/java/org/jeecg/modules/mdc/vo/AndonOrderWebSocketVo.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,52 @@
package org.jeecg.modules.mdc.vo;
import lombok.Data;
@Data
public class AndonOrderWebSocketVo {
    /**
     * è®¾å¤‡ç¼–号
     */
    private String equipmentId;
    /**
     * å‘¼å«äººå‘˜
     */
    private String callPersonnel;
    /**
     * å®‰ç¯ç±»åž‹
     */
    private String andonType;
    /**
     * å‘¼å«æ—¶é—´
     */
    private String callTime;
    /**
     * å‘¼å«åŽŸå› 
     */
    private String callReason;
    /**
     * è´£ä»»äºº
     */
    private String personResponsible;
    /**
     * æŠ¥ä¿®æ—¶é—´
     */
    private String repairTime;
    /**
     * æ•…障描述
     */
    private String faultInfo;
    /**
     * æ‰€å±žåŽ‚æˆ¿
     */
    private String plantName;
}
lxzn-module-msi/src/main/java/org/jeecg/modules/msi/utils/WebServiceUtil.java
ÎļþÒÑɾ³ý