TOrderServiceImpl.java 28 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588
  1. package com.szwl.service.impl;
  2. import com.alibaba.excel.EasyExcel;
  3. import com.alibaba.excel.ExcelWriter;
  4. import com.alibaba.excel.write.metadata.WriteSheet;
  5. import com.alibaba.excel.write.style.column.LongestMatchColumnWidthStyleStrategy;
  6. import com.alibaba.fastjson.JSON;
  7. import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
  8. import com.baomidou.mybatisplus.core.toolkit.Wrappers;
  9. import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
  10. import com.szwl.constant.ConfigConsts;
  11. import com.szwl.exception.MyException;
  12. import com.szwl.feign.SzwlFeign;
  13. import com.szwl.model.bean.ChartBean;
  14. import com.szwl.model.bean.ChartColumn;
  15. import com.szwl.model.bean.OrderDaoChuDTO;
  16. import com.szwl.model.bo.ChartType;
  17. import com.szwl.model.bo.R;
  18. import com.szwl.model.dto.OrderDto;
  19. import com.szwl.model.entity.TAdmin;
  20. import com.szwl.model.entity.TAdminEquipment;
  21. import com.szwl.model.entity.TEquipment;
  22. import com.szwl.model.entity.TOrder;
  23. import com.szwl.mapper.TOrderMapper;
  24. import com.szwl.model.excel.NewOrderTarget;
  25. import com.szwl.model.excel.OrderTarget;
  26. import com.szwl.model.query.OrderDaoChuParam;
  27. import com.szwl.model.query.OrderStatisticsDTO;
  28. import com.szwl.model.query.StatisticsParam;
  29. import com.szwl.model.utils.DateUtils;
  30. import com.szwl.service.TOrderService;
  31. import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
  32. import com.szwl.util.YunPianSms;
  33. import org.apache.commons.collections4.CollectionUtils;
  34. import org.apache.commons.lang.StringUtils;
  35. import org.springframework.beans.factory.annotation.Autowired;
  36. import org.springframework.stereotype.Service;
  37. import javax.annotation.Resource;
  38. import javax.servlet.http.HttpServletResponse;
  39. import java.io.IOException;
  40. import java.net.URLEncoder;
  41. import java.text.ParseException;
  42. import java.text.SimpleDateFormat;
  43. import java.util.ArrayList;
  44. import java.util.Date;
  45. import java.util.List;
  46. import java.util.concurrent.CountDownLatch;
  47. import java.util.concurrent.ExecutorService;
  48. import java.util.concurrent.Executors;
  49. /**
  50. * <p>
  51. * 服务实现类
  52. * </p>
  53. *
  54. * @author wuhs
  55. * @since 2022-06-14
  56. */
  57. @Service
  58. public class TOrderServiceImpl extends ServiceImpl<TOrderMapper, TOrder> implements TOrderService {
  59. @Resource
  60. TOrderMapper tOrderMapper;
  61. @Autowired
  62. SzwlFeign szwlFeign;
  63. private static final String appid = "07784f5fedb508046c841b391005b7de";
  64. //首页统计
  65. @Override
  66. public ChartColumn getStatistics(StatisticsParam param) {
  67. List<ChartBean> list = new ArrayList<>();
  68. String msg = "";
  69. SimpleDateFormat sf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
  70. try {
  71. //使用SimpleDateFormat的parse()方法生成Date
  72. Date start = sf.parse(param.getStartDate());
  73. Date end = sf.parse(param.getEndDate());
  74. SimpleDateFormat endsf = new SimpleDateFormat("yyyy/MM/dd HH:mm:ss");
  75. param.setStartDate(endsf.format(start));
  76. param.setEndDate(endsf.format(end));
  77. } catch (ParseException e) {
  78. e.printStackTrace();
  79. }
  80. if (ChartType.day.toString().equals(param.getChartType())) {
  81. list = tOrderMapper.getDayStatistics(param);
  82. msg = "日统计";
  83. }
  84. if (ChartType.week.toString().equals(param.getChartType())) {
  85. list = tOrderMapper.getWeekStatistics(param);
  86. msg = "周统计";
  87. }
  88. if (ChartType.month.toString().equals(param.getChartType())) {
  89. list = tOrderMapper.getMonthStatistics(param);
  90. msg = "月统计";
  91. }
  92. if (ChartType.year.toString().equals(param.getChartType())) {
  93. list = tOrderMapper.getYearStatistics(param);
  94. msg = "年统计";
  95. }
  96. // if (CollectionUtils.isEmpty(list)) {
  97. // throw new MyException("获取" + msg + "数据为空");
  98. // }
  99. ChartColumn chartColumn = new ChartColumn(list);
  100. return chartColumn;
  101. }
  102. //机器排行统计
  103. @Override
  104. public ChartColumn getEquipmentStatistics(StatisticsParam param) {
  105. List<ChartBean> list = new ArrayList<>();
  106. String msg = "";
  107. if (ChartType.day.toString().equals(param.getChartType())) {
  108. msg = "日统计";
  109. }
  110. if (ChartType.week.toString().equals(param.getChartType())) {
  111. msg = "周统计";
  112. }
  113. if (ChartType.month.toString().equals(param.getChartType())) {
  114. msg = "月统计";
  115. }
  116. if (ChartType.year.toString().equals(param.getChartType())) {
  117. msg = "年统计";
  118. }
  119. if("1".equals(param.getChangeType())){
  120. // 花型统计
  121. list = tOrderMapper.getProductNameStatistics(param);
  122. }else{
  123. list = tOrderMapper.getEquipmentStatistics(param);
  124. if(list.size()>0){
  125. for(ChartBean chartBean:list){
  126. String categorie = chartBean.getCategorie();
  127. TEquipment tEquipment = R.getDataIfSuccess(szwlFeign.findEquipmentByClientId(param.getClientId()));
  128. if(StringUtils.isNotEmpty(tEquipment.getName())){
  129. chartBean.setCategorie(tEquipment.getName());
  130. }else {
  131. chartBean.setCategorie(categorie.substring(categorie.length()-6,categorie.length()));
  132. }
  133. }
  134. }
  135. }
  136. if (CollectionUtils.isEmpty(list)) {
  137. throw new MyException("获取" + msg + "数据为空");
  138. }
  139. ChartColumn chartColumn = new ChartColumn(list);
  140. return chartColumn;
  141. }
  142. @Override
  143. public List<OrderDaoChuDTO> orderDaoChu(String begin, String end, Long adminId, String clientId, String type, String companyType, long current, long size) {
  144. OrderDaoChuParam daoChuParam = new OrderDaoChuParam();
  145. daoChuParam.setAdminId(adminId);
  146. daoChuParam.setBegin(begin);
  147. daoChuParam.setEnd(end);
  148. daoChuParam.setClientId(clientId);
  149. daoChuParam.setType(type);
  150. daoChuParam.setCurrent(current-1);
  151. daoChuParam.setSize(size);
  152. daoChuParam.setCompanyType(companyType);
  153. return tOrderMapper.getOrderDaoCu(daoChuParam);
  154. }
  155. @Override
  156. public List<OrderTarget> findById(TAdmin admin, List<TOrder> list) throws ParseException {
  157. List<OrderTarget> list1 = new ArrayList<>();
  158. for (TOrder order : list) {
  159. if(!order.getProductName().equals("优惠码")){
  160. OrderTarget orderTarget = new OrderTarget();
  161. orderTarget.setSn(order.getSn());
  162. orderTarget.setProductName(order.getProductName());
  163. if(order.getRefundAmount() != null) {
  164. orderTarget.setPrice(order.getPrice().subtract(order.getRefundAmount()).setScale(2));
  165. } else {
  166. orderTarget.setPrice(order.getPrice());
  167. }
  168. orderTarget.setClientId(order.getClientId());
  169. orderTarget.setName(admin.getUsername());
  170. // 格式化时间
  171. if(order.getPayDate()!=null) {
  172. String formatPayDate = DateUtils.formatDate(order.getPayDate(), DateUtils.PATTERN_yyyy_MM_dd_HH_mm_ss);
  173. orderTarget.setPayDate(formatPayDate);
  174. }
  175. if(order.getRefundDate()!=null) {
  176. String formatRefundDate = DateUtils.formatDate(order.getRefundDate(), DateUtils.PATTERN_yyyy_MM_dd_HH_mm_ss);
  177. orderTarget.setRefundDate(formatRefundDate);
  178. }
  179. Integer status = order.getStatus();
  180. if (status == 0) {
  181. orderTarget.setStatus("未支付");
  182. } else if (status == 1) {
  183. orderTarget.setStatus("已支付");
  184. } else if (status == 3) {
  185. orderTarget.setStatus("已退款");
  186. } else {
  187. orderTarget.setStatus(String.valueOf(status));
  188. }
  189. if (order.getAgencyProportion()!=null) {
  190. orderTarget.setAgencyProportion(String.valueOf(order.getAgencyProportion()));
  191. }
  192. if (order.getMerchantProportion()!=null) {
  193. orderTarget.setMerchantProportion(String.valueOf(order.getMerchantProportion()));
  194. }
  195. if (order.getPersonageProportion()!=null) {
  196. orderTarget.setPersonageProportion(String.valueOf(order.getPersonageProportion()));
  197. }
  198. if ("WEIXIN_NATIVE".equals(order.getFrpCode())) {
  199. orderTarget.setFrp_code("微信主扫支付");
  200. } else if("ALIPAY_NATIVE".equals(order.getFrpCode())){
  201. orderTarget.setFrp_code("支付宝主扫支付");
  202. }else if("WEIXIN_CARD".equals(order.getFrpCode())){
  203. orderTarget.setFrp_code("微信被扫支付");
  204. }else if("ALIPAY_CARD".equals(order.getFrpCode())){
  205. orderTarget.setFrp_code("支付宝被扫支付");
  206. }else {
  207. orderTarget.setFrp_code(order.getFrpCode());
  208. }
  209. if(StringUtils.isEmpty(orderTarget.getFrp_code())){
  210. orderTarget.setFrp_code(order.getFrpCode());
  211. }
  212. list1.add(orderTarget);
  213. }
  214. }
  215. return list1;
  216. }
  217. @Override
  218. public List<OrderStatisticsDTO> findByTime(String clientId, Date startTime, Date endTime, Integer unit) {
  219. return tOrderMapper.findByTime(clientId,startTime,endTime,unit);
  220. }
  221. @Override
  222. public String setMessage(Long id, String customerPhone) {
  223. TOrder order = tOrderMapper.selectById(id);
  224. if(order != null) {
  225. String companyType = order.getCompanyType();
  226. String clientId = order.getClientId();
  227. String sn = order.getSn();
  228. TEquipment equipment = R.getDataIfSuccess(szwlFeign.findEquipmentByClientId(order.getClientId()));
  229. if (equipment == null) {
  230. return "设备不存在";
  231. }
  232. String operationalPhone = equipment.getOperationalPhone();
  233. String phone = null;
  234. //判断是否有机器运营者,作为短信接收通知人
  235. if(!StringUtils.isEmpty(operationalPhone)){
  236. //直接发送到机器运营者
  237. phone = operationalPhone;
  238. }else{
  239. //直接发送到账户拥有者手机
  240. TAdmin admin = R.getDataIfSuccess(szwlFeign.getAdmin(String.valueOf(equipment.getAdminId())));
  241. if(admin != null){
  242. if(!StringUtils.isEmpty(admin.getPhone())){
  243. phone = admin.getPhone();
  244. }
  245. } else {
  246. return "账户不存在";
  247. }
  248. }
  249. if(!StringUtils.isEmpty(phone)){
  250. //发短信
  251. try {
  252. String price = String.valueOf(order.getPrice());
  253. Date payDate = order.getPayDate();
  254. String pattern = "yyyy-MM-dd HH:mm:ss";
  255. SimpleDateFormat simpleDateFormat = new SimpleDateFormat(pattern);
  256. String paytime = simpleDateFormat.format(payDate);
  257. String clientId6 = clientId.substring(clientId.length() - 6);
  258. if (StringUtils.isNotEmpty(companyType) && companyType.equals("1")) {
  259. // 如果是七云科技的用户
  260. YunPianSms.sendSms(appid, getScMessage(sn, price, paytime,
  261. equipment.getName(), clientId6, customerPhone), phone);
  262. } else {
  263. // 如果是申泽智能的用户
  264. YunPianSms.sendSms(appid, getSzMessage(sn, price, paytime,
  265. equipment.getName(), clientId6, customerPhone), phone);
  266. }
  267. } catch (Exception e) {
  268. }
  269. } else {
  270. return "设备运营者手机号为空";
  271. }
  272. }
  273. return ConfigConsts.SUCCESS;
  274. }
  275. @Override
  276. public List<NewOrderTarget> exportOrderData(TAdmin admin, List<TOrder> list) {
  277. List<NewOrderTarget> orderTargets = new ArrayList<>();
  278. for (TOrder order : list) {
  279. if(!order.getProductName().equals("优惠码")){
  280. NewOrderTarget orderTarget = new NewOrderTarget();
  281. orderTarget.setSn(order.getSn());
  282. orderTarget.setProductName(order.getProductName());
  283. if(order.getRefundAmount() != null) {
  284. orderTarget.setPrice(order.getPrice().subtract(order.getRefundAmount()).setScale(2));
  285. } else {
  286. orderTarget.setPrice(order.getPrice());
  287. }
  288. orderTarget.setClientId(order.getClientId());
  289. orderTarget.setName(admin.getUsername());
  290. // 格式化时间
  291. if(order.getPayDate()!=null) {
  292. String formatPayDate = DateUtils.formatDate(order.getPayDate(), DateUtils.PATTERN_yyyy_MM_dd_HH_mm_ss);
  293. orderTarget.setPayDate(formatPayDate);
  294. }
  295. if(order.getRefundDate()!=null) {
  296. String formatRefundDate = DateUtils.formatDate(order.getRefundDate(), DateUtils.PATTERN_yyyy_MM_dd_HH_mm_ss);
  297. orderTarget.setRefundDate(formatRefundDate);
  298. }
  299. Integer status = order.getStatus();
  300. if (status == 0) {
  301. orderTarget.setStatus("未支付");
  302. } else if (status == 1) {
  303. orderTarget.setStatus("已支付");
  304. } else if (status == 3) {
  305. orderTarget.setStatus("已退款");
  306. } else {
  307. orderTarget.setStatus(String.valueOf(status));
  308. }
  309. if (order.getAgencyProportion()!=null) {
  310. orderTarget.setAgencyProportion(String.valueOf(order.getAgencyProportion()));
  311. }
  312. if (order.getMerchantProportion()!=null) {
  313. orderTarget.setMerchantProportion(String.valueOf(order.getMerchantProportion()));
  314. }
  315. if (order.getPersonageProportion()!=null) {
  316. orderTarget.setPersonageProportion(String.valueOf(order.getPersonageProportion()));
  317. }
  318. if ("WEIXIN_NATIVE".equals(order.getFrpCode())) {
  319. orderTarget.setFrp_code("微信主扫支付");
  320. } else if("ALIPAY_NATIVE".equals(order.getFrpCode())){
  321. orderTarget.setFrp_code("支付宝主扫支付");
  322. }else if("WEIXIN_CARD".equals(order.getFrpCode())){
  323. orderTarget.setFrp_code("微信被扫支付");
  324. }else if("ALIPAY_CARD".equals(order.getFrpCode())){
  325. orderTarget.setFrp_code("支付宝被扫支付");
  326. }else {
  327. orderTarget.setFrp_code(order.getFrpCode());
  328. }
  329. if(StringUtils.isEmpty(orderTarget.getFrp_code())){
  330. orderTarget.setFrp_code(order.getFrpCode());
  331. }
  332. orderTargets.add(orderTarget);
  333. }
  334. }
  335. return orderTargets;
  336. }
  337. @Override
  338. public void dataExport(OrderDto orderDto, Date begin, Date end, HttpServletResponse response) throws IOException {
  339. //判断当前账号状态
  340. TAdmin admin = R.getDataIfSuccess(szwlFeign.getAdmin(orderDto.getAdminId()));
  341. LambdaQueryWrapper<TOrder> query = Wrappers.lambdaQuery();
  342. if (!orderDto.getUserName().equals("admin")) {
  343. if (StringUtils.isNotEmpty(orderDto.getUserName())) {
  344. TAdmin data = R.getDataIfSuccess(szwlFeign.getAdminByUsername(orderDto.getUserName()));
  345. if (data == null || data.getId() == null) {
  346. return;
  347. }
  348. if (data.getIsAdmined()) {
  349. query.eq(TOrder::getAdminId, data.getId());
  350. } else {
  351. if (data.getParentId() != 1) {
  352. query.eq(TOrder::getAdminId, data.getParentId());
  353. //查找子账户所管理的机器
  354. TAdminEquipment adminEquipment = R.getDataIfSuccess(szwlFeign.getClientIdList(orderDto.getAdminId()));
  355. if (!adminEquipment.getType().equals("0")) {
  356. List<String> list = R.getDataIfSuccess(szwlFeign.getClientIds(orderDto.getAdminId()));
  357. if (list == null || list.size() == 0) {
  358. return;
  359. }
  360. query.in(TOrder::getClientId, list);
  361. }
  362. }
  363. }
  364. } else {
  365. //adminType="all"时,代表查全部下级 子账户没有这个权限 公司人员默认查所有人
  366. if (StringUtils.isNotEmpty(orderDto.getAdminType())) {
  367. if (admin.getIsAdmined() && admin.getType() > 1) {
  368. if (admin.getType() > 1) {
  369. if (orderDto.getAdminType().equals("all")) {
  370. //查找所有下级
  371. List<Long> admidIdList = R.getDataIfSuccess(szwlFeign.getAdminIdList(orderDto.getAdminId()));
  372. query.in(TOrder::getAdminId, admidIdList);
  373. }
  374. }
  375. } else {
  376. if (admin.getType() > 1) {
  377. //登录账户为子账户 不查下级 只查对应机器的订单
  378. TAdminEquipment adminEquipment = R.getDataIfSuccess(szwlFeign.getClientIdList(String.valueOf(admin.getParentId())));
  379. if (adminEquipment.getType().equals("0")) {
  380. //全部机器
  381. TAdmin upAdmin = R.getDataIfSuccess(szwlFeign.getAdmin(String.valueOf(admin.getParentId())));
  382. query.eq(TOrder::getAdminId, upAdmin.getId());
  383. } else {
  384. String equipmentIds = adminEquipment.getEquipmentIds();
  385. List<String> equipmentIdList = JSON.parseArray(equipmentIds, String.class);
  386. query.in(TOrder::getClientId, equipmentIdList);
  387. }
  388. }
  389. }
  390. } else {
  391. //判断当前账号状态 公司还是商家
  392. if (admin.getType() > 1) {
  393. //商家 判断是否子账户
  394. if (admin.getIsAdmined()) {
  395. //商家自己
  396. query.eq(TOrder::getAdminId, orderDto.getAdminId());
  397. } else {
  398. //商家 子账户
  399. //登录账户为子账户 不查下级 只查对应机器的订单
  400. TAdminEquipment adminEquipment = R.getDataIfSuccess(szwlFeign.getClientIdList(String.valueOf(admin.getParentId())));
  401. if (adminEquipment.getType().equals("0")) {
  402. //全部机器
  403. TAdmin upAdmin = R.getDataIfSuccess(szwlFeign.getAdmin(String.valueOf(admin.getParentId())));
  404. query.eq(TOrder::getAdminId, upAdmin.getId());
  405. } else {
  406. String equipmentIds = adminEquipment.getEquipmentIds();
  407. List<String> equipmentIdList = JSON.parseArray(equipmentIds, String.class);
  408. query.in(TOrder::getClientId, equipmentIdList);
  409. }
  410. }
  411. }
  412. }
  413. }
  414. }
  415. if (StringUtils.isNotEmpty(orderDto.getPayType())) {
  416. query.eq(TOrder::getFrpCode, orderDto.getPayType());
  417. }
  418. if (StringUtils.isNotEmpty(orderDto.getClientId())) {
  419. TEquipment equipment = R.getDataIfSuccess(szwlFeign.findEquipmentByClientId(orderDto.getClientId()));
  420. //判断机器是否属于这个登陆账号
  421. if (admin.getType() > 1) {
  422. //商家
  423. if (equipment.getAdminId().toString().equals(admin.getId().toString())) {
  424. query.eq(TOrder::getEquipmentId, equipment.getId());
  425. }
  426. } else {
  427. query.eq(TOrder::getEquipmentId, equipment.getId());
  428. }
  429. }
  430. if (StringUtils.isNotEmpty(orderDto.getEquipmentId())) {
  431. query.eq(TOrder::getEquipmentId, orderDto.getEquipmentId());
  432. }
  433. if (StringUtils.isNotEmpty(orderDto.getStatus())) {
  434. query.eq(TOrder::getStatus, orderDto.getStatus());
  435. }
  436. if (StringUtils.isNotEmpty(orderDto.getDateType())) {
  437. if (orderDto.getDateType().equals("0")) {
  438. //创建时间
  439. if (begin != null && end != null) {
  440. query.gt(TOrder::getCreateDate, begin);
  441. query.lt(TOrder::getCreateDate, end);
  442. }
  443. }
  444. if (orderDto.getDateType().equals("1")) {
  445. //退款时间
  446. if (begin != null && end != null) {
  447. query.gt(TOrder::getRefundDate, begin);
  448. query.lt(TOrder::getRefundDate, end);
  449. }
  450. }
  451. }
  452. // 公司平台
  453. // 申泽平台管理员
  454. String companyType = orderDto.getCompanyType();
  455. if (admin.getId() == 2738) {
  456. companyType = "0";
  457. }
  458. // 七云平台管理员
  459. if (admin.getId() == 2739) {
  460. companyType = "1";
  461. }
  462. if (StringUtils.isNotEmpty(companyType)) {
  463. if (companyType.equals("0")) {
  464. String finalCompanyType = companyType;
  465. query.nested(q -> q.isNull(TOrder::getCompanyType).or()
  466. .eq(TOrder::getCompanyType, finalCompanyType));
  467. } else {
  468. query.eq(TOrder::getCompanyType, companyType);
  469. }
  470. }
  471. String machineType = orderDto.getMachineType();
  472. if (StringUtils.isNotEmpty(machineType)) {
  473. if (machineType.equals("0")) {
  474. query.nested(q -> q.isNull(TOrder::getMachineType).or()
  475. .eq(TOrder::getMachineType, machineType));
  476. } else {
  477. query.eq(TOrder::getMachineType, machineType);
  478. }
  479. }
  480. // 查询总数
  481. int pageSize = 1000;
  482. int total = count(query);
  483. // 总页数
  484. int totalPages = (total + pageSize - 1) / pageSize;
  485. // 这里注意 有同学反应使用swagger 会导致各种问题,请直接用浏览器或者用postman
  486. response.setContentType("application/octet-stream; charset=UTF-8");
  487. response.setCharacterEncoding("utf-8");
  488. // 这里URLEncoder.encode可以防止中文乱码
  489. String fileName = URLEncoder.encode("订单记录-" + System.currentTimeMillis(), "UTF-8").replaceAll("\\+", "%20");
  490. response.setHeader("Content-disposition", "attachment;filename=" + fileName + ".xlsx");
  491. // 创建ExcelWriter对象
  492. ExcelWriter excelWriter = EasyExcel.write(response.getOutputStream(), NewOrderTarget.class).registerWriteHandler(new LongestMatchColumnWidthStyleStrategy()).build();
  493. // 创建 Sheet 对象
  494. WriteSheet writeSheet = EasyExcel.writerSheet(0, "订单").build();
  495. // 创建 CountDownLatch 对象
  496. CountDownLatch countDownLatch = new CountDownLatch(totalPages);
  497. // 创建线程池
  498. ExecutorService executorService = Executors.newFixedThreadPool(10);
  499. // 循环写入数据
  500. for (int i = 1; i <= totalPages; i++) {
  501. int page = i;
  502. executorService.submit(() -> {
  503. try {
  504. Page<TOrder> orderPage = new Page<>(page, pageSize);
  505. Page<TOrder> pageList = page(orderPage, query);
  506. List<TOrder> list = pageList.getRecords();
  507. // 写入数据
  508. List<NewOrderTarget> orderTargetList = exportOrderData(admin, list);
  509. synchronized (excelWriter) {
  510. excelWriter.write(orderTargetList, writeSheet);
  511. }
  512. } catch (Exception e) {
  513. // 异常处理
  514. e.printStackTrace();
  515. } finally {
  516. // 计数器减一
  517. countDownLatch.countDown();
  518. }
  519. });
  520. }
  521. // 等待所有线程执行完毕
  522. try {
  523. countDownLatch.await();
  524. } catch (InterruptedException e) {
  525. e.printStackTrace();
  526. }
  527. // 关闭 ExcelWriter 对象
  528. excelWriter.finish();
  529. // 关闭线程池
  530. executorService.shutdown();
  531. }
  532. private String getSzMessage(String sn, String price, String payTime,String equipmentName,String clientId,String customerPhone) {
  533. String message = "";
  534. if(StringUtils.isNotEmpty(customerPhone)&&customerPhone.length()>3){
  535. message = "【申泽智能】您好,接到消费者投诉:机器做糖出现问题,需要您退款。订单号:"
  536. +sn+",机器名称:"+equipmentName+",设备编号:"+clientId+
  537. ",价格:"+price+"元,订单支付时间:"+payTime+",消费者联系方式:"+customerPhone+
  538. "。如果已通过私下退款的方式,麻烦提供一下退款截屏到群里。请于24小时内将此订单进行退款处理,过后我司将自行帮您进行退款处理,若超过5次超时处理,可能会有冻结银行卡的风险,谢谢配合。";
  539. }else {
  540. message = "【申泽智能】您好,接到消费者投诉:机器做糖出现问题,需要您退款。订单号:"
  541. +sn+",机器名称:"+equipmentName+",设备编号:"+clientId+
  542. ",价格:"+price+"元,订单支付时间:"+payTime+",该投诉消费者没有留联系方式,如需核实,请把你的联系方式反馈给我们,我们会把你的联系方式通知到消费者手上,让消费者联系您。" +
  543. "如果已通过私下退款的方式,麻烦提供一下退款截屏到群里。请于24小时内将此订单进行退款处理,过后我司将自行帮您进行退款处理,若超过5次超时处理,可能会有冻结银行卡的风险,谢谢配合。";
  544. }
  545. return message;
  546. }
  547. private String getScMessage(String sn, String price, String payTime,String equipmentName,String clientId,String customerPhone) {
  548. String message = "";
  549. if(StringUtils.isNotEmpty(customerPhone)&&customerPhone.length()>3){
  550. message = "【七云科技】您好,接到消费者投诉:机器做糖出现问题,需要您退款。订单号:"
  551. +sn+",机器名称:"+equipmentName+",设备编号:"+clientId+
  552. ",价格:"+price+"元,订单支付时间:"+payTime+",消费者联系方式:"+customerPhone+
  553. "。如果已通过私下退款的方式,麻烦提供一下退款截屏到群里。请于24小时内将此订单进行退款处理,过后我司将自行帮您进行退款处理,若超过5次超时处理,可能会有冻结银行卡的风险,谢谢配合。";
  554. }else {
  555. message = "【七云科技】您好,接到消费者投诉:机器做糖出现问题,需要您退款。订单号:"
  556. +sn+",机器名称:"+equipmentName+",设备编号:"+clientId+
  557. ",价格:"+price+"元,订单支付时间:"+payTime+",该投诉消费者没有留联系方式,如需核实,请把你的联系方式反馈给我们,我们会把你的联系方式通知到消费者手上,让消费者联系您。" +
  558. "如果已通过私下退款的方式,麻烦提供一下退款截屏到群里。请于24小时内将此订单进行退款处理,过后我司将自行帮您进行退款处理,若超过5次超时处理,可能会有冻结银行卡的风险,谢谢配合。";
  559. }
  560. return message;
  561. }
  562. }