package com.ruoyi.web.controller.system;
|
|
|
import com.alibaba.fastjson.JSONObject;
|
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
|
import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper;
|
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.io.UnsupportedEncodingException;
|
import java.math.BigDecimal;
|
import java.net.MalformedURLException;
|
|
@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;
|
|
|
|
|
@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()!=1 || 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("非法操作");
|
}
|
if(tbOrder.getStatus()!=3){
|
return R.fail("订单状态错误");
|
}
|
TbCompany company = companyService.getById(tbOrder.getCompanyId());
|
// 判断是否在支付前下架了 或者删除了
|
if(company==null || company.getStatus()!=1 || 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.getStatus()!=1){
|
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();
|
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);
|
}
|
}
|
|
|
|
}
|