From 75c1388eb90e81d89574faaf5e2f02b0c99db015 Mon Sep 17 00:00:00 2001 From: dabin <2827029098@qq.com> Date: Sat, 31 Aug 2024 04:03:17 +0800 Subject: [PATCH] =?UTF-8?q?=E3=80=90admin&front=E3=80=91=E6=96=B0=E5=A2=9E?= =?UTF-8?q?#=201.=E4=BF=AE=E5=A4=8D=E8=8B=A5=E5=B9=B2bug=20=202.=E5=AE=8C?= =?UTF-8?q?=E5=96=84=E5=A4=A7=E5=B1=8F=E9=80=9A=E7=9F=A5?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../com/hcy/admin/config/AdminConfig.java | 1 + .../system/SystemNotificationController.java | 17 ++- .../client/impl/EquipmentServiceImpl.java | 2 +- .../impl/MaintenanceOrderServiceImpl.java | 1 + .../impl/SparePartStockAuditServiceImpl.java | 29 ++++- .../system/SystemNotificationService.java | 17 +++ .../impl/SystemNotificationServiceImpl.java | 24 ++++ .../SparePartStockAuditParam.java | 2 + .../common/dto/SparePartStockAuditDto.java | 107 ++++++++++++++++++ .../entity/system/SystemNotification.java | 24 ++++ .../common/enums/SparePartStockAuditEnum.java | 10 +- .../mapper/SparePartStockAuditMapper.xml | 6 + .../impl/MaintenanceOrderServiceImpl.java | 39 +++++-- .../order/impl/RepairOrderServiceImpl.java | 40 ++++--- .../RoutingInspectionOrderServiceImpl.java | 32 ++++-- .../com/hcy/front/utils/RestTemplateUtil.java | 34 ++++++ front/src/main/resources/application.yml | 10 +- 17 files changed, 352 insertions(+), 43 deletions(-) create mode 100644 admin/src/main/java/com/hcy/admin/service/system/SystemNotificationService.java create mode 100644 admin/src/main/java/com/hcy/admin/service/system/impl/SystemNotificationServiceImpl.java create mode 100644 common/src/main/java/com/hcy/common/dto/SparePartStockAuditDto.java create mode 100644 common/src/main/java/com/hcy/common/entity/system/SystemNotification.java create mode 100644 common/src/main/resources/mapper/SparePartStockAuditMapper.xml create mode 100644 front/src/main/java/com/hcy/front/utils/RestTemplateUtil.java diff --git a/admin/src/main/java/com/hcy/admin/config/AdminConfig.java b/admin/src/main/java/com/hcy/admin/config/AdminConfig.java index 8f23c42..85633d6 100644 --- a/admin/src/main/java/com/hcy/admin/config/AdminConfig.java +++ b/admin/src/main/java/com/hcy/admin/config/AdminConfig.java @@ -24,6 +24,7 @@ public class AdminConfig { public static String[] notLoginUri = new String[]{ "system:login", // 登录接口 "common:index:config", // 配置接口 + "system:notification:sendLargeScreen" //通知大屏接口 }; // 免权限验证 diff --git a/admin/src/main/java/com/hcy/admin/controller/system/SystemNotificationController.java b/admin/src/main/java/com/hcy/admin/controller/system/SystemNotificationController.java index abe8328..4aa8b97 100644 --- a/admin/src/main/java/com/hcy/admin/controller/system/SystemNotificationController.java +++ b/admin/src/main/java/com/hcy/admin/controller/system/SystemNotificationController.java @@ -1,26 +1,33 @@ package com.hcy.admin.controller.system; import com.hcy.admin.config.aop.Log; +import com.hcy.admin.service.system.SystemNotificationService; import com.hcy.admin.validate.system.SystemAuthAdminParam; import com.hcy.common.core.AjaxResult; +import com.hcy.common.entity.system.SystemNotification; import org.springframework.validation.annotation.Validated; import org.springframework.web.bind.annotation.*; +import javax.annotation.Resource; + @RestController @RequestMapping("api/system/notification") public class SystemNotificationController { + @Resource + SystemNotificationService systemNotificationService; /** * 系统通知 * @author dabin - * @param systemAuthAdminParam 参数 + * @param systemNotification 参数 * @return Object */ - @Log(title = "系统通知send") - @GetMapping("/send") - public Object add(SystemAuthAdminParam systemAuthAdminParam) { - + @Log(title = "发送通知到大屏幕") + @PostMapping("/sendLargeScreen") + public Object add(@RequestBody SystemNotification systemNotification) { + systemNotificationService.sendNotificationToLargeScreen(systemNotification); return AjaxResult.success(); } + } diff --git a/admin/src/main/java/com/hcy/admin/service/client/impl/EquipmentServiceImpl.java b/admin/src/main/java/com/hcy/admin/service/client/impl/EquipmentServiceImpl.java index a63ac16..e79723b 100644 --- a/admin/src/main/java/com/hcy/admin/service/client/impl/EquipmentServiceImpl.java +++ b/admin/src/main/java/com/hcy/admin/service/client/impl/EquipmentServiceImpl.java @@ -350,7 +350,7 @@ public class EquipmentServiceImpl implements IEquipmentService { .eq("is_delete", 0) .last("limit 1")); - if (ObjectUtil.isNotNull(model) && model.getId().equals(bo.getId())) { + if (ObjectUtil.isNotNull(model) && !model.getId().equals(bo.getId())) { return false; } return false; diff --git a/admin/src/main/java/com/hcy/admin/service/order/impl/MaintenanceOrderServiceImpl.java b/admin/src/main/java/com/hcy/admin/service/order/impl/MaintenanceOrderServiceImpl.java index edd618c..025428f 100644 --- a/admin/src/main/java/com/hcy/admin/service/order/impl/MaintenanceOrderServiceImpl.java +++ b/admin/src/main/java/com/hcy/admin/service/order/impl/MaintenanceOrderServiceImpl.java @@ -361,6 +361,7 @@ public class MaintenanceOrderServiceImpl implements IMaintenanceOrderService { } } + //大屏系统通知 SystemAuthAdmin systemAuthAdmin = systemAuthAdminMapper.findSystemAuthAdminById(AdminThreadLocal.getAdminId()); Client client = clientMapper.findClientById(maintenanceOrderParam.getClientId()); if(client != null && systemAuthAdmin != null){ diff --git a/admin/src/main/java/com/hcy/admin/service/sparePartStockAudit/impl/SparePartStockAuditServiceImpl.java b/admin/src/main/java/com/hcy/admin/service/sparePartStockAudit/impl/SparePartStockAuditServiceImpl.java index fdb7f9f..bd81356 100644 --- a/admin/src/main/java/com/hcy/admin/service/sparePartStockAudit/impl/SparePartStockAuditServiceImpl.java +++ b/admin/src/main/java/com/hcy/admin/service/sparePartStockAudit/impl/SparePartStockAuditServiceImpl.java @@ -112,7 +112,7 @@ public class SparePartStockAuditServiceImpl implements ISparePartStockAuditServi .le(StringUtils.isNotEmpty(params.getCreateTimeEnd()), SparePartStockAudit::getCreateTime, params.getCreateTimeEnd()) .orderByDesc(SparePartStockAudit::getCreateTime); - if(params.getOrderType() == null){ + /*if(params.getOrderType() == null){ //如果当前不是配件采购则将配件采购出入库单排除 if (params.getOutInWarehouseType() == null) { if (params.getReceiptType() == null) { @@ -132,6 +132,25 @@ public class SparePartStockAuditServiceImpl implements ISparePartStockAuditServi queryWrapper.isNotNull(SparePartStockAudit::getPurchaseStatus); } } + }*/ + + if(params.getQueryType() == SparePartStockAuditEnum.PURCHASE.getStatus()){ + queryWrapper.isNotNull(SparePartStockAudit::getPurchaseStatus); + }else if(params.getQueryType() == SparePartStockAuditEnum.AUDIT.getStatus()){ + queryWrapper.and(query -> query.isNull(SparePartStockAudit::getPurchaseStatus) + .or(orQuery -> orQuery.ne(SparePartStockAudit::getPurchaseStatus, AuditStateEnum.UNREVIEWED.getStatus()) + .ne(SparePartStockAudit::getPurchaseStatus, AuditStateEnum.AUDITED.getStatus()) + .ne(SparePartStockAudit::getPurchaseStatus, AuditStateEnum.CANCELED_AUDIT.getStatus()) + .ne(SparePartStockAudit::getPurchaseStatus, AuditStateEnum.FILLING_OUT.getStatus()))); + }else if(params.getQueryType() == SparePartStockAuditEnum.WAREHOUSING.getStatus() + || params.getQueryType() == SparePartStockAuditEnum.GO_OUT_WAREHOUSE.getStatus() + || params.getQueryType() == SparePartStockAuditEnum.ALLOT.getStatus()){ + queryWrapper.isNull(SparePartStockAudit::getPurchaseStatus); + }else if(params.getQueryType() == SparePartStockAuditEnum.PURCHASE_ORDER.getStatus()){ + queryWrapper.and(query -> query.ne(SparePartStockAudit::getPurchaseStatus, AuditStateEnum.FILLING_OUT.getStatus()) + .ne(SparePartStockAudit::getPurchaseStatus,AuditStateEnum.CANCELED_AUDIT.getStatus())); + }else if(params.getQueryType() == SparePartStockAuditEnum.APPLY_FOR.getStatus()){ + queryWrapper.isNotNull(SparePartStockAudit::getOrderType); } //领用时间范围,配送方式查询 @@ -381,9 +400,15 @@ public class SparePartStockAuditServiceImpl implements ISparePartStockAuditServi SparePartStockAudit lastSparePartStockAudit = sparePartStockAuditMapper.findLastSparePartStockAuditByTime(TimeUtil.getCurrentTimeYYYYMMDD()); model.setReceiptNumber(OrderUtil.getOrderNo(lastSparePartStockAudit == null ? "" : lastSparePartStockAudit.getReceiptNumber())); // 单据编号 + //判断当前订单类型设置对应出入库仓库id + if(sparePartStockAuditParam.getReceiptType() == AuditStateEnum.IN_WAREHOUSE.getStatus()){ + model.setImportWarehouse(sparePartStockAuditParam.getWarehouseId()); + }else if(sparePartStockAuditParam.getReceiptType() == AuditStateEnum.OUT_WAREHOUSE.getStatus()){ + model.setExportWarehouse(sparePartStockAuditParam.getWarehouseId()); + } + // 获取当前的用户 model.setCreatorId(AdminThreadLocal.getAdminId()); - sparePartStockAuditMapper.insert(model); List sparePartAuditList = sparePartStockAuditParam.getSparePartAuditList(); diff --git a/admin/src/main/java/com/hcy/admin/service/system/SystemNotificationService.java b/admin/src/main/java/com/hcy/admin/service/system/SystemNotificationService.java new file mode 100644 index 0000000..8ece059 --- /dev/null +++ b/admin/src/main/java/com/hcy/admin/service/system/SystemNotificationService.java @@ -0,0 +1,17 @@ +package com.hcy.admin.service.system; + +import com.hcy.admin.config.aop.Log; +import com.hcy.common.core.AjaxResult; +import com.hcy.common.entity.system.SystemNotification; +import org.springframework.web.bind.annotation.GetMapping; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RestController; + +public interface SystemNotificationService { + + /** + * 发送通知到大屏幕 + * @param systemNotification 通知内容 + */ + void sendNotificationToLargeScreen(SystemNotification systemNotification); +} diff --git a/admin/src/main/java/com/hcy/admin/service/system/impl/SystemNotificationServiceImpl.java b/admin/src/main/java/com/hcy/admin/service/system/impl/SystemNotificationServiceImpl.java new file mode 100644 index 0000000..1d83e42 --- /dev/null +++ b/admin/src/main/java/com/hcy/admin/service/system/impl/SystemNotificationServiceImpl.java @@ -0,0 +1,24 @@ +package com.hcy.admin.service.system.impl; + +import com.hcy.admin.netty.WebsocketHandler; +import com.hcy.admin.service.system.SystemNotificationService; +import com.hcy.common.entity.system.SystemNotification; +import org.apache.commons.lang3.StringUtils; +import org.springframework.stereotype.Service; + +/** + * 系统通知实现类 + * @author dabin + */ +@Service +public class SystemNotificationServiceImpl implements SystemNotificationService { + + @Override + public void sendNotificationToLargeScreen(SystemNotification systemNotification) { + if(StringUtils.isNotEmpty(systemNotification.getContent())){ + //发送通知到大屏幕 + WebsocketHandler.sendMessageToClient(systemNotification.getContent()); + } + } + +} diff --git a/admin/src/main/java/com/hcy/admin/validate/sparePartStockAudit/SparePartStockAuditParam.java b/admin/src/main/java/com/hcy/admin/validate/sparePartStockAudit/SparePartStockAuditParam.java index 4117f76..5cda4b9 100644 --- a/admin/src/main/java/com/hcy/admin/validate/sparePartStockAudit/SparePartStockAuditParam.java +++ b/admin/src/main/java/com/hcy/admin/validate/sparePartStockAudit/SparePartStockAuditParam.java @@ -100,6 +100,8 @@ public class SparePartStockAuditParam implements Serializable { private Integer purchaseStatus; //配件领用状态(0=待审核,1=未通过,2=待管理员审核,3=待发货,4=待收货,5=已完成) private String purchaseIdea; //采购意见 private String orderType; // 0-检修工单 1-维修工单 + private String workOrderNo; //工单号 + private Integer queryType; // 0-待审核 1-待发货 2-待收货 3-已完成 private String createTimeStart; //创建时间 private String createTimeEnd; //创建时间 diff --git a/common/src/main/java/com/hcy/common/dto/SparePartStockAuditDto.java b/common/src/main/java/com/hcy/common/dto/SparePartStockAuditDto.java new file mode 100644 index 0000000..a348125 --- /dev/null +++ b/common/src/main/java/com/hcy/common/dto/SparePartStockAuditDto.java @@ -0,0 +1,107 @@ +package com.hcy.common.dto; + +import com.hcy.common.entity.SparePartAudit.SparePartAudit; +import lombok.Data; +import lombok.EqualsAndHashCode; +import lombok.experimental.Accessors; +import org.hibernate.validator.constraints.Length; + +import javax.validation.constraints.DecimalMin; +import java.io.Serializable; +import java.math.BigDecimal; +import java.util.Date; +import java.util.List; + +/** + * 备件出入库审核参数 + */ +@Data +@EqualsAndHashCode(callSuper = false) +@Accessors(chain = true) +public class SparePartStockAuditDto implements Serializable { + + private static final long serialVersionUID = 1L; + + public interface create{} + public interface update{} + public interface delete{} + + private Long id; + + private String receiptNumber; + + private Integer receiptType; + + //@NotNull(message = "warehouseId参数缺失", groups = {create.class, update.class}) + @DecimalMin(value = "0", message = "warehouseId参数值不能少于0", groups = {create.class, update.class}) + private Long warehouseId; + + //@NotNull(message = "importWarehouse参数缺失", groups = {create.class, update.class}) + @DecimalMin(value = "0", message = "importWarehouse参数值不能少于0", groups = {create.class, update.class}) + private Long importWarehouse; + + //@NotNull(message = "exportWarehouse参数缺失", groups = {create.class, update.class}) + @DecimalMin(value = "0", message = "exportWarehouse参数值不能少于0", groups = {create.class, update.class}) + private Long exportWarehouse; + + //@NotNull(message = "supplier参数缺失", groups = {create.class, update.class}) + @Length(max = 32, message = "supplier参数不能超出32个字符", groups = {create.class, update.class}) + private String supplier; + + //@NotNull(message = "responsiblePerson参数缺失", groups = {create.class, update.class}) + @Length(max = 32, message = "responsiblePerson参数不能超出32个字符", groups = {create.class, update.class}) + private String responsiblePerson; + + // @NotNull(message = "handlingTime参数缺失", groups = {create.class, update.class}) + private Date handlingTime; + + //@NotNull(message = "consignee参数缺失", groups = {create.class, update.class}) + @Length(max = 255, message = "consignee参数不能超出255个字符", groups = {create.class, update.class}) + private String consignee; + + //@NotNull(message = "auditState参数缺失", groups = {create.class, update.class}) + @DecimalMin(value = "0", message = "auditState参数值不能少于0", groups = {create.class, update.class}) + private Integer auditState; + + //@NotNull(message = "auditResult参数缺失", groups = {create.class, update.class}) + @DecimalMin(value = "0", message = "auditResult参数值不能少于0", groups = {create.class, update.class}) + private Integer auditResult; + + private Date auditTime; + + //@Length(max = 255, message = "auditIdea参数不能超出255个字符", groups = {create.class, update.class}) + private String auditIdea; + + //@Length(max = 32, message = "phone参数不能超出32个字符", groups = {create.class, update.class}) + private String phone; + + //@Length(max = 255, message = "remark参数不能超出255个字符", groups = {create.class, update.class}) + private String remark; + + private String sparePartAuditId; // 备件审核id + + private List sparePartAuditList; //待入库的备件 + private Integer outInWarehouseType; //出入库类别(0=采购入库,1=库存调拨,2=员工领料,3=销售出库) + + private String workOrderId; //工单号 + private String orderId; //订单编号 + private String shippingAddress; //收货地址 + private String consigner; //发货人 + private String consignerPhone; //发货人联系电话 + private String shipAddress; //发货地址 + private String logisticsCompany; //物流公司 + private String trackingNumber; //物流编号 + private Integer deliveryMethod; //配送方式(0=物流快递,1=上门取件,2=送货上门) + private BigDecimal salesPrice; //销售价 + private String recipient; //领用员工 + private String recipientPhone; //领用员工联系电话 + private Integer recipientNumber; //领用数量 + private Integer purchaseStatus; //配件领用状态(0=待审核,1=未通过,2=待管理员审核,3=待发货,4=待收货,5=已完成) + private String purchaseIdea; //采购意见 + private String orderType; // 0-检修工单 1-维修工单 + private String workOrderNo; //工单号 + private Integer queryType; // 0-待审核 1-待发货 2-待收货 3-已完成 + + private String createTimeStart; //创建时间 + private String createTimeEnd; //创建时间 +} diff --git a/common/src/main/java/com/hcy/common/entity/system/SystemNotification.java b/common/src/main/java/com/hcy/common/entity/system/SystemNotification.java new file mode 100644 index 0000000..35c2ece --- /dev/null +++ b/common/src/main/java/com/hcy/common/entity/system/SystemNotification.java @@ -0,0 +1,24 @@ +package com.hcy.common.entity.system; + +import lombok.Data; + +import java.io.Serializable; + +@Data +public class SystemNotification implements Serializable { + + /** + * 内容 + */ + private String content; + + /** + * 订单id + */ + private String orderId; + + /** + * 订单类型 + */ + private Integer orderType; +} diff --git a/common/src/main/java/com/hcy/common/enums/SparePartStockAuditEnum.java b/common/src/main/java/com/hcy/common/enums/SparePartStockAuditEnum.java index 07266a9..2e76754 100644 --- a/common/src/main/java/com/hcy/common/enums/SparePartStockAuditEnum.java +++ b/common/src/main/java/com/hcy/common/enums/SparePartStockAuditEnum.java @@ -12,7 +12,15 @@ public enum SparePartStockAuditEnum { EXPRESSAGE(1,"物流快递"), SELF_TAKE(2,"自行取件"), - HOME_DELIVERY(3,"送货上门"); + HOME_DELIVERY(3,"送货上门"), + + PURCHASE(0,"配件采购"), + AUDIT(1,"配件出入库审核"), + WAREHOUSING(2,"配件入库"), + GO_OUT_WAREHOUSE(3,"配件出库"), + ALLOT(4,"配件调拨"), + APPLY_FOR(5,"配件领用申请"), + PURCHASE_ORDER(6,"配件采购订单"); private final int status; private final String desc; diff --git a/common/src/main/resources/mapper/SparePartStockAuditMapper.xml b/common/src/main/resources/mapper/SparePartStockAuditMapper.xml new file mode 100644 index 0000000..16fd037 --- /dev/null +++ b/common/src/main/resources/mapper/SparePartStockAuditMapper.xml @@ -0,0 +1,6 @@ + + + + + + diff --git a/front/src/main/java/com/hcy/front/service/order/impl/MaintenanceOrderServiceImpl.java b/front/src/main/java/com/hcy/front/service/order/impl/MaintenanceOrderServiceImpl.java index 06afeb9..85db76e 100644 --- a/front/src/main/java/com/hcy/front/service/order/impl/MaintenanceOrderServiceImpl.java +++ b/front/src/main/java/com/hcy/front/service/order/impl/MaintenanceOrderServiceImpl.java @@ -39,12 +39,11 @@ import com.hcy.common.mapper.sparePart.SparePartMapper; import com.hcy.common.mapper.sparePartStockAudit.SparePartStockAuditMapper; import com.hcy.common.mapper.system.SystemAuthAdminMapper; import com.hcy.common.mapper.user.UserMapper; -import com.hcy.common.utils.OrderUtil; -import com.hcy.common.utils.TimeUtil; -import com.hcy.common.utils.ToolsUtil; +import com.hcy.common.utils.*; import com.hcy.front.FrontThreadLocal; import com.hcy.front.service.order.IMaintenanceOrderService; import com.hcy.front.service.region.IDevRegionService; +import com.hcy.front.utils.RestTemplateUtil; import com.hcy.front.validate.PageParam; import com.hcy.front.validate.order.MaintenanceOrderParam; import com.hcy.front.validate.warehouse.SparePartParam; @@ -57,6 +56,7 @@ import com.hcy.front.vo.order.OrderSparePartListVo; import com.hcy.front.vo.sparePartStockAudit.SparePartStockAuditDetailVo; import org.apache.commons.lang3.StringUtils; import org.springframework.beans.BeanUtils; +import org.springframework.beans.factory.annotation.Value; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; import org.springframework.util.Assert; @@ -118,6 +118,9 @@ public class MaintenanceOrderServiceImpl implements IMaintenanceOrderService { @Resource OrderOperateRecordServiceImpl orderOperateRecordService; + @Resource + RestTemplateUtil restTemplateUtil; + private final DecimalFormat df = new DecimalFormat ("#.#"); @Override @@ -135,13 +138,20 @@ public class MaintenanceOrderServiceImpl implements IMaintenanceOrderService { MaintenanceOrder lastmMaintenanceOrder = maintenanceOrderMapper.findLastMaintenanceOrderByTime(TimeUtil.getCurrentTimeYYYYMMDD()); model.setOrderNo(OrderUtil.getOrderNo(lastmMaintenanceOrder == null ? "" :lastmMaintenanceOrder.getOrderNo())); - model.setCreatorId(FrontThreadLocal.getUserId().longValue()); - - + Date currentTime = new Date(); + model.setCreateTime(currentTime); maintenanceOrderMapper.insert(model); + Client client = clientMapper.findClientById(maintenanceOrderParam.getClientId()); + Equipment equipment = equipmentMapper.findEquipmentById(maintenanceOrderParam.getEquipmentId()); + if(client != null && equipment != null){ + //发送通知到大屏 + String notificationContent = "客户【"+client.getClientName()+"】于【"+TimeUtil.dateTransitionString(currentTime)+"】上报工单,报修设备【"+equipment.getName()+"】"; + restTemplateUtil.sendPost(notificationContent); + } + //新增检修单操作记录 orderOperateRecordService.addMaintenanceOrder(model.getId() , OrderOperateRecordEnum.ORDER_RECEIVING.getDesc() @@ -558,6 +568,11 @@ public class MaintenanceOrderServiceImpl implements IMaintenanceOrderService { maintenanceOrder.setOrderStatus(MaintenanceOrderStatusEnum.MAINTENANCE_ING.getStatus()); maintenanceOrder.setIsMaintain(MaintenanceOrderStatusEnum.MAINTAIN.getStatus()); + //修改订单状态为检修中 + Equipment equipment = equipmentMapper.findEquipmentById(maintenanceOrder.getEquipmentId()); + equipment.setDeviceStatus(EquipmentStateEnum.UNDEROVERHAUL.getStatus()); + equipmentMapper.updateById(equipment); + //新增检修单操作记录 orderOperateRecordService.addMaintenanceOrder(maintenanceOrder.getId() ,OrderOperateRecordEnum.CUSTOMER_CONFIRM.getDesc() @@ -615,6 +630,11 @@ public class MaintenanceOrderServiceImpl implements IMaintenanceOrderService { maintenanceOrder.setIsMaintain(MaintenanceOrderStatusEnum.MAINTAIN.getStatus()); maintenanceOrder.setOrderStatus(MaintenanceOrderStatusEnum.MAINTENANCE_ING.getStatus()); + //修改订单状态为检修中 + Equipment equipment = equipmentMapper.findEquipmentById(maintenanceOrder.getEquipmentId()); + equipment.setDeviceStatus(EquipmentStateEnum.UNDEROVERHAUL.getStatus()); + equipmentMapper.updateById(equipment); + Client client = clientMapper.findClientById(maintenanceOrder.getClientId()); if(client != null){ orderOperateRecordService.addMaintenanceOrder(maintenanceOrder.getId() @@ -759,7 +779,8 @@ public class MaintenanceOrderServiceImpl implements IMaintenanceOrderService { maintenanceOrder.setFamiliarFaultId(maintenanceOrderParam.getFamiliarFaultId()); maintenanceOrder.setFamiliarFaultDescription(maintenanceOrderParam.getFamiliarFaultDescription()); maintenanceOrder.setOrderStatus(MaintenanceOrderStatusEnum.FINISHED.getStatus()); - maintenanceOrder.setOrderAccomplishTime(new Date()); + Date finishTime = new Date(); + maintenanceOrder.setOrderAccomplishTime(finishTime); maintenanceOrder.setIsConfirmReceipt(MaintenanceOrderStatusEnum.CONFIRM_RECEIPT.getStatus()); maintenanceOrder.setCompleteImg(maintenanceOrderParam.getCompleteImg()); // 完工照片 maintenanceOrderMapper.updateById(maintenanceOrder); @@ -769,6 +790,10 @@ public class MaintenanceOrderServiceImpl implements IMaintenanceOrderService { if(equipment != null){ equipment.setDeviceStatus(EquipmentStateEnum.NORMAL.getStatus()); equipmentMapper.updateById(equipment); + + //发送通知到大屏 + String notificationContent = "检修员【"+FrontThreadLocal.get("username")+"】于【"+TimeUtil.dateTransitionString(finishTime)+"】完成对设备【"+equipment.getName()+"】的检修工作"; + restTemplateUtil.sendPost(notificationContent); } //新增检修单操作记录 diff --git a/front/src/main/java/com/hcy/front/service/order/impl/RepairOrderServiceImpl.java b/front/src/main/java/com/hcy/front/service/order/impl/RepairOrderServiceImpl.java index 07d3385..b176c93 100644 --- a/front/src/main/java/com/hcy/front/service/order/impl/RepairOrderServiceImpl.java +++ b/front/src/main/java/com/hcy/front/service/order/impl/RepairOrderServiceImpl.java @@ -40,12 +40,11 @@ import com.hcy.common.mapper.sparePartStockAudit.SparePartStockAuditMapper; import com.hcy.common.mapper.system.SystemAuthAdminMapper; import com.hcy.common.mapper.user.UserMapper; import com.hcy.common.mapper.warehouse.WarehouseMapper; -import com.hcy.common.utils.OrderUtil; -import com.hcy.common.utils.TimeUtil; -import com.hcy.common.utils.ToolsUtil; +import com.hcy.common.utils.*; import com.hcy.front.FrontThreadLocal; import com.hcy.front.service.order.IRepairOrderService; import com.hcy.front.service.region.IDevRegionService; +import com.hcy.front.utils.RestTemplateUtil; import com.hcy.front.validate.PageParam; import com.hcy.front.validate.order.RepairOrderParam; import com.hcy.front.validate.warehouse.SparePartParam; @@ -55,6 +54,7 @@ import com.hcy.front.vo.order.*; import com.hcy.front.vo.sparePartStockAudit.SparePartStockAuditDetailVo; import org.apache.commons.lang3.StringUtils; import org.springframework.beans.BeanUtils; +import org.springframework.beans.factory.annotation.Value; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; import org.springframework.util.Assert; @@ -114,6 +114,9 @@ public class RepairOrderServiceImpl implements IRepairOrderService { @Resource OrderOperateRecordServiceImpl orderOperateRecordService; + @Resource + RestTemplateUtil restTemplateUtil; + private final DecimalFormat df = new DecimalFormat ("#.#"); /** @@ -128,21 +131,17 @@ public class RepairOrderServiceImpl implements IRepairOrderService { List repairOrderDtoList = repairOrderMapper.list(repairOrderDto); SystemAuthAdmin systemAuthAdmin = systemAuthAdminMapper.findSystemAuthAdminByUserId(FrontThreadLocal.getUserId()); - List returnData = new LinkedList<>(); for (RepairOrderDto item : repairOrderDtoList) { - if(repairOrderParam.getQueryType() == MaintenanceOrderStatusEnum.NEAREST_TO_ME.getStatus()){ + SystemAuthAdmin systemAuthAdminByUserId = systemAuthAdminMapper.findSystemAuthAdminByUserId(Math.toIntExact(item.getCreatorId())); + //获取工厂 + Plant plant = plantMapper.findPlantByAdminId(Long.valueOf(systemAuthAdminByUserId.getPlantId())); //判断抢单距离大于订单距离则返回订单 - double distance = ToolsUtil.getDistance(item.getLongitude(), item.getLatitude() + double distance = ToolsUtil.getDistance(Double.parseDouble(plant.getLongitude()), Double.parseDouble(plant.getLatitude()) , repairOrderParam.getLongitude(), repairOrderParam.getLatitude()); if(item.getReceiverType() == OrderStateEnum.REGIONAL_DISPATCH.getStatus()){ - - SystemAuthAdmin systemAuthAdminByUserId = systemAuthAdminMapper.findSystemAuthAdminByUserId(Math.toIntExact(item.getCreatorId())); - //获取工厂 - Plant plant = plantMapper.findPlantByAdminId(Long.valueOf(systemAuthAdminByUserId.getPlantId())); - if(systemAuthAdmin.getProvinceId().equals(plant.getProvinceId()) && systemAuthAdmin.getCityId().equals(plant.getCityId()) && systemAuthAdmin.getDistrictId().equals(plant.getDistrictId()) ){ @@ -394,7 +393,8 @@ public class RepairOrderServiceImpl implements IRepairOrderService { repairOrder.setFamiliarFaultId(repairOrderParam.getFamiliarFaultId()); // 常见维修结论id repairOrder.setFamiliarFaultDescription(repairOrderParam.getFamiliarFaultDescription()); // 常见维修结论描述 repairOrder.setOrderStatus(MaintenanceOrderStatusEnum.FINISHED.getStatus()); - repairOrder.setOrderAccomplishTime(new Date()); // 订单完成时间 + Date finishTime = new Date(); + repairOrder.setOrderAccomplishTime(finishTime); // 订单完成时间 repairOrder.setIsConfirmReceipt(MaintenanceOrderStatusEnum.CONFIRM_RECEIPT.getStatus()); repairOrder.setCompleteImg(repairOrderParam.getCompleteImg()); // 完工照片 repairOrderMapper.updateById(repairOrder); @@ -403,6 +403,9 @@ public class RepairOrderServiceImpl implements IRepairOrderService { orderOperateRecordService.addRepairOrder(repairOrder.getId() ,OrderOperateRecordEnum.FILL_IN_RECEIPT.getDesc() ,"【"+FrontThreadLocal.get("username")+"】已经完成任务"); + + String notificationContent = "维修员【"+FrontThreadLocal.get("username")+"】于【"+TimeUtil.dateTransitionString(finishTime)+"】完成对模块【"+repairOrder.getModuleNumber()+"】的维修工作"; + restTemplateUtil.sendPost(notificationContent); }else{ throw new OperateException("当前订单状态无法进行填写回单操作"); } @@ -790,7 +793,8 @@ public class RepairOrderServiceImpl implements IRepairOrderService { // 获取当前的用户 model.setCreatorId(FrontThreadLocal.getUserId().longValue()); // 创建人id - model.setCreateTime(new Date()); //创建时间 + Date currentTime = new Date(); + model.setCreateTime(currentTime); //创建时间 repairOrderMapper.insert(model); @@ -798,6 +802,14 @@ public class RepairOrderServiceImpl implements IRepairOrderService { orderOperateRecordService.addRepairOrder(model.getId() , OrderOperateRecordEnum.NEW_CREATE.getDesc() ,"维修主管【"+FrontThreadLocal.get("username")+"】创建了维修工单。"); + + Client client = clientMapper.findClientById(repairOrderParam.getClientId()); + Equipment equipment = equipmentMapper.findEquipmentById(repairOrderParam.getEquipmentId()); + if(client != null && equipment != null){ + //发送通知到大屏 + String notificationContent = "客户【"+client.getClientName()+"】于【"+TimeUtil.dateTransitionString(currentTime)+"】上报工单,维修设备【"+equipment.getName()+"】"; + restTemplateUtil.sendPost(notificationContent); + } } /** @@ -936,7 +948,7 @@ public class RepairOrderServiceImpl implements IRepairOrderService { BigDecimal actualAmount = new BigDecimal("0"); //判断是否已经服务报价过了 - List orderSpareParts = orderSparePartMapper.findOrderSparePartByMaintenanceOrderId(repairOrder.getId()); + List orderSpareParts = orderSparePartMapper.findOrderSparePartByRepairOrderId(repairOrder.getId()); for (OrderSparePart orderSparePart : orderSpareParts) { //已经报过价就将之前的报价信息删除 orderSparePartMapper.deleteById(orderSparePart); diff --git a/front/src/main/java/com/hcy/front/service/order/impl/RoutingInspectionOrderServiceImpl.java b/front/src/main/java/com/hcy/front/service/order/impl/RoutingInspectionOrderServiceImpl.java index 34f8ca0..c9bab6f 100644 --- a/front/src/main/java/com/hcy/front/service/order/impl/RoutingInspectionOrderServiceImpl.java +++ b/front/src/main/java/com/hcy/front/service/order/impl/RoutingInspectionOrderServiceImpl.java @@ -6,7 +6,6 @@ import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.hcy.common.constant.GlobalConstant; import com.hcy.common.core.PageResult; import com.hcy.common.dto.RoutingInspectionOrderDto; -import com.hcy.common.dto.order.MaintenanceOrderDto; import com.hcy.common.entity.client.Client; import com.hcy.common.entity.client.Equipment; import com.hcy.common.entity.fault.Fault; @@ -26,19 +25,19 @@ import com.hcy.common.mapper.order.MaintenanceOrderMapper; import com.hcy.common.mapper.order.RoutingInspectionOrderMapper; import com.hcy.common.mapper.system.SystemAuthAdminMapper; import com.hcy.common.mapper.user.UserMapper; +import com.hcy.common.utils.TimeUtil; import com.hcy.common.utils.ToolsUtil; import com.hcy.front.FrontThreadLocal; import com.hcy.front.service.order.IRoutingInspectionOrderService; import com.hcy.front.service.region.IDevRegionService; +import com.hcy.front.utils.RestTemplateUtil; import com.hcy.front.validate.PageParam; import com.hcy.front.validate.order.RoutingInspectionOrderParam; import com.hcy.front.vo.client.EquipmentListVo; -import com.hcy.front.vo.order.MaintenanceOrderListVo; import com.hcy.front.vo.order.OrderStatusCountVo; import com.hcy.front.vo.order.RoutingInspectionOrderDetailVo; import com.hcy.front.vo.order.RoutingInspectionOrderListVo; import org.apache.commons.lang3.StringUtils; -import org.aspectj.weaver.ast.Or; import org.springframework.beans.BeanUtils; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; @@ -84,6 +83,9 @@ public class RoutingInspectionOrderServiceImpl implements IRoutingInspectionOrde @Resource IDevRegionService regionService; + @Resource + RestTemplateUtil restTemplateUtil; + private final DecimalFormat df = new DecimalFormat ("#.#"); @@ -263,13 +265,13 @@ public class RoutingInspectionOrderServiceImpl implements IRoutingInspectionOrde model.setFaultId(routingInspectionOrderParam.getFaultId()); // 故障id model.setFaultDescription(routingInspectionOrderParam.getFaultDescription()); // 故障描述 model.setInspectionResult(routingInspectionOrderParam.getInspectionResult()); //巡检结果(0=正常 1=异常) + Date finishTime = new Date(); + //设备数据 + Equipment equipment = equipmentMapper.findEquipmentById(model.getEquipmentId()); + //如果故障检测是选了异常,需要把设备状态改为报修中 if(routingInspectionOrderParam.getInspectionResult() == OrderStateEnum.ABNORMAL.getStatus()){ - Equipment equipment = equipmentMapper.selectOne( - new QueryWrapper() - .eq("id", model.getEquipmentId()) - .eq("is_delete", 0) - .last("limit 1")); + equipment.setDeviceStatus(EquipmentStateEnum.UNDERWARRANTY.getStatus()); equipmentMapper.updateById(equipment); //如果故障检测异常,需要创建检修单 @@ -277,7 +279,8 @@ public class RoutingInspectionOrderServiceImpl implements IRoutingInspectionOrde maintenanceOrder.setOrderNo(getOrderNo()); maintenanceOrder.setCreatorId(FrontThreadLocal.getUserId().longValue()); //创建人id - maintenanceOrder.setCreateTime(new Date()); //创建时间 + Date currentTime = new Date(); + maintenanceOrder.setCreateTime(currentTime); //创建时间 maintenanceOrder.setClientId(model.getClientId()); // 客户id maintenanceOrder.setEquipmentId(model.getEquipmentId()); // 设备id maintenanceOrder.setFaultId(model.getFaultId()); // 故障id @@ -287,7 +290,6 @@ public class RoutingInspectionOrderServiceImpl implements IRoutingInspectionOrde maintenanceOrder.setRemark(model.getInspectionResultRemark()); // 备注 maintenanceOrder.setOrderSource(OrderStateEnum.MAINTENANCE_MAN_CREATION.getStatus()); //订单来源:3=检修员创建 maintenanceOrder.setOrderStatus(OrderStateEnum.WAITING_LIST.getStatus()); // 订单状态 0-待抢单 - maintenanceOrderMapper.insert(maintenanceOrder); //新增巡检单操作记录 @@ -295,17 +297,25 @@ public class RoutingInspectionOrderServiceImpl implements IRoutingInspectionOrde , OrderOperateRecordEnum.FAULT_DETECT.getDesc() ,"【"+FrontThreadLocal.get("username")+"】已提交故障检测结果,检测结果: " + OrderStateEnum.ABNORMAL.getDesc() + ";系统会自动创建检修单且流入到工单池。"); + + //发送通知到大屏 + String notificationContent = "检修员【"+FrontThreadLocal.get("username")+"】于【"+ TimeUtil.dateTransitionString(currentTime)+"】上报工单,报修设备【"+equipment.getName()+"】"; + restTemplateUtil.sendPost(notificationContent); }else{ //新增巡检单操作记录 orderOperateRecordService.addRoutingInspectionOrder(model.getId() , OrderOperateRecordEnum.FAULT_DETECT.getDesc() ,"【"+FrontThreadLocal.get("username")+"】已提交故障检测结果,检测结果: " + OrderStateEnum.NORMAL.getDesc() + ";"); + + String notificationContent = "检修员【"+FrontThreadLocal.get("username")+"】于【"+TimeUtil.dateTransitionString(finishTime)+"】完成对设备【"+equipment.getName()+"】的巡检工作"; + restTemplateUtil.sendPost(notificationContent); } + model.setInspectionResultRemark(routingInspectionOrderParam.getInspectionResultRemark());//巡检结果备注 model.setInspectionPhoto(routingInspectionOrderParam.getInspectionPhoto()); // 巡检照片 model.setOrderStatus(OrderStateEnum.COMPLETED.getStatus()); //故障检测完工单状态就为已完成 - model.setOrderAccomplishTime(new Date()); //订单完成时间 + model.setOrderAccomplishTime(finishTime); //订单完成时间 routingInspectionOrderMapper.updateById(model); //新增巡检单操作记录 diff --git a/front/src/main/java/com/hcy/front/utils/RestTemplateUtil.java b/front/src/main/java/com/hcy/front/utils/RestTemplateUtil.java new file mode 100644 index 0000000..8ca1036 --- /dev/null +++ b/front/src/main/java/com/hcy/front/utils/RestTemplateUtil.java @@ -0,0 +1,34 @@ +package com.hcy.front.utils; + +import com.hcy.common.entity.system.SystemNotification; +import lombok.Data; +import lombok.extern.log4j.Log4j2; +import org.springframework.beans.factory.annotation.Value; +import org.springframework.stereotype.Component; +import org.springframework.web.client.RestTemplate; + +import javax.annotation.Resource; +import java.util.HashMap; +import java.util.Map; + + +@Data +@Component +@Log4j2 +public class RestTemplateUtil { + + @Value("${adminService.sendLargeScreenUrl}") + public String sendLargeScreenUrl; + + public void sendPost(String content){ + try{ + SystemNotification systemNotification = new SystemNotification(); + systemNotification.setContent(content); + + RestTemplate restTemplate = new RestTemplate(); + restTemplate.postForObject(sendLargeScreenUrl, systemNotification, String.class); + }catch (Exception e){ + log.error("上报大屏失败:"+e.getMessage()); + } + } +} diff --git a/front/src/main/resources/application.yml b/front/src/main/resources/application.yml index c2b234d..5275913 100644 --- a/front/src/main/resources/application.yml +++ b/front/src/main/resources/application.yml @@ -59,6 +59,8 @@ spring: mybatis-plus: mapper-locations: classpath*:/mapper/**Mapper.xml # 映射文件路径 typeAliasesPackage: com.hcy.**.mapper + configuration: + log-impl: org.apache.ibatis.logging.stdout.StdOutImpl global-config: banner: false db-config: @@ -87,5 +89,9 @@ byte: query-order-url: https://developer.toutiao.com/api/apps/ecpay/v1/query_order query-refund-url: https://developer.toutiao.com/api/apps/ecpay/v1/query_refund netty: - port: 8081 - path: /staff \ No newline at end of file + port: 8083 + path: /staff + +#adnin服务地址 +adminService: + sendLargeScreenUrl : http://localhost:8082/api/system/notification/sendLargeScreen \ No newline at end of file