From faee0d88a84af97e244108c38c7d26731bc8400d Mon Sep 17 00:00:00 2001 From: dabin <2827029098@qq.com> Date: Wed, 21 Aug 2024 23:16:06 +0800 Subject: [PATCH] =?UTF-8?q?=E3=80=90admin=E3=80=91=E6=96=B0=E5=A2=9E#=201.?= =?UTF-8?q?=E6=96=B0=E5=A2=9E=E6=A3=80=E4=BF=AE=E5=91=98=E5=B0=8F=E7=A8=8B?= =?UTF-8?q?=E5=BA=8F=E5=88=97=E8=A1=A8=E3=80=81=E6=8A=A2=E5=8D=95=E3=80=81?= =?UTF-8?q?=E6=8E=A5=E5=8D=95=E3=80=81=E8=AF=A6=E6=83=85=E6=8E=A5=E5=8F=A3?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../impl/MaintenanceOrderServiceImpl.java | 10 +- .../validate/order/MaintenanceOrderParam.java | 17 +- .../vo/order/MaintenanceOrderListVo.java | 1 + .../admin/vo/system/SystemAuthAdminVo.java | 1 + .../hcy/common/dto/SystemAuthAdminDto.java | 1 + .../common/dto/order/MaintenanceOrderDto.java | 2 + .../common/entity/order/MaintenanceOrder.java | 4 +- .../order/MaintenanceOrderStatusEnum.java | 6 +- .../mapper/order/MaintenanceOrderMapper.java | 12 ++ .../java/com/hcy/common/utils/ToolsUtil.java | 37 ++++ .../mapper/MaintenanceOrderMapper.xml | 10 +- .../mapper/SystemAuthAdminMapper.xml | 1 + .../classes/mapper/MaintenanceOrderMapper.xml | 10 +- .../classes/mapper/SystemAuthAdminMapper.xml | 1 + .../order/MaintenanceOrderController.java | 80 +++++++ .../order/IMaintenanceOrderService.java | 47 +++++ .../impl/MaintenanceOrderServiceImpl.java | 197 ++++++++++++++++++ .../validate/order/MaintenanceOrderParam.java | 111 ++++++++++ .../vo/order/MaintenanceOrderDetailVo.java | 52 +++++ .../vo/order/MaintenanceOrderListVo.java | 56 +++++ 20 files changed, 635 insertions(+), 21 deletions(-) create mode 100644 front/src/main/java/com/hcy/front/controller/order/MaintenanceOrderController.java create mode 100644 front/src/main/java/com/hcy/front/service/order/IMaintenanceOrderService.java create mode 100644 front/src/main/java/com/hcy/front/service/order/impl/MaintenanceOrderServiceImpl.java create mode 100644 front/src/main/java/com/hcy/front/validate/order/MaintenanceOrderParam.java create mode 100644 front/src/main/java/com/hcy/front/vo/order/MaintenanceOrderDetailVo.java create mode 100644 front/src/main/java/com/hcy/front/vo/order/MaintenanceOrderListVo.java 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 044dcbc..210a980 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 @@ -92,6 +92,12 @@ public class MaintenanceOrderServiceImpl implements IMaintenanceOrderService { regionMap.get(item.getEquipmentDistrictId()) + item.getDetailedAddress()); + //设置接单人名称 + User user = userMapper.selectById(item.getReceiverId()); + if(user != null){ + vo.setReceiverName(user.getNickname()); + } + list.add(vo); } @@ -211,8 +217,8 @@ public class MaintenanceOrderServiceImpl implements IMaintenanceOrderService { Assert.notNull(model, "数据不存在!"); - if(param.getOrderStatus() == MaintenanceOrderStatusEnum.WAITING_LIST.getStatus() || - param.getOrderStatus() == MaintenanceOrderStatusEnum.PENDING_ORDER.getStatus()){ + if(model.getOrderStatus() == MaintenanceOrderStatusEnum.WAITING_LIST.getStatus() || + model.getOrderStatus() == MaintenanceOrderStatusEnum.PENDING_ORDER.getStatus()){ model.setReceiverId(param.getReceiverId()); model.setReceiverType(param.getReceiverType()); model.setOrderDistance(param.getOrderDistance()); diff --git a/admin/src/main/java/com/hcy/admin/validate/order/MaintenanceOrderParam.java b/admin/src/main/java/com/hcy/admin/validate/order/MaintenanceOrderParam.java index 8f9406f..7116343 100644 --- a/admin/src/main/java/com/hcy/admin/validate/order/MaintenanceOrderParam.java +++ b/admin/src/main/java/com/hcy/admin/validate/order/MaintenanceOrderParam.java @@ -28,21 +28,21 @@ public class MaintenanceOrderParam implements Serializable { private String orderNo; - @NotNull(message = "orderSource参数缺失", groups = {create.class, update.class}) - @DecimalMin(value = "0", message = "orderSource参数值不能少于0", groups = {create.class, update.class}) + @NotNull(message = "orderSource参数缺失", groups = {create.class}) + @DecimalMin(value = "0", message = "orderSource参数值不能少于0", groups = {create.class}) private Integer orderSource; private Integer orderStatus; - @NotNull(message = "clientId参数缺失", groups = {create.class, update.class}) - @DecimalMin(value = "0", message = "clientId参数值不能少于0", groups = {create.class, update.class}) + @NotNull(message = "clientId参数缺失", groups = {create.class}) + @DecimalMin(value = "0", message = "clientId参数值不能少于0", groups = {create.class}) private Long clientId; - @NotNull(message = "equipmentId参数缺失", groups = {create.class, update.class}) - @DecimalMin(value = "0", message = "equipmentId参数值不能少于0", groups = {create.class, update.class}) + @NotNull(message = "equipmentId参数缺失", groups = {create.class}) + @DecimalMin(value = "0", message = "equipmentId参数值不能少于0", groups = {create.class}) private Long equipmentId; - @NotNull(message = "faultId参数缺失", groups = {create.class, update.class}) + @NotNull(message = "faultId参数缺失", groups = {create.class}) @DecimalMin(value = "0", message = "faultId参数值不能少于0", groups = {create.class, update.class}) private Long faultId; @@ -50,7 +50,7 @@ public class MaintenanceOrderParam implements Serializable { private String faultImg; - @NotNull(message = "receiverType参数缺失", groups = {create.class, update.class}) + @NotNull(message = "receiverType参数缺失", groups = {create.class}) @DecimalMin(value = "0", message = "receiverType参数值不能少于0", groups = {create.class, update.class}) private Long receiverType; @@ -92,7 +92,6 @@ public class MaintenanceOrderParam implements Serializable { /** * 订单去向 0-工单池 1-检修员 */ - @NotNull(message = "repairWorkOrderFlow参数缺失", groups = {create.class, update.class}) private Integer repairWorkOrderFlow; //工单去向 0=工单池 1=检修员 private String faultName; //故障名称 diff --git a/admin/src/main/java/com/hcy/admin/vo/order/MaintenanceOrderListVo.java b/admin/src/main/java/com/hcy/admin/vo/order/MaintenanceOrderListVo.java index 7899242..82e5015 100644 --- a/admin/src/main/java/com/hcy/admin/vo/order/MaintenanceOrderListVo.java +++ b/admin/src/main/java/com/hcy/admin/vo/order/MaintenanceOrderListVo.java @@ -45,6 +45,7 @@ public class MaintenanceOrderListVo implements Serializable { private Date updateTime; // 更新时间 private Integer repairWorkOrderFlow; //工单去向 0=工单池 1=检修员 + private String faultName; //故障名称 private String equipmentNo; //设备编号 private String equipmentName; //设备名称 diff --git a/admin/src/main/java/com/hcy/admin/vo/system/SystemAuthAdminVo.java b/admin/src/main/java/com/hcy/admin/vo/system/SystemAuthAdminVo.java index ca43fa9..de5f8f8 100644 --- a/admin/src/main/java/com/hcy/admin/vo/system/SystemAuthAdminVo.java +++ b/admin/src/main/java/com/hcy/admin/vo/system/SystemAuthAdminVo.java @@ -34,6 +34,7 @@ public class SystemAuthAdminVo implements Serializable { private String lastLoginTime; // 最后登录时间 private String createTime; // 创建时间 private String updateTime; // 更新时间 + private Integer userId; //用户id private String plantName; //工厂名 private Integer sex; // 性别 0-男 1-女 diff --git a/common/src/main/java/com/hcy/common/dto/SystemAuthAdminDto.java b/common/src/main/java/com/hcy/common/dto/SystemAuthAdminDto.java index 083da63..1a3a29b 100644 --- a/common/src/main/java/com/hcy/common/dto/SystemAuthAdminDto.java +++ b/common/src/main/java/com/hcy/common/dto/SystemAuthAdminDto.java @@ -31,6 +31,7 @@ public class SystemAuthAdminDto implements Serializable { private String lastLoginTime; // 最后登录时间 private String createTime; // 创建时间 private String updateTime; // 更新时间 + private Integer userId; //用户id private String plantName; //工厂名 private Integer sex; // 性别 0-男 1-女 diff --git a/common/src/main/java/com/hcy/common/dto/order/MaintenanceOrderDto.java b/common/src/main/java/com/hcy/common/dto/order/MaintenanceOrderDto.java index 414178e..bd304b9 100644 --- a/common/src/main/java/com/hcy/common/dto/order/MaintenanceOrderDto.java +++ b/common/src/main/java/com/hcy/common/dto/order/MaintenanceOrderDto.java @@ -56,4 +56,6 @@ public class MaintenanceOrderDto implements Serializable { private Long equipmentProvinceId; //设备省id private Long equipmentDistrictId; //设备区id private Long equipmentCityId; //设备市id + private double longitude; //经度 + private double latitude; //纬度 } diff --git a/common/src/main/java/com/hcy/common/entity/order/MaintenanceOrder.java b/common/src/main/java/com/hcy/common/entity/order/MaintenanceOrder.java index f14922b..d2f2155 100644 --- a/common/src/main/java/com/hcy/common/entity/order/MaintenanceOrder.java +++ b/common/src/main/java/com/hcy/common/entity/order/MaintenanceOrder.java @@ -1,6 +1,8 @@ package com.hcy.common.entity.order; +import com.baomidou.mybatisplus.annotation.FieldStrategy; import com.baomidou.mybatisplus.annotation.IdType; +import com.baomidou.mybatisplus.annotation.TableField; import com.baomidou.mybatisplus.annotation.TableId; import lombok.Data; @@ -47,5 +49,5 @@ public class MaintenanceOrder implements Serializable { private Date createTime; // 创建时间 private Date updateTime; // 更新时间 private Integer isDelete; // 是否删除 0-未删除 1-删除 - + private Integer repairWorkOrderFlow; //工单去向 0=工单池 1=检修员 } \ No newline at end of file diff --git a/common/src/main/java/com/hcy/common/enums/order/MaintenanceOrderStatusEnum.java b/common/src/main/java/com/hcy/common/enums/order/MaintenanceOrderStatusEnum.java index 25b3897..44f013a 100644 --- a/common/src/main/java/com/hcy/common/enums/order/MaintenanceOrderStatusEnum.java +++ b/common/src/main/java/com/hcy/common/enums/order/MaintenanceOrderStatusEnum.java @@ -19,7 +19,11 @@ public enum MaintenanceOrderStatusEnum { MAINTENANCE_ING(5,"维修中"), FINISHED(6,"已完成"), CHARGEBACK(7,"已退单"), - CLOSED(8,"已关闭"); + CLOSED(8,"已关闭"), + + + NEAREST_TO_ME(0,"离我最近"), + TIME_PRIORITY(1,"时间优先"); private final int status; private final String desc; diff --git a/common/src/main/java/com/hcy/common/mapper/order/MaintenanceOrderMapper.java b/common/src/main/java/com/hcy/common/mapper/order/MaintenanceOrderMapper.java index 4c298b1..37546f1 100644 --- a/common/src/main/java/com/hcy/common/mapper/order/MaintenanceOrderMapper.java +++ b/common/src/main/java/com/hcy/common/mapper/order/MaintenanceOrderMapper.java @@ -6,6 +6,9 @@ import com.hcy.common.dto.order.MaintenanceOrderDto; import com.hcy.common.entity.order.MaintenanceOrder; import org.apache.ibatis.annotations.Mapper; import org.apache.ibatis.annotations.Param; +import org.apache.ibatis.annotations.Select; + +import java.util.List; /** * 检修订单Mapper @@ -14,4 +17,13 @@ import org.apache.ibatis.annotations.Param; public interface MaintenanceOrderMapper extends IBaseMapper { Page list(Page page,@Param("param") MaintenanceOrderDto maintenanceOrderDto); + + List list(MaintenanceOrderDto maintenanceOrderDto); + + /** + * 通过订单id查询检修订单 + * @return MaintenanceOrder + */ + @Select("select * from lc_maintenance_order where is_delete = 0 and id = #{id}") + MaintenanceOrder findMaintenanceOrderById(@Param("id") Long id); } diff --git a/common/src/main/java/com/hcy/common/utils/ToolsUtil.java b/common/src/main/java/com/hcy/common/utils/ToolsUtil.java index 6bffa3c..1b28ea8 100644 --- a/common/src/main/java/com/hcy/common/utils/ToolsUtil.java +++ b/common/src/main/java/com/hcy/common/utils/ToolsUtil.java @@ -191,4 +191,41 @@ public class ToolsUtil { return map2; } + /** + * 地球平均半径(单位:米) + */ + private static final double EARTH_AVG_RADIUS = 6371000; + + /** + * 方法二:(反余弦计算方式) + * + * @param longitude1 第一点的经度 + * @param latitude1 第一点的纬度 + * @param longitude2 第二点的经度 + * @param latitude2 第二点的纬度 + * @return 返回的距离,单位m + */ + public static double getDistance(double longitude1, double latitude1, double longitude2, double latitude2) { + // 经纬度(角度)转弧度。弧度作为作参数,用以调用Math.cos和Math.sin + // A经弧度 + double radiansAX = Math.toRadians(longitude1); + // A纬弧度 + double radiansAY = Math.toRadians(latitude1); + // B经弧度 + double radiansBX = Math.toRadians(longitude2); + // B纬弧度 + double radiansBY = Math.toRadians(latitude2); + + // 公式中“cosβ1cosβ2cos(α1-α2)+sinβ1sinβ2”的部分,得到∠AOB的cos值 + double cos = Math.cos(radiansAY) * Math.cos(radiansBY) * Math.cos(radiansAX - radiansBX) + Math.sin(radiansAY) * Math.sin(radiansBY); + // System.out.println("cos = " + cos); // 值域[-1,1] + + // 反余弦值 + double acos = Math.acos(cos); + // System.out.println("acos = " + acos); // 值域[0,π] + // System.out.println("∠AOB = " + Math.toDegrees(acos)); // 球心角 值域[0,180] + + // 最终结果 + return EARTH_AVG_RADIUS * acos; + } } diff --git a/common/src/main/resources/mapper/MaintenanceOrderMapper.xml b/common/src/main/resources/mapper/MaintenanceOrderMapper.xml index eb3e299..b03409c 100644 --- a/common/src/main/resources/mapper/MaintenanceOrderMapper.xml +++ b/common/src/main/resources/mapper/MaintenanceOrderMapper.xml @@ -2,7 +2,7 @@ - SELECT lmo.*, lf.`name` as faultName, @@ -14,7 +14,9 @@ lu.username as receiverName, le.province_id as equipmentProvinceId, le.district_id as equipmentDistrictId, - le.city_id as equipmentCityId + le.city_id as equipmentCityId, + le.longitude, + le.latitude FROM la_maintenance_order AS lmo LEFT JOIN la_client AS lc ON lc.id = lmo.client_id @@ -31,7 +33,7 @@ and lmo.order_source = #{param.orderSource} - and lc.name like concat('%',#{param.clientName},'%') + and lc.client_name like concat('%',#{param.clientName},'%') and lsaa.username like concat('%',#{param.creatorName},'%') @@ -40,7 +42,7 @@ and lu.username like concat('%',#{param.receiverName},'%') - and order_status = #{param.orderStatus} + and find_in_set(lmo.order_status,#{param.orderStatus}) order by create_time desc diff --git a/common/src/main/resources/mapper/SystemAuthAdminMapper.xml b/common/src/main/resources/mapper/SystemAuthAdminMapper.xml index cfc059c..bc36f0e 100644 --- a/common/src/main/resources/mapper/SystemAuthAdminMapper.xml +++ b/common/src/main/resources/mapper/SystemAuthAdminMapper.xml @@ -11,6 +11,7 @@ t.nickname, t.avatar, t.role, + t.user_id, sd.NAME AS dept, t.is_multipoint, t.is_disable, diff --git a/common/target/classes/mapper/MaintenanceOrderMapper.xml b/common/target/classes/mapper/MaintenanceOrderMapper.xml index eb3e299..b03409c 100644 --- a/common/target/classes/mapper/MaintenanceOrderMapper.xml +++ b/common/target/classes/mapper/MaintenanceOrderMapper.xml @@ -2,7 +2,7 @@ - SELECT lmo.*, lf.`name` as faultName, @@ -14,7 +14,9 @@ lu.username as receiverName, le.province_id as equipmentProvinceId, le.district_id as equipmentDistrictId, - le.city_id as equipmentCityId + le.city_id as equipmentCityId, + le.longitude, + le.latitude FROM la_maintenance_order AS lmo LEFT JOIN la_client AS lc ON lc.id = lmo.client_id @@ -31,7 +33,7 @@ and lmo.order_source = #{param.orderSource} - and lc.name like concat('%',#{param.clientName},'%') + and lc.client_name like concat('%',#{param.clientName},'%') and lsaa.username like concat('%',#{param.creatorName},'%') @@ -40,7 +42,7 @@ and lu.username like concat('%',#{param.receiverName},'%') - and order_status = #{param.orderStatus} + and find_in_set(lmo.order_status,#{param.orderStatus}) order by create_time desc diff --git a/common/target/classes/mapper/SystemAuthAdminMapper.xml b/common/target/classes/mapper/SystemAuthAdminMapper.xml index cfc059c..bc36f0e 100644 --- a/common/target/classes/mapper/SystemAuthAdminMapper.xml +++ b/common/target/classes/mapper/SystemAuthAdminMapper.xml @@ -11,6 +11,7 @@ t.nickname, t.avatar, t.role, + t.user_id, sd.NAME AS dept, t.is_multipoint, t.is_disable, diff --git a/front/src/main/java/com/hcy/front/controller/order/MaintenanceOrderController.java b/front/src/main/java/com/hcy/front/controller/order/MaintenanceOrderController.java new file mode 100644 index 0000000..f3165af --- /dev/null +++ b/front/src/main/java/com/hcy/front/controller/order/MaintenanceOrderController.java @@ -0,0 +1,80 @@ +package com.hcy.front.controller.order; + +import com.hcy.common.core.AjaxResult; +import com.hcy.common.core.PageResult; +import com.hcy.common.validator.annotation.IDMust; +import com.hcy.front.service.order.IMaintenanceOrderService; +import com.hcy.front.validate.PageParam; +import com.hcy.front.validate.order.MaintenanceOrderParam; +import com.hcy.front.vo.order.MaintenanceOrderDetailVo; +import com.hcy.front.vo.order.MaintenanceOrderListVo; +import lombok.extern.java.Log; +import org.springframework.validation.annotation.Validated; +import org.springframework.web.bind.annotation.*; + +import javax.annotation.Resource; + +/** + * 检修订单管理 + */ +@RestController +@RequestMapping("api/maintenanceOrder") +public class MaintenanceOrderController { + + @Resource + IMaintenanceOrderService iMaintenanceOrderService; + + /** + * 检修订单列表 + * + * @param maintenanceOrderParam 搜索参数 + * @return Object + */ + @GetMapping("/list") + public Object list(MaintenanceOrderParam maintenanceOrderParam) { + return AjaxResult.success(iMaintenanceOrderService.list(maintenanceOrderParam)); + } + + /** + * 抢单 + * @param maintenanceOrderParam 参数 + * @return Object + */ + @PostMapping("/grabTheOrder") + public Object grabTheOrder(@RequestBody MaintenanceOrderParam maintenanceOrderParam) { + iMaintenanceOrderService.grabTheOrder(maintenanceOrderParam); + return AjaxResult.success(); + } + + /** + * 接单 + * @param maintenanceOrderParam 参数 + * @return Object + */ + @PostMapping("/receivingOrder") + public Object receivingOrder(@RequestBody MaintenanceOrderParam maintenanceOrderParam) { + iMaintenanceOrderService.receivingOrder(maintenanceOrderParam); + return AjaxResult.success(); + } + + /** + * 退单 + * @param maintenanceOrderParam 参数 + * @return Object + */ + @PostMapping("/checking") + public Object checking(@RequestBody MaintenanceOrderParam maintenanceOrderParam) { + iMaintenanceOrderService.checking(maintenanceOrderParam); + return AjaxResult.success(); + } + + /** + * 检修工单详情 + * + * @return Object + */ + @GetMapping("/detail") + public Object detail() { + return AjaxResult.success(iMaintenanceOrderService.detail()); + } +} diff --git a/front/src/main/java/com/hcy/front/service/order/IMaintenanceOrderService.java b/front/src/main/java/com/hcy/front/service/order/IMaintenanceOrderService.java new file mode 100644 index 0000000..da2026a --- /dev/null +++ b/front/src/main/java/com/hcy/front/service/order/IMaintenanceOrderService.java @@ -0,0 +1,47 @@ +package com.hcy.front.service.order; + +import com.hcy.common.core.PageResult; +import com.hcy.front.validate.PageParam; +import com.hcy.front.validate.order.MaintenanceOrderParam; +import com.hcy.front.vo.order.MaintenanceOrderDetailVo; +import com.hcy.front.vo.order.MaintenanceOrderListVo; + +import java.util.List; + +/** + * 检修订单服务接口类 + */ +public interface IMaintenanceOrderService { + + /** + * 检修订单列表 + * + * @param maintenanceOrderParam 搜索参数 + * @return PageResult + */ + List list(MaintenanceOrderParam maintenanceOrderParam); + + /** + * 抢单 + * @param maintenanceOrderParam 参数 + */ + void grabTheOrder(MaintenanceOrderParam maintenanceOrderParam); + + /** + * 接单 + * @param maintenanceOrderParam 参数 + */ + void receivingOrder(MaintenanceOrderParam maintenanceOrderParam); + + /** + * 退单 + * @param maintenanceOrderParam 参数 + */ + void checking(MaintenanceOrderParam maintenanceOrderParam); + + /** + * 检修工单详情 + * @return MaintenanceOrderDetailVo + */ + MaintenanceOrderDetailVo detail(); +} 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 new file mode 100644 index 0000000..d50438e --- /dev/null +++ b/front/src/main/java/com/hcy/front/service/order/impl/MaintenanceOrderServiceImpl.java @@ -0,0 +1,197 @@ +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.core.metadata.IPage; +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.order.MaintenanceOrderDto; +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.system.SystemAuthAdmin; +import com.hcy.common.entity.user.User; +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.system.SystemAuthAdminMapper; +import com.hcy.common.mapper.user.UserMapper; +import com.hcy.common.utils.ToolsUtil; +import com.hcy.front.FrontThreadLocal; +import com.hcy.front.service.order.IMaintenanceOrderService; +import com.hcy.front.service.region.IDevRegionService; +import com.hcy.front.validate.PageParam; +import com.hcy.front.validate.order.MaintenanceOrderParam; +import com.hcy.front.vo.order.MaintenanceOrderDetailVo; +import com.hcy.front.vo.order.MaintenanceOrderListVo; +import com.hcy.front.vo.order.OrderStaffVo; +import org.springframework.beans.BeanUtils; +import org.springframework.stereotype.Service; +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; + +/** + * 检修订单实现类 + */ +@Service +public class MaintenanceOrderServiceImpl implements IMaintenanceOrderService { + + @Resource + MaintenanceOrderMapper maintenanceOrderMapper; + + @Resource + ClientMapper clientMapper; + + @Resource + EquipmentMapper equipmentMapper; + + @Resource + SystemAuthAdminMapper systemAuthAdminMapper; + + @Resource + UserMapper userMapper; + + private final DecimalFormat df = new DecimalFormat ("#.#"); + + /** + * 检修订单列表 + * + * @param maintenanceOrderParam 搜索参数 + * @return PageResult + */ + @Override + public List list(MaintenanceOrderParam maintenanceOrderParam) { + MaintenanceOrderDto maintenanceOrderDto = new MaintenanceOrderDto(); + BeanUtils.copyProperties(maintenanceOrderParam,maintenanceOrderDto); + //默认查询订单状态 + if(maintenanceOrderParam.getOrderStatus() == null){ + maintenanceOrderParam.setOrderStatus("1,2,7,8"); + } + List maintenanceOrderList = maintenanceOrderMapper.list(maintenanceOrderDto); + + List returnData = new LinkedList<>(); + for (MaintenanceOrderDto item : maintenanceOrderList) { + + //判断抢单距离大于订单距离则返回订单 + double distance = ToolsUtil.getDistance(item.getLongitude(), item.getLatitude() + , maintenanceOrderParam.getLongitude(), maintenanceOrderParam.getLatitude()); + if(item.getOrderDistance().compareTo(BigDecimal.valueOf((distance / 1000))) >= 0){ + // 计算距离 + MaintenanceOrderListVo vo = new MaintenanceOrderListVo(); + BeanUtils.copyProperties(item, vo); + vo.setDistance(String.valueOf(distance)); + returnData.add(vo); + } + + } + + if(maintenanceOrderParam.getQueryType() == MaintenanceOrderStatusEnum.NEAREST_TO_ME.getStatus()){ + //按距离排序 + returnData = returnData.stream() + .sorted(Comparator.comparing(MaintenanceOrderListVo::getDistance)) + .collect(Collectors.toList()); + + //将米数转换为km + for (MaintenanceOrderListVo maintenanceOrderListVo : returnData) { + double distance = Double.parseDouble(maintenanceOrderListVo.getDistance()); + if(distance < 1000){ + maintenanceOrderListVo.setDistance(distance + "米"); + }else{ + double km = distance / 1000; + maintenanceOrderListVo.setDistance(df.format(km) + "km"); + } + } + } + + return returnData; + } + + @Override + public void grabTheOrder(MaintenanceOrderParam maintenanceOrderParam) { + MaintenanceOrder maintenanceOrder = maintenanceOrderMapper.findMaintenanceOrderById(maintenanceOrderParam.getId()); + Assert.notNull(maintenanceOrder, "数据不存在"); + + if(maintenanceOrder.getOrderStatus() == MaintenanceOrderStatusEnum.WAITING_LIST.getStatus()){ + maintenanceOrder.setReceiverId(FrontThreadLocal.getUserId().longValue()); + maintenanceOrder.setOrderStatus(MaintenanceOrderStatusEnum.CHECKING.getStatus()); + maintenanceOrder.setReceiverTime(new Date()); + maintenanceOrderMapper.updateById(maintenanceOrder); + }else{ + throw new OperateException("订单已被其他人抢走"); + } + } + + + @Override + public void receivingOrder(MaintenanceOrderParam maintenanceOrderParam) { + MaintenanceOrder maintenanceOrder = maintenanceOrderMapper.findMaintenanceOrderById(maintenanceOrderParam.getId()); + Assert.notNull(maintenanceOrder, "数据不存在"); + + if(maintenanceOrder.getOrderStatus() == MaintenanceOrderStatusEnum.PENDING_ORDER.getStatus()){ + maintenanceOrder.setOrderStatus(MaintenanceOrderStatusEnum.CHECKING.getStatus()); + maintenanceOrder.setReceiverTime(new Date()); + maintenanceOrderMapper.updateById(maintenanceOrder); + }else{ + throw new OperateException("订单状态不正确"); + } + } + + @Override + public void checking(MaintenanceOrderParam maintenanceOrderParam) { + MaintenanceOrder maintenanceOrder = maintenanceOrderMapper.findMaintenanceOrderById(maintenanceOrderParam.getId()); + Assert.notNull(maintenanceOrder, "数据不存在"); + Assert.notNull(maintenanceOrder.getCancelCause(), "接单原因不可为空"); + + if(maintenanceOrder.getOrderStatus() == MaintenanceOrderStatusEnum.CHECKING.getStatus()){ + maintenanceOrder.setCancelOrderTime(new Date()); + maintenanceOrder.setOrderStatus(MaintenanceOrderStatusEnum.CHARGEBACK.getStatus()); + maintenanceOrder.setCancelCause(maintenanceOrderParam.getCancelCause()); + maintenanceOrderMapper.updateById(maintenanceOrder); + }else{ + throw new OperateException("订单状态不正确"); + } + } + + @Override + public MaintenanceOrderDetailVo detail() { + Integer userId = FrontThreadLocal.getUserId(); + + MaintenanceOrder maintenanceOrder = maintenanceOrderMapper.findMaintenanceOrderById(userId.longValue()); + Assert.notNull(maintenanceOrder, "数据不存在"); + + MaintenanceOrderDetailVo vo = new MaintenanceOrderDetailVo(); + BeanUtils.copyProperties(maintenanceOrder, vo); + + //设置客户信息 + Client client = clientMapper.selectById(maintenanceOrder.getClientId()); + vo.setClientName(client.getClientName()); + + //设置设备信息 + Equipment equipment = equipmentMapper.selectById(maintenanceOrder.getEquipmentId()); + vo.setEquipment(equipment); + + //设置接收人姓名 + SystemAuthAdmin systemAuthAdmin = systemAuthAdminMapper.selectById(maintenanceOrder.getCreatorId()); + vo.setCreatorName(systemAuthAdmin.getNickname()); + + //设置接单人名称 + User user = userMapper.selectById(maintenanceOrder.getReceiverId()); + if(user != null){ + vo.setReceiverName(user.getNickname()); + } + + return vo; + } +} diff --git a/front/src/main/java/com/hcy/front/validate/order/MaintenanceOrderParam.java b/front/src/main/java/com/hcy/front/validate/order/MaintenanceOrderParam.java new file mode 100644 index 0000000..43c95eb --- /dev/null +++ b/front/src/main/java/com/hcy/front/validate/order/MaintenanceOrderParam.java @@ -0,0 +1,111 @@ +package com.hcy.front.validate.order; + +import lombok.Data; +import lombok.EqualsAndHashCode; +import lombok.experimental.Accessors; +import org.hibernate.validator.constraints.Length; + +import javax.validation.constraints.DecimalMin; +import javax.validation.constraints.NotNull; +import java.io.Serializable; +import java.math.BigDecimal; +import java.util.Date; + +/** + * 检修订单参数 + */ +@Data +@EqualsAndHashCode(callSuper = false) +@Accessors(chain = true) +public class MaintenanceOrderParam implements Serializable { + + private static final long serialVersionUID = 1L; + + public interface create{} + public interface update{} + public interface delete{} + + private Long id; + + private String orderNo; + + @NotNull(message = "orderSource参数缺失", groups = {create.class}) + @DecimalMin(value = "0", message = "orderSource参数值不能少于0", groups = {create.class}) + private Integer orderSource; + + private String orderStatus; + + @NotNull(message = "clientId参数缺失", groups = {create.class}) + @DecimalMin(value = "0", message = "clientId参数值不能少于0", groups = {create.class}) + private Long clientId; + + @NotNull(message = "equipmentId参数缺失", groups = {create.class}) + @DecimalMin(value = "0", message = "equipmentId参数值不能少于0", groups = {create.class}) + private Long equipmentId; + + @NotNull(message = "faultId参数缺失", groups = {create.class, update.class}) + @DecimalMin(value = "0", message = "faultId参数值不能少于0", groups = {create.class, update.class}) + private Long faultId; + + private String faultDescription; + + private String faultImg; + + @NotNull(message = "receiverType参数缺失", groups = {create.class, update.class}) + @DecimalMin(value = "0", message = "receiverType参数值不能少于0", groups = {create.class, update.class}) + private Long receiverType; + + private Long provinceId; + + private Long cityId; + + private Long districtId; + + private BigDecimal orderDistance; + + private BigDecimal totalAmount; + + private BigDecimal actualAmount; + + private Long receiverId; + + private Long repairId; + + private Date receiverTime; + + private Date cancelOrderTime; + + private String cancelCause; + + private String refuseMaintenanceCause; + + @Length(max = 250, message = "remark参数不能超出250个字符", groups = {create.class, update.class}) + private String remark; + + private Long creatorId; + + private Date orderAccomplishTime; + + private Long familiarFaultId; + + private String familiarFaultDescription; + + /** + * 订单去向 0-工单池 1-检修员 + */ + @NotNull(message = "repairWorkOrderFlow参数缺失", groups = {create.class, update.class}) + private Integer repairWorkOrderFlow; //工单去向 0=工单池 1=检修员 + + private String faultName; //故障名称 + private String equipmentNo; //设备编号 + private String equipmentName; //设备名称 + private String detailedAddress; //设备详情地址 + private String clientName; // 客户姓名 + private String creatorName; // 创建人姓名 + private String receiverName; // 接单人姓名 + + + private double longitude; // 经度 + private double latitude; // 纬度 + private Integer queryType; // 查询类型 0-离我最近 1-时间优先 +} diff --git a/front/src/main/java/com/hcy/front/vo/order/MaintenanceOrderDetailVo.java b/front/src/main/java/com/hcy/front/vo/order/MaintenanceOrderDetailVo.java new file mode 100644 index 0000000..c2bec74 --- /dev/null +++ b/front/src/main/java/com/hcy/front/vo/order/MaintenanceOrderDetailVo.java @@ -0,0 +1,52 @@ +package com.hcy.front.vo.order; + +import com.hcy.common.entity.client.Equipment; +import lombok.Data; + +import java.io.Serializable; +import java.math.BigDecimal; +import java.util.Date; + +/** + * MaintenanceOrderVo + */ +@Data +public class MaintenanceOrderDetailVo implements Serializable { + + private static final long serialVersionUID = 1L; + + private Long id; // id + private String orderNo; // 订单编号 + private Long orderSource; // 订单来源 0-客户上报;1-系统创建;2-维修员创建;3-检修员创建;4-客服创建;5-维修主管创建 + private Long orderStatus; // 订单状态 0-待抢单;1-待接单;2-接单超时;3-检测中;4-待客户确认;5-维修中;6-已完成;7-已退单;8-已关闭 + private Long clientId; // 客户id + private Long equipmentId; // 设备id + private Long faultId; // 故障id + private String faultDescription; // 故障描述 + private String faultImg; // 故障图片 + private Long receiverType; // 接单类型 0-区域派单;1-距离派单 + private Long provinceId; // 省id + private Long cityId; // 市id + private Long districtId; // 区id + private BigDecimal orderDistance; // 订单距离 + private BigDecimal totalAmount; // 总金额 + private BigDecimal actualAmount; // 实际金额 + private Long receiverId; // 接单人id + private Long repairId; // 返修id + private Date receiverTime; // 接单时间 + private Date cancelOrderTime; // 取消订单时间 + private String cancelCause; // 取消原因 + private String refuseMaintenanceCause; // 拒绝维修原因 + private String remark; // 备注 + private Long creatorId; // 创建人id + private Date orderAccomplishTime; // 订单完成时间 + private Long familiarFaultId; // 常见维修结论id + private String familiarFaultDescription; // 常见维修结论描述 + private Integer repairWorkOrderFlow; //工单去向 0=工单池 1=检修员 + + private String clientName; // 客户姓名 + private Equipment equipment; //设备信息 + private String faultName; //故障名称 + private String creatorName; // 创建人姓名 + private String receiverName; // 接单人姓名 +} diff --git a/front/src/main/java/com/hcy/front/vo/order/MaintenanceOrderListVo.java b/front/src/main/java/com/hcy/front/vo/order/MaintenanceOrderListVo.java new file mode 100644 index 0000000..520687c --- /dev/null +++ b/front/src/main/java/com/hcy/front/vo/order/MaintenanceOrderListVo.java @@ -0,0 +1,56 @@ +package com.hcy.front.vo.order; + +import lombok.Data; + +import java.io.Serializable; +import java.math.BigDecimal; +import java.util.Date; + +/** + * MaintenanceOrderVo + */ +@Data +public class MaintenanceOrderListVo implements Serializable { + + private static final long serialVersionUID = 1L; + + private Long id; // id + private String orderNo; // 订单编号 + private Integer orderSource; // 订单来源 0-客户上报;1-系统创建;2-维修员创建;3-检修员创建;4-客服创建;5-维修主管创建 + private Integer orderStatus; // 订单状态 0-待抢单;1-待接单;2-接单超时;3-检测中;4-待客户确认;5-维修中;6-已完成;7-已退单;8-已关闭 + private Long clientId; // 客户id + private Long equipmentId; // 设备id + private Long faultId; // 故障id + private String faultDescription; // 故障描述 + private String faultImg; // 故障图片 + private Long receiverType; // 接单类型 0-区域派单;1-距离派单 + private Long provinceId; // 省id + private Long cityId; // 市id + private Long districtId; // 区id + private BigDecimal orderDistance; // 订单距离 + private BigDecimal totalAmount; // 总金额 + private BigDecimal actualAmount; // 实际金额 + private Long receiverId; // 接单人id + private Long repairId; // 返修id + private Date receiverTime; // 接单时间 + private Date cancelOrderTime; // 取消订单时间 + private String cancelCause; // 取消原因 + private String refuseMaintenanceCause; // 拒绝维修原因 + private String remark; // 备注 + private Long creatorId; // 创建人id + private Date orderAccomplishTime; // 订单完成时间 + private Long familiarFaultId; // 常见维修结论id + private String familiarFaultDescription; // 常见维修结论描述 + private Date createTime; // 创建时间 + private Date updateTime; // 更新时间 + private Integer repairWorkOrderFlow; //工单去向 0=工单池 1=检修员 + private String distance; //距离 + + private String faultName; //故障名称 + private String equipmentNo; //设备编号 + private String equipmentName; //设备名称 + private String detailedAddress; //设备详情地址 + private String clientName; // 客户姓名 + private String creatorName; // 创建人姓名 + private String receiverName; // 接单人姓名 +}