ExportExcelController.java 14 KB

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