Commit 0c9f6386 by 丁伟峰

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

2 parents ab027b08 3e5a6c06
...@@ -27,6 +27,18 @@ public class EngineerController { ...@@ -27,6 +27,18 @@ public class EngineerController {
return res; return res;
} }
@GetMapping("/engineer/info/detail")
public Result<?> getEngineerInfoDetail(@RequestParam String engineerCode) {
// 获取工程师基础信息列表
Result<?> res = null;
try {
res = engineerService.getEngineerInfoDetail(engineerCode);
} catch (BusinessException e) {
Result.failed(e.getMessage());
}
return res;
}
@GetMapping("/engineer/skill/list") @GetMapping("/engineer/skill/list")
public Result<?> getEngineerSkillList(@RequestParam long page, @RequestParam long size) { public Result<?> getEngineerSkillList(@RequestParam long page, @RequestParam long size) {
// 获取工程师技能信息列表 // 获取工程师技能信息列表
...@@ -39,6 +51,18 @@ public class EngineerController { ...@@ -39,6 +51,18 @@ public class EngineerController {
return res; return res;
} }
@GetMapping("/engineer/skill/detail")
public Result<?> getEngineerSkillDetail(@RequestParam String engineerCode) {
// 获取工程师技能信息列表
Result<?> res = null;
try {
res = engineerService.getEngineerSkillDetail(engineerCode);
} catch (BusinessException e) {
Result.failed(e.getMessage());
}
return res;
}
@PostMapping("/engineer/skill/update") @PostMapping("/engineer/skill/update")
public Result<?> engineerSkillUpdate(@RequestBody EngineerSkillUpdateReqDTO req) { public Result<?> engineerSkillUpdate(@RequestBody EngineerSkillUpdateReqDTO req) {
// 获取工程师技能信息修改 // 获取工程师技能信息修改
...@@ -62,6 +86,18 @@ public class EngineerController { ...@@ -62,6 +86,18 @@ public class EngineerController {
return res; return res;
} }
@GetMapping("/engineer/business/detail")
public Result<?> getEngineerBusinessDetail(@RequestParam String engineerCode) {
// 技术员业务属性配置列表
Result<?> res = null;
try {
res = engineerService.getEngineerBusinessDetail(engineerCode);
} catch (BusinessException e) {
Result.failed(e.getMessage());
}
return res;
}
@PostMapping("/engineer/business/update") @PostMapping("/engineer/business/update")
public Result<?> engineerBusinessUpdate(@RequestBody EngineerBusinessUpdateReqDTO req) { public Result<?> engineerBusinessUpdate(@RequestBody EngineerBusinessUpdateReqDTO req) {
// 技术员业务属性配置更新 // 技术员业务属性配置更新
......
...@@ -23,5 +23,8 @@ public class EngineerInfoListResp { ...@@ -23,5 +23,8 @@ public class EngineerInfoListResp {
private String phone; private String phone;
private String address; private String address;
private String kind; private String kind;
private List<String> tags;
private List<String> credentials;
private String grade;
} }
} }
...@@ -12,8 +12,9 @@ public class OrderAppointmentListResp { ...@@ -12,8 +12,9 @@ public class OrderAppointmentListResp {
@Data @Data
public static class OrderAppointment{ public static class OrderAppointment{
private String title; private String title;
private String engineerCode;
private String expectTime; private String expectTime;
private List<List<KV>> engineers; private List<KV> items;
private List<KV> timelines; private List<KV> timelines;
} }
} }
......
package com.alibaba.cloud.integration.order.entity; package com.alibaba.cloud.integration.order.entity;
import com.fasterxml.jackson.databind.JsonNode;
import lombok.Data; import lombok.Data;
import java.sql.Timestamp; import java.sql.Timestamp;
...@@ -21,6 +22,7 @@ public class EngineerInfo { ...@@ -21,6 +22,7 @@ public class EngineerInfo {
private String vehicle; private String vehicle;
private String vehicleNo; private String vehicleNo;
private String beanStatus; private String beanStatus;
private JsonNode tags;
private String memo; private String memo;
private Timestamp createTime; private Timestamp createTime;
private Timestamp updateTime; private Timestamp updateTime;
......
...@@ -8,13 +8,16 @@ public interface EngineerService { ...@@ -8,13 +8,16 @@ public interface EngineerService {
// 获取公司列表 // 获取公司列表
Result<?> getEngineerInfoList(long page, long size); Result<?> getEngineerInfoList(long page, long size);
Result<?> getEngineerInfoDetail(String engineerCode);
// 获取工程师技能列表 // 获取工程师技能列表
Result<?> getEngineerSkillList(long page, long size); Result<?> getEngineerSkillList(long page, long size);
Result<?> getEngineerSkillDetail(String engineerCode);
Result<?> engineerSkillUpdate(String engineerCode, List<String> categoryIds); Result<?> engineerSkillUpdate(String engineerCode, List<String> categoryIds);
// 工程师业务属性配置列表 // 工程师业务属性配置列表
Result<?> getEngineerBusinessList(long page, long size); Result<?> getEngineerBusinessList(long page, long size);
Result<?> getEngineerBusinessDetail(String engineerCode);
// 技术员业务属性配置修改 // 技术员业务属性配置修改
Result<?> engineerBusinessUpdate(String engineerCode, Integer maxNum, Integer maxMutine, String departure, String priority); Result<?> engineerBusinessUpdate(String engineerCode, Integer maxNum, Integer maxMutine, String departure, String priority);
......
...@@ -11,6 +11,7 @@ import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; ...@@ -11,6 +11,7 @@ import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper; import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper;
import com.baomidou.mybatisplus.core.metadata.IPage; import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.fasterxml.jackson.databind.JsonNode;
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;
...@@ -40,15 +41,13 @@ public class EngineerServiceImpl implements EngineerService { ...@@ -40,15 +41,13 @@ public class EngineerServiceImpl implements EngineerService {
@Override @Override
public Result<?> getEngineerInfoList(long page, long size) { public Result<?> getEngineerInfoList(long page, long size) {
// 查询工程师信息 // 查询工程师信息
IPage<EngineerInfo> pg = this.queryEngineerInfo(page, size); IPage<EngineerInfo> pg = this.queryEngineerInfoIPage(page, size);
List<EngineerInfo> records = pg.getRecords(); List<EngineerInfo> records = pg.getRecords();
// 获取groupIds // 获取groupIds
List<String> groupIds = new ArrayList<>(); List<String> groupIds = records.stream().map(EngineerInfo::getGroupId).collect(Collectors.toList());
for(EngineerInfo e: records){
groupIds.add(e.getGroupId());
}
// 获取Map<groupId, groupName> // 获取Map<groupId, groupName>
HashMap<String, String> groupNames = this.queryGroupNames(groupIds); HashMap<String, String> groupNames = this.queryGroupNames(groupIds);
...@@ -63,12 +62,34 @@ public class EngineerServiceImpl implements EngineerService { ...@@ -63,12 +62,34 @@ public class EngineerServiceImpl implements EngineerService {
return Result.success(res); return Result.success(res);
} }
@Override
public Result<?> getEngineerInfoDetail(String engineerCode) {
// 获取技术员基础信息详情
EngineerInfoListResp.EngineerInfo empty = new EngineerInfoListResp.EngineerInfo();
// 获取技术员列表
List<EngineerInfo> records = this.queryEngineerInfos(engineerCode);
if (records.isEmpty()){
return Result.success(empty);
}
List<String> groupIds = records.stream().map(EngineerInfo::getGroupId).collect(Collectors.toList());
HashMap<String, String> groupNames = this.queryGroupNames(groupIds);
List<EngineerInfoListResp.EngineerInfo> items = this.packEngineerInfo(records, groupNames);
if (items.isEmpty()) {
return Result.success(empty);
}
return Result.success(items.get(0));
}
@Transactional @Transactional
@Override @Override
public Result<?> getEngineerSkillList(long page, long size) { public Result<?> getEngineerSkillList(long page, long size) {
// 获取技术员技能列表 // 获取技术员技能列表
IPage<EngineerInfo> pg = this.queryEngineerInfo(page, size); IPage<EngineerInfo> pg = this.queryEngineerInfoIPage(page, size);
List<EngineerInfo> engineers = pg.getRecords(); List<EngineerInfo> engineers = pg.getRecords();
...@@ -106,6 +127,12 @@ public class EngineerServiceImpl implements EngineerService { ...@@ -106,6 +127,12 @@ public class EngineerServiceImpl implements EngineerService {
return Result.success(res); return Result.success(res);
} }
@Override
public Result<?> getEngineerSkillDetail(String engineerCode) {
// 获取工程师技能详情
return null;
}
@Transactional @Transactional
@Override @Override
public Result<?> engineerSkillUpdate(String engineerCode, List<String> categoryIds) { public Result<?> engineerSkillUpdate(String engineerCode, List<String> categoryIds) {
...@@ -153,7 +180,7 @@ public class EngineerServiceImpl implements EngineerService { ...@@ -153,7 +180,7 @@ public class EngineerServiceImpl implements EngineerService {
// 技术员业务属性配置列表 // 技术员业务属性配置列表
// 查询技术员列表 // 查询技术员列表
IPage<EngineerInfo> pg = this.queryEngineerInfo(page, size); IPage<EngineerInfo> pg = this.queryEngineerInfoIPage(page, size);
List<EngineerInfo> records = pg.getRecords(); List<EngineerInfo> records = pg.getRecords();
...@@ -209,6 +236,12 @@ public class EngineerServiceImpl implements EngineerService { ...@@ -209,6 +236,12 @@ public class EngineerServiceImpl implements EngineerService {
return Result.success(res); return Result.success(res);
} }
@Override
public Result<?> getEngineerBusinessDetail(String engineerCode) {
// 获取技术员业务熟悉详情
return null;
}
@Transactional @Transactional
@Override @Override
public Result<?> engineerBusinessUpdate(String engineerCode, Integer maxNum, Integer maxMinute, String departure, String priority) { public Result<?> engineerBusinessUpdate(String engineerCode, Integer maxNum, Integer maxMinute, String departure, String priority) {
...@@ -238,7 +271,7 @@ public class EngineerServiceImpl implements EngineerService { ...@@ -238,7 +271,7 @@ public class EngineerServiceImpl implements EngineerService {
return Result.success(null); return Result.success(null);
} }
private IPage<EngineerInfo> queryEngineerInfo(long page, long size) { private IPage<EngineerInfo> queryEngineerInfoIPage(long page, long size) {
// 分页查询工程师基础信息 // 分页查询工程师基础信息
LambdaQueryWrapper<EngineerInfo> lqw = new LambdaQueryWrapper<>(); LambdaQueryWrapper<EngineerInfo> lqw = new LambdaQueryWrapper<>();
lqw.orderByAsc(EngineerInfo::getGroupId); lqw.orderByAsc(EngineerInfo::getGroupId);
...@@ -249,6 +282,13 @@ public class EngineerServiceImpl implements EngineerService { ...@@ -249,6 +282,13 @@ public class EngineerServiceImpl implements EngineerService {
return pg; return pg;
} }
private List<EngineerInfo> queryEngineerInfos(String engineerCode) {
// 分页查询工程师基础信息
LambdaQueryWrapper<EngineerInfo> lqw = new LambdaQueryWrapper<>();
lqw.eq(EngineerInfo::getEngineerCode, engineerCode);
return engineerInfoMPDao.selectList(lqw);
}
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<>();
...@@ -308,7 +348,7 @@ public class EngineerServiceImpl implements EngineerService { ...@@ -308,7 +348,7 @@ public class EngineerServiceImpl implements EngineerService {
private List<EngineerInfoListResp.EngineerInfo> packEngineerInfo(List<EngineerInfo> engineers, HashMap<String, String> groups) { private List<EngineerInfoListResp.EngineerInfo> packEngineerInfo(List<EngineerInfo> engineers, HashMap<String, String> groups) {
String groupName, age, workType; String groupName, age, kind;
List<EngineerInfoListResp.EngineerInfo> items = new ArrayList<>(); List<EngineerInfoListResp.EngineerInfo> items = new ArrayList<>();
for(EngineerInfo e: engineers) { for(EngineerInfo e: engineers) {
...@@ -319,15 +359,39 @@ public class EngineerServiceImpl implements EngineerService { ...@@ -319,15 +359,39 @@ public class EngineerServiceImpl implements EngineerService {
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());
// group name
groupName = groups.getOrDefault(e.getGroupId(), ""); groupName = groups.getOrDefault(e.getGroupId(), "");
item.setGroupName(groupName); item.setGroupName(groupName);
// 年龄
age = this.getEngineerAge(e.getBirth()); age = this.getEngineerAge(e.getBirth());
item.setAge(age); item.setAge(age);
workType = (e.getKind() == 1) ? "fullJob": "partJob"; // 工作类型:全职/兼职
item.setKind(workType); 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<>();
if (e.getTags() != null) {
Iterator<Map.Entry<String, JsonNode>> it = e.getTags().fields();
while(it.hasNext()){
Map.Entry<String, JsonNode> field = it.next();
String name = field.getKey();
JsonNode value = field.getValue();
tags.add(String.format("%s+%d",field.getKey(), field.getValue().intValue()));
}
} else {
item.setTags(tags);
}
items.add(item); items.add(item);
} }
......
...@@ -6,7 +6,6 @@ import com.alibaba.cloud.integration.order.dto.*; ...@@ -6,7 +6,6 @@ import com.alibaba.cloud.integration.order.dto.*;
import com.alibaba.cloud.integration.order.entity.*; import com.alibaba.cloud.integration.order.entity.*;
import com.alibaba.cloud.integration.order.service.OrderServiceDetail; import com.alibaba.cloud.integration.order.service.OrderServiceDetail;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import org.aspectj.weaver.ast.Or;
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;
...@@ -76,16 +75,21 @@ public class OrderServiceDetailImpl implements OrderServiceDetail { ...@@ -76,16 +75,21 @@ public class OrderServiceDetailImpl implements OrderServiceDetail {
@Transactional @Transactional
@Override @Override
public Result<?> getOrderAppointmentList(String orderId) { public Result<?> getOrderAppointmentList(String orderId) {
List<OrderAppointmentListResp.OrderAppointment> items = new ArrayList<>(); // 获取预约单里列表
OrderAppointmentListResp res = new OrderAppointmentListResp();
// 查询预约单列表 // 查询预约单列表
List<OrderAppointment> appoints = this.queryOrderAppointments(orderId); List<OrderAppointment> appoints = this.queryOrderAppointments(orderId);
if(appoints.isEmpty()){
// 没有指派单列表,返回
res.setOrderId(orderId);
res.setOrders(List.of());
return Result.success(res);
}
// 工程师ID列表 // 工程师ID列表
List<String> egCodes = new ArrayList<>(); List<String> egCodes = appoints.stream().map(OrderAppointment::getEngineerCode).collect(Collectors.toList());
for(OrderAppointment o: appoints) {
egCodes.add(o.getEngineerCode());
}
// 获取工程师基础信息列表 // 获取工程师基础信息列表
HashMap<String, EngineerInfo> egInfo = this.getEngineerInfos(egCodes); HashMap<String, EngineerInfo> egInfo = this.getEngineerInfos(egCodes);
...@@ -93,49 +97,42 @@ public class OrderServiceDetailImpl implements OrderServiceDetail { ...@@ -93,49 +97,42 @@ public class OrderServiceDetailImpl implements OrderServiceDetail {
// 获取工程师技能列表 // 获取工程师技能列表
HashMap<String, EngineerSkill> egSkill = this.getEngineerSkills(egCodes); HashMap<String, EngineerSkill> egSkill = this.getEngineerSkills(egCodes);
// 获取订单timeline // 获取subOrder订单timeline
Map<String, List<OrderTimeline>> timelines = this.getOrderTimelines(orderId); Map<String, List<OrderTimeline>> timelines = this.getOrderTimelines(orderId);
// 对指派单列表按照subOrderId降序排序, 获取排序的subOrderId列表, 然后根据subOrderId分组 // 对指派单列表按照subOrderId降序排序, 获取排序的subOrderId列表, 然后根据subOrderId分组
Comparator<OrderAppointment> sbDesc = Comparator.comparing(OrderAppointment::getSuborderId, String.CASE_INSENSITIVE_ORDER).reversed(); Comparator<OrderAppointment> sbDesc = Comparator.comparing(OrderAppointment::getSuborderId, String.CASE_INSENSITIVE_ORDER).reversed();
List<OrderAppointment> results = appoints.stream().sorted(sbDesc).collect(Collectors.toList()); List<OrderAppointment> results = appoints.stream().sorted(sbDesc).collect(Collectors.toList());
// 根据subOrderId分组 // 根据subOrderId分组
Map<String, List<OrderAppointment>> appointOrders = results.stream().collect(Collectors.groupingBy(OrderAppointment::getSuborderId)); // Map<String, List<OrderAppointment>> appointOrders = results.stream().collect(Collectors.groupingBy(OrderAppointment::getSuborderId));
// 获取排序的subOrderId(降序) /*
List<String> subOrderIds = new ArrayList<>(); String lastSubOrderId = results.get(0).getSuborderId();
for (String k: appointOrders.keySet()){ for(OrderAppointment o: results) {
subOrderIds.add(k); String subOrderId = o.getSuborderId();
}
Collections.reverse(subOrderIds);
for(String subOrderId: subOrderIds){ EngineerInfo eg = egInfo.getOrDefault(o.getEngineerCode(), null);
List<OrderAppointment> orders = appointOrders.get(subOrderId); EngineerSkill es = egSkill.getOrDefault(o.getEngineerCode(), null);
OrderAppointment order = orders.get(0); // 第一个订单
OrderAppointmentListResp.OrderAppointment op = new OrderAppointmentListResp.OrderAppointment(); // 获取工程师姓名
String engineerName = (eg != null) ? eg.getName(): o.getEngineerCode();
// 获取工程师列表信息 // 获取title
List<List<KV>> egInfos = new ArrayList<>(); String title = engineerName;
for (OrderAppointment o: orders) { if (lastSubOrderId.equals(subOrderId)) {
String egCode = o.getEngineerCode(); title = String.format("%s_%s", engineerName, this.Timestamp2Datetime(o.getExpectTime(), "yyyyMMdd"));
egInfos.add(this.packEngineerInfos(egInfo.get(egCode), egSkill.get(egCode)));
} }
op.setEngineers(egInfos);
//获取timeline信息 OrderAppointmentListResp.OrderAppointment op = new OrderAppointmentListResp.OrderAppointment();
op.setTitle(title);
op.setEngineerCode(o.getEngineerCode());
op.setExpectTime(o.getExpectTime().toString());
op.setTimelines(this.packOrderTimeline(timelines.get(subOrderId))); op.setTimelines(this.packOrderTimeline(timelines.get(subOrderId)));
op.setTitle(order.getSuborderId()); op.setItems(this.packEngineerInfos(eg, es));
op.setExpectTime(order.getExpectTime().toString());
items.add(op);
} }
*/
// 返回结果 return null;
OrderAppointmentListResp res = new OrderAppointmentListResp();
res.setOrderId(orderId);
res.setOrders(items);
return Result.success(res);
} }
@Transactional @Transactional
...@@ -228,26 +225,28 @@ public class OrderServiceDetailImpl implements OrderServiceDetail { ...@@ -228,26 +225,28 @@ public class OrderServiceDetailImpl implements OrderServiceDetail {
private List<KV> packEngineerInfos(EngineerInfo eg, EngineerSkill skill) { private List<KV> packEngineerInfos(EngineerInfo eg, EngineerSkill skill) {
// 获取工程师信息 // 获取工程师信息
List<KV> items = new ArrayList<>();
String kind = ""; if (eg == null && skill == null) {
String age = ""; return items;
if (eg.getKind() == 1) { }
kind = "全职";
} else { if (eg != null) {
kind = "兼职"; items.add(this.packEngineer("技术员:", eg.getName(), "engineer"));
items.add(this.packEngineer("工号:", eg.getEngineerCode(), "" ));
items.add(this.packEngineer("类型:", (eg.getKind() == 1) ? "全职" : "兼职", ""));
items.add(this.packEngineer("手机号:", eg.getPhone(), ""));
} }
String age = "";
if (age.isEmpty()) { if (age.isEmpty()) {
age="未知"; age="未知";
} else { } else {
age = eg.getBirth(); age = eg.getBirth();
} }
List<KV> items = new ArrayList<>();
items.add(this.packEngineer("技术员:", eg.getName(), "engineer"));
items.add(this.packEngineer("小组:", "老王组", "")); items.add(this.packEngineer("小组:", "老王组", ""));
items.add(this.packEngineer("类型:", kind, ""));
items.add(this.packEngineer("性别/年龄:", eg.getGender()+"/"+age, "")); items.add(this.packEngineer("性别/年龄:", eg.getGender()+"/"+age, ""));
items.add(this.packEngineer("手机号:", eg.getPhone(), ""));
items.add(this.packEngineer("工号:", eg.getEngineerCode(), "" ));
items.add(this.packEngineer("技能:", "TODO", "")); // TODO items.add(this.packEngineer("技能:", "TODO", "")); // TODO
return items; return items;
} }
...@@ -295,8 +294,8 @@ public class OrderServiceDetailImpl implements OrderServiceDetail { ...@@ -295,8 +294,8 @@ public class OrderServiceDetailImpl implements OrderServiceDetail {
return items; return items;
} }
private KV packEngineer(String title, String value, Object params) { private KV packEngineer(String title, String value, String type) {
return this.PackKV(title, value, null, null, params); return this.PackKV(title, value, type, null, null);
} }
private KV packTimeline(String title, String value, String status) { private KV packTimeline(String title, String value, String status) {
......
Markdown is supported
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!