Commit 4629090e by 王力

Merge branch 'dev_mp2jpa0809' into 'develop'

Dev mp2jpa0809

See merge request !326
2 parents 49edbc50 6a51be14
...@@ -31,8 +31,8 @@ public class EngineerController { ...@@ -31,8 +31,8 @@ public class EngineerController {
@GetMapping("/engineer/info/list") @GetMapping("/engineer/info/list")
public Result<?> getEngineerInfoList(@RequestParam String levelType, public Result<?> getEngineerInfoList(@RequestParam String levelType,
@RequestParam String levelValue, @RequestParam String levelValue,
@RequestParam long page, @RequestParam int page,
@RequestParam long size, @RequestParam int size,
@RequestParam(required = false) String kind, @RequestParam(required = false) String kind,
@RequestParam(required = false) String key) { @RequestParam(required = false) String key) {
// 获取工程师基础信息列表 // 获取工程师基础信息列表
...@@ -60,8 +60,8 @@ public class EngineerController { ...@@ -60,8 +60,8 @@ public class EngineerController {
@GetMapping("/engineer/skill/list") @GetMapping("/engineer/skill/list")
public Result<?> getEngineerSkillList(@RequestParam String levelType, public Result<?> getEngineerSkillList(@RequestParam String levelType,
@RequestParam String levelValue, @RequestParam String levelValue,
@RequestParam long page, @RequestParam int page,
@RequestParam long size, @RequestParam int size,
@RequestParam(required = false) String kind, @RequestParam(required = false) String kind,
@RequestParam(required = false) String key) { @RequestParam(required = false) String key) {
// 获取工程师技能信息列表 // 获取工程师技能信息列表
...@@ -100,8 +100,8 @@ public class EngineerController { ...@@ -100,8 +100,8 @@ public class EngineerController {
@GetMapping("/engineer/business/list") @GetMapping("/engineer/business/list")
public Result<?> getEngineerBusinessList(@RequestParam String levelType, public Result<?> getEngineerBusinessList(@RequestParam String levelType,
@RequestParam String levelValue, @RequestParam String levelValue,
@RequestParam long page, @RequestParam int page,
@RequestParam long size, @RequestParam int size,
@RequestParam(required = false) String kind, @RequestParam(required = false) String kind,
@RequestParam(required = false) String key) { @RequestParam(required = false) String key) {
// 技术员业务属性配置列表 // 技术员业务属性配置列表
......
...@@ -23,4 +23,6 @@ public interface EngineerBusinessDao extends CrudRepository<EngineerBusinessEnti ...@@ -23,4 +23,6 @@ public interface EngineerBusinessDao extends CrudRepository<EngineerBusinessEnti
void updateEngineerCenter(String address, String x, String y, String engineerCode); void updateEngineerCenter(String address, String x, String y, String engineerCode);
EngineerBusinessEntity getByEngineerCode(String engineerCode); EngineerBusinessEntity getByEngineerCode(String engineerCode);
List<EngineerBusinessEntity> findByEngineerCodeIn(List<String> engineerCodes);
} }
...@@ -10,6 +10,7 @@ public interface EngineerSkillGroupDao extends JpaRepository<EngineerSkillGroupE ...@@ -10,6 +10,7 @@ public interface EngineerSkillGroupDao extends JpaRepository<EngineerSkillGroupE
List<EngineerSkillGroupEntity> findByEngineerCode(String engineerCode); List<EngineerSkillGroupEntity> findByEngineerCode(String engineerCode);
List<EngineerSkillGroupEntity> findByEngineerCodeAndStatus(String engineerCode, boolean status); List<EngineerSkillGroupEntity> findByEngineerCodeAndStatus(String engineerCode, boolean status);
List<EngineerSkillGroupEntity> findByEngineerCodeInAndStatus(List<String> engineerCodes, boolean status); List<EngineerSkillGroupEntity> findByEngineerCodeInAndStatus(List<String> engineerCodes, boolean status);
List<EngineerSkillGroupEntity> findByEngineerCodeInAndStatusIn(List<String> engineerCodes, List<Boolean> status);
List<EngineerSkillGroupEntity> findBySkillGroupCode(String skillGroupCode); List<EngineerSkillGroupEntity> findBySkillGroupCode(String skillGroupCode);
List<EngineerSkillGroupEntity> findBySkillGroupCodeAndStatus(String skillGroupCode, boolean status); List<EngineerSkillGroupEntity> findBySkillGroupCodeAndStatus(String skillGroupCode, boolean status);
} }
...@@ -7,16 +7,16 @@ import java.util.List; ...@@ -7,16 +7,16 @@ import java.util.List;
public interface EngineerService { public interface EngineerService {
// 获取公司列表 // 获取公司列表
Result<?> getEngineerInfoList(String levelType, String levelValue, long page, long size, String kind, String key); Result<?> getEngineerInfoList(String levelType, String levelValue, int page, int size, String kind, String key);
Result<?> getEngineerInfoDetail(String engineerCode); Result<?> getEngineerInfoDetail(String engineerCode);
// 获取工程师技能列表 // 获取工程师技能列表
Result<?> getEngineerSkillList(String levelType, String levelValue, long page, long size, String kind, String key); Result<?> getEngineerSkillList(String levelType, String levelValue, int page, int size, String kind, String key);
Result<?> getEngineerSkillDetail(String engineerCode); Result<?> getEngineerSkillDetail(String engineerCode);
Result<?> engineerSkillUpdate(String engineerCode, List<String> categoryIds); Result<?> engineerSkillUpdate(String engineerCode, List<String> categoryIds);
// 工程师业务属性配置列表 // 工程师业务属性配置列表
Result<?> getEngineerBusinessList(String levelType, String levelValue, long page, long size, String kind, String key); Result<?> getEngineerBusinessList(String levelType, String levelValue, int page, int size, String kind, String key);
Result<?> getEngineerBusinessDetail(String engineerCode); Result<?> getEngineerBusinessDetail(String engineerCode);
// 技术员业务属性配置修改 // 技术员业务属性配置修改
......
package com.dituhui.pea.order.service.impl; package com.dituhui.pea.order.service.impl;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
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.order.common.ListUtils;
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.EngineerBusinessDao;
import com.dituhui.pea.order.dto.*; import com.dituhui.pea.order.dao.EngineerInfoDao;
import com.dituhui.pea.order.entity.*; import com.dituhui.pea.order.dao.EngineerSkillGroupDao;
import com.dituhui.pea.order.dao.OrgGroupDao;
import com.dituhui.pea.order.dto.EngineerBusinessListResp;
import com.dituhui.pea.order.dto.EngineerInfoListResp;
import com.dituhui.pea.order.dto.EngineerSkillListResp;
import com.dituhui.pea.order.entity.EngineerBusinessEntity;
import com.dituhui.pea.order.entity.EngineerInfoEntity;
import com.dituhui.pea.order.entity.EngineerSkillGroupEntity;
import com.dituhui.pea.order.entity.OrgGroupEntity;
import com.dituhui.pea.order.service.EngineerService; import com.dituhui.pea.order.service.EngineerService;
import lombok.extern.slf4j.Slf4j; import lombok.extern.slf4j.Slf4j;
import org.apache.commons.lang3.StringUtils;
import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.data.domain.Page;
import org.springframework.data.domain.PageRequest;
import org.springframework.data.domain.Pageable;
import org.springframework.data.jpa.domain.Specification;
import org.springframework.stereotype.Service; import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional; import org.springframework.transaction.annotation.Transactional;
import org.springframework.util.StringUtils;
import javax.persistence.EntityManager;
import javax.persistence.criteria.CriteriaBuilder;
import javax.persistence.criteria.CriteriaUpdate;
import javax.persistence.criteria.Predicate;
import javax.persistence.criteria.Root;
import java.text.SimpleDateFormat; import java.text.SimpleDateFormat;
import java.time.Duration; import java.time.Duration;
import java.time.LocalDateTime; import java.time.LocalDateTime;
...@@ -28,320 +42,331 @@ import java.util.stream.Collectors; ...@@ -28,320 +42,331 @@ import java.util.stream.Collectors;
@Service @Service
public class EngineerServiceImpl implements EngineerService { public class EngineerServiceImpl implements EngineerService {
@Autowired @Autowired
private EngineerInfoMPDao engineerInfoMPDao; private EngineerInfoDao engineerInfoDao;
@Autowired @Autowired
private EngineerSkillGroupMPDao engineerSkillGroupMPDao; private EngineerSkillGroupDao engineerSkillGroupDao;
@Autowired @Autowired
private OrgGroupMPDao orgGroupMPDao; private OrgGroupDao orgGroupDao;
@Autowired @Autowired
private EngineerBusinessMPDao engineerBusinessDao; private EngineerBusinessDao engineerBusinessDao;
@Autowired
@Transactional private EntityManager entityManager;
@Override
public Result<?> getEngineerInfoList(String levelType, String levelValue, long page, long size, String kind, String key) { @Transactional
// 查询工程师信息 @Override
IPage<EngineerInfo> pg = this.queryEngineerInfoIPage(levelType, levelValue, page, size, kind, key); public Result<?> getEngineerInfoList(String levelType, String levelValue, int page, int size, String kind, String key) {
// 查询工程师信息
List<EngineerInfo> records = pg.getRecords(); Page<EngineerInfoEntity> pg = this.queryEngineerInfoIPage(levelType, levelValue, page, size, kind, key);
// 获取groupIds List<EngineerInfoEntity> records = pg.getContent();
List<String> groupIds = records.stream().map(EngineerInfo::getGroupId).collect(Collectors.toList());
// 获取groupIds
// 获取Map<groupId, groupName> List<String> groupIds = records.stream().map(EngineerInfoEntity::getGroupId).collect(Collectors.toList());
HashMap<String, String> groupNames = this.queryGroupNames(groupIds);
// 获取Map<groupId, groupName>
// 设置返回值 HashMap<String, String> groupNames = this.queryGroupNames(groupIds);
EngineerInfoListResp res = new EngineerInfoListResp();
res.setContent(this.packEngineerInfos(records, groupNames)); // 设置返回值
res.setTotal(pg.getTotal()); EngineerInfoListResp res = new EngineerInfoListResp();
res.setPages(pg.getPages()); res.setContent(this.packEngineerInfos(records, groupNames));
res.setPageCurrent(pg.getCurrent()); res.setTotal(pg.getTotalElements());
res.setPageSize(pg.getSize()); res.setPages(pg.getTotalPages());
res.setPageCurrent(pg.getNumber() + 1);
return Result.success(res); res.setPageSize(pg.getSize());
}
return Result.success(res);
@Override }
public Result<?> getEngineerInfoDetail(String engineerCode) throws BusinessException {
// 获取技术员基础信息详情 @Override
public Result<?> getEngineerInfoDetail(String engineerCode) throws BusinessException {
// 获取技术员列表 // 获取技术员基础信息详情
List<EngineerInfo> records = engineerInfoMPDao.selectByEngineerCode(engineerCode);
if (records.isEmpty()) { // 获取技术员列表
throw new BusinessException("技术员不存在"); EngineerInfoEntity engineer = engineerInfoDao.getByEngineerCode(engineerCode);
} if (engineer == null) {
throw new BusinessException("技术员不存在");
List<String> groupIds = records.stream().map(EngineerInfo::getGroupId).collect(Collectors.toList()); }
HashMap<String, String> groupNames = this.queryGroupNames(groupIds);
String groupId = engineer.getGroupId();
List<EngineerInfoListResp.EngineerInfo> items = this.packEngineerInfos(records, groupNames); HashMap<String, String> groupNames = this.queryGroupNames(List.of(groupId));
if (items.isEmpty()) {
throw new BusinessException("技术员不存在"); List<EngineerInfoListResp.EngineerInfo> items = this.packEngineerInfos(List.of(engineer), groupNames);
} if (items.isEmpty()) {
return Result.success(items.get(0)); throw new BusinessException("技术员不存在");
} }
return Result.success(items.get(0));
@Transactional }
@Override
public Result<?> getEngineerSkillList(String levelType, String levelValue, long page, long size, String kind, String key) { @Transactional
// 获取技术员技能列表 @Override
IPage<EngineerInfo> pg = this.queryEngineerInfoIPage(levelType, levelValue, page, size, kind, key); public Result<?> getEngineerSkillList(String levelType, String levelValue, int page, int size, String kind, String key) {
List<EngineerInfo> engineers = pg.getRecords(); // 获取技术员技能列表
Page<EngineerInfoEntity> pg = this.queryEngineerInfoIPage(levelType, levelValue, page, size, kind, key);
EngineerSkillListResp res = new EngineerSkillListResp(); List<EngineerInfoEntity> engineers = pg.getContent();
res.setTotal(pg.getTotal());
res.setPages(pg.getPages()); EngineerSkillListResp res = new EngineerSkillListResp();
res.setPageCurrent(pg.getCurrent()); res.setTotal(pg.getTotalElements());
res.setPageSize(pg.getSize()); res.setPages(pg.getTotalPages());
res.setContent(this.packEngineerSkills(engineers)); res.setPageCurrent(pg.getNumber() + 1);
return Result.success(res); res.setPageSize(pg.getSize());
} res.setContent(this.packEngineerSkills(engineers));
return Result.success(res);
@Override }
public Result<?> getEngineerSkillDetail(String engineerCode) throws BusinessException {
// 获取工程师技能详情 @Override
List<EngineerInfo> engineers = engineerInfoMPDao.selectByEngineerCode(engineerCode); public Result<?> getEngineerSkillDetail(String engineerCode) throws BusinessException {
if (engineers.isEmpty()) { // 获取工程师技能详情
throw new BusinessException("技术员不存在"); EngineerInfoEntity engineer = engineerInfoDao.getByEngineerCode(engineerCode);
} if (engineer == null) {
List<EngineerSkillListResp.EngineerSkill> items = this.packEngineerSkills(engineers); throw new BusinessException("技术员不存在");
if (items.isEmpty()) { }
throw new BusinessException("技术员不存在"); List<EngineerSkillListResp.EngineerSkill> items = this.packEngineerSkills(List.of(engineer));
} if (items.isEmpty()) {
return Result.success(items.get(0)); throw new BusinessException("技术员不存在");
} }
return Result.success(items.get(0));
@Transactional }
@Override
public Result<?> engineerSkillUpdate(String engineerCode, List<String> skillGroupIds) { @Transactional
// 更新技术员技能 @Override
public Result<?> engineerSkillUpdate(String engineerCode, List<String> skillGroupIds) {
// 先将所有技能更新为0-不可用状态 // 更新技术员技能
LambdaUpdateWrapper<EngineerSkillGroup> wrapper = new LambdaUpdateWrapper<>();
wrapper.eq(EngineerSkillGroup::getEngineerCode, engineerCode).set(EngineerSkillGroup::getStatus, 0); // 先将所有技能更新为0-不可用状态
engineerSkillGroupMPDao.update(null, wrapper); CriteriaBuilder cb = entityManager.getCriteriaBuilder();
if (skillGroupIds.isEmpty()) { CriteriaUpdate<EngineerSkillGroupEntity> update = cb.createCriteriaUpdate(EngineerSkillGroupEntity.class);
return null; Root<EngineerSkillGroupEntity> root = update.from(EngineerSkillGroupEntity.class);
} update.set(root.get("status"), 0);
update.where(cb.equal(root.get("engineerCode"), engineerCode));
// 更新categoryIds状态为1 entityManager.createQuery(update).executeUpdate();
wrapper.eq(EngineerSkillGroup::getEngineerCode, engineerCode);
wrapper.in(EngineerSkillGroup::getSkillGroupCode, skillGroupIds); if (skillGroupIds.isEmpty()) {
wrapper.set(EngineerSkillGroup::getStatus, 1); return null;
int n = engineerSkillGroupMPDao.update(null, wrapper); }
if (skillGroupIds.size() == n) {
// 更新记录条数等于提交记录条数 // 更新categoryIds状态为1
return null; CriteriaBuilder cb1 = entityManager.getCriteriaBuilder();
} CriteriaUpdate<EngineerSkillGroupEntity> update1 = cb.createCriteriaUpdate(EngineerSkillGroupEntity.class);
Root<EngineerSkillGroupEntity> root1 = update1.from(EngineerSkillGroupEntity.class);
// 可能存在engineerSkill表不存在的记录,需要补充录入 update1.set(root1.get("status"), 1);
List<Integer> statuses = new ArrayList<Integer>(Arrays.asList(1, 0)); update1.where(
List<String> engineerCodes = new ArrayList<>(Collections.singletonList(engineerCode)); cb1.equal(root1.get("engineerCode"), engineerCode),
HashMap<String, List<String>> engineerSkills = this.queryEngineerSkills(engineerCodes, statuses); root1.get("skillGroupCode").in(skillGroupIds)
);
Set<String> sInput = new HashSet<>(skillGroupIds); int n = entityManager.createQuery(update1).executeUpdate();
Set<String> sDB = new HashSet<>(engineerSkills.getOrDefault(engineerCode, new ArrayList<>())); if (skillGroupIds.size() == n) {
sInput.removeAll(sDB); // 更新记录条数等于提交记录条数
for (String skillGroupId : sInput) { return null;
EngineerSkillGroup e = new EngineerSkillGroup(); }
e.setEngineerCode(engineerCode);
e.setSkillGroupCode(skillGroupId); // 可能存在engineerSkill表不存在的记录,需要补充录入
e.setDescription(""); List<Boolean> statuses = new ArrayList<Boolean>(Arrays.asList(true, false));
e.setStatus(1); List<String> engineerCodes = new ArrayList<>(Collections.singletonList(engineerCode));
engineerSkillGroupMPDao.insert(e); HashMap<String, List<String>> engineerSkills = this.queryEngineerSkills(engineerCodes, statuses);
}
return null; Set<String> sInput = new HashSet<>(skillGroupIds);
} Set<String> sDB = new HashSet<>(engineerSkills.getOrDefault(engineerCode, new ArrayList<>()));
sInput.removeAll(sDB);
@Transactional for (String skillGroupId : sInput) {
@Override EngineerSkillGroupEntity e = new EngineerSkillGroupEntity();
public Result<?> getEngineerBusinessList(String levelType, String levelValue, long page, long size, String kind, String key) { e.setEngineerCode(engineerCode);
// 技术员业务属性配置列表 e.setSkillGroupCode(skillGroupId);
e.setDescription("");
// 查询技术员列表 e.setStatus(true);
IPage<EngineerInfo> pg = this.queryEngineerInfoIPage(levelType, levelValue, page, size, kind, key); entityManager.persist(e);
List<EngineerInfo> engineers = pg.getRecords(); }
return null;
// 查询技术员业务属性 }
EngineerBusinessListResp res = new EngineerBusinessListResp();
res.setTotal(pg.getTotal()); @Transactional
res.setPages(pg.getPages()); @Override
res.setPageCurrent(pg.getCurrent()); public Result<?> getEngineerBusinessList(String levelType, String levelValue, int page, int size, String kind, String key) {
res.setPageSize(pg.getSize()); // 技术员业务属性配置列表
res.setContent(this.packEngineerBusinesses(engineers));
return Result.success(res); // 查询技术员列表
} Page<EngineerInfoEntity> pg = this.queryEngineerInfoIPage(levelType, levelValue, page, size, kind, key);
List<EngineerInfoEntity> engineers = pg.getContent();
@Override
public Result<?> getEngineerBusinessDetail(String engineerCode) { // 查询技术员业务属性
// 获取技术员业务熟悉详情 EngineerBusinessListResp res = new EngineerBusinessListResp();
List<EngineerInfo> engineers = engineerInfoMPDao.selectByEngineerCode(engineerCode); res.setTotal(pg.getTotalElements());
if (engineers.isEmpty()) { res.setPages(pg.getTotalPages());
throw new BusinessException("技术员不存在"); res.setPageCurrent(pg.getNumber() + 1);
} res.setPageSize(pg.getSize());
List<?> items = this.packEngineerBusinesses(engineers); res.setContent(this.packEngineerBusinesses(engineers));
if (items.isEmpty()) { return Result.success(res);
throw new BusinessException("技术员不存在"); }
}
return Result.success(items.get(0)); @Override
} public Result<?> getEngineerBusinessDetail(String engineerCode) {
// 获取技术员业务熟悉详情
@Transactional EngineerInfoEntity engineer = engineerInfoDao.getByEngineerCode(engineerCode);
@Override if (engineer == null) {
public Result<?> engineerBusinessUpdate(String engineerCode, Integer maxNum, Integer departure, Integer priority, throw new BusinessException("技术员不存在");
String workOn, String workOff, String transportMode) { }
List<?> items = this.packEngineerBusinesses(List.of(engineer));
// 计算时间差 if (items.isEmpty()) {
int minute = this.getMinuteDiff(TimeUtils.time2LocalTime(workOn), TimeUtils.time2LocalTime(workOff)); throw new BusinessException("技术员不存在");
}
// 技术员业务属性配置修改 return Result.success(items.get(0));
LambdaUpdateWrapper<EngineerBusiness> wrapper = new LambdaUpdateWrapper<>(); }
wrapper.eq(EngineerBusiness::getEngineerCode, engineerCode);
wrapper.set(EngineerBusiness::getMaxNum, maxNum); @Transactional
wrapper.set(EngineerBusiness::getDeparture, departure); @Override
wrapper.set(EngineerBusiness::getPriority, priority); public Result<?> engineerBusinessUpdate(String engineerCode, Integer maxNum, Integer departure, Integer priority,
wrapper.set(EngineerBusiness::getWorkOn, workOn); String workOn, String workOff, String transportMode) {
wrapper.set(EngineerBusiness::getWorkOff, workOff);
wrapper.set(EngineerBusiness::getMaxMinute, minute); // 计算时间差
wrapper.set(EngineerBusiness::getVehicle, transportMode); int minute = this.getMinuteDiff(TimeUtils.time2LocalTime(workOn), TimeUtils.time2LocalTime(workOff));
// 更新字段
engineerBusinessDao.update(null, wrapper); // 技术员业务属性配置修改
CriteriaBuilder cb = entityManager.getCriteriaBuilder();
return Result.success(null); CriteriaUpdate<EngineerBusinessEntity> update = cb.createCriteriaUpdate(EngineerBusinessEntity.class);
} Root<EngineerBusinessEntity> root = update.from(EngineerBusinessEntity.class);
update.set(root.get("maxNum"), maxNum);
private IPage<EngineerInfo> queryEngineerInfoIPage(String levelType, String levelValue, long page, long size, String kind, String key) { update.set(root.get("departure"), departure);
// 分页查询工程师基础信息 update.set(root.get("priority"), priority);
update.set(root.get("workOn"), workOn);
// 查询技术员所在的groupIds update.set(root.get("workOff"), workOff);
LambdaQueryWrapper<OrgGroup> wrapper = new LambdaQueryWrapper<>(); update.set(root.get("maxMinute"), minute);
wrapper.select(OrgGroup::getGroupId); update.set(root.get("vehicle"), transportMode);
wrapper.eq(levelType.equals("cluster"), OrgGroup::getClusterId, levelValue); update.where(cb.equal(root.get("engineerCode"), engineerCode));
wrapper.eq(levelType.equals("branch"), OrgGroup::getBranchId, levelValue); entityManager.createQuery(update).executeUpdate();
wrapper.eq(levelType.equals("group"), OrgGroup::getGroupId, levelValue);
List<String> groupIds = orgGroupMPDao.selectList(wrapper).stream().map(OrgGroup::getGroupId).collect(Collectors.toList()); return Result.success(null);
}
LambdaQueryWrapper<EngineerInfo> lqw = new LambdaQueryWrapper<>();
lqw.in(groupIds != null && !groupIds.isEmpty(), EngineerInfo::getGroupId, groupIds); private Page<EngineerInfoEntity> queryEngineerInfoIPage(String levelType, String levelValue, int page, int size, String kind, String key) {
if(StringUtils.isNotEmpty(kind)) { // 分页查询工程师基础信息
lqw.eq(EngineerInfo::getKind, (kind.equals("fullJob")) ? 1 : 2);
} // 查询技术员所在的groupIds
if (StringUtils.isNotEmpty(key)) { List<OrgGroupEntity> groups = new ArrayList<>();
lqw.and(w -> if (levelType.equals("cluster")) {
w.like(EngineerInfo::getPhone, key) groups = orgGroupDao.findAllByClusterId(levelValue);
.or() } else if (levelType.equals("branch")) {
.like(EngineerInfo::getName, key) groups = orgGroupDao.findAllByBranchId(levelValue);
.or() } else if (levelType.equals("group")) {
.like(EngineerInfo::getEngineerCode, key) groups = orgGroupDao.findAllByGroupId(levelValue);
); }
} List<String> groupIds = groups.stream().map(OrgGroupEntity::getGroupId).collect(Collectors.toList());
lqw.orderByAsc(EngineerInfo::getGroupId);
lqw.orderByAsc(EngineerInfo::getEngineerCode); Pageable pageable = PageRequest.of(page, size);
Specification<EngineerInfoEntity> spec = (root, query, cb) -> {
IPage<EngineerInfo> pg = new Page(page, size); List<Predicate> predicates = new ArrayList<>();
engineerInfoMPDao.selectPage(pg, lqw);
return pg; if (groupIds != null && !groupIds.isEmpty()) {
} predicates.add(root.get("groupId").in(groupIds));
}
private HashMap<String, String> queryGroupNames(List<String> groupIds) {
//查询小组名称映射关系 if (StringUtils.hasText(kind)) {
HashMap<String, String> map = new HashMap<>(); int kindValue = kind.equals("fullJob") ? 1 : 2;
predicates.add(cb.equal(root.get("kind"), kindValue));
if (groupIds.isEmpty()) { }
return map;
} if (StringUtils.hasText(key)) {
LambdaQueryWrapper<OrgGroup> lqw = new LambdaQueryWrapper<>(); String likeKey = "%" + key + "%";
lqw.select(OrgGroup::getGroupId, OrgGroup::getGroupName); predicates.add(cb.or(
lqw.in(OrgGroup::getGroupId, groupIds); cb.like(root.get("phone"), likeKey),
List<OrgGroup> groups = orgGroupMPDao.selectList(lqw); cb.like(root.get("name"), likeKey),
for (OrgGroup g : groups) { cb.like(root.get("engineerCode"), likeKey)
map.put(g.getGroupId(), g.getGroupName()); ));
} }
return map; return cb.and(predicates.toArray(new Predicate[0]));
} };
return engineerInfoDao.findAll(spec, pageable);
private HashMap<String, List<String>> queryEngineerSkills(List<String> engineerCodes, List<Integer> statuses) { }
// 获取engineerCode对应的技能表, HashMap<engineerCode, List<skillId>>
private HashMap<String, String> queryGroupNames(List<String> groupIds) {
HashMap<String, List<String>> map = new HashMap<>(); //查询小组名称映射关系
if (engineerCodes.isEmpty()) { HashMap<String, String> map = new HashMap<>();
return map;
} if (groupIds.isEmpty()) {
LambdaQueryWrapper<EngineerSkillGroup> lqw = new LambdaQueryWrapper<>(); return map;
lqw.in(EngineerSkillGroup::getEngineerCode, engineerCodes); }
lqw.in(EngineerSkillGroup::getStatus, statuses); List<OrgGroupEntity> groups = orgGroupDao.findByGroupIdIn(groupIds);
List<EngineerSkillGroup> records = engineerSkillGroupMPDao.selectList(lqw); for (OrgGroupEntity g : groups) {
if(records == null || records.isEmpty()) { map.put(g.getGroupId(), g.getGroupName());
return map; }
} return map;
}
Comparator<EngineerSkillGroup> ec = Comparator.comparing(EngineerSkillGroup::getEngineerCode, String.CASE_INSENSITIVE_ORDER);
List<EngineerSkillGroup> results = records.stream().sorted(ec).collect(Collectors.toList()); private HashMap<String, List<String>> queryEngineerSkills(List<String> engineerCodes, List<Boolean> statuses) {
// 获取engineerCode对应的技能表, HashMap<engineerCode, List<skillId>>
// 根据engineerCode分组 HashMap<String, List<String>> map = new HashMap<>();
Map<String, List<EngineerSkillGroup>> g = results.stream().collect(Collectors.groupingBy(EngineerSkillGroup::getEngineerCode)); if (engineerCodes.isEmpty()) {
return map;
for (String engineerCode : g.keySet()) { }
// 技术员技能ID列表 List<EngineerSkillGroupEntity> records = engineerSkillGroupDao.findByEngineerCodeInAndStatusIn(engineerCodes, statuses);
List<String> skillGroupIds = g.get(engineerCode).stream().map(EngineerSkillGroup::getSkillGroupCode).collect(Collectors.toList()); if (ListUtils.isEmpty(records)) {
map.put(engineerCode, skillGroupIds); return map;
} }
return map;
} Comparator<EngineerSkillGroupEntity> ec = Comparator.comparing(EngineerSkillGroupEntity::getEngineerCode, String.CASE_INSENSITIVE_ORDER);
List<EngineerSkillGroupEntity> results = records.stream().sorted(ec).collect(Collectors.toList());
private HashMap<String, EngineerBusiness> queryEngineerBusiness(List<String> engineerCodes) {
HashMap<String, EngineerBusiness> map = new HashMap<>(); // 根据engineerCode分组
if (engineerCodes.isEmpty()) { Map<String, List<EngineerSkillGroupEntity>> g = results.stream().collect(Collectors.groupingBy(EngineerSkillGroupEntity::getEngineerCode));
return map;
} for (String engineerCode : g.keySet()) {
LambdaQueryWrapper<EngineerBusiness> lqw = new LambdaQueryWrapper<>(); // 技术员技能ID列表
lqw.in(EngineerBusiness::getEngineerCode, engineerCodes); List<String> skillGroupIds = g.get(engineerCode).stream().map(EngineerSkillGroupEntity::getSkillGroupCode).collect(Collectors.toList());
List<EngineerBusiness> records = engineerBusinessDao.selectList(lqw); map.put(engineerCode, skillGroupIds);
for (EngineerBusiness r : records) { }
map.put(r.getEngineerCode(), r); return map;
} }
return map;
} private HashMap<String, EngineerBusinessEntity> queryEngineerBusiness(List<String> engineerCodes) {
HashMap<String, EngineerBusinessEntity> map = new HashMap<>();
private List<EngineerInfoListResp.EngineerInfo> packEngineerInfos(List<EngineerInfo> engineers, HashMap<String, String> groups) { if (engineerCodes.isEmpty()) {
return map;
String groupName, age, kind; }
List<EngineerBusinessEntity> records = engineerBusinessDao.findByEngineerCodeIn(engineerCodes);
List<EngineerInfoListResp.EngineerInfo> items = new ArrayList<>(); for (EngineerBusinessEntity r : records) {
for (EngineerInfo e : engineers) { map.put(r.getEngineerCode(), r);
EngineerInfoListResp.EngineerInfo item = new EngineerInfoListResp.EngineerInfo(); }
item.setEngineerCode(e.getEngineerCode()); return map;
item.setNumber(e.getEngineerCode()); }
item.setName(e.getName());
item.setSex(e.getGender()); private List<EngineerInfoListResp.EngineerInfo> packEngineerInfos(List<EngineerInfoEntity> engineers, HashMap<String, String> groups) {
item.setPhone(e.getPhone());
item.setAddress(e.getAddress()); String groupName, age, kind;
item.setGrade(e.getGrade());
List<EngineerInfoListResp.EngineerInfo> items = new ArrayList<>();
// group name for (EngineerInfoEntity e : engineers) {
groupName = groups.getOrDefault(e.getGroupId(), ""); EngineerInfoListResp.EngineerInfo item = new EngineerInfoListResp.EngineerInfo();
item.setGroupName(groupName); item.setEngineerCode(e.getEngineerCode());
item.setNumber(e.getEngineerCode());
// 年龄 item.setName(e.getName());
age = this.getEngineerAge(e.getBirth()); item.setSex(e.getGender());
item.setAge(age); item.setPhone(e.getPhone());
item.setAddress(e.getAddress());
// 工作类型:全职/兼职 item.setGrade(e.getGrade());
kind = (e.getKind() == 1) ? "fullJob" : "partJob";
item.setKind(kind); // group name
groupName = groups.getOrDefault(e.getGroupId(), "");
if (e.getCredentials() != null) { item.setGroupName(groupName);
item.setCredentials(Arrays.asList(e.getCredentials().split("、")));
} else { // 年龄
item.setCredentials(new ArrayList<String>()); age = this.getEngineerAge(e.getBirth());
} item.setAge(age);
// 标签 // 工作类型:全职/兼职
kind = (e.getKind() == 1) ? "fullJob" : "partJob";
item.setKind(kind);
if (e.getCredentials() != null) {
item.setCredentials(Arrays.asList(e.getCredentials().split("、")));
} 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()) {
for (Map.Entry<String, Object> entry : e.getTags().entrySet()) { for (Map.Entry<String, Object> entry : e.getTags().entrySet()) {
...@@ -349,122 +374,123 @@ public class EngineerServiceImpl implements EngineerService { ...@@ -349,122 +374,123 @@ 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<EngineerInfo> engineers) {
// 获取groupId类表 private List<EngineerSkillListResp.EngineerSkill> packEngineerSkills(List<EngineerInfoEntity> engineers) {
List<String> groupIds = engineers.stream().map(EngineerInfo::getGroupId).collect(Collectors.toList()); // 获取groupId类表
HashMap<String, String> groupNames = this.queryGroupNames(groupIds); List<String> groupIds = engineers.stream().map(EngineerInfoEntity::getGroupId).collect(Collectors.toList());
HashMap<String, String> groupNames = this.queryGroupNames(groupIds);
// 获取技术员code列表
List<String> engineerCodes = engineers.stream().map(EngineerInfo::getEngineerCode).collect(Collectors.toList()); // 获取技术员code列表
List<String> engineerCodes = engineers.stream().map(EngineerInfoEntity::getEngineerCode).collect(Collectors.toList());
// 获取技术员的可用技能列表
List<Integer> statuses = Collections.singletonList(1); // 获取技术员的可用技能列表
HashMap<String, List<String>> engineerSkillGroups = this.queryEngineerSkills(engineerCodes, statuses); List<Boolean> statuses = Collections.singletonList(true);
List<String> emptySkills = Collections.emptyList(); HashMap<String, List<String>> engineerSkillGroups = this.queryEngineerSkills(engineerCodes, statuses);
List<String> emptySkills = Collections.emptyList();
List<EngineerSkillListResp.EngineerSkill> items = new ArrayList<>();
for (EngineerInfo e : engineers) { List<EngineerSkillListResp.EngineerSkill> items = new ArrayList<>();
EngineerSkillListResp.EngineerSkill skill = new EngineerSkillListResp.EngineerSkill(); for (EngineerInfoEntity e : engineers) {
skill.setEngineerCode(e.getEngineerCode()); EngineerSkillListResp.EngineerSkill skill = new EngineerSkillListResp.EngineerSkill();
skill.setEngineerName(e.getName()); skill.setEngineerCode(e.getEngineerCode());
skill.setGroupName(groupNames.getOrDefault(e.getGroupId(), "")); skill.setEngineerName(e.getName());
skill.setUpdateTime(TimeUtils.IsoTimestamp2DateTime(e.getUpdateTime())); skill.setGroupName(groupNames.getOrDefault(e.getGroupId(), ""));
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<EngineerInfo> engineers) {
// 获取技术员code列表 private List<EngineerBusinessListResp.EngineerBusiness> packEngineerBusinesses(List<EngineerInfoEntity> engineers) {
List<String> engineerCodes = engineers.stream().map(EngineerInfo::getEngineerCode).collect(Collectors.toList()); // 获取技术员code列表
List<String> engineerCodes = engineers.stream().map(EngineerInfoEntity::getEngineerCode).collect(Collectors.toList());
List<String> groupIds = engineers.stream().map(EngineerInfo::getGroupId).collect(Collectors.toList());
HashMap<String, String> groupNames = this.queryGroupNames(groupIds); List<String> groupIds = engineers.stream().map(EngineerInfoEntity::getGroupId).collect(Collectors.toList());
HashMap<String, String> groupNames = this.queryGroupNames(groupIds);
HashMap<String, EngineerBusiness> buss = this.queryEngineerBusiness(engineerCodes);
HashMap<String, EngineerBusinessEntity> buss = this.queryEngineerBusiness(engineerCodes);
List<EngineerBusinessListResp.EngineerBusiness> items = new ArrayList<>();
for (EngineerInfo e : engineers) { List<EngineerBusinessListResp.EngineerBusiness> items = new ArrayList<>();
EngineerBusinessListResp.EngineerBusiness item = new EngineerBusinessListResp.EngineerBusiness(); for (EngineerInfoEntity e : engineers) {
EngineerBusiness b = buss.getOrDefault(e.getEngineerCode(), null); EngineerBusinessListResp.EngineerBusiness item = new EngineerBusinessListResp.EngineerBusiness();
if(b == null){ EngineerBusinessEntity b = buss.getOrDefault(e.getEngineerCode(), null);
// 若没有配置,则不返回, 由同步程序初始化 if (b == null) {
continue; // 若没有配置,则不返回, 由同步程序初始化
} continue;
item.setEngineerCode(e.getEngineerCode()); }
item.setGroupName(groupNames.getOrDefault(e.getGroupId(), "")); item.setEngineerCode(e.getEngineerCode());
item.setEngineerName(e.getName()); item.setGroupName(groupNames.getOrDefault(e.getGroupId(), ""));
item.setKind((e.getKind() == 1) ? "fullJob" : "partJob"); item.setEngineerName(e.getName());
item.setAddress(b.getAddress()); item.setKind((e.getKind() == 1) ? "fullJob" : "partJob");
item.setLocation(String.format("%s,%s", b.getX(), b.getY())); item.setAddress(b.getAddress());
item.setWorkOn(b.getWorkOn()); item.setLocation(String.format("%s,%s", b.getX(), b.getY()));
item.setWorkOff(b.getWorkOff()); item.setWorkOn(b.getWorkOn());
item.setTransportMode(b.getVehicle()); item.setWorkOff(b.getWorkOff());
item.setDeparture(b.getDeparture()); item.setTransportMode(b.getVehicle());
item.setMaxMinute(b.getMaxMinute()); item.setDeparture(b.getDeparture());
item.setMaxNum(b.getMaxNum()); item.setMaxMinute(b.getMaxMinute());
item.setPriority(b.getPriority()); item.setMaxNum(b.getMaxNum());
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) {
HashMap<String, Integer> map = new HashMap<>(); private HashMap<String, Integer> getEngineerSkillIds(List<String> skillIds, HashMap<String, Integer> engineerSkillIds) {
for (String skillId : skillIds) { HashMap<String, Integer> map = new HashMap<>();
map.put(skillId, engineerSkillIds.getOrDefault(skillId, 0)); for (String skillId : skillIds) {
} map.put(skillId, engineerSkillIds.getOrDefault(skillId, 0));
return map; }
} return map;
}
private String getEngineerAge(String birth) {
// 获取工程师年龄 private String getEngineerAge(String birth) {
if (birth.isEmpty()) { // 获取工程师年龄
return ""; if (birth.isEmpty()) {
} return "";
int age; }
SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd"); int age;
try { SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd");
Date birthDate = dateFormat.parse(birth); try {
Calendar birthCalendar = Calendar.getInstance(); Date birthDate = dateFormat.parse(birth);
birthCalendar.setTime(birthDate); Calendar birthCalendar = Calendar.getInstance();
Calendar nowCalendar = Calendar.getInstance(); birthCalendar.setTime(birthDate);
age = nowCalendar.get(Calendar.YEAR) - birthCalendar.get(Calendar.YEAR); Calendar nowCalendar = Calendar.getInstance();
if (nowCalendar.get(Calendar.DAY_OF_YEAR) < birthCalendar.get(Calendar.DAY_OF_YEAR)) { age = nowCalendar.get(Calendar.YEAR) - birthCalendar.get(Calendar.YEAR);
age--; if (nowCalendar.get(Calendar.DAY_OF_YEAR) < birthCalendar.get(Calendar.DAY_OF_YEAR)) {
} age--;
} catch (Exception e) { }
return ""; } catch (Exception e) {
} return "";
return (age <= 0) ? "" : Integer.toString(age); }
} return (age <= 0) ? "" : Integer.toString(age);
}
private int getMinuteDiff(LocalTime tBegin, LocalTime tEnd) {
int r = tBegin.compareTo(tEnd); private int getMinuteDiff(LocalTime tBegin, LocalTime tEnd) {
if (r == 0) { int r = tBegin.compareTo(tEnd);
return 0; if (r == 0) {
} return 0;
LocalDateTime dtBegin = LocalDateTime.of(LocalDateTime.now().toLocalDate(), tBegin); }
LocalDateTime dtEnd; LocalDateTime dtBegin = LocalDateTime.of(LocalDateTime.now().toLocalDate(), tBegin);
if(r < 0) { LocalDateTime dtEnd;
dtEnd = LocalDateTime.of(LocalDateTime.now().toLocalDate(), tEnd); if (r < 0) {
} else { dtEnd = LocalDateTime.of(LocalDateTime.now().toLocalDate(), tEnd);
dtEnd = LocalDateTime.of(LocalDateTime.now().plusDays(1).toLocalDate(), tEnd); } else {
} dtEnd = LocalDateTime.of(LocalDateTime.now().plusDays(1).toLocalDate(), tEnd);
Duration duration = Duration.between(dtBegin, dtEnd); }
return (int) duration.toMinutes(); Duration duration = Duration.between(dtBegin, dtEnd);
} 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!