ExportExcelController.java 13 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234
  1. package com.kmall.admin.controller;
  2. import com.kmall.admin.dto.ExportExcelDto;
  3. import com.kmall.admin.dto.TaxDetailDto;
  4. import com.kmall.admin.entity.OrderEntity;
  5. import com.kmall.admin.service.OrderService;
  6. import com.kmall.admin.service.SalesDataUploadService;
  7. import com.kmall.admin.utils.ParamUtils;
  8. import com.kmall.common.constant.Dict;
  9. import com.kmall.common.utils.DateUtils;
  10. import com.kmall.common.utils.R;
  11. import com.kmall.common.utils.excel.ExcelExport;
  12. import org.apache.commons.lang3.StringUtils;
  13. import org.slf4j.Logger;
  14. import org.slf4j.LoggerFactory;
  15. import org.springframework.beans.factory.annotation.Autowired;
  16. import org.springframework.web.bind.annotation.RequestMapping;
  17. import org.springframework.web.bind.annotation.RequestParam;
  18. import org.springframework.web.bind.annotation.RestController;
  19. import javax.servlet.http.HttpServletRequest;
  20. import javax.servlet.http.HttpServletResponse;
  21. import java.text.ParseException;
  22. import java.text.SimpleDateFormat;
  23. import java.util.*;
  24. /**
  25. * @author zhangchuangbiao
  26. * @version 1.0
  27. * 2020-12-22 13:59
  28. */
  29. @RestController
  30. @RequestMapping("exportExcel")
  31. public class ExportExcelController {
  32. private static String ISO = "iso-8859-1";
  33. private static String UTF = "utf-8";
  34. private static final Logger LOGGER = LoggerFactory.getLogger(ExportExcelController.class);
  35. @Autowired
  36. private OrderService orderService;
  37. @Autowired
  38. private SalesDataUploadService salesDataUploadService;
  39. @RequestMapping(value = "/exportSalesExcel")
  40. public R exportOffilineOrder(@RequestParam Map<String, Object> params, HttpServletResponse response, HttpServletRequest request) throws ParseException {
  41. ParamUtils.setQueryPowerByRoleType(params, "storeId", "merchSn", "thirdPartyMerchCode");
  42. // 账单日期
  43. String billDate = (String) params.get("billDate");
  44. params = ParamUtils.setTimeMap(params);
  45. try {
  46. billDate = new String(billDate.getBytes(ISO), UTF);
  47. } catch (Exception e) {
  48. e.printStackTrace();
  49. }
  50. billDate = DateUtils.getDate(billDate);
  51. SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
  52. Date sDate = sdf.parse(billDate);
  53. Calendar c = Calendar.getInstance();
  54. c.setTime(sDate);
  55. c.add(Calendar.DAY_OF_MONTH, 1);//利用Calendar 实现 Date日期+1天
  56. sDate = c.getTime();
  57. // 汇总日期
  58. String summaryDate = sdf.format(sDate);
  59. params.put("isOnfiilineOrder", Dict.isOnfflineOrder.item_1.getItem());
  60. SimpleDateFormat format = new SimpleDateFormat("yyyyMMdd");
  61. ExcelExport ee = new ExcelExport("CW保税 新零售销售额统计_"+format.format(new Date()));
  62. // ==================================第一个sheet-销售总额===============================================
  63. ExportExcelDto exportExcelDto = orderService.querySumAmount(billDate,"");
  64. Map<String,String> firstSheetFirstRowValue = new HashMap<>();
  65. // "汇总日期","账单日期","销售含税总额","当期退T-1日前金额","销售含税净额","销售税前总额","税款总额","当期退T-1日前税款","当期税款金额","成功订单数"
  66. firstSheetFirstRowValue.put("汇总日期",summaryDate); // 汇总日期
  67. firstSheetFirstRowValue.put("账单日期",billDate); // 账单日期
  68. firstSheetFirstRowValue.put("销售含税总额",exportExcelDto.getTotalAmount()); // 销售含税总额
  69. firstSheetFirstRowValue.put("当期退T-1日前金额",exportExcelDto.getRefundPreviousAmount()); // 当期退T-1日前金额
  70. firstSheetFirstRowValue.put("销售含税净额",exportExcelDto.getNetAmount()); // 销售含税净额
  71. firstSheetFirstRowValue.put("销售税前总额",exportExcelDto.getPreTaxTotalAmount()); // 销售税前总额
  72. firstSheetFirstRowValue.put("税款总额",exportExcelDto.getTotalTax()); // 税款总额
  73. firstSheetFirstRowValue.put("当期退T-1日前税款",exportExcelDto.getPreviousTax()); // 当前退T-1日前税款
  74. firstSheetFirstRowValue.put("当期税款金额",exportExcelDto.getCurrentTax()); // 当期税款金额
  75. firstSheetFirstRowValue.put("成功订单数",exportExcelDto.getSuccessNumber()); // 成功订单数
  76. Map<String,String> firstSheetSecondRowValue = new HashMap<>();
  77. // "汇总日期","账单日期","当期退当天金额(销售总额已减扣)","当期退当天订单数","退T-1日前订单总额(销售总额已减扣)","退T-1日前订单总数","当期退单总额(销售总额已减扣)","当日退款总单数"
  78. firstSheetSecondRowValue.put("汇总日期",summaryDate); // 汇总日期
  79. firstSheetSecondRowValue.put("账单日期",billDate); // 账单日期
  80. firstSheetSecondRowValue.put("当期退当天金额(销售总额已减扣)",exportExcelDto.getRefundCurrentAmount()); // 当期退当天金额(销售总额已减扣)
  81. firstSheetSecondRowValue.put("当期退当天订单数",exportExcelDto.getRefundCurrentCount()); // 当期退当天订单数
  82. firstSheetSecondRowValue.put("退T-1日前订单总额(销售总额已减扣)",exportExcelDto.getRefundPreviousAmount()); // 退T-1日前订单总额(销售总额已减扣)
  83. firstSheetSecondRowValue.put("退T-1日前订单总数",exportExcelDto.getRefundPreviousCount()); // 退T-1日前订单总数
  84. firstSheetSecondRowValue.put("当期退单总额(销售总额已减扣)",exportExcelDto.getRefundAmount()); // 当期退单总额(销售总额已减扣)
  85. firstSheetSecondRowValue.put("当日退款总单数",exportExcelDto.getRefundCount()); // 当日退款总单数
  86. // ==================================第二个sheet-销售订单金额===========================================
  87. String[] saleHeader = new String[]{"订单编号", "操作店员", "购买类型", "订单业务类型", "订单状态",
  88. "付款状态", "实际支付", "订单总价","下单时间", "付款时间", "退T-1日前订单金额", "T-1日前订单生成时间"};
  89. Map<String,List<OrderEntity>> orderEntityListMap = orderService.querySaleOrderList(billDate,"");
  90. // 当期的订单
  91. List<OrderEntity> orderEntityList = orderEntityListMap.get("current");
  92. List<Map<String, Object>> list = new LinkedList<>();
  93. if (orderEntityList != null && orderEntityList.size() > 0) {
  94. for (OrderEntity orderEntity : orderEntityList) {
  95. LinkedHashMap<String, Object> map = new LinkedHashMap<>();
  96. // 订单业务类型
  97. String orderBizType = orderEntity.getOrderBizType();
  98. // 订单状态
  99. Integer orderStatus = orderEntity.getOrderStatus();
  100. // 付款状态
  101. Integer payStatus = orderEntity.getPayStatus();
  102. map.put("订单编号", orderEntity.getOrderSn());
  103. map.put("操作店员", orderEntity.getUserName());
  104. map.put("购买类型", Dict.isOnfflineOrder.item_1.getItem().equals(orderEntity.getIsOnfflineOrder()) ? "线下购买" : "线上购买");
  105. map.put("订单业务类型", StringUtils.isEmpty(orderBizType)?"":Dict.orderBizType.valueOf("item_"+orderBizType).getItemName());
  106. map.put("订单状态", Dict.orderStatus.valueOf("item_"+orderStatus).getItemName());
  107. map.put("付款状态", Dict.payStatus.valueOf("item_"+payStatus).getItemName());
  108. map.put("实际支付", orderEntity.getActualPrice());
  109. map.put("订单总价", orderEntity.getOrderPrice());
  110. map.put("下单时间", orderEntity.getAddTime());
  111. map.put("付款时间", orderEntity.getPayTime());
  112. map.put("退T-1日前订单金额", orderEntity.getPayTime());
  113. map.put("T-1日前订单生成时间", orderEntity.getPayTime());
  114. list.add(map);
  115. }
  116. }
  117. // 前期的订单
  118. List<OrderEntity> previousList = orderEntityListMap.get("previous");
  119. if (previousList != null && previousList.size() > 0) {
  120. for (OrderEntity orderEntity : previousList) {
  121. LinkedHashMap<String, Object> map = new LinkedHashMap<>();
  122. // 订单业务类型
  123. String orderBizType = orderEntity.getOrderBizType();
  124. // 订单状态
  125. Integer orderStatus = orderEntity.getOrderStatus();
  126. // 付款状态
  127. Integer payStatus = orderEntity.getPayStatus();
  128. map.put("订单编号", orderEntity.getOrderSn());
  129. map.put("操作店员", orderEntity.getUserName());
  130. map.put("购买类型", Dict.isOnfflineOrder.item_1.getItem().equals(orderEntity.getIsOnfflineOrder()) ? "线下购买" : "线上购买");
  131. map.put("订单业务类型", StringUtils.isEmpty(orderBizType)?"":Dict.orderBizType.valueOf("item_"+orderBizType).getItemName());
  132. map.put("订单状态", Dict.orderStatus.valueOf("item_"+orderStatus).getItemName());
  133. map.put("付款状态", Dict.payStatus.valueOf("item_"+payStatus).getItemName());
  134. map.put("实际支付", orderEntity.getActualPrice());
  135. map.put("订单总价", orderEntity.getOrderPrice());
  136. map.put("下单时间", "");
  137. map.put("付款时间", "");
  138. map.put("退T-1日前订单金额", orderEntity.getActualPrice());
  139. map.put("T-1日前订单生成时间", orderEntity.getPayTime());
  140. list.add(map);
  141. }
  142. }
  143. // ==================================第三个sheet-订单税款明细===========================================
  144. String[] taxDetailHeader = new String[]{"订单编号", "门店编号", "门店名称", "商品编码", "完税总价格",
  145. "进口增值税率(%)", "进口从价消费税率(%)", "应征增值税", "应征消费税", "总税额",
  146. "税单接收时间","退T-1日前应征增值税","退T-1日前应征消费税","退T-1日前总税额","T-1日前生成时间"};
  147. Map<String,List<TaxDetailDto>> TaxDetailEntityListMap = orderService.queryTaxDetailList(billDate,"");
  148. List<Map<String,Object>> taxList = new LinkedList<>();
  149. // 获取当前税率
  150. List<TaxDetailDto> current = TaxDetailEntityListMap.get("current");
  151. if (current != null && current.size() > 0) {
  152. for (TaxDetailDto taxDetailDto : current) {
  153. LinkedHashMap<String, Object> map = new LinkedHashMap<>();
  154. map.put("订单编号", taxDetailDto.getOrderSn());
  155. map.put("门店编号", taxDetailDto.getStoreSn());
  156. map.put("门店名称", taxDetailDto.getStoreName());
  157. map.put("商品编码", taxDetailDto.getSku());
  158. map.put("完税总价格", taxDetailDto.getPretaxPrice());
  159. map.put("进口增值税率(%)", taxDetailDto.getVatRate());
  160. map.put("进口从价消费税率(%)", taxDetailDto.getSaleTaxRate());
  161. map.put("应征增值税", taxDetailDto.getVat());
  162. map.put("应征消费税", taxDetailDto.getSaleTax());
  163. map.put("总税额", taxDetailDto.getTax());
  164. map.put("税单接收时间", taxDetailDto.getReceiveTaxTime());
  165. taxList.add(map);
  166. }
  167. }
  168. List<TaxDetailDto> previous = TaxDetailEntityListMap.get("previous");
  169. if (previous != null && previous.size() > 0) {
  170. for (TaxDetailDto taxDetailDto : previous) {
  171. LinkedHashMap<String, Object> map = new LinkedHashMap<>();
  172. map.put("订单编号", taxDetailDto.getOrderSn());
  173. map.put("门店编号", taxDetailDto.getStoreSn());
  174. map.put("门店名称", taxDetailDto.getStoreName());
  175. map.put("商品编码", taxDetailDto.getSku());
  176. map.put("完税总价格", taxDetailDto.getPretaxPrice());
  177. map.put("进口增值税率(%)", taxDetailDto.getVatRate());
  178. map.put("进口从价消费税率(%)", taxDetailDto.getSaleTaxRate());
  179. map.put("退T-1日前应征增值税", taxDetailDto.getPreVat());
  180. map.put("退T-1日前应征消费税", taxDetailDto.getPreSaleTax());
  181. map.put("退T-1日前总税额", taxDetailDto.getPreTax());
  182. map.put("T-1日前生成时间", taxDetailDto.getPreTaxTime());
  183. taxList.add(map);
  184. }
  185. }
  186. ee.addSalesFirstSheet("销售总额", firstSheetFirstRowValue, firstSheetSecondRowValue);
  187. ee.addSheetByMap("销售订单金额", list, saleHeader);
  188. ee.addSheetByMap("订单税款明细", taxList, taxDetailHeader);
  189. ee.export(response);
  190. return R.ok();
  191. }
  192. }