package com.ydtech.modules.fnc.service.impl; import com.alibaba.excel.EasyExcel; import com.alipay.api.domain.TakeAwayScopeInfo; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; import com.ydtech.constants.enums.dict.InsOrderStatusAllEnum; import com.ydtech.modules.admin.model.SysUser; import com.ydtech.modules.admin.model.dto.OrdersDataExcel; import com.ydtech.modules.admin.model.report.company.OrdersDataDto; import com.ydtech.modules.base.controller.BaseController; import com.ydtech.modules.console.dto.BigOrderUploadDto; import com.ydtech.modules.fnc.dao.ImportAsyncMapper; import com.ydtech.modules.fnc.dao.InsExcelTaskAsyncMapper; import com.ydtech.modules.fnc.dto.InsExcelTaskDto; import com.ydtech.modules.fnc.entity.ImportResult; import com.ydtech.modules.fnc.entity.InsExcelTaskEntity; import com.ydtech.modules.fnc.service.InsExcelTaskAsyncService; import com.ydtech.modules.inv.model.dto.InsImportResult; import com.ydtech.modules.inv.utils.EasyExcelUtils; import com.ydtech.modules.inv.utils.excel.CustomMultiFieldMergeStrategy; import com.ydtech.modules.order.dao.InsAreaCompanyMapper; import com.ydtech.modules.order.entity.BasePageResult; import com.ydtech.utils.SnowFlakeUtil; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Value; import org.springframework.scheduling.annotation.Async; import org.springframework.stereotype.Service; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; import org.springframework.util.CollectionUtils; import java.io.File; import java.io.IOException; import java.math.BigDecimal; import java.math.RoundingMode; import java.nio.file.Files; import java.nio.file.Path; import java.nio.file.Paths; import java.text.SimpleDateFormat; import java.time.LocalDateTime; import java.time.format.DateTimeFormatter; import java.util.Date; import java.util.HashMap; import java.util.List; import java.util.stream.Collectors; import java.util.stream.Stream; @Service public class InsExcelTaskAsyncServiceImpl extends ServiceImpl implements InsExcelTaskAsyncService { @Autowired private InsAreaCompanyMapper insAreaCompanyMapper; @Value("${upload.file.path}") private String uploadFilePath; @Value("${upload.file.path}") private String uploadPath; @Async @Override public void importasync(List resultSubOrder, HashMap dateMapByType,String beginDate,String endDate) { InsExcelTaskEntity insExcelTaskEntity = new InsExcelTaskEntity(); String taskId = String.valueOf(new SnowFlakeUtil().nextId()); insExcelTaskEntity.setId(taskId); insExcelTaskEntity.setStatus("ready"); insExcelTaskEntity.setUserId(dateMapByType.get("userLoginId")); insExcelTaskEntity.setCreateTime(LocalDateTime.now()); insExcelTaskEntity.setCreatedAt(LocalDateTime.now()); insExcelTaskEntity.setType("1"); this.constructionDate(beginDate,endDate,insExcelTaskEntity); baseMapper.insert(insExcelTaskEntity); if (!resultSubOrder.isEmpty()) { OrdersDataDto ordersDataDto = new OrdersDataDto(); ordersDataDto.setBeginDate(dateMapByType.get("startDate")); ordersDataDto.setEndDate(dateMapByType.get("endDate")); ordersDataDto.setUserId(dateMapByType.get("userId")); ordersDataDto.setUserName(dateMapByType.get("userName")); ordersDataDto.setMobile(dateMapByType.get("mobile")); for (OrdersDataExcel record : resultSubOrder) { String licenseno = record.getLicenseno(); //车牌号 String frameno = record.getFrameno(); //车牌号 ordersDataDto.setLicenseno(licenseno); ordersDataDto.setFrameno(frameno); OrdersDataDto dto = insAreaCompanyMapper.getSumBigOrderCount(ordersDataDto); String orderNumber = dto.getOrderNumber(); BigDecimal num1 = new BigDecimal(orderNumber); BigDecimal num2 = new BigDecimal(record.getOrderNumber()); BigDecimal result = num1.divide(num2, 2, RoundingMode.HALF_UP); record.setCloseRate(result.toString()); record.setNamesimple(dto.getNamesimple()); } } String uploadPath = this.uploadFilePath + "/excel/" + taskId + "/"; File folder = new File(uploadPath); // 路劲不存在创建目录 if (!folder.isDirectory()) { folder.mkdirs(); } String fileName = EasyExcelUtils.downExcel(uploadPath, "控制台大订单导出", OrdersDataExcel.class, resultSubOrder); InsExcelTaskEntity insExcelTaskEntity1 = new InsExcelTaskEntity(); insExcelTaskEntity1.setId(taskId); insExcelTaskEntity1.setCompletedAt(LocalDateTime.now()); insExcelTaskEntity1.setStatus("complete"); if (!CollectionUtils.isEmpty(resultSubOrder)) { insExcelTaskEntity1.setUploadUrl("/upload/excel/" + taskId + "/" + fileName); } baseMapper.updateById(insExcelTaskEntity1); } /** * * @param beginDate * @param endDate * @param insExcelTaskEntity * 添加查询时间 如果是当前日期 则时分秒取当前时分秒 如果不是则在结束日期 + 23:59:59 */ private void constructionDate(String beginDate, String endDate, InsExcelTaskEntity insExcelTaskEntity) { String[] parts = beginDate.split(" "); beginDate = parts[0]; String[] parts1 = endDate.split(" "); endDate = parts1[0]; // 定义时间格式的常量 DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss"); // 构建开始时间 LocalDateTime startTime = LocalDateTime.parse(beginDate + " 00:00:00", formatter); // 这里的 insExcelTaskEntity 假设为某个对象,用于存储时间信息,这里仅作示例 insExcelTaskEntity.setStartTime(startTime); // 结束时间与当前日期做比较 Date currentDate = new Date(); // 创建 SimpleDateFormat 对象,用于格式化日期 SimpleDateFormat formatterYyyyMMM = new SimpleDateFormat("yyyy-MM-dd"); String formattedDate = formatterYyyyMMM.format(currentDate); if (endDate.equals(formattedDate)) { // 构建结束时间 LocalDateTime endTime = LocalDateTime.parse(endDate + " " + LocalDateTime.now().format(DateTimeFormatter.ofPattern("HH:mm:ss")), formatter); insExcelTaskEntity.setEndTime(endTime); } else { endDate = endDate + " 23:59:59"; // 使用指定的日期时间格式解析 endDate insExcelTaskEntity.setEndTime(LocalDateTime.parse(endDate, formatter)); } } @Override @Async public void importasyncBigOrder(List list,String userId,String beginDate,String endDate) { InsExcelTaskEntity insExcelTaskEntity = new InsExcelTaskEntity(); String taskId = String.valueOf(new SnowFlakeUtil().nextId()); insExcelTaskEntity.setId(taskId); insExcelTaskEntity.setStatus("ready"); insExcelTaskEntity.setUserId(userId); insExcelTaskEntity.setCreateTime(LocalDateTime.now()); insExcelTaskEntity.setCreatedAt(LocalDateTime.now()); this.constructionDate(beginDate,endDate,insExcelTaskEntity); insExcelTaskEntity.setType("0"); baseMapper.insert(insExcelTaskEntity); if (list != null && !list.isEmpty()) { for (BigOrderUploadDto bigOrderUploadDto : list) { String orderStatus = ""; if (InsOrderStatusAllEnum.matchKey(bigOrderUploadDto.getOrderStatus()) != null) { orderStatus = InsOrderStatusAllEnum.matchKey(bigOrderUploadDto.getOrderStatus()).getDesc(); } String subOrderStatus = ""; if (InsOrderStatusAllEnum.matchKey(bigOrderUploadDto.getSubOrderStatus()) != null) { subOrderStatus = InsOrderStatusAllEnum.matchKey(bigOrderUploadDto.getSubOrderStatus()).getDesc(); } bigOrderUploadDto.setOrderStatus(orderStatus); bigOrderUploadDto.setSubOrderStatus(subOrderStatus); } } String uploadPath = this.uploadFilePath + "/excel/" + taskId + "/"; File folder = new File(uploadPath); // 路劲不存在创建目录 if (!folder.isDirectory()) { folder.mkdirs(); } String fileName = EasyExcelUtils.downExcel(uploadPath, "控制台大订单明细导出", BigOrderUploadDto.class, list); InsExcelTaskEntity insExcelTaskEntity1 = new InsExcelTaskEntity(); insExcelTaskEntity1.setId(taskId); insExcelTaskEntity1.setCompletedAt(LocalDateTime.now()); insExcelTaskEntity1.setStatus("complete"); if (!CollectionUtils.isEmpty(list)) { insExcelTaskEntity1.setUploadUrl("/upload/excel/" + taskId + "/" + fileName); } baseMapper.updateById(insExcelTaskEntity1); } /** * * @param insExcelTaskDto * @return 控制台导出任务分页 */ @Override public BasePageResult queryPage(InsExcelTaskDto insExcelTaskDto) { Page page = new Page<>(insExcelTaskDto.getPageNum(), insExcelTaskDto.getPageSize()); Page resultPage = baseMapper.queryPage(insExcelTaskDto, page); return new BasePageResult<>(insExcelTaskDto.getPageNum(), page.getSize(), resultPage.getTotal(), page.getPages(), resultPage.getRecords()); } /** * @version * @author: whp * @Description: 任务中心的数据保留7天,7天后删除任务中心数据以及任务中心列表。 */ @Override @Transactional public void batchDelete(String nowTime) { InsExcelTaskDto insExcelTaskDto = new InsExcelTaskDto(); insExcelTaskDto.setNowTime(nowTime); // 如果与当前时间差大于等于7则删除 List list = baseMapper.selectAllList(insExcelTaskDto); List idList = list.stream() .map(InsExcelTaskEntity::getId) .filter(id -> id!= null) .collect(Collectors.toList()); this.removeByIds(idList); } }