From 21cbdad6f59a045910b22bb3bf771e47d56c096f Mon Sep 17 00:00:00 2001 From: cuilei <ray_tsu1@163.com> Date: 星期五, 13 六月 2025 11:36:08 +0800 Subject: [PATCH] Merge remote-tracking branch 'origin/master' --- lxzn-module-mdc/src/main/java/org/jeecg/modules/mdc/controller/MdcEquipmentPunchRateController.java | 81 +++++ lxzn-module-mdc/src/main/java/org/jeecg/modules/mdc/entity/AndonOrder.java | 5 lxzn-module-mdc/src/main/java/org/jeecg/modules/mdc/service/impl/MdcEquipmentPunchRateServiceImpl.java | 81 +++++ lxzn-module-mdc/src/main/java/org/jeecg/modules/mdc/service/IMdcEquipmentPunchService.java | 6 lxzn-module-mdc/src/main/java/org/jeecg/modules/mdc/entity/MdcEquipmentPunchRate.java | 129 ++++++++ lxzn-module-eam-common/src/main/java/org/jeecg/modules/eam/aspect/EquipmentHistoryLogAspect.java | 20 + lxzn-module-eam-common/src/main/java/org/jeecg/modules/eam/entity/EamSecondMaintenanceOrder.java | 0 lxzn-module-mdc-common/src/main/java/org/jeecg/modules/mdc/service/impl/MdcEquipmentServiceImpl.java | 2 lxzn-module-eam-common/src/main/java/org/jeecg/modules/eam/entity/EamThirdMaintenanceOrder.java | 0 lxzn-module-mdc/src/main/java/org/jeecg/modules/mdc/mapper/xml/MdcDowntimeOperatorMapper.xml | 2 lxzn-module-mdc/src/main/java/org/jeecg/modules/mdc/service/IMdcEquipmentPunchRateService.java | 19 + lxzn-module-mdc/src/main/java/org/jeecg/modules/mdc/service/impl/AndonOrderServiceImpl.java | 1 lxzn-module-mdc/src/main/java/org/jeecg/modules/mdc/entity/MdcEquipmentPunch.java | 104 ++++- lxzn-module-dnc/src/main/java/org/jeecg/modules/dnc/service/impl/ProductInfoServiceImpl.java | 12 lxzn-module-dnc/src/main/java/org/jeecg/modules/dnc/entity/DocInfo.java | 3 lxzn-module-mdc/src/main/java/org/jeecg/modules/mdc/mapper/xml/MdcEquipmentPunchMapper.xml | 91 ++++- lxzn-module-mdc/src/main/java/org/jeecg/modules/mdc/controller/MdcEquipmentPunchController.java | 85 ++-- lxzn-module-mdc/src/main/java/org/jeecg/modules/mdc/job/DailyPunchRateJob.java | 108 ++++++ lxzn-module-mdc/src/main/java/org/jeecg/modules/mdc/service/impl/MdcEquipmentPunchServiceImpl.java | 69 ++++ lxzn-module-mdc/src/main/java/org/jeecg/modules/mdc/mapper/xml/MdcEquipmentPunchRateMapper.xml | 6 lxzn-module-mdc/src/main/java/org/jeecg/modules/mdc/mapper/MdcEquipmentPunchRateMapper.java | 14 lxzn-module-dnc/src/main/java/org/jeecg/modules/dnc/listener/FileListener.java | 4 lxzn-module-mdc/src/main/java/org/jeecg/modules/mdc/mapper/MdcEquipmentPunchMapper.java | 18 + lxzn-module-system/lxzn-system-start/src/main/resources/application-prod.yml | 2 lxzn-module-mdc/src/main/java/org/jeecg/modules/mdc/dto/MdcEquipmentPunchExportDTO.java | 98 ++++++ 25 files changed, 858 insertions(+), 102 deletions(-) diff --git a/lxzn-module-dnc/src/main/java/org/jeecg/modules/dnc/entity/DocInfo.java b/lxzn-module-dnc/src/main/java/org/jeecg/modules/dnc/entity/DocInfo.java index 9e3df96..92c381e 100644 --- a/lxzn-module-dnc/src/main/java/org/jeecg/modules/dnc/entity/DocInfo.java +++ b/lxzn-module-dnc/src/main/java/org/jeecg/modules/dnc/entity/DocInfo.java @@ -82,6 +82,9 @@ //鎵�灞炶妭鐐逛唬鍙� @TableField(exist = false) private String nodeCode; + //鎵�灞炶妭鐐筰d + @TableField(exist = false) + private String nodeId; //璁惧绫诲悕绉� @TableField(exist = false) private String deviceName; diff --git a/lxzn-module-dnc/src/main/java/org/jeecg/modules/dnc/listener/FileListener.java b/lxzn-module-dnc/src/main/java/org/jeecg/modules/dnc/listener/FileListener.java index 59eb0af..b6eebf0 100644 --- a/lxzn-module-dnc/src/main/java/org/jeecg/modules/dnc/listener/FileListener.java +++ b/lxzn-module-dnc/src/main/java/org/jeecg/modules/dnc/listener/FileListener.java @@ -26,7 +26,7 @@ @Override public void onStart(FileAlterationObserver observer) { - log.info("寮�濮嬬洃鍚洰褰�: {}", observer.getDirectory().getAbsolutePath()); +// log.info("寮�濮嬬洃鍚洰褰�: {}", observer.getDirectory().getAbsolutePath()); } @Override @@ -72,7 +72,7 @@ @Override public void onStop(FileAlterationObserver observer) { - log.info("缁撴潫鐩戝惉鐩綍: {}", observer.getDirectory().getAbsolutePath()); +// log.info("缁撴潫鐩戝惉鐩綍: {}", observer.getDirectory().getAbsolutePath()); } /** diff --git a/lxzn-module-dnc/src/main/java/org/jeecg/modules/dnc/service/impl/ProductInfoServiceImpl.java b/lxzn-module-dnc/src/main/java/org/jeecg/modules/dnc/service/impl/ProductInfoServiceImpl.java index 0562ada..f1c9ad0 100644 --- a/lxzn-module-dnc/src/main/java/org/jeecg/modules/dnc/service/impl/ProductInfoServiceImpl.java +++ b/lxzn-module-dnc/src/main/java/org/jeecg/modules/dnc/service/impl/ProductInfoServiceImpl.java @@ -422,6 +422,7 @@ * @param paramId 浜у搧鏍戣妭鐐筰d * @param relativeFlag 1 鏄� 2 鍚� * @param userIds 娣诲姞鐢ㄦ埛ids + * todo浼樺寲缁撴瀯锛岄噰鐢╩ix琛ㄨ繘琛岀埗瀛愰�掑綊鏌ヨ锛屽垎绫昏繘琛屾潈闄愬垎閰嶏紙鍗曡〃鏌ヨ锛� * @return */ @Override @@ -457,6 +458,7 @@ * @param paramId 浜у搧鏍戣妭鐐筰d * @param relativeFlag 1 鏄� 2 鍚� * @param departmentIds 娣诲姞閮ㄩ棬ids + * todo浼樺寲缁撴瀯锛岄噰鐢╩ix琛ㄨ繘琛岀埗瀛愰�掑綊鏌ヨ锛屽垎绫昏繘琛屾潈闄愬垎閰嶏紙鍗曡〃鏌ヨ锛� * @return */ @Override @@ -492,6 +494,7 @@ * @param paramId 浜у搧鏍戣妭鐐筰d * @param relativeFlag 1 鏄� 2 鍚� * @param userIds 绉婚櫎鐢ㄦ埛ids + * todo浼樺寲缁撴瀯锛岄噰鐢╩ix琛ㄨ繘琛岀埗瀛愰�掑綊鏌ヨ锛屽垎绫昏繘琛屾潈闄愬垎閰嶏紙鍗曡〃鏌ヨ锛� * @return */ @Override @@ -526,6 +529,7 @@ * @param paramId 浜у搧鏍戣妭鐐筰d * @param relativeFlag 1 鏄� 2 鍚� * @param departmentIds 绉婚櫎閮ㄩ棬ids + * todo浼樺寲缁撴瀯锛岄噰鐢╩ix琛ㄨ繘琛岀埗瀛愰�掑綊鏌ヨ锛屽垎绫昏繘琛屾潈闄愬垎閰嶏紙鍗曡〃鏌ヨ锛� * @return */ @Override @@ -1179,31 +1183,37 @@ ProductInfo productInfo=this.getById(docInfo.getAttributionId()); docInfo.setNodeName(productInfo.getProductName()); docInfo.setNodeCode(productInfo.getProductNo()); + docInfo.setNodeId(productInfo.getProductId()); break; case 2: ComponentInfo componentInfo=componentInfoService.getById(docInfo.getAttributionId()); docInfo.setNodeName(componentInfo.getComponentName()); docInfo.setNodeCode(componentInfo.getComponentCode()); + docInfo.setNodeId(componentInfo.getComponentId()); break; case 3: PartsInfo partsInfo=partsInfoService.getById(docInfo.getAttributionId()); docInfo.setNodeCode(partsInfo.getPartsCode()); docInfo.setNodeName(partsInfo.getPartsName()); + docInfo.setNodeId(partsInfo.getPartsId()); break; case 4: ProcessSpecVersion processSpecVersion=processSpecVersionService.getById(docInfo.getAttributionId()); docInfo.setNodeName(processSpecVersion.getProcessSpecVersionName()); docInfo.setNodeCode(processSpecVersion.getProcessSpecVersionCode()); + docInfo.setNodeId(processSpecVersion.getId()); break; case 5: ProcessStream processStream=processStreamService.getById(docInfo.getAttributionId()); docInfo.setNodeName(processStream.getProcessName()); docInfo.setNodeCode(processStream.getProcessCode()); + docInfo.setNodeId(processStream.getProcessId()); break; case 6: WorkStep workStep=workStepService.getById(docInfo.getAttributionId()); docInfo.setNodeName(workStep.getStepName()); docInfo.setNodeCode(workStep.getStepName()); + docInfo.setNodeId(workStep.getId()); break; } }); @@ -1225,11 +1235,13 @@ ProcessStream processStream=processStreamService.getById(deviceType.getAttributionId()); docInfo.setNodeName(processStream.getProcessName()); docInfo.setNodeCode(processStream.getProcessCode()); + docInfo.setNodeId(processStream.getProcessId()); }else { //宸ユ涓嬬殑璁惧绫� WorkStep workStep=workStepService.getById(deviceType.getAttributionId()); docInfo.setNodeName(workStep.getStepName()); docInfo.setNodeCode(workStep.getStepName()); + docInfo.setNodeId(workStep.getId()); } }); } diff --git a/lxzn-module-eam-common/src/main/java/org/jeecg/modules/eam/aspect/EquipmentHistoryLogAspect.java b/lxzn-module-eam-common/src/main/java/org/jeecg/modules/eam/aspect/EquipmentHistoryLogAspect.java index e588f05..0cae0d9 100644 --- a/lxzn-module-eam-common/src/main/java/org/jeecg/modules/eam/aspect/EquipmentHistoryLogAspect.java +++ b/lxzn-module-eam-common/src/main/java/org/jeecg/modules/eam/aspect/EquipmentHistoryLogAspect.java @@ -100,8 +100,28 @@ } break; case SECOND_MAINTENANCE: + if (result instanceof EamSecondMaintenanceOrder) { + EamSecondMaintenanceOrder order = (EamSecondMaintenanceOrder) result; + if (SecondMaintenanceStatusEnum.COMPLETE.name().equals(order.getMaintenanceStatus())) { + log.setEquipmentId(order.getEquipmentId()); + log.setBusinessId(order.getId()); + log.setOperator(order.getOperator()); + log.setDescription(order.getConfirmComment()); + log.setCreateTime(order.getActualEndTime()); + } + } break; case THIRD_MAINTENANCE: + if (result instanceof EamThirdMaintenanceOrder) { + EamThirdMaintenanceOrder order = (EamThirdMaintenanceOrder) result; + if (ThirdMaintenanceStatusEnum.COMPLETE.name().equals(order.getMaintenanceStatus())) { + log.setEquipmentId(order.getEquipmentId()); + log.setBusinessId(order.getId()); + log.setOperator(order.getOperator()); + log.setDescription(order.getLeaderConfirmComment()); + log.setCreateTime(order.getActualEndTime()); + } + } break; case REPORT_REPAIR: if (result instanceof EamReportRepair) { diff --git a/lxzn-module-eam/src/main/java/org/jeecg/modules/eam/entity/EamSecondMaintenanceOrder.java b/lxzn-module-eam-common/src/main/java/org/jeecg/modules/eam/entity/EamSecondMaintenanceOrder.java similarity index 100% rename from lxzn-module-eam/src/main/java/org/jeecg/modules/eam/entity/EamSecondMaintenanceOrder.java rename to lxzn-module-eam-common/src/main/java/org/jeecg/modules/eam/entity/EamSecondMaintenanceOrder.java diff --git a/lxzn-module-eam/src/main/java/org/jeecg/modules/eam/entity/EamThirdMaintenanceOrder.java b/lxzn-module-eam-common/src/main/java/org/jeecg/modules/eam/entity/EamThirdMaintenanceOrder.java similarity index 100% rename from lxzn-module-eam/src/main/java/org/jeecg/modules/eam/entity/EamThirdMaintenanceOrder.java rename to lxzn-module-eam-common/src/main/java/org/jeecg/modules/eam/entity/EamThirdMaintenanceOrder.java diff --git a/lxzn-module-mdc-common/src/main/java/org/jeecg/modules/mdc/service/impl/MdcEquipmentServiceImpl.java b/lxzn-module-mdc-common/src/main/java/org/jeecg/modules/mdc/service/impl/MdcEquipmentServiceImpl.java index c4d6284..9fa5fb6 100644 --- a/lxzn-module-mdc-common/src/main/java/org/jeecg/modules/mdc/service/impl/MdcEquipmentServiceImpl.java +++ b/lxzn-module-mdc-common/src/main/java/org/jeecg/modules/mdc/service/impl/MdcEquipmentServiceImpl.java @@ -1049,7 +1049,7 @@ LoginUser user = (LoginUser) SecurityUtils.getSubject().getPrincipal(); String userId = user.getId(); if (StringUtils.isNotEmpty(user.getEquipmentIds())) { - return this.baseMapper.selectList(new LambdaQueryWrapper<MdcEquipment>().eq(MdcEquipment::getEquipmentId, Arrays.asList(user.getEquipmentIds().split(StringPool.COMMA)))); + return this.baseMapper.selectList(new LambdaQueryWrapper<MdcEquipment>().in(MdcEquipment::getEquipmentId, Arrays.asList(user.getEquipmentIds().split(StringPool.COMMA)))); } //鑾峰彇鎵�鏈変骇绾挎暟鎹� List<MdcProduction> productionList = mdcProductionService.list(new LambdaQueryWrapper<MdcProduction>().eq(MdcProduction::getDelFlag, CommonConstant.DEL_FLAG_0.toString()).orderByAsc(MdcProduction::getProductionOrder)); 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 index 482612f..f6aa15c 100644 --- 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 @@ -16,55 +16,56 @@ /** * @Description: mdc_equipment_punch * @Author: jeecg-boot - * @Date: 2025-06-09 + * @Date: 2025-06-09 * @Version: V1.0 */ -@Api(tags="涓婁笅鐝墦鍗¤褰曡〃") +@Api(tags = "涓婁笅鐝墦鍗¤褰曡〃") @RestController @RequestMapping("/mdcEquipmentPunch") @Slf4j public class MdcEquipmentPunchController extends JeecgController<MdcEquipmentPunch, IMdcEquipmentPunchService> { - @Autowired - private IMdcEquipmentPunchService mdcEquipmentPunchService; + @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()); - } + private static final String msg = "鎵撳崱鎴愬姛锛�"; - /** - * 涓婄彮鎵撳崱 - * - * @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); - } + /** + * 鏌ヨ褰撳墠鐧诲綍浜烘墍璐熻矗璁惧鎵撳崱鎯呭喌 + * + * @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 = "/workDown") - public Result<String> workDown(@RequestBody MdcEquipmentPunch mdcEquipmentPunch) { - mdcEquipmentPunchService.workDown(mdcEquipmentPunch); - return Result.OK(msg); - } + /** + * 涓婄彮鎵撳崱 + * + * @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/controller/MdcEquipmentPunchRateController.java b/lxzn-module-mdc/src/main/java/org/jeecg/modules/mdc/controller/MdcEquipmentPunchRateController.java new file mode 100644 index 0000000..ac98d6b --- /dev/null +++ b/lxzn-module-mdc/src/main/java/org/jeecg/modules/mdc/controller/MdcEquipmentPunchRateController.java @@ -0,0 +1,81 @@ +package org.jeecg.modules.mdc.controller; + +import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; +import com.baomidou.mybatisplus.core.metadata.IPage; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import io.swagger.annotations.Api; +import io.swagger.annotations.ApiOperation; +import lombok.extern.slf4j.Slf4j; +import org.jeecg.common.api.vo.Result; +import org.jeecg.common.aspect.annotation.AutoLog; +import org.jeecg.common.system.base.controller.JeecgController; +import org.jeecg.common.system.query.QueryGenerator; +import org.jeecg.modules.mdc.entity.MdcEquipmentPunchRate; +import org.jeecg.modules.mdc.service.IMdcEquipmentPunchRateService; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.web.bind.annotation.GetMapping; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RequestParam; +import org.springframework.web.bind.annotation.RestController; +import org.springframework.web.servlet.ModelAndView; + +import javax.servlet.http.HttpServletRequest; + +/** + * @Description: mdc_equipment_punch_rate + * @Author: jeecg-boot + * @Date: 2025-06-09 + * @Version: V1.0 + */ +@Api(tags = "璁惧鎵撳崱鐜囨姤琛�") +@RestController +@RequestMapping("/mdcEquipmentPunchRate") +@Slf4j +public class MdcEquipmentPunchRateController extends JeecgController<MdcEquipmentPunchRate, IMdcEquipmentPunchRateService> { + @Autowired + private IMdcEquipmentPunchRateService mdcEquipmentPunchService; + + + + + + + /** + * 鍒嗛〉鍒楄〃鏌ヨ + * + * @param mdEquipmentPunch 鏌ヨ鍙傛暟 + * @param pageNo 褰撳墠椤电爜 + * @param pageSize 姣忛〉鏉℃暟 + * @param req 璇锋眰瀵硅薄 + * @return + */ + @ApiOperation(value = "璁惧鎵撳崱鐜�-鍒嗛〉鍒楄〃鏌ヨ", notes = "璁惧鎵撳崱鐜�-鍒嗛〉鍒楄〃鏌ヨ") + @AutoLog(value = "璁惧鎵撳崱鐜�-鍒嗛〉鍒楄〃鏌ヨ") + @GetMapping(value = "/queryPageList") + public Result<IPage<MdcEquipmentPunchRate>> queryPageList(MdcEquipmentPunchRate mdEquipmentPunch, + @RequestParam(name = "pageNo", defaultValue = "1") Integer pageNo, + @RequestParam(name = "pageSize", defaultValue = "10") Integer pageSize, + HttpServletRequest req) { + + QueryWrapper<MdcEquipmentPunchRate> queryWrapper = QueryGenerator.initQueryWrapper(mdEquipmentPunch, req.getParameterMap()); + Page<MdcEquipmentPunchRate> page = new Page<MdcEquipmentPunchRate>(pageNo, pageSize); + IPage<MdcEquipmentPunchRate> pageList = mdcEquipmentPunchService.page(page, queryWrapper); + return Result.OK(pageList); + } + + + /** + * 瀵煎嚭excel + * + * @param request + * @param mdcEquipmentPunchRate + */ + @RequestMapping(value = "/exportXls") + public ModelAndView exportXls(HttpServletRequest request, MdcEquipmentPunchRate mdcEquipmentPunchRate) { + return super.exportXls(request, mdcEquipmentPunchRate, MdcEquipmentPunchRate.class, "璁惧鎵撳崱鐜囨姤琛�"); + } + + + + +} diff --git a/lxzn-module-mdc/src/main/java/org/jeecg/modules/mdc/dto/MdcEquipmentPunchExportDTO.java b/lxzn-module-mdc/src/main/java/org/jeecg/modules/mdc/dto/MdcEquipmentPunchExportDTO.java new file mode 100644 index 0000000..e86cad0 --- /dev/null +++ b/lxzn-module-mdc/src/main/java/org/jeecg/modules/mdc/dto/MdcEquipmentPunchExportDTO.java @@ -0,0 +1,98 @@ +package org.jeecg.modules.mdc.dto; + + +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; +import org.jeecg.common.aspect.annotation.Dict; + +import java.math.BigDecimal; +import java.util.Date; +@Data +public class MdcEquipmentPunchExportDTO { + + + @ApiModelProperty(value = "璁惧缂栧彿") + private String equipmentId; + + + @ApiModelProperty(value = "鎵撳崱鐢ㄦ埛") + @Dict(dicCode = "id", dictTable = "sys_user", dicText = "realname") + private String punchUser; + + + @ApiModelProperty(value = "涓婄彮鏃堕棿") + private Date checkInTime; + /** + * 涓嬬彮鏃堕棿 + */ + + @ApiModelProperty(value = "涓嬬彮鏃堕棿") + private Date checkOutTime; + /** + * 璁板綍鏃ユ湡 + */ + + @ApiModelProperty(value = "璁板綍鏃ユ湡") + private String recordDate; + + + @ApiModelProperty(value = "鐝") + @Dict(dicCode = "shift_schedule") + private Integer shiftSchedule; + + + @ApiModelProperty(value = "鏄惁缂哄崱") + private Integer isAbsent; + + + @ApiModelProperty(value = "鏄惁杩熷埌") + private Integer isLate; + + + @ApiModelProperty(value = "鏄惁鏃╅��") + private Integer isEarly; + + + /** + * 鏃╃彮涓婄彮鎵撳崱鐜� + */ + + + @ApiModelProperty(value = "鏃╃彮涓婄彮鎵撳崱鐜�") + private BigDecimal morningShiftInRate; + + /** + * 鏅氱彮涓婄彮鎵撳崱鐜� + */ + + @ApiModelProperty(value = "鏅氱彮涓婄彮鎵撳崱鐜�") + private BigDecimal eveningShiftInRate; + + + @ApiModelProperty(value = "鏃╃彮涓嬬彮鎵撳崱鐜�") + private BigDecimal morningShiftOutRate; + + + @ApiModelProperty(value = "鏅氱彮涓嬬彮鎵撳崱鐜�") + private BigDecimal eveningShiftOutRate; + + + @ApiModelProperty(value = "鐧界彮涓婄彮鎵撳崱璁惧鏁伴噺") + private Integer morningShiftInDeviceNum; + + + @ApiModelProperty(value = "鐧界彮涓嬬彮鎵撳崱璁惧鏁伴噺") + private Integer morningShiftOutDeviceNum; + + + @ApiModelProperty(value = "澶滅彮涓婄彮鎵撳崱璁惧鏁伴噺") + private Integer eveningShiftInDeviceNum; + + @ApiModelProperty(value = "澶滅彮涓嬬彮鎵撳崱璁惧鏁伴噺") + private Integer eveningShiftOutDeviceNum; + + @ApiModelProperty(value = "璁惧鎬绘暟") + private Integer deviceCountNum; + + private String punchUserRealName; +} 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 index 5321b7a..84d58c3 100644 --- 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 @@ -12,6 +12,7 @@ import com.baomidou.mybatisplus.annotation.TableLogic; import lombok.Data; import com.fasterxml.jackson.annotation.JsonFormat; +import org.jeecg.common.constant.CommonConstant; import org.springframework.format.annotation.DateTimeFormat; import org.jeecgframework.poi.excel.annotation.Excel; import org.jeecg.common.aspect.annotation.Dict; @@ -57,6 +58,7 @@ */ @Excel(name = "瀹夌伅绫诲瀷", width = 15) @ApiModelProperty(value = "瀹夌伅绫诲瀷") + @Dict(dicCode = "andon_type") private String andonType; /** * 瀹夌伅浜�(鍛煎彨浜�) @@ -111,6 +113,7 @@ */ @Excel(name = "瀹夌伅鐘舵��;寰呭搷搴斻�佸緟澶勭悊銆佸凡瀹屾垚", width = 15) @ApiModelProperty(value = "瀹夌伅鐘舵��;寰呭搷搴斻�佸緟澶勭悊銆佸凡瀹屾垚") + @Dict(dicCode = "order_status") private String orderStatus; /** * 闂鎻忚堪 @@ -136,7 +139,7 @@ @Excel(name = "鍒犻櫎鏍囪", width = 15) @ApiModelProperty(value = "鍒犻櫎鏍囪") @TableLogic - private Integer delFlag; + private Integer delFlag = CommonConstant.DEL_FLAG_0; /** * 鍒涘缓浜� */ 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 index b64bcc4..9ae8010 100644 --- 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 @@ -1,22 +1,24 @@ 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.Data; import lombok.EqualsAndHashCode; import lombok.experimental.Accessors; +import org.jeecg.common.aspect.annotation.Dict; +import org.jeecg.common.system.base.entity.JeecgEntity; +import org.jeecgframework.poi.excel.annotation.Excel; +import org.springframework.format.annotation.DateTimeFormat; + +import java.io.Serializable; +import java.math.BigDecimal; +import java.util.Date; /** * @Description: mdc_equipment_punch @@ -29,7 +31,7 @@ @Accessors(chain = true) @EqualsAndHashCode(callSuper = false) @ApiModel(value = "mdc_equipment_punch瀵硅薄", description = "mdc_equipment_punch") -public class MdcEquipmentPunch implements Serializable { +public class MdcEquipmentPunch extends JeecgEntity implements Serializable { private static final long serialVersionUID = 1L; /** @@ -49,18 +51,18 @@ */ @Excel(name = "鎵撳崱鐢ㄦ埛", width = 15) @ApiModelProperty(value = "鎵撳崱鐢ㄦ埛") + @Dict(dicCode = "id", dictTable = "sys_user", dicText = "realname") 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; @@ -87,7 +89,7 @@ @ApiModelProperty(value = "璁板綍鏃ユ湡") private String recordDate; /** - * 鐝 + * 鐝 */ @Excel(name = "鐝", width = 15) @ApiModelProperty(value = "鐝") @@ -107,7 +109,7 @@ @ApiModelProperty(value = "鏄惁缂哄崱") private Integer isAbsent; /** - * 鏄惁杩熷埌 + * 鏄惁杩熷埌锛�0鏈棭閫�锛�1鏃╅��锛� */ @Excel(name = "鏄惁杩熷埌", width = 15) @ApiModelProperty(value = "鏄惁杩熷埌") @@ -118,28 +120,74 @@ @Excel(name = "鏄惁鏃╅��", width = 15) @ApiModelProperty(value = "鏄惁鏃╅��") private Integer isEarly; + /** - * 鍒涘缓浜� + * 鏃╃彮涓婄彮鎵撳崱鐜� */ - @ApiModelProperty(value = "鍒涘缓浜�") - private String createBy; + @TableField(exist = false) + @Excel(name = "鏃╃彮涓婄彮鎵撳崱鐜�", width = 15) + @ApiModelProperty(value = "鏃╃彮涓婄彮鎵撳崱鐜�") + private BigDecimal morningShiftInRate; + /** - * 鍒涘缓鏃堕棿 + * 鏅氱彮涓婄彮鎵撳崱鐜� */ - @JsonFormat(timezone = "GMT+8", pattern = DatePattern.NORM_DATETIME_PATTERN) - @DateTimeFormat(pattern = DatePattern.NORM_DATETIME_PATTERN) - @ApiModelProperty(value = "鍒涘缓鏃堕棿") - private Date createTime; + @TableField(exist = false) + @Excel(name = "鏅氱彮涓婄彮鎵撳崱鐜�", width = 15) + @ApiModelProperty(value = "鏅氱彮涓婄彮鎵撳崱鐜�") + private BigDecimal eveningShiftInRate; + /** - * 鏇存柊浜� + * 鏃╃彮涓嬬彮鎵撳崱鐜� */ - @ApiModelProperty(value = "鏇存柊浜�") - private String updateBy; + @TableField(exist = false) + @Excel(name = "鏃╃彮涓嬬彮鎵撳崱鐜�", width = 15) + @ApiModelProperty(value = "鏃╃彮涓嬬彮鎵撳崱鐜�") + private BigDecimal morningShiftOutRate; + /** - * 鏇存柊鏃堕棿 + * 鏅氱彮涓嬬彮鎵撳崱鐜� */ - @JsonFormat(timezone = "GMT+8", pattern = DatePattern.NORM_DATETIME_PATTERN) - @DateTimeFormat(pattern = DatePattern.NORM_DATETIME_PATTERN) - @ApiModelProperty(value = "鏇存柊鏃堕棿") - private Date updateTime; + @TableField(exist = false) + @Excel(name = "鏅氱彮涓嬬彮鎵撳崱鐜�", width = 15) + @ApiModelProperty(value = "鏅氱彮涓嬬彮鎵撳崱鐜�") + private BigDecimal eveningShiftOutRate; + + /** + * 鐧界彮涓婄彮鎵撳崱璁惧鏁伴噺 + */ + @TableField(exist = false) + @Excel(name = "鐧界彮涓婄彮鎵撳崱璁惧鏁伴噺", width = 15) + @ApiModelProperty(value = "鐧界彮涓婄彮鎵撳崱璁惧鏁伴噺") + private Integer morningShiftInDeviceNum; + + /** + * 鐧界彮涓嬬彮鎵撳崱璁惧鏁伴噺 + */ + @TableField(exist = false) + @Excel(name = "鐧界彮涓嬬彮鎵撳崱璁惧鏁伴噺", width = 15) + @ApiModelProperty(value = "鐧界彮涓嬬彮鎵撳崱璁惧鏁伴噺") + private Integer morningShiftOutDeviceNum; + /** + * 澶滅彮涓婄彮鎵撳崱璁惧鏁伴噺 + */ + @TableField(exist = false) + @Excel(name = "澶滅彮涓婄彮鎵撳崱璁惧鏁伴噺", width = 15) + @ApiModelProperty(value = "澶滅彮涓婄彮鎵撳崱璁惧鏁伴噺") + private Integer eveningShiftInDeviceNum; + /** + * 澶滅彮涓嬬彮鎵撳崱璁惧鏁伴噺 + */ + @TableField(exist = false) + @Excel(name = "澶滅彮涓嬬彮鎵撳崱璁惧鏁伴噺", width = 15) + @ApiModelProperty(value = "澶滅彮涓嬬彮鎵撳崱璁惧鏁伴噺") + private Integer eveningShiftOutDeviceNum; + /** + * 璁惧鎬绘暟 + */ + @TableField(exist = false) + @Excel(name = "璁惧鎬绘暟", width = 15) + @ApiModelProperty(value = "璁惧鎬绘暟") + private Integer deviceCountNum; + } diff --git a/lxzn-module-mdc/src/main/java/org/jeecg/modules/mdc/entity/MdcEquipmentPunchRate.java b/lxzn-module-mdc/src/main/java/org/jeecg/modules/mdc/entity/MdcEquipmentPunchRate.java new file mode 100644 index 0000000..a77b65d --- /dev/null +++ b/lxzn-module-mdc/src/main/java/org/jeecg/modules/mdc/entity/MdcEquipmentPunchRate.java @@ -0,0 +1,129 @@ +package org.jeecg.modules.mdc.entity; + +import com.baomidou.mybatisplus.annotation.IdType; +import com.baomidou.mybatisplus.annotation.TableId; +import com.baomidou.mybatisplus.annotation.TableName; +import io.swagger.annotations.ApiModel; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; +import lombok.EqualsAndHashCode; +import lombok.experimental.Accessors; +import org.jeecg.common.aspect.annotation.Dict; +import org.jeecg.common.system.base.entity.JeecgEntity; +import org.jeecgframework.poi.excel.annotation.Excel; + +import java.io.Serializable; +import java.math.BigDecimal; + +/** + * @Description: mdc_equipment_punch_rate + * @Author: jeecg-boot + * @Date: 2025-06-09 + * @Version: V1.0 + */ +@Data +@TableName("mdc_equipment_punch_rate") +@Accessors(chain = true) +@EqualsAndHashCode(callSuper = false) +@ApiModel(value = "mdc_equipment_punch_rate瀵硅薄", description = "mdc_equipment_punch_rate") +public class MdcEquipmentPunchRate extends JeecgEntity 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 theDate; + /** + * 鐝 + */ + @Excel(name = "鐝", width = 15) + @ApiModelProperty(value = "鐝") + @Dict(dicCode = "shift_schedule") + private Integer shiftSchedule; + + /** + * 鏃╃彮涓婄彮鎵撳崱鐜� + */ + + @Excel(name = "鏃╃彮涓婄彮鎵撳崱鐜�(%)", width = 15) + @ApiModelProperty(value = "鏃╃彮涓婄彮鎵撳崱鐜�") + private BigDecimal mornShiftInRate; + + /** + * 鏅氱彮涓婄彮鎵撳崱鐜� + */ + + @Excel(name = "鏅氱彮涓婄彮鎵撳崱鐜�(%)", width = 15) + @ApiModelProperty(value = "鏅氱彮涓婄彮鎵撳崱鐜�") + private BigDecimal evenShiftInRate; + + /** + * 鏃╃彮涓嬬彮鎵撳崱鐜� + */ + + @Excel(name = "鏃╃彮涓嬬彮鎵撳崱鐜�(%)", width = 15) + @ApiModelProperty(value = "鏃╃彮涓嬬彮鎵撳崱鐜�") + private BigDecimal mornShiftOutRate; + + /** + * 鏅氱彮涓嬬彮鎵撳崱鐜� + */ + + @Excel(name = "鏅氱彮涓嬬彮鎵撳崱鐜�(%)", width = 15) + @ApiModelProperty(value = "鏅氱彮涓嬬彮鎵撳崱鐜�") + private BigDecimal evenShiftOutRate; + + /** + * 鐧界彮涓婄彮鎵撳崱璁惧鏁伴噺 + */ + + @Excel(name = "鐧界彮涓婄彮鎵撳崱璁惧鏁伴噺", width = 15) + @ApiModelProperty(value = "鐧界彮涓婄彮鎵撳崱璁惧鏁伴噺") + private Integer mornShiftInNum; + + /** + * 鐧界彮涓嬬彮鎵撳崱璁惧鏁伴噺 + */ + + @Excel(name = "鐧界彮涓嬬彮鎵撳崱璁惧鏁伴噺", width = 15) + @ApiModelProperty(value = "鐧界彮涓嬬彮鎵撳崱璁惧鏁伴噺") + private Integer mornShiftOutNum; + /** + * 澶滅彮涓婄彮鎵撳崱璁惧鏁伴噺 + */ + + @Excel(name = "澶滅彮涓婄彮鎵撳崱璁惧鏁伴噺", width = 15) + @ApiModelProperty(value = "澶滅彮涓婄彮鎵撳崱璁惧鏁伴噺") + private Integer evenShiftInNum; + /** + * 澶滅彮涓嬬彮鎵撳崱璁惧鏁伴噺 + */ + + @Excel(name = "澶滅彮涓嬬彮鎵撳崱璁惧鏁伴噺", width = 15) + @ApiModelProperty(value = "澶滅彮涓嬬彮鎵撳崱璁惧鏁伴噺") + private Integer evenShiftOutNum; + /** + * 璁惧鎬绘暟 + */ + + @Excel(name = "璁惧鎬绘暟", width = 15) + @ApiModelProperty(value = "璁惧鎬绘暟") + private Integer deviceCountNum; + +} diff --git a/lxzn-module-mdc/src/main/java/org/jeecg/modules/mdc/job/DailyPunchRateJob.java b/lxzn-module-mdc/src/main/java/org/jeecg/modules/mdc/job/DailyPunchRateJob.java new file mode 100644 index 0000000..cff7388 --- /dev/null +++ b/lxzn-module-mdc/src/main/java/org/jeecg/modules/mdc/job/DailyPunchRateJob.java @@ -0,0 +1,108 @@ + +package org.jeecg.modules.mdc.job; + +import cn.hutool.core.date.DatePattern; +import lombok.extern.slf4j.Slf4j; +import org.jeecg.modules.mdc.entity.MdcEquipmentPunch; +import org.jeecg.modules.mdc.service.IMdcEquipmentPunchRateService; +import org.jeecg.modules.mdc.service.IMdcEquipmentPunchService; +import org.jeecg.modules.quartz.entity.QuartzJob; +import org.jeecg.modules.quartz.entity.SysQuartzLog; +import org.jeecg.modules.quartz.service.IQuartzJobService; +import org.jeecg.modules.quartz.service.ISysQuartzLogService; +import org.jeecg.modules.system.service.ISysAnnouncementService; +import org.quartz.Job; +import org.quartz.JobExecutionContext; +import org.quartz.JobExecutionException; + +import javax.annotation.Resource; +import java.time.LocalDate; +import java.time.format.DateTimeFormatter; +import java.util.Date; +import java.util.List; + +/** + * @Description: 姣忔棩鍑屾櫒瀹氭椂璁$畻鍓嶄竴澶╃殑璁惧鎵撳崱鐜囷紝骞跺叆搴� + * @Author: Lius + * @CreateTime: 2025-06-12 + */ +@Slf4j +public class DailyPunchRateJob implements Job { + + private String parameter; // 鍙�夊弬鏁帮細鎸囧畾鏃ユ湡锛堝 "2025-06-11"锛� + + public void setParameter(String parameter) { + this.parameter = parameter; + } + + @Resource + private IQuartzJobService quartzJobService; + + @Resource + private ISysQuartzLogService sysQuartzLogService; + + @Resource + private ISysAnnouncementService sysAnnouncementService; + + @Resource + private IMdcEquipmentPunchService mdcEquipmentPunchService; + + + @Resource + private IMdcEquipmentPunchRateService mdcEquipmentPunchRateService; + + + @Override + public void execute(JobExecutionContext context) throws JobExecutionException { + SysQuartzLog quartzLog = new SysQuartzLog(); + quartzLog.setCreateTime(new Date()); + + List<QuartzJob> jobList = this.quartzJobService.findByJobClassName(this.getClass().getName()); + if (jobList != null && !jobList.isEmpty()) { + quartzLog.setJobId(jobList.get(0).getId()); + } + + log.info("銆愬紑濮嬫墽琛屾瘡鏃ヨ澶囨墦鍗$巼缁熻浠诲姟銆�"); + + long startTime = System.currentTimeMillis(); + + try { + String yesterdayStr; + + + + if (parameter != null && !parameter.isEmpty()) { + yesterdayStr = parameter; // 鏀寔鎵嬪姩浼犲弬 + } else { + LocalDate yesterday = LocalDate.now().minusDays(1); + yesterdayStr = yesterday.format(DateTimeFormatter.ofPattern(DatePattern.PURE_DATE_PATTERN)); // 鏍煎紡鍖栦负 "yyyy-MM-dd" + } + log.info("鉁� 鎴愬姛瀹屾垚姣忔棩璁惧鎵撳崱鐜囩粺璁℃暟鎹�", yesterdayStr); + // Step 1锛氳幏鍙栨槰鏃ユ墦鍗℃暟鎹� + List<MdcEquipmentPunch> punchRecords = mdcEquipmentPunchService.getYesterdayRecords(yesterdayStr); + log.info("鉁� 鎴愬姛瀹屾垚姣忔棩璁惧鎵撳崱鐜囩粺璁℃暟鎹�", punchRecords); + if (punchRecords == null || punchRecords.isEmpty()) { + log.warn("鈿狅笍 娌℃湁鎵惧埌鏄ㄦ棩璁惧鎵撳崱鏁版嵁"); + quartzLog.setIsSuccess(0); + return; + } + + // Step 2锛氫繚瀛樺埌鎵撳崱鐜囪〃 + mdcEquipmentPunchRateService.savePunchRates(yesterdayStr, punchRecords); + + quartzLog.setIsSuccess(0); + log.info("鉁� 鎴愬姛瀹屾垚姣忔棩璁惧鎵撳崱鐜囩粺璁★紝鍏卞鐞� {} 鏉¤褰曪紝鏃ユ湡锛歿}", punchRecords.size(), yesterdayStr); + } catch (Exception e) { + quartzLog.setIsSuccess(-1); + quartzLog.setExceptionDetail(e.getMessage()); + log.error("鉂� 璁惧鎵撳崱鐜囩粺璁′换鍔℃墽琛屽け璐�", e); + sysAnnouncementService.jobSendMessage("璁惧鎵撳崱鐜囩粺璁′换鍔�", e.getMessage()); + } + + // 璁板綍鎵ц鏃堕棿 + long endTime = System.currentTimeMillis(); + quartzLog.setExecutionTime((int)(endTime - startTime)); + sysQuartzLogService.save(quartzLog); + } + +} \ No newline at end of file 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 index 3b45151..16091a2 100644 --- 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 @@ -15,4 +15,22 @@ public interface MdcEquipmentPunchMapper extends BaseMapper<MdcEquipmentPunch> { List<MdcEquipmentPunch> list(@Param("equipmentIds") List<String> equipmentIds, @Param("date") String date); + + + // 鏌ヨ鏃╃彮涓婄彮鎵撳崱璁惧鏁� + int countMorningShiftIn(@Param("date") String date); + + // 鏌ヨ鏅氱彮涓婄彮鎵撳崱璁惧鏁� + int countEveningShiftIn(@Param("date") String date); + + // 鏌ヨ鏃╃彮涓嬬彮鎵撳崱璁惧鏁� + int countMorningShiftOut(@Param("date") String date); + + // 鏌ヨ鏅氱彮涓嬬彮鎵撳崱璁惧鏁� + int countEveningShiftOut(@Param("date") String date); + /** + * 鑾峰彇鎵�鏈夎澶囨暟 + */ + int getTotalDeviceCount(); + } diff --git a/lxzn-module-mdc/src/main/java/org/jeecg/modules/mdc/mapper/MdcEquipmentPunchRateMapper.java b/lxzn-module-mdc/src/main/java/org/jeecg/modules/mdc/mapper/MdcEquipmentPunchRateMapper.java new file mode 100644 index 0000000..a80d853 --- /dev/null +++ b/lxzn-module-mdc/src/main/java/org/jeecg/modules/mdc/mapper/MdcEquipmentPunchRateMapper.java @@ -0,0 +1,14 @@ +package org.jeecg.modules.mdc.mapper; + +import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import org.jeecg.modules.mdc.entity.MdcEquipmentPunchRate; + +/** + * @Description: mdc_equipment_punch_rate + * @Author: jeecg-boot + * @Date: 2025-06-09 + * @Version: V1.0 + */ +public interface MdcEquipmentPunchRateMapper extends BaseMapper<MdcEquipmentPunchRate> { + +} diff --git a/lxzn-module-mdc/src/main/java/org/jeecg/modules/mdc/mapper/xml/MdcDowntimeOperatorMapper.xml b/lxzn-module-mdc/src/main/java/org/jeecg/modules/mdc/mapper/xml/MdcDowntimeOperatorMapper.xml index db58e0e..581970f 100644 --- a/lxzn-module-mdc/src/main/java/org/jeecg/modules/mdc/mapper/xml/MdcDowntimeOperatorMapper.xml +++ b/lxzn-module-mdc/src/main/java/org/jeecg/modules/mdc/mapper/xml/MdcDowntimeOperatorMapper.xml @@ -9,6 +9,6 @@ t2.downtime_description downtimeDescription FROM mdc_downtime t1 LEFT JOIN mdc_downtime_reason t2 ON t1.reason_id = t2.id ${ew.customSqlSegment} - ORDER BY t1.create_time DESC + ORDER BY t1.equipment_id DESC, t1.start_date ASC </select> </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 index 48cc0e8..8c27d52 100644 --- 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 @@ -4,31 +4,31 @@ <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 + 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) + 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=","> @@ -39,4 +39,47 @@ </if> order by p.equipment_id desc, p.shift_schedule asc </select> + + <!--鏌ヨ鎵�鏈夎澶囨暟閲�--> + <select id="getTotalDeviceCount" resultType="int"> + SELECT COUNT(*) + FROM mdc_equipment + </select> + + <!-- 鏃╃彮 涓婄彮鎵撳崱 --> + <select id="countMorningShiftIn" resultType="int"> + SELECT COUNT(DISTINCT equipment_id) + FROM mdc_equipment_punch + WHERE record_date = #{date, jdbcType=VARCHAR} + AND shift_schedule = '1' + AND check_in_time IS NOT NULL + </select> + + <!-- 鏅氱彮 涓婄彮鎵撳崱 --> + <select id="countEveningShiftIn" resultType="int"> + SELECT COUNT(DISTINCT equipment_id) + FROM mdc_equipment_punch + WHERE record_date = #{date, jdbcType=VARCHAR} + AND shift_schedule = '2' + AND check_in_time IS NOT NULL + </select> + + <!-- 鏃╃彮 涓嬬彮鎵撳崱 --> + <select id="countMorningShiftOut" resultType="int"> + SELECT COUNT(DISTINCT equipment_id) + FROM mdc_equipment_punch + WHERE record_date = #{date, jdbcType=VARCHAR} + AND shift_schedule = '1' + AND check_out_time IS NOT NULL + </select> + + <!-- 鏅氱彮 涓嬬彮鎵撳崱 --> + <select id="countEveningShiftOut" resultType="int"> + SELECT COUNT(DISTINCT equipment_id) + FROM mdc_equipment_punch + WHERE record_date = #{date, jdbcType=VARCHAR} + AND shift_schedule = '2' + AND check_out_time IS NOT NULL + </select> + </mapper> \ No newline at end of file diff --git a/lxzn-module-mdc/src/main/java/org/jeecg/modules/mdc/mapper/xml/MdcEquipmentPunchRateMapper.xml b/lxzn-module-mdc/src/main/java/org/jeecg/modules/mdc/mapper/xml/MdcEquipmentPunchRateMapper.xml new file mode 100644 index 0000000..e576a6c --- /dev/null +++ b/lxzn-module-mdc/src/main/java/org/jeecg/modules/mdc/mapper/xml/MdcEquipmentPunchRateMapper.xml @@ -0,0 +1,6 @@ +<?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.MdcEquipmentPunchRateMapper"> + + +</mapper> \ No newline at end of file diff --git a/lxzn-module-mdc/src/main/java/org/jeecg/modules/mdc/service/IMdcEquipmentPunchRateService.java b/lxzn-module-mdc/src/main/java/org/jeecg/modules/mdc/service/IMdcEquipmentPunchRateService.java new file mode 100644 index 0000000..b1a371d --- /dev/null +++ b/lxzn-module-mdc/src/main/java/org/jeecg/modules/mdc/service/IMdcEquipmentPunchRateService.java @@ -0,0 +1,19 @@ +package org.jeecg.modules.mdc.service; + +import com.baomidou.mybatisplus.extension.service.IService; +import org.jeecg.modules.mdc.entity.MdcEquipmentPunch; +import org.jeecg.modules.mdc.entity.MdcEquipmentPunchRate; + +import java.util.List; + +/** + * @Description: mdc_equipment_punch + * @Author: jeecg-boot + * @Date: 2025-06-09 + * @Version: V1.0 + */ +public interface IMdcEquipmentPunchRateService extends IService<MdcEquipmentPunchRate> { + + + void savePunchRates(String targetDate, List<MdcEquipmentPunch> punchRecords); +} 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 index 79be14a..a1e32d7 100644 --- 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 @@ -18,4 +18,10 @@ void workUp(MdcEquipmentPunch mdcEquipmentPunch); void workDown(MdcEquipmentPunch mdcEquipmentPunch); + void fillPunchRates(List<MdcEquipmentPunch> punchList); + + /** + * 鏌ヨ鎸囧畾鏃ユ湡鐨勮澶囨墦鍗℃暟鎹紙閫氬父鏄槰澶╋級 + */ + List<MdcEquipmentPunch> getYesterdayRecords(String targetDate); } 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 index 813d192..93d0b4d 100644 --- 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 @@ -57,6 +57,7 @@ andonOrderInfo.setEquipmentId(equipmentId); andonOrderInfo.setPlantName(equipmentIdToProductionIdMap != null && equipmentIdToProductionIdMap.containsKey(equipmentId) ? equipmentIdToProductionIdMap.get(equipmentId).getId() : null); andonOrderInfo.setAndonType(StringPool.ONE); + andonOrderInfo.setOrderStatus(StringPool.ONE); andonOrderInfo.setOperator(andonOrder.getOperator()); andonOrderInfo.setOperateTime(new Date()); andonOrderInfo.setResponder(userId); diff --git a/lxzn-module-mdc/src/main/java/org/jeecg/modules/mdc/service/impl/MdcEquipmentPunchRateServiceImpl.java b/lxzn-module-mdc/src/main/java/org/jeecg/modules/mdc/service/impl/MdcEquipmentPunchRateServiceImpl.java new file mode 100644 index 0000000..00d9379 --- /dev/null +++ b/lxzn-module-mdc/src/main/java/org/jeecg/modules/mdc/service/impl/MdcEquipmentPunchRateServiceImpl.java @@ -0,0 +1,81 @@ +package org.jeecg.modules.mdc.service.impl; + + +import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; +import org.jeecg.modules.mdc.entity.MdcEquipmentPunch; +import org.jeecg.modules.mdc.entity.MdcEquipmentPunchRate; +import org.jeecg.modules.mdc.mapper.MdcEquipmentPunchMapper; +import org.jeecg.modules.mdc.mapper.MdcEquipmentPunchRateMapper; +import org.jeecg.modules.mdc.service.IMdcEquipmentPunchRateService; +import org.springframework.stereotype.Service; + +import javax.annotation.Resource; +import java.math.BigDecimal; +import java.math.RoundingMode; +import java.util.List; +import java.util.UUID; + +/** + * @Description: mdc_equipment_punch + * @Author: jeecg-boot + * @Date: 2025-06-09 + * @Version: V1.0 + */ +@Service +public class MdcEquipmentPunchRateServiceImpl extends ServiceImpl<MdcEquipmentPunchRateMapper, MdcEquipmentPunchRate> implements IMdcEquipmentPunchRateService { + @Resource + private MdcEquipmentPunchRateMapper mdcEquipmentPunchRateMapper; + + @Resource + private MdcEquipmentPunchMapper mdcEquipmentPunchMapper; + @Override + public void savePunchRates(String targetDate, List<MdcEquipmentPunch> punchRecords) { + + int morningIn = mdcEquipmentPunchMapper.countMorningShiftIn(targetDate); + int eveningIn = mdcEquipmentPunchMapper.countEveningShiftIn(targetDate); + int morningOut = mdcEquipmentPunchMapper.countMorningShiftOut(targetDate); + int eveningOut = mdcEquipmentPunchMapper.countEveningShiftOut(targetDate); + for (MdcEquipmentPunch punch : punchRecords) { + MdcEquipmentPunchRate rate = new MdcEquipmentPunchRate(); + + rate.setId(UUID.randomUUID().toString()); // 鐢熸垚鍞竴ID + rate.setEquipmentId(punch.getEquipmentId()); + rate.setTheDate(targetDate); + rate.setShiftSchedule(punch.getShiftSchedule()); + + + + + // 璁剧疆璁惧鏁伴噺 + rate.setMornShiftInNum(morningIn); + rate.setMornShiftOutNum(eveningIn); + rate.setEvenShiftInNum(morningOut); + rate.setEvenShiftOutNum(eveningOut); + + + + // 鑾峰彇鎬昏澶囨暟 + int totalDevices = mdcEquipmentPunchMapper.getTotalDeviceCount(); + if (totalDevices == 0) return; + + + rate.setDeviceCountNum(totalDevices); + + // 璁$畻鎵撳崱鐜囷紙淇濈暀涓や綅灏忔暟锛� + rate.setMornShiftInRate(calculateRate(morningIn, totalDevices)); + rate.setMornShiftOutRate(calculateRate(eveningIn, totalDevices)); + rate.setEvenShiftInRate(calculateRate(morningOut, totalDevices)); + rate.setEvenShiftOutRate(calculateRate(eveningOut, totalDevices)); + + this.save(rate); + } + } + private BigDecimal calculateRate(int actual, int total) { + if (total == 0) return BigDecimal.ZERO; + return new BigDecimal(actual) + .divide(new BigDecimal(total), 4, RoundingMode.DOWN) + .multiply(BigDecimal.valueOf(100)) + .setScale(2, RoundingMode.DOWN); // 淇濈暀涓や綅灏忔暟锛屼笉杩涜鍥涜垗浜斿叆 + } + +} 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 index 8b79829..31517e7 100644 --- 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 @@ -3,6 +3,7 @@ import cn.hutool.core.date.DatePattern; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; +import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.baomidou.mybatisplus.core.toolkit.CollectionUtils; import com.baomidou.mybatisplus.core.toolkit.StringPool; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; @@ -19,6 +20,10 @@ import org.springframework.stereotype.Service; import javax.annotation.Resource; +import java.math.BigDecimal; +import java.math.RoundingMode; +import java.time.LocalDate; +import java.time.format.DateTimeFormatter; import java.util.*; import java.util.stream.Collectors; @@ -30,7 +35,8 @@ */ @Service public class MdcEquipmentPunchServiceImpl extends ServiceImpl<MdcEquipmentPunchMapper, MdcEquipmentPunch> implements IMdcEquipmentPunchService { - + @Resource + private MdcEquipmentPunchMapper mdcEquipmentPunchMapper; @Resource private IMdcEquipmentService mdcEquipmentService; @@ -136,13 +142,16 @@ MdcEquipmentPunch equipmentPunch = new MdcEquipmentPunch(); if (first.isPresent()) { equipmentPunch = first.get(); + //宸插瓨鍦ㄨ褰曡鏄庡凡鎵撲笅鐝崱锛屾晠灏嗘槸鍚︾己鍗$疆涓哄惁 + equipmentPunch.setIsAbsent(0); }else { equipmentPunch.setEquipmentId(equipment); equipmentPunch.setPunchUser(userId); equipmentPunch.setRecordDate(currentDate); equipmentPunch.setShiftSchedule(mdcEquipmentPunch.getShiftSchedule()); - equipmentPunch.setIsAbsent(0); equipmentPunch.setIsEarly(0); + //姝e父鎵撳崱鏃跺厛灏嗘槸鍚︾己鍗$疆涓衡�滄槸鈥濓紝闃叉鏈墦涓嬬彮鍗℃椂鏃犳硶璋冩暣鐘舵�� + equipmentPunch.setIsAbsent(1); } equipmentPunch.setCheckInTime(mdcEquipmentPunch.getCheckInTime()); //鎵撳崱鏃堕棿澶т簬8锛�30/17:00鏃朵负杩熷埌鎵撳崱 @@ -214,6 +223,7 @@ MdcEquipmentPunch equipmentPunch = new MdcEquipmentPunch(); if (mdcEquipmentPunchOptional.isPresent()) { equipmentPunch = mdcEquipmentPunchOptional.get(); + equipmentPunch.setIsAbsent(0); }else { equipmentPunch.setIsAbsent(1); equipmentPunch.setIsLate(0); @@ -231,4 +241,59 @@ this.saveOrUpdateBatch(list); } + + @Override + public void fillPunchRates(List<MdcEquipmentPunch> punchList) { + + // 鑾峰彇鏄ㄥぉ鏃ユ湡 + LocalDate yesterday = LocalDate.now().minusDays(1); + String yesterdayStr = yesterday.format(DateTimeFormatter.ofPattern(DatePattern.PURE_DATE_PATTERN)); // 鏍煎紡鍖栦负 "yyyy-MM-dd" + + + // 鑾峰彇鎬昏澶囨暟 + int totalDevices = mdcEquipmentPunchMapper.getTotalDeviceCount(); + if (totalDevices == 0) return; + + // 缁熻鍚勭被鍨嬫墦鍗′汉鏁� + int morningIn = mdcEquipmentPunchMapper.countMorningShiftIn(yesterdayStr); + int eveningIn = mdcEquipmentPunchMapper.countEveningShiftIn(yesterdayStr); + int morningOut = mdcEquipmentPunchMapper.countMorningShiftOut(yesterdayStr); + int eveningOut = mdcEquipmentPunchMapper.countEveningShiftOut(yesterdayStr); + + + // 璁剧疆鎵撳崱鐜囧埌姣忎釜 DTO + for (MdcEquipmentPunch dto : punchList) { + dto.setMorningShiftInRate(calculateRate(morningIn, totalDevices)); + dto.setEveningShiftInRate(calculateRate(eveningIn, totalDevices)); + dto.setMorningShiftOutRate(calculateRate(morningOut, totalDevices)); + dto.setEveningShiftOutRate(calculateRate(eveningOut, totalDevices)); + + // 璁剧疆鎵撳崱璁惧鏁伴噺瀛楁 + dto.setMorningShiftInDeviceNum(morningIn); + dto.setMorningShiftOutDeviceNum(morningOut); + dto.setEveningShiftInDeviceNum(eveningIn); + dto.setEveningShiftOutDeviceNum(eveningOut); + dto.setDeviceCountNum(totalDevices); + } + } + + // 璁$畻鐧惧垎姣斿苟淇濈暀涓や綅灏忔暟 + private BigDecimal calculateRate(int actual, int total) { + if (total == 0) return BigDecimal.ZERO; + return new BigDecimal(actual) + .divide(new BigDecimal(total), 4, RoundingMode.HALF_UP) + .multiply(BigDecimal.valueOf(100)) + .setScale(2, RoundingMode.HALF_UP); // 淇濈暀涓や綅灏忔暟 + } + + @Override + public List<MdcEquipmentPunch> getYesterdayRecords(String targetDate) { + // 鏋勯�犳煡璇㈡潯浠讹細record_date = targetDate.toString() + QueryWrapper<MdcEquipmentPunch> queryWrapper = new QueryWrapper<>(); + queryWrapper.eq("record_date", targetDate); + + // 鎵ц鏌ヨ骞惰繑鍥炵粨鏋� + return baseMapper.selectList(queryWrapper); + } + } diff --git a/lxzn-module-system/lxzn-system-start/src/main/resources/application-prod.yml b/lxzn-module-system/lxzn-system-start/src/main/resources/application-prod.yml index 424cb23..184a80a 100644 --- a/lxzn-module-system/lxzn-system-start/src/main/resources/application-prod.yml +++ b/lxzn-module-system/lxzn-system-start/src/main/resources/application-prod.yml @@ -291,4 +291,4 @@ client-id: ?? # appSecret client-secret: ?? - agent-id: ?? \ No newline at end of file + agent-id: ?? -- Gitblit v1.9.3