Commit 0492d475 by chamberone

Merge branch 'develop' of https://zhangguoping@gitlab.dituhui.com/bsh/project/pr…

…oject.git into develop
2 parents 7d1e1903 237eeaf1
Showing with 448 additions and 118 deletions
...@@ -130,7 +130,9 @@ public enum StatusCodeEnum { ...@@ -130,7 +130,9 @@ public enum StatusCodeEnum {
FENDAN_AREA_UNMATCHED("023", "分单接口没有查到配置区块", false), FENDAN_AREA_UNMATCHED("023", "分单接口没有查到配置区块", false),
FENDAN_ENGINEER_UNMATCHED("023", "分单接口没有查到配置工程师", false); FENDAN_ENGINEER_UNMATCHED("023", "分单接口没有查到配置工程师", false),
FENDAN_IS_TRANSCEND("024", "分单超派", false);
/** /**
* 状态码 * 状态码
......
...@@ -5,6 +5,7 @@ import org.apache.commons.lang3.time.DateUtils; ...@@ -5,6 +5,7 @@ import org.apache.commons.lang3.time.DateUtils;
import org.springframework.util.Assert; import org.springframework.util.Assert;
import java.text.MessageFormat; import java.text.MessageFormat;
import java.text.SimpleDateFormat;
import java.time.Duration; import java.time.Duration;
import java.time.Instant; import java.time.Instant;
import java.time.LocalDate; import java.time.LocalDate;
...@@ -16,10 +17,7 @@ import java.time.format.DateTimeFormatter; ...@@ -16,10 +17,7 @@ import java.time.format.DateTimeFormatter;
import java.time.temporal.Temporal; import java.time.temporal.Temporal;
import java.time.temporal.TemporalAmount; import java.time.temporal.TemporalAmount;
import java.time.temporal.TemporalQuery; import java.time.temporal.TemporalQuery;
import java.util.Calendar; import java.util.*;
import java.util.Date;
import java.util.GregorianCalendar;
import java.util.TimeZone;
/** /**
* 日期工具类 * 日期工具类
...@@ -46,6 +44,11 @@ public class DateUtil { ...@@ -46,6 +44,11 @@ public class DateUtil {
* java 8 时间格式化 * java 8 时间格式化
*/ */
public static final DateTimeFormatter DATETIME_FORMATTER = DateTimeFormatter.ofPattern(DateUtil.PATTERN_DATETIME); public static final DateTimeFormatter DATETIME_FORMATTER = DateTimeFormatter.ofPattern(DateUtil.PATTERN_DATETIME);
/**
* java 8 时间格式化
*/
public static final SimpleDateFormat SIMPLE_DATE_FORMAT = new SimpleDateFormat(DateUtil.PATTERN_DATETIME);
/** /**
* 日期 yyyy-MM-dd格式 * 日期 yyyy-MM-dd格式
*/ */
...@@ -61,6 +64,15 @@ public class DateUtil { ...@@ -61,6 +64,15 @@ public class DateUtil {
* *
* @return 当前日期 * @return 当前日期
*/ */
public static String datetimeFormatter(Date date) {
return SIMPLE_DATE_FORMAT.format(date);
}
/**
* 获取当前日期
*
* @return 当前日期
*/
public static Date now() { public static Date now() {
return new Date(); return new Date();
} }
...@@ -504,6 +516,58 @@ public class DateUtil { ...@@ -504,6 +516,58 @@ public class DateUtil {
public static Integer getHour(Date date) { public static Integer getHour(Date date) {
return DateUtils.toCalendar(date).get(Calendar.HOUR_OF_DAY); return DateUtils.toCalendar(date).get(Calendar.HOUR_OF_DAY);
} }
/**
* date转localDate
*
* @param date
* @return
*/
public static LocalDate getLocalDateByDate(Date date) {
return date.toInstant().atZone(ZoneId.systemDefault()).toLocalDate();
}
/**
* 判断目标时间是否是今天
*/
public static boolean judgeIsToday(Date date) {
if (Objects.isNull(date)) {
return false;
}
ZoneId zoneId = ZoneId.systemDefault();
LocalDate inputDate = date.toInstant().atZone(zoneId).toLocalDate();
LocalDate today = LocalDate.now();
return inputDate.equals(today);
}
/***
* @param localDateTime
* @return: boolean
* @Description: 根据LocalDateTime来判断是否是今天
*/
public boolean judgeTimeIsToday(LocalDateTime localDateTime) {
LocalDateTime startTime = LocalDate.now().atTime(0, 0, 0);
LocalDateTime endTime = LocalDate.now().atTime(23, 59, 59);
//如果大于今天的开始日期,小于今天的结束日期
if (localDateTime.isAfter(startTime) && localDateTime.isBefore(endTime)) {
return true;
}
return false;
}
/**
* 根据日期转换到指定时间
* 2023-10-30+2023-10-22 21:21:12 -> 2023-10-30 21:21:12
*
* @param localDateTime
* @return: boolean
* @Description: 根据LocalDateTime来判断是否是今天
*/
public String handleDate(String date, LocalDateTime localDateTime) {
String format = localDateTime.format(TIME_FORMATTER);
return date + " " + format;
}
//CHECKSTYLE:ON //CHECKSTYLE:ON
} }
...@@ -7,6 +7,7 @@ import com.dituhui.pea.order.dto.OrderAssignReq; ...@@ -7,6 +7,7 @@ import com.dituhui.pea.order.dto.OrderAssignReq;
import com.dituhui.pea.order.dto.OrderReschedule; import com.dituhui.pea.order.dto.OrderReschedule;
import com.dituhui.pea.order.dto.OrderRevokeAssign; import com.dituhui.pea.order.dto.OrderRevokeAssign;
import com.dituhui.pea.order.service.OrderAssign; import com.dituhui.pea.order.service.OrderAssign;
import com.dituhui.pea.order.service.OrderInfoService;
import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*; import org.springframework.web.bind.annotation.*;
...@@ -19,6 +20,8 @@ public class OrderAssignController { ...@@ -19,6 +20,8 @@ public class OrderAssignController {
@Autowired @Autowired
private OrderAssign orderAssign; private OrderAssign orderAssign;
@Autowired
private OrderInfoService orderInfoService;
@GetMapping("/order/assign/recommend/engineers") @GetMapping("/order/assign/recommend/engineers")
public Result<?> getOrderAssignRecommendEngineers( public Result<?> getOrderAssignRecommendEngineers(
...@@ -64,7 +67,7 @@ public class OrderAssignController { ...@@ -64,7 +67,7 @@ public class OrderAssignController {
// 订单改约 // 订单改约
Result<?> res = null; Result<?> res = null;
try { try {
res = orderAssign.orderReschedule(req); res = orderInfoService.orderReschedule(req);
} catch (BusinessException e) { } catch (BusinessException e) {
return Result.failed(e.getMessage()); return Result.failed(e.getMessage());
} }
......
package com.dituhui.pea.order.controller; package com.dituhui.pea.order.controller;
import com.dituhui.pea.common.Result; import com.dituhui.pea.common.Result;
import com.dituhui.pea.enums.StatusCodeEnum;
import com.dituhui.pea.order.common.jackson.DateUtil; import com.dituhui.pea.order.common.jackson.DateUtil;
import com.dituhui.pea.order.common.jackson.JsonUtil; import com.dituhui.pea.order.common.jackson.JsonUtil;
import com.dituhui.pea.order.dto.param.*;
import com.dituhui.pea.order.enums.OrderStatusEnum;
import com.dituhui.pea.order.enums.ServiceStatusEnum;
import com.dituhui.pea.order.dao.TableCodeCheckDao; import com.dituhui.pea.order.dao.TableCodeCheckDao;
import com.dituhui.pea.order.dto.param.BaseDistance; import com.dituhui.pea.order.dto.param.BaseDistance;
import com.dituhui.pea.order.dto.param.BaseDistanceParam; import com.dituhui.pea.order.dto.param.BaseDistanceParam;
...@@ -18,9 +22,12 @@ import com.dituhui.pea.order.entity.TypeCodeCheckTableEntity; ...@@ -18,9 +22,12 @@ import com.dituhui.pea.order.entity.TypeCodeCheckTableEntity;
import com.dituhui.pea.order.service.CapacityQueryService; import com.dituhui.pea.order.service.CapacityQueryService;
import com.dituhui.pea.order.service.EngineerCalendarService; import com.dituhui.pea.order.service.EngineerCalendarService;
import com.dituhui.pea.order.service.OrderCreateService; import com.dituhui.pea.order.service.OrderCreateService;
import com.dituhui.pea.order.service.OrderInfoService;
import com.dituhui.pea.order.service.PeaOuterAPIService; import com.dituhui.pea.order.service.PeaOuterAPIService;
import com.fasterxml.jackson.annotation.JsonFormat; import com.fasterxml.jackson.annotation.JsonFormat;
import lombok.RequiredArgsConstructor; import lombok.RequiredArgsConstructor;
import org.apache.commons.lang3.StringUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.format.annotation.DateTimeFormat; import org.springframework.format.annotation.DateTimeFormat;
import org.springframework.validation.annotation.Validated; import org.springframework.validation.annotation.Validated;
import org.springframework.web.bind.annotation.GetMapping; import org.springframework.web.bind.annotation.GetMapping;
...@@ -54,8 +61,11 @@ public class PeaApiController { ...@@ -54,8 +61,11 @@ public class PeaApiController {
private final EngineerCalendarService engineerCalendarService; private final EngineerCalendarService engineerCalendarService;
private final PeaOuterAPIService peaOuterAPIService; private final PeaOuterAPIService peaOuterAPIService;
@Autowired
private OrderCreateService orderCreateService;
@Autowired
private OrderInfoService orderInfoService;
private final CapacityQueryService capacityQueryService; private final CapacityQueryService capacityQueryService;
private final OrderCreateService orderCreateService;
private final TableCodeCheckDao tableCodeCheckDao; private final TableCodeCheckDao tableCodeCheckDao;
...@@ -228,8 +238,10 @@ public class PeaApiController { ...@@ -228,8 +238,10 @@ public class PeaApiController {
*/ */
@PostMapping("/order/stage/change") @PostMapping("/order/stage/change")
public Result<?> orderStageChanged(@Validated @RequestBody OrderDTO.StageChangeRequest request) { public Result<?> orderStageChanged(@Validated @RequestBody OrderDTO.StageChangeRequest request) {
if (StringUtils.isBlank(request.getOrderId())) {
return Result.success(null); return Result.failed(StatusCodeEnum.COMMON_PARAM_EMPTY);
}
return orderInfoService.orderStageChanged(request);
} }
/** /**
......
...@@ -16,4 +16,6 @@ public interface OrgBranchDao extends JpaRepository<OrgBranchEntity, Integer> { ...@@ -16,4 +16,6 @@ public interface OrgBranchDao extends JpaRepository<OrgBranchEntity, Integer> {
OrgBranchEntity getByBranchId(String branchId); OrgBranchEntity getByBranchId(String branchId);
public List<OrgBranchEntity> findByBranchIdIn(List<String> ids); public List<OrgBranchEntity> findByBranchIdIn(List<String> ids);
public OrgBranchEntity findByCitycodeListLike(String citycodeList);
} }
...@@ -23,6 +23,14 @@ public class BusinessTeamDetailDTO { ...@@ -23,6 +23,14 @@ public class BusinessTeamDetailDTO {
private String groupName; private String groupName;
private String warehouseId; private String warehouseId;
private List<String> workdays; private List<String> workdays;
/**
* 下班时间
*/
private String workOff;
/**
* 上班时间
*/
private String workOn;
} }
......
package com.dituhui.pea.order.dto; package com.dituhui.pea.order.dto;
import com.dituhui.pea.order.dto.param.Location;
import lombok.Data; import lombok.Data;
@Data @Data
...@@ -13,4 +14,13 @@ public class OrderReschedule { ...@@ -13,4 +14,13 @@ public class OrderReschedule {
* 操作员 * 操作员
*/ */
private String operator; private String operator;
/**
* 地址坐标信息
*/
private Location happenLocation;
/**
* 备注
*/
private String description;
} }
package com.dituhui.pea.order.dto.param; package com.dituhui.pea.order.dto.param;
import com.dituhui.pea.util.DateUtil;
import com.fasterxml.jackson.annotation.JsonFormat; import com.fasterxml.jackson.annotation.JsonFormat;
import lombok.EqualsAndHashCode; import lombok.EqualsAndHashCode;
import lombok.Getter; import lombok.Getter;
...@@ -109,6 +108,7 @@ public class OrderDTO { ...@@ -109,6 +108,7 @@ public class OrderDTO {
int hour = DateUtils.toCalendar(date).get(Calendar.HOUR_OF_DAY); int hour = DateUtils.toCalendar(date).get(Calendar.HOUR_OF_DAY);
System.out.println("当前小时为:" + hour); System.out.println("当前小时为:" + hour);
} }
/** /**
* 预约描述时间(全天/上午/下午) * 预约描述时间(全天/上午/下午)
*/ */
...@@ -136,7 +136,7 @@ public class OrderDTO { ...@@ -136,7 +136,7 @@ public class OrderDTO {
/** /**
* 是否指定某个工程师/是否排除某个工程师 0:否 1:指定 2:排除 默认0 * 是否指定某个工程师/是否排除某个工程师 0:否 1:指定 2:排除 默认0
*/ */
private int isAppointEngineer; private Integer isAppointEngineer;
/** /**
* 指定某个工程师/排除某个工程师 codes * 指定某个工程师/排除某个工程师 codes
...@@ -185,9 +185,9 @@ public class OrderDTO { ...@@ -185,9 +185,9 @@ public class OrderDTO {
/** /**
* 新预约时间, 特殊状态的时候填写:orderStatus为改约的时候填写 * 新预约时间, 特殊状态的时候填写:orderStatus为改约的时候填写
*/ */
@DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss") // @DateTimeFormat(pattern = "yyyy-MM-dd")
@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8") // @JsonFormat(pattern = "yyyy-MM-dd", timezone = "GMT+8")
private Date newReservationTime; private String newReservationTime;
/** /**
* 描述信息 * 描述信息
......
package com.dituhui.pea.order.enums;
import org.apache.commons.lang3.StringUtils;
/**
* bean 服务状态枚举
*/
public enum BeanServiceFlowEnum {
//bean 已联系/准备服务/开始服务/结束服务等
//pea 服务状态:INIT-初始化/PENDING待服务/CONTACTED已排期/STARTED-已开始/FINISHED已完成/UNFINISHED-已上门未完成
PENDING("已联系", "PENDING"),
CONTACTED("准备服务", "CONTACTED"),
STARTED("开始服务", "STARTED"),
FINISHED("结束服务", "FINISHED");
private String name;
private String status;
BeanServiceFlowEnum(String name, String status) {
this.name = name;
this.status = status;
}
public String getName() {
return name;
}
public String getStatus() {
return status;
}
public static String getStatusByName(String name) {
if (StringUtils.isBlank(name)) {
return null;
}
for (BeanServiceFlowEnum value : BeanServiceFlowEnum.values()) {
if (name.equals(value.name)) {
return value.status;
}
}
return null;
}
}
package com.dituhui.pea.order.enums;
public enum OrderStatus {
CREATE("创建订单"),
NORMAL("正常"),
CANCELED("已取消"),
RESCHEDULED("已改约"),
ASSIGN("工单指派");
private final String description;
OrderStatus(String description){
this.description = description;
};
public String getDescription() {
return description;
}
public static String getEnumName(OrderStatus orderStatus){
return orderStatus.toString();
}
}
package com.dituhui.pea.order.enums;
public enum OrderStatusEnum {
CREATE("创建订单", "CREATE"),
NORMAL("正常", "NORMAL"),
CANCELED("已取消", "CANCELED"),
RESCHEDULED("已改约", "RESCHEDULED"),
ASSIGN("工单指派", "ASSIGN");
private final String description;
private final String code;
OrderStatusEnum(String description, String code) {
this.description = description;
this.code = code;
}
public String getDescription() {
return description;
}
public String getCode() {
return code;
}
public static String getEnumName(OrderStatusEnum orderStatus) {
return orderStatus.toString();
}
}
package com.dituhui.pea.order.enums; package com.dituhui.pea.order.enums;
public enum ServiceStatus { public enum ServiceStatusEnum {
// 服务状态:INIT-初始化/PENDING待服务/CONTACTED已排期/STARTED-已开始/FINISHED已完成/UNFINISHED-已上门未完成 // 服务状态:INIT-初始化/PENDING待服务/CONTACTED已排期/STARTED-已开始/FINISHED已完成/UNFINISHED-已上门未完成
INIT("待服务"), INIT("INIT", "待服务"),
PENDING("待服务"), PENDING("PENDING", "待服务"),
CONTACTED("已排期"), CONTACTED("CONTACTED", "已排期"),
STARTED("已开始"), STARTED("STARTED", "已开始"),
FINISHED("已完成"), FINISHED("FINISHED", "已完成"),
UNFINISHED("已上门未完成"); UNFINISHED("UNFINISHED", "已上门未完成");
private final String code;
private final String description; private final String description;
ServiceStatus(String description) { ServiceStatusEnum(String code, String description) {
this.code = code;
this.description = description; this.description = description;
} }
...@@ -19,7 +22,11 @@ public enum ServiceStatus { ...@@ -19,7 +22,11 @@ public enum ServiceStatus {
return description; return description;
} }
public static String getEnumName(ServiceStatus serviceStatus){ public String getCode() {
return code;
}
public static String getEnumName(ServiceStatusEnum serviceStatus) {
return serviceStatus.toString(); return serviceStatus.toString();
} }
} }
...@@ -2,11 +2,14 @@ package com.dituhui.pea.order.service; ...@@ -2,11 +2,14 @@ package com.dituhui.pea.order.service;
import com.dituhui.pea.order.dto.LabelValueDTO; import com.dituhui.pea.order.dto.LabelValueDTO;
import java.time.LocalDateTime;
import java.util.List; import java.util.List;
public interface CommonService { public interface CommonService {
void addOrderEvent(String orderId, String subOrderId, String source, String operator, String event, String content, String memo); void addOrderEvent(String orderId, String subOrderId, String source, String operator, String event, String content, String memo);
void addOrderEvent(String orderId, String subOrderId, String source, String operator, String event, String content, String memo, LocalDateTime createTime);
List<LabelValueDTO> getSpecialParams(String catalog, String biztype); List<LabelValueDTO> getSpecialParams(String catalog, String biztype);
} }
...@@ -7,6 +7,8 @@ import com.dituhui.pea.order.dto.param.OrgTeamInfo; ...@@ -7,6 +7,8 @@ import com.dituhui.pea.order.dto.param.OrgTeamInfo;
import com.dituhui.pea.pojo.saas.req.AdministrativeDistrictReq; import com.dituhui.pea.pojo.saas.req.AdministrativeDistrictReq;
import com.dituhui.pea.pojo.saas.resp.AdministrativeDistrictResp; import com.dituhui.pea.pojo.saas.resp.AdministrativeDistrictResp;
import java.time.LocalDate;
import java.time.LocalTime;
import java.util.List; import java.util.List;
public interface FendanService { public interface FendanService {
...@@ -27,5 +29,17 @@ public interface FendanService { ...@@ -27,5 +29,17 @@ public interface FendanService {
*/ */
Result<List<OrgGroupInfo>> fendanToGroup(OrderDTO.OrderCreateRequest request); Result<List<OrgGroupInfo>> fendanToGroup(OrderDTO.OrderCreateRequest request);
/**
* 分单到工作队
*
* @param request
* @param isDate 是否是日期,0 :false 1:是
* @param targetDate 日期
* @param startTime 开始时间
* @param endTime 结束时间
* @return
*/
Result<OrgTeamInfo> fendanToGroupCapacity(OrderDTO.OrderCreateRequest request, Integer isDate, LocalDate targetDate, LocalTime startTime, LocalTime endTime);
Result<AdministrativeDistrictResp> getAdminDistrict(AdministrativeDistrictReq req); Result<AdministrativeDistrictResp> getAdminDistrict(AdministrativeDistrictReq req);
} }
package com.dituhui.pea.order.service; package com.dituhui.pea.order.service;
import com.dituhui.pea.common.Result; import com.dituhui.pea.common.Result;
import com.dituhui.pea.order.dto.OrderReschedule;
import com.dituhui.pea.order.dto.param.OrderDTO;
import java.time.LocalDate; import java.time.LocalDate;
...@@ -26,4 +28,20 @@ public interface OrderInfoService { ...@@ -26,4 +28,20 @@ public interface OrderInfoService {
* @return 有则返回多条订单关联id,没有则不是一家多单 * @return 有则返回多条订单关联id,没有则不是一家多单
*/ */
Result deleteMultipleOrders(String multipleOrders, String orderId); Result deleteMultipleOrders(String multipleOrders, String orderId);
/**
* 工单变更处理
*
* @param request
* @return
*/
Result<?> orderStageChanged(OrderDTO.StageChangeRequest request);
/**
* 改约
*
* @param req
* @return
*/
Result<?> orderReschedule(OrderReschedule req);
} }
...@@ -258,6 +258,8 @@ public class BusinessTeamServiceImpl implements BusinessTeamService { ...@@ -258,6 +258,8 @@ public class BusinessTeamServiceImpl implements BusinessTeamService {
.setGroupId(g.getGroupId()) .setGroupId(g.getGroupId())
.setGroupName(g.getGroupName()) .setGroupName(g.getGroupName())
.setWarehouseId(teamEntity.getWarehouseId()) .setWarehouseId(teamEntity.getWarehouseId())
.setWorkOff(teamEntity.getWorkOff())
.setWorkOn(teamEntity.getWorkOn())
.setWorkdays(Arrays.asList(teamEntity.getWorkdays().split(","))); .setWorkdays(Arrays.asList(teamEntity.getWorkdays().split(",")));
List<String> engineerCodes = orgTeamEngineerDao.findAllByTeamId(teamEntity.getTeamId()).stream() List<String> engineerCodes = orgTeamEngineerDao.findAllByTeamId(teamEntity.getTeamId()).stream()
.map(OrgTeamEngineerEntity::getEngineerCode).collect(Collectors.toList()); .map(OrgTeamEngineerEntity::getEngineerCode).collect(Collectors.toList());
......
...@@ -39,10 +39,10 @@ public class CommonServiceImpl implements CommonService { ...@@ -39,10 +39,10 @@ public class CommonServiceImpl implements CommonService {
public void addOrderEvent(String orderId, String subOrderId, String source, String operator, String event, String content, String memo) { public void addOrderEvent(String orderId, String subOrderId, String source, String operator, String event, String content, String memo) {
OrderEventEntity entity = new OrderEventEntity(); OrderEventEntity entity = new OrderEventEntity();
if (StringUtils.isBlank(source)){ if (StringUtils.isBlank(source)) {
source = "SYSTEM"; source = "SYSTEM";
} }
if (StringUtils.isBlank(operator)){ if (StringUtils.isBlank(operator)) {
operator = "PEA-WEB"; operator = "PEA-WEB";
} }
entity.setOrderId(orderId).setSuborderId(subOrderId).setSource(source).setOperator(operator).setOperatorName(operator); entity.setOrderId(orderId).setSuborderId(subOrderId).setSource(source).setOperator(operator).setOperatorName(operator);
...@@ -52,9 +52,24 @@ public class CommonServiceImpl implements CommonService { ...@@ -52,9 +52,24 @@ public class CommonServiceImpl implements CommonService {
} }
@Override @Override
public void addOrderEvent(String orderId, String subOrderId, String source, String operator, String event, String content, String memo, LocalDateTime createTime) {
OrderEventEntity entity = new OrderEventEntity();
if (StringUtils.isBlank(source)) {
source = "SYSTEM";
}
if (StringUtils.isBlank(operator)) {
operator = "PEA-WEB";
}
entity.setOrderId(orderId).setSuborderId(subOrderId).setSource(source).setOperator(operator).setOperatorName(operator);
entity.setEvent(event).setDescription(content).setMemo(memo);
entity.setCreateTime(createTime).setUpdateTime(createTime);
orderEventDao.save(entity);
}
@Override
public List<LabelValueDTO> getSpecialParams(String catalog, String biztype) { public List<LabelValueDTO> getSpecialParams(String catalog, String biztype) {
List<PubParamsEntity> params = pubParamsDao.findByCatalogAndBiztype(catalog, biztype); List<PubParamsEntity> params = pubParamsDao.findByCatalogAndBiztype(catalog, biztype);
return params.stream().map(entity ->{ return params.stream().map(entity -> {
return new LabelValueDTO() return new LabelValueDTO()
.setLabel(entity.getPlabel()) .setLabel(entity.getPlabel())
.setValue(entity.getPvalue()); .setValue(entity.getPvalue());
......
...@@ -12,7 +12,7 @@ import com.dituhui.pea.order.dto.DispatchOrderListResp; ...@@ -12,7 +12,7 @@ import com.dituhui.pea.order.dto.DispatchOrderListResp;
import com.dituhui.pea.order.entity.*; import com.dituhui.pea.order.entity.*;
import com.dituhui.pea.order.enums.OrderFlowEnum; import com.dituhui.pea.order.enums.OrderFlowEnum;
import com.dituhui.pea.order.enums.OrderGroupEnum; import com.dituhui.pea.order.enums.OrderGroupEnum;
import com.dituhui.pea.order.enums.OrderStatus; import com.dituhui.pea.order.enums.OrderStatusEnum;
import com.dituhui.pea.order.service.DispatchService; import com.dituhui.pea.order.service.DispatchService;
import lombok.extern.slf4j.Slf4j; import lombok.extern.slf4j.Slf4j;
import org.apache.commons.collections.CollectionUtils; import org.apache.commons.collections.CollectionUtils;
...@@ -242,7 +242,7 @@ public class DispatchServiceImpl implements DispatchService { ...@@ -242,7 +242,7 @@ public class DispatchServiceImpl implements DispatchService {
item.setAppointmentStatus(o.getAppointmentStatus()); item.setAppointmentStatus(o.getAppointmentStatus());
item.setOrderStatus(o.getOrderStatus()); // 订单状态 item.setOrderStatus(o.getOrderStatus()); // 订单状态
item.setServiceStatus(o.getServiceStatus()); item.setServiceStatus(o.getServiceStatus());
item.setOrderStatusDesc(OrderStatus.valueOf(o.getOrderStatus()).getDescription()); item.setOrderStatusDesc(OrderStatusEnum.valueOf(o.getOrderStatus()).getDescription());
item.setCreateTime(TimeUtils.IsoLocalDateTime2String(o.getCreateTime())); item.setCreateTime(TimeUtils.IsoLocalDateTime2String(o.getCreateTime()));
item.setMultipleOrders(o.getMultipleOrders()); item.setMultipleOrders(o.getMultipleOrders());
......
package com.dituhui.pea.order.service.impl; package com.dituhui.pea.order.service.impl;
import cn.hutool.core.bean.BeanUtil; import cn.hutool.core.bean.BeanUtil;
import cn.hutool.core.util.ObjectUtil;
import com.dituhui.pea.common.Result; import com.dituhui.pea.common.Result;
import com.dituhui.pea.enums.StatusCodeEnum; import com.dituhui.pea.enums.StatusCodeEnum;
import com.dituhui.pea.order.common.SaasUtils; import com.dituhui.pea.order.common.SaasUtils;
import com.dituhui.pea.order.dao.*; import com.dituhui.pea.order.dao.*;
import com.dituhui.pea.order.dto.param.CapacityQueryDTO;
import com.dituhui.pea.order.dto.param.OrderDTO; import com.dituhui.pea.order.dto.param.OrderDTO;
import com.dituhui.pea.order.dto.param.OrgGroupInfo; import com.dituhui.pea.order.dto.param.OrgGroupInfo;
import com.dituhui.pea.order.dto.param.OrgTeamInfo; import com.dituhui.pea.order.dto.param.OrgTeamInfo;
import com.dituhui.pea.order.entity.*; import com.dituhui.pea.order.entity.*;
import com.dituhui.pea.order.service.CapacityQueryService;
import com.dituhui.pea.order.service.FendanService; import com.dituhui.pea.order.service.FendanService;
import com.dituhui.pea.pojo.fendan.FendanDTO; import com.dituhui.pea.pojo.fendan.FendanDTO;
import com.dituhui.pea.pojo.saas.req.AdministrativeDistrictReq; import com.dituhui.pea.pojo.saas.req.AdministrativeDistrictReq;
import com.dituhui.pea.pojo.saas.resp.AdministrativeDistrictResp; import com.dituhui.pea.pojo.saas.resp.AdministrativeDistrictResp;
import com.dituhui.pea.util.DateUtil;
import lombok.extern.slf4j.Slf4j; import lombok.extern.slf4j.Slf4j;
import org.apache.commons.collections.CollectionUtils; import org.apache.commons.collections.CollectionUtils;
import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service; import org.springframework.stereotype.Service;
import java.time.LocalDate;
import java.time.LocalTime;
import java.util.*; import java.util.*;
import java.util.stream.Collectors; import java.util.stream.Collectors;
...@@ -37,6 +43,10 @@ public class FendanServiceImpl implements FendanService { ...@@ -37,6 +43,10 @@ public class FendanServiceImpl implements FendanService {
private EngineerInfoDao engineerInfoDao; private EngineerInfoDao engineerInfoDao;
@Autowired @Autowired
private OrgTeamEngineerDao orgTeamEngineerDao; private OrgTeamEngineerDao orgTeamEngineerDao;
@Autowired
private SkillInfoDao skillInfoDao;
@Autowired
private CapacityQueryService capacityQueryService;
private static String allLayerId = "ALL"; private static String allLayerId = "ALL";
...@@ -207,6 +217,96 @@ public class FendanServiceImpl implements FendanService { ...@@ -207,6 +217,96 @@ public class FendanServiceImpl implements FendanService {
return Result.success(orgGroupTeamInfos); return Result.success(orgGroupTeamInfos);
} }
/**
* 派工到工作队
*
* @param request
* @return
*/
@Override
public Result<OrgTeamInfo> fendanToGroupCapacity(OrderDTO.OrderCreateRequest request, Integer isDate, LocalDate targetDate, LocalTime startTime, LocalTime endTime) {
List<OrgGroupInfo> orgGroupTeamInfos = new ArrayList<>();
//1:根据经纬度分单获取面
FendanDTO fendanDTO = new FendanDTO();
fendanDTO.setXy(request.getLocation().getLongitude() + "," + request.getLocation().getLatitude());
List<SaasUtils.BlockInfo> blockInfos = saasUtils.queryBlocksByXy(fendanDTO);
if (blockInfos.isEmpty()) {
return Result.failed(StatusCodeEnum.FENDAN_AREA_UNMATCHED);
}
//2:根据服务范围匹配工作队
String peaBrand = fixBrand(request.getBrand());
List<String> blockIds = blockInfos.stream().map(SaasUtils.BlockInfo::getBlockId).distinct().collect(Collectors.toList());
List<MapBlockInfoEntity> mapBlockInBlockIdsList = new ArrayList<>();
//区划所在范围所有工作队
for (String blockId : blockIds) {
List<MapBlockInfoEntity> mapBlockInfoEntities = mapBlockInfoDao.findByAreaIdsLike(blockId);
mapBlockInBlockIdsList.addAll(mapBlockInfoEntities);
}
//区划所在范围并分配到具体技能的工作队
List<MapBlockInfoEntity> mapBlockSkillList = mapBlockInfoDao.listTeamIdByBrandAndSkill(peaBrand, request.getProductType(), request.getServiceType());
if (CollectionUtils.isEmpty(mapBlockSkillList) && CollectionUtils.isEmpty(mapBlockInBlockIdsList)) {
return Result.failed(StatusCodeEnum.FENDAN_TEAM_UNMATCHED);
}
List<Integer> mapBlockAllList = mapBlockSkillList.stream().map(MapBlockInfoEntity::getId).distinct().collect(Collectors.toList());
//筛选漏选工作队(处理全技能图层)和查出多余图层
List<MapBlockInfoEntity> mapBlockInfoList = new ArrayList<>();
for (MapBlockInfoEntity mapBlockInfoEntity : mapBlockInBlockIdsList) {
if (mapBlockAllList.contains(mapBlockInfoEntity.getId())) {
mapBlockInfoList.add(mapBlockInfoEntity);
}
if (mapBlockInfoEntity.getLayerId().equals(allLayerId)) {
mapBlockInfoList.add(mapBlockInfoEntity);
}
}
if (CollectionUtils.isEmpty(mapBlockInfoList)) {
return Result.failed(StatusCodeEnum.FENDAN_TEAM_UNMATCHED);
}
//3:按照派工顺序组装工作队数据
List<String> teamIdList = mapBlockInfoList.stream().map(MapBlockInfoEntity::getTeamId).distinct().collect(Collectors.toList());
List<OrgTeamEntity> teamList = orgTeamDao.findByTeamIdIn(teamIdList);
Map<String, OrgTeamEntity> teamMap = teamList.stream().collect(Collectors.toMap(OrgTeamEntity::getTeamId, e -> e));
List<OrgGroupEntity> orgGroupList = orgGroupDao.findByTeamIdIn(teamIdList);
for (OrgGroupEntity orgGroupEntity : orgGroupList) {
OrgGroupInfo orgGroup = BeanUtil.copyProperties(orgGroupEntity, OrgGroupInfo.class);
MapBlockInfoEntity allLayer = null;
for (int i = 0; i < mapBlockInfoList.size(); i++) {
if (!mapBlockInfoList.get(i).getGroupId().equals(orgGroupEntity.getGroupId())) {
continue;
}
OrgTeamEntity orgTeamEntity = teamMap.get(mapBlockInfoList.get(i).getTeamId());
//全技能数据放在最后
if (mapBlockInfoList.get(i).getLayerId().equals(allLayerId)) {
allLayer = mapBlockInfoList.get(i);
} else {
OrgTeamInfo orgTeamInfo = BeanUtil.copyProperties(orgTeamEntity, OrgTeamInfo.class);
orgGroup.setTeamInfos(Arrays.asList(orgTeamInfo));
}
//最后处理全技能数据
if (i == mapBlockInfoList.size() - 1 && null != allLayer) {
OrgTeamInfo orgTeamInfoAll = BeanUtil.copyProperties(orgTeamEntity, OrgTeamInfo.class);
orgGroup.setTeamInfos(Arrays.asList(orgTeamInfoAll));
allLayer = null;
}
}
orgGroupTeamInfos.add(orgGroup);
}
CapacityQueryDTO.Service service = new CapacityQueryDTO.Service();
service.setBrand(peaBrand);
service.setProductType(request.getProductType());
service.setServiceType(request.getServiceType());
SkillInfoEntity skillInfo = skillInfoDao.getByBrandAndTypeAndSkill(peaBrand, request.getProductType(), request.getServiceType());
for (OrgGroupInfo orgGroupInfo : orgGroupTeamInfos) {
CapacityQueryDTO.Segment capacity = isDate == 1 ? capacityQueryService.queryCapacityByTeam(orgGroupInfo.getTeamInfos().get(0).getTeamId(), service, targetDate) :
capacityQueryService.queryCapacityByTeam(orgGroupInfo.getTeamInfos().get(0).getTeamId(), service, targetDate, startTime, endTime);
if (ObjectUtil.isNotNull(capacity) && capacity.getStatus() == 1 && capacity.getMaxDuration() > skillInfo.getTakeTime()) {
return Result.success(orgGroupInfo.getTeamInfos().get(0));
}
}
return Result.failed(StatusCodeEnum.FENDAN_IS_TRANSCEND);
}
@Override @Override
public Result<AdministrativeDistrictResp> getAdminDistrict(AdministrativeDistrictReq req) { public Result<AdministrativeDistrictResp> getAdminDistrict(AdministrativeDistrictReq req) {
AdministrativeDistrictResp adminDistrict = saasUtils.getAdminDistrict(req); AdministrativeDistrictResp adminDistrict = saasUtils.getAdminDistrict(req);
......
package com.dituhui.pea.order.service.impl; package com.dituhui.pea.order.service.impl;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import cn.hutool.core.util.ObjectUtil;
import com.dituhui.pea.common.BusinessException; import com.dituhui.pea.common.BusinessException;
import com.dituhui.pea.common.Result; import com.dituhui.pea.common.Result;
import com.dituhui.pea.common.ResultEnum; import com.dituhui.pea.common.ResultEnum;
import com.dituhui.pea.enums.StatusCodeEnum;
import com.dituhui.pea.order.common.OrderAssignCheck; import com.dituhui.pea.order.common.OrderAssignCheck;
import com.dituhui.pea.order.common.TimeUtils; import com.dituhui.pea.order.common.TimeUtils;
import com.dituhui.pea.order.dao.*; import com.dituhui.pea.order.dao.*;
import com.dituhui.pea.order.dto.*; import com.dituhui.pea.order.dto.*;
import com.dituhui.pea.order.dto.param.CapacityQueryDTO;
import com.dituhui.pea.order.dto.param.Location;
import com.dituhui.pea.order.dto.param.OrderDTO;
import com.dituhui.pea.order.dto.param.OrgTeamInfo;
import com.dituhui.pea.order.entity.*; import com.dituhui.pea.order.entity.*;
import com.dituhui.pea.order.enums.OrderFlowEnum; import com.dituhui.pea.order.enums.OrderFlowEnum;
import com.dituhui.pea.order.enums.OrderStatus; import com.dituhui.pea.order.enums.OrderStatusEnum;
import com.dituhui.pea.order.service.CommonService; import com.dituhui.pea.order.enums.ServiceStatusEnum;
import com.dituhui.pea.order.service.OrderAssign; import com.dituhui.pea.order.service.*;
import com.dituhui.pea.order.service.OrderInfoService; import com.dituhui.pea.order.utils.CommonUtil;
import com.dituhui.pea.pojo.saas.req.AdministrativeDistrictReq;
import com.dituhui.pea.pojo.saas.resp.AdministrativeDistrictResp;
import com.dituhui.pea.util.DateUtil;
import lombok.extern.slf4j.Slf4j; import lombok.extern.slf4j.Slf4j;
import org.apache.commons.lang3.StringUtils; import org.apache.commons.lang3.StringUtils;
import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Autowired;
...@@ -22,12 +28,10 @@ import org.springframework.stereotype.Service; ...@@ -22,12 +28,10 @@ import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional; import org.springframework.transaction.annotation.Transactional;
import javax.persistence.EntityManager; import javax.persistence.EntityManager;
import javax.persistence.Query;
import javax.persistence.criteria.CriteriaBuilder; import javax.persistence.criteria.CriteriaBuilder;
import javax.persistence.criteria.CriteriaQuery; import javax.persistence.criteria.CriteriaQuery;
import javax.persistence.criteria.Predicate; import javax.persistence.criteria.Predicate;
import javax.persistence.criteria.Root; import javax.persistence.criteria.Root;
import java.sql.Timestamp;
import java.time.LocalDate; import java.time.LocalDate;
import java.time.LocalDateTime; import java.time.LocalDateTime;
import java.util.*; import java.util.*;
...@@ -67,6 +71,21 @@ public class OrderAssignImpl implements OrderAssign { ...@@ -67,6 +71,21 @@ public class OrderAssignImpl implements OrderAssign {
@Autowired @Autowired
private OrderInfoService orderInfoService; private OrderInfoService orderInfoService;
@Autowired
private OrgGroupDao orgGroupDao;
@Autowired
private FendanService fendanService;
@Autowired
private OrgBranchDao orgBranchDao;
@Autowired
private MsgService msgService;
@Autowired
private CapacityQueryService capacityQueryService;
@Transactional @Transactional
@Override @Override
public Result<?> getOrderAssignRecommendEngineers(String orderId, String key, String distance, String recommend) { public Result<?> getOrderAssignRecommendEngineers(String orderId, String key, String distance, String recommend) {
...@@ -171,7 +190,7 @@ public class OrderAssignImpl implements OrderAssign { ...@@ -171,7 +190,7 @@ public class OrderAssignImpl implements OrderAssign {
order.setEngineerCode(engineer.getEngineerCode()); order.setEngineerCode(engineer.getEngineerCode());
orderInfoDao.save(order); orderInfoDao.save(order);
// 工单变更登记 // 工单变更登记
commonService.addOrderEvent(req.getOrderId(), "", "PEA-WEB", req.getOperator(), OrderStatus.ASSIGN.getDescription(), OrderStatus.ASSIGN.getDescription(), ""); commonService.addOrderEvent(req.getOrderId(), "", "PEA-WEB", req.getOperator(), OrderStatusEnum.ASSIGN.getDescription(), OrderStatusEnum.ASSIGN.getDescription(), "");
return Result.success(null); return Result.success(null);
} }
...@@ -198,53 +217,32 @@ public class OrderAssignImpl implements OrderAssign { ...@@ -198,53 +217,32 @@ public class OrderAssignImpl implements OrderAssign {
@Override @Override
public Result<?> orderReschedule(OrderReschedule req) throws BusinessException { public Result<?> orderReschedule(OrderReschedule req) throws BusinessException {
// 工单改约接口(当前同放回工单池处理) return null;
LocalDateTime expectBegin = TimeUtils.IsoDateTime2LocalDateTime(req.getExpectBegin());
LocalDateTime expectEnd = TimeUtils.IsoDateTime2LocalDateTime(req.getExpectEnd());
OrderInfoEntity order = orderInfoDao.getByOrderId(req.getOrderId());
if (order == null) {
throw new BusinessException("订单不存在");
}
if (order.getDt().isEqual(expectBegin.toLocalDate())) {
throw new BusinessException("改约日期不应与之前日期相同");
}
if (LocalDate.now().isAfter(expectBegin.toLocalDate())) {
throw new BusinessException("改约日期不能小于今日");
} }
LocalDate originDate = order.getDt(); // 改约前的日期 private void sendMsg(String branchId, String orderId, String reservationTime) {
//发送通知分部消息
MsgDTO msgDTO = new MsgDTO();
msgDTO.setBranchId(branchId);
msgDTO.setType(0);
msgDTO.setOrderIds(orderId);
msgDTO.setTag(1);
msgDTO.setContent("有1条预约日期在" + reservationTime + "的工单需人工外理");
msgService.add(msgDTO);
}
// 更新order_info表 private OrderInfoEntity handleMultipleOrders(OrderInfoEntity order) {
// String sql = "UPDATE OrderInfo e SET e.appointmentStatus = 'INIT', e.dt=:dt, e.expectTimeBegin = :expectTimeBegin, e.expectTimeEnd = :expectTimeEnd, e.expectTimeDesc = :expectTimeDesc WHERE e.orderId = :orderId";
// Query query = entityManager.createQuery(sql);
// query.setParameter("dt", expectBegin.toLocalDate());
// query.setParameter("expectTimeBegin", expectBegin);
// query.setParameter("expectTimeEnd", expectEnd);
// query.setParameter("expectTimeDesc", expectDesc);
// query.setParameter("orderId", orderId);
// query.executeUpdate();
order.setAppointmentStatus(OrderFlowEnum.INIT.name());
order.setDt(expectBegin.toLocalDate());
order.setExpectTimeBegin(expectBegin);
order.setExpectTimeEnd(expectEnd);
order.setExpectTimeDesc(req.getExpectDesc());
//处理一家多单逻辑 //处理一家多单逻辑
Result<String> deleteMultipleOrders = orderInfoService.deleteMultipleOrders(order.getMultipleOrders(), order.getAddressId()); Result<String> deleteMultipleOrders = orderInfoService.deleteMultipleOrders(order.getMultipleOrders(), order.getAddressId());
if (!deleteMultipleOrders.getCode().equals(ResultEnum.SUCCESS.getCode())) { if (!deleteMultipleOrders.getCode().equals(ResultEnum.SUCCESS.getCode())) {
throw new BusinessException("改约日期失败"); throw new BusinessException("改约日期失败");
} }
Result<String> multipleOrdersResult = orderInfoService.addMultipleOrders(expectBegin.toLocalDate(), order.getAddressId(), req.getOrderId()); Result<String> multipleOrdersResult = orderInfoService.addMultipleOrders(order.getDt(), order.getAddressId(), order.getOrderId());
if (!multipleOrdersResult.getCode().equals(ResultEnum.SUCCESS.getCode())) { if (!multipleOrdersResult.getCode().equals(ResultEnum.SUCCESS.getCode())) {
throw new BusinessException("改约日期失败"); throw new BusinessException("改约日期失败");
} }
order.setMultipleOrders(multipleOrdersResult.getResult()); order.setMultipleOrders(multipleOrdersResult.getResult());
orderInfoDao.save(order); return order;
// 操作员ID TODO-用户系统
// 登记事件
commonService.addOrderEvent(req.getOrderId(), "", "PEA-WEB", req.getOperator(), OrderStatus.RESCHEDULED.getDescription(), OrderStatus.RESCHEDULED.getDescription(), "");
return Result.success(null);
} }
private List<String> searchEngineerCodes(OrderInfoEntity order, String distance, String key, String recommend) { private List<String> searchEngineerCodes(OrderInfoEntity order, String distance, String key, String recommend) {
......
...@@ -16,11 +16,10 @@ ...@@ -16,11 +16,10 @@
package com.dituhui.pea.order.service.impl; package com.dituhui.pea.order.service.impl;
import cn.hutool.core.util.IdUtil;
import cn.hutool.core.date.LocalDateTimeUtil;
import cn.hutool.core.util.ObjectUtil; import cn.hutool.core.util.ObjectUtil;
import com.dituhui.pea.common.Result; import com.dituhui.pea.common.Result;
import com.dituhui.pea.common.ResultEnum; import com.dituhui.pea.common.ResultEnum;
import com.dituhui.pea.enums.StatusCodeEnum;
import com.dituhui.pea.order.common.*; import com.dituhui.pea.order.common.*;
import com.dituhui.pea.order.dao.*; import com.dituhui.pea.order.dao.*;
import com.dituhui.pea.order.dto.*; import com.dituhui.pea.order.dto.*;
...@@ -30,8 +29,9 @@ import com.dituhui.pea.order.dto.param.OrgGroupInfo; ...@@ -30,8 +29,9 @@ import com.dituhui.pea.order.dto.param.OrgGroupInfo;
import com.dituhui.pea.order.dto.param.OrgTeamInfo; import com.dituhui.pea.order.dto.param.OrgTeamInfo;
import com.dituhui.pea.order.entity.*; import com.dituhui.pea.order.entity.*;
import com.dituhui.pea.order.enums.OrderFlowEnum; import com.dituhui.pea.order.enums.OrderFlowEnum;
import com.dituhui.pea.order.enums.OrderStatus; import com.dituhui.pea.order.enums.OrderStatusEnum;
import com.dituhui.pea.order.service.*; import com.dituhui.pea.order.service.*;
import com.dituhui.pea.order.utils.CommonUtil;
import com.dituhui.pea.pojo.saas.req.AdministrativeDistrictReq; import com.dituhui.pea.pojo.saas.req.AdministrativeDistrictReq;
import com.dituhui.pea.pojo.saas.resp.AdministrativeDistrictResp; import com.dituhui.pea.pojo.saas.resp.AdministrativeDistrictResp;
import com.dituhui.pea.util.DateUtil; import com.dituhui.pea.util.DateUtil;
...@@ -39,7 +39,6 @@ import io.seata.core.context.RootContext; ...@@ -39,7 +39,6 @@ import io.seata.core.context.RootContext;
import lombok.extern.slf4j.Slf4j; import lombok.extern.slf4j.Slf4j;
import org.apache.commons.collections.CollectionUtils; import org.apache.commons.collections.CollectionUtils;
import org.apache.commons.lang3.StringUtils; import org.apache.commons.lang3.StringUtils;
import org.aspectj.weaver.ast.Var;
import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service; import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional; import org.springframework.transaction.annotation.Transactional;
...@@ -47,14 +46,10 @@ import org.springframework.transaction.annotation.Transactional; ...@@ -47,14 +46,10 @@ import org.springframework.transaction.annotation.Transactional;
import java.time.LocalDate; import java.time.LocalDate;
import java.time.LocalDateTime; import java.time.LocalDateTime;
import java.util.ArrayList; import java.util.ArrayList;
import java.util.Calendar;
import java.util.List; import java.util.List;
import java.util.UUID; import java.util.UUID;
import java.util.stream.Collectors; import java.util.stream.Collectors;
import static com.dituhui.pea.order.config.OrderConfig.PATTERN_DATE;
import static com.dituhui.pea.order.config.OrderConfig.PATTERN_DATETIME;
@Slf4j @Slf4j
@Service @Service
public class OrderCreateServiceImpl implements OrderCreateService { public class OrderCreateServiceImpl implements OrderCreateService {
...@@ -142,6 +137,9 @@ public class OrderCreateServiceImpl implements OrderCreateService { ...@@ -142,6 +137,9 @@ public class OrderCreateServiceImpl implements OrderCreateService {
String peaBrand = fixBrand(req.getBrand()); String peaBrand = fixBrand(req.getBrand());
// location // location
Location location = req.getLocation(); Location location = req.getLocation();
//先处理时间,后面用
entity.setExpectTimeBegin(DateUtil.fromDate(req.getExpectBegin()));
entity.setExpectTimeEnd(DateUtil.fromDate(req.getExpectEnd()));
//获取省市区 //获取省市区
AdministrativeDistrictReq administrativeDistrictReq = new AdministrativeDistrictReq(); AdministrativeDistrictReq administrativeDistrictReq = new AdministrativeDistrictReq();
administrativeDistrictReq.setPoints(location.getLongitude() + "," + location.getLatitude()); administrativeDistrictReq.setPoints(location.getLongitude() + "," + location.getLatitude());
...@@ -151,9 +149,11 @@ public class OrderCreateServiceImpl implements OrderCreateService { ...@@ -151,9 +149,11 @@ public class OrderCreateServiceImpl implements OrderCreateService {
entity.setCity(adminDistrict.getResult().getSubNames().getCity()); entity.setCity(adminDistrict.getResult().getSubNames().getCity());
entity.setCounty(adminDistrict.getResult().getSubNames().getCounty()); entity.setCounty(adminDistrict.getResult().getSubNames().getCounty());
} }
Result<List<OrgGroupInfo>> fendanResult = fendanService.fendanToGroup(req); Result<OrgTeamInfo> fendanResult = fendanService.fendanToGroupCapacity(req, 2, entity.getExpectTimeBegin().toLocalDate(), entity.getExpectTimeBegin().toLocalTime(), entity.getExpectTimeEnd().toLocalTime());
//todo 根据容量筛选出一个工作队,分单失败则存数据库然后发送消息 if (!fendanResult.getCode().equals(ResultEnum.SUCCESS.getCode()) || ObjectUtil.isNull(fendanResult.getResult())) {
if (!fendanResult.getCode().equals(ResultEnum.SUCCESS.getCode()) || CollectionUtils.isEmpty(fendanResult.getResult())) { if (fendanResult.getCode().equals(StatusCodeEnum.FENDAN_IS_TRANSCEND.getCode())) {
entity.setTranscend(1);
}
OrgGroupEntity groupDaoByCitycodeListLike = orgGroupDao.getByCitycodeListLike(adminDistrict.getResult().getSubNames().getCounty()); OrgGroupEntity groupDaoByCitycodeListLike = orgGroupDao.getByCitycodeListLike(adminDistrict.getResult().getSubNames().getCounty());
entity.setOrgClusterId(groupDaoByCitycodeListLike.getClusterId()); entity.setOrgClusterId(groupDaoByCitycodeListLike.getClusterId());
entity.setOrgBranchId(groupDaoByCitycodeListLike.getBranchId()); entity.setOrgBranchId(groupDaoByCitycodeListLike.getBranchId());
...@@ -166,20 +166,15 @@ public class OrderCreateServiceImpl implements OrderCreateService { ...@@ -166,20 +166,15 @@ public class OrderCreateServiceImpl implements OrderCreateService {
msgDTO.setContent("有1条预约日期在" + entity.getExpectTimeBegin().toLocalDate() + "的工单需人工外理"); msgDTO.setContent("有1条预约日期在" + entity.getExpectTimeBegin().toLocalDate() + "的工单需人工外理");
msgService.add(msgDTO); msgService.add(msgDTO);
} else { } else {
OrgTeamInfo teamInfo = fendanResult.getResult().get(0).getTeamInfos().get(0); // 根据分单工作队,填写clusterId/branchId/groupId/teamId等
// 根据分单,填写clusterId/branchId/groupId/teamId等 OrgTeamInfo teamInfo = fendanResult.getResult();
entity.setOrgClusterId(teamInfo.getClusterId()); entity.setOrgClusterId(teamInfo.getClusterId());
entity.setOrgBranchId(teamInfo.getBranchId()); entity.setOrgBranchId(teamInfo.getBranchId());
entity.setOrgGroupId(teamInfo.getGroupId()); entity.setOrgGroupId(teamInfo.getGroupId());
entity.setOrgTeamId(teamInfo.getTeamId()); entity.setOrgTeamId(teamInfo.getTeamId());
//处理超派,特殊时间段 //处理超派,特殊时间段
Integer startHourOrder = DateUtil.getHour(req.getExpectBegin()); entity.setIsSpecialTime(CommonUtil.isSpecial(entity.getExpectTimeBegin().toLocalTime(),
Integer endHourOrder = DateUtil.getHour(req.getExpectEnd()); entity.getExpectTimeEnd().toLocalTime(), teamInfo.getWorkOn(), teamInfo.getWorkOff()));
Integer startHourTeam = Integer.valueOf(teamInfo.getWorkOn().split(":")[0]);
Integer endHourTeam = Integer.valueOf(teamInfo.getWorkOff().split(":")[0]);
if (startHourOrder < startHourTeam || endHourOrder > endHourTeam) {
entity.setIsSpecialTime(1);
}
} }
entity.setSource(req.getSource()); entity.setSource(req.getSource());
entity.setOrderId(orderId); entity.setOrderId(orderId);
...@@ -190,8 +185,6 @@ public class OrderCreateServiceImpl implements OrderCreateService { ...@@ -190,8 +185,6 @@ public class OrderCreateServiceImpl implements OrderCreateService {
entity.setType(req.getProductType()); entity.setType(req.getProductType());
entity.setSkill(req.getServiceType()); entity.setSkill(req.getServiceType());
entity.setFaultDescribe(req.getFaultDescribe()); entity.setFaultDescribe(req.getFaultDescribe());
entity.setExpectTimeBegin(DateUtil.fromDate(req.getExpectBegin()));
entity.setExpectTimeEnd(DateUtil.fromDate(req.getExpectEnd()));
entity.setExpectTimeDesc(req.getExpectDesc()); entity.setExpectTimeDesc(req.getExpectDesc());
// 使用期望时间来初始化计划时间,后面在指派环节更新为真正的有效的计划时间 // 使用期望时间来初始化计划时间,后面在指派环节更新为真正的有效的计划时间
entity.setPlanStartTime(entity.getExpectTimeBegin()); entity.setPlanStartTime(entity.getExpectTimeBegin());
...@@ -229,7 +222,7 @@ public class OrderCreateServiceImpl implements OrderCreateService { ...@@ -229,7 +222,7 @@ public class OrderCreateServiceImpl implements OrderCreateService {
// todo 服务单状态、预约状态等 // todo 服务单状态、预约状态等
orderInfoDao.save(entity); orderInfoDao.save(entity);
// 登记 // 登记
commonService.addOrderEvent(orderId, "", req.getSource(), "API", OrderStatus.CREATE.getDescription(), OrderStatus.CREATE.getDescription(), ""); commonService.addOrderEvent(orderId, "", req.getSource(), "API", OrderStatusEnum.CREATE.getDescription(), OrderStatusEnum.CREATE.getDescription(), "");
// 指派检查,简单处理,遇到第一个可以指派的就停止检查 // 指派检查,简单处理,遇到第一个可以指派的就停止检查
// tryVirtualAppointment(entity, req.getSource(), teamId); // tryVirtualAppointment(entity, req.getSource(), teamId);
......
...@@ -54,7 +54,9 @@ public class OrderServiceListServiceImpl implements OrderServiceListService { ...@@ -54,7 +54,9 @@ public class OrderServiceListServiceImpl implements OrderServiceListService {
lqw.le(OrderInfo::getDt, endDate); //预约开始日期 lqw.le(OrderInfo::getDt, endDate); //预约开始日期
//筛选项 //筛选项
lqw.eq(StringUtils.isNotEmpty(reqDTO.getPhone()), OrderInfo::getPhone, reqDTO.getPhone()); lqw.eq(StringUtils.isNotEmpty(reqDTO.getPhone()), OrderInfo::getPhone, reqDTO.getPhone());
lqw.eq(StringUtils.isNotEmpty(reqDTO.getOrderId()), OrderInfo::getOrderId, reqDTO.getOrderId()); if (StringUtils.isNotBlank(reqDTO.getOrderId())) {
lqw.in(StringUtils.isNotEmpty(reqDTO.getOrderId()), OrderInfo::getOrderId, reqDTO.getOrderId().split(","));
}
lqw.in(ListUtils.isNotEmpty(reqDTO.getBranchIds()), OrderInfo::getOrgBranchId, reqDTO.getBranchIds()); lqw.in(ListUtils.isNotEmpty(reqDTO.getBranchIds()), OrderInfo::getOrgBranchId, reqDTO.getBranchIds());
lqw.in(ListUtils.isNotEmpty(reqDTO.getGroupIds()), OrderInfo::getOrgGroupId, reqDTO.getGroupIds()); lqw.in(ListUtils.isNotEmpty(reqDTO.getGroupIds()), OrderInfo::getOrgGroupId, reqDTO.getGroupIds());
lqw.in(ListUtils.isNotEmpty(reqDTO.getTeamIds()), OrderInfo::getOrgTeamId, reqDTO.getTeamIds()); lqw.in(ListUtils.isNotEmpty(reqDTO.getTeamIds()), OrderInfo::getOrgTeamId, reqDTO.getTeamIds());
......
package com.dituhui.pea.order.utils; package com.dituhui.pea.order.utils;
import cn.hutool.core.util.StrUtil; import cn.hutool.core.util.StrUtil;
import com.dituhui.pea.util.DateUtil;
import lombok.extern.slf4j.Slf4j; import lombok.extern.slf4j.Slf4j;
import java.time.LocalTime;
import java.util.*; import java.util.*;
@Slf4j @Slf4j
...@@ -63,4 +65,28 @@ public class CommonUtil { ...@@ -63,4 +65,28 @@ public class CommonUtil {
calendar.add(Calendar.DATE, days); calendar.add(Calendar.DATE, days);
return calendar.getTime(); return calendar.getTime();
} }
/**
* 判断是否特殊时间段
*
* @return
*/
public static Integer isSpecial(LocalTime expectBegin, LocalTime expectEnd, String strOn, String strOff) {
LocalTime workOn = LocalTime.parse(strOn + ":00", DateUtil.TIME_FORMATTER);
LocalTime workOff = LocalTime.parse(strOff + ":00", DateUtil.TIME_FORMATTER);
if (expectBegin.isBefore(workOn) || expectEnd.isAfter(workOff)) {
return 1;
}
return 0;
}
public static String fixBrand(String brand) {
if (!brand.equals("嘉格纳")) {
return "博世/西门子以及其他品牌";
} else {
return brand;
}
}
} }
Markdown is supported
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!