| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340 |
- package modules.order;
- import com.alibaba.fastjson.JSONObject;
- import com.jfinal.aop.Before;
- import com.jfinal.aop.Inject;
- import com.jfinal.kit.StrKit;
- import common.interceptor.LoginInterceptor;
- import common.interceptor.empty.EmptyInterface;
- import common.interceptor.role.RequiredRoleInterface;
- import common.model.Nftt;
- import common.model.Order;
- import common.model.User;
- import common.utils.http.MyController;
- import common.utils.http.MyRet;
- import modules.user.UserController;
- import modules.user.UserService;
- import java.util.ArrayList;
- import java.util.HashMap;
- import java.util.List;
- import java.util.Map;
- public class OrderController extends MyController {
- @Inject
- private OrderService service;
- @Inject
- private UserService userService;
- public void hello() {
- renderJson(MyRet.ok(service.hello()));
- }
- /**
- * 创建订单调用的接口,会检查库存什么的
- */
- @Before(LoginInterceptor.class)
- @EmptyInterface({"nftt_id"})
- public void create() {
- // --- 从 JSON 请求体中获取参数 ---
- JSONObject requestBodyJson = MyController.getJsonModelByRequestAndType(getRequest(), JSONObject.class);
- Integer nfttId;
- // nfttId
- try {
- nfttId = requestBodyJson.getInteger("nftt_id");
- } catch (Exception e) {
- renderJson(MyRet.fail("你传入的 nftt_id 有些问题:" + e.getMessage()).setData(requestBodyJson));
- return;
- }
- if (nfttId == null) {
- renderJson(MyRet.fail("id(nftt_id) 有问题"));
- return;
- }
-
- // 先判断实名认证过没过
- User user = userService.findUserByMobileNumber(getSessionAttr("mobile_number"));
- if (StrKit.isBlank(user.getHygWorkerId())) {
- renderJson(MyRet.fail("请先进行实名认证"));
- return;
- }
-
- // 获取nftt
- Nftt nftt = Nftt.dao.findById(nfttId);
- if (nftt == null) {
- renderJson(MyRet.fail("nftt不存在"));
- return;
- }
-
- // 过了之后判断当前是预售阶段还是正式开售阶段
- // 判断是否到了预售阶段
- long now = System.currentTimeMillis();
- if (now < nftt.getPresaleStartTime()) {
- renderJson(MyRet.fail("预售未开始,请勿非法请求!"));
- return;
- }
- int orderType = now > nftt.getBuyingStartTime() ? 1 : 0;
- // 执行抢购操作
- renderJson(service.create(nfttId.longValue(), user.getId(), orderType));
- }
- // /**
- // * 用户点击支付时调用的接口
- // */
- // @Before(LoginInterceptor.class)
- // @EmptyInterface({"order_id"})
- // public void paid() {
- // // --- 从 JSON 请求体中获取参数 ---
- // JSONObject requestBodyJson = MyController.getJsonModelByRequestAndType(getRequest(), JSONObject.class);
- // Integer orderId;
- // // orderId
- // try {
- // orderId = requestBodyJson.getInteger("order_id");
- // } catch (Exception e) {
- // renderJson(MyRet.fail("你传入的 order_id 有些问题:" + e.getMessage()).setData(requestBodyJson));
- //
- // return;
- // }
- // if (orderId == null) {
- // renderJson(MyRet.fail("id(order_id) 有问题"));
- // return;
- // }
- // User user = userService.findUserByMobileNumber(<String>getSessionAttr("mobile_number"));
- //
- // // 判断订单归属权
- // if (service.isOrderBelongToUser(user.getId(), orderId)) {
- // renderJson(MyRet.fail("订单信息错误,再违规请求将封禁ip"));
- // return;
- // }
- //
- // // 判断订单状态
- // Order order = Order.dao.findById(orderId);
- // if (order.getOrderStatus() != OrderStatus.PENDING_PAY.code) {
- // renderJson(MyRet.fail("该订单不需要支付,状态:" + order.getOrderStatus()));
- // return;
- // }
- //
- // // 调用支付接口
- // renderJson(MyRet.ok("模拟支付完成"));
- // }
- //
- // /**
- // * 慧用工支付回调接口
- // */
- // public void hygPaid() {
- // // 慧用工支付完回调接口,无论成败都要调用该接口
- // }
- /**
- * 用户点击取消时调用的接口
- */
- @Before(LoginInterceptor.class)
- @EmptyInterface({"order_id"})
- public void cancel() {
- // --- 从 JSON 请求体中获取参数 ---
- JSONObject requestBodyJson = MyController.getJsonModelByRequestAndType(getRequest(), JSONObject.class);
- Integer orderId;
- // orderId
- try {
- orderId = requestBodyJson.getInteger("order_id");
- } catch (Exception e) {
- renderJson(MyRet.fail("你传入的 order_id 有些问题:" + e.getMessage()).setData(requestBodyJson));
- return;
- }
- if (orderId == null) {
- renderJson(MyRet.fail("id(order_id) 有问题"));
- return;
- }
- User user = userService.findUserByMobileNumber(getSessionAttr("mobile_number"));
-
- // 判断订单归属权
- if (service.isOrderBelongToUser(user.getId(), orderId)) {
- renderJson(MyRet.fail("订单信息错误,再违规请求将封禁ip"));
- return;
- }
- renderJson(service.cancelByUser(user.getId(), orderId));
- }
-
- @Before(LoginInterceptor.class)
- public void findOrderById() {
- // --- 从 JSON 请求体中获取参数 ---
- JSONObject requestBodyJson = MyController.getJsonModelByRequestAndType(getRequest(), JSONObject.class);
- Integer orderId;
- // orderId
- try {
- orderId = requestBodyJson.getInteger("order_id");
- } catch (Exception e) {
- renderJson(MyRet.fail("你输入的 order_id 有些问题:" + e.getMessage()).setData(requestBodyJson));
- return;
- }
- if (orderId == null) {
- renderJson(MyRet.fail("id(order_id) 有问题"));
- return;
- }
- User user = userService.findUserByMobileNumber(getSessionAttr("mobile_number"));
-
- renderJson(service.findOrderById(orderId, user.getId()));
- }
- /**
- * 用户调用的订单列表
- */
- @Before(LoginInterceptor.class)
- public void orderList() {
- // --- 从 JSON 请求体中获取参数 ---
- JSONObject requestBodyJson = MyController.getJsonModelByRequestAndType(getRequest(), JSONObject.class);
-
- User user = userService.findUserByMobileNumber(getSessionAttr("mobile_number"));
- int status;
- // 使用 Fastjson 的 containsKey 和 get 方法来判断和获取
- if (requestBodyJson.containsKey("status")) {
- // 参数存在,但需要判断其类型和值
- Object statusObj = requestBodyJson.get("status"); // 获取原始 Object
- if (statusObj == null) {
- // 如果 status 字段存在,但值为 JSON null
- status = -1;
- } else if (statusObj instanceof Number) {
- // 如果是数字类型 (Integer, Long, Double 等),直接获取其整数值
- status = ((Number) statusObj).intValue();
- } else if (statusObj instanceof String) {
- // 如果是字符串类型,尝试进行转换
- String statusStr = (String) statusObj;
- try {
- status = Integer.parseInt(statusStr);
- } catch (NumberFormatException e) {
- // 字符串不能转换为数字,报错
- renderJson(MyRet.fail("你输入的 status 格式不正确,期待一个数字,但却是一个无法解析的字符串: '" + statusStr + "'").setData(requestBodyJson));
- return;
- }
- } else {
- // 其他不支持的类型 (Boolean, Array, Object),报错
- renderJson(MyRet.fail("你输入的 status 类型不正确,期待一个数字,却是一个:" + statusObj.getClass().getSimpleName()).setData(requestBodyJson));
- return;
- }
- } else {
- // 如果 status 字段在 JSON 中完全不存在
- status = -1;
- }
-
- renderJson(service.findOrderByUser(user.getId(), status));
- }
- /**
- * 管理员调用的订单列表,包含查询条件,这个得有
- */
- @Before(LoginInterceptor.class)
- @RequiredRoleInterface({UserController.ROLE_SUPER_ADMIN})
- @EmptyInterface({"page_size", "page_number"})
- public void orderListByAdmin() {
- // --- 从 JSON 请求体中获取参数 ---
- JSONObject requestBodyJson = MyController.getJsonModelByRequestAndType(getRequest(), JSONObject.class);
- Integer orderStatus;
- try {
- orderStatus = requestBodyJson.getInteger("order_status");
- } catch (Exception e) {
- renderJson(MyRet.fail("你传入的 order_status 有些问题:" + e.getMessage()).setData(requestBodyJson));
- return;
- }
- // 页面大小
- String pageSizeStr = requestBodyJson.getString("page_size");
- int pageSizeInt;
- try {
- pageSizeInt = Integer.parseInt(pageSizeStr);
- if (pageSizeInt <= 0) {
- renderJson(MyRet.fail("页面大小(page_size)期待是正整数,你传的是: " + pageSizeStr));
- return;
- }
- } catch (Exception e) {
- renderJson(MyRet.fail("页面大小(page_size)格式不正确: " + e.getMessage()));
- return;
- }
- // 页码
- String pageNumberStr = requestBodyJson.getString("page_number");
- int pageNumberInt;
- try {
- pageNumberInt = Integer.parseInt(pageNumberStr);
- if (pageNumberInt <= 0) {
- renderJson(MyRet.fail("页码(page_number)期待是正整数,你传的是: " + pageNumberStr));
- return;
- }
- } catch (Exception e) {
- renderJson(MyRet.fail("页码(page_number)格式不正确: " + e.getMessage()));
- return;
- }
-
- renderJson(service.findForAdmin(pageNumberInt, pageSizeInt, orderStatus));
- }
- /**
- * 管理员更新状态,先不做
- */
- @Before(LoginInterceptor.class)
- @RequiredRoleInterface({UserController.ROLE_CHECK_ADMIN, UserController.ROLE_SUPER_ADMIN})
- public void updateByAdmin() {
- renderJson(MyRet.fail("后端还没做"));
- }
- /**
- * 获取订单的状态码以及对应的状态描述
- */
- @Before(LoginInterceptor.class)
- public void orderStatus() {
- List<Map<String, Object>> statusList = new ArrayList<>();
- for (OrderStatus status : OrderStatus.values()) {
- Map<String, Object> statusMap = new HashMap<>();
- statusMap.put("code", status.code);
- statusMap.put("desc", status.desc);
- statusList.add(statusMap);
- }
- renderJson(MyRet.ok("查询成功").setData(statusList));
- }
-
- // 订单状态枚举 (建议定义在单独的类或枚举中)
- public enum OrderStatus {
- INIT(0, "创建待初始化"),
- // PENDING_PAY(10, "待支付"),
- // PREORDER_PENDING_CONFIRM(20, "预购待确认"), // 预购已支付,等待转换为正式销售
- PREORDER_SUCCESS(30, "预购成功"), // 预购已成功,等待正式销售
- PAID(40, "已支付"), // 正式购买已支付,等待发货
- // DELIVERED(50, "已发货/已确权"),
- COMPLETED(60, "已完成"),
- // REFUNDING(70, "退款中"),
- REFUNDED(80, "退款成功"),
- // REFUND_FAILED(90, "退款失败"),
- CANCELED(100, "已取消");
- public final int code;
- public final String desc;
- OrderStatus(int code, String desc) {
- this.code = code;
- this.desc = desc;
- }
- }
- // 订单类型枚举
- public enum OrderType {
- FORMAL_PURCHASE(1, "正式购买"),
- PREORDER(2, "预购");
- public final int code;
- public final String desc;
- OrderType(int code, String desc) {
- this.code = code;
- this.desc = desc;
- }
- }
- }
|