【admin】新增&优化 # 1、新增数据大屏客户总数、设备总数、工单总数、今日工单总数 2、新增大屏客户列表、设备列表、检修员列表 3、新增修改检修员经纬度接口 4、新增切换接单状态接口 5、新增巡检单退单接口 6、优化后台管理巡检单详情接口 7、小程序新增用户地址管理 8、新增数据大屏检修单列表、巡检单列表

dev
renfan 2024-08-24 11:05:52 +08:00
parent 8d37c44448
commit eacfc63a15
34 changed files with 714 additions and 64 deletions

View File

@ -1,16 +1,32 @@
package com.hcy.admin.controller.largeDataScreen;
import com.hcy.admin.service.client.IClientService;
import com.hcy.admin.service.client.IEquipmentService;
import com.hcy.admin.service.largeDataScreen.ILargeDataScreenService;
import com.hcy.admin.vo.client.EquipmentLargeDataVo;
import com.hcy.admin.service.order.IMaintenanceOrderService;
import com.hcy.admin.service.order.IRoutingInspectionOrderService;
import com.hcy.admin.validate.common.PageParam;
import com.hcy.admin.validate.order.MaintenanceOrderParam;
import com.hcy.admin.vo.client.ClientListVo;
import com.hcy.admin.vo.client.EquipmentListVo;
import com.hcy.admin.vo.largeData.EquipmentLargeDataVo;
import com.hcy.admin.vo.largeData.LargeDataVo;
import com.hcy.admin.vo.largeData.UserLargeDataVo;
import com.hcy.admin.vo.order.MaintenanceOrderListVo;
import com.hcy.admin.vo.order.RoutingInspectionOrderListVo;
import com.hcy.common.core.AjaxResult;
import com.hcy.common.core.PageResult;
import com.hcy.common.dto.largeDataDto.AdminLargeDataDto;
import com.hcy.common.dto.largeDataDto.ClientLargeDataDto;
import org.springframework.validation.annotation.Validated;
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 javax.annotation.Resource;
import java.util.List;
import java.util.Map;
/**
*
@ -21,6 +37,18 @@ public class LargeDataScreenController {
@Resource
ILargeDataScreenService iLargeDataScreenService;
@Resource
IClientService iClientService;
@Resource
IEquipmentService iEquipmentService;
@Resource
IRoutingInspectionOrderService iRoutingInspectionOrderService;
@Resource
IMaintenanceOrderService iMaintenanceOrderService;
/**
*
*
@ -69,5 +97,93 @@ public class LargeDataScreenController {
return AjaxResult.success(adminLargeDataDto);
}
/**
*
*
* @author hcy
* @return Object
*/
@GetMapping("/allNumber")
public Object allNumber() {
LargeDataVo largeDataVo = iLargeDataScreenService.allNumber();
return AjaxResult.success(largeDataVo);
}
/**
*
*
* @param pageParam
* @param params
* @return Object
*/
@GetMapping("/clientList")
public Object list(@Validated PageParam pageParam,
@RequestParam Map<String, String> params) {
PageResult<ClientListVo> list = iClientService.list(pageParam, params);
return AjaxResult.success(list);
}
/**
*
*
* @param pageParam
* @param params
* @return Object
*/
@GetMapping("/equipmentList")
public Object equipmentList(@Validated PageParam pageParam,
@RequestParam Map<String, String> params) {
PageResult<EquipmentListVo> list = iEquipmentService.list(pageParam, params);
return AjaxResult.success(list);
}
/**
*
* @return Object
*/
@GetMapping("/reconditionList")
public Object reconditionList() {
List<UserLargeDataVo> list = iLargeDataScreenService.reconditionList();
return AjaxResult.success(list);
}
/**
*
*
* @author hcy
* @param pageParam
* @param params
* @return Object
*/
@GetMapping("/routingInspectionOrderList")
public Object routingInspectionOrderList(@Validated PageParam pageParam,
@RequestParam Map<String, String> params) {
PageResult<RoutingInspectionOrderListVo> list = iRoutingInspectionOrderService.list(pageParam, params);
return AjaxResult.success(list);
}
/**
*
*
* @param pageParam
* @param maintenanceOrderParam
* @return Object
*/
@GetMapping("/maintenanceOrderList")
public Object maintenanceOrderList(@Validated PageParam pageParam, MaintenanceOrderParam maintenanceOrderParam) {
PageResult<MaintenanceOrderListVo> list = iMaintenanceOrderService.list(pageParam, maintenanceOrderParam);
return AjaxResult.success(list);
}
/**
*
*
* @author hcy
* @return Object
*/
@GetMapping("/routingInspectionOrderStats")
public Object routingInspectionOrdeStatsr(int orderStastic) {
LargeDataVo largeDataVo = iLargeDataScreenService.routingInspectionOrdeStatsr(orderStastic);
return AjaxResult.success(largeDataVo);
}
}

View File

@ -14,8 +14,10 @@ import com.hcy.admin.vo.client.ClientDetailVo;
import com.hcy.common.constant.GlobalConstant;
import com.hcy.common.core.PageResult;
import com.hcy.common.entity.client.Client;
import com.hcy.common.entity.client.Equipment;
import com.hcy.common.exception.OperateException;
import com.hcy.common.mapper.client.ClientMapper;
import com.hcy.common.mapper.client.EquipmentMapper;
import org.apache.commons.lang3.StringUtils;
import org.springframework.beans.BeanUtils;
import org.springframework.stereotype.Service;
@ -36,6 +38,9 @@ public class ClientServiceImpl implements IClientService {
@Resource
private IDevRegionService regionService;
@Resource
EquipmentMapper equipmentMapper;
/**
*
*
@ -48,10 +53,12 @@ public class ClientServiceImpl implements IClientService {
Integer page = pageParam.getPageNo();
Integer limit = pageParam.getPageSize();
String clientId = params.get("id");
String clientNo = params.get("clientNo");
String clientName = params.get("clientName");
QueryWrapper<Client> queryWrapper = new QueryWrapper<>();
queryWrapper.eq(StringUtils.isNotEmpty(clientId),"id", clientId);
queryWrapper.eq("is_delete", 0);
queryWrapper.like(StringUtils.isNotEmpty(clientNo),"client_no",clientNo);
queryWrapper.like(StringUtils.isNotEmpty(clientName),"client_name",clientName);
@ -84,6 +91,12 @@ public class ClientServiceImpl implements IClientService {
vo.setProvince(regionMap.get(vo.getProvinceId()));
vo.setCity(regionMap.get(vo.getCityId()));
vo.setDistrict(regionMap.get(vo.getDistrictId()));
//获取客户所有设备
List<Equipment> equipment = equipmentMapper.selectList(
new QueryWrapper<Equipment>()
.eq("client_id", item.getId())
.eq("is_delete", GlobalConstant.NOT_DELETE));
vo.setEquipmentList(equipment);
list.add(vo);
}

View File

@ -1,6 +1,8 @@
package com.hcy.admin.service.largeDataScreen;
import com.hcy.admin.vo.client.EquipmentLargeDataVo;
import com.hcy.admin.vo.largeData.EquipmentLargeDataVo;
import com.hcy.admin.vo.largeData.LargeDataVo;
import com.hcy.admin.vo.largeData.UserLargeDataVo;
import com.hcy.common.dto.largeDataDto.AdminLargeDataDto;
import com.hcy.common.dto.largeDataDto.ClientLargeDataDto;
@ -35,4 +37,23 @@ public interface ILargeDataScreenService {
* @return
*/
AdminLargeDataDto personnelStatistics();
/**
*
* @return
*/
LargeDataVo allNumber();
/**
*
* @return
*/
List<UserLargeDataVo> reconditionList();
/**
*
* @param orderStastic
* @return
*/
LargeDataVo routingInspectionOrdeStatsr(int orderStastic);
}

View File

@ -2,19 +2,34 @@ package com.hcy.admin.service.largeDataScreen.impl;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.hcy.admin.service.largeDataScreen.ILargeDataScreenService;
import com.hcy.admin.vo.client.EquipmentLargeDataVo;
import com.hcy.admin.vo.client.EquipmentListVo;
import com.hcy.admin.vo.largeData.EquipmentLargeDataVo;
import com.hcy.admin.vo.largeData.LargeDataVo;
import com.hcy.admin.vo.largeData.UserLargeDataVo;
import com.hcy.common.dto.largeDataDto.AdminLargeDataDto;
import com.hcy.common.dto.largeDataDto.ClientLargeDataDto;
import com.hcy.common.dto.result.UserLargeDataDto;
import com.hcy.common.entity.client.Client;
import com.hcy.common.entity.client.Equipment;
import com.hcy.common.entity.order.MaintenanceOrder;
import com.hcy.common.entity.order.RoutingInspectionOrder;
import com.hcy.common.enums.equipment.EquipmentStateEnum;
import com.hcy.common.mapper.client.ClientMapper;
import com.hcy.common.mapper.client.EquipmentMapper;
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 org.springframework.beans.BeanUtils;
import org.springframework.stereotype.Service;
import javax.annotation.Resource;
import java.sql.Timestamp;
import java.time.LocalDateTime;
import java.time.LocalTime;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;
/**
@ -32,6 +47,16 @@ public class LargeDataScreenServiceImpl implements ILargeDataScreenService {
@Resource
SystemAuthAdminMapper systemAuthAdminMapper;
@Resource
RoutingInspectionOrderMapper routingInspectionOrderMapper;
@Resource
MaintenanceOrderMapper maintenanceOrderMapper;
@Resource
UserMapper userMapper;
/**
*
*
@ -106,5 +131,97 @@ public class LargeDataScreenServiceImpl implements ILargeDataScreenService {
return systemAuthAdminMapper.personnelStatistics();
}
/**
*
*
* @return
*/
@Override
public LargeDataVo allNumber() {
LargeDataVo vo = new LargeDataVo();
//客户总数
Integer clientCount = clientMapper.selectCount(
new QueryWrapper<Client>()
.eq("is_delete", 0));
//设备总数
Integer equipmentCount = equipmentMapper.selectCount(
new QueryWrapper<Equipment>()
.eq("is_delete", 0));
//工单总数=检修单总数+维修单总数+巡检单总数
//巡检单总数
Integer routingInspectionOrderCount = routingInspectionOrderMapper.selectCount(
new QueryWrapper<RoutingInspectionOrder>()
.eq("is_delete", 0));
//检修单总数
Integer maintenanceOrderCount = maintenanceOrderMapper.selectCount(
new QueryWrapper<MaintenanceOrder>()
.eq("is_delete", 0));
//今日工单总数=今日检修单总数+今日维修单总数+今日巡检单总数
LocalDateTime startTime = LocalDateTime.of(LocalDateTime.now().toLocalDate(), LocalTime.MIN);
LocalDateTime endTime = LocalDateTime.of(LocalDateTime.now().toLocalDate(), LocalTime.MAX);
//今日检修单总数
Integer todayRoutingInspectionOrderCount = routingInspectionOrderMapper.selectCount(
new QueryWrapper<RoutingInspectionOrder>()
.eq("is_delete", 0)
.ge("create_time", Timestamp.valueOf(startTime)) // 开始时间
.le("create_time", Timestamp.valueOf(endTime))); // 结束时间
//今日检修单总数
Integer todayMaintenanceOrderCount = maintenanceOrderMapper.selectCount(
new QueryWrapper<MaintenanceOrder>()
.eq("is_delete", 0)
.ge("create_time", Timestamp.valueOf(startTime)) // 开始时间
.le("create_time", Timestamp.valueOf(endTime))); // 结束时间
vo.setClientSum(clientCount);
vo.setEquipmentSum(equipmentCount);
vo.setOrderSum(routingInspectionOrderCount + maintenanceOrderCount);
vo.setTodayOrderSum(todayRoutingInspectionOrderCount + todayMaintenanceOrderCount);
return vo;
}
/**
*
*
* @return
*/
@Override
public List<UserLargeDataVo> reconditionList() {
List<UserLargeDataDto> userLargeDataDtos = userMapper.reconditionList();
List<UserLargeDataVo> list = new ArrayList<>();
for (UserLargeDataDto userLargeDataDto : userLargeDataDtos) {
UserLargeDataVo vo = new UserLargeDataVo();
BeanUtils.copyProperties(userLargeDataDto, vo);
list.add(vo);
}
return list;
}
/**
*
*
* @param orderStastic
* @return
*/
@Override
public LargeDataVo routingInspectionOrdeStatsr(int orderStastic) {
//orderStastic 工单统计 0=日 1=月 2=年
//今日
LocalDateTime startTime = LocalDateTime.of(LocalDateTime.now().toLocalDate(), LocalTime.MIN);
LocalDateTime endTime = LocalDateTime.of(LocalDateTime.now().toLocalDate(), LocalTime.MAX);
//当月
LocalDateTime now = LocalDateTime.now();
LocalDateTime monthStartTime = now.withDayOfMonth(1).withHour(0).withMinute(0).withSecond(0);
LocalDateTime monthEndTime = now.withHour(23).withMinute(59).withSecond(59);
//获取巡检订单总数
Integer routingInspectionOrderCount = routingInspectionOrderMapper.selectCount(
new QueryWrapper<RoutingInspectionOrder>()
.eq("is_delete", 0));
//获取已完成订单总数
//获取检修中订单总数
//获取保修中订单总数
return null;
}
}

View File

@ -5,8 +5,10 @@ import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.hcy.admin.AdminThreadLocal;
import com.hcy.admin.service.order.IRoutingInspectionOrderService;
import com.hcy.admin.service.region.IDevRegionService;
import com.hcy.admin.validate.common.PageParam;
import com.hcy.admin.validate.order.RoutingInspectionOrderParam;
import com.hcy.admin.vo.client.EquipmentListVo;
import com.hcy.admin.vo.order.RoutingInspectionOrderListVo;
import com.hcy.admin.vo.order.RoutingInspectionOrderDetailVo;
import com.hcy.common.constant.GlobalConstant;
@ -14,12 +16,15 @@ import com.hcy.common.core.PageResult;
import com.hcy.common.dto.RoutingInspectionOrderDto;
import com.hcy.common.entity.client.Client;
import com.hcy.common.entity.client.Equipment;
import com.hcy.common.entity.fault.Fault;
import com.hcy.common.entity.order.MaintenanceOrder;
import com.hcy.common.entity.order.RoutingInspectionOrder;
import com.hcy.common.entity.system.SystemAuthAdmin;
import com.hcy.common.entity.user.User;
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.fault.FaultMapper;
import com.hcy.common.mapper.order.RoutingInspectionOrderMapper;
import com.hcy.common.mapper.system.SystemAuthAdminMapper;
import com.hcy.common.mapper.user.UserMapper;
@ -53,6 +58,12 @@ public class RoutingInspectionOrderServiceImpl implements IRoutingInspectionOrde
@Resource
UserMapper userMapper;
@Resource
FaultMapper faultMapper;
@Resource
private IDevRegionService regionService;
/**
*
*
@ -80,14 +91,10 @@ public class RoutingInspectionOrderServiceImpl implements IRoutingInspectionOrde
Page<RoutingInspectionOrderDto> iPage = routingInspectionOrderMapper.pageList(page, inspectionOrderDto);
List<RoutingInspectionOrderListVo> list = new LinkedList<>();
for(RoutingInspectionOrderDto item : iPage.getRecords()) {
RoutingInspectionOrderListVo vo = new RoutingInspectionOrderListVo();
BeanUtils.copyProperties(item, vo);
vo.setCreateTime(String.valueOf(item.getCreateTime()));
list.add(vo);
}
@ -119,23 +126,42 @@ public class RoutingInspectionOrderServiceImpl implements IRoutingInspectionOrde
.eq("id", model.getClientId())
.last("limit 1"));
vo.setClientName(client.getClientName());
//设备编号、名称、地址
//设备信息
Map<Long, String> regionMap = regionService.getRegionMap();
Equipment equipment = equipmentMapper.selectOne(
new QueryWrapper<Equipment>()
.eq("id", model.getEquipmentId())
.last("limit 1"));
vo.setEquipmentNo(equipment.getNumber());
vo.setEquipmentName(equipment.getName());
vo.setDetailedAddress(equipment.getDetailedAddress());
EquipmentListVo equipmentListVo = new EquipmentListVo();
equipmentListVo.setProvince(regionMap.get(equipment.getProvinceId()));
equipmentListVo.setCity(regionMap.get(equipment.getCityId()));
equipmentListVo.setDistrict(regionMap.get(equipment.getDistrictId()));
BeanUtils.copyProperties(equipment, equipmentListVo);
vo.setEquipment(equipmentListVo); //设备信息
//接单人
SystemAuthAdmin authAdmin = systemAuthAdminMapper.selectOne(
new QueryWrapper<SystemAuthAdmin>()
User user = userMapper.selectOne(
new QueryWrapper<User>()
.eq("id", model.getReceiverId())
.last("limit 1"));
if(authAdmin != null){
vo.setReceiverName(authAdmin.getUsername());
if(user != null){
vo.setReceiverName(user.getUsername());
}
//故障类别
Fault fault = faultMapper.selectOne(
new QueryWrapper<Fault>()
.eq("id", model.getFaultId())
.last("limit 1"));
if(fault != null){
vo.setFaultName(fault.getName());
}
//创建人名称
SystemAuthAdmin authAdmin = systemAuthAdminMapper.selectOne(
new QueryWrapper<SystemAuthAdmin>()
.eq("id", model.getCreatorId())
.last("limit 1"));
if(authAdmin != null){
vo.setCreatorName(authAdmin.getUsername());
}
return vo;
}
@ -279,6 +305,10 @@ public class RoutingInspectionOrderServiceImpl implements IRoutingInspectionOrde
Assert.notNull(model, "数据不存在!");
model.setReceiverId(routingInspectionOrderParam.getReceiverId());
//如果是退单状态,重新派工后状态改为待接单
if(model.getOrderStatus() == OrderStateEnum.RETURNED_ORDER.getStatus()){
model.setOrderStatus(OrderStateEnum.PENDING_ORDER.getStatus());
}
routingInspectionOrderMapper.updateById(model);
}

View File

@ -1,12 +1,14 @@
package com.hcy.admin.vo.client;
import com.hcy.admin.validate.client.ClientParam;
import com.hcy.common.entity.client.Equipment;
import lombok.Data;
import javax.validation.constraints.NotNull;
import java.io.Serializable;
import java.math.BigDecimal;
import java.util.Date;
import java.util.List;
/**
* ClientVo
@ -39,5 +41,5 @@ public class ClientListVo implements Serializable {
private Long creatorId; // 创建人id
private Date createTime; // 创建时间
private Date updateTime; // 更新时间
private List<Equipment> equipmentList; //设备列表
}

View File

@ -26,6 +26,9 @@ public class EquipmentListVo implements Serializable {
private Long provinceId; // 省id
private Long districtId; // 区id
private Long cityId; // 市id
private String province; //省
private String city; //市
private String district; //区
private String detailedAddress; // 详细地址
private Integer inspectionCycle; // 巡检周期方式0=天数间隔1=固定日期)
private Integer dailyAudit; // 每隔几天巡检

View File

@ -1,4 +1,4 @@
package com.hcy.admin.vo.client;
package com.hcy.admin.vo.largeData;
import lombok.Data;

View File

@ -0,0 +1,23 @@
package com.hcy.admin.vo.largeData;
import lombok.Data;
import java.io.Serializable;
/**
* LargeDataVo
*/
@Data
public class LargeDataVo implements Serializable {
private static final long serialVersionUID = 1L;
private Integer clientSum; //客户总数
private Integer equipmentSum; //设备总数
private Integer orderSum; //工单总数
private Integer todayOrderSum; //今日工单总数
private Integer doneOrderSum; //已完成订单数
private Integer underOverhaulOrderSum; //检修中订单数
private Integer underWarrantyOrderSum; //保修中订单数
}

View File

@ -0,0 +1,43 @@
package com.hcy.admin.vo.largeData;
import lombok.Data;
import java.io.Serializable;
import java.math.BigDecimal;
/**
* Vo
*/
@Data
public class UserLargeDataVo implements Serializable {
private static final long serialVersionUID = 1L;
private Integer id; // 主键
private Integer sn; // 编号
private String avatar; // 用户头像
private String realName; // 真实姓名
private String nickname; // 用户昵称
private String username; // 用户账号
private String password; // 用户密码
private String mobile; // 用户电话
private Integer channel; // 注册渠道
private Integer type; // 用户类型:[0=用户端1=师傅端]
private String salt; // 加密盐巴
private BigDecimal money; // 用户余额
private Integer sex; // 用户性别: [1=男, 2=女]
private Integer isDisable; // 是否禁用: [0=否, 1=是]
private Integer isDelete; // 是否删除: [0=否, 1=是]
private Integer isNew; // 是否新用户: [0=否, 1=是]
private String lastLoginIp; // 最后登录IP
private Long lastLoginTime; // 最后登录时间
private Long createTime; // 创建时间
private Long updateTime; // 更新时间
private Long deleteTime; // 删除时间
private Long distributorId; // 绑定的分销人员Id
private Long bindTime; // 绑定的时间
private Integer receiveOrderStatus; //接单状态0=休假/停止接单中 1=作业中 2=可接单)
private String longitude; // 经度
private String latitude; // 纬度
}

View File

@ -1,6 +1,10 @@
package com.hcy.admin.vo.order;
import com.baomidou.mybatisplus.annotation.FieldStrategy;
import com.baomidou.mybatisplus.annotation.TableField;
import com.hcy.admin.validate.order.RoutingInspectionOrderParam;
import com.hcy.admin.vo.client.EquipmentListVo;
import com.hcy.common.entity.client.Equipment;
import lombok.Data;
import org.hibernate.validator.constraints.Length;
@ -24,17 +28,29 @@ public class RoutingInspectionOrderDetailVo implements Serializable {
private Integer repairWorkOrderFlow; //工单去向 0=工单池 1=检修员
private Integer orderStatus; // 订单状态 0-待抢单1-待接单2-接单超时3-巡检中4-已完成5-已退单6-待巡检
private Long clientId; // 客户id
private Long equipmentId; // 设备id
private Long receiverId; // 接单人id
private Date receiverTime; // 接单时间
private String remark; // 备注
private Integer creatorId; // 创建人id
private String creatorName; // 创建人名称
private Integer receiverType; // 接单类型 0-区域派单1-距离派单
private BigDecimal orderDistance; // 订单距离
private String clientName; // 客户名称
private String equipmentNo; //设备编号
private String equipmentName; //设备名称
private String detailedAddress; // 设备详细地址
private Long equipmentId; // 设备id
private EquipmentListVo equipment; //设备信息
private String receiverName; // 接单人名称
private Date createTime; // 创建时间
private Long userId; // 用户id
private Long faultId; // 故障id
private String faultName; // 故障名称
private String faultDescription; // 故障描述
private Long repairId; // 返修id
private Date cancelOrderTime; // 取消订单时间
private String cancelCause; // 取消原因
private Date orderAccomplishTime; // 订单完成时间
private Date updateTime; // 更新时间
private Long maintenanceId; //检修单id
private Integer inspectionResult; //巡检结果0=正常 1=异常)
private String inspectionPhoto; //巡检照片
private String inspectionResultRemark; //巡检结果备注
}

View File

@ -29,7 +29,7 @@ public class RoutingInspectionOrderListVo implements Serializable {
private String detailedAddress; // 设备详细地址
private Long creatorId; // 创建人id
private String creatorName; //创建人名称
private String createTime; // 创建时间
private Date createTime; // 创建时间
private Long faultId; // 故障id
private String familiarFaultName; //故障类型
private Long orderStatus; // 订单状态 0-待抢单1-待接单2-接单超时3-巡检中4-已完成5-已退单6-待巡检

View File

@ -24,7 +24,7 @@ public class RoutingInspectionOrderDto implements Serializable {
private String detailedAddress; // 设备详细地址
private Long creatorId; // 创建人id
private String creatorName; //创建人名称
private String createTime; // 创建时间
private Date createTime; // 创建时间
private Long faultId; // 故障id
private String familiarFaultName; //故障类型
private String faultDescription; // 故障描述
@ -38,4 +38,6 @@ public class RoutingInspectionOrderDto implements Serializable {
private double latitude; //纬度
private BigDecimal orderDistance; // 订单距离
private Integer queryType; // 查询类型 0-离我最近 1-时间优先
private Date cancelOrderTime; // 取消订单时间
private String cancelCause; // 取消原因
}

View File

@ -0,0 +1,43 @@
package com.hcy.common.dto.result;
import lombok.Data;
import java.io.Serializable;
import java.math.BigDecimal;
/**
* Vo
*/
@Data
public class UserLargeDataDto implements Serializable {
private static final long serialVersionUID = 1L;
private Integer id; // 主键
private Integer sn; // 编号
private String avatar; // 用户头像
private String realName; // 真实姓名
private String nickname; // 用户昵称
private String username; // 用户账号
private String password; // 用户密码
private String mobile; // 用户电话
private Integer channel; // 注册渠道
private Integer type; // 用户类型:[0=用户端1=师傅端]
private String salt; // 加密盐巴
private BigDecimal money; // 用户余额
private Integer sex; // 用户性别: [1=男, 2=女]
private Integer isDisable; // 是否禁用: [0=否, 1=是]
private Integer isDelete; // 是否删除: [0=否, 1=是]
private Integer isNew; // 是否新用户: [0=否, 1=是]
private String lastLoginIp; // 最后登录IP
private Long lastLoginTime; // 最后登录时间
private Long createTime; // 创建时间
private Long updateTime; // 更新时间
private Long deleteTime; // 删除时间
private Long distributorId; // 绑定的分销人员Id
private Long bindTime; // 绑定的时间
private Integer receiveOrderStatus; //接单状态0=休假/停止接单中 1=作业中 2=可接单)
private String longitude; // 经度
private String latitude; // 纬度
}

View File

@ -41,5 +41,7 @@ public class User implements Serializable {
private Long distributorId; // 绑定的分销人员Id
private Long bindTime; // 绑定的时间
private Integer integral; // 积分
private Integer receiveOrderStatus; //接单状态0=休假/停止接单中 1=作业中 2=可接单)
private String longitude; // 经度
private String latitude; // 纬度
}

View File

@ -13,7 +13,7 @@ public enum EquipmentStateEnum {
// 设备状态0=停用1=正常2=保修中3=检修中)
STOPWORD(0,"停用"),
NORMAL(1, "正常"),
UNDERWARRANTY(2,"修中"),
UNDERWARRANTY(2,"修中"),
UNDEROVERHAUL(3, "检修中"),
// 巡检周期方式0=天数间隔1=固定日期)
DAYINTERVAL(0,"天数间隔"),

View File

@ -10,9 +10,13 @@ import java.util.Map;
*/
public enum OrderStateEnum {
//订单来源 1-系统创建4-客服创建
// 订单来源 0-客户上报1-系统创建2-维修员创建3-检修员创建4-客服创建5-维修主管创建
CUSTOMER_REPORT(0,"客户上报"),
SYSTEM_CREATION(1,"系统创建"),
MAINTENANCE_MAN(2,"维修员创建"),
MAINTENANCE_MAN_CREATION(3,"检修员创建"),
CUSTOMER_SERVICE_CREATION(4,"客服创建"),
MAINTENANCE_SUPERVISOR_CREATION(5,"维修主管创建"),
//订单状态 0-待抢单1-待接单2-接单超时3-巡检中4-已完成5-已退单6-待巡检
WAITING_LIST(0,"待抢单"),

View File

@ -3,6 +3,7 @@ package com.hcy.common.mapper.user;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.hcy.common.core.basics.IBaseMapper;
import com.hcy.common.dto.UserDto;
import com.hcy.common.dto.result.UserLargeDataDto;
import com.hcy.common.dto.result.UserResultDto;
import com.hcy.common.entity.user.User;
import org.apache.ibatis.annotations.Mapper;
@ -36,4 +37,10 @@ public interface UserMapper extends IBaseMapper<User> {
*/
@Select("select * from la_user where mobile = #{phone}")
User getUserByPhone(@Param("phone") String phone);
/**
*
* @return
*/
List<UserLargeDataDto> reconditionList();
}

View File

@ -64,15 +64,15 @@
LEFT JOIN la_user as u on i.receiver_id = u.id
WHERE
i.is_delete = 0
and i.receiver_id = #{form.receiverId}
and i.receiver_id = #{form.receiverId}
<if test="form.likeWork != null and form.likeWork != ''">
and i.order_no like concat('%', #{form.likeWork}, '%')
and (i.order_no like concat('%', #{form.likeWork}, '%')
</if>
<if test="form.likeWork != null and form.likeWork != ''">
OR c.client_name LIKE concat('%', #{form.likeWork}, '%')
</if>
<if test="form.likeWork != null and form.likeWork != ''">
OR e.number LIKE concat('%', #{form.likeWork}, '%')
OR e.number LIKE concat('%', #{form.likeWork}, '%'))
</if>
<if test="form.orderStatus != null">
and i.order_status = #{form.orderStatus}
@ -104,16 +104,6 @@
LEFT JOIN la_user as u on i.receiver_id = u.id
WHERE
i.is_delete = 0
and i.receiver_id = #{form.receiverId}
<if test="form.likeWork != null and form.likeWork != ''">
and i.order_no like concat('%', #{form.likeWork}, '%')
</if>
<if test="form.likeWork != null and form.likeWork != ''">
OR c.client_name LIKE concat('%', #{form.likeWork}, '%')
</if>
<if test="form.likeWork != null and form.likeWork != ''">
OR e.number LIKE concat('%', #{form.likeWork}, '%')
</if>
<if test="form.orderStatus != null">
and i.order_status = #{form.orderStatus}
</if>

View File

@ -91,4 +91,19 @@
</if>
</where>
</select>
<select id="reconditionList" resultType="com.hcy.common.dto.result.UserLargeDataDto">
SELECT
u.*
FROM
la_user AS u
JOIN la_system_auth_admin AS aa ON aa.user_id = u.id
JOIN la_system_auth_role AS ar ON aa.role = ar.id
WHERE
aa.is_delete = 0
AND u.is_delete = 0
AND aa.role = 6
and u.longitude is not null
and u.latitude is not null
</select>
</mapper>

View File

@ -64,15 +64,15 @@
LEFT JOIN la_user as u on i.receiver_id = u.id
WHERE
i.is_delete = 0
and i.receiver_id = #{form.receiverId}
and i.receiver_id = #{form.receiverId}
<if test="form.likeWork != null and form.likeWork != ''">
and i.order_no like concat('%', #{form.likeWork}, '%')
and (i.order_no like concat('%', #{form.likeWork}, '%')
</if>
<if test="form.likeWork != null and form.likeWork != ''">
OR c.client_name LIKE concat('%', #{form.likeWork}, '%')
</if>
<if test="form.likeWork != null and form.likeWork != ''">
OR e.number LIKE concat('%', #{form.likeWork}, '%')
OR e.number LIKE concat('%', #{form.likeWork}, '%'))
</if>
<if test="form.orderStatus != null">
and i.order_status = #{form.orderStatus}
@ -104,16 +104,6 @@
LEFT JOIN la_user as u on i.receiver_id = u.id
WHERE
i.is_delete = 0
and i.receiver_id = #{form.receiverId}
<if test="form.likeWork != null and form.likeWork != ''">
and i.order_no like concat('%', #{form.likeWork}, '%')
</if>
<if test="form.likeWork != null and form.likeWork != ''">
OR c.client_name LIKE concat('%', #{form.likeWork}, '%')
</if>
<if test="form.likeWork != null and form.likeWork != ''">
OR e.number LIKE concat('%', #{form.likeWork}, '%')
</if>
<if test="form.orderStatus != null">
and i.order_status = #{form.orderStatus}
</if>

View File

@ -91,4 +91,19 @@
</if>
</where>
</select>
<select id="reconditionList" resultType="com.hcy.common.dto.result.UserLargeDataDto">
SELECT
u.*
FROM
la_user AS u
JOIN la_system_auth_admin AS aa ON aa.user_id = u.id
JOIN la_system_auth_role AS ar ON aa.role = ar.id
WHERE
aa.is_delete = 0
AND u.is_delete = 0
AND aa.role = 6
and u.longitude is not null
and u.latitude is not null
</select>
</mapper>

View File

@ -6,6 +6,7 @@ import com.hcy.common.exception.OperateException;
import com.hcy.front.FrontThreadLocal;
import com.hcy.front.service.IUserService;
import com.hcy.front.validate.user.NewUserUpdateValidate;
import com.hcy.front.validate.user.UserParam;
import com.hcy.front.vo.staff.StaffDetailVo;
import com.hcy.front.vo.user.UserCenterVo;
import com.hcy.front.vo.user.UserInfoVo;
@ -143,4 +144,18 @@ public class UserController {
UserInfoVo vo = iUserService.userIntegral(id);
return AjaxResult.success(vo);
}
@PostMapping("/switchingState")
@ApiOperation(value="切换接单状态")
public Object switchingState(@RequestBody UserParam userParam) {
iUserService.switchingState(userParam);
return AjaxResult.success();
}
@PostMapping("/modificationDegree")
@ApiOperation(value="修改检修员经纬度")
public Object modificationDegree(@RequestBody UserParam userParam) {
iUserService.modificationDegree(userParam);
return AjaxResult.success();
}
}

View File

@ -117,4 +117,14 @@ public class RoutingInspectionOrderController {
return AjaxResult.success();
}
/**
* 退
* @param routingInspectionOrderParam
* @return Object
*/
@PostMapping("/checking")
public Object checking(@RequestBody RoutingInspectionOrderParam routingInspectionOrderParam) {
iRoutingInspectionOrderService.checking(routingInspectionOrderParam);
return AjaxResult.success();
}
}

View File

@ -2,6 +2,7 @@ package com.hcy.front.service;
import com.hcy.common.entity.user.User;
import com.hcy.front.validate.user.NewUserUpdateValidate;
import com.hcy.front.validate.user.UserParam;
import com.hcy.front.vo.user.UserCenterVo;
import com.hcy.front.vo.user.UserInfoVo;
@ -91,4 +92,16 @@ public interface IUserService {
* @return
*/
UserInfoVo userIntegral(Integer id);
/**
*
* @param userParam
*/
void switchingState(UserParam userParam);
/**
*
* @param userParam
*/
void modificationDegree(UserParam userParam);
}

View File

@ -131,7 +131,7 @@ public class UserAddressServiceImpl extends ServiceImpl<UserAddressMapper, UserA
model.setUpdateTime(TimeUtil.timestamp());
// 判定地址经纬度落在哪个服务区域上
if (userAddressParam.getDistrictId() > 0) {
/*if (userAddressParam.getDistrictId() > 0) {
// 查找是否有服务区域
String pointString = "POINT(" + userAddressParam.getLongitude() + " " + userAddressParam.getLatitude() + ")";
List<ServiceAreaResultDto> serviceAreaResultDto = serviceAreaMapper.selectByPoint(userAddressParam.getDistrictId(),
@ -148,7 +148,7 @@ public class UserAddressServiceImpl extends ServiceImpl<UserAddressMapper, UserA
log.warn(wstr);
}
}
}
}*/
userAddressMapper.insert(model);
}
@ -180,7 +180,7 @@ public class UserAddressServiceImpl extends ServiceImpl<UserAddressMapper, UserA
}
// 重新更新服务区域
String pointString = "POINT(" + userAddressParam.getLongitude() + " " + userAddressParam.getLatitude() + ")";
/*String pointString = "POINT(" + userAddressParam.getLongitude() + " " + userAddressParam.getLatitude() + ")";
List<ServiceAreaResultDto> serviceAreaResultDto = serviceAreaMapper.selectByPoint(userAddressParam.getDistrictId(),
pointString);
if (serviceAreaResultDto.size() > 0) {
@ -197,7 +197,7 @@ public class UserAddressServiceImpl extends ServiceImpl<UserAddressMapper, UserA
} else {
// 如果没有则设为默认值0
model.setServiceAreaId(0L);
}
}*/
model.setId(userAddressParam.getId());
model.setUserId(userAddressParam.getUserId());

View File

@ -32,6 +32,7 @@ import com.hcy.front.FrontThreadLocal;
import com.hcy.front.config.FrontConfig;
import com.hcy.front.service.IUserService;
import com.hcy.front.validate.user.NewUserUpdateValidate;
import com.hcy.front.validate.user.UserParam;
import com.hcy.front.vo.user.UserCenterVo;
import com.hcy.front.vo.user.UserInfoVo;
import me.chanjar.weixin.common.error.WxErrorException;
@ -80,7 +81,7 @@ public class UserServiceImpl extends ServiceImpl<UserMapper, User> implements IU
@Override
public UserCenterVo center(Integer userId) {
User user = userMapper.selectOne(new QueryWrapper<User>()
.select("id,sn,avatar,real_name,nickname,username,mobile")
.select("id,sn,avatar,real_name,nickname,username,mobile,receive_order_status")
.eq("id", userId)
.last("limit 1"));
@ -517,4 +518,35 @@ public class UserServiceImpl extends ServiceImpl<UserMapper, User> implements IU
userInfoVo.setIntegral(user.getIntegral());
return userInfoVo;
}
/**
*
*
* @param userParam
*/
@Override
public void switchingState(UserParam userParam) {
User user = userMapper.selectOne(new QueryWrapper<User>()
.eq("id", userParam.getId())
.eq("is_delete", 0)
.last("limit 1"));
user.setReceiveOrderStatus(userParam.getReceiveOrderStatus());
userMapper.updateById(user);
}
/**
*
*
* @param userParam
*/
@Override
public void modificationDegree(UserParam userParam) {
User user = userMapper.selectOne(new QueryWrapper<User>()
.eq("id", userParam.getId())
.eq("is_delete", 0)
.last("limit 1"));
user.setLongitude(userParam.getLongitude());
user.setLatitude(userParam.getLatitude());
userMapper.updateById(user);
}
}

View File

@ -64,4 +64,10 @@ public interface IRoutingInspectionOrderService {
* @return
*/
List<RoutingInspectionOrderListVo> inspectionList(RoutingInspectionOrderParam routingInspectionOrderParam);
/**
* 退
* @param routingInspectionOrderParam
*/
void checking(RoutingInspectionOrderParam routingInspectionOrderParam);
}

View File

@ -1,7 +1,9 @@
package com.hcy.front.service.order.impl;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
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;
@ -12,12 +14,14 @@ import com.hcy.common.entity.order.MaintenanceOrder;
import com.hcy.common.entity.order.RoutingInspectionOrder;
import com.hcy.common.entity.system.SystemAuthAdmin;
import com.hcy.common.entity.user.User;
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.exception.OperateException;
import com.hcy.common.mapper.client.ClientMapper;
import com.hcy.common.mapper.client.EquipmentMapper;
import com.hcy.common.mapper.fault.FaultMapper;
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;
@ -37,6 +41,7 @@ import org.springframework.util.Assert;
import javax.annotation.Resource;
import java.math.BigDecimal;
import java.text.DecimalFormat;
import java.text.SimpleDateFormat;
import java.util.*;
import java.util.stream.Collectors;
@ -49,6 +54,9 @@ public class RoutingInspectionOrderServiceImpl implements IRoutingInspectionOrde
@Resource
RoutingInspectionOrderMapper routingInspectionOrderMapper;
@Resource
MaintenanceOrderMapper maintenanceOrderMapper;
@Resource
EquipmentMapper equipmentMapper;
@ -91,8 +99,6 @@ public class RoutingInspectionOrderServiceImpl implements IRoutingInspectionOrde
for(RoutingInspectionOrderDto item : iPage.getRecords()) {
RoutingInspectionOrderListVo vo = new RoutingInspectionOrderListVo();
BeanUtils.copyProperties(item, vo);
vo.setCreateTime(String.valueOf(item.getCreateTime()));
list.add(vo);
}
@ -212,6 +218,31 @@ public class RoutingInspectionOrderServiceImpl implements IRoutingInspectionOrde
model.setFaultId(routingInspectionOrderParam.getFaultId()); // 故障id
model.setFaultDescription(routingInspectionOrderParam.getFaultDescription()); // 故障描述
model.setInspectionResult(routingInspectionOrderParam.getInspectionResult()); //巡检结果0=正常 1=异常)
//如果故障检测是选了异常,需要把设备状态改为报修中
if(routingInspectionOrderParam.getInspectionResult() == OrderStateEnum.ABNORMAL.getStatus()){
Equipment equipment = equipmentMapper.selectOne(
new QueryWrapper<Equipment>()
.eq("id", model.getEquipmentId())
.eq("is_delete", 0)
.last("limit 1"));
equipment.setDeviceStatus(EquipmentStateEnum.UNDERWARRANTY.getStatus());
equipmentMapper.updateById(equipment);
//如果故障检测异常,需要创建检修单
MaintenanceOrder maintenanceOrder = new MaintenanceOrder();
maintenanceOrder.setOrderNo(getOrderNo());
maintenanceOrder.setCreatorId(FrontThreadLocal.getUserId().longValue()); //创建人id
maintenanceOrder.setCreateTime(new Date()); //创建时间
maintenanceOrder.setClientId(model.getClientId()); // 客户id
maintenanceOrder.setEquipmentId(model.getEquipmentId()); // 设备id
maintenanceOrder.setFaultId(model.getFaultId()); // 故障id
maintenanceOrder.setFaultDescription(model.getFaultDescription()); // 故障描述
maintenanceOrder.setRepairWorkOrderFlow(OrderStateEnum.WORK_ORDER_TANK.getStatus()); //工单去向 0=工单池 1=检修员
maintenanceOrder.setRemark(model.getInspectionResultRemark()); // 备注
maintenanceOrder.setOrderSource(OrderStateEnum.MAINTENANCE_MAN_CREATION.getStatus()); //订单来源3=检修员创建
maintenanceOrder.setOrderStatus(OrderStateEnum.WAITING_LIST.getStatus()); // 订单状态 0-待抢单
maintenanceOrderMapper.insert(maintenanceOrder);
}
model.setInspectionResultRemark(routingInspectionOrderParam.getInspectionResultRemark());//巡检结果备注
model.setInspectionPhoto(routingInspectionOrderParam.getInspectionPhoto()); // 巡检照片
model.setOrderStatus(OrderStateEnum.COMPLETED.getStatus()); //故障检测完工单状态就为已完成
@ -293,5 +324,59 @@ public class RoutingInspectionOrderServiceImpl implements IRoutingInspectionOrde
return returnData;
}
/**
* 退
*
* @param routingInspectionOrderParam
*/
@Override
public void checking(RoutingInspectionOrderParam routingInspectionOrderParam) {
RoutingInspectionOrder model = routingInspectionOrderMapper.selectOne(
new QueryWrapper<RoutingInspectionOrder>()
.eq("id", routingInspectionOrderParam.getId())
.eq("is_delete", 0)
.last("limit 1"));
Assert.notNull(model, "数据不存在!");
model.setCancelOrderTime(new Date()); //退单时间
model.setCancelCause(routingInspectionOrderParam.getCancelCause()); //取消原因
//如果工单去向是工单池的话,退单后工单状态为待抢单,如果是检修员,工单状态是 5=已退单
if(model.getRepairWorkOrderFlow() == OrderStateEnum.WORK_ORDER_TANK.getStatus()){
model.setOrderStatus(OrderStateEnum.WAITING_LIST.getStatus()); //用户退单后工单状态为待抢单
}else{
model.setOrderStatus(OrderStateEnum.RETURNED_ORDER.getStatus()); //用户退单后工单状态为已退单
}
routingInspectionOrderMapper.updateById(model);
}
private String getOrderNo() {
//获取当前日期并将其进行格式化
SimpleDateFormat simpleDateFormat = new SimpleDateFormat("yyyyMMdd");
String formatDate = simpleDateFormat.format(new Date());
StringBuilder currentOrderNo = new StringBuilder(formatDate + "000001");
MaintenanceOrder lastmMaintenanceOrder = maintenanceOrderMapper.selectOne(new LambdaQueryWrapper<MaintenanceOrder>()
.eq(MaintenanceOrder::getIsDelete, GlobalConstant.NOT_DELETE)
.like(MaintenanceOrder::getOrderNo, formatDate)
.orderByDesc(MaintenanceOrder::getOrderNo)
.last("limit 1"));
//当天日期加第一条流水号,如果数据库不存在,则代表今天第一条数据
if (lastmMaintenanceOrder == null) {
return currentOrderNo.toString();
} else {
int lastOrderNo = Integer.parseInt(lastmMaintenanceOrder.getOrderNo().substring(8));
int length = String.valueOf((lastOrderNo + 1)).length();
StringBuilder newOrderNo = new StringBuilder(lastOrderNo + 1 + "");
//如果流水号长度小于6位则在前面补0
if (length < 6) {
for (int i = 0; i < 6 - length; i++) {
newOrderNo.insert(0, "0");
}
}
return formatDate + newOrderNo;
}
}
}

View File

@ -82,4 +82,5 @@ public class RoutingInspectionOrderParam implements Serializable {
private double longitude; //经度
private double latitude; //纬度
private Integer queryType; // 查询类型 0-离我最近 1-时间优先
private String cancelCause; // 取消原因
}

View File

@ -0,0 +1,32 @@
package com.hcy.front.validate.user;
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;
/**
* user
*/
@Data
@EqualsAndHashCode(callSuper = false)
@Accessors(chain = true)
public class UserParam implements Serializable {
private static final long serialVersionUID = 1L;
public interface create{}
public interface update{}
public interface delete{}
private Long id;
private Integer receiveOrderStatus; //接单状态0=休假/停止接单中 1=作业中 2=可接单)
private String longitude; // 经度
private String latitude; // 纬度
}

View File

@ -38,5 +38,6 @@ public class RoutingInspectionOrderDetailVo implements Serializable {
private Integer inspectionResult; //巡检结果0=正常 1=异常)
private String inspectionResultRemark; //巡检结果备注
private Integer creatorId; // 创建人id
private Date cancelOrderTime; // 取消订单时间
private String cancelCause; // 取消原因
}

View File

@ -23,10 +23,11 @@ public class RoutingInspectionOrderListVo implements Serializable {
private String equipmentNo; //设备编号
private String equipmentName; //设备名称
private String detailedAddress; // 设备详细地址
private String createTime; // 创建时间
private Date createTime; // 创建时间
private Long orderStatus; // 订单状态 0-待抢单1-待接单2-接单超时3-巡检中4-已完成5-已退单6-待巡检
private String distance; //距离
private BigDecimal orderDistance; // 订单距离
private Date cancelOrderTime; // 取消订单时间
private String cancelCause; // 取消原因
}

View File

@ -23,4 +23,6 @@ public class UserCenterVo implements Serializable {
private Long clientId; //客户id
private Map<Integer,String> roleMap; //角色信息 key:id value:name
private Integer receiveOrderStatus; //接单状态0=休假/停止接单中 1=作业中 2=可接单)
}