package com.ruoyi.admin.controller.large;
|
|
|
import cn.afterturn.easypoi.excel.ExcelExportUtil;
|
import cn.afterturn.easypoi.excel.ExcelImportUtil;
|
import cn.afterturn.easypoi.excel.entity.ExportParams;
|
import cn.afterturn.easypoi.excel.entity.ImportParams;
|
import cn.afterturn.easypoi.excel.entity.TemplateExportParams;
|
import cn.hutool.core.io.resource.ClassPathResource;
|
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
|
import com.baomidou.mybatisplus.core.toolkit.Wrappers;
|
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
|
import com.ruoyi.admin.entity.MasterWorker;
|
import com.ruoyi.admin.large.model.AnalysisOrderData;
|
import com.ruoyi.admin.large.model.query.OrderDataQuery;
|
import com.ruoyi.admin.large.service.AnalysisOrderDataService;
|
import com.ruoyi.admin.service.MasterWorkerService;
|
import com.ruoyi.admin.service.SysUserService;
|
import com.ruoyi.admin.utils.ImportExcelUtil;
|
import com.ruoyi.admin.utils.WebUtils;
|
import com.ruoyi.admin.vo.SiteLargeeVO;
|
import com.ruoyi.admin.vo.WorkersLargeeVO;
|
import com.ruoyi.common.core.domain.R;
|
import com.ruoyi.common.core.utils.DateUtils;
|
import com.ruoyi.common.core.utils.StringUtils;
|
import com.ruoyi.common.security.service.TokenService;
|
import com.ruoyi.order.api.entity.Order;
|
import com.ruoyi.order.api.feignClient.OrderClient;
|
import io.swagger.annotations.Api;
|
import io.swagger.annotations.ApiImplicitParam;
|
import io.swagger.annotations.ApiOperation;
|
import org.apache.poi.ss.usermodel.Workbook;
|
import org.springframework.beans.factory.annotation.Autowired;
|
import org.springframework.util.CollectionUtils;
|
import org.springframework.web.bind.annotation.*;
|
import org.springframework.web.multipart.MultipartFile;
|
|
import javax.servlet.ServletOutputStream;
|
import javax.servlet.http.HttpServletResponse;
|
import java.io.IOException;
|
import java.io.InputStream;
|
import java.net.URLEncoder;
|
import java.text.ParseException;
|
import java.text.SimpleDateFormat;
|
import java.time.LocalDateTime;
|
import java.util.*;
|
import java.util.stream.Collectors;
|
|
/**
|
* <p>
|
* 前端控制器
|
* </p>
|
*
|
* @author xiaochen
|
* @since 2025-04-22
|
*/
|
@Api(tags = {"大屏-上门回收订单"})
|
@RestController
|
@RequestMapping("/analysis-order-data")
|
public class AnalysisOrderDataController {
|
private final AnalysisOrderDataService analysisOrderDataService;
|
private final TokenService tokenService;
|
private final SysUserService sysUserService;
|
private final OrderClient orderClient;
|
private final MasterWorkerService masterWorkerService;
|
|
@Autowired
|
public AnalysisOrderDataController(AnalysisOrderDataService analysisOrderDataService, TokenService tokenService, SysUserService sysUserService, OrderClient orderClient,MasterWorkerService masterWorkerService) {
|
this.analysisOrderDataService = analysisOrderDataService;
|
this.tokenService = tokenService;
|
this.sysUserService = sysUserService;
|
this.orderClient = orderClient;
|
this.masterWorkerService = masterWorkerService;
|
}
|
|
/**
|
* 大屏-站点分布
|
*/
|
@ApiOperation( value = "大屏-站点分布")
|
@GetMapping(value = "/listSiteLarge")
|
public R<SiteLargeeVO> listSiteLarge() {
|
SiteLargeeVO siteLargeeVO = new SiteLargeeVO();
|
// 回收订单数量
|
Map<String, Integer> orderMap = new HashMap<>();
|
// 回收人员数量
|
Map<String, Integer> userMap = new HashMap<>();
|
// 根据city为键,值为对应city的订单数量
|
List<AnalysisOrderData> list1 = analysisOrderDataService.list();
|
for (AnalysisOrderData analysisOrderData : list1) {
|
if (orderMap.containsKey(analysisOrderData.getCity())) {
|
orderMap.put(analysisOrderData.getCity(), orderMap.get(analysisOrderData.getCity()) + 1);
|
} else {
|
orderMap.put(analysisOrderData.getCity(), 1);
|
}
|
if (userMap.containsKey(analysisOrderData.getCity())) {
|
userMap.put(analysisOrderData.getCity(), userMap.get(analysisOrderData.getCity()) + 1);
|
} else {
|
userMap.put(analysisOrderData.getCity(), 1);
|
}
|
}
|
siteLargeeVO.setOrderMap(orderMap);
|
siteLargeeVO.setUserMap(userMap);
|
return R.ok(siteLargeeVO);
|
}
|
/**
|
* 大屏-师傅定位分布
|
*/
|
@ApiOperation( value = "大屏-师傅定位分布")
|
@GetMapping(value = "/listWorkersLarge")
|
public R<WorkersLargeeVO> listWorkersLarge() {
|
WorkersLargeeVO siteLargeeVO = new WorkersLargeeVO();
|
// 查询师傅经纬度
|
List<MasterWorker> list = masterWorkerService.lambdaQuery().isNotNull(MasterWorker::getWorkerLat).isNotNull(MasterWorker::getWorkerLon)
|
.list();
|
siteLargeeVO.setWorkers(list);
|
// 师傅数量
|
Map<String, Integer> userMap = new HashMap<>();
|
for (MasterWorker masterWorker : list) {
|
if (userMap.containsKey(masterWorker.getCity())) {
|
userMap.put(masterWorker.getCity(), userMap.get(masterWorker.getCity()) + 1);
|
} else {
|
userMap.put(masterWorker.getCity(), 1);
|
}
|
}
|
// siteLargeeVO.setSiteMap();
|
siteLargeeVO.setUserMap(userMap);
|
return R.ok(siteLargeeVO);
|
}
|
/**
|
* 查询上门回收订单列表
|
*/
|
@ApiOperation( value = "查询上门回收订单列表")
|
@PostMapping(value = "/pageList")
|
public R<Page<AnalysisOrderData>> pageList(@RequestBody OrderDataQuery orderDataQuery) {
|
Page<AnalysisOrderData> page = analysisOrderDataService.lambdaQuery()
|
.like(StringUtils.isNotBlank(orderDataQuery.getOrderChannel()), AnalysisOrderData::getOrderChannel, orderDataQuery.getOrderChannel())
|
.like(StringUtils.isNotBlank(orderDataQuery.getOrderNum()), AnalysisOrderData::getOrderNum, orderDataQuery.getOrderNum())
|
.like(StringUtils.isNotBlank(orderDataQuery.getCity()), AnalysisOrderData::getCity, orderDataQuery.getCity())
|
.like(StringUtils.isNotBlank(orderDataQuery.getOrderCategory()), AnalysisOrderData::getOrderCategory, orderDataQuery.getOrderCategory())
|
.like(StringUtils.isNotBlank(orderDataQuery.getUserName()), AnalysisOrderData::getUserName, orderDataQuery.getUserName())
|
.like(StringUtils.isNotBlank(orderDataQuery.getRecyclePerson()), AnalysisOrderData::getRecyclePerson, orderDataQuery.getRecyclePerson())
|
.eq(Objects.nonNull(orderDataQuery.getState()), AnalysisOrderData::getState, orderDataQuery.getState())
|
.orderByDesc(AnalysisOrderData::getOrderDate)
|
.page(Page.of(orderDataQuery.getPageNum(), orderDataQuery.getPageSize()));
|
return R.ok(page);
|
}
|
|
/**
|
* 查询上门回收订单列表
|
*/
|
@ApiOperation( value = "查询上门回收订单列表-大屏")
|
@GetMapping(value = "/list")
|
public R<List<AnalysisOrderData>> list() {
|
String startTime = new SimpleDateFormat("yyyy-MM-dd").format(new Date()) + " 00:00:00";
|
String endTime = new SimpleDateFormat("yyyy-MM-dd").format(new Date()) + " 23:59:59";
|
List<AnalysisOrderData> list = analysisOrderDataService.list(Wrappers.lambdaQuery(AnalysisOrderData.class)
|
.between(AnalysisOrderData::getOrderDate, startTime, endTime)
|
.orderByDesc(AnalysisOrderData::getOrderDate));
|
return R.ok(list);
|
}
|
|
|
/**
|
* 修改上门回收订单
|
*/
|
@ApiOperation( value = "修改上门回收订单")
|
@PostMapping(value = "/update")
|
public R<Boolean> update(@RequestBody AnalysisOrderData dto) {
|
return R.ok(analysisOrderDataService.updateById(dto));
|
}
|
|
/**
|
* 删除上门回收订单
|
*/
|
@ApiOperation( value = "删除上门回收订单")
|
@DeleteMapping(value = "/deleteById")
|
public R<Boolean> deleteById(@RequestParam("id") Integer id) {
|
return R.ok(analysisOrderDataService.removeById(id));
|
}
|
|
@ApiOperation(value = "回收订单导入模板下载")
|
@GetMapping("/import-template")
|
public void importTemplate() {
|
ClassPathResource classPathResource = new ClassPathResource("template/回收订单导入.xlsx");
|
TemplateExportParams params = new TemplateExportParams(classPathResource.getPath());
|
Workbook workbook = ExcelExportUtil.exportExcel(params, new HashMap<>());
|
HttpServletResponse response = WebUtils.response();
|
response.setContentType("application/vnd.ms-excel");
|
response.setCharacterEncoding("utf-8");
|
ServletOutputStream outputStream = null;
|
try {
|
String fileName = URLEncoder.encode("回收订单导入.xlsx", "utf-8");
|
response.setHeader("Content-dispodition", "attachment;filename=" + fileName);
|
outputStream = response.getOutputStream();
|
workbook.write(outputStream);
|
} catch (IOException e) {
|
e.printStackTrace();
|
System.out.println("回收订单导入模板下载失败!");
|
} finally {
|
try {
|
outputStream.close();
|
} catch (IOException e) {
|
e.printStackTrace();
|
}
|
}
|
}
|
|
@ApiOperation(value = "回收订单导入")
|
@PostMapping("/importAnalysisOrder")
|
@ApiImplicitParam(paramType = "form", name = "file", value = "文件对象", required = true, dataType = "__file")
|
public R<String> importAnalysisOrder(@RequestPart("file") MultipartFile file) {
|
ImportParams params = new ImportParams();
|
// params.setTitleRows(1);//标题行数
|
params.setHeadRows(1); //表头行数
|
try {
|
InputStream inputStream = file.getInputStream();
|
List<AnalysisOrderData> analysisOrderDataList = ExcelImportUtil.importExcel(inputStream, AnalysisOrderData.class, params);
|
List<String> errors = new ArrayList<>();
|
Iterator<AnalysisOrderData> iterator = analysisOrderDataList.iterator();
|
while (iterator.hasNext()){
|
AnalysisOrderData analysisOrderData = iterator.next();
|
try {
|
analysisOrderData.setDataType(1);
|
analysisOrderData.setOrderDate(new SimpleDateFormat("yyyy-MM-dd").parse(analysisOrderData.getOrderDateStr()));
|
}catch (Exception e){
|
errors.add("回收订单编号:["+analysisOrderData.getOrderNum()+"],时间格式化错误,忽略导入");
|
iterator.remove();
|
}
|
}
|
analysisOrderDataService.saveBatch(analysisOrderDataList);
|
Integer errorLines = 0;
|
Integer successLines = 0;
|
errorLines += errors.size();
|
successLines += (analysisOrderDataList.size() - errorLines);
|
R<String> stringApiResult = ImportExcelUtil.importReturnMsg(errorLines, successLines, errors);
|
return stringApiResult;
|
} catch (Exception e) {
|
System.out.println("回收订单导入失败!" + e.getMessage());
|
e.printStackTrace();
|
}
|
return R.ok();
|
}
|
|
@ApiOperation(value = "同步家电回收哥当日订单数据")
|
@PostMapping("/synchronousOrder")
|
public R<String> synchronousOrder() {
|
// 查询家电回收哥今日订单数据
|
List<Order> orders = orderClient.getTodayOrderData().getData();
|
if(!CollectionUtils.isEmpty(orders)){
|
List<AnalysisOrderData> analysisOrderDataList = new ArrayList<>();
|
orders.forEach(order -> {
|
AnalysisOrderData analysisOrderData = new AnalysisOrderData();
|
analysisOrderData.setOrderNum(order.getOrderNumber());
|
try {
|
analysisOrderData.setOrderDate(new SimpleDateFormat("yyyy-MM-dd").parse(order.getTime()));
|
} catch (ParseException e) {
|
throw new RuntimeException(e);
|
}
|
analysisOrderData.setOrderChannel(order.getSiteName());
|
analysisOrderData.setCity(order.getCity());
|
analysisOrderData.setOrderCategory(order.getServeName());
|
analysisOrderData.setUserName(order.getReservationName());
|
analysisOrderData.setUserPhone(order.getReservationPhone());
|
analysisOrderData.setRecyclePerson(order.getServerName());
|
analysisOrderData.setState(order.getState());
|
analysisOrderData.setImportTime(LocalDateTime.now());
|
analysisOrderData.setDataType(2);
|
analysisOrderDataList.add(analysisOrderData);
|
});
|
// 删除今日订单
|
analysisOrderDataService.remove(new QueryWrapper<AnalysisOrderData>().lambda()
|
.eq(AnalysisOrderData::getDataType,2)
|
.like(AnalysisOrderData::getOrderDate, new SimpleDateFormat("yyyy-MM-dd").format(new Date()))
|
);
|
analysisOrderDataService.saveBatch(analysisOrderDataList);
|
}
|
return R.ok();
|
}
|
|
}
|