Commit b9ee0b92 by huangjinxin

feat:工程师工作地址和首选工作地址相关处理

1 parent 43c2dae6
...@@ -26,5 +26,10 @@ public class EngineerInfoListResp { ...@@ -26,5 +26,10 @@ public class EngineerInfoListResp {
private List<String> tags; private List<String> tags;
private List<String> credentials; private List<String> credentials;
private String grade; private String grade;
/**
* 工作地址
*/
private String workAddress;
} }
} }
...@@ -58,8 +58,11 @@ public class EngineerBusinessEntity implements Serializable { ...@@ -58,8 +58,11 @@ public class EngineerBusinessEntity implements Serializable {
@Column(name = "priority", nullable = false, columnDefinition = "tinyint(4) default '1'") @Column(name = "priority", nullable = false, columnDefinition = "tinyint(4) default '1'")
private int priority; private int priority;
@Column(name = "departure", nullable = false, columnDefinition = "tinyint(4) default '0'") /**
private int departure; * 常规出发地,1配件仓,2家庭住址,3工作地址 默认工作地址
*/
@Column(name = "departure", nullable = false, columnDefinition = "tinyint(4) default '3'")
private int departure = 3;
@Column(name = "dispatch_strategy", nullable = false, length = 32, columnDefinition = "varchar(32) default 'CENTER'") @Column(name = "dispatch_strategy", nullable = false, length = 32, columnDefinition = "varchar(32) default 'CENTER'")
private String dispatchStrategy; private String dispatchStrategy;
......
...@@ -58,6 +58,11 @@ public class EngineerInfoEntity { ...@@ -58,6 +58,11 @@ public class EngineerInfoEntity {
private String address; private String address;
/** /**
* 工作地址
*/
private String workAddress;
/**
* 类型(1全职 2兼职) * 类型(1全职 2兼职)
*/ */
private Integer kind; private Integer kind;
......
...@@ -42,334 +42,335 @@ import java.util.stream.Collectors; ...@@ -42,334 +42,335 @@ import java.util.stream.Collectors;
@Service @Service
public class EngineerServiceImpl implements EngineerService { public class EngineerServiceImpl implements EngineerService {
@Autowired @Autowired
private EngineerInfoDao engineerInfoDao; private EngineerInfoDao engineerInfoDao;
@Autowired @Autowired
private EngineerSkillGroupDao engineerSkillGroupDao; private EngineerSkillGroupDao engineerSkillGroupDao;
@Autowired @Autowired
private OrgGroupDao orgGroupDao; private OrgGroupDao orgGroupDao;
@Autowired @Autowired
private EngineerBusinessDao engineerBusinessDao; private EngineerBusinessDao engineerBusinessDao;
@Autowired @Autowired
private EntityManager entityManager; private EntityManager entityManager;
@Transactional @Transactional
@Override @Override
public Result<?> getEngineerInfoList(String levelType, String levelValue, int page, int size, String kind, String key) { public Result<?> getEngineerInfoList(String levelType, String levelValue, int page, int size, String kind, String key) {
// 查询工程师信息 // 查询工程师信息
Page<EngineerInfoEntity> pg = this.queryEngineerInfoIPage(levelType, levelValue, page, size, kind, key); Page<EngineerInfoEntity> pg = this.queryEngineerInfoIPage(levelType, levelValue, page, size, kind, key);
List<EngineerInfoEntity> records = pg.getContent(); List<EngineerInfoEntity> records = pg.getContent();
// 获取groupIds // 获取groupIds
List<String> groupIds = records.stream().map(EngineerInfoEntity::getGroupId).collect(Collectors.toList()); List<String> groupIds = records.stream().map(EngineerInfoEntity::getGroupId).collect(Collectors.toList());
// 获取Map<groupId, groupName> // 获取Map<groupId, groupName>
HashMap<String, String> groupNames = this.queryGroupNames(groupIds); HashMap<String, String> groupNames = this.queryGroupNames(groupIds);
// 设置返回值 // 设置返回值
EngineerInfoListResp res = new EngineerInfoListResp(); EngineerInfoListResp res = new EngineerInfoListResp();
res.setContent(this.packEngineerInfos(records, groupNames)); res.setContent(this.packEngineerInfos(records, groupNames));
res.setTotal(pg.getTotalElements()); res.setTotal(pg.getTotalElements());
res.setPages(pg.getTotalPages()); res.setPages(pg.getTotalPages());
res.setPageCurrent(pg.getNumber() + 1); res.setPageCurrent(pg.getNumber() + 1);
res.setPageSize(pg.getSize()); res.setPageSize(pg.getSize());
return Result.success(res); return Result.success(res);
} }
@Override @Override
public Result<?> getEngineerInfoDetail(String engineerCode) throws BusinessException { public Result<?> getEngineerInfoDetail(String engineerCode) throws BusinessException {
// 获取技术员基础信息详情 // 获取技术员基础信息详情
// 获取技术员列表 // 获取技术员列表
EngineerInfoEntity engineer = engineerInfoDao.getByEngineerCode(engineerCode); EngineerInfoEntity engineer = engineerInfoDao.getByEngineerCode(engineerCode);
if (engineer == null) { if (engineer == null) {
throw new BusinessException("技术员不存在"); throw new BusinessException("技术员不存在");
} }
String groupId = engineer.getGroupId(); String groupId = engineer.getGroupId();
HashMap<String, String> groupNames = this.queryGroupNames(List.of(groupId)); HashMap<String, String> groupNames = this.queryGroupNames(List.of(groupId));
List<EngineerInfoListResp.EngineerInfo> items = this.packEngineerInfos(List.of(engineer), groupNames); List<EngineerInfoListResp.EngineerInfo> items = this.packEngineerInfos(List.of(engineer), groupNames);
if (items.isEmpty()) { if (items.isEmpty()) {
throw new BusinessException("技术员不存在"); throw new BusinessException("技术员不存在");
} }
return Result.success(items.get(0)); return Result.success(items.get(0));
} }
@Transactional @Transactional
@Override @Override
public Result<?> getEngineerSkillList(String levelType, String levelValue, int page, int size, String kind, String key) { public Result<?> getEngineerSkillList(String levelType, String levelValue, int page, int size, String kind, String key) {
// 获取技术员技能列表 // 获取技术员技能列表
Page<EngineerInfoEntity> pg = this.queryEngineerInfoIPage(levelType, levelValue, page, size, kind, key); Page<EngineerInfoEntity> pg = this.queryEngineerInfoIPage(levelType, levelValue, page, size, kind, key);
List<EngineerInfoEntity> engineers = pg.getContent(); List<EngineerInfoEntity> engineers = pg.getContent();
EngineerSkillListResp res = new EngineerSkillListResp(); EngineerSkillListResp res = new EngineerSkillListResp();
res.setTotal(pg.getTotalElements()); res.setTotal(pg.getTotalElements());
res.setPages(pg.getTotalPages()); res.setPages(pg.getTotalPages());
res.setPageCurrent(pg.getNumber() + 1); res.setPageCurrent(pg.getNumber() + 1);
res.setPageSize(pg.getSize()); res.setPageSize(pg.getSize());
res.setContent(this.packEngineerSkills(engineers)); res.setContent(this.packEngineerSkills(engineers));
return Result.success(res); return Result.success(res);
} }
@Override @Override
public Result<?> getEngineerSkillDetail(String engineerCode) throws BusinessException { public Result<?> getEngineerSkillDetail(String engineerCode) throws BusinessException {
// 获取工程师技能详情 // 获取工程师技能详情
EngineerInfoEntity engineer = engineerInfoDao.getByEngineerCode(engineerCode); EngineerInfoEntity engineer = engineerInfoDao.getByEngineerCode(engineerCode);
if (engineer == null) { if (engineer == null) {
throw new BusinessException("技术员不存在"); throw new BusinessException("技术员不存在");
} }
List<EngineerSkillListResp.EngineerSkill> items = this.packEngineerSkills(List.of(engineer)); List<EngineerSkillListResp.EngineerSkill> items = this.packEngineerSkills(List.of(engineer));
if (items.isEmpty()) { if (items.isEmpty()) {
throw new BusinessException("技术员不存在"); throw new BusinessException("技术员不存在");
} }
return Result.success(items.get(0)); return Result.success(items.get(0));
} }
@Transactional @Transactional
@Override @Override
public Result<?> engineerSkillUpdate(String engineerCode, List<String> skillGroupIds) { public Result<?> engineerSkillUpdate(String engineerCode, List<String> skillGroupIds) {
// 更新技术员技能 // 更新技术员技能
// 先将所有技能更新为0-不可用状态 // 先将所有技能更新为0-不可用状态
CriteriaBuilder cb = entityManager.getCriteriaBuilder(); CriteriaBuilder cb = entityManager.getCriteriaBuilder();
CriteriaUpdate<EngineerSkillGroupEntity> update = cb.createCriteriaUpdate(EngineerSkillGroupEntity.class); CriteriaUpdate<EngineerSkillGroupEntity> update = cb.createCriteriaUpdate(EngineerSkillGroupEntity.class);
Root<EngineerSkillGroupEntity> root = update.from(EngineerSkillGroupEntity.class); Root<EngineerSkillGroupEntity> root = update.from(EngineerSkillGroupEntity.class);
update.set(root.get("status"), 0); update.set(root.get("status"), 0);
update.where(cb.equal(root.get("engineerCode"), engineerCode)); update.where(cb.equal(root.get("engineerCode"), engineerCode));
entityManager.createQuery(update).executeUpdate(); entityManager.createQuery(update).executeUpdate();
if (skillGroupIds.isEmpty()) { if (skillGroupIds.isEmpty()) {
return null; return null;
} }
// 更新categoryIds状态为1 // 更新categoryIds状态为1
CriteriaBuilder cb1 = entityManager.getCriteriaBuilder(); CriteriaBuilder cb1 = entityManager.getCriteriaBuilder();
CriteriaUpdate<EngineerSkillGroupEntity> update1 = cb.createCriteriaUpdate(EngineerSkillGroupEntity.class); CriteriaUpdate<EngineerSkillGroupEntity> update1 = cb.createCriteriaUpdate(EngineerSkillGroupEntity.class);
Root<EngineerSkillGroupEntity> root1 = update1.from(EngineerSkillGroupEntity.class); Root<EngineerSkillGroupEntity> root1 = update1.from(EngineerSkillGroupEntity.class);
update1.set(root1.get("status"), 1); update1.set(root1.get("status"), 1);
update1.where( update1.where(
cb1.equal(root1.get("engineerCode"), engineerCode), cb1.equal(root1.get("engineerCode"), engineerCode),
root1.get("skillGroupCode").in(skillGroupIds) root1.get("skillGroupCode").in(skillGroupIds)
); );
int n = entityManager.createQuery(update1).executeUpdate(); int n = entityManager.createQuery(update1).executeUpdate();
if (skillGroupIds.size() == n) { if (skillGroupIds.size() == n) {
// 更新记录条数等于提交记录条数 // 更新记录条数等于提交记录条数
return null; return null;
} }
// 可能存在engineerSkill表不存在的记录,需要补充录入 // 可能存在engineerSkill表不存在的记录,需要补充录入
List<Boolean> statuses = new ArrayList<Boolean>(Arrays.asList(true, false)); List<Boolean> statuses = new ArrayList<Boolean>(Arrays.asList(true, false));
List<String> engineerCodes = new ArrayList<>(Collections.singletonList(engineerCode)); List<String> engineerCodes = new ArrayList<>(Collections.singletonList(engineerCode));
HashMap<String, List<String>> engineerSkills = this.queryEngineerSkills(engineerCodes, statuses); HashMap<String, List<String>> engineerSkills = this.queryEngineerSkills(engineerCodes, statuses);
Set<String> sInput = new HashSet<>(skillGroupIds); Set<String> sInput = new HashSet<>(skillGroupIds);
Set<String> sDB = new HashSet<>(engineerSkills.getOrDefault(engineerCode, new ArrayList<>())); Set<String> sDB = new HashSet<>(engineerSkills.getOrDefault(engineerCode, new ArrayList<>()));
sInput.removeAll(sDB); sInput.removeAll(sDB);
for (String skillGroupId : sInput) { for (String skillGroupId : sInput) {
EngineerSkillGroupEntity e = new EngineerSkillGroupEntity(); EngineerSkillGroupEntity e = new EngineerSkillGroupEntity();
e.setEngineerCode(engineerCode); e.setEngineerCode(engineerCode);
e.setSkillGroupCode(skillGroupId); e.setSkillGroupCode(skillGroupId);
e.setBeanStatus(Boolean.TRUE); e.setBeanStatus(Boolean.TRUE);
e.setDescription(""); e.setDescription("");
e.setStatus(true); e.setStatus(true);
e.setMemo(""); e.setMemo("");
e.setCreateTime(LocalDateTime.now()); e.setCreateTime(LocalDateTime.now());
e.setUpdateTime(LocalDateTime.now()); e.setUpdateTime(LocalDateTime.now());
entityManager.persist(e); entityManager.persist(e);
} }
return null; return null;
} }
@Transactional @Transactional
@Override @Override
public Result<?> getEngineerBusinessList(String levelType, String levelValue, int page, int size, String kind, String key) { public Result<?> getEngineerBusinessList(String levelType, String levelValue, int page, int size, String kind, String key) {
// 技术员业务属性配置列表 // 技术员业务属性配置列表
// 查询技术员列表 // 查询技术员列表
Page<EngineerInfoEntity> pg = this.queryEngineerInfoIPage(levelType, levelValue, page, size, kind, key); Page<EngineerInfoEntity> pg = this.queryEngineerInfoIPage(levelType, levelValue, page, size, kind, key);
List<EngineerInfoEntity> engineers = pg.getContent(); List<EngineerInfoEntity> engineers = pg.getContent();
// 查询技术员业务属性 // 查询技术员业务属性
EngineerBusinessListResp res = new EngineerBusinessListResp(); EngineerBusinessListResp res = new EngineerBusinessListResp();
res.setTotal(pg.getTotalElements()); res.setTotal(pg.getTotalElements());
res.setPages(pg.getTotalPages()); res.setPages(pg.getTotalPages());
res.setPageCurrent(pg.getNumber() + 1); res.setPageCurrent(pg.getNumber() + 1);
res.setPageSize(pg.getSize()); res.setPageSize(pg.getSize());
res.setContent(this.packEngineerBusinesses(engineers)); res.setContent(this.packEngineerBusinesses(engineers));
return Result.success(res); return Result.success(res);
} }
@Override @Override
public Result<?> getEngineerBusinessDetail(String engineerCode) { public Result<?> getEngineerBusinessDetail(String engineerCode) {
// 获取技术员业务熟悉详情 // 获取技术员业务熟悉详情
EngineerInfoEntity engineer = engineerInfoDao.getByEngineerCode(engineerCode); EngineerInfoEntity engineer = engineerInfoDao.getByEngineerCode(engineerCode);
if (engineer == null) { if (engineer == null) {
throw new BusinessException("技术员不存在"); throw new BusinessException("技术员不存在");
} }
List<?> items = this.packEngineerBusinesses(List.of(engineer)); List<?> items = this.packEngineerBusinesses(List.of(engineer));
if (items.isEmpty()) { if (items.isEmpty()) {
throw new BusinessException("技术员不存在"); throw new BusinessException("技术员不存在");
} }
return Result.success(items.get(0)); return Result.success(items.get(0));
} }
@Transactional @Transactional
@Override @Override
public Result<?> engineerBusinessUpdate(String engineerCode, Integer maxNum, Integer departure, Integer priority, public Result<?> engineerBusinessUpdate(String engineerCode, Integer maxNum, Integer departure, Integer priority,
String workOn, String workOff, String transportMode) { String workOn, String workOff, String transportMode) {
// 计算时间差 // 计算时间差
int minute = this.getMinuteDiff(TimeUtils.time2LocalTime(workOn), TimeUtils.time2LocalTime(workOff)); int minute = this.getMinuteDiff(TimeUtils.time2LocalTime(workOn), TimeUtils.time2LocalTime(workOff));
// 技术员业务属性配置修改 // 技术员业务属性配置修改
CriteriaBuilder cb = entityManager.getCriteriaBuilder(); CriteriaBuilder cb = entityManager.getCriteriaBuilder();
CriteriaUpdate<EngineerBusinessEntity> update = cb.createCriteriaUpdate(EngineerBusinessEntity.class); CriteriaUpdate<EngineerBusinessEntity> update = cb.createCriteriaUpdate(EngineerBusinessEntity.class);
Root<EngineerBusinessEntity> root = update.from(EngineerBusinessEntity.class); Root<EngineerBusinessEntity> root = update.from(EngineerBusinessEntity.class);
update.set(root.get("maxNum"), maxNum); update.set(root.get("maxNum"), maxNum);
update.set(root.get("departure"), departure); update.set(root.get("departure"), departure);
update.set(root.get("priority"), priority); update.set(root.get("priority"), priority);
update.set(root.get("workOn"), workOn); update.set(root.get("workOn"), workOn);
update.set(root.get("workOff"), workOff); update.set(root.get("workOff"), workOff);
update.set(root.get("maxMinute"), minute); update.set(root.get("maxMinute"), minute);
update.set(root.get("vehicle"), transportMode); update.set(root.get("vehicle"), transportMode);
update.where(cb.equal(root.get("engineerCode"), engineerCode)); update.where(cb.equal(root.get("engineerCode"), engineerCode));
entityManager.createQuery(update).executeUpdate(); entityManager.createQuery(update).executeUpdate();
return Result.success(null); return Result.success(null);
} }
private Page<EngineerInfoEntity> queryEngineerInfoIPage(String levelType, String levelValue, int page, int size, String kind, String key) { private Page<EngineerInfoEntity> queryEngineerInfoIPage(String levelType, String levelValue, int page, int size, String kind, String key) {
// 分页查询工程师基础信息 // 分页查询工程师基础信息
// 查询技术员所在的groupIds // 查询技术员所在的groupIds
List<OrgGroupEntity> groups = new ArrayList<>(); List<OrgGroupEntity> groups = new ArrayList<>();
if (levelType.equals("cluster")) { if (levelType.equals("cluster")) {
groups = orgGroupDao.findAllByClusterId(levelValue); groups = orgGroupDao.findAllByClusterId(levelValue);
} else if (levelType.equals("branch")) { } else if (levelType.equals("branch")) {
groups = orgGroupDao.findAllByBranchId(levelValue); groups = orgGroupDao.findAllByBranchId(levelValue);
} else if (levelType.equals("group")) { } else if (levelType.equals("group")) {
groups = orgGroupDao.findAllByGroupId(levelValue); groups = orgGroupDao.findAllByGroupId(levelValue);
} }
List<String> groupIds = groups.stream().map(OrgGroupEntity::getGroupId).collect(Collectors.toList()); List<String> groupIds = groups.stream().map(OrgGroupEntity::getGroupId).collect(Collectors.toList());
Pageable pageable = PageRequest.of(page, size); Pageable pageable = PageRequest.of(page, size);
Specification<EngineerInfoEntity> spec = (root, query, cb) -> { Specification<EngineerInfoEntity> spec = (root, query, cb) -> {
List<Predicate> predicates = new ArrayList<>(); List<Predicate> predicates = new ArrayList<>();
if (groupIds != null && !groupIds.isEmpty()) { if (groupIds != null && !groupIds.isEmpty()) {
predicates.add(root.get("groupId").in(groupIds)); predicates.add(root.get("groupId").in(groupIds));
} }
if (StringUtils.hasText(kind)) { if (StringUtils.hasText(kind)) {
int kindValue = kind.equals("fullJob") ? 1 : 2; int kindValue = kind.equals("fullJob") ? 1 : 2;
predicates.add(cb.equal(root.get("kind"), kindValue)); predicates.add(cb.equal(root.get("kind"), kindValue));
} }
if (StringUtils.hasText(key)) { if (StringUtils.hasText(key)) {
String likeKey = "%" + key + "%"; String likeKey = "%" + key + "%";
predicates.add(cb.or( predicates.add(cb.or(
cb.like(root.get("phone"), likeKey), cb.like(root.get("phone"), likeKey),
cb.like(root.get("name"), likeKey), cb.like(root.get("name"), likeKey),
cb.like(root.get("engineerCode"), likeKey) cb.like(root.get("engineerCode"), likeKey)
)); ));
} }
return cb.and(predicates.toArray(new Predicate[0])); return cb.and(predicates.toArray(new Predicate[0]));
}; };
return engineerInfoDao.findAll(spec, pageable); return engineerInfoDao.findAll(spec, pageable);
} }
private HashMap<String, String> queryGroupNames(List<String> groupIds) { private HashMap<String, String> queryGroupNames(List<String> groupIds) {
//查询小组名称映射关系 //查询小组名称映射关系
HashMap<String, String> map = new HashMap<>(); HashMap<String, String> map = new HashMap<>();
if (groupIds.isEmpty()) { if (groupIds.isEmpty()) {
return map; return map;
} }
List<OrgGroupEntity> groups = orgGroupDao.findByGroupIdIn(groupIds); List<OrgGroupEntity> groups = orgGroupDao.findByGroupIdIn(groupIds);
for (OrgGroupEntity g : groups) { for (OrgGroupEntity g : groups) {
map.put(g.getGroupId(), g.getGroupName()); map.put(g.getGroupId(), g.getGroupName());
} }
return map; return map;
} }
private HashMap<String, List<String>> queryEngineerSkills(List<String> engineerCodes, List<Boolean> statuses) { private HashMap<String, List<String>> queryEngineerSkills(List<String> engineerCodes, List<Boolean> statuses) {
// 获取engineerCode对应的技能表, HashMap<engineerCode, List<skillId>> // 获取engineerCode对应的技能表, HashMap<engineerCode, List<skillId>>
HashMap<String, List<String>> map = new HashMap<>(); HashMap<String, List<String>> map = new HashMap<>();
if (engineerCodes.isEmpty()) { if (engineerCodes.isEmpty()) {
return map; return map;
} }
List<EngineerSkillGroupEntity> records = engineerSkillGroupDao.findByEngineerCodeInAndStatusIn(engineerCodes, statuses); List<EngineerSkillGroupEntity> records = engineerSkillGroupDao.findByEngineerCodeInAndStatusIn(engineerCodes, statuses);
if (ListUtils.isEmpty(records)) { if (ListUtils.isEmpty(records)) {
return map; return map;
} }
Comparator<EngineerSkillGroupEntity> ec = Comparator.comparing(EngineerSkillGroupEntity::getEngineerCode, String.CASE_INSENSITIVE_ORDER); Comparator<EngineerSkillGroupEntity> ec = Comparator.comparing(EngineerSkillGroupEntity::getEngineerCode, String.CASE_INSENSITIVE_ORDER);
List<EngineerSkillGroupEntity> results = records.stream().sorted(ec).collect(Collectors.toList()); List<EngineerSkillGroupEntity> results = records.stream().sorted(ec).collect(Collectors.toList());
// 根据engineerCode分组 // 根据engineerCode分组
Map<String, List<EngineerSkillGroupEntity>> g = results.stream().collect(Collectors.groupingBy(EngineerSkillGroupEntity::getEngineerCode)); Map<String, List<EngineerSkillGroupEntity>> g = results.stream().collect(Collectors.groupingBy(EngineerSkillGroupEntity::getEngineerCode));
for (String engineerCode : g.keySet()) { for (String engineerCode : g.keySet()) {
// 技术员技能ID列表 // 技术员技能ID列表
List<String> skillGroupIds = g.get(engineerCode).stream().map(EngineerSkillGroupEntity::getSkillGroupCode).collect(Collectors.toList()); List<String> skillGroupIds = g.get(engineerCode).stream().map(EngineerSkillGroupEntity::getSkillGroupCode).collect(Collectors.toList());
map.put(engineerCode, skillGroupIds); map.put(engineerCode, skillGroupIds);
} }
return map; return map;
} }
private HashMap<String, EngineerBusinessEntity> queryEngineerBusiness(List<String> engineerCodes) { private HashMap<String, EngineerBusinessEntity> queryEngineerBusiness(List<String> engineerCodes) {
HashMap<String, EngineerBusinessEntity> map = new HashMap<>(); HashMap<String, EngineerBusinessEntity> map = new HashMap<>();
if (engineerCodes.isEmpty()) { if (engineerCodes.isEmpty()) {
return map; return map;
} }
List<EngineerBusinessEntity> records = engineerBusinessDao.findByEngineerCodeIn(engineerCodes); List<EngineerBusinessEntity> records = engineerBusinessDao.findByEngineerCodeIn(engineerCodes);
for (EngineerBusinessEntity r : records) { for (EngineerBusinessEntity r : records) {
map.put(r.getEngineerCode(), r); map.put(r.getEngineerCode(), r);
} }
return map; return map;
} }
private List<EngineerInfoListResp.EngineerInfo> packEngineerInfos(List<EngineerInfoEntity> engineers, HashMap<String, String> groups) { private List<EngineerInfoListResp.EngineerInfo> packEngineerInfos(List<EngineerInfoEntity> engineers, HashMap<String, String> groups) {
String groupName, age, kind; String groupName, age, kind;
List<EngineerInfoListResp.EngineerInfo> items = new ArrayList<>(); List<EngineerInfoListResp.EngineerInfo> items = new ArrayList<>();
for (EngineerInfoEntity e : engineers) { for (EngineerInfoEntity e : engineers) {
EngineerInfoListResp.EngineerInfo item = new EngineerInfoListResp.EngineerInfo(); EngineerInfoListResp.EngineerInfo item = new EngineerInfoListResp.EngineerInfo();
item.setEngineerCode(e.getEngineerCode()); item.setEngineerCode(e.getEngineerCode());
item.setNumber(e.getEngineerCode()); item.setNumber(e.getEngineerCode());
item.setName(e.getName()); item.setName(e.getName());
item.setSex(e.getGender()); item.setSex(e.getGender());
item.setPhone(e.getPhone()); item.setPhone(e.getPhone());
item.setAddress(e.getAddress()); item.setAddress(e.getAddress());
item.setGrade(e.getGrade()); item.setGrade(e.getGrade());
item.setWorkAddress(e.getWorkAddress());
// group name
groupName = groups.getOrDefault(e.getGroupId(), ""); // group name
item.setGroupName(groupName); groupName = groups.getOrDefault(e.getGroupId(), "");
item.setGroupName(groupName);
// 年龄
age = this.getEngineerAge(e.getBirth()); // 年龄
item.setAge(age); age = this.getEngineerAge(e.getBirth());
item.setAge(age);
// 工作类型:全职/兼职
kind = (e.getKind() == 1) ? "fullJob" : "partJob"; // 工作类型:全职/兼职
item.setKind(kind); kind = (e.getKind() == 1) ? "fullJob" : "partJob";
item.setKind(kind);
if (e.getCredentials() != null) {
item.setCredentials(Arrays.asList(e.getCredentials().split("、"))); if (e.getCredentials() != null) {
} else { item.setCredentials(Arrays.asList(e.getCredentials().split("、")));
item.setCredentials(new ArrayList<String>()); } else {
} item.setCredentials(new ArrayList<String>());
}
// 标签
// 标签
/* /*
List<String> tags = new ArrayList<>(); List<String> tags = new ArrayList<>();
if (e.getTags() != null && !e.getTags().isEmpty()) { if (e.getTags() != null && !e.getTags().isEmpty()) {
...@@ -380,121 +381,121 @@ public class EngineerServiceImpl implements EngineerService { ...@@ -380,121 +381,121 @@ public class EngineerServiceImpl implements EngineerService {
item.setTags(tags); item.setTags(tags);
*/ */
items.add(item); items.add(item);
} }
return items; return items;
} }
private List<EngineerSkillListResp.EngineerSkill> packEngineerSkills(List<EngineerInfoEntity> engineers) { private List<EngineerSkillListResp.EngineerSkill> packEngineerSkills(List<EngineerInfoEntity> engineers) {
// 获取groupId类表 // 获取groupId类表
List<String> groupIds = engineers.stream().map(EngineerInfoEntity::getGroupId).collect(Collectors.toList()); List<String> groupIds = engineers.stream().map(EngineerInfoEntity::getGroupId).collect(Collectors.toList());
HashMap<String, String> groupNames = this.queryGroupNames(groupIds); HashMap<String, String> groupNames = this.queryGroupNames(groupIds);
// 获取技术员code列表 // 获取技术员code列表
List<String> engineerCodes = engineers.stream().map(EngineerInfoEntity::getEngineerCode).collect(Collectors.toList()); List<String> engineerCodes = engineers.stream().map(EngineerInfoEntity::getEngineerCode).collect(Collectors.toList());
// 获取技术员的可用技能列表 // 获取技术员的可用技能列表
List<Boolean> statuses = Collections.singletonList(true); List<Boolean> statuses = Collections.singletonList(true);
HashMap<String, List<String>> engineerSkillGroups = this.queryEngineerSkills(engineerCodes, statuses); HashMap<String, List<String>> engineerSkillGroups = this.queryEngineerSkills(engineerCodes, statuses);
List<String> emptySkills = Collections.emptyList(); List<String> emptySkills = Collections.emptyList();
List<EngineerSkillListResp.EngineerSkill> items = new ArrayList<>(); List<EngineerSkillListResp.EngineerSkill> items = new ArrayList<>();
for (EngineerInfoEntity e : engineers) { for (EngineerInfoEntity e : engineers) {
EngineerSkillListResp.EngineerSkill skill = new EngineerSkillListResp.EngineerSkill(); EngineerSkillListResp.EngineerSkill skill = new EngineerSkillListResp.EngineerSkill();
skill.setEngineerCode(e.getEngineerCode()); skill.setEngineerCode(e.getEngineerCode());
skill.setEngineerName(e.getName()); skill.setEngineerName(e.getName());
skill.setGroupName(groupNames.getOrDefault(e.getGroupId(), "")); skill.setGroupName(groupNames.getOrDefault(e.getGroupId(), ""));
skill.setUpdateTime(TimeUtils.IsoLocalDateTime2String(e.getUpdateTime())); skill.setUpdateTime(TimeUtils.IsoLocalDateTime2String(e.getUpdateTime()));
// 获取一个工程师的技能列表 // 获取一个工程师的技能列表
skill.setSkillGroupIds(engineerSkillGroups.getOrDefault(e.getEngineerCode(), emptySkills)); skill.setSkillGroupIds(engineerSkillGroups.getOrDefault(e.getEngineerCode(), emptySkills));
items.add(skill); items.add(skill);
} }
return items; return items;
} }
private List<EngineerBusinessListResp.EngineerBusiness> packEngineerBusinesses(List<EngineerInfoEntity> engineers) { private List<EngineerBusinessListResp.EngineerBusiness> packEngineerBusinesses(List<EngineerInfoEntity> engineers) {
// 获取技术员code列表 // 获取技术员code列表
List<String> engineerCodes = engineers.stream().map(EngineerInfoEntity::getEngineerCode).collect(Collectors.toList()); List<String> engineerCodes = engineers.stream().map(EngineerInfoEntity::getEngineerCode).collect(Collectors.toList());
List<String> groupIds = engineers.stream().map(EngineerInfoEntity::getGroupId).collect(Collectors.toList()); List<String> groupIds = engineers.stream().map(EngineerInfoEntity::getGroupId).collect(Collectors.toList());
HashMap<String, String> groupNames = this.queryGroupNames(groupIds); HashMap<String, String> groupNames = this.queryGroupNames(groupIds);
HashMap<String, EngineerBusinessEntity> buss = this.queryEngineerBusiness(engineerCodes); HashMap<String, EngineerBusinessEntity> buss = this.queryEngineerBusiness(engineerCodes);
List<EngineerBusinessListResp.EngineerBusiness> items = new ArrayList<>(); List<EngineerBusinessListResp.EngineerBusiness> items = new ArrayList<>();
for (EngineerInfoEntity e : engineers) { for (EngineerInfoEntity e : engineers) {
EngineerBusinessListResp.EngineerBusiness item = new EngineerBusinessListResp.EngineerBusiness(); EngineerBusinessListResp.EngineerBusiness item = new EngineerBusinessListResp.EngineerBusiness();
EngineerBusinessEntity b = buss.getOrDefault(e.getEngineerCode(), null); EngineerBusinessEntity b = buss.getOrDefault(e.getEngineerCode(), null);
if (b == null) { if (b == null) {
// 若没有配置,则不返回, 由同步程序初始化 // 若没有配置,则不返回, 由同步程序初始化
continue; continue;
} }
item.setEngineerCode(e.getEngineerCode()); item.setEngineerCode(e.getEngineerCode());
item.setGroupName(groupNames.getOrDefault(e.getGroupId(), "")); item.setGroupName(groupNames.getOrDefault(e.getGroupId(), ""));
item.setEngineerName(e.getName()); item.setEngineerName(e.getName());
item.setKind((e.getKind() == 1) ? "fullJob" : "partJob"); item.setKind((e.getKind() == 1) ? "fullJob" : "partJob");
item.setAddress(b.getAddress()); item.setAddress(b.getAddress());
item.setLocation(String.format("%s,%s", b.getX(), b.getY())); item.setLocation(String.format("%s,%s", b.getX(), b.getY()));
item.setWorkOn(b.getWorkOn()); item.setWorkOn(b.getWorkOn());
item.setWorkOff(b.getWorkOff()); item.setWorkOff(b.getWorkOff());
item.setTransportMode(b.getVehicle()); item.setTransportMode(b.getVehicle());
item.setDeparture(b.getDeparture()); item.setDeparture(b.getDeparture());
item.setMaxMinute(b.getMaxMinute()); item.setMaxMinute(b.getMaxMinute());
item.setMaxNum(b.getMaxNum()); item.setMaxNum(b.getMaxNum());
item.setPriority(b.getPriority()); item.setPriority(b.getPriority());
items.add(item); items.add(item);
} }
return items; return items;
} }
private HashMap<String, Integer> getEngineerSkillIds(List<String> skillIds, HashMap<String, Integer> engineerSkillIds) { private HashMap<String, Integer> getEngineerSkillIds(List<String> skillIds, HashMap<String, Integer> engineerSkillIds) {
HashMap<String, Integer> map = new HashMap<>(); HashMap<String, Integer> map = new HashMap<>();
for (String skillId : skillIds) { for (String skillId : skillIds) {
map.put(skillId, engineerSkillIds.getOrDefault(skillId, 0)); map.put(skillId, engineerSkillIds.getOrDefault(skillId, 0));
} }
return map; return map;
} }
private String getEngineerAge(String birth) { private String getEngineerAge(String birth) {
// 获取工程师年龄 // 获取工程师年龄
if (birth.isEmpty()) { if (birth.isEmpty()) {
return ""; return "";
} }
int age; int age;
SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd"); SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd");
try { try {
Date birthDate = dateFormat.parse(birth); Date birthDate = dateFormat.parse(birth);
Calendar birthCalendar = Calendar.getInstance(); Calendar birthCalendar = Calendar.getInstance();
birthCalendar.setTime(birthDate); birthCalendar.setTime(birthDate);
Calendar nowCalendar = Calendar.getInstance(); Calendar nowCalendar = Calendar.getInstance();
age = nowCalendar.get(Calendar.YEAR) - birthCalendar.get(Calendar.YEAR); age = nowCalendar.get(Calendar.YEAR) - birthCalendar.get(Calendar.YEAR);
if (nowCalendar.get(Calendar.DAY_OF_YEAR) < birthCalendar.get(Calendar.DAY_OF_YEAR)) { if (nowCalendar.get(Calendar.DAY_OF_YEAR) < birthCalendar.get(Calendar.DAY_OF_YEAR)) {
age--; age--;
} }
} catch (Exception e) { } catch (Exception e) {
return ""; return "";
} }
return (age <= 0) ? "" : Integer.toString(age); return (age <= 0) ? "" : Integer.toString(age);
} }
private int getMinuteDiff(LocalTime tBegin, LocalTime tEnd) { private int getMinuteDiff(LocalTime tBegin, LocalTime tEnd) {
int r = tBegin.compareTo(tEnd); int r = tBegin.compareTo(tEnd);
if (r == 0) { if (r == 0) {
return 0; return 0;
} }
LocalDateTime dtBegin = LocalDateTime.of(LocalDateTime.now().toLocalDate(), tBegin); LocalDateTime dtBegin = LocalDateTime.of(LocalDateTime.now().toLocalDate(), tBegin);
LocalDateTime dtEnd; LocalDateTime dtEnd;
if (r < 0) { if (r < 0) {
dtEnd = LocalDateTime.of(LocalDateTime.now().toLocalDate(), tEnd); dtEnd = LocalDateTime.of(LocalDateTime.now().toLocalDate(), tEnd);
} else { } else {
dtEnd = LocalDateTime.of(LocalDateTime.now().plusDays(1).toLocalDate(), tEnd); dtEnd = LocalDateTime.of(LocalDateTime.now().plusDays(1).toLocalDate(), tEnd);
} }
Duration duration = Duration.between(dtBegin, dtEnd); Duration duration = Duration.between(dtBegin, dtEnd);
return (int) duration.toMinutes(); return (int) duration.toMinutes();
} }
} }
Markdown is supported
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!