【admin】新增# 1.新增巡检单、配件采购收货超时、三种工单接单超时任务

dev
dabin 2024-08-30 01:46:50 +08:00
parent 54bf366470
commit 119f12ceda
13 changed files with 202 additions and 18 deletions

View File

@ -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<Equipment> queryWrapper = new LambdaQueryWrapper<Equipment>()
.eq(Equipment::getDeviceStatus, EquipmentStateEnum.NORMAL.getStatus())
.eq(Equipment::getIsDelete, GlobalConstant.NOT_DELETE);
List<Equipment> 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);
}
}

View File

@ -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());

View File

@ -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())+"。");
}
}

View File

@ -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; // 创建时间

View File

@ -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;
}
}

View File

@ -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;
}
}

View File

@ -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;

View File

@ -23,6 +23,7 @@ public enum OrderOperateRecordEnum {
DELIVER_GOODS(7,"发货"),
RECEIVE_GOODS(8,"收货"),
FILL_IN_RECEIPT(10,"填写回单"),
FINISH(11,"完成"),
// 描述类型
QUOTATION(0,"报价"),

View File

@ -21,4 +21,13 @@ public interface EquipmentMapper extends IBaseMapper<Equipment> {
* @return
*/
List<ClientLargeDataDto> provinceEquipment();
/**
*
* @return List<Equipment>
*/
List<Equipment> findWaitPollingEquipment();
@Select("select * from la_equipment where is_delete = 0 and id = #{id}")
Equipment findEquipmentById(@Param("id") Long id);
}

View File

@ -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<RoutingInspect
* @return
*/
Integer selectPendingOrderCount(@Param("param") RoutingInspectionOrderDto routingInspectionOrderDto);
@Select("select * from la_routing_inspection_order where is_delete = 0 and order_no like concat('%',#{time},'%') order by order_no desc limit 1")
RoutingInspectionOrder findLastRoutingInspectionOrderByTime(@Param("time") String time);
}

View File

@ -22,6 +22,24 @@
ORDER BY
equipmentCount DESC
LIMIT 5;
</select>
<select id="provinceEquipment" resultType="com.hcy.common.dto.largeDataDto.ClientLargeDataDto">
SELECT
dr.name as province,
COUNT( e.province_id ) AS equipmentCount,
SUM( CASE WHEN e.device_status = 1 THEN 1 ELSE 0 END ) AS normalCount,
SUM( CASE WHEN e.device_status = 2 THEN 1 ELSE 0 END ) AS underOverhaulCount,
SUM( CASE WHEN e.device_status = 3 THEN 1 ELSE 0 END ) AS underWarrantyCount
FROM
la_equipment AS e
JOIN la_dev_region as dr on e.province_id = dr.id
where
e.is_delete = 0
GROUP BY
e.province_id
ORDER BY
equipmentCount DESC
LIMIT 5;
</select>
</mapper>

View File

@ -11,6 +11,7 @@
LEFT JOIN la_warehouse AS lw ON lw.id = lsp.warehouse_id
<where>
lsp.is_delete = 0
and lsp.quantity > 0
<if test="param.keywords != null and param.keywords != ''">
and (lsp.spare_parts_code like concat('%',#{param.keywords},'%') or
lsp.spare_parts_name like concat('%',#{param.keywords},'%') or

View File

@ -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()