package com.ruoyi.order.controller; import java.text.SimpleDateFormat; import java.time.LocalDateTime; import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.ruoyi.account.api.feignClient.AppUserClient; import com.ruoyi.account.api.model.TAppUserAddress; import com.ruoyi.chargingPile.api.feignClient.ChargingPileClient; import com.ruoyi.chargingPile.api.model.TChargingPile; import com.ruoyi.common.core.domain.R; import com.ruoyi.common.core.dto.ExchangeBackDto; import com.ruoyi.common.core.web.domain.AjaxResult; import com.ruoyi.common.core.web.page.PageInfo; import com.ruoyi.common.security.service.TokenService; import com.ruoyi.order.api.model.TExchangeOrder; import com.ruoyi.order.api.model.TShoppingOrder; import com.ruoyi.order.api.query.ShoppingOrderQuery; import com.ruoyi.order.api.query.TActivityStatisticsQuery; import com.ruoyi.order.api.vo.TActivityStatisticslVO; import com.ruoyi.order.api.vo.TActivityVO; import com.ruoyi.order.dto.ExchangeOrderGoodsInfo; import com.ruoyi.order.dto.GetMyExchangeOrder; import com.ruoyi.order.dto.MyExchangeOrderList; import com.ruoyi.order.service.TExchangeOrderService; import com.ruoyi.order.service.TShoppingOrderService; import com.ruoyi.common.core.dto.ExchangeDto; import com.ruoyi.common.core.utils.OrderCodeUtil; import com.ruoyi.other.api.feignClient.CouponClient; import com.ruoyi.other.api.feignClient.GoodsClient; import com.ruoyi.payment.api.feignClient.AliPaymentClient; import com.ruoyi.payment.api.feignClient.WxPaymentClient; import com.ruoyi.system.api.domain.SysUser; import com.ruoyi.system.api.feignClient.SysUserClient; import io.swagger.annotations.Api; import io.swagger.annotations.ApiOperation; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.util.StringUtils; import org.springframework.web.bind.annotation.*; import javax.annotation.Resource; import java.util.*; import java.util.stream.Collectors; /** *

* 前端控制器 *

* * @author xiaochen * @since 2024-08-07 */ @Api(tags = "积分兑换订单") @RestController @RequestMapping("/t-exchange-order") public class TExchangeOrderController { @Resource private TShoppingOrderService tShoppingOrderService; @Resource private TExchangeOrderService exchangeOrderService; @Resource private AppUserClient appUserClient; @Resource private ChargingPileClient chargingPileClient; @Resource private GoodsClient goodsClient; @Resource private CouponClient couponClient; @PostMapping("/getExchangeOrderList") @ApiOperation(value = "列表查询", tags = {"管理后台-兑换订单"}) public AjaxResult> getExchangeOrderList(@RequestBody ShoppingOrderQuery query) { if (StringUtils.hasLength(query.getPhone())) { List data = appUserClient.getUserIdsByPhone(query.getPhone()).getData(); if (data.isEmpty()){ return AjaxResult.success(new PageInfo()); } query.setUserIds(data); } if (StringUtils.hasLength(query.getName())) { List data = goodsClient.getGoodsIdsByName(query.getName()).getData(); query.setGoodsIds(data); List data1 = couponClient.getCouponIdsByName(query.getName()).getData(); query.setCouponIds(data1); if (data.isEmpty() && data1.isEmpty()){ return AjaxResult.success(new PageInfo()); } } PageInfo res = exchangeOrderService.pageList(query); return AjaxResult.success(res); } @Resource private SysUserClient sysUserClient; @GetMapping("/getShoppingOrderInfoById") @ApiOperation(value = "根据订单id查看订单详情", tags = {"管理后台-兑换订单"}) public AjaxResult getShoppingOrderList(String id) { TExchangeOrder byId = exchangeOrderService.getById(id); if (byId.getConsignerId()!=null){ SysUser data = sysUserClient.getSysUser(byId.getConsignerId()).getData(); if (data!=null){ byId.setConsignerName(data.getUserName()); } } if (byId.getCancellationId()!=null){ SysUser data = sysUserClient.getSysUser(byId.getCancellationId()).getData(); if (data!=null){ byId.setCancellationName(data.getUserName()); } } if (byId.getAppUserAddressId()!=null){ TAppUserAddress data = appUserClient.getAddressById(byId.getAppUserAddressId()).getData(); if (data!=null){ byId.setReceivingName(data.getName()+"-"+data.getPhone()); byId.setReceivingAddress(data.getAddress()); } } return AjaxResult.success(byId); } @Resource private TokenService tokenService; @GetMapping("/deleteShoppingOrder") @ApiOperation(value = "批量删除订单", tags = {"管理后台-兑换订单"}) public AjaxResult deleteShoppingOrder(String ids) { exchangeOrderService.removeBatchByIds(Arrays.asList(ids.split(","))); return AjaxResult.success(); } @GetMapping("/cancelShoppingOrder") @ApiOperation(value = "取消订单", tags = {"管理后台-兑换订单"}) public AjaxResult cancelShoppingOrder(String id) { TExchangeOrder byId = exchangeOrderService.getById(id); Long userid = tokenService.getLoginUser().getUserid(); byId.setCancellationId(userid); byId.setCancellationTime(LocalDateTime.now()); byId.setStatus(4); exchangeOrderService.updateById(byId); // 回退积分 Integer points = byId.getPoints(); appUserClient.refundPoints(byId.getAppUserId()+"-"+points); return AjaxResult.success(); } @GetMapping("/consignerShoppingOrder") @ApiOperation(value = "发货", tags = {"管理后台-兑换订单"}) public AjaxResult consignerShoppingOrder(String id,String companyName,String code) { TExchangeOrder byId = exchangeOrderService.getById(id); byId.setExpressCompany(companyName); byId.setExpressNumber(code); Long userid = tokenService.getLoginUser().getUserid(); byId.setConsignerId(userid); byId.setConsignerTime(LocalDateTime.now()); byId.setStatus(2); exchangeOrderService.updateById(byId); return AjaxResult.success(); } /** * 管理后台 活动费用统计 * @param * @return */ @PostMapping(value = "/activityStatistics") public R activityStatistics(@RequestBody TActivityStatisticsQuery dto) { if (StringUtils.hasLength(dto.getPhone())){ // 远程调用查询出符合条件的用户ids List data = appUserClient.getUserIdsByPhone(dto.getPhone()).getData(); if (data.isEmpty()){ TActivityVO res = new TActivityVO(); res.setList(new PageInfo()); return R.ok(res); } dto.setUserIds(data); } if (dto.getSiteId()!=null){ // 远程调用查询出符合条件的充电桩ids List data = chargingPileClient.getChargingPileBySiteId(dto.getSiteId()).getData(); dto.setChargingPileIds(data.stream().map(TChargingPile::getId).collect(Collectors.toList())); } return R.ok(tShoppingOrderService.activityStatistics(dto)); } //订单详情 @PostMapping(value = "/detail") public R detail(@RequestParam("orderId") Long orderId) { return R.ok(exchangeOrderService.getById(orderId)); } /** * 管理后台 根据商品ids 查询对应的销量 * @param goodsIds 订单号-商品类型 * @return */ @GetMapping("/getSalesCountByGoodsIds/{goodsIds}") public R> getSalesCountByGoodsId(@PathVariable("goodsIds")String goodsIds){ String[] split = goodsIds.split("-"); // 取出最后一位字符 类型1查询现金购买 类型2查询积分兑换 String s = split[split.length - 1]; String[] split1 = split[0].split(","); List res = new ArrayList<>(); switch (Integer.parseInt(s)){ case 1: for (int i = 0; i < split1.length; i++) { Integer reduce = tShoppingOrderService.list(new QueryWrapper() .eq("order_type",1) .eq("goods_id", split1[i]) .isNull("refund_status")) .stream().map(TShoppingOrder::getPurchaseQuantity).reduce(0, Integer::sum); res.add(reduce); } break; case 2: for (int i = 0; i < split1.length; i++) { Integer reduce = exchangeOrderService.list(new QueryWrapper().eq("order_type",1) .ne("status",4).eq("goods_id", split1[i])) .stream().map(TExchangeOrder::getPurchaseQuantity).reduce(0, Integer::sum); res.add(reduce); } break; } return R.ok(res); } /** * 管理后台 根据t_app_coupon订单ids查询优惠券的订单编号 * @param goodsIds 订单号-商品类型 * @return */ @GetMapping("/getCodeByOrderId/{goodsIds}") public R> getCodeByOrderId(@PathVariable("goodsIds") String goodsIds){ String[] split = goodsIds.split(","); List strings = new ArrayList<>(); for (String s : split) { if (s.contains("-")){ // 带有负号的是积分兑换的订单 TExchangeOrder one = exchangeOrderService.getOne(new QueryWrapper() .eq("order_type", 2) .eq("id", s.replace("-",""))); if (one != null){ strings.add(one.getCode()); }else{ strings.add(""); } }else{ TShoppingOrder one = tShoppingOrderService.getOne(new QueryWrapper() .eq("order_type", 2) .eq("id", s)); if (one != null){ strings.add(one.getCode()); }else{ strings.add(""); } } } return R.ok(strings); } @PostMapping("/getById") public R getById(@RequestParam("goodId") Integer goodId,@RequestParam("userId") Long userId,@RequestParam("goodType") Integer goodType){ if (goodType==1){ return R.ok(exchangeOrderService.lambdaQuery().eq(TExchangeOrder::getGoodsId,goodId).eq(TExchangeOrder::getAppUserId,userId).ne(TExchangeOrder::getStatus,4).count()); }else { return R.ok(exchangeOrderService.lambdaQuery().eq(TExchangeOrder::getCouponId,goodId).eq(TExchangeOrder::getAppUserId,userId).ne(TExchangeOrder::getStatus,4).count()); } } @PostMapping("/create") public R exchangeCreate(@RequestBody ExchangeDto exchangeDto){ TExchangeOrder tExchangeOrder = new TExchangeOrder(); tExchangeOrder.setCode(OrderCodeUtil.getOrderCode("DH")); tExchangeOrder.setAppUserId(exchangeDto.getUserId()); tExchangeOrder.setOrderType(exchangeDto.getGoodType()); if (exchangeDto.getGoodType()==1) { tExchangeOrder.setGoodsId(exchangeDto.getGoodId()); }else { tExchangeOrder.setCouponId(exchangeDto.getGoodId()); } tExchangeOrder.setPurchaseQuantity(1); tExchangeOrder.setAppUserAddressId(exchangeDto.getAddressId()==null?null:Long.valueOf(exchangeDto.getAddressId())); tExchangeOrder.setPoints(exchangeDto.getPoint()); tExchangeOrder.setRemark(exchangeDto.getRemark()); if (exchangeDto.getGoodType()==1){ tExchangeOrder.setStatus(1); }else { tExchangeOrder.setStatus(3); } tExchangeOrder.setCreateTime(LocalDateTime.now()); tExchangeOrder.setDelFlag(false); exchangeOrderService.save(tExchangeOrder); ExchangeBackDto exchangeBackDto = new ExchangeBackDto(); exchangeBackDto.setId(tExchangeOrder.getId()); exchangeBackDto.setCode(tExchangeOrder.getCode()); return R.ok(exchangeBackDto); } @GetMapping("/getMyExchangeOrder") @ApiOperation(value = "获取兑换记录列表", tags = {"小程序-兑换记录"}) public AjaxResult> getMyExchangeOrder(GetMyExchangeOrder query){ Map list = exchangeOrderService.getMyExchangeOrder(query); return AjaxResult.success(list); } @GetMapping("/getGoodsExchangeOrder/{id}") @ApiOperation(value = "获取兑换订单详情", tags = {"小程序-兑换记录"}) public AjaxResult getGoodsExchangeOrder(@PathVariable String id){ ExchangeOrderGoodsInfo goodsExchangeOrder = exchangeOrderService.getGoodsExchangeOrder(id); return AjaxResult.success(goodsExchangeOrder); } @PutMapping("/confirmReceipt/{id}") @ApiOperation(value = "确认收货操作", tags = {"小程序-兑换记录"}) public AjaxResult confirmReceipt(@PathVariable String id){ TExchangeOrder tExchangeOrder = exchangeOrderService.getById(id); if(tExchangeOrder.getStatus() == 3){ return AjaxResult.error("不能重复确认收货"); } if(tExchangeOrder.getStatus() == 1){ return AjaxResult.error("订单还未发货呢"); } if(tExchangeOrder.getStatus() == 4){ return AjaxResult.error("订单已取消,不允许操作。"); } tExchangeOrder.setStatus(3); exchangeOrderService.updateById(tExchangeOrder); return AjaxResult.success(); } }