| | |
| | | package com.ruoyi.order.controller; |
| | | |
| | | |
| | | import cn.afterturn.easypoi.excel.ExcelExportUtil; |
| | | import cn.afterturn.easypoi.excel.entity.ExportParams; |
| | | import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper; |
| | | import com.baomidou.mybatisplus.core.conditions.update.UpdateWrapper; |
| | | import com.ruoyi.account.api.dto.GiveVipDto; |
| | | import com.ruoyi.account.api.dto.UserListQueryDto; |
| | | import com.ruoyi.account.api.feignClient.AppUserClient; |
| | | import com.ruoyi.common.core.domain.R; |
| | | import com.ruoyi.common.core.utils.DateUtils; |
| | | import com.ruoyi.common.core.utils.WebUtils; |
| | | import com.ruoyi.common.core.web.domain.AjaxResult; |
| | | import com.ruoyi.common.core.web.page.PageInfo; |
| | | import com.ruoyi.common.log.annotation.Log; |
| | | import com.ruoyi.common.log.enums.BusinessType; |
| | | import com.ruoyi.common.security.annotation.Logical; |
| | | import com.ruoyi.common.security.annotation.RequiresPermissions; |
| | | import com.ruoyi.order.api.model.TExchangeOrder; |
| | | import com.ruoyi.order.api.model.TShoppingOrder; |
| | | import com.ruoyi.order.api.model.TVipOrder; |
| | | import com.ruoyi.order.api.model.TVipOrderRefund; |
| | | import com.ruoyi.order.api.query.ChargingOrderQuery; |
| | | import com.ruoyi.order.api.query.ShoppingOrderQuery; |
| | | import com.ruoyi.order.api.query.VipShoppingOrderQuery; |
| | | import com.ruoyi.order.api.vo.ChargingOrderVO; |
| | | import com.ruoyi.order.dto.TEnterpriseExport; |
| | | import com.ruoyi.order.export.EnterpriseChargingDetailExport; |
| | | import com.ruoyi.order.export.TVipOrderExport; |
| | | import com.ruoyi.order.service.TChargingOrderService; |
| | | import com.ruoyi.order.service.TVipOrderRefundService; |
| | | import com.ruoyi.order.service.TVipOrderService; |
| | | import com.ruoyi.other.api.domain.TEnterpriseUserApplication; |
| | | import com.ruoyi.other.api.feignClient.OtherClient; |
| | | import io.swagger.annotations.Api; |
| | | import io.swagger.annotations.ApiOperation; |
| | | import org.omg.CORBA.PRIVATE_MEMBER; |
| | | import org.apache.poi.ss.usermodel.Workbook; |
| | | import org.springframework.beans.BeanUtils; |
| | | import org.springframework.beans.factory.annotation.Autowired; |
| | | import org.springframework.util.StringUtils; |
| | | import org.springframework.web.bind.annotation.*; |
| | | |
| | | import javax.annotation.Resource; |
| | | import javax.servlet.ServletOutputStream; |
| | | import javax.servlet.http.HttpServletResponse; |
| | | import java.io.IOException; |
| | | import java.net.URLEncoder; |
| | | import java.time.LocalDateTime; |
| | | import java.time.format.DateTimeFormatter; |
| | | import java.util.ArrayList; |
| | | import java.util.Arrays; |
| | | import java.util.List; |
| | | |
| | |
| | | private TVipOrderService vipOrderService; |
| | | @Resource |
| | | private AppUserClient appUserClient; |
| | | @Resource |
| | | private OtherClient otherClient; |
| | | @Resource |
| | | private TVipOrderRefundService vipOrderRefundService; |
| | | @Resource |
| | | private TChargingOrderService chargingOrderService; |
| | | |
| | | |
| | | |
| | | @RequiresPermissions(value = {"/vipOrder"}, logical = Logical.OR) |
| | | @PostMapping("/getVipOrderList") |
| | | @ApiOperation(value = "列表查询", tags = {"管理后台-会员订单"}) |
| | | public AjaxResult<PageInfo<TVipOrder>> getVipOrderList(@RequestBody VipShoppingOrderQuery query) { |
| | |
| | | if (data.isEmpty()){ |
| | | return AjaxResult.success(new PageInfo<TVipOrder>()); |
| | | } |
| | | query.setUserIds(data); |
| | | } |
| | | PageInfo<TVipOrder> res = vipOrderService.pageList(query); |
| | | return AjaxResult.success(res); |
| | | } |
| | | |
| | | |
| | | @RequiresPermissions(value = {"/vipOrder/add"}, logical = Logical.OR) |
| | | @PostMapping("/addVipOrder") |
| | | @ApiOperation(value = "添加会员订单", tags = {"管理后台-会员订单"}) |
| | | public R<Long> addVipOrder(@RequestBody TVipOrder dto) { |
| | | if (dto.getId()!=null){ |
| | | List<TVipOrder> list = vipOrderService.lambdaQuery().eq(TVipOrder::getCode, dto.getCode()) |
| | | .ne(TVipOrder::getId, dto.getId()).list(); |
| | | if (!list.isEmpty())return R.fail("订单编号已存在"); |
| | | }else{ |
| | | List<TVipOrder> list = vipOrderService.lambdaQuery().eq(TVipOrder::getCode, dto.getCode()).list(); |
| | | if (!list.isEmpty())return R.fail("订单编号已存在"); |
| | | } |
| | | vipOrderService.saveOrUpdate(dto); |
| | | return R.ok(dto.getId()); |
| | | } |
| | | |
| | | |
| | | @PostMapping("/addVipOrder1") |
| | | public R<Long> addVipOrder1(@RequestBody TVipOrder dto) { |
| | | if (dto.getId()!=null){ |
| | | List<TVipOrder> list = vipOrderService.lambdaQuery().eq(TVipOrder::getCode, dto.getCode()) |
| | | .ne(TVipOrder::getId, dto.getId()).list(); |
| | | if (!list.isEmpty())return R.fail("订单编号已存在"); |
| | | }else{ |
| | | List<TVipOrder> list = vipOrderService.lambdaQuery().eq(TVipOrder::getCode, dto.getCode()).list(); |
| | | if (!list.isEmpty())return R.fail("订单编号已存在"); |
| | | } |
| | | vipOrderService.saveOrUpdate(dto); |
| | | return R.ok(dto.getId()); |
| | | } |
| | | |
| | | |
| | | |
| | | @RequiresPermissions(value = {"/vipOrder/del"}, logical = Logical.OR) |
| | | @GetMapping("/deleteVipOrder") |
| | | @ApiOperation(value = "批量删除会员订单", tags = {"管理后台-会员订单"}) |
| | | public AjaxResult deleteVipOrder(String id) { |
| | | vipOrderService.removeBatchByIds(Arrays.asList(id.split(","))); |
| | | vipOrderService.update(new LambdaUpdateWrapper<TVipOrder>().in(TVipOrder::getId, Arrays.asList(id.split(","))) |
| | | .set(TVipOrder::getDelFlag, 1)); |
| | | return AjaxResult.success(); |
| | | } |
| | | } |
| | | |
| | | |
| | | |
| | | @PostMapping("/callBack") |
| | | public R callBack(@RequestParam("code")String code,@RequestParam("outTradeNo")String outTradeNo){ |
| | | TVipOrder one = vipOrderService.lambdaQuery().eq(TVipOrder::getCode, code).one(); |
| | | if (one == null) { |
| | | return R.fail("会员订单不存在"); |
| | | } |
| | | boolean updated = vipOrderService.update(new LambdaUpdateWrapper<TVipOrder>() |
| | | .eq(TVipOrder::getId, one.getId()) |
| | | .eq(TVipOrder::getPaymentStatus, 1) |
| | | .set(TVipOrder::getSerialNumber, outTradeNo) |
| | | .set(TVipOrder::getPaymentStatus, 2) |
| | | .set(TVipOrder::getPayTime, LocalDateTime.now())); |
| | | if (!updated) { |
| | | return R.ok(); |
| | | } |
| | | GiveVipDto giveVipDto = new GiveVipDto(); |
| | | giveVipDto.setVipId(one.getVipId()); |
| | | giveVipDto.setType(one.getVipType()); |
| | | giveVipDto.setUserIds(one.getAppUserId().toString()); |
| | | appUserClient.giveVip(giveVipDto); |
| | | return R.ok(); |
| | | } |
| | | |
| | | |
| | | |
| | | @PostMapping("/vipWxRefund") |
| | | public void vipWxRefund(@RequestParam("out_refund_no") String out_refund_no, |
| | | @RequestParam("refund_id") String refund_id, |
| | | @RequestParam("tradeState") String tradeState, |
| | | @RequestParam("success_time") String success_time){ |
| | | if("SUCCESS".equals(tradeState)){ |
| | | TVipOrderRefund vipOrderRefund = vipOrderRefundService.getOne(new LambdaUpdateWrapper<TVipOrderRefund>().eq(TVipOrderRefund::getRefundCode, out_refund_no)); |
| | | vipOrderRefund.setRefundSerialNumber(refund_id); |
| | | vipOrderRefund.setRefundStatus(2); |
| | | vipOrderRefund.setRefundTime(LocalDateTime.now()); |
| | | vipOrderRefundService.updateById(vipOrderRefund); |
| | | TVipOrder vipOrder = vipOrderService.getById(vipOrderRefund.getVipOrderId()); |
| | | vipOrder.setRefundStatus(2); |
| | | vipOrderService.updateById(vipOrder); |
| | | } |
| | | } |
| | | |
| | | |
| | | |
| | | |
| | | @ApiOperation(tags = {"后台-申请表单-集团用户"},value = "导出") |
| | | @PutMapping(value = "/export") |
| | | @Log(title = "【申请建桩】导出建桩申请列表", businessType = BusinessType.EXPORT) |
| | | public void export(String landlordPhone) { |
| | | |
| | | R<List<TEnterpriseUserApplication>> tnterPrise = otherClient.getTnterPrise(); |
| | | List<TEnterpriseUserApplication> list = tnterPrise.getData(); |
| | | List<TEnterpriseExport> orderInvoiceExports = new ArrayList<>(); |
| | | for (TEnterpriseUserApplication orderInvoiceVO : list) { |
| | | TEnterpriseExport orderInvoiceExport = new TEnterpriseExport(); |
| | | BeanUtils.copyProperties(orderInvoiceVO,orderInvoiceExport); |
| | | orderInvoiceExport.setCreateTime(DateUtils.localDateTimeToString(orderInvoiceVO.getCreateTime())); |
| | | orderInvoiceExports.add(orderInvoiceExport); |
| | | } |
| | | Workbook workbook = ExcelExportUtil.exportExcel(new ExportParams(), TEnterpriseExport.class, orderInvoiceExports); |
| | | HttpServletResponse response = WebUtils.response(); |
| | | response.setCharacterEncoding("utf-8"); |
| | | ServletOutputStream outputStream = null; |
| | | try { |
| | | String fileName = URLEncoder.encode("集团用户导出.xls", "utf-8"); |
| | | response.setHeader("Content-Disposition", "attachment;filename=" + fileName); |
| | | response.setContentType("application/vnd.ms-excel;charset=UTF-8"); |
| | | response.setHeader("Pragma", "no-cache"); |
| | | response.setHeader("Cache-Control", "no-cache"); |
| | | outputStream = response.getOutputStream(); |
| | | workbook.write(outputStream); |
| | | } catch (IOException e) { |
| | | e.printStackTrace(); |
| | | } finally { |
| | | try { |
| | | workbook.close(); |
| | | outputStream.close(); |
| | | } catch (IOException e) { |
| | | e.printStackTrace(); |
| | | } |
| | | } |
| | | |
| | | |
| | | } |
| | | |
| | | |
| | | @RequiresPermissions(value = {"/vipOrder", "/vipOrder/export"}, logical = Logical.OR) |
| | | @ApiOperation(tags = {"管理后台-会员订单"}, value = "导出") |
| | | @PutMapping(value = "/exportVipOrder") |
| | | @Log(title = "会员订单导出", businessType = BusinessType.EXPORT) |
| | | public void exportVipOrder(@RequestBody VipShoppingOrderQuery query) { |
| | | if (StringUtils.hasLength(query.getPhone())) { |
| | | List<Long> data = appUserClient.getUserIdsByPhone(query.getPhone()).getData(); |
| | | if (data.isEmpty()) { |
| | | writeVipOrderWorkbook(new ArrayList<>()); |
| | | return; |
| | | } |
| | | query.setUserIds(data); |
| | | } |
| | | query.setPageCurr(1); |
| | | query.setPageSize(100000); |
| | | List<TVipOrder> list = vipOrderService.pageList(query).getRecords(); |
| | | List<TVipOrderExport> exports = new ArrayList<>(); |
| | | for (TVipOrder vipOrder : list) { |
| | | TVipOrderExport export = new TVipOrderExport(); |
| | | BeanUtils.copyProperties(vipOrder, export); |
| | | export.setCreateTime(DateUtils.localDateTimeToString(vipOrder.getCreateTime())); |
| | | exports.add(export); |
| | | } |
| | | writeVipOrderWorkbook(exports); |
| | | } |
| | | |
| | | @RequiresPermissions(value = {"/vipList", "/vipList/export"}, logical = Logical.OR) |
| | | @ApiOperation(tags = {"管理后台-会员列表"}, value = "导出会员充电订单") |
| | | @PutMapping(value = "/exportVipOrderByVipUser") |
| | | @Log(title = "会员列表导出会员充电订单", businessType = BusinessType.EXPORT) |
| | | public void exportVipOrderByVipUser(@RequestBody UserListQueryDto query) { |
| | | List<Long> userIds = appUserClient.getVipUserIds(query).getData(); |
| | | if (userIds == null || userIds.isEmpty()) { |
| | | writeVipChargingOrderWorkbook(new ArrayList<>()); |
| | | return; |
| | | } |
| | | ChargingOrderQuery orderQuery = new ChargingOrderQuery(); |
| | | orderQuery.setUserIds(userIds); |
| | | orderQuery.setPageCurr(1); |
| | | orderQuery.setPageSize(100000); |
| | | List<ChargingOrderVO> list = chargingOrderService.chargingOrderList(orderQuery).getRecords(); |
| | | List<EnterpriseChargingDetailExport> exports = new ArrayList<>(); |
| | | for (ChargingOrderVO order : list) { |
| | | EnterpriseChargingDetailExport export = new EnterpriseChargingDetailExport(); |
| | | export.setCode(order.getCode()); |
| | | export.setOrderType(Integer.valueOf(1).equals(order.getOrderType()) ? "小程序" : "刷卡"); |
| | | export.setOrderClassification("充电订单"); |
| | | export.setSiteName(order.getSiteName()); |
| | | export.setTerminalName(order.getTerminalName()); |
| | | export.setStatus(getChargingOrderStatus(order.getStatus())); |
| | | export.setChargingSecond(order.getChargingSecond()); |
| | | export.setTotalAmount(order.getOrderAmount()); |
| | | export.setCouponDiscountAmount(order.getCouponDiscountAmount()); |
| | | export.setVipDiscountAmount(order.getVipDiscountAmount()); |
| | | export.setPaymentAmount(order.getPaymentAmount()); |
| | | export.setRefundAmount(order.getRefundAmount()); |
| | | export.setPhone(order.getPhone()); |
| | | export.setOrderSource(getChargingOrderSource(order.getOrderSource())); |
| | | export.setStartTime(DateUtils.localDateTimeToString(order.getStartTime())); |
| | | export.setEndTime(DateUtils.localDateTimeToString(order.getEndTime())); |
| | | exports.add(export); |
| | | } |
| | | writeVipChargingOrderWorkbook(exports); |
| | | } |
| | | |
| | | private String getChargingOrderStatus(Integer status) { |
| | | if (status == null) return "未知"; |
| | | String[] names = {"未知", "等待中", "启动中", "充电中", "停止中", "已结束"}; |
| | | return status >= 0 && status < names.length ? names[status] : "未知"; |
| | | } |
| | | |
| | | private String getChargingOrderSource(Integer source) { |
| | | if (Integer.valueOf(1).equals(source)) return "明星充电"; |
| | | if (Integer.valueOf(2).equals(source)) return "快电"; |
| | | if (Integer.valueOf(3).equals(source)) return "新电途"; |
| | | return ""; |
| | | } |
| | | |
| | | private void writeVipChargingOrderWorkbook(List<EnterpriseChargingDetailExport> exports) { |
| | | Workbook workbook = ExcelExportUtil.exportExcel(new ExportParams(), EnterpriseChargingDetailExport.class, exports); |
| | | writeWorkbook(workbook, "会员充电订单导出.xls"); |
| | | } |
| | | |
| | | private void writeVipOrderWorkbook(List<TVipOrderExport> exports) { |
| | | Workbook workbook = ExcelExportUtil.exportExcel(new ExportParams(), TVipOrderExport.class, exports); |
| | | writeWorkbook(workbook, "会员订单导出.xls"); |
| | | } |
| | | |
| | | private void writeWorkbook(Workbook workbook, String exportFileName) { |
| | | HttpServletResponse response = WebUtils.response(); |
| | | response.setCharacterEncoding("utf-8"); |
| | | ServletOutputStream outputStream = null; |
| | | try { |
| | | String fileName = URLEncoder.encode(exportFileName, "utf-8"); |
| | | response.setHeader("Content-Disposition", "attachment;filename=" + fileName); |
| | | response.setContentType("application/vnd.ms-excel;charset=UTF-8"); |
| | | response.setHeader("Pragma", "no-cache"); |
| | | response.setHeader("Cache-Control", "no-cache"); |
| | | outputStream = response.getOutputStream(); |
| | | workbook.write(outputStream); |
| | | } catch (IOException e) { |
| | | e.printStackTrace(); |
| | | } finally { |
| | | try { |
| | | workbook.close(); |
| | | if (outputStream != null) { |
| | | outputStream.close(); |
| | | } |
| | | } catch (IOException e) { |
| | | e.printStackTrace(); |
| | | } |
| | | } |
| | | } |
| | | |
| | | |
| | | } |