From 6a31114515df20724a3396580d89992c31e5ca2a Mon Sep 17 00:00:00 2001 From: cuilei <ray_tsu1@163.com> Date: 星期四, 12 六月 2025 10:39:40 +0800 Subject: [PATCH] Merge remote-tracking branch 'origin/master' --- lxzn-module-mdc/src/main/java/org/jeecg/modules/board/mapper/DtBoardMapper.java | 17 lxzn-module-mdc/src/main/java/org/jeecg/modules/board/service/IDtBoardService.java | 2 lxzn-module-mdc/src/main/java/org/jeecg/modules/board/vo/EquRepair.java | 26 + lxzn-module-mdc/src/main/java/org/jeecg/modules/mdc/mapper/AndonOrderMapper.java | 14 lxzn-module-mdc/src/main/java/org/jeecg/modules/mdc/vo/AndonOrderWebSocketVo.java | 52 ++ lxzn-module-mdc/src/main/java/org/jeecg/modules/mdc/service/impl/AndonOrderServiceImpl.java | 89 ++++ lxzn-module-mdc/src/main/java/org/jeecg/modules/mdc/entity/MdcEquipmentPunch.java | 145 +++++++ lxzn-module-mdc/src/main/java/org/jeecg/modules/board/service/impl/DtBoardServiceImpl.java | 28 + lxzn-module-mdc/src/main/java/org/jeecg/modules/mdc/entity/AndonOrder.java | 164 ++++++++ lxzn-module-mdc/src/main/java/org/jeecg/modules/mdc/mapper/xml/MdcEquipmentPunchMapper.xml | 42 ++ lxzn-module-mdc/src/main/java/org/jeecg/modules/mdc/service/IMdcEquipmentPunchService.java | 21 + lxzn-module-mdc/src/main/java/org/jeecg/modules/mdc/controller/MdcEquipmentPunchController.java | 70 +++ /dev/null | 62 --- lxzn-module-mdc/src/main/java/org/jeecg/modules/mdc/service/IAndonOrderService.java | 15 lxzn-module-mdc/src/main/java/org/jeecg/modules/mdc/service/impl/MdcEquipmentPunchServiceImpl.java | 234 ++++++++++++ lxzn-module-mdc/src/main/java/org/jeecg/modules/mdc/controller/AndonOrderController.java | 44 ++ lxzn-module-mdc/src/main/java/org/jeecg/modules/mdc/mapper/xml/AndonOrderMapper.xml | 5 lxzn-module-mdc/src/main/java/org/jeecg/modules/board/mapper/xml/DtBoardMapper.xml | 27 + lxzn-module-mdc/src/main/java/org/jeecg/modules/mdc/mapper/MdcEquipmentPunchMapper.java | 18 lxzn-module-mdc/src/main/java/org/jeecg/modules/board/controller/DtBoardController.java | 11 20 files changed, 1,019 insertions(+), 67 deletions(-) diff --git a/lxzn-module-mdc/src/main/java/org/jeecg/modules/board/controller/DtBoardController.java b/lxzn-module-mdc/src/main/java/org/jeecg/modules/board/controller/DtBoardController.java index 909ed5c..f238759 100644 --- a/lxzn-module-mdc/src/main/java/org/jeecg/modules/board/controller/DtBoardController.java +++ b/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); + } } diff --git a/lxzn-module-mdc/src/main/java/org/jeecg/modules/board/mapper/DtBoardMapper.java b/lxzn-module-mdc/src/main/java/org/jeecg/modules/board/mapper/DtBoardMapper.java new file mode 100644 index 0000000..12e64b6 --- /dev/null +++ b/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); +} diff --git a/lxzn-module-mdc/src/main/java/org/jeecg/modules/board/mapper/xml/DtBoardMapper.xml b/lxzn-module-mdc/src/main/java/org/jeecg/modules/board/mapper/xml/DtBoardMapper.xml new file mode 100644 index 0000000..566cd4b --- /dev/null +++ b/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> \ No newline at end of file diff --git a/lxzn-module-mdc/src/main/java/org/jeecg/modules/board/service/IDtBoardService.java b/lxzn-module-mdc/src/main/java/org/jeecg/modules/board/service/IDtBoardService.java index 07069e7..be4172a 100644 --- a/lxzn-module-mdc/src/main/java/org/jeecg/modules/board/service/IDtBoardService.java +++ b/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); } diff --git a/lxzn-module-mdc/src/main/java/org/jeecg/modules/board/service/impl/DtBoardServiceImpl.java b/lxzn-module-mdc/src/main/java/org/jeecg/modules/board/service/impl/DtBoardServiceImpl.java index bf79693..ebea97e 100644 --- a/lxzn-module-mdc/src/main/java/org/jeecg/modules/board/service/impl/DtBoardServiceImpl.java +++ b/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; + } + } diff --git a/lxzn-module-mdc/src/main/java/org/jeecg/modules/board/vo/EquRepair.java b/lxzn-module-mdc/src/main/java/org/jeecg/modules/board/vo/EquRepair.java new file mode 100644 index 0000000..8122dfc --- /dev/null +++ b/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; +} diff --git a/lxzn-module-mdc/src/main/java/org/jeecg/modules/mdc/controller/AndonOrderController.java b/lxzn-module-mdc/src/main/java/org/jeecg/modules/mdc/controller/AndonOrderController.java new file mode 100644 index 0000000..a9a33ee --- /dev/null +++ b/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("鍛煎彨鎴愬姛锛�"); + } +} diff --git a/lxzn-module-mdc/src/main/java/org/jeecg/modules/mdc/controller/MdcEquipmentPunchController.java b/lxzn-module-mdc/src/main/java/org/jeecg/modules/mdc/controller/MdcEquipmentPunchController.java new file mode 100644 index 0000000..482612f --- /dev/null +++ b/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); + } +} diff --git a/lxzn-module-mdc/src/main/java/org/jeecg/modules/mdc/entity/AndonOrder.java b/lxzn-module-mdc/src/main/java/org/jeecg/modules/mdc/entity/AndonOrder.java new file mode 100644 index 0000000..5321b7a --- /dev/null +++ b/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; + /** + * 鍝嶅簲浜�(璐d换浜�) + */ + @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; +} diff --git a/lxzn-module-mdc/src/main/java/org/jeecg/modules/mdc/entity/MdcEquipmentPunch.java b/lxzn-module-mdc/src/main/java/org/jeecg/modules/mdc/entity/MdcEquipmentPunch.java new file mode 100644 index 0000000..b64bcc4 --- /dev/null +++ b/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; +} diff --git a/lxzn-module-mdc/src/main/java/org/jeecg/modules/mdc/mapper/AndonOrderMapper.java b/lxzn-module-mdc/src/main/java/org/jeecg/modules/mdc/mapper/AndonOrderMapper.java new file mode 100644 index 0000000..c624816 --- /dev/null +++ b/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> { + +} diff --git a/lxzn-module-mdc/src/main/java/org/jeecg/modules/mdc/mapper/MdcEquipmentPunchMapper.java b/lxzn-module-mdc/src/main/java/org/jeecg/modules/mdc/mapper/MdcEquipmentPunchMapper.java new file mode 100644 index 0000000..3b45151 --- /dev/null +++ b/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); +} diff --git a/lxzn-module-mdc/src/main/java/org/jeecg/modules/mdc/mapper/xml/AndonOrderMapper.xml b/lxzn-module-mdc/src/main/java/org/jeecg/modules/mdc/mapper/xml/AndonOrderMapper.xml new file mode 100644 index 0000000..cd37885 --- /dev/null +++ b/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> \ No newline at end of file diff --git a/lxzn-module-mdc/src/main/java/org/jeecg/modules/mdc/mapper/xml/MdcEquipmentPunchMapper.xml b/lxzn-module-mdc/src/main/java/org/jeecg/modules/mdc/mapper/xml/MdcEquipmentPunchMapper.xml new file mode 100644 index 0000000..48cc0e8 --- /dev/null +++ b/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> \ No newline at end of file diff --git a/lxzn-module-mdc/src/main/java/org/jeecg/modules/mdc/service/IAndonOrderService.java b/lxzn-module-mdc/src/main/java/org/jeecg/modules/mdc/service/IAndonOrderService.java new file mode 100644 index 0000000..c0ae7dd --- /dev/null +++ b/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); +} diff --git a/lxzn-module-mdc/src/main/java/org/jeecg/modules/mdc/service/IMdcEquipmentPunchService.java b/lxzn-module-mdc/src/main/java/org/jeecg/modules/mdc/service/IMdcEquipmentPunchService.java new file mode 100644 index 0000000..79be14a --- /dev/null +++ b/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); +} diff --git a/lxzn-module-mdc/src/main/java/org/jeecg/modules/mdc/service/impl/AndonOrderServiceImpl.java b/lxzn-module-mdc/src/main/java/org/jeecg/modules/mdc/service/impl/AndonOrderServiceImpl.java new file mode 100644 index 0000000..813d192 --- /dev/null +++ b/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); + } + + //鍙戦�亀ebsocket璇锋眰 + JSONObject jsonObject = new JSONObject(); + jsonObject.put(WebsocketConst.MSG_CMD, "andon"); + jsonObject.put("data", andonOrderWebSocketVoList); + webSocket.sendMessage(jsonObject.toJSONString()); + } + } +} diff --git a/lxzn-module-mdc/src/main/java/org/jeecg/modules/mdc/service/impl/MdcEquipmentPunchServiceImpl.java b/lxzn-module-mdc/src/main/java/org/jeecg/modules/mdc/service/impl/MdcEquipmentPunchServiceImpl.java new file mode 100644 index 0000000..8b79829 --- /dev/null +++ b/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); + + //鏃╃彮涓婄彮姝e父鏈�鏅氭墦鍗℃椂闂� + 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) { + //鏅氱彮姝e父涓婄彮鍗℃渶鏅氭墦鍗℃椂闂� + 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 + ); + //鏅氱彮姝e父涓嬬彮鏈�鏃╂墦鍗℃椂闂� + 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); + } +} diff --git a/lxzn-module-mdc/src/main/java/org/jeecg/modules/mdc/vo/AndonOrderWebSocketVo.java b/lxzn-module-mdc/src/main/java/org/jeecg/modules/mdc/vo/AndonOrderWebSocketVo.java new file mode 100644 index 0000000..411a4ec --- /dev/null +++ b/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; + + /** + * 璐d换浜� + */ + private String personResponsible; + + /** + * 鎶ヤ慨鏃堕棿 + */ + private String repairTime; + + /** + * 鏁呴殰鎻忚堪 + */ + private String faultInfo; + + /** + * 鎵�灞炲巶鎴� + */ + private String plantName; +} diff --git a/lxzn-module-msi/src/main/java/org/jeecg/modules/msi/utils/WebServiceUtil.java b/lxzn-module-msi/src/main/java/org/jeecg/modules/msi/utils/WebServiceUtil.java deleted file mode 100644 index a104726..0000000 --- a/lxzn-module-msi/src/main/java/org/jeecg/modules/msi/utils/WebServiceUtil.java +++ /dev/null @@ -1,62 +0,0 @@ -package org.jeecg.modules.msi.utils; - - -import org.apache.cxf.endpoint.Client; -import org.apache.cxf.jaxws.JaxWsProxyFactoryBean; -import org.apache.cxf.jaxws.endpoint.dynamic.JaxWsDynamicClientFactory; - - -public class WebServiceUtil { - /** - * 1.浠g悊绫诲伐鍘傜殑鏂瑰紡,闇�瑕佹嬁鍒板鏂圭殑鎺ュ彛鍦板潃, 鍚屾椂闇�瑕佸紩鍏ユ帴鍙� - */ - public static void invokeService_1(String address, Class<?> tClass){ - // 鎺ュ彛鍦板潃 - //String address = "http://localhost:8080/services/ws/api?wsdl"; - // 浠g悊宸ュ巶 - JaxWsProxyFactoryBean jaxWsProxyFactoryBean = new JaxWsProxyFactoryBean(); - // 璁剧疆浠g悊鍦板潃 - jaxWsProxyFactoryBean.setAddress(address); - // 璁剧疆鎺ュ彛绫诲瀷 - jaxWsProxyFactoryBean.setServiceClass(tClass); - // 鍒涘缓涓�涓唬鐞嗘帴鍙e疄鐜� - Object us = jaxWsProxyFactoryBean.create(); - // 鏁版嵁鍑嗗 - String data = "hello world"; - // 璋冪敤浠g悊鎺ュ彛鐨勬柟娉曡皟鐢ㄥ苟杩斿洖缁撴灉 - //String result = us.emrService(data); - //System.out.println("杩斿洖缁撴灉:" + result); - } - - /** - * 3. 鍔ㄦ�佽皟鐢� - */ - public static String invokeService(String uri, String data, String method) - { - JaxWsDynamicClientFactory dcf = JaxWsDynamicClientFactory.newInstance(); - Client client = dcf.createClient(uri); - Object[] objects = new Object[0]; - try { - objects = client.invoke(method, data); - } catch (Exception e) { - e.printStackTrace(); - } - return String.valueOf(objects[0]); - } - - /** - * 2. 鍔ㄦ�佽皟鐢� - */ - public static String invokeServiceObJect(String uri,Object[] datas, String method) - { - JaxWsDynamicClientFactory dcf = JaxWsDynamicClientFactory.newInstance(); - Client client = dcf.createClient(uri); - Object[] objects = new Object[0]; - try { - objects = client.invoke(method, datas); - } catch (Exception e) { - e.printStackTrace(); - } - return String.valueOf(objects[0]); - } -} -- Gitblit v1.9.3