diff --git a/admin/src/main/java/com/hcy/admin/service/crontab/impl/OrderCrontab.java b/admin/src/main/java/com/hcy/admin/service/crontab/impl/OrderCrontab.java index dce10c3..3f664a3 100644 --- a/admin/src/main/java/com/hcy/admin/service/crontab/impl/OrderCrontab.java +++ b/admin/src/main/java/com/hcy/admin/service/crontab/impl/OrderCrontab.java @@ -1,8 +1,11 @@ package com.hcy.admin.service.crontab.impl; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; +import com.hcy.admin.AdminThreadLocal; import com.hcy.admin.vo.sparePartStockAudit.SparePartStockAuditDetailVo; import com.hcy.common.constant.GlobalConstant; +import com.hcy.common.entity.client.Client; +import com.hcy.common.entity.client.Equipment; import com.hcy.common.entity.configuration.SystemConfiguration; import com.hcy.common.entity.order.MaintenanceOrder; import com.hcy.common.entity.order.RepairOrder; @@ -10,13 +13,18 @@ import com.hcy.common.entity.order.RoutingInspectionOrder; import com.hcy.common.entity.sparePartStockAudit.SparePartStockAudit; import com.hcy.common.enums.OrderStatusEnum; import com.hcy.common.enums.audit.AuditStateEnum; +import com.hcy.common.enums.equipment.EquipmentStateEnum; import com.hcy.common.enums.order.MaintenanceOrderStatusEnum; import com.hcy.common.enums.order.OrderStateEnum; +import com.hcy.common.mapper.client.ClientMapper; +import com.hcy.common.mapper.client.EquipmentMapper; import com.hcy.common.mapper.configuration.SystemConfigurationMapper; import com.hcy.common.mapper.order.MaintenanceOrderMapper; import com.hcy.common.mapper.order.RepairOrderMapper; import com.hcy.common.mapper.order.RoutingInspectionOrderMapper; import com.hcy.common.mapper.sparePartStockAudit.SparePartStockAuditMapper; +import com.hcy.common.utils.OrderUtil; +import com.hcy.common.utils.TimeUtil; import lombok.extern.slf4j.Slf4j; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; @@ -49,7 +57,13 @@ public class OrderCrontab { @Resource SparePartStockAuditMapper sparePartStockAuditMapper; - private void orderTimeOut(){ + @Resource + EquipmentMapper equipmentMapper; + + @Resource + ClientMapper clientMapper; + + public void orderTimeOut(){ SystemConfiguration systemConfiguration = systemConfigurationMapper.selectById(1); //检修单和巡检单超时时间 Integer repairerAutoOrderTime = systemConfiguration.getRepairerAutoOrderTime(); @@ -121,8 +135,56 @@ public class OrderCrontab { sparePartStockAuditMapper.updateById(item); } } + } + + public void equipmentPollingPeriod(){ + //获取当前时间 + Calendar currentTime = Calendar.getInstance(); //巡检周期 + LambdaQueryWrapper queryWrapper = new LambdaQueryWrapper() + .eq(Equipment::getDeviceStatus, EquipmentStateEnum.NORMAL.getStatus()) + .eq(Equipment::getIsDelete, GlobalConstant.NOT_DELETE); + List equipmentList = equipmentMapper.selectList(queryWrapper); + for (Equipment item : equipmentList) { + if(item.getInspectionCycle() == EquipmentStateEnum.DAY_INTERVAL.getStatus()){ + Calendar frontTime = Calendar.getInstance(); + frontTime.setTime(item.getFrontPollingTime()); + frontTime.add(Calendar.DAY_OF_YEAR, item.getDailyAudit()); + if(currentTime.compareTo(frontTime) > 0){ + installRoutingInspectionOrder(item); + } + }else{ + Calendar frontTime = Calendar.getInstance(); + frontTime.setTime(item.getFrontPollingTime()); + int day = frontTime.get(Calendar.DAY_OF_MONTH); + //同一天 + if(day == item.getDailyAudit()){ + installRoutingInspectionOrder(item); + } + } + } + } + + private void installRoutingInspectionOrder(Equipment equipment){ + RoutingInspectionOrder model = new RoutingInspectionOrder(); + + //定时任务创建的巡检单是系统创建,客服的是客服创建 + model.setRepairWorkOrderFlow(OrderStateEnum.WORK_ORDER_TANK.getStatus()); + // 工单去向(0=工单池,1=检修员) 工单去向是工单池的话,工单状态是待抢单 + model.setOrderStatus(OrderStateEnum.WAITING_LIST.getStatus()); // 订单状态 0-待抢单; + + Client client = clientMapper.findClientById(equipment.getClientId()); + + RoutingInspectionOrder lastRoutingInspectionOrderByTime = routingInspectionOrderMapper.findLastRoutingInspectionOrderByTime(TimeUtil.getCurrentTimeYYYYMMDD()); + model.setOrderNo(OrderUtil.getOrderNo(lastRoutingInspectionOrderByTime == null ? "" :lastRoutingInspectionOrderByTime.getOrderNo())); // 订单编号 + model.setClientId(client.getId()); //客户id + model.setEquipmentId(equipment.getId());// 设备id + model.setCreateTime(new Date()); //创建时间 + model.setOrderSource(OrderStateEnum.SYSTEM_CREATION.getStatus()); + + // 获取当前的用户 + routingInspectionOrderMapper.insert(model); } } 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 33656f4..23affb4 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 @@ -322,7 +322,7 @@ public class MaintenanceOrderServiceImpl implements IMaintenanceOrderService { if (repairWorkOrderFlow == OrderStateEnum.WORK_ORDER_TANK.getStatus()) { model.setOrderStatus(OrderStateEnum.WAITING_LIST.getStatus()); } else { - model.setOrderStatus(OrderStateEnum.REPAIRER.getStatus()); + model.setOrderStatus(OrderStateEnum.PENDING_ORDER.getStatus()); } MaintenanceOrder maintenanceOrder = maintenanceOrderMapper.findLastMaintenanceOrderByTime(TimeUtil.getCurrentTimeYYYYMMDD()); @@ -334,6 +334,17 @@ public class MaintenanceOrderServiceImpl implements IMaintenanceOrderService { orderOperateRecordService.addMaintenanceOrder(model.getId() ,OrderOperateRecordEnum.NEW_CREATE.getDesc() ,"【"+AdminThreadLocal.get("username")+"】创建了检修工单。"); + + //当前是指派检修员则新增操作记录 + if(repairWorkOrderFlow == OrderStateEnum.REPAIRER.getStatus()){ + User user = userMapper.selectById(maintenanceOrderParam.getReceiverId()); + if(user != null){ + //新增订单操作记录 + orderOperateRecordService.addMaintenanceOrder(model.getId() + ,OrderOperateRecordEnum.APPOINT.getDesc() + ,"【"+AdminThreadLocal.get("username")+"】指派检修单给检修员【"+user.getUsername()+"】"); + } + } } /** @@ -365,7 +376,7 @@ public class MaintenanceOrderServiceImpl implements IMaintenanceOrderService { //新增订单操作记录 orderOperateRecordService.addMaintenanceOrder(model.getId() ,OrderOperateRecordEnum.APPOINT.getDesc() - ,"【"+AdminThreadLocal.get("username")+"】指派检修单给检修员【"+user.getUsername()+"】"); + ,"【"+AdminThreadLocal.get("username")+"】重新分配工单给检修员【"+user.getUsername()+"】"); } } model.setReceiverId(param.getReceiverId()); 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 340f466..26a3c8c 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 @@ -23,6 +23,7 @@ import com.hcy.common.entity.sparePartStockAudit.SparePartStockAudit; import com.hcy.common.entity.system.SystemAuthAdmin; import com.hcy.common.entity.user.User; import com.hcy.common.entity.warehouse.Warehouse; +import com.hcy.common.enums.LogisticsModeEnum; import com.hcy.common.enums.SparePartStockAuditEnum; import com.hcy.common.enums.audit.AuditStateEnum; import com.hcy.common.enums.order.MaintenanceOrderStatusEnum; @@ -665,7 +666,7 @@ public class SparePartStockAuditServiceImpl implements ISparePartStockAuditServi orderOperateRecordService.addMaintenanceOrder(model.getOrderId() , OrderOperateRecordEnum.SPARE_PARTS_AUDIT_ONE.getDesc() ,OrderOperateRecordEnum.AUDIT.getStatus() - ,"仓管员【"+AdminThreadLocal.get("username")+"】已经完成审核,审核通过;等待管理员审核"); + ,"仓管员【"+AdminThreadLocal.get("username")+"】已经完成审核,审核通过;等待管理员审核。"); } } @@ -806,7 +807,7 @@ public class SparePartStockAuditServiceImpl implements ISparePartStockAuditServi orderOperateRecordService.addMaintenanceOrder(model.getOrderId() , OrderOperateRecordEnum.DELIVER_GOODS.getDesc() ,OrderOperateRecordEnum.DELIVER_GOODS_TYPE.getStatus() - ,"仓管员【"+AdminThreadLocal.get("username")+"】已经完成发货。配送方式:"+SparePartStockAuditEnum.getMsgByStatus(model.getDeliveryMethod())); + ,"仓管员【"+AdminThreadLocal.get("username")+"】已经完成发货。配送方式:"+ LogisticsModeEnum.getMsgByStatus(model.getDeliveryMethod())+"。"); } } diff --git a/common/src/main/java/com/hcy/common/entity/client/Equipment.java b/common/src/main/java/com/hcy/common/entity/client/Equipment.java index d2de301..b4d145c 100644 --- a/common/src/main/java/com/hcy/common/entity/client/Equipment.java +++ b/common/src/main/java/com/hcy/common/entity/client/Equipment.java @@ -5,6 +5,7 @@ import com.baomidou.mybatisplus.annotation.TableId; import lombok.Data; import java.io.Serializable; +import java.util.Date; /** * 设备管理实体 @@ -32,6 +33,7 @@ public class Equipment implements Serializable { private String detailedAddress; // 详细地址 private Integer inspectionCycle; // 巡检周期方式(0=天数间隔,1=固定日期) private Integer dailyAudit; // 每隔几天巡检 + private Date frontPollingTime; //上次巡检时间 private String deviceCode; // 设备码 private Integer isDelete; // 是否删除: [0=否, 1=是] private Long createTime; // 创建时间 diff --git a/common/src/main/java/com/hcy/common/enums/LogisticsModeEnum.java b/common/src/main/java/com/hcy/common/enums/LogisticsModeEnum.java new file mode 100644 index 0000000..634d588 --- /dev/null +++ b/common/src/main/java/com/hcy/common/enums/LogisticsModeEnum.java @@ -0,0 +1,47 @@ +package com.hcy.common.enums; + +public enum LogisticsModeEnum { + + EXPRESSAGE(0,"物流快递"), + SELF_TAKE(1,"自行取件"), + HOME_DELIVERY(2,"送货上门"); + + private final int status; + private final String desc; + + LogisticsModeEnum(int status, String desc) { + this.status = status; + this.desc = desc; + } + + /** + * 获取状态码 + * + * @return Long + * @author fzr + */ + public int getStatus() { + return this.status; + } + + /** + * 获取提示 + * + * @return String + * @author fzr + */ + public String getDesc() { + return this.desc; + } + + + public static String getMsgByStatus(Integer status){ + for(LogisticsModeEnum typeEnum: LogisticsModeEnum.values()) { + if (typeEnum.getStatus() == status) { + return typeEnum.getDesc(); + } + } + return null; + } + +} 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 501e447..69f7d8b 100644 --- a/common/src/main/java/com/hcy/common/enums/SparePartStockAuditEnum.java +++ b/common/src/main/java/com/hcy/common/enums/SparePartStockAuditEnum.java @@ -41,13 +41,4 @@ public enum SparePartStockAuditEnum { return this.desc; } - - public static String getMsgByStatus(Integer status){ - for(SparePartStockAuditEnum typeEnum: SparePartStockAuditEnum.values()) { - if (typeEnum.getStatus() == status) { - return typeEnum.getDesc(); - } - } - return null; - } } diff --git a/common/src/main/java/com/hcy/common/enums/equipment/EquipmentStateEnum.java b/common/src/main/java/com/hcy/common/enums/equipment/EquipmentStateEnum.java index 599c10c..5dd23f1 100644 --- a/common/src/main/java/com/hcy/common/enums/equipment/EquipmentStateEnum.java +++ b/common/src/main/java/com/hcy/common/enums/equipment/EquipmentStateEnum.java @@ -16,8 +16,8 @@ public enum EquipmentStateEnum { UNDERWARRANTY(2,"报修中"), UNDEROVERHAUL(3, "检修中"), // 巡检周期方式(0=天数间隔,1=固定日期) - DAYINTERVAL(0,"天数间隔"), - FIXEDDATE(1, "固定日期"); + DAY_INTERVAL(0,"天数间隔"), + FIXED_DATE(1, "固定日期"); private final int status; private final String desc; diff --git a/common/src/main/java/com/hcy/common/enums/order/OrderOperateRecordEnum.java b/common/src/main/java/com/hcy/common/enums/order/OrderOperateRecordEnum.java index e39231e..1f56213 100644 --- a/common/src/main/java/com/hcy/common/enums/order/OrderOperateRecordEnum.java +++ b/common/src/main/java/com/hcy/common/enums/order/OrderOperateRecordEnum.java @@ -23,6 +23,7 @@ public enum OrderOperateRecordEnum { DELIVER_GOODS(7,"发货"), RECEIVE_GOODS(8,"收货"), FILL_IN_RECEIPT(10,"填写回单"), + FINISH(11,"完成"), // 描述类型 QUOTATION(0,"报价"), diff --git a/common/src/main/java/com/hcy/common/mapper/client/EquipmentMapper.java b/common/src/main/java/com/hcy/common/mapper/client/EquipmentMapper.java index 6f07ff8..e3047bc 100644 --- a/common/src/main/java/com/hcy/common/mapper/client/EquipmentMapper.java +++ b/common/src/main/java/com/hcy/common/mapper/client/EquipmentMapper.java @@ -21,4 +21,13 @@ public interface EquipmentMapper extends IBaseMapper { * @return */ List provinceEquipment(); + + /** + * 查询待巡检设备 + * @return List + */ + List findWaitPollingEquipment(); + + @Select("select * from la_equipment where is_delete = 0 and id = #{id}") + Equipment findEquipmentById(@Param("id") Long id); } diff --git a/common/src/main/java/com/hcy/common/mapper/order/RoutingInspectionOrderMapper.java b/common/src/main/java/com/hcy/common/mapper/order/RoutingInspectionOrderMapper.java index 405d3c4..2146805 100644 --- a/common/src/main/java/com/hcy/common/mapper/order/RoutingInspectionOrderMapper.java +++ b/common/src/main/java/com/hcy/common/mapper/order/RoutingInspectionOrderMapper.java @@ -4,9 +4,11 @@ package com.hcy.common.mapper.order; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.hcy.common.core.basics.IBaseMapper; import com.hcy.common.dto.RoutingInspectionOrderDto; +import com.hcy.common.entity.order.MaintenanceOrder; import com.hcy.common.entity.order.RoutingInspectionOrder; import org.apache.ibatis.annotations.Mapper; import org.apache.ibatis.annotations.Param; +import org.apache.ibatis.annotations.Select; import java.util.List; @@ -40,4 +42,7 @@ public interface RoutingInspectionOrderMapper extends IBaseMapper + diff --git a/common/src/main/resources/mapper/SparePartrMapper.xml b/common/src/main/resources/mapper/SparePartrMapper.xml index 1206f4c..7710936 100644 --- a/common/src/main/resources/mapper/SparePartrMapper.xml +++ b/common/src/main/resources/mapper/SparePartrMapper.xml @@ -11,6 +11,7 @@ LEFT JOIN la_warehouse AS lw ON lw.id = lsp.warehouse_id lsp.is_delete = 0 + and lsp.quantity > 0 and (lsp.spare_parts_code like concat('%',#{param.keywords},'%') or lsp.spare_parts_name like concat('%',#{param.keywords},'%') or 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 cc0a7c9..1afdb9f 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 @@ -21,6 +21,7 @@ import com.hcy.common.entity.user.User; import com.hcy.common.enums.ClientStatusEnum; import com.hcy.common.enums.SparePartStockAuditEnum; import com.hcy.common.enums.audit.AuditStateEnum; +import com.hcy.common.enums.equipment.EquipmentStateEnum; import com.hcy.common.enums.order.MaintenanceOrderStatusEnum; import com.hcy.common.enums.order.OrderOperateRecordEnum; import com.hcy.common.enums.order.OrderStateEnum; @@ -316,7 +317,10 @@ public class MaintenanceOrderServiceImpl implements IMaintenanceOrderService { maintenanceOrder.setReceiverTime(new Date()); maintenanceOrderMapper.updateById(maintenanceOrder); - + //新增检修单操作记录 + orderOperateRecordService.addMaintenanceOrder(maintenanceOrder.getId() + , OrderOperateRecordEnum.ORDER_RECEIVING.getDesc() + ,"【"+FrontThreadLocal.get("username")+"】已自主接单。联系人电话:"+FrontThreadLocal.get("mobile")); }else{ throw new OperateException("订单状态不正确"); } @@ -548,6 +552,7 @@ public class MaintenanceOrderServiceImpl implements IMaintenanceOrderService { } @Override + @Transactional public void confirmServiceOfferPrice(MaintenanceOrderParam maintenanceOrderParam) { MaintenanceOrder maintenanceOrder = maintenanceOrderMapper.findMaintenanceOrderById(maintenanceOrderParam.getId()); Assert.notNull(maintenanceOrder, "数据不存在"); @@ -568,6 +573,29 @@ public class MaintenanceOrderServiceImpl implements IMaintenanceOrderService { maintenanceOrder.setRefuseMaintenanceCause(maintenanceOrderParam.getRefuseMaintenanceCause()); maintenanceOrder.setOrderStatus(MaintenanceOrderStatusEnum.FINISHED.getStatus()); maintenanceOrder.setOrderAccomplishTime(new Date()); + + Client client = clientMapper.findClientById(maintenanceOrder.getClientId()); + if(client != null){ + //新增检修单操作记录 + orderOperateRecordService.addMaintenanceOrder(maintenanceOrder.getId() + ,OrderOperateRecordEnum.CUSTOMER_CONFIRM.getDesc() + ,"客户【"+client.getClientName()+"】确定不维修;结束工单原因:"+maintenanceOrder.getRefuseMaintenanceCause()+"。工单处理结束"); + } + + User user = userMapper.selectById(maintenanceOrder.getReceiverId()); + if(user != null){ + //新增检修单操作记录 + orderOperateRecordService.addMaintenanceOrder(maintenanceOrder.getId() + ,OrderOperateRecordEnum.FINISH.getDesc() + ,"【"+user.getUsername()+"】已经完成任务"); + } + + //将设备状态修改成正常 + Equipment equipment = equipmentMapper.findEquipmentById(maintenanceOrder.getEquipmentId()); + if(equipment != null){ + equipment.setDeviceStatus(EquipmentStateEnum.NORMAL.getStatus()); + equipmentMapper.updateById(equipment); + } } maintenanceOrderMapper.updateById(maintenanceOrder); @@ -602,7 +630,7 @@ public class MaintenanceOrderServiceImpl implements IMaintenanceOrderService { orderOperateRecordService.addMaintenanceOrder(maintenanceOrder.getId() ,OrderOperateRecordEnum.SPARE_PARTS_RECEIVE.getDesc() ,OrderOperateRecordEnum.SPARE_PARTS_RECEIVE_TYPE.getStatus() - ,"【"+FrontThreadLocal.get("username")+"】创建了【配件领用】单。选择仓库:自身仓库"); + ,"【"+FrontThreadLocal.get("username")+"】创建了【配件领用】单。选择仓库:自身仓库。"); //我的仓库也要新增配件领用记录 并且状态是已完成 /*SparePartStockAudit sparePartStockAudit = getSparePartStockAudit(maintenanceOrderParam); sparePartStockAudit.setPurchaseStatus(AuditStateEnum.DONE.getStatus()); @@ -664,6 +692,7 @@ public class MaintenanceOrderServiceImpl implements IMaintenanceOrderService { } @Override + @Transactional public void fillInReceipt(MaintenanceOrderParam maintenanceOrderParam) { MaintenanceOrder maintenanceOrder = maintenanceOrderMapper.findMaintenanceOrderById(maintenanceOrderParam.getId()); Assert.notNull(maintenanceOrder, "数据不存在"); @@ -682,6 +711,13 @@ public class MaintenanceOrderServiceImpl implements IMaintenanceOrderService { maintenanceOrder.setCompleteImg(maintenanceOrderParam.getCompleteImg()); // 完工照片 maintenanceOrderMapper.updateById(maintenanceOrder); + //将设备状态修改成正常 + Equipment equipment = equipmentMapper.findEquipmentById(maintenanceOrder.getEquipmentId()); + if(equipment != null){ + equipment.setDeviceStatus(EquipmentStateEnum.NORMAL.getStatus()); + equipmentMapper.updateById(equipment); + } + //新增检修单操作记录 orderOperateRecordService.addMaintenanceOrder(maintenanceOrder.getId() ,OrderOperateRecordEnum.FILL_IN_RECEIPT.getDesc()