InsExcelTaskAsyncServiceImpl.java 10 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233
  1. package com.ydtech.modules.fnc.service.impl;
  2. import com.alibaba.excel.EasyExcel;
  3. import com.alipay.api.domain.TakeAwayScopeInfo;
  4. import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
  5. import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
  6. import com.ydtech.constants.enums.dict.InsOrderStatusAllEnum;
  7. import com.ydtech.modules.admin.model.SysUser;
  8. import com.ydtech.modules.admin.model.dto.OrdersDataExcel;
  9. import com.ydtech.modules.admin.model.report.company.OrdersDataDto;
  10. import com.ydtech.modules.base.controller.BaseController;
  11. import com.ydtech.modules.console.dto.BigOrderUploadDto;
  12. import com.ydtech.modules.fnc.dao.ImportAsyncMapper;
  13. import com.ydtech.modules.fnc.dao.InsExcelTaskAsyncMapper;
  14. import com.ydtech.modules.fnc.dto.InsExcelTaskDto;
  15. import com.ydtech.modules.fnc.entity.ImportResult;
  16. import com.ydtech.modules.fnc.entity.InsExcelTaskEntity;
  17. import com.ydtech.modules.fnc.service.InsExcelTaskAsyncService;
  18. import com.ydtech.modules.inv.model.dto.InsImportResult;
  19. import com.ydtech.modules.inv.utils.EasyExcelUtils;
  20. import com.ydtech.modules.inv.utils.excel.CustomMultiFieldMergeStrategy;
  21. import com.ydtech.modules.order.dao.InsAreaCompanyMapper;
  22. import com.ydtech.modules.order.entity.BasePageResult;
  23. import com.ydtech.utils.SnowFlakeUtil;
  24. import org.springframework.beans.factory.annotation.Autowired;
  25. import org.springframework.beans.factory.annotation.Value;
  26. import org.springframework.scheduling.annotation.Async;
  27. import org.springframework.stereotype.Service;
  28. import org.springframework.stereotype.Service;
  29. import org.springframework.transaction.annotation.Transactional;
  30. import org.springframework.util.CollectionUtils;
  31. import java.io.File;
  32. import java.io.IOException;
  33. import java.math.BigDecimal;
  34. import java.math.RoundingMode;
  35. import java.nio.file.Files;
  36. import java.nio.file.Path;
  37. import java.nio.file.Paths;
  38. import java.text.SimpleDateFormat;
  39. import java.time.LocalDateTime;
  40. import java.time.format.DateTimeFormatter;
  41. import java.util.Date;
  42. import java.util.HashMap;
  43. import java.util.List;
  44. import java.util.stream.Collectors;
  45. import java.util.stream.Stream;
  46. @Service
  47. public class InsExcelTaskAsyncServiceImpl extends ServiceImpl<InsExcelTaskAsyncMapper, InsExcelTaskEntity> implements InsExcelTaskAsyncService {
  48. @Autowired
  49. private InsAreaCompanyMapper insAreaCompanyMapper;
  50. @Value("${upload.file.path}")
  51. private String uploadFilePath;
  52. @Value("${upload.file.path}")
  53. private String uploadPath;
  54. @Async
  55. @Override
  56. public void importasync(List<OrdersDataExcel> resultSubOrder, HashMap<String, String> dateMapByType,String beginDate,String endDate) {
  57. InsExcelTaskEntity insExcelTaskEntity = new InsExcelTaskEntity();
  58. String taskId = String.valueOf(new SnowFlakeUtil().nextId());
  59. insExcelTaskEntity.setId(taskId);
  60. insExcelTaskEntity.setStatus("ready");
  61. insExcelTaskEntity.setUserId(dateMapByType.get("userLoginId"));
  62. insExcelTaskEntity.setCreateTime(LocalDateTime.now());
  63. insExcelTaskEntity.setCreatedAt(LocalDateTime.now());
  64. insExcelTaskEntity.setType("1");
  65. this.constructionDate(beginDate,endDate,insExcelTaskEntity);
  66. baseMapper.insert(insExcelTaskEntity);
  67. if (!resultSubOrder.isEmpty()) {
  68. OrdersDataDto ordersDataDto = new OrdersDataDto();
  69. ordersDataDto.setBeginDate(dateMapByType.get("startDate"));
  70. ordersDataDto.setEndDate(dateMapByType.get("endDate"));
  71. ordersDataDto.setUserId(dateMapByType.get("userId"));
  72. ordersDataDto.setUserName(dateMapByType.get("userName"));
  73. ordersDataDto.setMobile(dateMapByType.get("mobile"));
  74. for (OrdersDataExcel record : resultSubOrder) {
  75. String licenseno = record.getLicenseno(); //车牌号
  76. String frameno = record.getFrameno(); //车牌号
  77. ordersDataDto.setLicenseno(licenseno);
  78. ordersDataDto.setFrameno(frameno);
  79. OrdersDataDto dto = insAreaCompanyMapper.getSumBigOrderCount(ordersDataDto);
  80. String orderNumber = dto.getOrderNumber();
  81. BigDecimal num1 = new BigDecimal(orderNumber);
  82. BigDecimal num2 = new BigDecimal(record.getOrderNumber());
  83. BigDecimal result = num1.divide(num2, 2, RoundingMode.HALF_UP);
  84. record.setCloseRate(result.toString());
  85. record.setNamesimple(dto.getNamesimple());
  86. }
  87. }
  88. String uploadPath = this.uploadFilePath + "/excel/" + taskId + "/";
  89. File folder = new File(uploadPath);
  90. // 路劲不存在创建目录
  91. if (!folder.isDirectory()) {
  92. folder.mkdirs();
  93. }
  94. String fileName = EasyExcelUtils.downExcel(uploadPath, "控制台大订单导出", OrdersDataExcel.class, resultSubOrder);
  95. InsExcelTaskEntity insExcelTaskEntity1 = new InsExcelTaskEntity();
  96. insExcelTaskEntity1.setId(taskId);
  97. insExcelTaskEntity1.setCompletedAt(LocalDateTime.now());
  98. insExcelTaskEntity1.setStatus("complete");
  99. if (!CollectionUtils.isEmpty(resultSubOrder)) {
  100. insExcelTaskEntity1.setUploadUrl("/upload/excel/" + taskId + "/" + fileName);
  101. }
  102. baseMapper.updateById(insExcelTaskEntity1);
  103. }
  104. /**
  105. *
  106. * @param beginDate
  107. * @param endDate
  108. * @param insExcelTaskEntity
  109. * 添加查询时间 如果是当前日期 则时分秒取当前时分秒 如果不是则在结束日期 + 23:59:59
  110. */
  111. private void constructionDate(String beginDate, String endDate, InsExcelTaskEntity insExcelTaskEntity) {
  112. String[] parts = beginDate.split(" ");
  113. beginDate = parts[0];
  114. String[] parts1 = endDate.split(" ");
  115. endDate = parts1[0];
  116. // 定义时间格式的常量
  117. DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss");
  118. // 构建开始时间
  119. LocalDateTime startTime = LocalDateTime.parse(beginDate + " 00:00:00", formatter);
  120. // 这里的 insExcelTaskEntity 假设为某个对象,用于存储时间信息,这里仅作示例
  121. insExcelTaskEntity.setStartTime(startTime);
  122. // 结束时间与当前日期做比较
  123. Date currentDate = new Date();
  124. // 创建 SimpleDateFormat 对象,用于格式化日期
  125. SimpleDateFormat formatterYyyyMMM = new SimpleDateFormat("yyyy-MM-dd");
  126. String formattedDate = formatterYyyyMMM.format(currentDate);
  127. if (endDate.equals(formattedDate)) {
  128. // 构建结束时间
  129. LocalDateTime endTime = LocalDateTime.parse(endDate + " " + LocalDateTime.now().format(DateTimeFormatter.ofPattern("HH:mm:ss")), formatter);
  130. insExcelTaskEntity.setEndTime(endTime);
  131. } else {
  132. endDate = endDate + " 23:59:59";
  133. // 使用指定的日期时间格式解析 endDate
  134. insExcelTaskEntity.setEndTime(LocalDateTime.parse(endDate, formatter));
  135. }
  136. }
  137. @Override
  138. @Async
  139. public void importasyncBigOrder(List<BigOrderUploadDto> list,String userId,String beginDate,String endDate) {
  140. InsExcelTaskEntity insExcelTaskEntity = new InsExcelTaskEntity();
  141. String taskId = String.valueOf(new SnowFlakeUtil().nextId());
  142. insExcelTaskEntity.setId(taskId);
  143. insExcelTaskEntity.setStatus("ready");
  144. insExcelTaskEntity.setUserId(userId);
  145. insExcelTaskEntity.setCreateTime(LocalDateTime.now());
  146. insExcelTaskEntity.setCreatedAt(LocalDateTime.now());
  147. this.constructionDate(beginDate,endDate,insExcelTaskEntity);
  148. insExcelTaskEntity.setType("0");
  149. baseMapper.insert(insExcelTaskEntity);
  150. if (list != null && !list.isEmpty()) {
  151. for (BigOrderUploadDto bigOrderUploadDto : list) {
  152. String orderStatus = "";
  153. if (InsOrderStatusAllEnum.matchKey(bigOrderUploadDto.getOrderStatus()) != null) {
  154. orderStatus = InsOrderStatusAllEnum.matchKey(bigOrderUploadDto.getOrderStatus()).getDesc();
  155. }
  156. String subOrderStatus = "";
  157. if (InsOrderStatusAllEnum.matchKey(bigOrderUploadDto.getSubOrderStatus()) != null) {
  158. subOrderStatus = InsOrderStatusAllEnum.matchKey(bigOrderUploadDto.getSubOrderStatus()).getDesc();
  159. }
  160. bigOrderUploadDto.setOrderStatus(orderStatus);
  161. bigOrderUploadDto.setSubOrderStatus(subOrderStatus);
  162. }
  163. }
  164. String uploadPath = this.uploadFilePath + "/excel/" + taskId + "/";
  165. File folder = new File(uploadPath);
  166. // 路劲不存在创建目录
  167. if (!folder.isDirectory()) {
  168. folder.mkdirs();
  169. }
  170. String fileName = EasyExcelUtils.downExcel(uploadPath, "控制台大订单明细导出", BigOrderUploadDto.class, list);
  171. InsExcelTaskEntity insExcelTaskEntity1 = new InsExcelTaskEntity();
  172. insExcelTaskEntity1.setId(taskId);
  173. insExcelTaskEntity1.setCompletedAt(LocalDateTime.now());
  174. insExcelTaskEntity1.setStatus("complete");
  175. if (!CollectionUtils.isEmpty(list)) {
  176. insExcelTaskEntity1.setUploadUrl("/upload/excel/" + taskId + "/" + fileName);
  177. }
  178. baseMapper.updateById(insExcelTaskEntity1);
  179. }
  180. /**
  181. *
  182. * @param insExcelTaskDto
  183. * @return 控制台导出任务分页
  184. */
  185. @Override
  186. public BasePageResult<InsExcelTaskEntity> queryPage(InsExcelTaskDto insExcelTaskDto) {
  187. Page<InsExcelTaskEntity> page = new Page<>(insExcelTaskDto.getPageNum(), insExcelTaskDto.getPageSize());
  188. Page<InsExcelTaskEntity> resultPage = baseMapper.queryPage(insExcelTaskDto, page);
  189. return new BasePageResult<>(insExcelTaskDto.getPageNum(), page.getSize(), resultPage.getTotal(), page.getPages(),
  190. resultPage.getRecords());
  191. }
  192. /**
  193. * @version
  194. * @author: whp
  195. * @Description: 任务中心的数据保留7天,7天后删除任务中心数据以及任务中心列表。
  196. */
  197. @Override
  198. @Transactional
  199. public void batchDelete(String nowTime) {
  200. InsExcelTaskDto insExcelTaskDto = new InsExcelTaskDto();
  201. insExcelTaskDto.setNowTime(nowTime);
  202. // 如果与当前时间差大于等于7则删除
  203. List<InsExcelTaskEntity> list = baseMapper.selectAllList(insExcelTaskDto);
  204. List<String> idList = list.stream()
  205. .map(InsExcelTaskEntity::getId)
  206. .filter(id -> id!= null)
  207. .collect(Collectors.toList());
  208. this.removeByIds(idList);
  209. }
  210. }