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.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; /** *

* 前端控制器 *

* * @author xiaochen * @since 2024-08-07 */ @Api(tags = "会员订单") @RestController @RequestMapping("/t-vip-order") public class TVipOrderController { @Resource 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> getVipOrderList(@RequestBody VipShoppingOrderQuery query) { if (StringUtils.hasLength(query.getPhone())){ List data = appUserClient.getUserIdsByPhone(query.getPhone()).getData(); if (data.isEmpty()){ return AjaxResult.success(new PageInfo()); } query.setUserIds(data); } PageInfo res = vipOrderService.pageList(query); return AjaxResult.success(res); } @RequiresPermissions(value = {"/vipOrder/add"}, logical = Logical.OR) @PostMapping("/addVipOrder") @ApiOperation(value = "添加会员订单", tags = {"管理后台-会员订单"}) public R addVipOrder(@RequestBody TVipOrder dto) { if (dto.getId()!=null){ List list = vipOrderService.lambdaQuery().eq(TVipOrder::getCode, dto.getCode()) .ne(TVipOrder::getId, dto.getId()).list(); if (!list.isEmpty())return R.fail("订单编号已存在"); }else{ List 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 addVipOrder1(@RequestBody TVipOrder dto) { if (dto.getId()!=null){ List list = vipOrderService.lambdaQuery().eq(TVipOrder::getCode, dto.getCode()) .ne(TVipOrder::getId, dto.getId()).list(); if (!list.isEmpty())return R.fail("订单编号已存在"); }else{ List 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.update(new LambdaUpdateWrapper().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() .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().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> tnterPrise = otherClient.getTnterPrise(); List list = tnterPrise.getData(); List 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 data = appUserClient.getUserIdsByPhone(query.getPhone()).getData(); if (data.isEmpty()) { writeVipOrderWorkbook(new ArrayList<>()); return; } query.setUserIds(data); } query.setPageCurr(1); query.setPageSize(100000); List list = vipOrderService.pageList(query).getRecords(); List 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 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 list = chargingOrderService.chargingOrderList(orderQuery).getRecords(); List 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 exports) { Workbook workbook = ExcelExportUtil.exportExcel(new ExportParams(), EnterpriseChargingDetailExport.class, exports); writeWorkbook(workbook, "会员充电订单导出.xls"); } private void writeVipOrderWorkbook(List 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(); } } } }