TOrderServiceImpl.java 76 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394959697989910010110210310410510610710810911011111211311411511611711811912012112212312412512612712812913013113213313413513613713813914014114214314414514614714814915015115215315415515615715815916016116216316416516616716816917017117217317417517617717817918018118218318418518618718818919019119219319419519619719819920020120220320420520620720820921021121221321421521621721821922022122222322422522622722822923023123223323423523623723823924024124224324424524624724824925025125225325425525625725825926026126226326426526626726826927027127227327427527627727827928028128228328428528628728828929029129229329429529629729829930030130230330430530630730830931031131231331431531631731831932032132232332432532632732832933033133233333433533633733833934034134234334434534634734834935035135235335435535635735835936036136236336436536636736836937037137237337437537637737837938038138238338438538638738838939039139239339439539639739839940040140240340440540640740840941041141241341441541641741841942042142242342442542642742842943043143243343443543643743843944044144244344444544644744844945045145245345445545645745845946046146246346446546646746846947047147247347447547647747847948048148248348448548648748848949049149249349449549649749849950050150250350450550650750850951051151251351451551651751851952052152252352452552652752852953053153253353453553653753853954054154254354454554654754854955055155255355455555655755855956056156256356456556656756856957057157257357457557657757857958058158258358458558658758858959059159259359459559659759859960060160260360460560660760860961061161261361461561661761861962062162262362462562662762862963063163263363463563663763863964064164264364464564664764864965065165265365465565665765865966066166266366466566666766866967067167267367467567667767867968068168268368468568668768868969069169269369469569669769869970070170270370470570670770870971071171271371471571671771871972072172272372472572672772872973073173273373473573673773873974074174274374474574674774874975075175275375475575675775875976076176276376476576676776876977077177277377477577677777877978078178278378478578678778878979079179279379479579679779879980080180280380480580680780880981081181281381481581681781881982082182282382482582682782882983083183283383483583683783883984084184284384484584684784884985085185285385485585685785885986086186286386486586686786886987087187287387487587687787887988088188288388488588688788888989089189289389489589689789889990090190290390490590690790890991091191291391491591691791891992092192292392492592692792892993093193293393493593693793893994094194294394494594694794894995095195295395495595695795895996096196296396496596696796896997097197297397497597697797897998098198298398498598698798898999099199299399499599699799899910001001100210031004100510061007100810091010101110121013101410151016101710181019102010211022102310241025102610271028102910301031103210331034103510361037103810391040104110421043104410451046104710481049105010511052105310541055105610571058105910601061106210631064106510661067106810691070107110721073107410751076107710781079108010811082108310841085108610871088108910901091109210931094109510961097109810991100110111021103110411051106110711081109111011111112111311141115111611171118111911201121112211231124112511261127112811291130113111321133113411351136113711381139114011411142114311441145114611471148114911501151115211531154115511561157115811591160116111621163116411651166116711681169117011711172117311741175117611771178117911801181118211831184118511861187118811891190119111921193119411951196119711981199120012011202120312041205120612071208120912101211121212131214121512161217121812191220122112221223122412251226122712281229123012311232123312341235123612371238123912401241124212431244124512461247124812491250125112521253125412551256125712581259126012611262126312641265126612671268126912701271127212731274127512761277127812791280128112821283128412851286128712881289129012911292129312941295129612971298129913001301130213031304130513061307130813091310131113121313131413151316131713181319132013211322132313241325132613271328132913301331133213331334133513361337133813391340134113421343134413451346134713481349135013511352135313541355135613571358135913601361136213631364136513661367136813691370137113721373137413751376137713781379138013811382138313841385138613871388138913901391139213931394139513961397139813991400140114021403140414051406140714081409141014111412141314141415141614171418141914201421142214231424142514261427142814291430143114321433143414351436143714381439144014411442144314441445144614471448144914501451145214531454145514561457145814591460146114621463146414651466146714681469147014711472147314741475147614771478147914801481148214831484148514861487148814891490149114921493149414951496149714981499150015011502150315041505150615071508150915101511151215131514
  1. package com.szwl.service.impl;
  2. import cn.hutool.core.util.RandomUtil;
  3. import com.alibaba.excel.EasyExcel;
  4. import com.alibaba.excel.ExcelWriter;
  5. import com.alibaba.excel.write.metadata.WriteSheet;
  6. import com.alibaba.excel.write.style.column.LongestMatchColumnWidthStyleStrategy;
  7. import com.alibaba.fastjson.JSON;
  8. import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
  9. import com.baomidou.mybatisplus.core.metadata.IPage;
  10. import com.baomidou.mybatisplus.core.toolkit.Wrappers;
  11. import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
  12. import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
  13. import com.szwl.exception.MyException;
  14. import com.szwl.feign.SzwlFeign;
  15. import com.szwl.mapper.TCoinOrderMapper;
  16. import com.szwl.mapper.TOrderMapper;
  17. import com.szwl.model.bean.ChartBean;
  18. import com.szwl.model.bean.ChartColumn;
  19. import com.szwl.model.bean.OrderDaoChuDTO;
  20. import com.szwl.model.bo.ChartType;
  21. import com.szwl.model.bo.R;
  22. import com.szwl.model.bo.ResponseModel;
  23. import com.szwl.model.dto.OrderDto;
  24. import com.szwl.model.entity.*;
  25. import com.szwl.model.excel.NewOrderTarget;
  26. import com.szwl.model.excel.OrderTarget;
  27. import com.szwl.model.excel.StatisticsAdminTarget;
  28. import com.szwl.model.excel.StatisticsClientIdTarget;
  29. import com.szwl.model.query.OrderDaoChuParam;
  30. import com.szwl.model.query.OrderStatisticsDTO;
  31. import com.szwl.model.query.StatisticsParam;
  32. import com.szwl.model.utils.DateUtils;
  33. import com.szwl.service.OrderStatisticsMonthService;
  34. import com.szwl.service.OrderStatisticsYearService;
  35. import com.szwl.service.RefundSendRecordService;
  36. import com.szwl.service.TOrderService;
  37. import com.szwl.util.YunPianSms;
  38. import org.apache.commons.collections4.CollectionUtils;
  39. import org.apache.commons.lang.StringUtils;
  40. import org.springframework.beans.factory.annotation.Autowired;
  41. import org.springframework.stereotype.Service;
  42. import javax.annotation.Resource;
  43. import javax.servlet.http.HttpServletResponse;
  44. import java.io.IOException;
  45. import java.net.URLEncoder;
  46. import java.text.ParseException;
  47. import java.text.SimpleDateFormat;
  48. import java.util.*;
  49. import java.util.concurrent.CountDownLatch;
  50. import java.util.concurrent.ExecutorService;
  51. import java.util.concurrent.Executors;
  52. /**
  53. * <p>
  54. * 服务实现类
  55. * </p>
  56. *
  57. * @author wuhs
  58. * @since 2022-06-14
  59. */
  60. @Service
  61. public class TOrderServiceImpl extends ServiceImpl<TOrderMapper, TOrder> implements TOrderService {
  62. @Resource
  63. TOrderMapper tOrderMapper;
  64. @Autowired
  65. private TCoinOrderMapper tCoinOrderMapper;
  66. @Autowired
  67. OrderStatisticsMonthService orderStatisticsMonthService;
  68. @Autowired
  69. OrderStatisticsYearService orderStatisticsYearService;
  70. @Autowired
  71. SzwlFeign szwlFeign;
  72. @Autowired
  73. private RefundSendRecordService refundSendRecordService;
  74. private static final String appid = "07784f5fedb508046c841b391005b7de";
  75. private static final String CALLBACK_URL = "https://sz.sunzee.com.cn/ORDER-SERVER/refundSendRecord/callBack";
  76. //首页统计
  77. @Override
  78. public ChartColumn getStatistics(StatisticsParam param) {
  79. List<ChartBean> list = new ArrayList<>();
  80. String msg = "";
  81. SimpleDateFormat sf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
  82. try {
  83. //使用SimpleDateFormat的parse()方法生成Date
  84. Date start = sf.parse(param.getStartDate());
  85. Date end = sf.parse(param.getEndDate());
  86. SimpleDateFormat endsf = new SimpleDateFormat("yyyy/MM/dd HH:mm:ss");
  87. param.setStartDate(endsf.format(start));
  88. param.setEndDate(endsf.format(end));
  89. } catch (ParseException e) {
  90. e.printStackTrace();
  91. }
  92. if (ChartType.day.toString().equals(param.getChartType())) {
  93. list = tOrderMapper.getDayStatistics(param);
  94. msg = "日统计";
  95. }
  96. if (ChartType.week.toString().equals(param.getChartType())) {
  97. list = tOrderMapper.getWeekStatistics(param);
  98. msg = "周统计";
  99. }
  100. if (ChartType.month.toString().equals(param.getChartType())) {
  101. list = tOrderMapper.getMonthStatistics(param);
  102. msg = "月统计";
  103. }
  104. if (ChartType.year.toString().equals(param.getChartType())) {
  105. list = tOrderMapper.getYearStatistics(param);
  106. msg = "年统计";
  107. }
  108. // if (CollectionUtils.isEmpty(list)) {
  109. // throw new MyException("获取" + msg + "数据为空");
  110. // }
  111. ChartColumn chartColumn = new ChartColumn(list);
  112. return chartColumn;
  113. }
  114. //机器排行统计
  115. @Override
  116. public ChartColumn getEquipmentStatistics(StatisticsParam param) {
  117. List<ChartBean> list = new ArrayList<>();
  118. String msg = "";
  119. if (ChartType.day.toString().equals(param.getChartType())) {
  120. msg = "日统计";
  121. }
  122. if (ChartType.week.toString().equals(param.getChartType())) {
  123. msg = "周统计";
  124. }
  125. if (ChartType.month.toString().equals(param.getChartType())) {
  126. msg = "月统计";
  127. }
  128. if (ChartType.year.toString().equals(param.getChartType())) {
  129. msg = "年统计";
  130. }
  131. if ("1".equals(param.getChangeType())) {
  132. // 花型统计
  133. list = tOrderMapper.getProductNameStatistics(param);
  134. } else {
  135. list = tOrderMapper.getEquipmentStatistics(param);
  136. if (list.size() > 0) {
  137. for (ChartBean chartBean : list) {
  138. String categorie = chartBean.getCategorie();
  139. TEquipment tEquipment = R.getDataIfSuccess(szwlFeign.findEquipmentByClientId(param.getClientId()));
  140. if (StringUtils.isNotEmpty(tEquipment.getName())) {
  141. chartBean.setCategorie(tEquipment.getName());
  142. } else {
  143. chartBean.setCategorie(categorie.substring(categorie.length() - 6, categorie.length()));
  144. }
  145. }
  146. }
  147. }
  148. if (CollectionUtils.isEmpty(list)) {
  149. throw new MyException("获取" + msg + "数据为空");
  150. }
  151. ChartColumn chartColumn = new ChartColumn(list);
  152. return chartColumn;
  153. }
  154. @Override
  155. public List<OrderDaoChuDTO> orderDaoChu(String begin, String end, Long adminId, String clientId, String type, String companyType, long current, long size) {
  156. OrderDaoChuParam daoChuParam = new OrderDaoChuParam();
  157. daoChuParam.setAdminId(adminId);
  158. daoChuParam.setBegin(begin);
  159. daoChuParam.setEnd(end);
  160. daoChuParam.setClientId(clientId);
  161. daoChuParam.setType(type);
  162. daoChuParam.setCurrent(current - 1);
  163. daoChuParam.setSize(size);
  164. daoChuParam.setCompanyType(companyType);
  165. return tOrderMapper.getOrderDaoCu(daoChuParam);
  166. }
  167. @Override
  168. public List<OrderTarget> findById(TAdmin admin, List<TOrder> list) throws ParseException {
  169. List<OrderTarget> list1 = new ArrayList<>();
  170. for (TOrder order : list) {
  171. if (!order.getProductName().equals("优惠码")) {
  172. OrderTarget orderTarget = new OrderTarget();
  173. orderTarget.setSn(order.getSn());
  174. orderTarget.setProductName(order.getProductName());
  175. if (order.getRefundAmount() != null) {
  176. orderTarget.setPrice(order.getPrice().subtract(order.getRefundAmount()).setScale(2));
  177. } else {
  178. orderTarget.setPrice(order.getPrice());
  179. }
  180. orderTarget.setClientId(order.getClientId());
  181. orderTarget.setName(admin.getUsername());
  182. // 格式化时间
  183. if (order.getPayDate() != null) {
  184. String formatPayDate = DateUtils.formatDate(order.getPayDate(), DateUtils.PATTERN_yyyy_MM_dd_HH_mm_ss);
  185. orderTarget.setPayDate(formatPayDate);
  186. }
  187. if (order.getRefundDate() != null) {
  188. String formatRefundDate = DateUtils.formatDate(order.getRefundDate(), DateUtils.PATTERN_yyyy_MM_dd_HH_mm_ss);
  189. orderTarget.setRefundDate(formatRefundDate);
  190. }
  191. Integer status = order.getStatus();
  192. if (status == 0) {
  193. orderTarget.setStatus("未支付");
  194. } else if (status == 1) {
  195. orderTarget.setStatus("已支付");
  196. } else if (status == 3) {
  197. orderTarget.setStatus("已退款");
  198. } else {
  199. orderTarget.setStatus(String.valueOf(status));
  200. }
  201. if (order.getAgencyProportion() != null) {
  202. orderTarget.setAgencyProportion(String.valueOf(order.getAgencyProportion()));
  203. }
  204. if (order.getMerchantProportion() != null) {
  205. orderTarget.setMerchantProportion(String.valueOf(order.getMerchantProportion()));
  206. }
  207. if (order.getPersonageProportion() != null) {
  208. orderTarget.setPersonageProportion(String.valueOf(order.getPersonageProportion()));
  209. }
  210. if ("WEIXIN_NATIVE".equals(order.getFrpCode())) {
  211. orderTarget.setFrp_code("微信主扫支付");
  212. } else if ("ALIPAY_NATIVE".equals(order.getFrpCode())) {
  213. orderTarget.setFrp_code("支付宝主扫支付");
  214. } else if ("WEIXIN_CARD".equals(order.getFrpCode())) {
  215. orderTarget.setFrp_code("微信被扫支付");
  216. } else if ("ALIPAY_CARD".equals(order.getFrpCode())) {
  217. orderTarget.setFrp_code("支付宝被扫支付");
  218. } else {
  219. orderTarget.setFrp_code(order.getFrpCode());
  220. }
  221. if (StringUtils.isEmpty(orderTarget.getFrp_code())) {
  222. orderTarget.setFrp_code(order.getFrpCode());
  223. }
  224. list1.add(orderTarget);
  225. }
  226. }
  227. return list1;
  228. }
  229. @Override
  230. public List<OrderStatisticsDTO> findByTime(String clientId, Date startTime, Date endTime, Integer unit) {
  231. return tOrderMapper.findByTime(clientId, startTime, endTime, unit);
  232. }
  233. @Override
  234. public String setMessage(Long id, String customerPhone, Long adminId) {
  235. TOrder order = tOrderMapper.selectById(id);
  236. String result = "";
  237. RefundSendRecord refundSendRecord = new RefundSendRecord();
  238. String uid = RandomUtil.randomNumbers(18);
  239. refundSendRecord.setId(Long.valueOf(uid));
  240. refundSendRecord.setCreateDate(new Date());
  241. refundSendRecord.setSendAdminId(adminId);
  242. if (order != null) {
  243. String companyType = order.getCompanyType();
  244. String clientId = order.getClientId();
  245. String sn = order.getSn();
  246. // 添加发送记录
  247. refundSendRecord.setSn(sn);
  248. refundSendRecord.setClientId(clientId);
  249. TEquipment equipment = R.getDataIfSuccess(szwlFeign.findEquipmentByClientId(order.getClientId()));
  250. if (equipment == null) {
  251. result = "设备不存在";
  252. return result;
  253. }
  254. String operationalPhone = equipment.getOperationalPhone();
  255. String phone = null;
  256. //判断是否有机器运营者,作为短信接收通知人
  257. if (!StringUtils.isEmpty(operationalPhone)) {
  258. //直接发送到机器运营者
  259. phone = operationalPhone;
  260. } else {
  261. //直接发送到账户拥有者手机
  262. TAdmin admin = R.getDataIfSuccess(szwlFeign.getAdmin(String.valueOf(equipment.getAdminId())));
  263. if (admin != null) {
  264. if (!StringUtils.isEmpty(admin.getPhone())) {
  265. phone = admin.getPhone();
  266. }
  267. } else {
  268. result = "账户不存在";
  269. return result;
  270. }
  271. }
  272. if (!StringUtils.isEmpty(phone)) {
  273. //发短信
  274. try {
  275. String price = String.valueOf(order.getPrice());
  276. Date payDate = order.getPayDate();
  277. String pattern = "yyyy-MM-dd HH:mm:ss";
  278. SimpleDateFormat simpleDateFormat = new SimpleDateFormat(pattern);
  279. String payTime = simpleDateFormat.format(payDate);
  280. String clientId6 = clientId.substring(clientId.length() - 6);
  281. if (StringUtils.isNotEmpty(companyType) && companyType.equals("1")) {
  282. // 如果是七云科技的用户
  283. result = YunPianSms.sendSms(appid, getScMessage(sn, price, payTime,
  284. equipment.getName(), clientId6, customerPhone), phone, uid, CALLBACK_URL);
  285. } else {
  286. // 如果是申泽智能的用户
  287. result = YunPianSms.sendSms(appid, getSzMessage(sn, price, payTime,
  288. equipment.getName(), clientId6, customerPhone), phone, uid, CALLBACK_URL);
  289. }
  290. refundSendRecord.setPhone(phone);
  291. } catch (Exception e) {
  292. e.printStackTrace();
  293. }
  294. } else {
  295. result = "设备运营者手机号为空";
  296. return result;
  297. }
  298. refundSendRecord.setStatus(0);
  299. refundSendRecordService.save(refundSendRecord);
  300. }
  301. return result;
  302. }
  303. @Override
  304. public List<NewOrderTarget> exportOrderData(TAdmin admin, List<TOrder> list) {
  305. List<NewOrderTarget> orderTargets = new ArrayList<>();
  306. Map<String, String> nameMap = new HashMap<>();
  307. for (TOrder order : list) {
  308. if (!order.getProductName().equals("优惠码")) {
  309. NewOrderTarget orderTarget = new NewOrderTarget();
  310. orderTarget.setSn(order.getSn());
  311. orderTarget.setProductName(order.getProductName());
  312. if (order.getRefundAmount() != null) {
  313. orderTarget.setPrice(order.getPrice().subtract(order.getRefundAmount()).setScale(2));
  314. } else {
  315. orderTarget.setPrice(order.getPrice());
  316. }
  317. orderTarget.setClientId(order.getClientId());
  318. String name = "";
  319. name = nameMap.get(order.getClientId());
  320. if (order.getEquipmentId() != null && StringUtils.isEmpty(name)) {
  321. TEquipment equipment = R.getDataIfSuccess(szwlFeign.findById(String.valueOf(order.getEquipmentId())));
  322. if (StringUtils.isNotEmpty(equipment.getName())) {
  323. name = equipment.getName();
  324. } else {
  325. name = "暂未设置名称";
  326. }
  327. nameMap.put(order.getClientId(), name);
  328. }
  329. orderTarget.setMachineName(name);
  330. orderTarget.setName(admin.getUsername());
  331. // 格式化时间
  332. if (order.getPayDate() != null) {
  333. String formatPayDate = DateUtils.formatDate(order.getPayDate(), DateUtils.PATTERN_yyyy_MM_dd_HH_mm_ss);
  334. orderTarget.setPayDate(formatPayDate);
  335. }
  336. if (order.getRefundDate() != null) {
  337. String formatRefundDate = DateUtils.formatDate(order.getRefundDate(), DateUtils.PATTERN_yyyy_MM_dd_HH_mm_ss);
  338. orderTarget.setRefundDate(formatRefundDate);
  339. }
  340. Integer status = order.getStatus();
  341. if (status == 0) {
  342. orderTarget.setStatus("未支付");
  343. } else if (status == 1) {
  344. orderTarget.setStatus("已支付");
  345. } else if (status == 3) {
  346. orderTarget.setStatus("已退款");
  347. } else {
  348. orderTarget.setStatus(String.valueOf(status));
  349. }
  350. if (order.getAgencyProportion() != null) {
  351. orderTarget.setAgencyProportion(String.valueOf(order.getAgencyProportion()));
  352. }
  353. if (order.getMerchantProportion() != null) {
  354. orderTarget.setMerchantProportion(String.valueOf(order.getMerchantProportion()));
  355. }
  356. if (order.getPersonageProportion() != null) {
  357. orderTarget.setPersonageProportion(String.valueOf(order.getPersonageProportion()));
  358. }
  359. if ("WEIXIN_NATIVE".equals(order.getFrpCode())) {
  360. orderTarget.setFrp_code("微信主扫支付");
  361. } else if ("ALIPAY_NATIVE".equals(order.getFrpCode())) {
  362. orderTarget.setFrp_code("支付宝主扫支付");
  363. } else if ("WEIXIN_CARD".equals(order.getFrpCode())) {
  364. orderTarget.setFrp_code("微信被扫支付");
  365. } else if ("ALIPAY_CARD".equals(order.getFrpCode())) {
  366. orderTarget.setFrp_code("支付宝被扫支付");
  367. } else {
  368. orderTarget.setFrp_code(order.getFrpCode());
  369. }
  370. if (StringUtils.isEmpty(orderTarget.getFrp_code())) {
  371. orderTarget.setFrp_code(order.getFrpCode());
  372. }
  373. orderTargets.add(orderTarget);
  374. }
  375. }
  376. return orderTargets;
  377. }
  378. @Override
  379. public void dataExport(OrderDto orderDto, Date begin, Date end, HttpServletResponse response) throws IOException {
  380. //判断当前账号状态
  381. TAdmin admin = R.getDataIfSuccess(szwlFeign.getAdmin(orderDto.getAdminId()));
  382. LambdaQueryWrapper<TOrder> query = Wrappers.lambdaQuery();
  383. if (!orderDto.getUserName().equals("sysMgtAcc")) {
  384. if (StringUtils.isNotEmpty(orderDto.getUserName())) {
  385. TAdmin data = R.getDataIfSuccess(szwlFeign.getAdminByUsername(orderDto.getUserName()));
  386. if (data == null || data.getId() == null) {
  387. return;
  388. }
  389. if (data.getIsAdmined()) {
  390. query.eq(TOrder::getAdminId, data.getId());
  391. } else {
  392. if (data.getParentId() != 1) {
  393. query.eq(TOrder::getAdminId, data.getParentId());
  394. //查找子账户所管理的机器
  395. TAdminEquipment adminEquipment = R.getDataIfSuccess(szwlFeign.getClientIdList(orderDto.getAdminId()));
  396. if (!adminEquipment.getType().equals("0")) {
  397. List<String> list = R.getDataIfSuccess(szwlFeign.getClientIds(orderDto.getAdminId()));
  398. if (list == null || list.size() == 0) {
  399. return;
  400. }
  401. query.in(TOrder::getClientId, list);
  402. }
  403. }
  404. }
  405. } else {
  406. //adminType="all"时,代表查全部下级 子账户没有这个权限 公司人员默认查所有人
  407. if (StringUtils.isNotEmpty(orderDto.getAdminType())) {
  408. if (admin.getIsAdmined() && admin.getType() > 1) {
  409. if (admin.getType() > 1) {
  410. if (orderDto.getAdminType().equals("all")) {
  411. //查找所有下级
  412. List<Long> admidIdList = R.getDataIfSuccess(szwlFeign.getAdminIdList(orderDto.getAdminId()));
  413. query.in(TOrder::getAdminId, admidIdList);
  414. }
  415. }
  416. } else {
  417. if (admin.getType() > 1) {
  418. //登录账户为子账户 不查下级 只查对应机器的订单
  419. TAdminEquipment adminEquipment = R.getDataIfSuccess(szwlFeign.getClientIdList(String.valueOf(admin.getParentId())));
  420. if (adminEquipment.getType().equals("0")) {
  421. //全部机器
  422. TAdmin upAdmin = R.getDataIfSuccess(szwlFeign.getAdmin(String.valueOf(admin.getParentId())));
  423. query.eq(TOrder::getAdminId, upAdmin.getId());
  424. } else {
  425. String equipmentIds = adminEquipment.getEquipmentIds();
  426. List<String> equipmentIdList = JSON.parseArray(equipmentIds, String.class);
  427. query.in(TOrder::getClientId, equipmentIdList);
  428. }
  429. }
  430. }
  431. } else {
  432. //判断当前账号状态 公司还是商家
  433. if (admin.getType() > 1) {
  434. //商家 判断是否子账户
  435. if (admin.getIsAdmined()) {
  436. //商家自己
  437. query.eq(TOrder::getAdminId, orderDto.getAdminId());
  438. } else {
  439. //商家 子账户
  440. //登录账户为子账户 不查下级 只查对应机器的订单
  441. TAdminEquipment adminEquipment = R.getDataIfSuccess(szwlFeign.getClientIdList(String.valueOf(admin.getParentId())));
  442. if (adminEquipment.getType().equals("0")) {
  443. //全部机器
  444. TAdmin upAdmin = R.getDataIfSuccess(szwlFeign.getAdmin(String.valueOf(admin.getParentId())));
  445. query.eq(TOrder::getAdminId, upAdmin.getId());
  446. } else {
  447. String equipmentIds = adminEquipment.getEquipmentIds();
  448. List<String> equipmentIdList = JSON.parseArray(equipmentIds, String.class);
  449. query.in(TOrder::getClientId, equipmentIdList);
  450. }
  451. }
  452. }
  453. }
  454. }
  455. }
  456. if (StringUtils.isNotEmpty(orderDto.getPayType())) {
  457. query.eq(TOrder::getFrpCode, orderDto.getPayType());
  458. }
  459. if (StringUtils.isNotEmpty(orderDto.getClientId())) {
  460. TEquipment equipment = R.getDataIfSuccess(szwlFeign.findEquipmentByClientId(orderDto.getClientId()));
  461. //判断机器是否属于这个登陆账号
  462. if (admin.getType() > 1) {
  463. //商家
  464. if (equipment.getAdminId().toString().equals(admin.getId().toString())) {
  465. query.eq(TOrder::getEquipmentId, equipment.getId());
  466. }
  467. } else {
  468. query.eq(TOrder::getEquipmentId, equipment.getId());
  469. }
  470. }
  471. if (StringUtils.isNotEmpty(orderDto.getEquipmentId())) {
  472. query.eq(TOrder::getEquipmentId, orderDto.getEquipmentId());
  473. }
  474. if (StringUtils.isNotEmpty(orderDto.getStatus())) {
  475. query.eq(TOrder::getStatus, orderDto.getStatus());
  476. }
  477. if (StringUtils.isNotEmpty(orderDto.getDateType())) {
  478. if (orderDto.getDateType().equals("0")) {
  479. //创建时间
  480. if (begin != null && end != null) {
  481. query.gt(TOrder::getCreateDate, begin);
  482. query.lt(TOrder::getCreateDate, end);
  483. }
  484. }
  485. if (orderDto.getDateType().equals("1")) {
  486. //退款时间
  487. if (begin != null && end != null) {
  488. query.gt(TOrder::getRefundDate, begin);
  489. query.lt(TOrder::getRefundDate, end);
  490. }
  491. }
  492. }
  493. // 公司平台
  494. // 申泽平台管理员
  495. String companyType = orderDto.getCompanyType();
  496. if (admin.getId() == 2738) {
  497. companyType = "0";
  498. }
  499. // 七云平台管理员
  500. if (admin.getId() == 2739) {
  501. companyType = "1";
  502. }
  503. if (StringUtils.isNotEmpty(companyType)) {
  504. if (companyType.equals("0")) {
  505. String finalCompanyType = companyType;
  506. query.nested(q -> q.isNull(TOrder::getCompanyType).or()
  507. .eq(TOrder::getCompanyType, finalCompanyType));
  508. } else {
  509. query.eq(TOrder::getCompanyType, companyType);
  510. }
  511. }
  512. String machineType = orderDto.getMachineType();
  513. if (StringUtils.isNotEmpty(machineType)) {
  514. if (machineType.equals("0")) {
  515. query.nested(q -> q.isNull(TOrder::getMachineType).or()
  516. .eq(TOrder::getMachineType, machineType));
  517. } else {
  518. query.eq(TOrder::getMachineType, machineType);
  519. }
  520. }
  521. // 查询总数
  522. int pageSize = 1000;
  523. int total = count(query);
  524. // 总页数
  525. int totalPages = (total + pageSize - 1) / pageSize;
  526. // 这里注意 有同学反应使用swagger 会导致各种问题,请直接用浏览器或者用postman
  527. response.setContentType("application/octet-stream; charset=UTF-8");
  528. response.setCharacterEncoding("utf-8");
  529. // 这里URLEncoder.encode可以防止中文乱码
  530. String fileName = URLEncoder.encode("订单记录-" + System.currentTimeMillis(), "UTF-8").replaceAll("\\+", "%20");
  531. response.setHeader("Content-disposition", "attachment;filename=" + fileName + ".xlsx");
  532. // 创建ExcelWriter对象
  533. ExcelWriter excelWriter = EasyExcel.write(response.getOutputStream(), NewOrderTarget.class).registerWriteHandler(new LongestMatchColumnWidthStyleStrategy()).build();
  534. // 创建 Sheet 对象
  535. WriteSheet writeSheet = EasyExcel.writerSheet(0, "订单").build();
  536. // 创建 CountDownLatch 对象
  537. CountDownLatch countDownLatch = new CountDownLatch(totalPages);
  538. // 创建线程池
  539. ExecutorService executorService = Executors.newFixedThreadPool(totalPages);
  540. // 循环写入数据
  541. for (int i = 1; i <= totalPages; i++) {
  542. int page = i;
  543. executorService.submit(() -> {
  544. try {
  545. Page<TOrder> orderPage = new Page<>(page, pageSize);
  546. Page<TOrder> pageList = page(orderPage, query);
  547. List<TOrder> list = pageList.getRecords();
  548. // 写入数据
  549. List<NewOrderTarget> orderTargetList = exportOrderData(admin, list);
  550. synchronized (excelWriter) {
  551. excelWriter.write(orderTargetList, writeSheet);
  552. }
  553. } catch (Exception e) {
  554. // 异常处理
  555. e.printStackTrace();
  556. } finally {
  557. // 计数器减一
  558. countDownLatch.countDown();
  559. }
  560. });
  561. }
  562. // 等待所有线程执行完毕
  563. try {
  564. countDownLatch.await();
  565. } catch (InterruptedException e) {
  566. e.printStackTrace();
  567. }
  568. // 关闭 ExcelWriter 对象
  569. excelWriter.finish();
  570. // 关闭线程池
  571. executorService.shutdown();
  572. }
  573. @Override
  574. public Page<OrderDaoChuDTO> summaryStatisticsMonth(StatisticsParam param) {
  575. Page<OrderDaoChuDTO> result = new Page<>(param.getCurrent(), param.getSize(), true);
  576. // 如果类型是公司人员,就查下级管理的账户,如果是超管,查全部,默认查全部
  577. List<Long> adminIds = new ArrayList<>();
  578. if (param.getType() == 1) {
  579. // 查询下级账户
  580. adminIds = R.getDataIfSuccess(szwlFeign.getAdminIdList(param.getAdminId()));
  581. if (adminIds.isEmpty()) {
  582. return result;
  583. }
  584. param.setAdminIds(adminIds);
  585. }
  586. LambdaQueryWrapper<OrderStatisticsMonth> query = Wrappers.lambdaQuery();
  587. query.eq(OrderStatisticsMonth::getStatisticsDate, param.getStartDate());
  588. query.eq(OrderStatisticsMonth::getType, param.getPacketType());
  589. if (StringUtils.isNotEmpty(param.getCompanyType())) {
  590. query.eq(OrderStatisticsMonth::getCompanyType, param.getCompanyType());
  591. }
  592. if (StringUtils.isNotEmpty(param.getClientId())) {
  593. // 如果type等于1,就查询设备所属商家是否是旗下管理的
  594. if (param.getType() == 1) {
  595. TEquipment equipment = R.getDataIfSuccess(szwlFeign.findEquipmentByClientId(param.getClientId()));
  596. if (equipment == null) {
  597. return result;
  598. }
  599. if (adminIds.contains(equipment.getAdminId())) {
  600. query.eq(OrderStatisticsMonth::getAdminId, equipment.getAdminId());
  601. adminIds.clear();
  602. } else {
  603. return result;
  604. }
  605. } else {
  606. query.eq(OrderStatisticsMonth::getClientId, param.getClientId());
  607. }
  608. }
  609. if (StringUtils.isNotEmpty(param.getUsername())) {
  610. TAdmin admin = R.getDataIfSuccess(szwlFeign.getAdminByUsername(param.getUsername()));
  611. if (admin == null) {
  612. return result;
  613. }
  614. if (param.getType() == 1) {
  615. if (adminIds.contains(admin.getId())) {
  616. query.eq(OrderStatisticsMonth::getAdminId, admin.getId());
  617. adminIds.clear();
  618. } else {
  619. return result;
  620. }
  621. } else if (param.getType() == 0) {
  622. query.eq(OrderStatisticsMonth::getAdminId, admin.getId());
  623. }
  624. }
  625. if (param.getAdminIds()!= null && !param.getAdminIds().isEmpty()) {
  626. query.in(OrderStatisticsMonth::getAdminId, param.getAdminIds());
  627. }
  628. if (StringUtils.isNotEmpty(param.getIfForeign())) {
  629. query.eq(OrderStatisticsMonth::getIfForeign, param.getIfForeign());
  630. }
  631. query.orderByDesc(OrderStatisticsMonth::getSalePrice);
  632. Page<OrderStatisticsMonth> page = new Page<>(param.getCurrent(), param.getSize(), true);
  633. IPage<OrderStatisticsMonth> iPage = orderStatisticsMonthService.page(page, query);
  634. List<OrderStatisticsMonth> list = iPage.getRecords();
  635. ArrayList<OrderDaoChuDTO> orderDaoChuDTO = new ArrayList<>();
  636. for (OrderStatisticsMonth orderStatistics : list) {
  637. OrderDaoChuDTO orderDaoChu = new OrderDaoChuDTO();
  638. TAdmin admin = R.getDataIfSuccess(szwlFeign.getAdminVo(String.valueOf(orderStatistics.getAdminId())));
  639. if (StringUtils.isNotEmpty(param.getPacketType()) && param.getPacketType().equals("0")) {
  640. // 按商户分组
  641. String equipmentTotal = R.getDataIfSuccess(szwlFeign.getEquipmentTotal(String.valueOf(orderStatistics.getAdminId())));
  642. orderDaoChu.setEquipmentTotal(equipmentTotal);
  643. } else {
  644. // 按设备分组
  645. TEquipment equipment = R.getDataIfSuccess(szwlFeign.findById(String.valueOf(orderStatistics.getEquipmentId())));
  646. orderDaoChu.setAddress(equipment.getFullName());
  647. orderDaoChu.setClientId(equipment.getClientId());
  648. orderDaoChu.setEquipmentType(equipment.getEquimentType());
  649. }
  650. orderDaoChu.setUsername(admin.getUsername());
  651. orderDaoChu.setName(admin.getName());
  652. orderDaoChu.setPhone(admin.getPhone());
  653. orderDaoChu.setAdminId(orderStatistics.getAdminId());
  654. orderDaoChu.setPriceTotal(orderStatistics.getSalePrice());
  655. orderDaoChuDTO.add(orderDaoChu);
  656. }
  657. result.setRecords(orderDaoChuDTO);
  658. result.setTotal(iPage.getTotal());
  659. return result;
  660. }
  661. @Override
  662. public Page<OrderDaoChuDTO> summaryStatisticsYear(StatisticsParam param) {
  663. Page<OrderDaoChuDTO> result = new Page<>(param.getCurrent(), param.getSize(), true);
  664. // 如果类型是公司人员,就查下级管理的账户,如果是超管,查全部,默认查全部
  665. List<Long> adminIds = new ArrayList<>();
  666. if (param.getType() == 1) {
  667. // 查询下级账户
  668. adminIds = R.getDataIfSuccess(szwlFeign.getAdminIdList(param.getAdminId()));
  669. if (adminIds.isEmpty()) {
  670. return result;
  671. }
  672. param.setAdminIds(adminIds);
  673. }
  674. LambdaQueryWrapper<OrderStatisticsYear> query = Wrappers.lambdaQuery();
  675. query.eq(OrderStatisticsYear::getStatisticsDate, param.getStartDate());
  676. query.eq(OrderStatisticsYear::getType, param.getPacketType());
  677. if (StringUtils.isNotEmpty(param.getCompanyType())) {
  678. query.eq(OrderStatisticsYear::getCompanyType, param.getCompanyType());
  679. }
  680. if (StringUtils.isNotEmpty(param.getClientId())) {
  681. // 如果type等于1,就查询设备所属商家是否是旗下管理的
  682. if (param.getType() == 1) {
  683. TEquipment equipment = R.getDataIfSuccess(szwlFeign.findEquipmentByClientId(param.getClientId()));
  684. if (equipment == null) {
  685. return result;
  686. }
  687. if (adminIds.contains(equipment.getAdminId())) {
  688. query.eq(OrderStatisticsYear::getAdminId, equipment.getAdminId());
  689. adminIds.clear();
  690. } else {
  691. return result;
  692. }
  693. } else {
  694. query.eq(OrderStatisticsYear::getClientId, param.getClientId());
  695. }
  696. }
  697. if (StringUtils.isNotEmpty(param.getUsername())) {
  698. TAdmin admin = R.getDataIfSuccess(szwlFeign.getAdminByUsername(param.getUsername()));
  699. if (admin == null) {
  700. return result;
  701. }
  702. if (param.getType() == 1) {
  703. if (adminIds.contains(admin.getId())) {
  704. query.eq(OrderStatisticsYear::getAdminId, admin.getId());
  705. adminIds.clear();
  706. } else {
  707. return result;
  708. }
  709. } else if (param.getType() == 0) {
  710. query.eq(OrderStatisticsYear::getAdminId, admin.getId());
  711. }
  712. }
  713. if (param.getAdminIds()!= null && !param.getAdminIds().isEmpty()) {
  714. query.in(OrderStatisticsYear::getAdminId, param.getAdminIds());
  715. }
  716. if (StringUtils.isNotEmpty(param.getIfForeign())) {
  717. query.eq(OrderStatisticsYear::getIfForeign, param.getIfForeign());
  718. }
  719. query.orderByDesc(OrderStatisticsYear::getSalePrice);
  720. Page<OrderStatisticsYear> page = new Page<>(param.getCurrent(), param.getSize(), true);
  721. IPage<OrderStatisticsYear> iPage = orderStatisticsYearService.page(page, query);
  722. List<OrderStatisticsYear> list = iPage.getRecords();
  723. ArrayList<OrderDaoChuDTO> orderDaoChuDTO = new ArrayList<>();
  724. for (OrderStatisticsYear orderStatisticsYear : list) {
  725. OrderDaoChuDTO orderDaoChu = new OrderDaoChuDTO();
  726. TAdmin admin = R.getDataIfSuccess(szwlFeign.getAdminVo(String.valueOf(orderStatisticsYear.getAdminId())));
  727. if (StringUtils.isNotEmpty(param.getPacketType()) && param.getPacketType().equals("0")) {
  728. // 按商户分组
  729. String equipmentTotal = R.getDataIfSuccess(szwlFeign.getEquipmentTotal(String.valueOf(orderStatisticsYear.getAdminId())));
  730. orderDaoChu.setEquipmentTotal(equipmentTotal);
  731. } else {
  732. // 按设备分组
  733. TEquipment equipment = R.getDataIfSuccess(szwlFeign.findById(String.valueOf(orderStatisticsYear.getEquipmentId())));
  734. orderDaoChu.setAddress(equipment.getFullName());
  735. orderDaoChu.setClientId(equipment.getClientId());
  736. orderDaoChu.setEquipmentType(equipment.getEquimentType());
  737. }
  738. orderDaoChu.setUsername(admin.getUsername());
  739. orderDaoChu.setName(admin.getName());
  740. orderDaoChu.setPhone(admin.getPhone());
  741. orderDaoChu.setAdminId(orderStatisticsYear.getAdminId());
  742. orderDaoChu.setPriceTotal(orderStatisticsYear.getSalePrice());
  743. orderDaoChuDTO.add(orderDaoChu);
  744. }
  745. result.setRecords(orderDaoChuDTO);
  746. result.setTotal(iPage.getTotal());
  747. return result;
  748. }
  749. @Override
  750. public Page<OrderDaoChuDTO> summaryStatistics(StatisticsParam param) {
  751. Page<OrderDaoChuDTO> result = new Page<>(param.getCurrent(), param.getSize(), true);
  752. // 如果类型是公司人员,就查下级管理的账户,如果是超管,查全部,默认查全部
  753. List<Long> adminIds = new ArrayList<>();
  754. if (param.getType() == 1) {
  755. // 查询下级账户
  756. adminIds = R.getDataIfSuccess(szwlFeign.getAdminIdList(param.getAdminId()));
  757. if (adminIds.isEmpty()) {
  758. return result;
  759. }
  760. param.setAdminIds(adminIds);
  761. }
  762. List<OrderDaoChuDTO> orderDaoChuDTOList;
  763. if (StringUtils.isNotEmpty(param.getStartDate()) && StringUtils.isNotEmpty(param.getEndDate())) {
  764. if (param.getIfForeign().equals("0")) {
  765. // 查国内,即线上订单
  766. LambdaQueryWrapper<TOrder> queryWrapper = new LambdaQueryWrapper<>();
  767. if (StringUtils.isNotEmpty(param.getClientId())) {
  768. // 如果type等于1,就查询设备所属商家是否是旗下管理的
  769. if (param.getType() == 1) {
  770. TEquipment equipment = R.getDataIfSuccess(szwlFeign.findEquipmentByClientId(param.getClientId()));
  771. if (equipment == null) {
  772. return result;
  773. }
  774. if (adminIds.contains(equipment.getAdminId())) {
  775. queryWrapper.eq(TOrder::getAdminId, equipment.getAdminId());
  776. adminIds.clear();
  777. } else {
  778. return result;
  779. }
  780. } else {
  781. queryWrapper.eq(TOrder::getClientId, param.getClientId());
  782. }
  783. }
  784. // 条件:adminId,如果type等于1,就查询账号是否是旗下管理的
  785. if (StringUtils.isNotEmpty(param.getUsername())) {
  786. TAdmin admin = R.getDataIfSuccess(szwlFeign.getAdminByUsername(param.getUsername()));
  787. if (admin == null) {
  788. return result;
  789. }
  790. if (param.getType() == 1) {
  791. if (param.getAdminIds().contains(admin.getId())) {
  792. queryWrapper.eq(TOrder::getAdminId, admin.getId());
  793. param.setAdminId(String.valueOf(admin.getId()));
  794. param.setAdminIds(null);
  795. } else {
  796. return result;
  797. }
  798. } else if (param.getType() == 0) {
  799. queryWrapper.eq(TOrder::getAdminId, admin.getId());
  800. param.setAdminId(String.valueOf(admin.getId()));
  801. }
  802. }
  803. // 条件:adminList
  804. if (param.getAdminIds() != null && !param.getAdminIds().isEmpty()) {
  805. queryWrapper.in(TOrder::getAdminId, param.getAdminIds());
  806. }
  807. // 条件:companyType
  808. if (StringUtils.isNotBlank(param.getCompanyType())) {
  809. if ("0".equals(param.getCompanyType())) {
  810. queryWrapper.and(i -> i.isNull(TOrder::getCompanyType).or().eq(TOrder::getCompanyType, "0"));
  811. } else if ("1".equals(param.getCompanyType())) {
  812. queryWrapper.eq(TOrder::getCompanyType, "1");
  813. }
  814. }
  815. // 条件:时间范围
  816. queryWrapper.between(TOrder::getCreateDate, param.getStartDate(), param.getEndDate());
  817. // 条件:支付状态
  818. queryWrapper.eq(TOrder::getStatus, 1);
  819. // 条件:type == 2 or type == 1
  820. if ("2".equals(param.getPacketType())) {
  821. queryWrapper.groupBy(TOrder::getAdminId);
  822. } else if ("1".equals(param.getPacketType())) {
  823. queryWrapper.groupBy(TOrder::getClientId);
  824. }
  825. Page<TOrder> tOrderPage = new Page<>(param.getCurrent(), param.getSize(), true);
  826. IPage<TOrder> iPage = tOrderMapper.selectPage(tOrderPage, queryWrapper);
  827. result.setTotal(iPage.getTotal());
  828. param.setCurrent(param.getCurrent() - 1);
  829. orderDaoChuDTOList = tOrderMapper.summaryStatistics(param);
  830. } else {
  831. // 查国外,即线下订单
  832. LambdaQueryWrapper<TCoinOrder> queryWrapper = new LambdaQueryWrapper<>();
  833. if (StringUtils.isNotEmpty(param.getClientId())) {
  834. // 如果type等于1,就查询设备所属商家是否是旗下管理的
  835. if (param.getType() == 1) {
  836. TEquipment equipment = R.getDataIfSuccess(szwlFeign.findEquipmentByClientId(param.getClientId()));
  837. if (equipment == null) {
  838. return result;
  839. }
  840. if (adminIds.contains(equipment.getAdminId())) {
  841. queryWrapper.eq(TCoinOrder::getAdminId, equipment.getAdminId());
  842. adminIds.clear();
  843. } else {
  844. return result;
  845. }
  846. } else {
  847. queryWrapper.eq(TCoinOrder::getClientId, param.getClientId());
  848. }
  849. }
  850. // 条件:adminId,如果type等于1,就查询账号是否是旗下管理的
  851. if (StringUtils.isNotEmpty(param.getUsername())) {
  852. TAdmin admin = R.getDataIfSuccess(szwlFeign.getAdminByUsername(param.getUsername()));
  853. if (admin == null) {
  854. return result;
  855. }
  856. if (param.getType() == 1) {
  857. if (param.getAdminIds().contains(admin.getId())) {
  858. queryWrapper.eq(TCoinOrder::getAdminId, admin.getId());
  859. param.setAdminId(String.valueOf(admin.getId()));
  860. param.setAdminIds(null);
  861. } else {
  862. return result;
  863. }
  864. } else if (param.getType() == 0) {
  865. queryWrapper.eq(TCoinOrder::getAdminId, admin.getId());
  866. param.setAdminId(String.valueOf(admin.getId()));
  867. }
  868. }
  869. // 条件:adminList
  870. if (param.getAdminIds() != null && !param.getAdminIds().isEmpty()) {
  871. queryWrapper.in(TCoinOrder::getAdminId, param.getAdminIds());
  872. }
  873. // 条件:companyType
  874. if (StringUtils.isNotBlank(param.getCompanyType())) {
  875. if ("0".equals(param.getCompanyType())) {
  876. queryWrapper.and(i -> i.isNull(TCoinOrder::getCompanyType).or().eq(TCoinOrder::getCompanyType, "0"));
  877. } else if ("1".equals(param.getCompanyType())) {
  878. queryWrapper.eq(TCoinOrder::getCompanyType, "1");
  879. }
  880. }
  881. // 条件:时间范围
  882. queryWrapper.between(TCoinOrder::getCreateDate, param.getStartDate(), param.getEndDate());
  883. // 条件:支付状态
  884. queryWrapper.eq(TCoinOrder::getStatus, 1);
  885. // 条件:type == 2 or type == 1
  886. if ("2".equals(param.getPacketType())) {
  887. queryWrapper.groupBy(TCoinOrder::getAdminId);
  888. } else if ("1".equals(param.getPacketType())) {
  889. queryWrapper.groupBy(TCoinOrder::getClientId);
  890. }
  891. Page<TCoinOrder> tOrderPage = new Page<>(param.getCurrent(), param.getSize(), true);
  892. IPage<TCoinOrder> iPage = tCoinOrderMapper.selectPage(tOrderPage, queryWrapper);
  893. result.setTotal(iPage.getTotal());
  894. param.setCurrent(param.getCurrent() - 1);
  895. orderDaoChuDTOList = tCoinOrderMapper.summaryStatistics(param);
  896. }
  897. for (OrderDaoChuDTO orderDaoChuDTO : orderDaoChuDTOList) {
  898. String adminId1 = orderDaoChuDTO.getAdminId().toString();
  899. TAdmin admin = R.getDataIfSuccess(szwlFeign.getAdminVo(adminId1));
  900. if (admin == null) {
  901. continue;
  902. }
  903. orderDaoChuDTO.setPhone(admin.getPhone());
  904. orderDaoChuDTO.setUsername(admin.getUsername());
  905. orderDaoChuDTO.setName(admin.getName());
  906. if (!StringUtils.isEmpty(param.getPacketType()) && param.getPacketType().equals("0")) {
  907. //商户为单位
  908. String equipmentTotal = R.getDataIfSuccess(szwlFeign.getEquipmentTotal(adminId1));
  909. orderDaoChuDTO.setEquipmentTotal(equipmentTotal);
  910. } else {
  911. //设备为单位
  912. ResponseModel<TEquipment> equipmentByClientId = szwlFeign.findEquipmentByClientId(String.valueOf(orderDaoChuDTO.getClientId()));
  913. TEquipment equipment = equipmentByClientId.getData();
  914. if (equipment != null && equipment.getId() != null) {
  915. if (StringUtils.isNotEmpty(equipment.getFullName())) {
  916. orderDaoChuDTO.setAddress(equipment.getFullName());
  917. }
  918. orderDaoChuDTO.setEquipmentType(equipment.getEquimentType());
  919. orderDaoChuDTO.setCreateDate(equipment.getCreateDate());
  920. }
  921. }
  922. }
  923. result.setRecords(orderDaoChuDTOList);
  924. }
  925. return result;
  926. }
  927. @Override
  928. public <T> void statisticsYearExport(HttpServletResponse response, Class<T> clazz, StatisticsParam param) throws IOException {
  929. // 如果类型是公司人员,就查下级管理的账户,如果是超管,查全部,默认查全部
  930. List<Long> adminIds = new ArrayList<>();
  931. if (param.getType() == 1) {
  932. // 查询下级账户
  933. adminIds = R.getDataIfSuccess(szwlFeign.getAdminIdList(param.getAdminId()));
  934. if (adminIds.isEmpty()) {
  935. return;
  936. }
  937. param.setAdminIds(adminIds);
  938. }
  939. LambdaQueryWrapper<OrderStatisticsYear> query = Wrappers.lambdaQuery();
  940. query.eq(OrderStatisticsYear::getStatisticsDate, param.getStartDate());
  941. query.eq(OrderStatisticsYear::getType, param.getPacketType());
  942. if (StringUtils.isNotEmpty(param.getCompanyType())) {
  943. query.eq(OrderStatisticsYear::getCompanyType, param.getCompanyType());
  944. }
  945. if (StringUtils.isNotEmpty(param.getClientId())) {
  946. // 如果type等于1,就查询设备所属商家是否是旗下管理的
  947. if (param.getType() == 1) {
  948. TEquipment equipment = R.getDataIfSuccess(szwlFeign.findEquipmentByClientId(param.getClientId()));
  949. if (equipment == null) {
  950. return;
  951. }
  952. if (adminIds.contains(equipment.getAdminId())) {
  953. query.eq(OrderStatisticsYear::getAdminId, equipment.getAdminId());
  954. adminIds.clear();
  955. } else {
  956. return;
  957. }
  958. } else {
  959. query.eq(OrderStatisticsYear::getClientId, param.getClientId());
  960. }
  961. }
  962. // 条件:adminId,如果type等于1,就查询账号是否是旗下管理的
  963. if (StringUtils.isNotEmpty(param.getUsername())) {
  964. TAdmin admin = R.getDataIfSuccess(szwlFeign.getAdminByUsername(param.getUsername()));
  965. if (admin == null) {
  966. return;
  967. }
  968. if (param.getType() == 1) {
  969. if (adminIds.contains(admin.getId())) {
  970. query.eq(OrderStatisticsYear::getAdminId, admin.getId());
  971. adminIds.clear();
  972. } else {
  973. return;
  974. }
  975. } else if (param.getType() == 0) {
  976. query.eq(OrderStatisticsYear::getAdminId, admin.getId());
  977. }
  978. }
  979. if (param.getAdminIds()!= null && !param.getAdminIds().isEmpty()) {
  980. query.in(OrderStatisticsYear::getAdminId, param.getAdminIds());
  981. }
  982. if (StringUtils.isNotEmpty(param.getIfForeign())) {
  983. query.eq(OrderStatisticsYear::getIfForeign, param.getIfForeign());
  984. }
  985. query.orderByDesc(OrderStatisticsYear::getSalePrice);
  986. // 这里注意 有同学反应使用swagger 会导致各种问题,请直接用浏览器或者用postman
  987. response.setContentType("application/octet-stream; charset=UTF-8");
  988. response.setCharacterEncoding("utf-8");
  989. // 这里URLEncoder.encode可以防止中文乱码
  990. String fileName = URLEncoder.encode("订单统计-" + System.currentTimeMillis(), "UTF-8").replaceAll("\\+", "%20");
  991. response.setHeader("Content-disposition", "attachment;filename=" + fileName + ".xlsx");
  992. // 每页大小
  993. int pageNo = param.getCurrent();
  994. // 使用 EasyExcel 的流式写入模式
  995. try (ExcelWriter excelWriter = EasyExcel.write(response.getOutputStream(), clazz).build()) {
  996. WriteSheet writeSheet = EasyExcel.writerSheet("数据").build();
  997. while (true) {
  998. // 分页获取数据
  999. param.setCurrent(pageNo);
  1000. Page<OrderStatisticsYear> orderPage = new Page<>(pageNo, param.getSize());
  1001. Page<OrderStatisticsYear> pageList = orderStatisticsYearService.page(orderPage, query);
  1002. List<OrderStatisticsYear> dataList = pageList.getRecords();
  1003. if (dataList.isEmpty()) {
  1004. break;
  1005. }
  1006. // 封装数据
  1007. if (param.getPacketType().equals("0")) {
  1008. List<StatisticsAdminTarget> adminTargetList = exportStatisticsYearByAdmin(dataList);
  1009. // 写入数据到 Excel
  1010. excelWriter.write(adminTargetList, writeSheet);
  1011. } else {
  1012. List<StatisticsClientIdTarget> clientIdTargetList = exportStatisticsYearByClientId(dataList);
  1013. excelWriter.write(clientIdTargetList, writeSheet);
  1014. }
  1015. pageNo++;
  1016. }
  1017. }
  1018. }
  1019. @Override
  1020. public <T> void statisticsMonthExport(HttpServletResponse response, Class<T> clazz, StatisticsParam param) throws IOException {
  1021. // 如果类型是公司人员,就查下级管理的账户,如果是超管,查全部,默认查全部
  1022. List<Long> adminIds = new ArrayList<>();
  1023. if (param.getType() == 1) {
  1024. // 查询下级账户
  1025. adminIds = R.getDataIfSuccess(szwlFeign.getAdminIdList(param.getAdminId()));
  1026. if (adminIds.isEmpty()) {
  1027. return;
  1028. }
  1029. param.setAdminIds(adminIds);
  1030. }
  1031. LambdaQueryWrapper<OrderStatisticsMonth> query = Wrappers.lambdaQuery();
  1032. query.eq(OrderStatisticsMonth::getStatisticsDate, param.getStartDate());
  1033. query.eq(OrderStatisticsMonth::getType, param.getPacketType());
  1034. if (StringUtils.isNotEmpty(param.getCompanyType())) {
  1035. query.eq(OrderStatisticsMonth::getCompanyType, param.getCompanyType());
  1036. }
  1037. if (StringUtils.isNotEmpty(param.getClientId())) {
  1038. // 如果type等于1,就查询设备所属商家是否是旗下管理的
  1039. if (param.getType() == 1) {
  1040. TEquipment equipment = R.getDataIfSuccess(szwlFeign.findEquipmentByClientId(param.getClientId()));
  1041. if (equipment == null) {
  1042. return;
  1043. }
  1044. if (adminIds.contains(equipment.getAdminId())) {
  1045. query.eq(OrderStatisticsMonth::getAdminId, equipment.getAdminId());
  1046. adminIds.clear();
  1047. } else {
  1048. return;
  1049. }
  1050. } else {
  1051. query.eq(OrderStatisticsMonth::getClientId, param.getClientId());
  1052. }
  1053. }
  1054. // 条件:adminId,如果type等于1,就查询账号是否是旗下管理的
  1055. if (StringUtils.isNotEmpty(param.getUsername())) {
  1056. TAdmin admin = R.getDataIfSuccess(szwlFeign.getAdminByUsername(param.getUsername()));
  1057. if (admin == null) {
  1058. return;
  1059. }
  1060. if (param.getType() == 1) {
  1061. if (adminIds.contains(admin.getId())) {
  1062. query.eq(OrderStatisticsMonth::getAdminId, admin.getId());
  1063. adminIds.clear();
  1064. } else {
  1065. return;
  1066. }
  1067. } else if (param.getType() == 0) {
  1068. query.eq(OrderStatisticsMonth::getAdminId, admin.getId());
  1069. }
  1070. }
  1071. if (param.getAdminIds()!= null && !param.getAdminIds().isEmpty()) {
  1072. query.in(OrderStatisticsMonth::getAdminId, param.getAdminIds());
  1073. }
  1074. if (StringUtils.isNotEmpty(param.getIfForeign())) {
  1075. query.eq(OrderStatisticsMonth::getIfForeign, param.getIfForeign());
  1076. }
  1077. query.orderByDesc(OrderStatisticsMonth::getSalePrice);
  1078. // 这里注意 有同学反应使用swagger 会导致各种问题,请直接用浏览器或者用postman
  1079. response.setContentType("application/octet-stream; charset=UTF-8");
  1080. response.setCharacterEncoding("utf-8");
  1081. // 这里URLEncoder.encode可以防止中文乱码
  1082. String fileName = URLEncoder.encode("订单统计-" + System.currentTimeMillis(), "UTF-8").replaceAll("\\+", "%20");
  1083. response.setHeader("Content-disposition", "attachment;filename=" + fileName + ".xlsx");
  1084. // 每页大小
  1085. int pageNo = param.getCurrent();
  1086. // 使用 EasyExcel 的流式写入模式
  1087. try (ExcelWriter excelWriter = EasyExcel.write(response.getOutputStream(), clazz).build()) {
  1088. WriteSheet writeSheet = EasyExcel.writerSheet("数据").build();
  1089. while (true) {
  1090. // 分页获取数据
  1091. param.setCurrent(pageNo);
  1092. Page<OrderStatisticsMonth> orderPage = new Page<>(pageNo, param.getSize());
  1093. Page<OrderStatisticsMonth> pageList = orderStatisticsMonthService.page(orderPage, query);
  1094. List<OrderStatisticsMonth> dataList = pageList.getRecords();
  1095. if (dataList.isEmpty()) {
  1096. break;
  1097. }
  1098. // 封装数据
  1099. if (param.getPacketType().equals("0")) {
  1100. List<StatisticsAdminTarget> adminTargetList = exportStatisticsMonthByAdmin(dataList);
  1101. // 写入数据到 Excel
  1102. excelWriter.write(adminTargetList, writeSheet);
  1103. } else {
  1104. List<StatisticsClientIdTarget> clientIdTargetList = exportStatisticsMonthByClientId(dataList);
  1105. excelWriter.write(clientIdTargetList, writeSheet);
  1106. }
  1107. pageNo++;
  1108. }
  1109. }
  1110. }
  1111. @Override
  1112. public <T> void statisticsDayWeekExport(HttpServletResponse response, Class<T> clazz, StatisticsParam param) throws IOException {
  1113. response.setContentType("application/octet-stream; charset=UTF-8");
  1114. response.setCharacterEncoding("utf-8");
  1115. // 这里URLEncoder.encode可以防止中文乱码
  1116. String fileName = URLEncoder.encode("订单统计-" + System.currentTimeMillis(), "UTF-8").replaceAll("\\+", "%20");
  1117. response.setHeader("Content-disposition", "attachment;filename=" + fileName + ".xlsx");
  1118. // 每页大小
  1119. int pageNo = param.getCurrent();
  1120. // 如果类型是公司人员,就查下级管理的账户,如果是超管,查全部,默认查全部
  1121. if (param.getType() == 1) {
  1122. // 查询下级账户
  1123. String adminId = param.getAdminId();
  1124. List<Long> adminIds = R.getDataIfSuccess(szwlFeign.getAdminIdList(adminId));
  1125. if (adminIds.isEmpty()) {
  1126. return;
  1127. }
  1128. param.setAdminIds(adminIds);
  1129. }
  1130. // 使用 EasyExcel 的流式写入模式
  1131. try (ExcelWriter excelWriter = EasyExcel.write(response.getOutputStream(), clazz).build()) {
  1132. WriteSheet writeSheet = EasyExcel.writerSheet("数据").build();
  1133. while (true) {
  1134. // 分页获取数据
  1135. List<OrderDaoChuDTO> dataList = getPageData(pageNo, param);
  1136. if (dataList.isEmpty()) {
  1137. break;
  1138. }
  1139. // 封装数据
  1140. if (param.getPacketType().equals("0")) {
  1141. List<StatisticsAdminTarget> adminTargetList = exportStatisticsByAdmin(dataList);
  1142. // 写入数据到 Excel
  1143. excelWriter.write(adminTargetList, writeSheet);
  1144. } else {
  1145. List<StatisticsClientIdTarget> clientIdTargetList = exportStatisticsByClientId(dataList);
  1146. excelWriter.write(clientIdTargetList, writeSheet);
  1147. }
  1148. pageNo++;
  1149. }
  1150. }
  1151. }
  1152. private List<StatisticsClientIdTarget> exportStatisticsByClientId(List<OrderDaoChuDTO> dataList) {
  1153. List<StatisticsClientIdTarget> clientIdTargetList = new ArrayList<>();
  1154. for (OrderDaoChuDTO orderDaoChuDTO : dataList) {
  1155. StatisticsClientIdTarget target = new StatisticsClientIdTarget();
  1156. target.setUsername(orderDaoChuDTO.getUsername());
  1157. target.setName(orderDaoChuDTO.getName());
  1158. target.setPhone(orderDaoChuDTO.getPhone());
  1159. target.setAddress(orderDaoChuDTO.getAddress());
  1160. target.setClientId(orderDaoChuDTO.getClientId());
  1161. target.setEquipmentType(orderDaoChuDTO.getEquipmentType());
  1162. target.setPriceTotal(orderDaoChuDTO.getPriceTotal());
  1163. clientIdTargetList.add(target);
  1164. }
  1165. return clientIdTargetList;
  1166. }
  1167. /**
  1168. * 封装
  1169. * @param dataList
  1170. * @return
  1171. */
  1172. private List<StatisticsAdminTarget> exportStatisticsByAdmin(List<OrderDaoChuDTO> dataList) {
  1173. List<StatisticsAdminTarget> adminTargetList = new ArrayList<>();
  1174. for (OrderDaoChuDTO orderDaoChuDTO : dataList) {
  1175. StatisticsAdminTarget target = new StatisticsAdminTarget();
  1176. target.setUsername(orderDaoChuDTO.getUsername());
  1177. target.setName(orderDaoChuDTO.getName());
  1178. target.setPhone(orderDaoChuDTO.getPhone());
  1179. target.setEquipmentTotal(orderDaoChuDTO.getEquipmentTotal());
  1180. target.setPriceTotal(orderDaoChuDTO.getPriceTotal());
  1181. adminTargetList.add(target);
  1182. }
  1183. return adminTargetList;
  1184. }
  1185. /**
  1186. * 分页查询
  1187. * @param pageNo
  1188. * @param param
  1189. * @return
  1190. */
  1191. private List<OrderDaoChuDTO> getPageData(int pageNo, StatisticsParam param) {
  1192. List<OrderDaoChuDTO> orderDaoChuDTOList = new ArrayList<>();
  1193. if (StringUtils.isNotEmpty(param.getStartDate()) && StringUtils.isNotEmpty(param.getEndDate())) {
  1194. if (param.getIfForeign().equals("0")) {
  1195. // 查国内,即线上订单
  1196. LambdaQueryWrapper<TOrder> queryWrapper = new LambdaQueryWrapper<>();
  1197. if (StringUtils.isNotEmpty(param.getClientId())) {
  1198. // 如果type等于1,就查询设备所属商家是否是旗下管理的
  1199. if (param.getType() == 1) {
  1200. TEquipment equipment = R.getDataIfSuccess(szwlFeign.findEquipmentByClientId(param.getClientId()));
  1201. if (equipment == null) {
  1202. return orderDaoChuDTOList;
  1203. }
  1204. if (param.getAdminIds().contains(equipment.getAdminId())) {
  1205. queryWrapper.eq(TOrder::getAdminId, equipment.getAdminId());
  1206. param.setAdminIds(null);
  1207. } else {
  1208. return orderDaoChuDTOList;
  1209. }
  1210. } else {
  1211. queryWrapper.eq(TOrder::getClientId, param.getClientId());
  1212. }
  1213. }
  1214. // 条件:adminId,如果type等于1,就查询账号是否是旗下管理的
  1215. if (StringUtils.isNotEmpty(param.getUsername())) {
  1216. TAdmin admin = R.getDataIfSuccess(szwlFeign.getAdminByUsername(param.getUsername()));
  1217. if (admin == null) {
  1218. return orderDaoChuDTOList;
  1219. }
  1220. if (param.getType() == 1) {
  1221. if (param.getAdminIds().contains(admin.getId())) {
  1222. queryWrapper.eq(TOrder::getAdminId, admin.getId());
  1223. param.setAdminId(String.valueOf(admin.getId()));
  1224. param.setAdminIds(null);
  1225. } else {
  1226. return orderDaoChuDTOList;
  1227. }
  1228. } else if (param.getType() == 0) {
  1229. queryWrapper.eq(TOrder::getAdminId, admin.getId());
  1230. param.setAdminId(String.valueOf(admin.getId()));
  1231. }
  1232. }
  1233. // 条件:adminList
  1234. if (param.getAdminIds() != null && !param.getAdminIds().isEmpty()) {
  1235. queryWrapper.in(TOrder::getAdminId, param.getAdminIds());
  1236. param.setAdminId(null);
  1237. }
  1238. // 条件:companyType
  1239. if (StringUtils.isNotBlank(param.getCompanyType())) {
  1240. if ("0".equals(param.getCompanyType())) {
  1241. queryWrapper.and(i -> i.isNull(TOrder::getCompanyType).or().eq(TOrder::getCompanyType, "0"));
  1242. } else if ("1".equals(param.getCompanyType())) {
  1243. queryWrapper.eq(TOrder::getCompanyType, "1");
  1244. }
  1245. }
  1246. // 条件:时间范围
  1247. queryWrapper.between(TOrder::getCreateDate, param.getStartDate(), param.getEndDate());
  1248. // 条件:支付状态
  1249. queryWrapper.eq(TOrder::getStatus, 1);
  1250. // 条件:type == 2 or type == 1
  1251. if ("2".equals(param.getPacketType())) {
  1252. queryWrapper.groupBy(TOrder::getAdminId);
  1253. } else if ("1".equals(param.getPacketType())) {
  1254. queryWrapper.groupBy(TOrder::getClientId);
  1255. }
  1256. param.setCurrent((pageNo - 1) * param.getSize());
  1257. orderDaoChuDTOList = tOrderMapper.summaryStatistics(param);
  1258. } else {
  1259. // 查国外,即线下订单
  1260. LambdaQueryWrapper<TCoinOrder> queryWrapper = new LambdaQueryWrapper<>();
  1261. if (StringUtils.isNotEmpty(param.getClientId())) {
  1262. // 如果type等于1,就查询设备所属商家是否是旗下管理的
  1263. if (param.getType() == 1) {
  1264. TEquipment equipment = R.getDataIfSuccess(szwlFeign.findEquipmentByClientId(param.getClientId()));
  1265. if (equipment == null) {
  1266. return orderDaoChuDTOList;
  1267. }
  1268. if (param.getAdminIds().contains(equipment.getAdminId())) {
  1269. queryWrapper.eq(TCoinOrder::getAdminId, equipment.getAdminId());
  1270. param.setAdminIds(null);
  1271. } else {
  1272. return orderDaoChuDTOList;
  1273. }
  1274. } else {
  1275. queryWrapper.eq(TCoinOrder::getClientId, param.getClientId());
  1276. }
  1277. }
  1278. // 条件:adminId,如果type等于1,就查询账号是否是旗下管理的
  1279. if (StringUtils.isNotEmpty(param.getUsername())) {
  1280. TAdmin admin = R.getDataIfSuccess(szwlFeign.getAdminByUsername(param.getUsername()));
  1281. if (admin == null) {
  1282. return orderDaoChuDTOList;
  1283. }
  1284. if (param.getType() == 1) {
  1285. if (param.getAdminIds().contains(admin.getId())) {
  1286. queryWrapper.eq(TCoinOrder::getAdminId, admin.getId());
  1287. param.setAdminId(String.valueOf(admin.getId()));
  1288. param.setAdminIds(null);
  1289. } else {
  1290. return orderDaoChuDTOList;
  1291. }
  1292. } else if (param.getType() == 0) {
  1293. queryWrapper.eq(TCoinOrder::getAdminId, admin.getId());
  1294. param.setAdminId(String.valueOf(admin.getId()));
  1295. }
  1296. }
  1297. // 条件:adminList
  1298. if (param.getAdminIds() != null && !param.getAdminIds().isEmpty()) {
  1299. queryWrapper.in(TCoinOrder::getAdminId, param.getAdminIds());
  1300. param.setAdminId(null);
  1301. }
  1302. // 条件:companyType
  1303. if (StringUtils.isNotBlank(param.getCompanyType())) {
  1304. if ("0".equals(param.getCompanyType())) {
  1305. queryWrapper.and(i -> i.isNull(TCoinOrder::getCompanyType).or().eq(TCoinOrder::getCompanyType, "0"));
  1306. } else if ("1".equals(param.getCompanyType())) {
  1307. queryWrapper.eq(TCoinOrder::getCompanyType, "1");
  1308. }
  1309. }
  1310. // 条件:时间范围
  1311. queryWrapper.between(TCoinOrder::getCreateDate, param.getStartDate(), param.getEndDate());
  1312. // 条件:支付状态
  1313. queryWrapper.eq(TCoinOrder::getStatus, 1);
  1314. // 条件:type == 2 or type == 1
  1315. if ("2".equals(param.getPacketType())) {
  1316. queryWrapper.groupBy(TCoinOrder::getAdminId);
  1317. } else if ("1".equals(param.getPacketType())) {
  1318. queryWrapper.groupBy(TCoinOrder::getClientId);
  1319. }
  1320. param.setCurrent((pageNo - 1) * param.getSize());
  1321. orderDaoChuDTOList = tCoinOrderMapper.summaryStatistics(param);
  1322. }
  1323. for (OrderDaoChuDTO orderDaoChuDTO : orderDaoChuDTOList) {
  1324. String adminId1 = orderDaoChuDTO.getAdminId().toString();
  1325. TAdmin admin = R.getDataIfSuccess(szwlFeign.getAdminVo(adminId1));
  1326. if (admin == null) {
  1327. continue;
  1328. }
  1329. orderDaoChuDTO.setPhone(admin.getPhone());
  1330. orderDaoChuDTO.setUsername(admin.getUsername());
  1331. orderDaoChuDTO.setName(admin.getName());
  1332. if (!StringUtils.isEmpty(param.getPacketType()) && param.getPacketType().equals("0")) {
  1333. //商户为单位
  1334. String equipmentTotal = R.getDataIfSuccess(szwlFeign.getEquipmentTotal(adminId1));
  1335. orderDaoChuDTO.setEquipmentTotal(equipmentTotal);
  1336. } else {
  1337. //设备为单位
  1338. ResponseModel<TEquipment> equipmentByClientId = szwlFeign.findEquipmentByClientId(String.valueOf(orderDaoChuDTO.getClientId()));
  1339. TEquipment equipment = equipmentByClientId.getData();
  1340. if (equipment != null && equipment.getId() != null) {
  1341. if (StringUtils.isNotEmpty(equipment.getFullName())) {
  1342. orderDaoChuDTO.setAddress(equipment.getFullName());
  1343. }
  1344. orderDaoChuDTO.setEquipmentType(equipment.getEquimentType());
  1345. orderDaoChuDTO.setCreateDate(equipment.getCreateDate());
  1346. }
  1347. }
  1348. }
  1349. }
  1350. return orderDaoChuDTOList;
  1351. }
  1352. private List<StatisticsClientIdTarget> exportStatisticsYearByClientId(List<OrderStatisticsYear> list) {
  1353. List<StatisticsClientIdTarget> clientIdTargetList = new ArrayList<>();
  1354. for (OrderStatisticsYear orderStatisticsYear : list) {
  1355. StatisticsClientIdTarget target = new StatisticsClientIdTarget();
  1356. TAdmin admin = R.getDataIfSuccess(szwlFeign.getAdminVo(String.valueOf(orderStatisticsYear.getAdminId())));
  1357. // 按设备分组
  1358. TEquipment equipment = R.getDataIfSuccess(szwlFeign.findById(String.valueOf(orderStatisticsYear.getEquipmentId())));
  1359. target.setUsername(admin.getUsername());
  1360. target.setName(admin.getName());
  1361. target.setPhone(admin.getPhone());
  1362. target.setAddress(equipment.getFullName());
  1363. target.setClientId(equipment.getClientId());
  1364. target.setEquipmentType(equipment.getEquimentType());
  1365. target.setSalesVolume(orderStatisticsYear.getSaleNum());
  1366. target.setPriceTotal(orderStatisticsYear.getSalePrice());
  1367. clientIdTargetList.add(target);
  1368. }
  1369. return clientIdTargetList;
  1370. }
  1371. private List<StatisticsClientIdTarget> exportStatisticsMonthByClientId(List<OrderStatisticsMonth> list) {
  1372. List<StatisticsClientIdTarget> clientIdTargetList = new ArrayList<>();
  1373. for (OrderStatisticsMonth orderStatisticsMonth : list) {
  1374. StatisticsClientIdTarget target = new StatisticsClientIdTarget();
  1375. TAdmin admin = R.getDataIfSuccess(szwlFeign.getAdminVo(String.valueOf(orderStatisticsMonth.getAdminId())));
  1376. // 按设备分组
  1377. TEquipment equipment = R.getDataIfSuccess(szwlFeign.findById(String.valueOf(orderStatisticsMonth.getEquipmentId())));
  1378. target.setUsername(admin.getUsername());
  1379. target.setName(admin.getName());
  1380. target.setPhone(admin.getPhone());
  1381. target.setAddress(equipment.getFullName());
  1382. target.setClientId(equipment.getClientId());
  1383. target.setEquipmentType(equipment.getEquimentType());
  1384. target.setSalesVolume(orderStatisticsMonth.getSaleNum());
  1385. target.setPriceTotal(orderStatisticsMonth.getSalePrice());
  1386. clientIdTargetList.add(target);
  1387. }
  1388. return clientIdTargetList;
  1389. }
  1390. private List<StatisticsAdminTarget> exportStatisticsYearByAdmin(List<OrderStatisticsYear> list) {
  1391. List<StatisticsAdminTarget> adminTargetList = new ArrayList<>();
  1392. for (OrderStatisticsYear orderStatisticsYear : list) {
  1393. StatisticsAdminTarget target = new StatisticsAdminTarget();
  1394. TAdmin admin = R.getDataIfSuccess(szwlFeign.getAdminVo(String.valueOf(orderStatisticsYear.getAdminId())));
  1395. // 按商户分组
  1396. String equipmentTotal = R.getDataIfSuccess(szwlFeign.getEquipmentTotal(String.valueOf(orderStatisticsYear.getAdminId())));
  1397. target.setUsername(admin.getUsername());
  1398. target.setName(admin.getName());
  1399. target.setPhone(admin.getPhone());
  1400. target.setEquipmentTotal(equipmentTotal);
  1401. target.setSalesVolume(orderStatisticsYear.getSaleNum());
  1402. target.setPriceTotal(orderStatisticsYear.getSalePrice());
  1403. adminTargetList.add(target);
  1404. }
  1405. return adminTargetList;
  1406. }
  1407. private List<StatisticsAdminTarget> exportStatisticsMonthByAdmin(List<OrderStatisticsMonth> list) {
  1408. List<StatisticsAdminTarget> adminTargetList = new ArrayList<>();
  1409. for (OrderStatisticsMonth orderStatisticsMonth : list) {
  1410. StatisticsAdminTarget target = new StatisticsAdminTarget();
  1411. TAdmin admin = R.getDataIfSuccess(szwlFeign.getAdminVo(String.valueOf(orderStatisticsMonth.getAdminId())));
  1412. // 按商户分组
  1413. String equipmentTotal = R.getDataIfSuccess(szwlFeign.getEquipmentTotal(String.valueOf(orderStatisticsMonth.getAdminId())));
  1414. target.setUsername(admin.getUsername());
  1415. target.setName(admin.getName());
  1416. target.setPhone(admin.getPhone());
  1417. target.setEquipmentTotal(equipmentTotal);
  1418. target.setSalesVolume(orderStatisticsMonth.getSaleNum());
  1419. target.setPriceTotal(orderStatisticsMonth.getSalePrice());
  1420. adminTargetList.add(target);
  1421. }
  1422. return adminTargetList;
  1423. }
  1424. private String getSzMessage(String sn, String price, String payTime, String equipmentName, String clientId, String customerPhone) {
  1425. String message = "";
  1426. if (StringUtils.isNotEmpty(customerPhone) && customerPhone.length() > 3) {
  1427. message = "【申泽智能】您好,接到消费者投诉:机器售卖出现问题,需要您退款。订单号:"
  1428. + sn + ",机器名称:" + equipmentName + ",设备编号:" + clientId +
  1429. ",价格:" + price + "元,订单支付时间:" + payTime + ",消费者联系方式:" + customerPhone +
  1430. "。如已通过私下退款,请提供退款截屏到群里,务必24小时内将此订单进行退款处理,否则我司将自动执行退款流程,以保障您的银行账户不被冻结,谢谢。";
  1431. } else {
  1432. message = "【申泽智能】您好,接到消费者投诉:机器售卖出现问题,需要您退款。订单号:"
  1433. + sn + ",机器名称:" + equipmentName + ",设备编号:" + clientId +
  1434. ",价格:" + price + "元,订单支付时间:" + payTime + ",该投诉消费者没有留联系方式,如需核实,请把你的联系方式反馈给我们,我们会把你的联系方式通知到消费者手上,让消费者联系您。" +
  1435. "如已通过私下退款,请提供退款截屏到群里,务必24小时内将此订单进行退款处理,否则我司将自动执行退款流程,以保障您的银行账户不被冻结,谢谢。";
  1436. }
  1437. return message;
  1438. }
  1439. private String getScMessage(String sn, String price, String payTime, String equipmentName, String clientId, String customerPhone) {
  1440. String message = "";
  1441. if (StringUtils.isNotEmpty(customerPhone) && customerPhone.length() > 3) {
  1442. message = "【七云科技】您好,接到消费者投诉:机器售卖出现问题,需要您退款。订单号:"
  1443. + sn + ",机器名称:" + equipmentName + ",设备编号:" + clientId +
  1444. ",价格:" + price + "元,订单支付时间:" + payTime + ",消费者联系方式:" + customerPhone +
  1445. "。如已通过私下退款,请提供退款截屏到群里,务必24小时内将此订单进行退款处理,否则我司将自动执行退款流程,以保障您的银行账户不被冻结,谢谢。";
  1446. } else {
  1447. message = "【七云科技】您好,接到消费者投诉:机器售卖出现问题,需要您退款。订单号:"
  1448. + sn + ",机器名称:" + equipmentName + ",设备编号:" + clientId +
  1449. ",价格:" + price + "元,订单支付时间:" + payTime + ",该投诉消费者没有留联系方式,如需核实,请把你的联系方式反馈给我们,我们会把你的联系方式通知到消费者手上,让消费者联系您。" +
  1450. "如已通过私下退款,请提供退款截屏到群里,务必24小时内将此订单进行退款处理,否则我司将自动执行退款流程,以保障您的银行账户不被冻结,谢谢。";
  1451. }
  1452. return message;
  1453. }
  1454. }