package com.ruoyi.web.controller.system;
|
|
|
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
|
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
|
import com.github.binarywang.wxpay.bean.order.WxPayMpOrderResult;
|
import com.github.binarywang.wxpay.exception.WxPayException;
|
import com.ruoyi.common.core.domain.R;
|
import com.ruoyi.common.core.domain.model.LoginUser;
|
import com.ruoyi.common.utils.StringUtils;
|
import com.ruoyi.framework.web.service.TokenService;
|
import com.ruoyi.system.dto.AddBuyerCompanyInfoDto;
|
import com.ruoyi.system.dto.AddScheduleDto;
|
import com.ruoyi.system.dto.EditScheduleDto;
|
import com.ruoyi.system.model.*;
|
import com.ruoyi.system.query.MyOrderListQuery;
|
import com.ruoyi.system.service.*;
|
import com.ruoyi.system.vo.MyPushCompanyListVo;
|
import io.swagger.annotations.Api;
|
import io.swagger.annotations.ApiOperation;
|
import lombok.extern.slf4j.Slf4j;
|
import org.springframework.beans.factory.annotation.Autowired;
|
import org.springframework.web.bind.annotation.*;
|
|
import javax.validation.Valid;
|
import java.util.Date;
|
|
@Slf4j
|
@RestController
|
@RequestMapping("/order")
|
@Api(tags = "订单模块")
|
public class OrderController {
|
|
|
@Autowired
|
private TbOrderService orderService;
|
|
@Autowired
|
private TokenService tokenService;
|
|
@Autowired
|
private TbCompanyService companyService;
|
|
@Autowired
|
private TbScheduleService scheduleService;
|
|
@Autowired
|
private TbBuyerCompanyInfoService buyerCompanyInfoService;
|
|
@Autowired
|
private TbMessageService messageService;
|
|
@Autowired
|
private TbAccountDetailService accountDetailService;
|
|
@Autowired
|
private TbUserService userService;
|
|
|
@ApiOperation(value = "获取我的订单", tags = {"订单模块"})
|
@GetMapping("/getMyOrderList")
|
public R<Page<MyPushCompanyListVo>> getMyOrderList(MyOrderListQuery query) {
|
LoginUser loginUser = tokenService.getLoginUser();
|
Long userId = loginUser.getUserId();
|
Page<MyPushCompanyListVo> page = orderService.getMyOrderList(query, userId);
|
return R.ok(page);
|
}
|
|
|
/**
|
* 填写了 如果金额变动要修改订单金额
|
* @param
|
* @return
|
*/
|
@ApiOperation(value = "立即支付前填写信息", tags = {"订单模块"})
|
@PostMapping("/lastPayOrderData")
|
public R<?> lastPayOrderData(@RequestBody @Valid AddBuyerCompanyInfoDto dto) {
|
LoginUser loginUser = tokenService.getLoginUser();
|
Long userId = loginUser.getUserId();
|
TbOrder tbOrder = orderService.getById(dto.getOrderId());
|
|
if (dto.getNeedRename() == 1) {
|
if (StringUtils.isEmpty(dto.getBackupsName())) {
|
return R.fail("请填写备选名称");
|
}
|
}
|
|
if (!tbOrder.getUserId().equals(userId.toString())) {
|
return R.fail("非法操作");
|
}
|
if (tbOrder.getStatus() != 3) {
|
return R.fail("订单状态错误");
|
}
|
TbCompany company = companyService.getById(tbOrder.getCompanyId());
|
// 判断是否在支付前下架了 或者删除了
|
if (company == null || company.getStatus() == 2 || company.getIsDelete() == 1) {
|
return R.fail("该公司已下架或者删除");
|
}
|
long count = buyerCompanyInfoService.count(new LambdaQueryWrapper<TbBuyerCompanyInfo>().eq(TbBuyerCompanyInfo::getOrderId, dto.getOrderId()));
|
if (count > 0) {
|
return R.fail("请勿重复填写");
|
}
|
orderService.lastPayOrderData(tbOrder, dto, userId, company);
|
return R.ok();
|
}
|
|
|
@ApiOperation(value = "立即支付", tags = {"订单模块"})
|
@PostMapping("/payOrder")
|
public R<WxPayMpOrderResult> payOrder(String orderId) {
|
if (StringUtils.isEmpty(orderId)) {
|
R.fail("订单id不能为空");
|
}
|
LoginUser loginUser = tokenService.getLoginUser();
|
Long userId = loginUser.getUserId();
|
TbOrder tbOrder = orderService.getById(orderId);
|
if (!tbOrder.getUserId().equals(userId.toString())) {
|
return R.fail("非法操作");
|
}
|
|
TbUser user = userService.getById(userId);
|
if(StringUtils.isEmpty(user.getOpenId())){
|
return R.fail(602,"需要授权微信小程序");
|
}
|
|
if (tbOrder.getStatus() != 3) {
|
return R.fail("订单状态错误");
|
}
|
TbCompany company = companyService.getById(tbOrder.getCompanyId());
|
// 判断是否在支付前下架了 或者删除了
|
if (company == null || company.getStatus() == 2 || company.getIsDelete() == 1) {
|
return R.fail("该公司已下架或者删除");
|
}
|
long count = buyerCompanyInfoService.count(new LambdaQueryWrapper<TbBuyerCompanyInfo>().eq(TbBuyerCompanyInfo::getOrderId, orderId));
|
if (count == 0) {
|
return R.fail("请先填写信息");
|
}
|
WxPayMpOrderResult result = orderService.payOrder(tbOrder, userId);
|
return R.ok(result);
|
}
|
|
|
@ApiOperation(value = "下单预定", tags = {"订单模块"})
|
@PostMapping("/placeOrder")
|
public synchronized R<?> placeOrder(String companyId) {
|
if (StringUtils.isEmpty(companyId)) {
|
R.fail("id不能为空");
|
}
|
LoginUser loginUser = tokenService.getLoginUser();
|
Long userId = loginUser.getUserId();
|
// 查看现在是否可以单 判断这个公司是否上架 是否已经产生的了订单
|
TbCompany company = companyService.getById(companyId);
|
if (company == null) {
|
return R.fail("公司不存在");
|
}
|
if (company.getUserId().equals(userId.toString())) {
|
return R.fail("不能预定自己发布的公司");
|
}
|
|
if (company.getStatus() == 2) {
|
return R.fail("公司未上架");
|
}
|
if (company.getStatus() == 3) {
|
return R.fail("公司已售卖");
|
}
|
if (company.getStatus() == 4) {
|
return R.fail("公司已被预定");
|
}
|
// long count = orderService.count(new LambdaQueryWrapper<TbOrder>().eq(TbOrder::getCompanyId, companyId).ne(TbOrder::getStatus, -1));
|
if (company.getStatus() == 4) {
|
return R.fail("改公司已被预定");
|
}
|
orderService.placeOrder(companyId, company, userId);
|
return R.ok();
|
}
|
|
|
@ApiOperation(value = "买家完成订单", tags = {"订单模块"})
|
@PostMapping("/buyerSuccessOrder")
|
public synchronized R<?> buyerSuccessOrder(String orderId) {
|
if (StringUtils.isEmpty(orderId)) {
|
R.fail("订单id不能为空");
|
}
|
LoginUser loginUser = tokenService.getLoginUser();
|
Long userId = loginUser.getUserId();
|
TbOrder order = orderService.getById(orderId);
|
if (order == null) {
|
return R.fail("订单不存在");
|
}
|
TbCompany company = companyService.getById(order.getCompanyId());
|
if (!order.getUserId().equals(userId.toString())) {
|
return R.fail("非法操作");
|
}
|
if (order.getStatus() != 5) {
|
return R.fail("该订单状态不能完成");
|
}
|
// 订单完成 商品已售卖
|
order.setStatus(6);
|
order.updateById();
|
order.setFinishTime( new Date());
|
company.setStatus(3);
|
|
// 分佣
|
orderService.commission(order, company.getUserId());
|
|
// 卖家账户明细记录更新
|
TbAccountDetail one = accountDetailService.getOne(new LambdaQueryWrapper<TbAccountDetail>().eq(TbAccountDetail::getOrderId, orderId).eq(TbAccountDetail::getCategory, 2));
|
if (one != null) {
|
one.setStatus(2);
|
one.updateById();
|
}
|
|
company.updateById();
|
return R.ok();
|
|
}
|
|
|
@ApiOperation(value = "买家回复进度", tags = {"订单模块"})
|
@PostMapping("/buyerAddSchedule")
|
public synchronized R<?> buyerAddSchedule(@RequestBody @Valid AddScheduleDto dto) {
|
LoginUser loginUser = tokenService.getLoginUser();
|
Long userId = loginUser.getUserId();
|
TbOrder order = orderService.getById(dto.getOrderId());
|
if (order == null) {
|
return R.fail("订单不存在");
|
}
|
if (!order.getUserId().equals(userId.toString())) {
|
return R.fail("非法操作");
|
}
|
if (order.getStatus() != 4) {
|
return R.fail("该订单状态不能回复");
|
}
|
scheduleService.buyerAddSchedule(dto, userId);
|
String userId1 = companyService.getById(order.getCompanyId()).getUserId();
|
|
messageService.addMessage("您的订单有新的回复", userId1, order.getId());
|
return R.ok();
|
|
}
|
|
|
@ApiOperation(value = "买家取消订单", tags = {"订单模块"})
|
@PostMapping("/buyerCancelOrder")
|
public synchronized R<?> buyerCancelOrder(String orderId) {
|
if (StringUtils.isEmpty(orderId)) {
|
R.fail("订单id不能为空");
|
}
|
LoginUser loginUser = tokenService.getLoginUser();
|
Long userId = loginUser.getUserId();
|
TbOrder order = orderService.getById(orderId);
|
if (order == null) {
|
return R.fail("订单不存在");
|
}
|
if (!order.getUserId().equals(userId.toString())) {
|
return R.fail("非法操作");
|
}
|
if (order.getStatus() != 3) {
|
return R.fail("该订单状态不能取消");
|
}
|
TbCompany company = companyService.getById(order.getCompanyId());
|
company.setStatus(1);
|
company.updateById();
|
order.setStatus(-1);
|
order.updateById();
|
|
messageService.addMessage("您发布的订单买家已取消", company.getUserId(), order.getId());
|
return R.ok();
|
|
}
|
|
|
@ApiOperation(value = "编辑办理进度", tags = {"发布模块"})
|
@PostMapping("/updateSchedule")
|
public R<?> updateSchedule(@RequestBody @Valid EditScheduleDto dto) {
|
LoginUser loginUser = tokenService.getLoginUser();
|
Long userId = loginUser.getUserId();
|
TbSchedule schedule = scheduleService.getById(dto.getScheduleId());
|
if (schedule == null) {
|
return R.fail("进度不存在");
|
}
|
if (!schedule.getUserId().equals(userId.toString())) {
|
return R.fail("非法操作");
|
}
|
schedule.setText(dto.getText());
|
schedule.setImg(dto.getImg());
|
schedule.updateById();
|
return R.ok();
|
}
|
|
|
@ApiOperation(value = "删除办理进度", tags = {"发布模块"})
|
@DeleteMapping("/delSchedule/{scheduleId}")
|
public R<?> delSchedule(@PathVariable("scheduleId") String scheduleId) {
|
LoginUser loginUser = tokenService.getLoginUser();
|
Long userId = loginUser.getUserId();
|
TbSchedule schedule = scheduleService.getById(scheduleId);
|
if (schedule == null) {
|
return R.fail("进度不存在");
|
}
|
if (!schedule.getUserId().equals(userId.toString())) {
|
return R.fail("非法操作");
|
}
|
scheduleService.removeById(scheduleId);
|
return R.ok();
|
}
|
|
|
/**
|
* 微信小程序支付成功回调函数
|
*/
|
@PostMapping(value = "/WX/zxsCallback")
|
public String wxNotify(@RequestBody String xmlData) {
|
try {
|
System.out.println("微信支付回调!!!!!!!!!!");
|
return orderService.weAppletChatNotice(xmlData);
|
} catch (WxPayException e) {
|
throw new RuntimeException(e);
|
}
|
}
|
|
|
}
|