Commit 9413a17b by huangjinxin

Merge remote-tracking branch 'origin/develop' into develop

2 parents 5ed157c1 9b60af50
...@@ -94,7 +94,7 @@ public class BeanUserDetail { ...@@ -94,7 +94,7 @@ public class BeanUserDetail {
/** /**
* 工作城市 * 工作城市
*/ */
private String workCity; private Address workCity;
/** /**
* 常用出发地址,常驻的工作地址 * 常用出发地址,常驻的工作地址
*/ */
...@@ -122,7 +122,7 @@ public class BeanUserDetail { ...@@ -122,7 +122,7 @@ public class BeanUserDetail {
/** /**
* 是否兼职拉修,0:否,1:是 * 是否兼职拉修,0:否,1:是
*/ */
private String partTimeRepair; private Integer partTimeRepair;
/** /**
* 所属拉修车间 * 所属拉修车间
*/ */
......
...@@ -8,14 +8,31 @@ import com.dituhui.pea.common.Result; ...@@ -8,14 +8,31 @@ import com.dituhui.pea.common.Result;
import com.dituhui.pea.enums.StatusCodeEnum; import com.dituhui.pea.enums.StatusCodeEnum;
import com.dituhui.pea.order.common.RedisService; import com.dituhui.pea.order.common.RedisService;
import com.dituhui.pea.order.common.jackson.JsonUtil; import com.dituhui.pea.order.common.jackson.JsonUtil;
import com.dituhui.pea.order.dao.EngineerBusinessDao;
import com.dituhui.pea.order.dao.EngineerInfoDao;
import com.dituhui.pea.order.dao.OrgBranchDao; import com.dituhui.pea.order.dao.OrgBranchDao;
import com.dituhui.pea.order.dao.OrgClusterDao; import com.dituhui.pea.order.dao.OrgClusterDao;
import com.dituhui.pea.order.dao.OrgGroupDao; import com.dituhui.pea.order.dao.OrgGroupDao;
import com.dituhui.pea.order.entity.EngineerBusinessEntity;
import com.dituhui.pea.order.entity.EngineerInfoEntity;
import com.dituhui.pea.order.entity.OrgBranchEntity; import com.dituhui.pea.order.entity.OrgBranchEntity;
import com.dituhui.pea.order.entity.OrgClusterEntity; import com.dituhui.pea.order.entity.OrgClusterEntity;
import com.dituhui.pea.order.entity.OrgGroupEntity; import com.dituhui.pea.order.entity.OrgGroupEntity;
import com.dituhui.pea.order.feign.IBeanRemoteService; import com.dituhui.pea.order.feign.IBeanRemoteService;
import com.dituhui.pea.order.feign.bean.*; import com.dituhui.pea.order.feign.bean.AccessToken;
import com.dituhui.pea.order.feign.bean.Address;
import com.dituhui.pea.order.feign.bean.AllotResultParam;
import com.dituhui.pea.order.feign.bean.BeanAccountInfo;
import com.dituhui.pea.order.feign.bean.BeanR;
import com.dituhui.pea.order.feign.bean.BeanUserDetail;
import com.dituhui.pea.order.feign.bean.BranchDetail;
import com.dituhui.pea.order.feign.bean.BranchRes;
import com.dituhui.pea.order.feign.bean.Department;
import com.dituhui.pea.order.feign.bean.OrderCancel;
import com.dituhui.pea.order.feign.bean.Reason;
import com.dituhui.pea.order.feign.bean.Rescheduled;
import com.dituhui.pea.order.feign.bean.ServiceOrg;
import com.dituhui.pea.order.feign.bean.ServiceOrgDetail;
import com.dituhui.pea.order.feign.bean.enums.BeanOrgLevelEnum; import com.dituhui.pea.order.feign.bean.enums.BeanOrgLevelEnum;
import com.dituhui.pea.order.feign.bean.enums.BeanPointTypeEnum; import com.dituhui.pea.order.feign.bean.enums.BeanPointTypeEnum;
import com.dituhui.pea.order.feign.bean.enums.BeanRegionIdEnum; import com.dituhui.pea.order.feign.bean.enums.BeanRegionIdEnum;
...@@ -23,11 +40,18 @@ import lombok.RequiredArgsConstructor; ...@@ -23,11 +40,18 @@ import lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j; import lombok.extern.slf4j.Slf4j;
import org.apache.commons.codec.digest.DigestUtils; import org.apache.commons.codec.digest.DigestUtils;
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.Value; import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Service; import org.springframework.stereotype.Service;
import java.util.*; import javax.transaction.Transactional;
import java.time.LocalDateTime;
import java.time.ZoneId;
import java.util.ArrayList;
import java.util.Date;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.Objects;
/** /**
* 调用BEAN远程接口实现 * 调用BEAN远程接口实现
...@@ -40,6 +64,11 @@ public class BeanRemoteServiceImpl { ...@@ -40,6 +64,11 @@ public class BeanRemoteServiceImpl {
private final IBeanRemoteService beanRemoteService; private final IBeanRemoteService beanRemoteService;
private final RedisService redisService; private final RedisService redisService;
private final OrgClusterDao orgClusterDao;
private final OrgBranchDao orgBranchDao;
private final OrgGroupDao orgGroupDao;
private final EngineerInfoDao engineerInfoDao;
private final EngineerBusinessDao engineerBusinessDao;
//组织机构map,防止重复查询数据库 //组织机构map,防止重复查询数据库
private static Map<String, OrgBranchEntity> branchMap = new HashMap<>(); private static Map<String, OrgBranchEntity> branchMap = new HashMap<>();
// 上海大区,部门ID:1575934909016727553,华东大区:1575934912659275778 // 上海大区,部门ID:1575934909016727553,华东大区:1575934912659275778
...@@ -56,14 +85,6 @@ public class BeanRemoteServiceImpl { ...@@ -56,14 +85,6 @@ public class BeanRemoteServiceImpl {
@Value("${bean.secret-key}") @Value("${bean.secret-key}")
private String secretKey; private String secretKey;
@Autowired
private OrgClusterDao orgClusterDao;
@Autowired
private OrgBranchDao orgBranchDao;
@Autowired
private OrgGroupDao orgGroupDao;
//TODO 仅用于联通测试 //TODO 仅用于联通测试
public void testAllDepartment() { public void testAllDepartment() {
...@@ -148,6 +169,126 @@ public class BeanRemoteServiceImpl { ...@@ -148,6 +169,126 @@ public class BeanRemoteServiceImpl {
} }
/**
* 获取指定机构(BEAN)下的工程师信息(详细), 并存储, 不包含子部门
*
* @param departId BEAN提供的部门ID--这里由于数据入库原因 查询时应只提供group级别数据
*/
@Transactional
public void listDepartUserAndSaveUserDetailInfo(String departId) {
BeanR<List<BeanAccountInfo>> userListR = beanRemoteService.queryUserList(getAccessToken(), departId);
log.info("[listDepartUserAndSaveUserDetailInfo]【/api/openapi/user/queryList】参数:{},返回值-------------------->{}", departId,
JsonUtil.toJson(userListR));
List<BeanAccountInfo> userlist = userListR.getData();
if (!userListR.getSuccess() || Objects.isNull(userlist)) {
log.error("[listDepartUserAndSaveUserDetailInfo]【/api/openapi/user/queryList】,没有返回正确的用户列表数据, 请求参数: {}, 错误信息:{}", departId,
userListR.getMessage());
throw new com.dituhui.pea.exception.BusinessException(StatusCodeEnum.NO_DATA);
}
final int userCount = userlist.size();
log.info("[listDepartUserAndSaveUserDetailInfo] 部门ID为:{}的部门下共{}个工程师信息", departId, userCount);
for (BeanAccountInfo account : userlist) {
log.info("开始同步人员信息{}", JsonUtil.toJson(account));
BeanR<BeanUserDetail> beanUserDetailBeanR = beanRemoteService.userDetail(getAccessToken(), account.getHrId());
log.info("[查询BEAN用户详情]【/api/openapi/user/queryDetail】返回值-------------------->{}", JsonUtil.toJson(beanUserDetailBeanR));
BeanUserDetail userDetailInfo = beanUserDetailBeanR.getData();
if (!beanUserDetailBeanR.getSuccess() || Objects.isNull(userDetailInfo)) {
log.error("用户详情列表未获取到用户:{}-{}的详细信息 , 错误信息:{}", account.getUserName(), account.getCenterId(), beanUserDetailBeanR.getMessage());
continue;
}
String engineerCode = userDetailInfo.getWorkNo();
if (StringUtils.isBlank(engineerCode)) {
log.warn("分站:{}工程师{}没有工号", departId, userDetailInfo.getUsername());
continue;
}
engineerCode = "BEAN" + engineerCode;
//查询是否有当前工程师工号
EngineerInfoEntity engineerInfo = engineerInfoDao.getByEngineerCode(engineerCode);
//获取有用信息保存工程师信息
if (Objects.isNull(engineerInfo)) {
engineerInfo = new EngineerInfoEntity();
}
engineerInfo.setEngineerCode(engineerCode);
engineerInfo.setName(userDetailInfo.getUsername());
engineerInfo.setGroupId(departId);
engineerInfo.setCosmosId(userDetailInfo.getHrId());
engineerInfo.setGender(userDetailInfo.getGender());
engineerInfo.setBirth(StringUtils.isBlank(userDetailInfo.getBirthday()) ? "" : getYear(userDetailInfo.getBirthday()));
engineerInfo.setAddress("");
engineerInfo.setPhone(userDetailInfo.getCellPhone());
engineerInfo.setKind(1 == userDetailInfo.getPartTimeRepair() ? 2 : 1);
engineerInfo.setGrade(Objects.isNull(userDetailInfo.getGrade()) ? "" : userDetailInfo.getGrade());
// engineerInfo.setCredentials();
//默认汽车
engineerInfo.setVehicle(1);
engineerInfo.setBeanStatus(0 == userDetailInfo.getIsDelete() ? 1 : 0);
//fixme 工作地址存贮
Address address = userDetailInfo.getAddress();
if (Objects.nonNull(address)) {
engineerInfo.setWorkAddress(address.getAddress());
} else {
engineerInfo.setWorkAddress("");
}
engineerInfo.setCreateTime(LocalDateTime.now());
engineerInfo.setUpdateTime(LocalDateTime.now());
engineerInfoDao.save(engineerInfo);
engineerInfoDao.flush();
//保存业务属性信息--常用出发地信息
EngineerBusinessEntity engineerBusiness = engineerBusinessDao.getByEngineerCode(engineerCode);
if (Objects.nonNull(engineerBusiness)) {
continue;
}
engineerBusiness = new EngineerBusinessEntity();
engineerBusiness.setEngineerCode(engineerCode);
//以下为数据库默认值
engineerBusiness.setWorkOn("08:00");
engineerBusiness.setWorkOff("18:00");
engineerBusiness.setMaxMinute(600);
engineerBusiness.setMaxNum(0);
engineerBusiness.setMaxDistance(0);
//fixme 工作地址存贮
if (Objects.nonNull(address)) {
engineerBusiness.setAddress(Objects.isNull(address.getAddress()) ? "" : address.getAddress());
engineerBusiness.setX(Objects.isNull(address.getLongitude()) ? "" : address.getLongitude());
engineerBusiness.setY(Objects.isNull(address.getLatitude()) ? "" : address.getLatitude());
} else {
engineerBusiness.setAddress("");
engineerBusiness.setX("");
engineerBusiness.setY("");
}
engineerBusiness.setVehicle("1");
engineerBusiness.setVehicleNo("");
engineerBusiness.setPriority(1);
engineerBusiness.setDeparture(3);
engineerBusiness.setDispatchStrategy("CENTER");
engineerBusiness.setCreateTime(LocalDateTime.now());
engineerBusiness.setUpdateTime(LocalDateTime.now());
engineerBusinessDao.save(engineerBusiness);
}
}
private Date converter(String timestamp) {
return new Date(Long.parseLong(timestamp));
}
private String getYear(String timestamp) {
return String.valueOf(converter(timestamp).toInstant().atZone(ZoneId.systemDefault()).getYear());
}
/** /**
* 处理全部机构 * 处理全部机构
* *
......
...@@ -450,12 +450,6 @@ public class EngineerCalendarServiceImpl implements EngineerCalendarService { ...@@ -450,12 +450,6 @@ public class EngineerCalendarServiceImpl implements EngineerCalendarService {
@Override @Override
public EngineerCalendarResultDTO queryEngineerCalendar(String engineerCode, LocalDate startDate, LocalDate endDate) { public EngineerCalendarResultDTO queryEngineerCalendar(String engineerCode, LocalDate startDate, LocalDate endDate) {
List<String> teamIds = orgTeamEngineerDao.getTeamIdsByEngineerCode(engineerCode);
if (CollectionUtils.isEmpty(teamIds)) {
//TODO 未查到小队信息如何返回
return null;
}
List<LocalDate> dateRange = Stream.iterate(startDate, date -> date.plusDays(1)) List<LocalDate> dateRange = Stream.iterate(startDate, date -> date.plusDays(1))
.limit(ChronoUnit.DAYS.between(startDate, endDate.plusDays(1))) .limit(ChronoUnit.DAYS.between(startDate, endDate.plusDays(1)))
.collect(Collectors.toList()); .collect(Collectors.toList());
...@@ -468,14 +462,6 @@ public class EngineerCalendarServiceImpl implements EngineerCalendarService { ...@@ -468,14 +462,6 @@ public class EngineerCalendarServiceImpl implements EngineerCalendarService {
Map<String, List<CapacityEngineerCalendarEntity>> configs = calendarEntityList.stream() Map<String, List<CapacityEngineerCalendarEntity>> configs = calendarEntityList.stream()
.collect(Collectors.groupingBy(CapacityEngineerCalendarEntity::getWorkday)); .collect(Collectors.groupingBy(CapacityEngineerCalendarEntity::getWorkday));
//取teamID
final String teamId = teamIds.get(0);
// 初始化一天的日历
final OrgTeamEntity orgTeam = orgTeamDao.getByTeamId(teamId);
String[] workDayArray = orgTeam.getWorkdays().split(",");
List<String> workDayList = new ArrayList<>(Arrays.asList(workDayArray));
List<EngineerCalendar> engineerCalendarResultList = dateRange.stream().map(date -> { List<EngineerCalendar> engineerCalendarResultList = dateRange.stream().map(date -> {
final String strDate = LocalDateTimeUtil.format(date, PATTERN_DATE); final String strDate = LocalDateTimeUtil.format(date, PATTERN_DATE);
final Instant instant = Timestamp.valueOf(date.atTime(LocalTime.MIDNIGHT)).toInstant(); final Instant instant = Timestamp.valueOf(date.atTime(LocalTime.MIDNIGHT)).toInstant();
...@@ -500,13 +486,12 @@ public class EngineerCalendarServiceImpl implements EngineerCalendarService { ...@@ -500,13 +486,12 @@ public class EngineerCalendarServiceImpl implements EngineerCalendarService {
calendars.addAll(engineerCalendars); calendars.addAll(engineerCalendars);
} else { } else {
EngineerCalendar engineerCalendar = new EngineerCalendar(); EngineerCalendar engineerCalendar = new EngineerCalendar();
int dayOfWeek = date.getDayOfWeek().getValue();
Instant startInstant = LocalDateTime.of(date, LocalTime.MIN).atZone(ZoneId.of("+8")).toInstant(); Instant startInstant = LocalDateTime.of(date, LocalTime.MIN).atZone(ZoneId.of("+8")).toInstant();
engineerCalendar.setBeginTime(Date.from(startInstant)); engineerCalendar.setBeginTime(Date.from(startInstant));
Instant endInstant = LocalDateTime.of(date, LocalTime.MAX).atZone(ZoneId.of("+8")).toInstant(); Instant endInstant = LocalDateTime.of(date, LocalTime.MAX).atZone(ZoneId.of("+8")).toInstant();
engineerCalendar.setEndTime(Date.from(endInstant)); engineerCalendar.setEndTime(Date.from(endInstant));
engineerCalendar.setDate(Date.from(instant)); engineerCalendar.setDate(Date.from(instant));
if (!workDayList.contains(String.valueOf(dayOfWeek))) { if (!engineerWorkDay(engineerCode,date)) {
engineerCalendar.setEventType("REST"); engineerCalendar.setEventType("REST");
engineerCalendar.setEvent("休息"); engineerCalendar.setEvent("休息");
engineerCalendar.setContent("休息"); engineerCalendar.setContent("休息");
...@@ -527,11 +512,6 @@ public class EngineerCalendarServiceImpl implements EngineerCalendarService { ...@@ -527,11 +512,6 @@ public class EngineerCalendarServiceImpl implements EngineerCalendarService {
private List<EngineerCalendarDTO.Calendar> getOneEngineerCalendars(String engineerCode, String bdate, String edate) { private List<EngineerCalendarDTO.Calendar> getOneEngineerCalendars(String engineerCode, String bdate, String edate) {
// 返回某一个技术员,日期范围内的日历列表 // 返回某一个技术员,日期范围内的日历列表
List<EngineerCalendarDTO.Calendar> calendars = new ArrayList<>(); List<EngineerCalendarDTO.Calendar> calendars = new ArrayList<>();
List<String> teamIds = orgTeamEngineerDao.getTeamIdsByEngineerCode(engineerCode);
if (teamIds == null || teamIds.isEmpty()) {
return new ArrayList<>();
}
LocalDate startDate = DateUtils.localDateFromStr(bdate); LocalDate startDate = DateUtils.localDateFromStr(bdate);
LocalDate endDate = DateUtils.localDateFromStr(edate); LocalDate endDate = DateUtils.localDateFromStr(edate);
List<LocalDate> datesInRange = Stream.iterate(startDate, date -> date.plusDays(1)) List<LocalDate> datesInRange = Stream.iterate(startDate, date -> date.plusDays(1))
...@@ -543,7 +523,7 @@ public class EngineerCalendarServiceImpl implements EngineerCalendarService { ...@@ -543,7 +523,7 @@ public class EngineerCalendarServiceImpl implements EngineerCalendarService {
for (LocalDate date : datesInRange) { for (LocalDate date : datesInRange) {
String sDate = LocalDateTimeUtil.format(date, PATTERN_DATE); String sDate = LocalDateTimeUtil.format(date, PATTERN_DATE);
EngineerCalendarDTO.Calendar calander = null; EngineerCalendarDTO.Calendar calander = null;
calander = getEmptyCalendar(teamIds.get(0), sDate); calander = getEmptyCalendar(sDate);
if (configs.containsKey(sDate)) { if (configs.containsKey(sDate)) {
List<EngineerCalendarDTO.Content> contents = new ArrayList<>(); List<EngineerCalendarDTO.Content> contents = new ArrayList<>();
// 有配置 // 有配置
...@@ -760,7 +740,7 @@ public class EngineerCalendarServiceImpl implements EngineerCalendarService { ...@@ -760,7 +740,7 @@ public class EngineerCalendarServiceImpl implements EngineerCalendarService {
return !CollectionUtils.isEmpty(configs); return !CollectionUtils.isEmpty(configs);
} }
private EngineerCalendarDTO.Calendar getEmptyCalendar(String teamId, String date) { private EngineerCalendarDTO.Calendar getEmptyCalendar(String date) {
// 初始化一天的日历 // 初始化一天的日历
EngineerCalendarDTO.Calendar calendar = new EngineerCalendarDTO.Calendar(); EngineerCalendarDTO.Calendar calendar = new EngineerCalendarDTO.Calendar();
calendar.setDate(date); calendar.setDate(date);
......
Markdown is supported
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!