package com.ruoyi.admin.service.impl;
|
|
import com.alibaba.excel.EasyExcelFactory;
|
import com.alibaba.excel.ExcelWriter;
|
import com.alibaba.excel.write.builder.ExcelWriterBuilder;
|
import com.alibaba.excel.write.metadata.WriteSheet;
|
import com.alibaba.fastjson2.JSONObject;
|
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
|
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
|
import com.ruoyi.admin.entity.*;
|
import com.ruoyi.admin.mapper.OrderMapper;
|
import com.ruoyi.admin.mapper.UserMapper;
|
import com.ruoyi.admin.service.MasterWorkerService;
|
import com.ruoyi.admin.service.OrderService;
|
import com.ruoyi.admin.service.RecoveryClassifyService;
|
import com.ruoyi.admin.service.RecoveryServeService;
|
import com.ruoyi.admin.vo.*;
|
import com.ruoyi.common.core.constant.Constants;
|
import com.ruoyi.common.core.domain.R;
|
import com.ruoyi.order.api.entity.OrderQueryRequest;
|
import com.ruoyi.order.api.entity.ServeRecord;
|
import com.ruoyi.order.api.feignClient.EvaluateClient;
|
import com.ruoyi.order.api.feignClient.OrderClient;
|
import com.ruoyi.order.api.feignClient.ServeRecordClient;
|
import org.apache.commons.codec.CharEncoding;
|
import org.springframework.stereotype.Service;
|
|
import javax.annotation.Resource;
|
import javax.servlet.http.HttpServletResponse;
|
import java.io.File;
|
import java.io.IOException;
|
import java.io.InputStream;
|
import java.io.UnsupportedEncodingException;
|
import java.math.BigDecimal;
|
import java.net.URLEncoder;
|
import java.nio.file.Files;
|
import java.nio.file.Paths;
|
import java.text.SimpleDateFormat;
|
import java.util.ArrayList;
|
import java.util.Arrays;
|
import java.util.List;
|
import java.util.stream.Collectors;
|
|
/**
|
* <p>
|
* 订单管理 服务实现类
|
* </p>
|
*
|
* @author hjl
|
* @since 2024-05-29
|
*/
|
@Service
|
public class OrderServiceImpl extends ServiceImpl<OrderMapper, Order> implements OrderService {
|
|
@Resource
|
private UserMapper userMapper;
|
@Resource
|
private RecoveryServeService recoveryServeService;
|
@Resource
|
private RecoveryClassifyService recoveryClassifyService;
|
@Resource
|
private MasterWorkerService masterWorkerService;
|
@Resource
|
private OrderClient orderClient;
|
@Resource
|
private EvaluateClient evaluateClient;
|
@Resource
|
private ServeRecordClient serveRecordClient;
|
|
/**
|
* linux服务器保存订单轨迹文件夹
|
*/
|
private static final String BASE_PATH = "/usr/local/coordinate/";
|
// private static final String BASE_PATH = "D:/Desktop/coordinate/";
|
|
@Override
|
public R<String> excelExport(List<com.ruoyi.order.api.entity.Order> list, HttpServletResponse response) {
|
try {
|
response.setCharacterEncoding(Constants.UTF8);
|
response.setContentType("application/vnd.ms-excel");
|
response.setHeader("Access-Control-Expose-Headers", "Content-disposition");
|
response.setHeader("Content-Disposition", "attachment;filename=" +
|
URLEncoder.encode(Constants.EXCEL_ORDER_FILE_NAME, CharEncoding.UTF_8) + ".xlsx");
|
} catch (UnsupportedEncodingException e) {
|
return R.fail("excel导出失败!");
|
}
|
try {
|
// excel模板封装
|
ExcelWriterBuilder excelWriterBuilder = EasyExcelFactory.write(response.getOutputStream());
|
InputStream stream = Thread.currentThread().getContextClassLoader().getResourceAsStream("template/" + Constants.EXCEL_ORDER_FILE_NAME + ".xlsx");
|
// 自动释放资源
|
try (ExcelWriter excelWriter = excelWriterBuilder.withTemplate(stream).build()) {
|
WriteSheet writeSheet = EasyExcelFactory.writerSheet().build();
|
excelWriter.fill(list, writeSheet);
|
excelWriter.finish();
|
} catch (Exception e) {
|
return R.fail("excel导出失败!");
|
}
|
} catch (IOException e) {
|
return R.fail("excel导出失败!");
|
}
|
return R.ok();
|
}
|
|
@Override
|
public OrderDetailVO orderListDetail(String id) {
|
OrderDetailVO result = new OrderDetailVO();
|
com.ruoyi.order.api.entity.Order order = orderClient.detail(id).getData();
|
orderInfo(result, order);
|
// 预约人信息
|
userInfo(result, order);
|
// 服务信息
|
serveInfo(result, order);
|
// 师傅信息
|
workerInfo(result, order);
|
// 服务记录
|
serveRecordInfo(result, order);
|
// 评价信息
|
evaluateInfo(result, order);
|
return result;
|
}
|
|
private void evaluateInfo(OrderDetailVO result, com.ruoyi.order.api.entity.Order order) {
|
com.ruoyi.order.api.entity.Evaluate evaluate = evaluateClient.oneByOrderId(order.getId()).getData();
|
OrderByEvaluateVO orderByEvaluate = new OrderByEvaluateVO();
|
if (null != evaluate) {
|
orderByEvaluate.setStarRating(BigDecimal.valueOf(evaluate.getStarRating()));
|
orderByEvaluate.setEvaluateTime(evaluate.getCreateTime());
|
orderByEvaluate.setEvaluateContent(evaluate.getContent());
|
}
|
result.setEvaluateInfo(orderByEvaluate);
|
}
|
|
private void serveRecordInfo(OrderDetailVO result, com.ruoyi.order.api.entity.Order order) {
|
OrderByServeRecordVO orderByServeRecord = new OrderByServeRecordVO();
|
orderByServeRecord.setAcceptOrderTime(order.getAcceptTime());
|
if (null != order.getArriveTime()) {
|
orderByServeRecord.setReachTime(new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(order.getArriveTime()));
|
}
|
// 服务记录 包含现场照片
|
ServeRecord serveRecord = serveRecordClient.serveRecordByOrderId(order.getId()).getData();
|
// 师傅路线轨迹
|
String masterFolderPath = BASE_PATH + order.getServerId();
|
File masterFolder = new File(masterFolderPath);
|
// 检查师傅ID的文件夹是否存在,存在就读取轨迹数据
|
System.out.println("文件是否存在:" + masterFolder.exists());
|
if (masterFolder.exists()) {
|
// 检查订单ID的JSON文件是否存在,不存在则创建
|
String jsonFilePath = masterFolderPath + "/" + order.getId() + ".json";
|
File jsonFile = new File(jsonFilePath);
|
System.out.println("订单Json文件是否存在:" + jsonFile.exists());
|
if (jsonFile.exists()) {
|
try {
|
String jsonContent = new String(Files.readAllBytes(Paths.get(jsonFilePath)));
|
System.out.println("JSON 文件内容:" + jsonContent);
|
List<JSONObject> coordinate = JSONObject.parseObject(jsonContent, List.class);
|
List<String> coordinateList = new ArrayList<>();
|
if (null != coordinate) {
|
for (JSONObject jsonObject : coordinate) {
|
Object s = jsonObject.get("coordinate");
|
coordinateList.add(String.valueOf(s));
|
}
|
orderByServeRecord.setCoordinate(coordinateList);
|
}
|
} catch (IOException e) {
|
System.out.println(e.getMessage());
|
}
|
}
|
}
|
if (null != serveRecord) {
|
orderByServeRecord.setPhoto(Arrays.stream(serveRecord.getPhoto().split(",")).collect(Collectors.toList()));
|
orderByServeRecord.setCardPic(serveRecord.getCardPic());
|
orderByServeRecord.setPaperPic(serveRecord.getPaperPic());
|
orderByServeRecord.setMachinePic(serveRecord.getMachinePic());
|
}
|
result.setServeRecordInfo(orderByServeRecord);
|
}
|
|
private void workerInfo(OrderDetailVO result, com.ruoyi.order.api.entity.Order order) {
|
MasterWorker worker = masterWorkerService.getById(order.getServerId());
|
OrderByWorkerVO orderByWorker = new OrderByWorkerVO();
|
if (null != worker) {
|
orderByWorker.setProfilePicture(worker.getProfilePicture());
|
orderByWorker.setName(worker.getRealName());
|
orderByWorker.setPhone(worker.getPhone());
|
orderByWorker.setSex(worker.getSex());
|
} else {
|
orderByWorker.setName(order.getServerName());
|
orderByWorker.setPhone(order.getServerPhone());
|
}
|
result.setWorkerInfo(orderByWorker);
|
}
|
|
private void serveInfo(OrderDetailVO result, com.ruoyi.order.api.entity.Order order) {
|
RecoveryServe recoveryServe = recoveryServeService.getById(order.getServeId());
|
OrderByServeVO orderByServe = new OrderByServeVO();
|
if (null != recoveryServe) {
|
RecoveryClassify recoveryClassify = recoveryClassifyService.getById(recoveryServe.getClassifyId());
|
orderByServe.setServeName(recoveryServe.getServeName());
|
orderByServe.setCover(recoveryServe.getCover());
|
if (null != recoveryClassify) {
|
orderByServe.setSupClassify(recoveryClassify.getSupClassify());
|
orderByServe.setSubClassify(recoveryClassify.getSubClassify());
|
}
|
} else {
|
orderByServe.setServeName(order.getServeName());
|
}
|
orderByServe.setPrice(order.getServePrice());
|
orderByServe.setSubsidy(order.getSubsidy());
|
result.setServeInfo(orderByServe);
|
}
|
|
private void orderInfo(OrderDetailVO result, com.ruoyi.order.api.entity.Order order) {
|
// 订单信息
|
OrderInfoVO orderInfo = new OrderInfoVO();
|
if (null != order) {
|
orderInfo.setOrderNumber(order.getOrderNumber());
|
orderInfo.setPlaceOrderTime(order.getCreateTime());
|
orderInfo.setState(order.getState());
|
orderInfo.setReservationRemark(order.getReservationRemark());
|
}
|
result.setOrderInfo(orderInfo);
|
}
|
|
private void userInfo(OrderDetailVO result, com.ruoyi.order.api.entity.Order order) {
|
Integer userId = order.getUserId();
|
User user = userMapper.selectById(userId);
|
OrderByUserInfoVO orderByUserInfo = new OrderByUserInfoVO();
|
if (null != user) {
|
orderByUserInfo.setProfilePicture(user.getProfilePicture());
|
orderByUserInfo.setUserNumber(user.getUserNo());
|
}
|
orderByUserInfo.setReservationName(order.getReservationName());
|
orderByUserInfo.setReservationPhone(order.getReservationPhone());
|
if (order.getAddress()!=null) {
|
orderByUserInfo.setReservationAddress(order.getReservationAddress() + order.getAddress());
|
}else {
|
orderByUserInfo.setReservationAddress(order.getReservationAddress());
|
}
|
orderByUserInfo.setTime(order.getTime());
|
result.setUserInfo(orderByUserInfo);
|
}
|
/**
|
* 订单id列表
|
*
|
* @param orderQueryRequest 订单列表查询参数
|
* @return 订单id列表
|
*/
|
@Override
|
public List<String> queryIdList(OrderQueryRequest orderQueryRequest) {
|
// 基础查询
|
Page<com.ruoyi.order.api.entity.Order> pageList = orderClient.queryPage(orderQueryRequest).getData();
|
return pageList.getRecords().stream().map(com.ruoyi.order.api.entity.Order::getId).collect(Collectors.toList());
|
}
|
}
|