From 49d8bc411cb62a50c85dee37252d75928e7cdb27 Mon Sep 17 00:00:00 2001
From: huliguo <2023611923@qq.com>
Date: 星期二, 03 六月 2025 18:10:21 +0800
Subject: [PATCH] 订单管理

---
 ruoyi-system/src/main/java/com/ruoyi/system/pojo/vo/TaxVO.java                   |    9 
 ruoyi-system/src/main/resources/mapper/system/OrderMapper.xml                    |  168 ++++
 ruoyi-system/src/main/resources/mapper/system/BuyerCompanyInfoMapper.xml         |    6 
 ruoyi-system/src/main/resources/mapper/system/ShareholderMapper.xml              |    6 
 ruoyi-common/src/main/java/com/ruoyi/common/utils/wx/RefundCallbackResult.java   |   59 +
 ruoyi-system/src/main/java/com/ruoyi/system/service/OrderService.java            |   37 
 ruoyi-system/src/main/resources/mapper/system/OpingBanklMapper.xml               |    6 
 ruoyi-common/src/main/java/com/ruoyi/common/utils/wx/UniPayResult.java           |   73 +
 ruoyi-system/src/main/resources/mapper/system/CompanyMapper.xml                  |    2 
 ruoyi-system/src/main/java/com/ruoyi/system/mapper/ShareholderMapper.java        |   10 
 ruoyi-system/src/main/java/com/ruoyi/system/domain/BuyerCompanyInfo.java         |   99 ++
 ruoyi-system/src/main/java/com/ruoyi/system/mapper/OpeningBankMapper.java        |   11 
 ruoyi-system/src/main/java/com/ruoyi/system/domain/Permit.java                   |   43 +
 ruoyi-system/src/main/java/com/ruoyi/system/pojo/vo/ErrorVO.java                 |   10 
 ruoyi-admin/src/main/java/com/ruoyi/web/controller/system/AppUserController.java |    2 
 ruoyi-system/src/main/java/com/ruoyi/system/domain/Company.java                  |   21 
 ruoyi-system/src/main/java/com/ruoyi/system/mapper/ScheduleMapper.java           |   11 
 ruoyi-common/src/main/java/com/ruoyi/common/utils/wx/PaymentUtil.java            |  286 +++++++
 ruoyi-system/src/main/java/com/ruoyi/system/pojo/vo/OrderPageVO.java             |   52 +
 ruoyi-common/src/main/java/com/ruoyi/common/utils/wx/MD5AndKL.java               |  112 ++
 ruoyi-system/src/main/java/com/ruoyi/system/pojo/vo/ChangeVO.java                |    9 
 ruoyi-system/src/main/java/com/ruoyi/system/pojo/vo/PermitVO.java                |   19 
 ruoyi-system/src/main/java/com/ruoyi/system/service/impl/AppUserServiceImpl.java |    2 
 ruoyi-system/src/main/resources/mapper/system/PermitMapper.xml                   |    6 
 ruoyi-system/src/main/java/com/ruoyi/system/domain/Shareholder.java              |   43 +
 ruoyi-system/src/main/java/com/ruoyi/system/pojo/vo/OpeningBankVO.java           |   22 
 ruoyi-common/src/main/java/com/ruoyi/common/utils/wx/QueryOrderResult.java       |   83 ++
 ruoyi-system/src/main/java/com/ruoyi/system/domain/Schedule.java                 |   51 +
 ruoyi-system/src/main/java/com/ruoyi/system/service/impl/OrderServiceImpl.java   |  297 +++++++
 ruoyi-system/src/main/java/com/ruoyi/system/pojo/vo/BusinessVO.java              |   49 +
 ruoyi-system/src/main/java/com/ruoyi/system/pojo/vo/OrderDetailVO.java           |  212 +++++
 ruoyi-system/src/main/java/com/ruoyi/system/pojo/vo/InvoiceVO.java               |    9 
 ruoyi-system/src/main/resources/mapper/system/ScheduleMapper.xml                 |    6 
 ruoyi-system/src/main/java/com/ruoyi/system/pojo/dto/OrderPageDTO.java           |   64 +
 ruoyi-common/src/main/java/com/ruoyi/common/utils/wx/CloseOrderResult.java       |   41 +
 ruoyi-system/src/main/java/com/ruoyi/system/domain/Order.java                    |   10 
 ruoyi-system/src/main/java/com/ruoyi/system/mapper/OrderMapper.java              |    8 
 ruoyi-common/src/main/java/com/ruoyi/common/utils/wx/FrpCodeEnum.java            |   52 +
 ruoyi-common/src/main/java/com/ruoyi/common/utils/wx/RefundResult.java           |   55 +
 ruoyi-framework/src/main/java/com/ruoyi/framework/config/SecurityConfig.java     |    2 
 ruoyi-system/src/main/java/com/ruoyi/system/mapper/PermitMapper.java             |   10 
 ruoyi-common/src/main/java/com/ruoyi/common/utils/wx/QueryRefundResult.java      |   58 +
 ruoyi-admin/src/main/java/com/ruoyi/web/controller/system/OrderController.java   |  154 +++
 ruoyi-system/src/main/java/com/ruoyi/system/mapper/BuyerCompanyInfoMapper.java   |   10 
 44 files changed, 2,290 insertions(+), 5 deletions(-)

diff --git a/ruoyi-admin/src/main/java/com/ruoyi/web/controller/system/AppUserController.java b/ruoyi-admin/src/main/java/com/ruoyi/web/controller/system/AppUserController.java
index 5f186fc..40937e7 100644
--- a/ruoyi-admin/src/main/java/com/ruoyi/web/controller/system/AppUserController.java
+++ b/ruoyi-admin/src/main/java/com/ruoyi/web/controller/system/AppUserController.java
@@ -21,7 +21,7 @@
 @Slf4j
 @RestController
 @RequestMapping("/system/appUser")
-@Api( tags = "后台-系统设置-用户管理")
+@Api( tags = "后台-用户管理")
 public class AppUserController {
 
     @Resource
diff --git a/ruoyi-admin/src/main/java/com/ruoyi/web/controller/system/OrderController.java b/ruoyi-admin/src/main/java/com/ruoyi/web/controller/system/OrderController.java
new file mode 100644
index 0000000..2fc1507
--- /dev/null
+++ b/ruoyi-admin/src/main/java/com/ruoyi/web/controller/system/OrderController.java
@@ -0,0 +1,154 @@
+package com.ruoyi.web.controller.system;
+
+import com.baomidou.mybatisplus.core.metadata.IPage;
+import com.ruoyi.common.core.domain.R;
+import com.ruoyi.common.utils.wx.RefundCallbackResult;
+import com.ruoyi.system.pojo.dto.AppUserPageDTO;
+import com.ruoyi.system.pojo.dto.OrderPageDTO;
+import com.ruoyi.system.pojo.vo.*;
+import com.ruoyi.system.service.OrderService;
+import io.swagger.annotations.Api;
+import io.swagger.annotations.ApiOperation;
+import lombok.extern.slf4j.Slf4j;
+import org.springframework.security.access.prepost.PreAuthorize;
+import org.springframework.web.bind.annotation.*;
+
+import javax.annotation.Resource;
+import javax.servlet.http.HttpServletResponse;
+import java.io.IOException;
+import java.io.PrintWriter;
+
+@Slf4j
+@RestController
+@RequestMapping("/system/order")
+@Api( tags = "后台-订单管理")
+public class OrderController {
+    @Resource
+    private OrderService orderService;
+
+    /**
+     * 分页
+     */
+    @PostMapping("/getOrderPage")
+    @ApiOperation(value = "订单分页")
+    @PreAuthorize("@ss.hasPermi('order:manage')")
+    public R<IPage<OrderPageVO>> getOrderPage(@RequestBody OrderPageDTO dto) {
+        return R.ok(orderService.getOrderPage(dto));
+    }
+    /**
+     * 查看详情
+     */
+    @GetMapping("/detail/{id}")
+    @ApiOperation(value = "查看详情-基础信息")
+    @PreAuthorize("@ss.hasPermi('order:manage')")
+    public R<OrderDetailVO> detail(@PathVariable("id") String id) {
+        return R.ok(orderService.detail(id));
+    }
+
+    /**
+     * 企业工商信息
+     */
+    @GetMapping("/business/{id}")
+    @ApiOperation(value = "查看详情-企业工商信息")
+    @PreAuthorize("@ss.hasPermi('order:manage')")
+    public R<BusinessVO> business(@PathVariable("id") String id) {
+        return R.ok(orderService.business(id));
+    }
+
+
+    /**
+     * todo redis 企业异常信息
+     */
+    @GetMapping("/error/{id}")
+    @ApiOperation(value = "查看详情-企业异常信息")
+    @PreAuthorize("@ss.hasPermi('order:manage')")
+    public R<ErrorVO> error(@PathVariable("id") String id) {
+        return R.ok(orderService.error(id));
+    }
+    /**
+     * todo redis 企业变更信息
+     */
+    @GetMapping("/change/{id}")
+    @ApiOperation(value = "查看详情-企业变更信息")
+    @PreAuthorize("@ss.hasPermi('order:manage')")
+    public R<ChangeVO> change(@PathVariable("id") String id) {
+        return R.ok(orderService.change(id));
+    }
+    /**
+     * todo redis 企业纳税信息
+     */
+    @GetMapping("/tax/{id}")
+    @ApiOperation(value = "查看详情-企业纳税信息")
+    @PreAuthorize("@ss.hasPermi('order:manage')")
+    public R<TaxVO> tax(@PathVariable("id") String id) {
+        return R.ok(orderService.tax(id));
+    }
+
+    /**
+     * todo redis 企业发票信息
+     */
+    @GetMapping("/invoice/{id}")
+    @ApiOperation(value = "查看详情-企业纳税信息")
+    @PreAuthorize("@ss.hasPermi('order:manage')")
+    public R<InvoiceVO> invoice(@PathVariable("id") String id) {
+        return R.ok(orderService.invoice(id));
+    }
+    /**
+     *  删除
+     */
+    @DeleteMapping("/delete/{id}")
+    @ApiOperation(value = "删除")
+    @PreAuthorize("@ss.hasPermi('order:manage')")
+    public R delete(@PathVariable("id") String id) {
+        orderService.delete(id);
+        return R.ok();
+    }
+
+
+    /**
+     * 上、下架
+     */
+    @PutMapping("/shelves/{id}")
+    @ApiOperation(value = "上、下架")
+    @PreAuthorize("@ss.hasPermi('order:manage')")
+    public R shelves(@PathVariable("id") String id) {
+        orderService.shelves(id);
+        return R.ok();
+    }
+
+    /**
+     * 取消交易
+     */
+    @PutMapping("/cancel/{id}")
+    @ApiOperation(value = "取消交易")
+    @PreAuthorize("@ss.hasPermi('order:manage')")
+    public R cancel(@PathVariable("id") String id) {
+        orderService.cancel(id);
+        return R.ok();
+    }
+
+    /**
+     * 订单取消支付回退
+     *
+     * @param refundCallbackResult
+     * @param response
+     * @return
+     */
+    @ResponseBody
+    @GetMapping("/refundPayMoneyCallback")
+    public void refundPayMoneyCallback(RefundCallbackResult refundCallbackResult, HttpServletResponse response) {
+        R callback = orderService.refundPayMoneyCallback(refundCallbackResult);
+        if (callback.getCode() == 200) {
+            response.setStatus(200);
+            PrintWriter out = null;
+            try {
+                out = response.getWriter();
+            } catch (IOException e) {
+                throw new RuntimeException(e);
+            }
+            out.println("success");
+            out.flush();
+            out.close();
+        }
+    }
+}
diff --git a/ruoyi-common/src/main/java/com/ruoyi/common/utils/wx/CloseOrderResult.java b/ruoyi-common/src/main/java/com/ruoyi/common/utils/wx/CloseOrderResult.java
new file mode 100644
index 0000000..1d9b0c6
--- /dev/null
+++ b/ruoyi-common/src/main/java/com/ruoyi/common/utils/wx/CloseOrderResult.java
@@ -0,0 +1,41 @@
+package com.ruoyi.common.utils.wx;
+
+import lombok.Data;
+
+@Data
+public class CloseOrderResult {
+	/**
+	 * 商户编号
+	 */
+	private String r1_MerchantNo;
+	/**
+	 * 业务结果 100:成功,101:失败
+	 */
+	private String ra_Status;
+	/**
+	 * 响应码
+	 * 0 系统连接超时
+	 * 4 服务不可用
+	 * 100 关单成功
+	 * 101 失败,详见响应码描述
+	 * 10080000 系统异常
+	 * 10080002 验证签名失败
+	 * 10080003 订单号不正确
+	 * 10080042 交易类型不合法
+	 * 10083001 订单正在处理中
+	 * 10083002 该订单请求多次交易
+	 * 10083003 订单已关闭,无需关单操作
+	 * 10083003 交易成功,无需关单操作
+	 * 10083004 通道系统异常,请用相同参数重新请求
+	 * 10083005 通道其他异常信息
+	 */
+	private String rb_Code;
+	/**
+	 * 响应码描述
+	 */
+	private String rc_CodeMsg;
+	/**
+	 * 签名数据
+	 */
+	private String hmac;
+}
diff --git a/ruoyi-common/src/main/java/com/ruoyi/common/utils/wx/FrpCodeEnum.java b/ruoyi-common/src/main/java/com/ruoyi/common/utils/wx/FrpCodeEnum.java
new file mode 100644
index 0000000..63d9321
--- /dev/null
+++ b/ruoyi-common/src/main/java/com/ruoyi/common/utils/wx/FrpCodeEnum.java
@@ -0,0 +1,52 @@
+package com.ruoyi.common.utils.wx;
+
+public enum FrpCodeEnum {
+	ALIPAY_NATIVE("支付宝扫码(主扫)", "ALIPAY_NATIVE"),
+	ALIPAY_CARD("支付宝刷卡(被扫)", "ALIPAY_CARD"),
+	ALIPAY_H5("支付宝 H5", "ALIPAY_H5"),
+	ALIPAY_FWC("支付宝服务窗", "ALIPAY_FWC"),
+	ALIPAY_SYT("支付宝收银台", "ALIPAY_SYT"),
+	WEIXIN_NATIVE("微信扫码(主扫)", "WEIXIN_NATIVE"),
+	WEIXIN_CARD("微信刷卡(被扫)", "WEIXIN_CARD"),
+	WEIXIN_APP3("微信 APP+支付", "WEIXIN_APP3"),
+	WEIXIN_H5_PLUS("微信 H5 支付", "WEIXIN_H5_PLUS"),
+	WEIXIN_GZH("微信公众号支付", "WEIXIN_GZH"),
+	WEIXIN_XCX("微信小程序支付", "WEIXIN_XCX"),
+	QQ_NATIVE("QQ 扫码(主扫)", "QQ_NATIVE"),
+	QQ_CARD("QQ 刷卡(被扫)", "QQ_CARD"),
+	QQ_APP("QQ APP 支付", "QQ_APP"),
+	QQ_H5("QQH5 支付", "QQ_H5"),
+	QQ_GZH("QQ 公众号支付", "QQ_GZH"),
+	UNIONPAY_NATIVE("银联扫码(主扫)", "UNIONPAY_NATIVE"),
+	UNIONPAY_CARD("银联刷卡(被扫)", "UNIONPAY_CARD"),
+	UNIONPAY_APP("银联 APP 支付", "UNIONPAY_APP"),
+	UNIONPAY_H5("银联 H5", "UNIONPAY_H5"),
+	UNIONPAY_SYT("银联统一收银台", "UNIONPAY_SYT"),
+	UNIONPAY_WXMP("银联云微小程序(无感支付)", "UNIONPAY_WXMP")
+	;
+	
+	private String name;
+	
+	private String code;
+	
+	FrpCodeEnum(String name, String code) {
+		this.name = name;
+		this.code = code;
+	}
+	
+	public String getName() {
+		return name;
+	}
+	
+	public void setName(String name) {
+		this.name = name;
+	}
+	
+	public String getCode() {
+		return code;
+	}
+	
+	public void setCode(String code) {
+		this.code = code;
+	}
+}
diff --git a/ruoyi-common/src/main/java/com/ruoyi/common/utils/wx/MD5AndKL.java b/ruoyi-common/src/main/java/com/ruoyi/common/utils/wx/MD5AndKL.java
new file mode 100644
index 0000000..dc4eee4
--- /dev/null
+++ b/ruoyi-common/src/main/java/com/ruoyi/common/utils/wx/MD5AndKL.java
@@ -0,0 +1,112 @@
+package com.ruoyi.common.utils.wx;
+
+import java.security.MessageDigest;
+
+public class MD5AndKL {
+	
+	/**
+	 * MD5加码。32位
+	 * 
+	 * @param inStr
+	 * @return
+	 */
+	public static String MD5(String inStr) {
+		MessageDigest md5 = null;
+		try {
+			md5 = MessageDigest.getInstance("MD5");
+		} catch (Exception e) {
+			throw new RuntimeException(e.toString());
+		}
+		byte[] md5Bytes = md5.digest(inStr.getBytes());
+		StringBuffer hexValue = new StringBuffer();
+		for (int i = 0; i < md5Bytes.length; i++) {
+			int val = ((int) md5Bytes[i]) & 0xff;
+			if (val < 16) {
+				hexValue.append("0");
+			}
+			hexValue.append(Integer.toHexString(val));
+		}
+		return hexValue.toString();
+	}
+
+	/**
+	 * 可逆的加密算法
+	 * 
+	 * @param inStr
+	 * @return
+	 */
+	public static String KL(String inStr) {
+		char[] a = inStr.toCharArray();
+		for (int i = 0; i < a.length; i++) {
+			a[i] = (char) (a[i] ^ 't');
+		}
+		String s = new String(a);
+		return s;
+	}
+
+	/**
+	 * 加密后解密
+	 * 
+	 * @param inStr
+	 * @return
+	 */
+	public static String JM(String inStr) {
+		char[] a = inStr.toCharArray();
+		for (int i = 0; i < a.length; i++) {
+			a[i] = (char) (a[i] ^ 't');
+		}
+		String k = new String(a);
+		return k;
+	}
+
+
+
+	private static String byteArrayToHexString(byte b[]) {
+		StringBuffer resultSb = new StringBuffer();
+		for (int i = 0; i < b.length; i++)
+			resultSb.append(byteToHexString(b[i]));
+
+		return resultSb.toString();
+	}
+
+	private static String byteToHexString(byte b) {
+		int n = b;
+		if (n < 0)
+			n += 256;
+		int d1 = n / 16;
+		int d2 = n % 16;
+		return hexDigits[d1] + hexDigits[d2];
+	}
+
+	public static String MD5Encode(String origin, String charsetname) {
+		String resultString = null;
+		try {
+			resultString = new String(origin);
+			MessageDigest md = MessageDigest.getInstance("MD5");
+			if (charsetname == null || "".equals(charsetname)){
+				resultString = byteArrayToHexString(md.digest(resultString.getBytes()));
+			}else{
+				resultString = byteArrayToHexString(md.digest(resultString.getBytes(charsetname)));
+			}
+		} catch (Exception exception) {
+			exception.printStackTrace();
+		}
+		return resultString;
+	}
+
+	private static final String hexDigits[] = { "0", "1", "2", "3", "4", "5",
+			"6", "7", "8", "9", "a", "b", "c", "d", "e", "f" };
+
+	public static void main(String args[]) {
+		 
+		System.out.println("MD5后再加密:" + KL(MD5("123456")));
+		System.out.println(MD5("123456"));
+		// System.out.println("加密:" + KL(MD5("123456")));
+		// s = KL(s);
+		// System.out.println("解密:" + KL("81dc9bdb52d04dc20036dbd8313ed055"));
+		// System.out.println("解密:" + JM(KL(s)));
+		// System.out.println("解密为MD5后的:" + KL(KL(MD5(s))));
+		// System.out.println(JM("5d62957bb57d3e49dcf48a0df064be4c"));
+		// System.out.println(MD5AndKL.KL(MD5AndKL.MD5("admin"+"87654321")));
+	}
+}
diff --git a/ruoyi-common/src/main/java/com/ruoyi/common/utils/wx/PaymentUtil.java b/ruoyi-common/src/main/java/com/ruoyi/common/utils/wx/PaymentUtil.java
new file mode 100644
index 0000000..e27493e
--- /dev/null
+++ b/ruoyi-common/src/main/java/com/ruoyi/common/utils/wx/PaymentUtil.java
@@ -0,0 +1,286 @@
+package com.ruoyi.common.utils.wx;
+
+import cn.hutool.http.Header;
+import cn.hutool.http.HttpRequest;
+import cn.hutool.http.HttpResponse;
+import cn.hutool.http.HttpUtil;
+import com.alibaba.fastjson2.JSON;
+import com.alibaba.fastjson2.JSONObject;
+import com.ruoyi.common.utils.StringUtils;
+import lombok.extern.slf4j.Slf4j;
+
+import java.util.*;
+
+@Slf4j
+public class PaymentUtil {
+	
+	//微信公众号、微信小程序、微信 APP+/H5、云微小程序支付
+	private static final String appId = "wxdeed472c98e42a54";
+	/**
+	 * 商户密钥
+	 */
+	private static final String key = "925899fcc374430f9e4b4ba3db05b448";
+	/**
+	 * 商户号
+	 */
+	private static final String merchantNo = "888122600004175";
+	/**
+	 * 平台-报备商户号
+	 */
+	private static final String sysTradeMerchantNo = "777168500885852";
+	/**
+	 * 支付回调地址
+	 */
+	private static final String callbackUrl = "https://www.qijisheng.top";
+	
+	
+	/**
+	 * 支付
+	 * @param orderNo           商户订单号
+	 * @param amount            订单金额
+	 * @param productName       商品名称
+	 * @param productDesc       商品描述
+	 * @param mp                公用回传参数
+	 * @param notifyUrl         服务器异步通知地址
+	 * @param openId            微信 Openid
+	 * @param tradeMerchantNo   报备商户号
+	 * @return
+	 */
+	public static UniPayResult uniPay(String orderNo, Double amount, String productName, String productDesc, String mp, String notifyUrl, String openId, String tradeMerchantNo){
+		String url = "https://trade.joinpay.com/tradeRt/uniPay";
+		HttpRequest post = HttpUtil.createPost(url);
+		post.header(Header.CONTENT_TYPE, "application/x-www-form-urlencoded");
+		JSONObject body = new JSONObject();
+		//版本号
+		body.put("p0_Version", "2.5");
+		//商户编号
+		body.put("p1_MerchantNo", merchantNo);
+		//商户订单号
+		body.put("p2_OrderNo", orderNo);
+		//订单金额
+		body.put("p3_Amount", amount);
+		//交易币种
+		body.put("p4_Cur", "1");
+		//商品名称
+		body.put("p5_ProductName", productName);
+		//商品描述
+		body.put("p6_ProductDesc", productDesc);
+		//公用回传参数
+		body.put("p7_Mp", mp);
+		//服务器异步通知地址
+		body.put("p9_NotifyUrl", callbackUrl + notifyUrl);
+		//交易类型
+		body.put("q1_FrpCode", FrpCodeEnum.WEIXIN_XCX.getCode());
+		//微信 Openid
+		body.put("q5_OpenId", openId);
+		//APPID
+		body.put("q7_AppId", appId);
+		//报备商户号
+		body.put("qa_TradeMerchantNo", StringUtils.isNotEmpty(tradeMerchantNo) ? tradeMerchantNo : sysTradeMerchantNo);
+		String sign = null;
+		try {
+			sign = sign(body);
+		} catch (Exception e) {
+			throw new RuntimeException(e);
+		}
+		body.put("hmac", sign);
+		post.form(body);
+		log.info("支付接口请求参数:" + body);
+		HttpResponse execute = post.execute();
+		log.info("支付接口请求响应:" + execute.body());
+		if(200 != execute.getStatus()){
+			log.error("支付接口异常:" + execute.body());
+			return null;
+		}
+		UniPayResult uniPayResult = JSON.parseObject(execute.body(), UniPayResult.class);
+		return uniPayResult;
+	}
+	
+	
+	/**
+	 * 查询支付订单
+	 * @param orderNo   订单号
+	 * @return
+	 */
+	public static QueryOrderResult queryOrder(String orderNo){
+		String url = "https://trade.joinpay.com/tradeRt/queryOrder";
+		HttpRequest post = HttpUtil.createPost(url);
+		post.header(Header.CONTENT_TYPE, "application/x-www-form-urlencoded");
+		JSONObject body = new JSONObject();
+		//版本号
+		body.put("p0_Version", "2.5");
+		//商户编号
+		body.put("p1_MerchantNo", merchantNo);
+		//商户订单号
+		body.put("p2_OrderNo", orderNo);
+		String sign = null;
+		try {
+			sign = sign(body);
+		} catch (Exception e) {
+			throw new RuntimeException(e);
+		}
+		body.put("hmac", sign);
+		post.form(body);
+		log.info("查询支付接口请求参数:" + body);
+		HttpResponse execute = post.execute();
+		log.info("查询支付接口请求响应:" + execute.body());
+		if(200 != execute.getStatus()){
+			log.error("查询支付接口异常:" + execute.body());
+			return null;
+		}
+		QueryOrderResult uniPayResult = JSON.parseObject(execute.body(), QueryOrderResult.class);
+		return uniPayResult;
+	}
+	
+	
+	/**
+	 * 退款
+	 * @param orderNo           支付订单号
+	 * @param refundOrderNo     退款订单号
+	 * @param refundAmount      退款金额
+	 * @param notifyUrl         异步通知地址
+	 * @return
+	 */
+	public static RefundResult refund(String orderNo, String refundOrderNo, Double refundAmount, String notifyUrl){
+		String url = "https://trade.joinpay.com/tradeRt/refund";
+		HttpRequest post = HttpUtil.createPost(url);
+		post.header(Header.CONTENT_TYPE, "application/x-www-form-urlencoded");
+		JSONObject body = new JSONObject();
+		//版本号
+		body.put("p0_Version", "2.3");
+		//商户编号
+		body.put("p1_MerchantNo", merchantNo);
+		//商户订单号
+		body.put("p2_OrderNo", orderNo);
+		//商户退款订单号
+		body.put("p3_RefundOrderNo", refundOrderNo);
+		//退款金额
+		body.put("p4_RefundAmount", refundAmount);
+		//服务器异步通知地址
+		body.put("p6_NotifyUrl", callbackUrl + notifyUrl);
+		String sign = null;
+		try {
+			sign = sign(body);
+		} catch (Exception e) {
+			throw new RuntimeException(e);
+		}
+		body.put("hmac", sign);
+		post.form(body);
+		log.info("退款接口请求参数:" + body);
+		HttpResponse execute = post.execute();
+		log.info("退款接口请求响应:" + execute.body());
+		if(200 != execute.getStatus()){
+			log.error("退款接口异常:" + execute.body());
+			return null;
+		}
+		RefundResult uniPayResult = JSON.parseObject(execute.body(), RefundResult.class);
+		return uniPayResult;
+	}
+	
+	
+	/**
+	 * 查询退款订单
+	 * @param refundOrderNo 退款订单号
+	 * @return
+	 */
+	public static QueryRefundResult queryRefund(String refundOrderNo){
+		String url = "https://trade.joinpay.com/tradeRt/refund";
+		HttpRequest post = HttpUtil.createPost(url);
+		post.header(Header.CONTENT_TYPE, "application/x-www-form-urlencoded");
+		JSONObject body = new JSONObject();
+		//版本号
+		body.put("p0_Version", "2.3");
+		//商户编号
+		body.put("p1_MerchantNo", merchantNo);
+		//商户退款订单号
+		body.put("p2_RefundOrderNo", refundOrderNo);
+		String sign = null;
+		try {
+			sign = sign(body);
+		} catch (Exception e) {
+			throw new RuntimeException(e);
+		}
+		body.put("hmac", sign);
+		post.form(body);
+		log.info("退款接口请求参数:" + body);
+		HttpResponse execute = post.execute();
+		log.info("退款接口请求响应:" + execute.body());
+		if(200 != execute.getStatus()){
+			log.error("退款接口异常:" + execute.body());
+			return null;
+		}
+		QueryRefundResult uniPayResult = JSON.parseObject(execute.body(), QueryRefundResult.class);
+		return uniPayResult;
+	}
+	
+	
+	/**
+	 * 关闭订单(仅支持微信和支付宝)
+	 * @param orderNo   订单号
+	 * @return
+	 */
+	public static CloseOrderResult closeOrder(String orderNo){
+		String url = "https://www.joinpay.com/trade/closeOrder.action";
+		HttpRequest post = HttpUtil.createPost(url);
+		post.header(Header.CONTENT_TYPE, "application/x-www-form-urlencoded");
+		JSONObject body = new JSONObject();
+		//商户编号
+		body.put("p1_MerchantNo", merchantNo);
+		//商户订单号
+		body.put("p2_OrderNo", orderNo);
+		//交易类型
+		body.put("p3_FrpCode", FrpCodeEnum.WEIXIN_XCX.getCode());
+		String sign = null;
+		try {
+			sign = sign(body);
+		} catch (Exception e) {
+			throw new RuntimeException(e);
+		}
+		body.put("hmac", sign);
+		post.form(body);
+		log.info("关闭订单接口请求参数:" + body);
+		HttpResponse execute = post.execute();
+		log.info("关闭订单接口请求响应:" + execute.body());
+		if(200 != execute.getStatus()){
+			log.error("关闭订单接口异常:" + execute.body());
+			return null;
+		}
+		CloseOrderResult uniPayResult = JSON.parseObject(execute.body(), CloseOrderResult.class);
+		return uniPayResult;
+	}
+	
+	
+	
+	public static String sign(JSONObject body) {
+		Set<Map.Entry<String, Object>> entries = body.entrySet();
+		List<Map.Entry<String, Object>> infoIds = new ArrayList<Map.Entry<String, Object>>(entries);
+		// 对所有传入参数按照字段名的 ASCII 码从小到大排序(字典序)
+		Collections.sort(infoIds, new Comparator<Map.Entry<String, Object>>() {
+			public int compare(Map.Entry<String, Object> o1, Map.Entry<String, Object> o2) {
+				return (o1.getKey()).compareTo(o2.getKey());
+			}
+		});
+		// 构造签名键值对的格式
+		StringBuilder sb = new StringBuilder();
+		for (Map.Entry<String, Object> item : infoIds) {
+			if (item.getKey() != null || item.getKey() != "") {
+				Object val = item.getValue();
+				if (!(val == "" || val == null)) {
+					sb.append(val);
+				}
+			}
+		}
+		sb.append(key);
+		log.info("待签名串:{}", sb.toString());
+		return MD5AndKL.MD5(sb.toString());
+	}
+	
+	
+	public static void main(String[] args) {
+//		UniPayResult uniPayResult = PaymentUtil.uniPay("852963742", 0.01D, "测试商品", "这是用于对接支付测试的商品描述",
+//				"", "/order/shopping-cart/shoppingCartPaymentCallback", "ooOrs64zHLuInkZ_GF0LpIN9_Rxc", "777168500885852");
+//		PaymentUtil.queryOrder("852963742");
+//		PaymentUtil.closeOrder("852963742");
+		
+	}
+}
diff --git a/ruoyi-common/src/main/java/com/ruoyi/common/utils/wx/QueryOrderResult.java b/ruoyi-common/src/main/java/com/ruoyi/common/utils/wx/QueryOrderResult.java
new file mode 100644
index 0000000..5909fae
--- /dev/null
+++ b/ruoyi-common/src/main/java/com/ruoyi/common/utils/wx/QueryOrderResult.java
@@ -0,0 +1,83 @@
+package com.ruoyi.common.utils.wx;
+
+import lombok.Data;
+
+@Data
+public class QueryOrderResult {
+	/**
+	 * 版本号
+	 */
+	private Double r0_Version;
+	/**
+	 * 商户编号
+	 */
+	private String r1_MerchantNo;
+	/**
+	 * 商户订单号
+	 */
+	private String r2_OrderNo;
+	/**
+	 * 支付金额
+	 */
+	private Double r3_Amount;
+	/**
+	 * 商品名称
+	 */
+	private String r4_ProductName;
+	/**
+	 * 交易流水号
+	 */
+	private String r5_TrxNo;
+	/**
+	 * 银行流水号
+	 */
+	private String r6_BankTrxNo;
+	/**
+	 * 订单手续费
+	 */
+	private Double r7_Fee;
+	/**
+	 * 交易类型
+	 */
+	private String r8_FrpCode;
+	/**
+	 * 订单状态 100:成功,101:失败,102:已创建,105:订单已关闭
+	 */
+	private String ra_Status;
+	/**
+	 * 响应码
+	 */
+	private String rb_Code;
+	/**
+	 * 响应码描述
+	 */
+	private String rc_CodeMsg;
+	/**
+	 * 用户标识
+	 */
+	private String rd_OpenId;
+	/**
+	 * 平台优惠金额
+	 */
+	private Double re_DiscountAmount;
+	/**
+	 * 支付时间
+	 */
+	private String rf_PayTime;
+	/**
+	 * 卡类型
+	 */
+	private String rh_cardType;
+	/**
+	 * 银行编码
+	 */
+	private String rj_BankCode;
+	/**
+	 * 签约 ID
+	 */
+	private String rl_ContractId;
+	/**
+	 * 签名数据
+	 */
+	private String hmac;
+}
diff --git a/ruoyi-common/src/main/java/com/ruoyi/common/utils/wx/QueryRefundResult.java b/ruoyi-common/src/main/java/com/ruoyi/common/utils/wx/QueryRefundResult.java
new file mode 100644
index 0000000..a6910ad
--- /dev/null
+++ b/ruoyi-common/src/main/java/com/ruoyi/common/utils/wx/QueryRefundResult.java
@@ -0,0 +1,58 @@
+package com.ruoyi.common.utils.wx;
+
+import lombok.Data;
+
+@Data
+public class QueryRefundResult {
+	/**
+	 * 版本号
+	 */
+	private Double r0_Version;
+	/**
+	 * 商户编号
+	 */
+	private String r1_MerchantNo;
+	/**
+	 * 商户退款订单号
+	 */
+	private String r2_RefundOrderNo;
+	/**
+	 * 退款金额
+	 */
+	private Double r3_RefundAmount;
+	/**
+	 * 退款流水号
+	 */
+	private String r4_RefundTrxNo;
+	/**
+	 * 退款完成时间
+	 */
+	private String r5_RefundCompleteTime;
+	/**
+	 * 退款渠道
+	 */
+	private String r8_RefundWay;
+	/**
+	 * 退款入账账户
+	 */
+	private String r9_ReceiveAccountNo;
+	/**
+	 * 退款状态
+	 * 100:退款成功
+	 * 101:退款失败
+	 * 102:退款处理中
+	 */
+	private String ra_Status;
+	/**
+	 * 响应码
+	 */
+	private String rb_Code;
+	/**
+	 * 响应码描述
+	 */
+	private String rc_CodeMsg;
+	/**
+	 * 签名数据
+	 */
+	private String hmac;
+}
diff --git a/ruoyi-common/src/main/java/com/ruoyi/common/utils/wx/RefundCallbackResult.java b/ruoyi-common/src/main/java/com/ruoyi/common/utils/wx/RefundCallbackResult.java
new file mode 100644
index 0000000..270c7e5
--- /dev/null
+++ b/ruoyi-common/src/main/java/com/ruoyi/common/utils/wx/RefundCallbackResult.java
@@ -0,0 +1,59 @@
+package com.ruoyi.common.utils.wx;
+
+import lombok.Data;
+
+@Data
+public class RefundCallbackResult {
+	/**
+	 * 版本号
+	 */
+	private Double r0_Version;
+	/**
+	 * 商户编号
+	 */
+	private String r1_MerchantNo;
+	/**
+	 * 商户订单号
+	 */
+	private String r2_OrderNo;
+	/**
+	 * 商户退款订单号
+	 */
+	private String r3_RefundOrderNo;
+	/**
+	 * 退款金额
+	 */
+	private Double r4_RefundAmount;
+	/**
+	 * 商户退款流水号
+	 */
+	private String r5_RefundTrxNo;
+	/**
+	 * 退款完成时间
+	 */
+	private String r6_RefundCompleteTime;
+	/**
+	 * 退款渠道
+	 */
+	private String r7_RefundWay;
+	/**
+	 * 退款入账账户
+	 */
+	private String r8_ReceiveAccountNo;
+	/**
+	 * 退款状态 100:成功;101:失败
+	 */
+	private String ra_Status;
+	/**
+	 * 响应码
+	 */
+	private String rb_Code;
+	/**
+	 * 响应码描述
+	 */
+	private String rc_CodeMsg;
+	/**
+	 * 签名数据
+	 */
+	private String hmac;
+}
diff --git a/ruoyi-common/src/main/java/com/ruoyi/common/utils/wx/RefundResult.java b/ruoyi-common/src/main/java/com/ruoyi/common/utils/wx/RefundResult.java
new file mode 100644
index 0000000..e1a4e59
--- /dev/null
+++ b/ruoyi-common/src/main/java/com/ruoyi/common/utils/wx/RefundResult.java
@@ -0,0 +1,55 @@
+package com.ruoyi.common.utils.wx;
+
+import lombok.Data;
+
+@Data
+public class RefundResult {
+	/**
+	 * 版本号
+	 */
+	private Double r0_Version;
+	/**
+	 * 商户编号
+	 */
+	private String r1_MerchantNo;
+	/**
+	 * 商户订单号
+	 */
+	private String r2_OrderNo;
+	/**
+	 * 商户退款订单号
+	 */
+	private String r3_RefundOrderNo;
+	/**
+	 * 退款金额
+	 */
+	private Double r4_RefundAmount;
+	/**
+	 * 商户退款流水号
+	 */
+	private String r5_RefundTrxNo;
+	/**
+	 * 退款申请状态
+	 * 100:成功,
+	 * 101:失败 。
+	 */
+	private String ra_Status;
+	/**
+	 * 响应码
+	 */
+	private String rb_Code;
+	/**
+	 * 响应码描述
+	 */
+	private String rc_CodeMsg;
+	/**
+	 * 营销退款金额
+	 */
+	private Double rd_MarketRefAmount;
+	/**
+	 * 签名数据
+	 */
+	private String hmac;
+	
+	
+}
diff --git a/ruoyi-common/src/main/java/com/ruoyi/common/utils/wx/UniPayResult.java b/ruoyi-common/src/main/java/com/ruoyi/common/utils/wx/UniPayResult.java
new file mode 100644
index 0000000..49fafd4
--- /dev/null
+++ b/ruoyi-common/src/main/java/com/ruoyi/common/utils/wx/UniPayResult.java
@@ -0,0 +1,73 @@
+package com.ruoyi.common.utils.wx;
+
+import lombok.Data;
+
+@Data
+public class UniPayResult {
+	/**
+	 * 版本号
+	 */
+	private Double r0_Version;
+	/**
+	 * 商户编号
+	 */
+	private String r1_MerchantNo;
+	/**
+	 * 商户订单号
+	 */
+	private String r2_OrderNo;
+	/**
+	 * 支付金额
+	 */
+	private Double r3_Amount;
+	/**
+	 * 币种
+	 */
+	private String r4_Cur;
+	/**
+	 * 公用回传参数
+	 */
+	private String r5_Mp;
+	/**
+	 * 交易类型
+	 */
+	private String r6_FrpCode;
+	/**
+	 * 交易流水号
+	 */
+	private String r7_TrxNo;
+	/**
+	 * 银行商户编码
+	 */
+	private String r8_MerchantBankCode;
+	/**
+	 * 响应码,返回 100 时表示成功
+	 */
+	private String ra_Code;
+	/**
+	 * 响应码描述
+	 */
+	private String rb_CodeMsg;
+	/**
+	 * 1.主扫支付返回二维码地址。
+	 * 2.支付宝 H5,mode1/2/3 参考请求参数q9_TransactionModel 说明。
+	 * 3.微信 H5_PLUS,获取支付信息的 openlink,通过手机端浏览器跳转并唤起微信 APP客户端,直接打开对应的小程序进行支付。
+	 * 3.公众号支付:需要商户参考微信的官方文档 JSAPI 支付接口进行处理,详情请见:https://pay.weixin.qq.com/wiki/doc/api/index.html
+	 * 4.微信小程序支付返回支付信息。
+	 * 5.支付宝收银台返回支付宝收银台跳转链接,通过请求该链接跳转至支付宝。
+	 * 6.微信 app3 支付,返回预支付信息,集成微信 SDK 唤起小程序进行支付。
+	 * 7.支付宝服务窗支付返回银联交易号 trade_no,可用以唤起支付宝 APP,调起支付宝APP 收银台。
+	 * 8.银联 app 或银联统一收银台支付,返回预支付信息用此网址的接口调起支付。https://open.unionpay.com/tjweb/acproduct/list?apiservId=450#nav02
+	 * 9.银联云微小程序返回跳转地址,格式:{“cqpMpAppId”:”云闪付小程序 id”,”cqpMpPath”:”云闪付小程序 path”}
+	 * 10.其他类型支付返回支付信息。
+	 */
+	private String rc_Result;
+	/**
+	 * 二维码图片码
+	 */
+	private String rd_Pic;
+	/**
+	 * 签名数据
+	 */
+	private String hmac;
+}
diff --git a/ruoyi-framework/src/main/java/com/ruoyi/framework/config/SecurityConfig.java b/ruoyi-framework/src/main/java/com/ruoyi/framework/config/SecurityConfig.java
index a0ae041..5bdcff1 100644
--- a/ruoyi-framework/src/main/java/com/ruoyi/framework/config/SecurityConfig.java
+++ b/ruoyi-framework/src/main/java/com/ruoyi/framework/config/SecurityConfig.java
@@ -111,7 +111,7 @@
             .authorizeHttpRequests((requests) -> {
                 permitAllUrl.getUrls().forEach(url -> requests.antMatchers(url).permitAll());
                 // 对于登录login 注册register 验证码captchaImage 允许匿名访问
-                requests.antMatchers("/system/login", "/register", "/captchaImage").permitAll()
+                requests.antMatchers("/system/login", "/register", "/captchaImage","/system/order/refundPayMoneyCallback").permitAll()
                     // 静态资源,可匿名访问
                     .antMatchers(HttpMethod.GET, "/", "/*.html", "/**/*.html", "/**/*.css", "/**/*.js", "/profile/**").permitAll()
                     .antMatchers("/swagger-ui.html", "/swagger-resources/**", "/webjars/**", "/*/api-docs", "/druid/**").permitAll()
diff --git a/ruoyi-system/src/main/java/com/ruoyi/system/domain/BuyerCompanyInfo.java b/ruoyi-system/src/main/java/com/ruoyi/system/domain/BuyerCompanyInfo.java
new file mode 100644
index 0000000..8975feb
--- /dev/null
+++ b/ruoyi-system/src/main/java/com/ruoyi/system/domain/BuyerCompanyInfo.java
@@ -0,0 +1,99 @@
+package com.ruoyi.system.domain;
+
+import com.baomidou.mybatisplus.annotation.IdType;
+import com.baomidou.mybatisplus.annotation.TableField;
+import com.baomidou.mybatisplus.annotation.TableId;
+import com.baomidou.mybatisplus.annotation.TableName;
+import com.fasterxml.jackson.annotation.JsonFormat;
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+import java.time.LocalDateTime;
+
+@Data
+@TableName("tb_buyer_company_info")
+@ApiModel(value = "用户支付前填写信息")
+public class BuyerCompanyInfo {
+
+    @TableId(value = "id", type = IdType.ASSIGN_ID)
+    @ApiModelProperty(value = "主键ID")
+    private String id;
+
+    @TableField("order_id")
+    @ApiModelProperty(value = "关联订单ID")
+    private String orderId;
+
+    @TableField("legal_person_img")
+    @ApiModelProperty(value = "法人照片URL")
+    private String legalPersonImg;
+
+    @TableField("need_rename")
+    @ApiModelProperty(value = "是否需要改名(0=不需要,1=需要)")
+    private Integer needRename;
+
+    @TableField("new_name")
+    @ApiModelProperty(value = "新公司名称")
+    private String newName;
+
+    @TableField("backups_name")
+    @ApiModelProperty(value = "备选公司名称")
+    private String backupsName;
+
+    @TableField("backups_name_one")
+    @ApiModelProperty(value = "备选名称1")
+    private String backupsNameOne;
+
+    @TableField("backups_name_two")
+    @ApiModelProperty(value = "备选名称2")
+    private String backupsNameTwo;
+
+    @TableField("registered_capital")
+    @ApiModelProperty(value = "注册资本")
+    private String registeredCapital;
+
+    @TableField("account_type")
+    @ApiModelProperty(value = "账户类型(1=无账户,2=变更,3=新法人注销,4=老法人注销)")
+    private Integer accountType;
+
+    @TableField("address")
+    @ApiModelProperty(value = "公司地址")
+    private String address;
+
+    @TableField("new_district")
+    @ApiModelProperty(value = "是否迁区(0=不需要,1=需要)")
+    private Integer newDistrict;
+
+    @TableField("tenancy_agreement")
+    @ApiModelProperty(value = "租房合同文本/URL")
+    private String tenancyAgreement;
+
+    @TableField("property_ownership_certificate")
+    @ApiModelProperty(value = "房产证文本/URL")
+    private String propertyOwnershipCertificate;
+
+    @TableField("account")
+    @ApiModelProperty(value = "实名认证账户")
+    private String account;
+
+    @TableField("password")
+    @ApiModelProperty(value = "实名认证密码")
+    private String password;
+
+    @TableField("business_scope")
+    @ApiModelProperty(value = "经营范围")
+    private String businessScope;
+
+    @TableField("remark")
+    @ApiModelProperty(value = "备注信息")
+    private String remark;
+
+    @TableField("create_time")
+    @ApiModelProperty(value = "创建时间")
+    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
+    private LocalDateTime createTime;
+
+    @TableField("add_day")
+    @ApiModelProperty(value = "新增天数")
+    private Integer addDay;
+}
\ No newline at end of file
diff --git a/ruoyi-system/src/main/java/com/ruoyi/system/domain/Company.java b/ruoyi-system/src/main/java/com/ruoyi/system/domain/Company.java
index 804277a..a256a72 100644
--- a/ruoyi-system/src/main/java/com/ruoyi/system/domain/Company.java
+++ b/ruoyi-system/src/main/java/com/ruoyi/system/domain/Company.java
@@ -181,6 +181,10 @@
     @ApiModelProperty(value = "备注")
     private String remark;
 
+    @TableField("status")
+    @ApiModelProperty(value = "状态(1上架 2 下架  3已出售  4锁定中)")
+    private Integer status;
+
     @TableField(value = "create_time")
     @ApiModelProperty(value = "创建时间")
     @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
@@ -189,4 +193,21 @@
     @TableField("is_delete")
     @ApiModelProperty(value = "删除标记(0=正常,1=删除)")
     private Integer isDelete;
+
+
+    @TableField("scope")
+    @ApiModelProperty(value = "经营范围", notes = "企业经营的业务范围描述")
+    private String scope;
+
+    @TableField("oper_name")
+    @ApiModelProperty(value = "法人", notes = "企业法定代表人姓名")
+    private String operName;
+
+    @TableField("belong_org")
+    @ApiModelProperty(value = "登记机关", notes = "企业注册的登记管理机构")
+    private String belongOrg;
+
+    @TableField("registration_status")
+    @ApiModelProperty(value = "登记状态", notes = "企业的工商登记状态")
+    private String registrationStatus;
 }
\ No newline at end of file
diff --git a/ruoyi-system/src/main/java/com/ruoyi/system/domain/Order.java b/ruoyi-system/src/main/java/com/ruoyi/system/domain/Order.java
index 7475d90..cb286a8 100644
--- a/ruoyi-system/src/main/java/com/ruoyi/system/domain/Order.java
+++ b/ruoyi-system/src/main/java/com/ruoyi/system/domain/Order.java
@@ -71,4 +71,14 @@
     @TableField(value = "commission_platform")
     @ApiModelProperty(value = "平台分佣金额")
     private BigDecimal commissionPlatform;
+
+    @TableField(value = "finish_time")
+    @ApiModelProperty(value = "完成时间")
+    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
+    private LocalDateTime finishTime;
+
+    @TableField(value = "finish_time")
+    @ApiModelProperty(value = "完成时间")
+    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
+    private LocalDateTime sellerFinishTime;
 }
\ No newline at end of file
diff --git a/ruoyi-system/src/main/java/com/ruoyi/system/domain/Permit.java b/ruoyi-system/src/main/java/com/ruoyi/system/domain/Permit.java
new file mode 100644
index 0000000..d858e5e
--- /dev/null
+++ b/ruoyi-system/src/main/java/com/ruoyi/system/domain/Permit.java
@@ -0,0 +1,43 @@
+package com.ruoyi.system.domain;
+
+import com.baomidou.mybatisplus.annotation.IdType;
+import com.baomidou.mybatisplus.annotation.TableField;
+import com.baomidou.mybatisplus.annotation.TableId;
+import com.baomidou.mybatisplus.annotation.TableName;
+import com.fasterxml.jackson.annotation.JsonFormat;
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+import java.time.LocalDateTime;
+
+@Data
+@TableName("tb_permit")
+@ApiModel(value = "许可证表")
+public class Permit {
+
+    @TableId(value = "id", type = IdType.ASSIGN_ID)
+    @ApiModelProperty(value = "主键ID")
+    private String id;
+
+    @TableField("company_id")
+    @ApiModelProperty(value = "公司ID")
+    private String companyId;
+
+    @TableField("name")
+    @ApiModelProperty(value = "许可证名称")
+    private String name;
+
+    @TableField("level")
+    @ApiModelProperty(value = "许可证等级")
+    private String level;
+
+    @TableField("expire_time")
+    @ApiModelProperty(value = "失效时间(格式示例:2025-12-31)")
+    private String expireTime;
+
+    @TableField(value = "create_time")
+    @ApiModelProperty(value = "创建时间")
+    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
+    private LocalDateTime createTime;
+}
\ No newline at end of file
diff --git a/ruoyi-system/src/main/java/com/ruoyi/system/domain/Schedule.java b/ruoyi-system/src/main/java/com/ruoyi/system/domain/Schedule.java
new file mode 100644
index 0000000..07a21a8
--- /dev/null
+++ b/ruoyi-system/src/main/java/com/ruoyi/system/domain/Schedule.java
@@ -0,0 +1,51 @@
+package com.ruoyi.system.domain;
+
+import com.baomidou.mybatisplus.annotation.IdType;
+import com.baomidou.mybatisplus.annotation.TableField;
+import com.baomidou.mybatisplus.annotation.TableId;
+import com.baomidou.mybatisplus.annotation.TableName;
+import com.fasterxml.jackson.annotation.JsonFormat;
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+import java.time.LocalDateTime;
+
+@Data
+@TableName("tb_schedule")
+@ApiModel(value = "Schedule对象", description = "进度跟踪表")
+public class Schedule {
+
+    @TableId(value = "id", type = IdType.ASSIGN_ID)
+    @ApiModelProperty(value = "主键ID")
+    private String id;
+
+    @TableField("order_id")
+    @ApiModelProperty(value = "关联订单ID")
+    private String orderId;
+
+    @TableField("text")
+    @ApiModelProperty(value = "进度内容详情")
+    private String text;
+
+    @TableField("img")
+    @ApiModelProperty(value = "相关图片URL(多个用逗号分隔)")
+    private String img;
+
+    @TableField(value = "create_time")
+    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
+    @ApiModelProperty(value = "创建时间")
+    private LocalDateTime createTime;
+
+    @TableField("parent_id")
+    @ApiModelProperty(value = "父级进度ID(卖家回复时关联)",hidden = true)
+    private String parentId;
+
+    @TableField("user_id")
+    @ApiModelProperty(value = "操作人ID")
+    private String userId;
+
+    @ApiModelProperty(value = "买家回复")
+    @TableField(exist = false)
+    private Schedule schedule;
+}
\ No newline at end of file
diff --git a/ruoyi-system/src/main/java/com/ruoyi/system/domain/Shareholder.java b/ruoyi-system/src/main/java/com/ruoyi/system/domain/Shareholder.java
new file mode 100644
index 0000000..a8ad4bc
--- /dev/null
+++ b/ruoyi-system/src/main/java/com/ruoyi/system/domain/Shareholder.java
@@ -0,0 +1,43 @@
+package com.ruoyi.system.domain;
+
+import com.baomidou.mybatisplus.annotation.IdType;
+import com.baomidou.mybatisplus.annotation.TableField;
+import com.baomidou.mybatisplus.annotation.TableId;
+import com.baomidou.mybatisplus.annotation.TableName;
+import com.fasterxml.jackson.annotation.JsonFormat;
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+import java.time.LocalDateTime;
+
+@Data
+@TableName("tb_shareholder")
+@ApiModel(value = "Shareholder对象", description = "股东信息表")
+public class Shareholder {
+
+    @TableId(value = "id", type = IdType.ASSIGN_ID)
+    @ApiModelProperty(value = "主键ID")
+    private String id;
+
+    @TableField("order_id")
+    @ApiModelProperty(value = "关联订单ID")
+    private String orderId;
+
+    @TableField("name")
+    @ApiModelProperty(value = "股东姓名")
+    private String name;
+
+    @TableField("rate")
+    @ApiModelProperty(value = "持股比例(示例:30%)")
+    private String rate;
+
+    @TableField("img")
+    @ApiModelProperty(value = "身份证图片URL/Base64")
+    private String img;
+
+    @TableField(value = "create_time")
+    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
+    @ApiModelProperty(value = "创建时间")
+    private LocalDateTime createTime;
+}
\ No newline at end of file
diff --git a/ruoyi-system/src/main/java/com/ruoyi/system/mapper/BuyerCompanyInfoMapper.java b/ruoyi-system/src/main/java/com/ruoyi/system/mapper/BuyerCompanyInfoMapper.java
new file mode 100644
index 0000000..4db63f5
--- /dev/null
+++ b/ruoyi-system/src/main/java/com/ruoyi/system/mapper/BuyerCompanyInfoMapper.java
@@ -0,0 +1,10 @@
+package com.ruoyi.system.mapper;
+
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.ruoyi.system.domain.AccountDetail;
+import com.ruoyi.system.domain.BuyerCompanyInfo;
+import org.apache.ibatis.annotations.Mapper;
+
+@Mapper
+public interface BuyerCompanyInfoMapper extends BaseMapper<BuyerCompanyInfo> {
+}
diff --git a/ruoyi-system/src/main/java/com/ruoyi/system/mapper/OpeningBankMapper.java b/ruoyi-system/src/main/java/com/ruoyi/system/mapper/OpeningBankMapper.java
new file mode 100644
index 0000000..1e81c59
--- /dev/null
+++ b/ruoyi-system/src/main/java/com/ruoyi/system/mapper/OpeningBankMapper.java
@@ -0,0 +1,11 @@
+package com.ruoyi.system.mapper;
+
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.ruoyi.system.domain.AccountDetail;
+import com.ruoyi.system.domain.OpeningBank;
+import com.ruoyi.system.pojo.vo.OpeningBankVO;
+import org.apache.ibatis.annotations.Mapper;
+
+@Mapper
+public interface OpeningBankMapper extends BaseMapper<OpeningBank> {
+}
diff --git a/ruoyi-system/src/main/java/com/ruoyi/system/mapper/OrderMapper.java b/ruoyi-system/src/main/java/com/ruoyi/system/mapper/OrderMapper.java
index 188d40f..34af1cd 100644
--- a/ruoyi-system/src/main/java/com/ruoyi/system/mapper/OrderMapper.java
+++ b/ruoyi-system/src/main/java/com/ruoyi/system/mapper/OrderMapper.java
@@ -1,8 +1,12 @@
 package com.ruoyi.system.mapper;
 
 import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.baomidou.mybatisplus.core.metadata.IPage;
 import com.ruoyi.system.domain.Agreement;
 import com.ruoyi.system.domain.Order;
+import com.ruoyi.system.pojo.dto.OrderPageDTO;
+import com.ruoyi.system.pojo.vo.OrderDetailVO;
+import com.ruoyi.system.pojo.vo.OrderPageVO;
 import org.apache.ibatis.annotations.Mapper;
 import org.apache.ibatis.annotations.Param;
 
@@ -11,4 +15,8 @@
 @Mapper
 public interface OrderMapper extends BaseMapper<Order> {
     BigDecimal getProcessingCommissionPriceByShareUserId(@Param("id") String id);
+
+    IPage<OrderPageVO> getOrderPage(@Param("page")IPage<OrderPageVO> page,@Param("dto") OrderPageDTO dto);
+
+    OrderDetailVO getDetailById(@Param("id")String id);
 }
diff --git a/ruoyi-system/src/main/java/com/ruoyi/system/mapper/PermitMapper.java b/ruoyi-system/src/main/java/com/ruoyi/system/mapper/PermitMapper.java
new file mode 100644
index 0000000..118d56b
--- /dev/null
+++ b/ruoyi-system/src/main/java/com/ruoyi/system/mapper/PermitMapper.java
@@ -0,0 +1,10 @@
+package com.ruoyi.system.mapper;
+
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.ruoyi.system.domain.AccountDetail;
+import com.ruoyi.system.domain.Permit;
+import org.apache.ibatis.annotations.Mapper;
+
+@Mapper
+public interface PermitMapper extends BaseMapper<Permit> {
+}
diff --git a/ruoyi-system/src/main/java/com/ruoyi/system/mapper/ScheduleMapper.java b/ruoyi-system/src/main/java/com/ruoyi/system/mapper/ScheduleMapper.java
new file mode 100644
index 0000000..854f0c4
--- /dev/null
+++ b/ruoyi-system/src/main/java/com/ruoyi/system/mapper/ScheduleMapper.java
@@ -0,0 +1,11 @@
+package com.ruoyi.system.mapper;
+
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.ruoyi.system.domain.AccountDetail;
+import com.ruoyi.system.domain.Schedule;
+import org.apache.ibatis.annotations.Mapper;
+
+@Mapper
+public interface ScheduleMapper extends BaseMapper<Schedule> {
+
+}
diff --git a/ruoyi-system/src/main/java/com/ruoyi/system/mapper/ShareholderMapper.java b/ruoyi-system/src/main/java/com/ruoyi/system/mapper/ShareholderMapper.java
new file mode 100644
index 0000000..ab063e7
--- /dev/null
+++ b/ruoyi-system/src/main/java/com/ruoyi/system/mapper/ShareholderMapper.java
@@ -0,0 +1,10 @@
+package com.ruoyi.system.mapper;
+
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.ruoyi.system.domain.AccountDetail;
+import com.ruoyi.system.domain.Shareholder;
+import org.apache.ibatis.annotations.Mapper;
+
+@Mapper
+public interface ShareholderMapper extends BaseMapper<Shareholder> {
+}
diff --git a/ruoyi-system/src/main/java/com/ruoyi/system/pojo/dto/OrderPageDTO.java b/ruoyi-system/src/main/java/com/ruoyi/system/pojo/dto/OrderPageDTO.java
new file mode 100644
index 0000000..156457e
--- /dev/null
+++ b/ruoyi-system/src/main/java/com/ruoyi/system/pojo/dto/OrderPageDTO.java
@@ -0,0 +1,64 @@
+package com.ruoyi.system.pojo.dto;
+
+import com.baomidou.mybatisplus.annotation.TableField;
+import com.fasterxml.jackson.annotation.JsonFormat;
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+import java.time.LocalDateTime;
+
+@Data
+@ApiModel("订单分页DTO")
+public class OrderPageDTO {
+
+    @ApiModelProperty("页码")
+    private Integer pageNum=0;
+    @ApiModelProperty("分页大小")
+    private Integer pageSize=10;
+
+    @ApiModelProperty(value = "订单编号")
+    private String orderNo;
+
+    @ApiModelProperty(value = "发布用户")
+    private String publishName;
+
+    @ApiModelProperty(value = "发布用户-联系电话")
+    private String publishPhone;
+
+
+    @ApiModelProperty(value = "预订用户")
+    private String bookName;
+
+    @ApiModelProperty(value = "预订用户-联系电话")
+    private String bookPhone;
+
+    @ApiModelProperty(value = "发布时间-开始")
+    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
+    private LocalDateTime createTimeStart;
+
+    @ApiModelProperty(value = "发布时间-结束")
+    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
+    private LocalDateTime createTimeEnd;
+
+    @ApiModelProperty(value = "预订时间")
+    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
+    private LocalDateTime bookTimeStart;
+
+    @ApiModelProperty(value = "预订时间")
+    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
+    private LocalDateTime bookTimeEnd;
+
+    @ApiModelProperty(value = "完成时间")
+    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
+    private LocalDateTime finishTimeStart;
+
+    @ApiModelProperty(value = "完成时间")
+    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
+    private LocalDateTime finishTimeEnd;
+
+    @ApiModelProperty(value = "订单状态: 1-待交易(上架) 2待确认(预订) 3已确认(待支付) 4办理中 5卖家已完成 6买家完成 7-已下架 ")
+    private Integer status;
+
+
+}
diff --git a/ruoyi-system/src/main/java/com/ruoyi/system/pojo/vo/BusinessVO.java b/ruoyi-system/src/main/java/com/ruoyi/system/pojo/vo/BusinessVO.java
new file mode 100644
index 0000000..851d67b
--- /dev/null
+++ b/ruoyi-system/src/main/java/com/ruoyi/system/pojo/vo/BusinessVO.java
@@ -0,0 +1,49 @@
+package com.ruoyi.system.pojo.vo;
+
+import com.baomidou.mybatisplus.annotation.TableField;
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+@Data
+@ApiModel("企业工商信息VO")
+public class BusinessVO {
+
+    @ApiModelProperty(value = "法人", notes = "企业法定代表人姓名")
+    private String operName;
+
+    @ApiModelProperty(value = "登记机关", notes = "企业注册的登记管理机构")
+    private String belongOrg;
+
+
+    @ApiModelProperty(value = "登记状态", notes = "企业的工商登记状态")
+    private String registrationStatus;
+
+    @ApiModelProperty(value = "所在地区")
+    private String place;
+
+    @ApiModelProperty(value = "注册资本")
+    private String registeredCapital;
+
+
+    @ApiModelProperty(value = "公司类型")
+    private String companyCategoryName;
+
+    @ApiModelProperty(value = "纳税人类型(1=一般纳税人,2=小规模纳税人,3=税务未登记)")
+    private Integer taxpayerType;
+
+    @ApiModelProperty(value = "纳税信用等级")
+    private String taxCredit;
+
+    @ApiModelProperty(value = "公章数")
+    private Integer officialSealNum;
+
+    @ApiModelProperty(value = "实缴资金")
+    private String paidInFunds;
+
+    @ApiModelProperty(value = "高新技术企业(0=否,1=是)")
+    private Integer highTechEnterpriseTechnology;
+
+    @ApiModelProperty(value = "经营范围", notes = "企业经营的业务范围描述")
+    private String scope;
+}
diff --git a/ruoyi-system/src/main/java/com/ruoyi/system/pojo/vo/ChangeVO.java b/ruoyi-system/src/main/java/com/ruoyi/system/pojo/vo/ChangeVO.java
new file mode 100644
index 0000000..93607e2
--- /dev/null
+++ b/ruoyi-system/src/main/java/com/ruoyi/system/pojo/vo/ChangeVO.java
@@ -0,0 +1,9 @@
+package com.ruoyi.system.pojo.vo;
+
+import io.swagger.annotations.ApiModel;
+import lombok.Data;
+
+@Data
+@ApiModel("企业变更信息")
+public class ChangeVO {
+}
diff --git a/ruoyi-system/src/main/java/com/ruoyi/system/pojo/vo/ErrorVO.java b/ruoyi-system/src/main/java/com/ruoyi/system/pojo/vo/ErrorVO.java
new file mode 100644
index 0000000..820b0d3
--- /dev/null
+++ b/ruoyi-system/src/main/java/com/ruoyi/system/pojo/vo/ErrorVO.java
@@ -0,0 +1,10 @@
+package com.ruoyi.system.pojo.vo;
+
+import io.swagger.annotations.ApiModel;
+import lombok.Data;
+
+@Data
+@ApiModel("企业异常信息VO")
+public class ErrorVO {
+
+}
diff --git a/ruoyi-system/src/main/java/com/ruoyi/system/pojo/vo/InvoiceVO.java b/ruoyi-system/src/main/java/com/ruoyi/system/pojo/vo/InvoiceVO.java
new file mode 100644
index 0000000..34ed01f
--- /dev/null
+++ b/ruoyi-system/src/main/java/com/ruoyi/system/pojo/vo/InvoiceVO.java
@@ -0,0 +1,9 @@
+package com.ruoyi.system.pojo.vo;
+
+import io.swagger.annotations.ApiModel;
+import lombok.Data;
+
+@Data
+@ApiModel("企业发票信息")
+public class InvoiceVO {
+}
diff --git a/ruoyi-system/src/main/java/com/ruoyi/system/pojo/vo/OpeningBankVO.java b/ruoyi-system/src/main/java/com/ruoyi/system/pojo/vo/OpeningBankVO.java
new file mode 100644
index 0000000..6ab275c
--- /dev/null
+++ b/ruoyi-system/src/main/java/com/ruoyi/system/pojo/vo/OpeningBankVO.java
@@ -0,0 +1,22 @@
+package com.ruoyi.system.pojo.vo;
+
+import com.baomidou.mybatisplus.annotation.TableField;
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+@Data
+@ApiModel("开户行信息VO")
+public class OpeningBankVO {
+
+    @ApiModelProperty("开户行名称")
+    private String name;
+
+    @ApiModelProperty("开户类型")
+    private String category;
+
+    @ApiModelProperty("有无外币(0=无,1=有)")
+    private Integer haveForeignCurrency;
+
+
+}
diff --git a/ruoyi-system/src/main/java/com/ruoyi/system/pojo/vo/OrderDetailVO.java b/ruoyi-system/src/main/java/com/ruoyi/system/pojo/vo/OrderDetailVO.java
new file mode 100644
index 0000000..0a46ed1
--- /dev/null
+++ b/ruoyi-system/src/main/java/com/ruoyi/system/pojo/vo/OrderDetailVO.java
@@ -0,0 +1,212 @@
+package com.ruoyi.system.pojo.vo;
+
+import com.baomidou.mybatisplus.annotation.IdType;
+import com.baomidou.mybatisplus.annotation.TableField;
+import com.baomidou.mybatisplus.annotation.TableId;
+import com.fasterxml.jackson.annotation.JsonFormat;
+import com.ruoyi.system.domain.OpeningBank;
+import com.ruoyi.system.domain.Schedule;
+import com.ruoyi.system.domain.Shareholder;
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+import java.math.BigDecimal;
+import java.time.LocalDateTime;
+import java.util.List;
+
+@Data
+@ApiModel("订单详情VO")
+public class OrderDetailVO {
+    @ApiModelProperty(value = "公司主键ID")
+    private String id;
+
+    @ApiModelProperty(value = "订单状态:1-待交易 2待确认(预订) 3已确认(待支付) 4办理中 5-已完成 6-已下架 ")
+    private Integer status;
+
+
+    //不用显示给前端
+    @ApiModelProperty(value = "订单主键",hidden = true)
+    private String orderId;
+    /**
+     * 基础信息
+     */
+
+    @ApiModelProperty(value = "公司名称")
+    private String companyName;
+
+    @ApiModelProperty(value = "成立时间")
+    private String establishTime;
+
+    @ApiModelProperty(value = "所在地区")
+    private String place;
+
+    @ApiModelProperty(value = "注册资本")
+    private String registeredCapital;
+
+    @ApiModelProperty(value = "公司类型")
+    private String companyCategoryName;
+
+    @ApiModelProperty(value = "所属行业")
+    private String industryName;
+
+    @ApiModelProperty(value = "纳税人类型(1=一般纳税人,2=小规模纳税人,3=税务未登记)")
+    private Integer taxpayerType;
+
+    @ApiModelProperty(value = "纳税信用等级")
+    private String taxCredit;
+
+    @ApiModelProperty(value = "公章数")
+    private Integer officialSealNum;
+
+    @ApiModelProperty(value = "实缴资金")
+    private String paidInFunds;
+
+    @ApiModelProperty(value = "高新技术企业(0=否,1=是)")
+    private Integer highTechEnterpriseTechnology;
+
+    @ApiModelProperty(value = "法人", notes = "企业法定代表人姓名")
+    private String operName;
+
+    @ApiModelProperty(value = "经营范围", notes = "企业经营的业务范围描述")
+    private String scope;
+
+    @ApiModelProperty("许可证集合")
+    List<PermitVO> permitVOList;
+
+    @ApiModelProperty("开户行信息集合")
+    List<OpeningBankVO> openingBankVOList;
+
+   @ApiModelProperty(value = "开票额度")
+    private String invoiceLimit;
+
+    @ApiModelProperty(value = "社保缴纳(0=无,1=有)")
+    private Integer socialSecurity;
+
+    @ApiModelProperty(value = "招投标(0=无,1=有)")
+    private Integer tendering;
+
+    @ApiModelProperty(value = "商标(0=无,1=有)")
+    private Integer haveTrademark;
+
+    @ApiModelProperty(value = "专利(0=无,1=有)")
+    private Integer havePatent;
+
+    @ApiModelProperty(value = "软著(0=无,1=有)")
+    private Integer haveSoftWorks;
+
+    @ApiModelProperty(value = "是否需要改名(0=不需要,1=需要)")
+    private Integer needRename;
+
+    @ApiModelProperty(value = "是否迁区(0=不需要,1=需要)")
+    private Integer newDistrict;
+
+    /**
+     * 交易信息
+     */
+    @ApiModelProperty(value = "发布用户")
+    private String publishName;
+
+    @ApiModelProperty(value = "发布用户-联系电话")
+    private String publishPhone;
+
+    @ApiModelProperty(value = "发布时间")
+    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
+    private LocalDateTime createTime;
+
+    @ApiModelProperty(value = "预计完成时间")
+    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
+    private LocalDateTime estimateTime;
+
+
+    @ApiModelProperty(value = "预订用户")
+    private String bookName;
+
+    @ApiModelProperty(value = "预订用户-联系电话")
+    private String bookPhone;
+
+    @ApiModelProperty(value = "预订时间")
+    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
+    private LocalDateTime bookTime;
+
+    @ApiModelProperty(value = "订单金额")
+    private BigDecimal price;
+
+    @ApiModelProperty(value = "支付时间")
+    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
+    private LocalDateTime payTime;
+
+    @ApiModelProperty(value = "卖家确认时间")
+    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
+    private LocalDateTime confirmTime;
+
+
+    @ApiModelProperty(value = "卖家完成时间")
+    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
+    private LocalDateTime sellerFinishTime;
+
+    @ApiModelProperty(value = "完成时间")
+    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
+    private LocalDateTime finishTime;
+
+    /**
+     * 客户信息
+     */
+
+    @ApiModelProperty(value = "法人照片URL")
+    private String legalPersonImg;
+
+
+    @ApiModelProperty(value = "新公司名称")
+    private String newName;
+
+    @TableField("backups_name")
+    @ApiModelProperty(value = "备选公司名称")
+    private String backupsName;
+
+    @TableField("backups_name_one")
+    @ApiModelProperty(value = "备选名称1")
+    private String backupsNameOne;
+
+    @TableField("backups_name_two")
+    @ApiModelProperty(value = "备选名称2")
+    private String backupsNameTwo;
+
+
+    @ApiModelProperty(value = "注册资本")
+    private String newRegisteredCapital;
+
+    @ApiModelProperty(value = "账户类型(1=无账户,2=变更,3=新法人注销,4=老法人注销)")
+    private Integer accountType;
+
+    @TableField("address")
+    @ApiModelProperty(value = "公司地址")
+    private String address;
+
+    @ApiModelProperty(value = "实名认证账户")
+    private String account;
+
+    @ApiModelProperty(value = "实名认证密码")
+    private String password;
+
+    @ApiModelProperty(value = "租房合同文本/URL")
+    private String tenancyAgreement;
+
+    @ApiModelProperty(value = "房产证文本/URL")
+    private String propertyOwnershipCertificate;
+
+    @TableField("business_scope")
+    @ApiModelProperty(value = "经营范围")
+    private String businessScope;
+
+    /**
+     * 股东占比
+     */
+    @ApiModelProperty(value = "股东占比")
+    List<Shareholder> shareholderList;
+
+    /**
+     * 进度汇报
+     */
+    List<Schedule> scheduleList;
+}
diff --git a/ruoyi-system/src/main/java/com/ruoyi/system/pojo/vo/OrderPageVO.java b/ruoyi-system/src/main/java/com/ruoyi/system/pojo/vo/OrderPageVO.java
new file mode 100644
index 0000000..0012d62
--- /dev/null
+++ b/ruoyi-system/src/main/java/com/ruoyi/system/pojo/vo/OrderPageVO.java
@@ -0,0 +1,52 @@
+package com.ruoyi.system.pojo.vo;
+
+import com.baomidou.mybatisplus.annotation.TableField;
+import com.fasterxml.jackson.annotation.JsonFormat;
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+import java.math.BigDecimal;
+import java.time.LocalDateTime;
+
+@Data
+@ApiModel("订单分页VO")
+public class OrderPageVO {
+    @ApiModelProperty(value = "公司主键ID")
+    private String id;
+
+    @ApiModelProperty(value = "订单编号")
+    private String orderNo;
+
+    @ApiModelProperty(value = "发布用户")
+    private String publishName;
+
+    @ApiModelProperty(value = "发布用户-联系电话")
+    private String publishPhone;
+
+
+    @ApiModelProperty(value = "订单金额")
+    private BigDecimal price;
+
+
+    @ApiModelProperty(value = "预订用户")
+    private String bookName;
+
+    @ApiModelProperty(value = "预订用户-联系电话")
+    private String bookPhone;
+
+    @ApiModelProperty(value = "发布时间")
+    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
+    private LocalDateTime createTime;
+
+    @ApiModelProperty(value = "预订时间")
+    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
+    private LocalDateTime bookTime;
+
+    @ApiModelProperty(value = "订单状态:1-待交易 2待确认(预订) 3已确认(待支付) 4办理中 5-已完成 6-已下架 ")
+    private Integer status;
+
+    @ApiModelProperty(value = "完成时间")
+    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
+    private LocalDateTime finishTime;
+}
diff --git a/ruoyi-system/src/main/java/com/ruoyi/system/pojo/vo/PermitVO.java b/ruoyi-system/src/main/java/com/ruoyi/system/pojo/vo/PermitVO.java
new file mode 100644
index 0000000..f9ec64e
--- /dev/null
+++ b/ruoyi-system/src/main/java/com/ruoyi/system/pojo/vo/PermitVO.java
@@ -0,0 +1,19 @@
+package com.ruoyi.system.pojo.vo;
+
+import com.baomidou.mybatisplus.annotation.TableField;
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+@Data
+@ApiModel("许可证VO")
+public class PermitVO {
+
+    @TableField("name")
+    @ApiModelProperty(value = "许可证名称")
+    private String name;
+
+    @TableField("level")
+    @ApiModelProperty(value = "许可证等级")
+    private String level;
+}
diff --git a/ruoyi-system/src/main/java/com/ruoyi/system/pojo/vo/TaxVO.java b/ruoyi-system/src/main/java/com/ruoyi/system/pojo/vo/TaxVO.java
new file mode 100644
index 0000000..53bed86
--- /dev/null
+++ b/ruoyi-system/src/main/java/com/ruoyi/system/pojo/vo/TaxVO.java
@@ -0,0 +1,9 @@
+package com.ruoyi.system.pojo.vo;
+
+import io.swagger.annotations.ApiModel;
+import lombok.Data;
+
+@Data
+@ApiModel("企业纳税信息")
+public class TaxVO {
+}
diff --git a/ruoyi-system/src/main/java/com/ruoyi/system/service/OrderService.java b/ruoyi-system/src/main/java/com/ruoyi/system/service/OrderService.java
new file mode 100644
index 0000000..26852f2
--- /dev/null
+++ b/ruoyi-system/src/main/java/com/ruoyi/system/service/OrderService.java
@@ -0,0 +1,37 @@
+package com.ruoyi.system.service;
+
+import com.baomidou.mybatisplus.core.metadata.IPage;
+import com.baomidou.mybatisplus.extension.service.IService;
+import com.ruoyi.common.core.domain.R;
+import com.ruoyi.common.utils.wx.RefundCallbackResult;
+import com.ruoyi.system.domain.Agreement;
+import com.ruoyi.system.domain.Order;
+import com.ruoyi.system.pojo.dto.AddAgreementDTO;
+import com.ruoyi.system.pojo.dto.OrderPageDTO;
+import com.ruoyi.system.pojo.vo.*;
+
+
+public interface OrderService extends IService<Order>  {
+
+    IPage<OrderPageVO> getOrderPage(OrderPageDTO dto);
+
+    OrderDetailVO detail(String id);
+
+    BusinessVO business(String id);
+
+    ErrorVO error(String id);
+
+    ChangeVO change(String id);
+
+    TaxVO tax(String id);
+
+    InvoiceVO invoice(String id);
+
+    void delete(String id);
+
+    void shelves(String id);
+
+    void cancel(String id);
+
+    R refundPayMoneyCallback(RefundCallbackResult refundCallbackResult);
+}
diff --git a/ruoyi-system/src/main/java/com/ruoyi/system/service/impl/AppUserServiceImpl.java b/ruoyi-system/src/main/java/com/ruoyi/system/service/impl/AppUserServiceImpl.java
index 18678f6..e1f73aa 100644
--- a/ruoyi-system/src/main/java/com/ruoyi/system/service/impl/AppUserServiceImpl.java
+++ b/ruoyi-system/src/main/java/com/ruoyi/system/service/impl/AppUserServiceImpl.java
@@ -133,7 +133,5 @@
         user.setUpdateTime(LocalDateTime.now());
         user.setUpdateBy(getLoginUser().getUserId());
         this.baseMapper.updateById(user);
-        //todo 是否需要加消息
-
     }
 }
diff --git a/ruoyi-system/src/main/java/com/ruoyi/system/service/impl/OrderServiceImpl.java b/ruoyi-system/src/main/java/com/ruoyi/system/service/impl/OrderServiceImpl.java
new file mode 100644
index 0000000..34cb130
--- /dev/null
+++ b/ruoyi-system/src/main/java/com/ruoyi/system/service/impl/OrderServiceImpl.java
@@ -0,0 +1,297 @@
+package com.ruoyi.system.service.impl;
+
+import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
+import com.baomidou.mybatisplus.core.metadata.IPage;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import com.ruoyi.common.core.domain.R;
+import com.ruoyi.common.exception.ServiceException;
+import com.ruoyi.common.utils.wx.PaymentUtil;
+import com.ruoyi.common.utils.wx.RefundCallbackResult;
+import com.ruoyi.common.utils.wx.RefundResult;
+import com.ruoyi.system.domain.*;
+import com.ruoyi.system.mapper.*;
+import com.ruoyi.system.pojo.dto.AddAgreementDTO;
+import com.ruoyi.system.pojo.dto.OrderPageDTO;
+import com.ruoyi.system.pojo.vo.*;
+import com.ruoyi.system.service.AgreementService;
+import com.ruoyi.system.service.OrderService;
+import lombok.extern.slf4j.Slf4j;
+import org.springframework.beans.BeanUtils;
+import org.springframework.stereotype.Service;
+import org.springframework.transaction.annotation.Transactional;
+
+import javax.annotation.Resource;
+import java.math.BigDecimal;
+import java.time.LocalDateTime;
+import java.time.format.DateTimeFormatter;
+import java.util.ArrayList;
+import java.util.List;
+
+@Slf4j
+@Service
+public class OrderServiceImpl extends ServiceImpl<OrderMapper, Order> implements OrderService {
+
+    @Resource
+    private PermitMapper permitMapper;
+
+    @Resource
+    private OpeningBankMapper openingBankMapper;
+    @Resource
+    private BuyerCompanyInfoMapper buyerCompanyInfoMapper;
+    @Resource
+    private ShareholderMapper shareholderMapper;
+    @Resource
+    private ScheduleMapper scheduleMapper;
+    @Resource
+    private CompanyMapper companyMapper;
+
+    @Override
+    public IPage<OrderPageVO> getOrderPage(OrderPageDTO dto) {
+        IPage<OrderPageVO> page = new Page<>(dto.getPageNum(), dto.getPageSize());
+        return this.baseMapper.getOrderPage(page,dto);
+    }
+
+    @Override
+    public OrderDetailVO detail(String id) {
+        OrderDetailVO vo = this.baseMapper.getDetailById(id);
+        if (null == vo) {
+            throw new ServiceException("该公司不存在");
+        }
+        //许可证集合
+        List<Permit> permits = permitMapper.selectList(new LambdaQueryWrapper<Permit>().eq(Permit::getCompanyId, id));
+        List<PermitVO> permitVOs = new ArrayList<>();
+        LocalDateTime now = LocalDateTime.now();
+        for (Permit permit : permits) {
+            DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss");
+            LocalDateTime expireTime = LocalDateTime.parse(permit.getExpireTime(), formatter);
+            if (now.isAfter(expireTime)) {
+                //过滤 未过期的
+                PermitVO permitVO = new PermitVO();
+                permitVO.setName(permit.getName());
+                permitVO.setLevel(permit.getLevel());
+                permitVOs.add(permitVO);
+            }
+        }
+        vo.setPermitVOList(permitVOs);
+        //开户行信息集合
+        List<OpeningBank> openingBanks = openingBankMapper.selectList(new LambdaQueryWrapper<OpeningBank>().eq(OpeningBank::getCompanyId, id));
+        List<OpeningBankVO> openingBankVOs = new ArrayList<>();
+        for (OpeningBank openingBank : openingBanks) {
+            OpeningBankVO openingBankVO = new OpeningBankVO();
+            BeanUtils.copyProperties(openingBank, openingBankVO);
+            openingBankVOs.add(openingBankVO);
+        }
+        vo.setOpeningBankVOList(openingBankVOs);
+
+        if (vo.getStatus() != 4 && vo.getStatus() != 5) {
+            return vo;
+        }
+
+        //状态为办理中和已完成
+        //客户信息
+        BuyerCompanyInfo buyerCompanyInfo = buyerCompanyInfoMapper.selectOne(new LambdaQueryWrapper<BuyerCompanyInfo>().eq(BuyerCompanyInfo::getOrderId, vo.getOrderId()));
+        copyProperties(vo,buyerCompanyInfo);
+        //股东占比
+        List<Shareholder> shareholders = shareholderMapper.selectList(new LambdaQueryWrapper<Shareholder>().eq(Shareholder::getOrderId, vo.getOrderId()));
+        vo.setShareholderList(shareholders);
+        //进度汇报
+        List<Schedule> schedules = scheduleMapper.selectList(new LambdaQueryWrapper<Schedule>().eq(Schedule::getOrderId, vo.getOrderId()));
+        //构建进度汇报结构
+        List<Schedule> scheduleVOList = new ArrayList<>();
+        for (Schedule schedule : schedules) {
+            if (schedule.getParentId() == null) {
+                scheduleVOList.add(schedule);
+            }else {
+                //查找到父类的集合
+                for (Schedule schedule1 : scheduleVOList) {
+                    if (schedule1.getId().equals(schedule.getParentId())) {
+                        schedule1.setSchedule(schedule);
+                    }
+                }
+            }
+        }
+        vo.setScheduleList(scheduleVOList);
+        return vo;
+    }
+
+    private static void copyProperties(OrderDetailVO vo,BuyerCompanyInfo info){
+        vo.setLegalPersonImg(info.getLegalPersonImg());
+        vo.setNewName(info.getNewName());
+        vo.setBackupsName(info.getBackupsName());
+        vo.setBackupsNameOne(info.getBackupsNameOne());
+        vo.setBackupsNameTwo(info.getBackupsNameTwo());
+        vo.setNewRegisteredCapital(info.getRegisteredCapital());
+        vo.setAccount(info.getAccount());
+        vo.setAddress(info.getAddress());
+        vo.setPassword(info.getPassword());
+        vo.setTenancyAgreement(info.getTenancyAgreement());
+        vo.setPropertyOwnershipCertificate(info.getPropertyOwnershipCertificate());
+        vo.setBusinessScope(info.getBusinessScope());
+    }
+
+    @Override
+    public BusinessVO business(String id) {
+        Company company = companyMapper.selectById(id);
+        if (null == company || company.getIsDelete() != 0) {
+            throw new ServiceException("公司不存在");
+        }
+        BusinessVO vo = new BusinessVO();
+        BeanUtils.copyProperties(company, vo);
+        vo.setPlace(company.getCity()+company.getProvince()+company.getArea());
+        return vo;
+    }
+
+    @Override
+    public ErrorVO error(String id) {
+        return null;
+    }
+
+    @Override
+    public ChangeVO change(String id) {
+        return null;
+    }
+
+    @Override
+    public TaxVO tax(String id) {
+        return null;
+    }
+
+    @Override
+    public InvoiceVO invoice(String id) {
+        return null;
+    }
+
+    @Transactional
+    @Override
+    public void delete(String id) {
+        Company company = companyMapper.selectById(id);
+        if (null == company || company.getIsDelete() != 0) {
+            throw new ServiceException("公司不存在");
+        }
+        if (company.getStatus().equals(3)){//已完成
+            throw new ServiceException("状态错误,已完成订单不能删除");
+        }
+
+        if (company.getStatus().equals(4)){//锁定中
+            //查看订单状态是否为待确认
+            Order order = this.baseMapper.selectOne(new LambdaQueryWrapper<Order>()
+                    .eq(Order::getCompanyId, company.getId())
+                    .ne(Order::getStatus,-1));//取消的订单不要
+            if (null == order) {
+                throw new ServiceException("订单不存在");
+            }
+            if (!order.getStatus().equals(2)) {//不在待确认状态的
+                throw new ServiceException("状态错误,不能删除");
+            }
+            //删除订单
+            this.baseMapper.deleteById(order.getId());
+        }
+        //删除公司
+        company.setIsDelete(1);
+        companyMapper.updateById(company);
+    }
+
+    /**
+     * 上下架
+     */
+    @Override
+    public void shelves(String id) {
+        Company company = companyMapper.selectById(id);
+        if (null == company || company.getIsDelete() != 0) {
+            throw new ServiceException("公司不存在");
+        }
+        if (company.getStatus().equals(3)){//已完成
+            throw new ServiceException("状态错误,已完成订单不能修改");
+        }
+
+        if (company.getStatus().equals(4)){//锁定中
+            //查看订单状态是否为待确认
+            Order order = this.baseMapper.selectOne(new LambdaQueryWrapper<Order>()
+                    .eq(Order::getCompanyId, company.getId())
+                    .ne(Order::getStatus,-1)//取消的不要
+            );
+            if (null == order) {
+                throw new ServiceException("订单不存在");
+            }
+            if (!order.getStatus().equals(2)) {//不在待确认状态的
+                throw new ServiceException("状态错误,不能修改");
+            }
+            //删除订单
+            this.baseMapper.deleteById(order.getId());
+        }
+        //上下架
+        if (company.getStatus().equals(1)||company.getStatus().equals(4)){//1-上架中  4-锁定中(待确认)
+            company.setStatus(2);//2-下架中
+        }else if (company.getStatus().equals(2)){
+            company.setStatus(1);
+        }
+        companyMapper.updateById(company);
+
+    }
+
+    @Override
+    public void cancel(String id) {
+        Company company = companyMapper.selectById(id);
+        if (null == company || company.getIsDelete() != 0) {
+            throw new ServiceException("公司不存在");
+        }
+        if (!company.getStatus().equals(4)){// 4-锁定中
+            throw new ServiceException("订单状态错误,不能操作");
+        }
+        //查看订单 取消的不要
+        Order order = this.baseMapper.selectOne(new LambdaQueryWrapper<Order>()
+                .eq(Order::getCompanyId, company.getId())
+                .ne(Order::getStatus,-1));
+        if (null == order) {
+            throw new ServiceException("订单不存在");
+        }
+        //检查状态  3已确认(未付款) 4办理中 5卖家已完成
+        if (!order.getStatus().equals(3)||!order.getStatus().equals(4)||!order.getStatus().equals(5)) {
+            throw new ServiceException("订单状态错误,不能操作");
+        }
+        if (company.getStatus().equals(3)){
+            //未付款 直接取消订单
+            order.setStatus(-1);
+            this.baseMapper.updateById(order);
+        }else{
+            //退款
+            order.setStatus(-1);
+            R r = refundPayMoney(order);//退款
+            if (200 == r.getCode()) {
+                this.updateById(order);
+            }
+        }
+    }
+
+    @Override
+    public R refundPayMoneyCallback(RefundCallbackResult refundCallbackResult) {
+        String code = refundCallbackResult.getR3_RefundOrderNo().substring(1);
+        log.info("退款回调:{}",code);
+        Order order = this.getOne(new LambdaQueryWrapper<Order>().eq(Order::getOrderNo, code));
+        if (null == order || order.getStatus() == -1) {
+            return R.ok();
+        }
+        order.setStatus(-1);
+        this.updateById(order);
+        return R.ok();
+    }
+
+    /**
+     * 返回订单支付金额
+     */
+    public R refundPayMoney(Order order) {
+        //开始退款
+        BigDecimal paymentAmount = order.getPrice();
+        if (BigDecimal.ZERO.compareTo(order.getPrice()) < 0) {//支付的金额是否大于0
+            //微信退款
+            RefundResult refund = PaymentUtil.refund(order.getOrderNo(), "R" + order.getOrderNo(), paymentAmount.doubleValue(),
+                    "/system/order/refundPayMoneyCallback");
+            if (!"100".equals(refund.getRa_Status())) {
+                return R.fail(refund.getRc_CodeMsg());//退款失败
+            }
+        }
+        return R.ok();
+    }
+
+}
diff --git a/ruoyi-system/src/main/resources/mapper/system/BuyerCompanyInfoMapper.xml b/ruoyi-system/src/main/resources/mapper/system/BuyerCompanyInfoMapper.xml
new file mode 100644
index 0000000..47b4f87
--- /dev/null
+++ b/ruoyi-system/src/main/resources/mapper/system/BuyerCompanyInfoMapper.xml
@@ -0,0 +1,6 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
+<mapper namespace="com.ruoyi.system.mapper.BuyerCompanyInfoMapper">
+
+
+</mapper>
\ No newline at end of file
diff --git a/ruoyi-system/src/main/resources/mapper/system/CompanyMapper.xml b/ruoyi-system/src/main/resources/mapper/system/CompanyMapper.xml
index 7ecd8fa..b1d9845 100644
--- a/ruoyi-system/src/main/resources/mapper/system/CompanyMapper.xml
+++ b/ruoyi-system/src/main/resources/mapper/system/CompanyMapper.xml
@@ -16,7 +16,7 @@
                 LEFT JOIN
             tb_order tbo
             ON c.id = tbo.company_id
-                AND tbo.status IN (4, 5)   -- 仅关联状态为4或5的订单
+                AND tbo.status IN (4, 5)   -- 仅关联状态为4或5的订单 办理中的订单
                 LEFT JOIN
             tb_buyer_company_info tinfo
             ON tbo.id = tinfo.order_id
diff --git a/ruoyi-system/src/main/resources/mapper/system/OpingBanklMapper.xml b/ruoyi-system/src/main/resources/mapper/system/OpingBanklMapper.xml
new file mode 100644
index 0000000..7e23fdf
--- /dev/null
+++ b/ruoyi-system/src/main/resources/mapper/system/OpingBanklMapper.xml
@@ -0,0 +1,6 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
+<mapper namespace="com.ruoyi.system.mapper.OpeningBankMapper">
+
+
+</mapper>
\ No newline at end of file
diff --git a/ruoyi-system/src/main/resources/mapper/system/OrderMapper.xml b/ruoyi-system/src/main/resources/mapper/system/OrderMapper.xml
index b984da9..e549ee8 100644
--- a/ruoyi-system/src/main/resources/mapper/system/OrderMapper.xml
+++ b/ruoyi-system/src/main/resources/mapper/system/OrderMapper.xml
@@ -6,4 +6,172 @@
     <select id="getProcessingCommissionPriceByShareUserId" resultType="java.math.BigDecimal">
         select  COALESCE(SUM(commission_price), 0.00) AS total_commission from tb_order where status in (4,5) and share_user_id =#{id}
     </select>
+    <select id="getOrderPage" resultType="com.ruoyi.system.pojo.vo.OrderPageVO">
+        select
+            c.id,
+            o.order_no,
+            publish.user_name as publishName,
+            publish.phone as publishPhone,
+            o.price,
+            book.user_name as bookName,
+            book.phone as bookPhone,
+            c.create_time as createTime,
+            o.create_time as bookTime,
+            o.finish_time as finishTime,
+            -- 状态映射逻辑
+            CASE
+                WHEN c.status = 1 THEN 1
+                WHEN c.status = 2 THEN 6
+                WHEN c.status = 3 THEN 5
+                WHEN c.status = 4 THEN
+                    CASE
+                        WHEN o.status = 2 THEN 2
+                        WHEN o.status = 3 THEN 3
+                        WHEN o.status IN (4, 5) THEN 4
+                        ELSE c.status  -- 默认保持原状态(可根据需求调整)
+                        END
+                ELSE c.status  -- 其他状态保持不变
+                END AS status
+        from
+            tb_company c
+        left join tb_order o on c.id = o.company_id and o.status != -1
+        left join (select id,user_name,phone from tb_user group by id) publish on c.user_id = publish.id
+        left join (select id,user_name,phone from tb_user group by id) book on o.user_id = book.id
+        where
+            c.is_delete=0
+
+            <if test="null != dto.orderNo">
+                and o.order_no like concat('%',#{dto.orderNo},'%')
+            </if>
+            <if test="null != dto.publishName and '' != dto.publishName">
+                and publish.user_name like concat('%',#{dto.publishName},'%')
+            </if>
+            <if test="null != dto.publishPhone and '' != dto.publishPhone">
+                and publish.phone like concat('%',#{dto.publishPhone},'%')
+            </if>
+
+            <if test="null != dto.bookName and '' != dto.bookName">
+                and book.user_name like concat('%',#{dto.bookName},'%')
+            </if>
+            <if test="null != dto.bookPhone and '' != dto.bookPhone">
+                and book.phone like concat('%',#{dto.bookPhone},'%')
+            </if>
+
+            <if test="null != dto.createTimeStart and null != dto.createTimeEnd">
+                and c.create_time between #{dto.createTimeStart} and  #{dto.createTimeEnd}
+            </if>
+
+            <if test="null != dto.bookTimeStart and null != dto.bookTimeEnd">
+                and o.create_time between #{dto.bookTimeStart} and  #{dto.bookTimeEnd}
+            </if>
+
+            <if test="null != dto.finishTimeStart and null != dto.finishTimeEnd">
+                and o.finish_time between #{dto.finishTimeStart} and  #{dto.finishTimeEnd}
+            </if>
+
+            <if test="null != dto.status">
+                AND (
+                <!-- 直接匹配原始状态 -->
+                (c.status IN (1,2,3) AND
+                CASE
+                WHEN c.status = 1 THEN 1
+                WHEN c.status = 2 THEN 6
+                WHEN c.status = 3 THEN 5
+                ELSE c.status
+                END = #{dto.status})
+                <!-- 匹配映射后的状态4(c.status=4且o.status=4/5) -->
+                OR (c.status = 4 AND o.status IN (4,5) AND 4 = #{dto.status})
+                <!-- 匹配映射后的状态2(c.status=4且o.status=2) -->
+                OR (c.status = 4 AND o.status = 2 AND 2 = #{dto.status})
+                <!-- 匹配映射后的状态3(c.status=4且o.status=3) -->
+                OR (c.status = 4 AND o.status = 3 AND 3 = #{dto.status})
+                )
+            </if>
+    </select>
+    <select id="getDetailById" resultType="com.ruoyi.system.pojo.vo.OrderDetailVO">
+
+        select
+            c.id,
+            -- 状态映射逻辑
+            CASE
+                WHEN c.status = 1 THEN 1
+                WHEN c.status = 2 THEN 6
+                WHEN c.status = 3 THEN 5
+                WHEN c.status = 4 THEN
+                    CASE
+                        WHEN o.status = 2 THEN 2
+                        WHEN o.status = 3 THEN 3
+                        WHEN o.status IN (4, 5) THEN 4
+                        ELSE c.status  -- 默认保持原状态(可根据需求调整)
+                        END
+                ELSE c.status  -- 其他状态保持不变
+                END AS status,
+            o.id as orderId,
+            c.company_name,
+            c.establish_time,
+            concat(c.city,c.province,c.area) as place,
+            c.registered_capital,
+            ct.name as companyCategoryName,
+            industry.name as industryName,
+            c.taxpayer_type,
+            c.tax_credit,
+            c.official_seal_num,
+            c.paid_in_funds,
+            c.oper_name,
+            c.scope,
+            c.invoice_limit,
+            c.social_security,
+            c.tendering,
+            c.have_trademark,
+            c.have_patent,
+            c.have_soft_works,
+            info.need_rename,
+            info.new_district,
+            publish.user_name as publishName,
+            publish.phone as publishPhone,
+            c.create_time as createTime,
+            book.user_name as bookName,
+            book.phone as bookPhone,
+            o.create_time as bookTime,
+            o.price as price,
+            o.pay_time as payTime,
+            o.confirm_time,
+            o.seller_finish_time,
+            o.finish_time,
+            -- 计算预计完成时间
+            CASE
+                WHEN
+                    (
+                        CASE
+                            WHEN c.status = 1 THEN 1
+                            WHEN c.status = 2 THEN 6
+                            WHEN c.status = 3 THEN 5
+                            WHEN c.status = 4 THEN
+                                CASE
+                                    WHEN o.status = 2 THEN 2
+                                    WHEN o.status = 3 THEN 3
+                                    WHEN o.status IN (4, 5) THEN 4
+                                    ELSE c.status
+                                    END
+                            ELSE c.status
+                            END
+                        ) IN (3, 4, 5)
+                    THEN
+                    DATE_ADD(o.pay_time, INTERVAL (c.estimated_days+info.add_day) DAY)
+                ELSE NULL
+                END AS estimateTime
+        from tb_company c
+                 left join tb_company_type ct on c.company_category = ct.id
+                 left join tb_industry industry on c.company_industry_id = industry.id
+                 left join tb_order o on c.id= o.company_id and o.status != -1
+        left join tb_buyer_company_info info on o.id = info.order_id
+            left join tb_user publish on c.user_id = publish.id
+            left join tb_user book on o.user_id = book.id
+        where
+            c.is_delete=0
+          and
+            c.id=#{id}
+
+
+    </select>
 </mapper>
\ No newline at end of file
diff --git a/ruoyi-system/src/main/resources/mapper/system/PermitMapper.xml b/ruoyi-system/src/main/resources/mapper/system/PermitMapper.xml
new file mode 100644
index 0000000..19a0832
--- /dev/null
+++ b/ruoyi-system/src/main/resources/mapper/system/PermitMapper.xml
@@ -0,0 +1,6 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
+<mapper namespace="com.ruoyi.system.mapper.PermitMapper">
+
+
+</mapper>
\ No newline at end of file
diff --git a/ruoyi-system/src/main/resources/mapper/system/ScheduleMapper.xml b/ruoyi-system/src/main/resources/mapper/system/ScheduleMapper.xml
new file mode 100644
index 0000000..9babbd3
--- /dev/null
+++ b/ruoyi-system/src/main/resources/mapper/system/ScheduleMapper.xml
@@ -0,0 +1,6 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
+<mapper namespace="com.ruoyi.system.mapper.ScheduleMapper">
+
+
+</mapper>
\ No newline at end of file
diff --git a/ruoyi-system/src/main/resources/mapper/system/ShareholderMapper.xml b/ruoyi-system/src/main/resources/mapper/system/ShareholderMapper.xml
new file mode 100644
index 0000000..9d18b34
--- /dev/null
+++ b/ruoyi-system/src/main/resources/mapper/system/ShareholderMapper.xml
@@ -0,0 +1,6 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
+<mapper namespace="com.ruoyi.system.mapper.ShareholderMapper">
+
+
+</mapper>
\ No newline at end of file

--
Gitblit v1.7.1