Commit 7e1a0bc7 authored by lining's avatar lining

fix: 狂点接口的bug+估价员不能发送订单的bug

parent c455b30a
package com.onsiteservice.service.order;
import com.google.common.collect.Sets;
import com.onsiteservice.common.order.dto.DispatchServiceOrderDTO;
import com.onsiteservice.common.order.dto.FinishServiceOrderDTO;
import com.onsiteservice.common.order.dto.SendServiceOrderDTO;
......@@ -18,7 +19,6 @@ import com.onsiteservice.dao.mapper.sys.SysParamMapper;
import com.onsiteservice.dao.mapper.sys.SysUserMapper;
import com.onsiteservice.dao.mapper.user.UserMapper;
import com.onsiteservice.entity.order.ServiceOrder;
import com.onsiteservice.entity.service.ServiceValuator;
import com.onsiteservice.entity.service.ServiceValuatorAssign;
import com.onsiteservice.entity.service.ServiceWorker;
import com.onsiteservice.entity.service.ServiceWorkerAssign;
......@@ -38,6 +38,8 @@ import javax.annotation.Resource;
import java.util.Date;
import java.util.List;
import java.util.Objects;
import java.util.Set;
import java.util.stream.Collectors;
@Service
@Slf4j
......@@ -85,7 +87,7 @@ public class ServiceOrderService extends AbstractMapper<ServiceOrder> {
public int valuation(ValuationServiceOrderDTO dto, Long userId, ServiceOrderOpSourceEnum sourceEnum) {
log.info("order valuation dto: {}, userId: {}", dto, userId);
WorkUser user = checkAuth(userId, BizCodeEnum.NO_AUTH_VALUATION_ORDER, sourceEnum);
WorkUser user = checkAuth(userId, BizCodeEnum.NO_AUTH_VALUATION_ORDER, sourceEnum, Sets.newHashSet(ServiceUserTypeEnum.ADMIN));
ServiceOrder serviceOrder = checkOrder(dto.getId(), null);
if (!serviceOrder.getOrderStatus().equals(ServiceOrderStatusEnum.RESERVE.getStatus())) {
......@@ -97,15 +99,16 @@ public class ServiceOrderService extends AbstractMapper<ServiceOrder> {
throw new ServiceException(BizCodeEnum.SERVICE_VALUATOR_NOT_EXIST);
}
serviceValuatorAssignMapper.insertSelective(buildServiceValuatorAssign(dto, userId));
Condition c = buildOrderStatusCondition(serviceOrder);
serviceOrder.setOrderStatus(ServiceOrderStatusEnum.VALUATION.getStatus());
serviceOrder.setModifyBy(userId);
serviceOrder.setValuatorId(valuatorUser.getId());
int result = this.updateByPrimaryKeySelective(serviceOrder);
int result = serviceOrderMapper.updateByConditionSelective(serviceOrder, c);
if (result == 1) {
// 记录估价员指派时间
serviceValuatorAssignMapper.insertSelective(buildServiceValuatorAssign(dto, userId));
String description = String.format(ServiceOrderStatusEnum.VALUATION.getMsg(), user.getName(), valuatorUser.getUserName());
recordComponent.recordProcess(serviceOrder.getId(), ServiceOrderStatusEnum.VALUATION.getStatus(), description,
sourceEnum, valuatorUser.getId(), dto.getRemark(), dto.getExpectArrivalTime());
......@@ -118,7 +121,7 @@ public class ServiceOrderService extends AbstractMapper<ServiceOrder> {
public int revaluation(ValuationServiceOrderDTO dto, Long userId, ServiceOrderOpSourceEnum sourceEnum) {
log.info("order revaluation dto: {}, userId: {}", dto, userId);
WorkUser user = checkAuth(userId, BizCodeEnum.NO_AUTH_REVALUATION_ORDER, sourceEnum);
WorkUser user = checkAuth(userId, BizCodeEnum.NO_AUTH_REVALUATION_ORDER, sourceEnum, Sets.newHashSet(ServiceUserTypeEnum.ADMIN));
ServiceOrder serviceOrder = checkOrder(dto.getId(), null);
if (!serviceOrder.getOrderStatus().equals(ServiceOrderStatusEnum.VALUATION.getStatus())) {
......@@ -130,14 +133,15 @@ public class ServiceOrderService extends AbstractMapper<ServiceOrder> {
throw new ServiceException(BizCodeEnum.SERVICE_VALUATOR_NOT_EXIST);
}
disableServiceValuatorAssign(serviceOrder, userId, false);
serviceValuatorAssignMapper.insertSelective(buildServiceValuatorAssign(dto, userId));
serviceOrder.setValuatorId(dto.getHostId());
int result = this.updateByPrimaryKeySelective(serviceOrder);
if (result == 1) {
// 取消之前被指派的估价员时间
disableServiceValuatorAssign(serviceOrder, userId, false);
// 设置新的估计员世间
serviceValuatorAssignMapper.insertSelective(buildServiceValuatorAssign(dto, userId));
String description = String.format(ServiceOrderStatusEnum.REVALUATION.getMsg(), user.getName(), valuatorUser.getUserName());
recordComponent.recordProcess(serviceOrder.getId(), ServiceOrderStatusEnum.REVALUATION.getStatus(), description,
sourceEnum, valuatorUser.getId(), dto.getRemark(), dto.getExpectArrivalTime());
......@@ -154,16 +158,15 @@ public class ServiceOrderService extends AbstractMapper<ServiceOrder> {
log.info("sendOrder dto: {}, userId: {}", dto, userId);
// 判断发送者权限 只有客服和估价员可以发送订单
WorkUser user = checkAuth(userId, BizCodeEnum.NO_AUTH_SEND_ORDER, sourceEnum);
WorkUser user = checkAuth(userId, BizCodeEnum.NO_AUTH_SEND_ORDER, sourceEnum, Sets.newHashSet(ServiceUserTypeEnum.ADMIN, ServiceUserTypeEnum.VALUATOR));
// 判断能发送的状态: 估价可以发送,下单可以直接发送
// 判断能发送的状态: 估价后可以发送,预约后可以发送
ServiceOrder serviceOrder = checkOrder(dto.getId(), null);
if (!serviceOrder.getOrderStatus().equals(ServiceOrderStatusEnum.VALUATION.getStatus()) && !serviceOrder.getOrderStatus().equals(ServiceOrderStatusEnum.RESERVE.getStatus())) {
throw new ServiceException(BizCodeEnum.SERVICE_ORDER_CANNOT_SEND);
}
disableServiceValuatorAssign(serviceOrder, userId, null);
Condition c = buildOrderStatusCondition(serviceOrder);
// 估价价格
serviceOrder.setPrice(dto.getPrice());
serviceOrder.setOrderStatus(ServiceOrderStatusEnum.SEND.getStatus());
......@@ -174,8 +177,7 @@ public class ServiceOrderService extends AbstractMapper<ServiceOrder> {
List<SysParam> sysParamList = sysParamMapper.selectByCondition(sysParamCondition);
long timeOut = CollectionUtils.isEmpty(sysParamList) ? BizConstants.OrderConstants.TIMEOUT_CANCEL_LIMIT : Long.parseLong(sysParamList.get(0).getValue());
serviceOrder.setCancelTime(new Date(System.currentTimeMillis() + timeOut));
int result = serviceOrderMapper.updateByPrimaryKeySelective(serviceOrder);
int result = serviceOrderMapper.updateByConditionSelective(serviceOrder, c);
try {
// 发短信
......@@ -189,6 +191,9 @@ public class ServiceOrderService extends AbstractMapper<ServiceOrder> {
// TODO 小程序通知客户完成支付
if (result == 1) {
// 置估价员指派时间为失效
disableServiceValuatorAssign(serviceOrder, userId, null);
String description = String.format(ServiceOrderStatusEnum.SEND.getMsg(), (user.getIsAdmin() ? ServiceUserTypeEnum.ADMIN.getName() : ServiceUserTypeEnum.VALUATOR.getName()) + user.getName());
recordComponent.recordProcess(serviceOrder.getId(), ServiceOrderStatusEnum.SEND.getStatus(), description, sourceEnum, userId, null, null);
}
......@@ -200,7 +205,7 @@ public class ServiceOrderService extends AbstractMapper<ServiceOrder> {
public int dispatch(DispatchServiceOrderDTO dto, Long userId, ServiceOrderOpSourceEnum sourceEnum) {
log.info("order dispatch dto: {}, userId: {}", dto, userId);
WorkUser user = checkAuth(userId, BizCodeEnum.NO_AUTH_DISPATCH_ORDER, sourceEnum);
WorkUser user = checkAuth(userId, BizCodeEnum.NO_AUTH_DISPATCH_ORDER, sourceEnum, Sets.newHashSet(ServiceUserTypeEnum.ADMIN));
ServiceOrder serviceOrder = checkOrder(dto.getId(), null);
if (!serviceOrder.getOrderStatus().equals(ServiceOrderStatusEnum.PAY.getStatus())) {
......@@ -216,18 +221,19 @@ public class ServiceOrderService extends AbstractMapper<ServiceOrder> {
throw new ServiceException(BizCodeEnum.SERVICE_WORKER_NOT_EXIST);
}
serviceWorkerAssignMapper.insertSelective(buildServiceWorkerAssign(dto, serviceOrder, userId));
Condition c = buildOrderStatusCondition(serviceOrder);
serviceOrder.setOrderStatus(ServiceOrderStatusEnum.DISPATCH.getStatus());
serviceOrder.setModifyBy(userId);
int result = serviceOrderMapper.updateByPrimaryKeySelective(serviceOrder);
int result = serviceOrderMapper.updateByConditionSelective(serviceOrder, c);
// TODO 短信 "您的订单已为您指派维修工,请保持手机畅通!"
// TODO 小程序通知 您的订单已为您指派维修工~~~
if (result == 1) {
// 记录维修工时间
serviceWorkerAssignMapper.insertSelective(buildServiceWorkerAssign(dto, serviceOrder, userId));
String description = String.format(ServiceOrderStatusEnum.DISPATCH.getMsg(), user.getName(), serviceWorker.getName());
recordComponent.recordProcess(serviceOrder.getId(), ServiceOrderStatusEnum.DISPATCH.getStatus(), description, sourceEnum, serviceWorker.getId(), dto.getRemark(), null);
}
......@@ -239,7 +245,7 @@ public class ServiceOrderService extends AbstractMapper<ServiceOrder> {
public int redispatch(DispatchServiceOrderDTO dto, Long userId, ServiceOrderOpSourceEnum sourceEnum) {
log.info("order redispatch dto: {}, userId: {}", dto, userId);
WorkUser user = checkAuth(userId, BizCodeEnum.NO_AUTH_REDISPATCH_ORDER, sourceEnum);
WorkUser user = checkAuth(userId, BizCodeEnum.NO_AUTH_REDISPATCH_ORDER, sourceEnum, Sets.newHashSet(ServiceUserTypeEnum.ADMIN));
ServiceOrder serviceOrder = checkOrder(dto.getId(), null);
if (!serviceOrder.getOrderStatus().equals(ServiceOrderStatusEnum.DISPATCH.getStatus())) {
......@@ -297,15 +303,15 @@ public class ServiceOrderService extends AbstractMapper<ServiceOrder> {
user = new WorkUser(sysUser.getId(), sysUser.getRealName(), true);
}
disableServiceWorkerAssign(serviceOrder, userId, null);
Condition c = buildOrderStatusCondition(serviceOrder);
serviceOrder.setOrderStatus(ServiceOrderStatusEnum.FINISH.getStatus());
serviceOrder.setModifyBy(userId);
int result = serviceOrderMapper.updateByPrimaryKeySelective(serviceOrder);
int result = serviceOrderMapper.updateByConditionSelective(serviceOrder, c);
if (result == 1) {
// 取消维修工服务时间
disableServiceWorkerAssign(serviceOrder, userId, null);
String description = String.format(ServiceOrderStatusEnum.FINISH.getMsg(), user.getIsAdmin() ? ServiceUserTypeEnum.ADMIN.getName() + user.getName() : ServiceUserTypeEnum.USER.getName());
recordComponent.recordProcess(serviceOrder.getId(), ServiceOrderStatusEnum.FINISH.getStatus(), description, sourceEnum, null, null, null);
}
......@@ -330,12 +336,17 @@ public class ServiceOrderService extends AbstractMapper<ServiceOrder> {
}
private WorkUser checkAuth(Long userId, BizCodeEnum biz, ServiceOrderOpSourceEnum source) {
private WorkUser checkAuth(Long userId, BizCodeEnum biz, ServiceOrderOpSourceEnum source, Set<ServiceUserTypeEnum> roles) {
if (source == ServiceOrderOpSourceEnum.MINI_APP) {
User user = userMapper.selectByPrimaryKey(userId);
if (Objects.isNull(user) || !user.getRoleType().equals(ServiceUserTypeEnum.ADMIN.getId())) {
if (Objects.isNull(user)) {
throw new ServiceException(biz);
}
if (!roles.parallelStream().map(ServiceUserTypeEnum::getId).collect(Collectors.toSet()).contains(user.getRoleType())) {
throw new ServiceException(biz);
}
return new WorkUser(user.getId(), user.getUserName(), user.getRoleType().equals(ServiceUserTypeEnum.ADMIN.getId()));
}
SysUser sysUser = sysUserMapper.selectByPrimaryKey(userId);
......@@ -420,5 +431,13 @@ public class ServiceOrderService extends AbstractMapper<ServiceOrder> {
serviceWorkerAssignMapper.updateByConditionSelective(serviceWorkerAssign, c);
}
private Condition buildOrderStatusCondition(ServiceOrder serviceOrder) {
Condition c = new Condition(ServiceOrder.class);
c.createCriteria()
.andEqualTo("id", serviceOrder.getId())
.andEqualTo(BizConstants.OrderConstants.ORDER_STATUS, serviceOrder.getOrderStatus());
return c;
}
}
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment