package com.gxwebsoft.open.controller; import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper; import com.gxwebsoft.common.core.annotation.OperationLog; import com.gxwebsoft.common.core.web.*; import com.gxwebsoft.common.system.entity.User; import com.gxwebsoft.common.system.service.UserService; import com.gxwebsoft.shop.entity.Order; import com.gxwebsoft.shop.entity.OrderGoods; import com.gxwebsoft.shop.entity.UserBalanceLog; import com.gxwebsoft.shop.param.OrderGoodsParam; import com.gxwebsoft.shop.service.OrderGoodsService; import com.gxwebsoft.shop.service.OrderService; import com.gxwebsoft.shop.service.UserBalanceLogService; import io.swagger.annotations.Api; import io.swagger.annotations.ApiOperation; import org.springframework.security.access.prepost.PreAuthorize; import org.springframework.transaction.annotation.Transactional; import org.springframework.web.bind.annotation.*; import javax.annotation.Resource; import java.math.BigDecimal; import java.util.List; import static com.gxwebsoft.common.core.constants.BalanceConstants.BALANCE_REFUND; import static com.gxwebsoft.common.core.constants.OrderConstants.ORDER_STATUS_CANCEL; /** * 订单商品记录表控制器 * * @author 科技小王子 * @since 2022-12-09 17:15:31 */ @Api(tags = "订单商品记录表管理") @RestController @RequestMapping("/api/open/order-goods") public class OpenOrderGoodsController extends BaseController { @Resource private OrderGoodsService orderGoodsService; @Resource private UserService userService; @Resource private UserBalanceLogService userBalanceLogService; @Resource private OrderService orderService; @PreAuthorize("hasAuthority('shop:orderGoods:list')") @OperationLog @ApiOperation("分页查询订单商品记录表") @GetMapping("/page") public ApiResult> page(OrderGoodsParam param) { PageParam page = new PageParam<>(param); page.setDefaultOrder("gear asc, sort_number asc, create_time desc"); return success(orderGoodsService.page(page, page.getWrapper())); // 使用关联查询 //return success(orderGoodsService.pageRel(param)); } @PreAuthorize("hasAuthority('shop:orderGoods:list')") @OperationLog @ApiOperation("查询全部订单商品记录表") @GetMapping() public ApiResult> list(OrderGoodsParam param) { PageParam page = new PageParam<>(param); page.setDefaultOrder("gear asc, sort_number asc, create_time desc"); return success(orderGoodsService.list(page.getOrderWrapper())); // 使用关联查询 //return success(orderGoodsService.listRel(param)); } @PreAuthorize("hasAuthority('shop:orderGoods:list')") @OperationLog @ApiOperation("根据id查询订单商品记录表") @GetMapping("/{id}") public ApiResult get(@PathVariable("id") Integer id) { return success(orderGoodsService.getById(id)); // 使用关联查询 //return success(orderGoodsService.getByIdRel(id)); } @PreAuthorize("hasAuthority('shop:orderGoods:save')") @OperationLog @ApiOperation("添加订单商品记录表") @PostMapping() public ApiResult save(@RequestBody OrderGoods orderGoods) { // 记录当前登录用户id、租户id、商户编号 User loginUser = getLoginUser(); if (loginUser != null) { orderGoods.setUserId(loginUser.getUserId()); orderGoods.setMerchantCode(getMerchantCode()); } if (orderGoodsService.save(orderGoods)) { return success("添加成功"); } return fail("添加失败"); } @PreAuthorize("hasAuthority('shop:orderGoods:update')") @OperationLog @ApiOperation("修改订单商品记录表") @PutMapping() public ApiResult update(@RequestBody OrderGoods orderGoods) { if (orderGoodsService.updateById(orderGoods)) { return success("修改成功"); } return fail("修改失败"); } @PreAuthorize("hasAuthority('shop:orderGoods:remove')") @OperationLog @ApiOperation("删除订单商品记录表") @DeleteMapping("/{id}") public ApiResult remove(@PathVariable("id") Integer id) { if (orderGoodsService.removeById(id)) { return success("删除成功"); } return fail("删除失败"); } @PreAuthorize("hasAuthority('shop:orderGoods:save')") @OperationLog @ApiOperation("批量添加订单商品记录表") @PostMapping("/batch") public ApiResult saveBatch(@RequestBody List list) { if (orderGoodsService.saveBatch(list)) { return success("添加成功"); } return fail("添加失败"); } @PreAuthorize("hasAuthority('shop:orderGoods:update')") @OperationLog @ApiOperation("批量修改订单商品记录表") @PutMapping("/batch") public ApiResult removeBatch(@RequestBody BatchParam batchParam) { if (batchParam.update(orderGoodsService, "order_goods_id")) { return success("修改成功"); } return fail("修改失败"); } @PreAuthorize("hasAuthority('shop:orderGoods:remove')") @OperationLog @ApiOperation("批量删除订单商品记录表") @DeleteMapping("/batch") public ApiResult removeBatch(@RequestBody List ids) { if (orderGoodsService.removeByIds(ids)) { return success("删除成功"); } return fail("删除失败"); } @PreAuthorize("hasAuthority('shop:orderGoods:remove')") @ApiOperation("取消订单商品") @PostMapping("/cancel") @Transactional(rollbackFor = {Exception.class}) public ApiResult cancel(@RequestBody OrderGoods orderGoods) { // 验证签名 isCheckSign(); if (orderGoods.getOrderGoodsId() == null) { return fail("菜品不存在!"); } // System.out.println("orderGoods = " + orderGoods); Integer orderId = orderGoods.getOrderId(); final Order byId = orderService.getById(orderId); // 取消报餐截止时间 orderGoodsService.removeById(orderGoods); // System.out.println("orderGoods = " + orderGoods); // 退款 User user = userService.getById(byId.getUserId()); // System.out.println("user = " + user); // System.out.println("orderGoods.getGoodsPrice() = " + orderGoods.getGoodsPrice()); BigDecimal balance = user.getBalance().add(orderGoods.getGoodsPrice()); user.setBalance(balance); userService.updateById(user); // 记录余额明细 UserBalanceLog userBalanceLog = new UserBalanceLog(); userBalanceLog.setUserId(byId.getUserId()); userBalanceLog.setScene(BALANCE_REFUND); userBalanceLog.setSceneId(orderId); userBalanceLog.setMoney(orderGoods.getGoodsPrice()); userBalanceLog.setBalance(balance); userBalanceLog.setComments("取消订单:" + orderId); userBalanceLogService.save(userBalanceLog); final int count = orderGoodsService.count(new LambdaUpdateWrapper().eq(OrderGoods::getOrderId, orderId).gt(OrderGoods::getTotalNum,0)); // System.out.println("count = " + count); // 更新订单金额 // System.out.println("byId = " + byId); if (!byId.getTotalPrice().equals(0)) { byId.setTotalPrice(byId.getTotalPrice().subtract(orderGoods.getGoodsPrice())); orderService.updateById(byId); } // 无菜品就把订单删除 if(count == 0){ final Order order = new Order(); order.setOrderId(orderId); order.setOrderStatus(ORDER_STATUS_CANCEL); orderService.removeById(orderId); } return success("菜品取消成功"); } }