Commit e4422c37 by 王力

Merge branch 'dev_workbench_summary' into 'develop'

Dev workbench summary

See merge request !153
2 parents c560583f 16e9b95f
......@@ -9,8 +9,11 @@ import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.validation.annotation.Validated;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.RestController;
import java.time.LocalDate;
@Slf4j
@RestController
@RequestMapping("/pea-order")
......@@ -29,4 +32,15 @@ public class WorkbenchController {
}
return res;
}
@GetMapping("/workbench/summary")
public Result<?> workbenchSummary(@RequestParam String levelType, @RequestParam String levelValue, @RequestParam LocalDate date) {
Result<?> res = null;
try{
res = workbenchService.getWorkbenchSummary(levelType, levelValue, date);
} catch (BusinessException e) {
return Result.failed(e.getMessage());
}
return res;
}
}
package com.dituhui.pea.order.dto;
import com.fasterxml.jackson.annotation.JsonInclude;
import lombok.Data;
import java.util.List;
@Data
public class WorkbenchSummaryResp {
private List<ItemDTO> summary;
@Data
public static class ItemDTO {
private String type;
private List<ValueDTO> rows;
}
@Data
@JsonInclude(JsonInclude.Include.NON_NULL)
public static class ValueDTO {
private String title;
private String value;
private String total;
private String valueColor;
private String url;
public ValueDTO(String title, String value, String total, String valueColor, String url){
this.title = title;
this.value = value;
this.total = total;
this.valueColor = valueColor;
this.url = url;
}
}
}
\ No newline at end of file
......@@ -3,6 +3,7 @@ package com.dituhui.pea.order.entity;
import lombok.Data;
import java.sql.Timestamp;
import java.time.LocalDate;
@Data
public class OrderAppointment {
......@@ -15,6 +16,7 @@ public class OrderAppointment {
private String engineerPhone;
private Integer engineerAge;
private Integer isWorkshop;
private LocalDate dt;
private Timestamp expectStartTime;
private Timestamp expectEndTime;
private Timestamp actualTime;
......
package com.dituhui.pea.order.entity;
import lombok.Data;
import java.sql.Timestamp;
import java.time.LocalDate;
@Data
public class OrderRequest {
......@@ -21,6 +23,7 @@ public class OrderRequest {
private String skill;
private String applyNote;
private String faultDescribe;
private LocalDate dt;
private Timestamp expectTimeBegin;
private Timestamp expectTimeEnd;
private String expectTimeDesc;
......
......@@ -4,6 +4,10 @@ import com.dituhui.pea.common.Result;
import com.dituhui.pea.order.dto.EngineersGanttReqDTO;
import com.dituhui.pea.order.dto.OrderChangeListReqDTO;
import java.time.LocalDate;
public interface WorkbenchService {
Result<?> getOrderChangeList(OrderChangeListReqDTO orderChangeListReqDTO);
Result<?> getWorkbenchSummary(String levelType, String levelValue, LocalDate dt);
}
package com.dituhui.pea.order.service.impl;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.dituhui.pea.common.Result;
import com.dituhui.pea.order.dao.*;
import com.dituhui.pea.order.dto.OrderChangeListReqDTO;
import com.dituhui.pea.order.dto.OrderChangeListRespDTO;
import com.dituhui.pea.order.dto.WorkbenchSummaryResp;
import com.dituhui.pea.order.entity.OrderChangeEntity;
import com.dituhui.pea.order.entity.OrderRequest;
import com.dituhui.pea.order.entity.OrderRequestEntity;
import com.dituhui.pea.order.service.WorkbenchService;
import lombok.extern.slf4j.Slf4j;
......@@ -14,14 +17,20 @@ import org.springframework.data.domain.PageRequest;
import org.springframework.data.domain.Pageable;
import org.springframework.stereotype.Service;
import java.time.LocalDate;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
@Slf4j
@Service
public class WorkbenchServiceImpl implements WorkbenchService {
@Autowired
private OrderChangeDao orderChangeDao;
@Autowired
private OrderRequestDao orderRequestDao;
@Autowired
......@@ -34,7 +43,7 @@ public class WorkbenchServiceImpl implements WorkbenchService {
private CapacityEngineerStatDao capacityEngineerStatDao;
@Autowired
private OrderEventDao orderEventDao;
private OrderRequestMPDao orderRequestMPDao;
@Override
public Result<?> getOrderChangeList(OrderChangeListReqDTO reqDTO) {
......@@ -43,11 +52,11 @@ public class WorkbenchServiceImpl implements WorkbenchService {
String levelType = reqDTO.getLevelType();
String levelValue = reqDTO.getLevelValue();
if ("cluster".equals(levelType)) {
changes = orderEventDao.findAllByClusterId(levelValue, reqDTO.getDate(), pageable);
changes = orderChangeDao.findAllByClusterId(levelValue, reqDTO.getDate(), pageable);
} else if ("branch".equals(levelType)) {
changes = orderEventDao.findAllByBranchId(levelValue, reqDTO.getDate(), pageable);
changes = orderChangeDao.findAllByBranchId(levelValue, reqDTO.getDate(), pageable);
} else {
changes = orderEventDao.findAllByGroupId(levelValue, reqDTO.getDate(), pageable);
changes = orderChangeDao.findAllByGroupId(levelValue, reqDTO.getDate(), pageable);
}
List<OrderChangeListRespDTO.Content> contents = new ArrayList<>();
for (Object e1 : changes.getContent()) {
......@@ -59,7 +68,7 @@ public class WorkbenchServiceImpl implements WorkbenchService {
.setOperator(e.getOperator())
.setDescription(e.getContent())
.setMemo(e.getMemo())
.setUpdateTime(e.getUpdateTime());
.setUpdateTime(e.getUpdateTime().toString());
contents.add(content);
}
OrderChangeListRespDTO respDTO = new OrderChangeListRespDTO();
......@@ -69,4 +78,130 @@ public class WorkbenchServiceImpl implements WorkbenchService {
.setContent(contents);
return Result.success(respDTO);
}
@Override
public Result<?> getWorkbenchSummary(String levelType, String levelValue, LocalDate dt) {
List<WorkbenchSummaryResp.ItemDTO> items = new ArrayList<>();
HashMap<String, Integer> methodSummary = this.transAppointmentMethod(this.queryCountByAppointmentMethod(levelType, levelValue, dt));
WorkbenchSummaryResp.ItemDTO methodItem = new WorkbenchSummaryResp.ItemDTO();
methodItem.setType("order");
methodItem.setRows(this.packValueAppointmentMethod(methodSummary));
items.add(methodItem);
HashMap<String, Integer> statusSummary = this.transOrderStatus(this.queryCountByOrderStatus(levelType, levelValue, dt));
WorkbenchSummaryResp.ItemDTO statusItem = new WorkbenchSummaryResp.ItemDTO();
methodItem.setType("order");
methodItem.setRows(this.packValueOrderStatus(statusSummary));
items.add(statusItem);
WorkbenchSummaryResp res = new WorkbenchSummaryResp();
res.setSummary(items);
return Result.success(res);
}
private List<Map<String, Object>> queryCountByAppointmentMethod(String levelType, String levelValue, LocalDate dt) {
QueryWrapper<OrderRequest> wrapper = new QueryWrapper<>();
wrapper.select("appointment_method, appointment_status, COUNT(*) as count")
.lambda()
.eq(OrderRequest::getDt, dt)
.eq(levelType.equals("cluster"), OrderRequest::getOrgClusterId, levelValue)
.eq(levelType.equals("branch"), OrderRequest::getOrgBranchId, levelValue)
.eq(levelType.equals("group"), OrderRequest::getOrgGroupId, levelValue)
.groupBy(OrderRequest::getAppointmentMethod, OrderRequest::getAppointmentStatus);
return orderRequestMPDao.selectMaps(wrapper);
}
private List<Map<String, Object>> queryCountByOrderStatus(String levelType, String levelValue, LocalDate dt) {
QueryWrapper<OrderRequest> wrapper = new QueryWrapper<>();
wrapper.select("appointment_status, COUNT(*) as count")
.lambda()
.eq(OrderRequest::getDt, dt)
.eq(levelType.equals("cluster"), OrderRequest::getOrgClusterId, levelValue)
.eq(levelType.equals("branch"), OrderRequest::getOrgBranchId, levelValue)
.eq(levelType.equals("group"), OrderRequest::getOrgGroupId, levelValue)
.groupBy(OrderRequest::getAppointmentStatus);
return orderRequestMPDao.selectMaps(wrapper);
}
private HashMap<String, Integer> transAppointmentMethod(List<Map<String, Object>> results) {
HashMap<String, Integer> map = new HashMap<>();
Integer manualTotal = 0; // 人工
Integer autoTotal = 0;
Integer total = 0;
for (Map<String, Object> result : results) {
String method = (String) result.get("appointment_method");
String status = (String) result.get("appointment_status");
Integer count = (int) result.get("count");
total += count;
if (method.equals("MANUAL")) {
manualTotal += count;
} else if (method.startsWith("AUTO_")) {
autoTotal += count;
}
if (method.equals("MANUAL") && status.equals("NOT_ASSIGNED")) {
map.put("manualDealing", count);
} else if (method.equals("AUTO_") && status.equals("NOT_ASSIGNED")) {
map.put("autoDealing", count);
}
}
map.put("manualTotal", manualTotal);
map.put("autoTotal", autoTotal);
map.put("total", total);
return map;
}
private HashMap<String, Integer> transOrderStatus(List<Map<String, Object>> results) {
HashMap<String, Integer> map = new HashMap<>();
for (Map<String, Object> result : results) {
String status = (String) result.get("appointment_status");
Integer count = (int) result.get("count");
map.put(status, count);
}
return map;
}
private List<WorkbenchSummaryResp.ValueDTO> packValueAppointmentMethod(HashMap<String, Integer> summary) {
List<WorkbenchSummaryResp.ValueDTO> items = new ArrayList<>();
String url = "/dispatchBench/index";
Integer manualDealing = summary.getOrDefault("manualDealing", 0);
Integer manualTotal = summary.getOrDefault("manualTotal", 0);
Integer autoDealing = summary.getOrDefault("autoDealing", 0);
Integer autoTotal = summary.getOrDefault("autoTotal", 0);
Integer total = summary.getOrDefault("total", 0);
items.add(new WorkbenchSummaryResp.ValueDTO("待人工处理", manualDealing.toString(), manualTotal.toString(), "#FF8000", url));
items.add(new WorkbenchSummaryResp.ValueDTO("待自动处理", autoDealing.toString(), autoTotal.toString(), "#469967", url));
items.add(new WorkbenchSummaryResp.ValueDTO("全部订单", null, total.toString(), null, url));
return items;
}
private List<WorkbenchSummaryResp.ValueDTO> packValueOrderStatus(HashMap<String, Integer> summary) {
List<WorkbenchSummaryResp.ValueDTO> items = new ArrayList<>();
String url = "/dispatchBench/index";
Integer assigned = summary.getOrDefault("ASSIGNED", 0);
Integer contacted = summary.getOrDefault("CONTACTED", 0);
Integer departed = summary.getOrDefault("DEPARTED", 0);
Integer dealing = assigned + contacted + departed;
Integer started = summary.getOrDefault("STARTED", 0);
Integer cancel = summary.getOrDefault("CANCELED", 0);
Integer finished = summary.getOrDefault("FINISHED", 0);
items.add(new WorkbenchSummaryResp.ValueDTO("待上门", dealing.toString(), null, "#469967", url));
items.add(new WorkbenchSummaryResp.ValueDTO("服务中", started.toString(), null, "#016FFF", url));
items.add(new WorkbenchSummaryResp.ValueDTO("已完成", finished.toString(), null, null, url));
items.add(new WorkbenchSummaryResp.ValueDTO("已取消", cancel.toString(), null, null, url));
items.add(new WorkbenchSummaryResp.ValueDTO("已改约", "0", null, null, url));
items.add(new WorkbenchSummaryResp.ValueDTO("已延误", "0", null, "#FF3D44", url));
return items;
}
}
\ No newline at end of file
Markdown is supported
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!