package com.ruoyi.system.ControllerUtil; import com.alibaba.fastjson.JSONArray; import com.alibaba.fastjson.JSONObject; import com.ruoyi.common.utils.AmapUtils; import com.ruoyi.common.utils.DateUtils; import com.ruoyi.common.utils.spring.SpringUtils; import com.ruoyi.system.domain.*; import com.ruoyi.system.service.*; import org.apache.commons.lang3.StringUtils; import org.springframework.stereotype.Controller; import java.math.BigDecimal; import java.text.SimpleDateFormat; import java.time.LocalDate; import java.time.format.DateTimeFormatter; import java.util.*; import java.util.Arrays; import java.util.HashSet; import java.util.Set; /** * 服务订单Controller工具类 * 专注于订单编号生成、状态验证和用户地址处理等核心功能 */ @Controller public class OrderUtil { private static IUsersService usersService = SpringUtils.getBean(IUsersService.class); private static IOrderLogService orderLogService = SpringUtils.getBean(IOrderLogService.class); private static IGoodsOrderService goodsOrderService = SpringUtils.getBean(IGoodsOrderService.class); private static IUserDemandQuotationService userDemandQuotationService = SpringUtils.getBean(IUserDemandQuotationService.class); private static IUsersPayBeforService usersPayBeforService = SpringUtils.getBean(IUsersPayBeforService.class); private static IQuoteMaterialService quoteMaterialService = SpringUtils.getBean(IQuoteMaterialService.class); private static IServiceGoodsService serviceGoodsService = SpringUtils.getBean(IServiceGoodsService.class); private static OrderLogHandler orderLogHandler = SpringUtils.getBean(OrderLogHandler.class); // 订单编号生成相关常量 private static final String PREFIX = "C"; private static final int FIXED_LENGTH = 15; // 总长度为15 /** * 创建新用户对象 * * @return 新用户对象 */ public static JSONObject getbaojiajson(String json) { if (StringUtils.isNotBlank(json)) { JSONObject jsonObject = JSONObject.parseObject(json); JSONArray material = jsonObject.getJSONArray("material"); if (material != null) { for (int i = 0; i < material.size(); i++) { JSONObject jsonObjectmaterial = material.getJSONObject(i); String id = jsonObjectmaterial.getString("id"); if (StringUtils.isNotBlank(id)) { QuoteMaterial quoteMaterial = quoteMaterialService.selectQuoteMaterialById(Long.parseLong(id)); if (quoteMaterial != null) { jsonObjectmaterial.put("manyimages", JSONArray.parseArray(quoteMaterial.getManyimages())); jsonObjectmaterial.put("image", AppletControllerUtil.buildImageUrl(quoteMaterial.getImage())); if (StringUtils.isNotBlank(quoteMaterial.getContent()) && StringUtils.isNotBlank(quoteMaterial.getManyimages())) { jsonObjectmaterial.put("showtype", 1); } else { jsonObjectmaterial.put("showtype", 2); } jsonObjectmaterial.put("content", quoteMaterial.getContent()); } } } } // 直接返回原始jsonObject,其他字段都保留 return jsonObject; } return new JSONObject(); } /** * 生成订单编码的工具 * * @return 格式为 C + yyyyMMdd + 随机数字 的订单编号 */ public static String generateCode() { // 获取当前日期,格式化为yyyyMMdd String currentDate = LocalDate.now().format(DateTimeFormatter.BASIC_ISO_DATE); // 生成固定长度的随机数字字符串 int randomLength = FIXED_LENGTH - 1 - currentDate.length(); // 计算需要生成的随机数位数 StringBuilder randomBuilder = new StringBuilder(); Random random = new Random(); for (int i = 0; i < randomLength; i++) { randomBuilder.append(random.nextInt(10)); // 生成0-9之间的随机数字 } // 拼接最终的编码 return PREFIX + currentDate + randomBuilder.toString(); } /** * 验证订单状态变更是否合法 * * @param newOrder 新订单状态 * @param oldOrder 旧订单状态 * @return 验证结果,包含状态码和消息 */ public VerificationResult validateOrderStatusChange(Order newOrder, Order oldOrder) { // 基础参数验证 if (oldOrder == null) { return new VerificationResult(VerificationResult.CODE_FAILURE, "旧订单不能为空"); } Integer newStatus = newOrder.getJsonStatus(); Integer oldStatus = oldOrder.getJsonStatus() != null ? oldOrder.getJsonStatus() : 0; // 状态未发生变化,直接通过 if (Objects.equals(newStatus, oldStatus)) { return new VerificationResult(VerificationResult.CODE_SUCCESS, "NODATA"); } // 创建验证器实例并进行验证 OrderStatusValidator validator = new OrderStatusValidator(); return performStatusValidation(validator, newOrder, newStatus, oldStatus); } /** * 执行状态验证 * * @param validator 状态验证器 * @param newOrder 新订单 * @param newStatus 新状态 * @param oldStatus 旧状态 * @return 验证结果 */ private VerificationResult performStatusValidation(OrderStatusValidator validator, Order newOrder, Integer newStatus, Integer oldStatus) { switch (newStatus) { case OrderStatusValidator.STATUS_DISPATCH: return validator.validateDispatchStatus(newOrder, oldStatus); case OrderStatusValidator.STATUS_ACCEPT: return validator.validateAcceptStatus(oldStatus); case OrderStatusValidator.STATUS_SET_FEE: return validator.validateSetFeeStatus(newOrder, oldStatus); case OrderStatusValidator.STATUS_DEPART: return validator.validateDepartStatus(oldStatus); case OrderStatusValidator.STATUS_ARRIVE: return validator.validateArriveStatus(oldStatus); case OrderStatusValidator.STATUS_QUOTE: return validator.validateQuoteStatus(newOrder, oldStatus); case OrderStatusValidator.STATUS_START_SERVICE: return validator.validateStartServiceStatus(newOrder, oldStatus); case OrderStatusValidator.STATUS_PAUSE_SERVICE: return validator.validatePauseServiceStatus(newOrder, oldStatus); case OrderStatusValidator.STATUS_COMPLETE: return validator.validateCompleteStatus(newOrder, oldStatus); default: return new VerificationResult(VerificationResult.CODE_FAILURE, "无效的订单状态"); } } /** * 保存订单日志 * 委托给OrderLogHandler处理具体的业务逻辑 * * @param order 订单对象,包含状态和服务进度信息 * @return 影响的行数,大于0表示保存成功 * @throws IllegalArgumentException 当订单参数无效时 */ public int SaveOrderLog(Order order) { // 参数验证 validateOrderForLog(order); try { // 委托给OrderLogHandler处理 OrderLog orderLog = orderLogHandler.createBaseOrderLog(order); orderLogHandler.processOrderStatus(order, orderLog); // 保存订单日志 return orderLogService.insertOrderLog(orderLog); } catch (Exception e) { // 记录异常信息(这里可以添加日志记录) throw new RuntimeException("保存订单日志失败: " + e.getMessage(), e); } } /** * 验证订单日志参数 * * @param order 订单对象 */ private void validateOrderForLog(Order order) { if (order == null) { throw new IllegalArgumentException("订单对象不能为空"); } if (order.getId() == null || order.getOrderId() == null) { throw new IllegalArgumentException("订单ID和订单编号不能为空"); } } /** * 根据用户手机号判断用户是否存在,如果不存在则新增用户数据 * * @param phone 用户手机号 * @param addressName 地址名称 * @return 包含用户和地址信息的Map */ public Map isUser(String phone, String addressName) { Users existingUser = usersService.selectUsersByPhone(phone); if (existingUser == null) { // 用户不存在,创建新用户 Users newUser = createNewUser(phone); if (usersService.insertUsers(newUser) > 0) { return isAddAddressUser(newUser, addressName); } else { return createFailureResult(); } } else { return isAddAddressUser(existingUser, addressName); } } /** * 创建新用户对象 * * @param phone 用户手机号 * @return 新用户对象 */ private Users createNewUser(String phone) { Users user = new Users(); user.setName("微信用户"); user.setType("1"); user.setStatus(1); user.setPhone(phone); return user; } /** * 创建失败结果 * * @return 失败结果Map */ private Map createFailureResult() { Map map = new HashMap<>(); map.put("code", "0"); return map; } /** * 根据用户地址获取经纬度,然后存储地址数据 * * @param user 用户对象 * @param addressName 地址名称 * @return 包含处理结果的Map */ public Map isAddAddressUser(Users user, String addressName) { // 查询用户是否已有该地址 List existingAddresses = findExistingAddress(user.getId(), addressName); if (!existingAddresses.isEmpty()) { // 地址已存在 return createSuccessResult(user, existingAddresses.get(0)); } else { // 地址不存在,创建新地址 return createNewUserAddress(user, addressName); } } /** * 查找已存在的地址 * * @param userId 用户ID * @param addressName 地址名称 * @return 地址列表 */ private List findExistingAddress(Long userId, String addressName) { UserAddress queryAddress = new UserAddress(); queryAddress.setUid(userId); queryAddress.setAddressName(addressName); return SpringUtils.getBean(IUserAddressService.class).selectUserAddressList(queryAddress); } /** * 创建成功结果 * * @param user 用户对象 * @param address 地址对象 * @return 成功结果Map */ private Map createSuccessResult(Users user, UserAddress address) { Map map = new HashMap<>(); map.put("code", "1"); map.put("users", user); map.put("UserAddress", address); return map; } /** * 创建新的用户地址 * * @param user 用户对象 * @param addressName 地址名称 * @return 包含处理结果的Map */ private Map createNewUserAddress(Users user, String addressName) { try { UserAddress userAddress = buildUserAddress(user, addressName); // 获取地址的经纬度信息 setAddressCoordinates(userAddress, addressName); // 保存地址 if (SpringUtils.getBean(IUserAddressService.class).insertUserAddress(userAddress) > 0) { return createSuccessResult(user, userAddress); } else { return createFailureResult(); } } catch (Exception e) { Map map = new HashMap<>(); map.put("code", "0"); map.put("message", "创建地址失败: " + e.getMessage()); return map; } } /** * 构建用户地址对象 * * @param user 用户对象 * @param addressName 地址名称 * @return 用户地址对象 */ private UserAddress buildUserAddress(Users user, String addressName) { UserAddress userAddress = new UserAddress(); userAddress.setUid(user.getId()); userAddress.setName(user.getName()); userAddress.setPhone(user.getPhone()); userAddress.setAddressName(addressName); userAddress.setAddressInfo(addressName); userAddress.setInfo(addressName); userAddress.setIsDefault(1L); return userAddress; } /** * 设置地址的经纬度坐标 * * @param userAddress 用户地址对象 * @param addressName 地址名称 */ private void setAddressCoordinates(UserAddress userAddress, String addressName) { try { AmapUtils amapUtils = new AmapUtils(); JSONObject geoResult = amapUtils.geocode(addressName); if ("OK".equals(geoResult.get("info"))) { parseCoordinates(userAddress, geoResult); } } catch (Exception e) { // 地理编码失败,不影响地址保存,只是没有经纬度信息 System.err.println("获取地址坐标失败: " + e.getMessage()); } } /** * 解析坐标信息 * * @param userAddress 用户地址对象 * @param geoResult 地理编码结果 */ private void parseCoordinates(UserAddress userAddress, JSONObject geoResult) { JSONArray geocodes = geoResult.getJSONArray("geocodes"); if (geocodes != null && !geocodes.isEmpty()) { JSONObject firstGeocode = geocodes.getJSONObject(0); String location = firstGeocode.getString("location"); if (location != null && location.contains(",")) { String[] coordinates = location.split(","); userAddress.setLongitude(coordinates[0]); // 经度 userAddress.setLatitude(coordinates[1]); // 纬度 } } } /** * 拼团订单创建(参考AppleOrderController标准流程) * @param id 预支付记录ID * @return 新创建的订单对象,若未找到预支付记录则返回null */ public Order createGroupOrderByPayBeforId(Long id) { IUsersPayBeforService usersPayBeforService = SpringUtils.getBean(IUsersPayBeforService.class); IServiceGoodsService serviceGoodsService = SpringUtils.getBean(IServiceGoodsService.class); IUserAddressService userAddressService = SpringUtils.getBean(IUserAddressService.class); IOrderService orderService = SpringUtils.getBean(IOrderService.class); IOrderLogService orderLogService = SpringUtils.getBean(IOrderLogService.class); // 1. 查询预支付记录 UsersPayBefor payBefor = usersPayBeforService.selectUsersPayBeforById(id); if (payBefor == null) { return null; // 未找到预支付记录 } // 2. 查询商品信息 Long productId = null; try { productId = Long.valueOf(payBefor.getSku()); // 假设sku字段存储商品ID } catch (Exception e) { // 若sku不是商品ID,则尝试orderid等其它方式 } if (productId == null) { // 若无法获取商品ID,直接返回 return null; } ServiceGoods serviceGoods = serviceGoodsService.selectServiceGoodsById(productId); if (serviceGoods == null) { return null; } // 3. 查询地址信息 UserAddress userAddress = null; if (payBefor.getAddressid() != null) { userAddress = userAddressService.selectUserAddressById(payBefor.getAddressid()); } // GenerateCustomCode. // 4. 生成订单号 //com.ruoyi.system.ControllerUtil.GenerateCustomCode GenerateCustomCode = null; String orderId = payBefor.getOrderid() != null ? payBefor.getOrderid() : GenerateCustomCode.generCreateOrder("PT"); // 5. 创建订单 Order order = new Order(); order.setOdertype(4); // 拼团 order.setStatus(9L); // 状态9 order.setOrderId(orderId); order.setUid(payBefor.getUid()); order.setNum(1L); // 默认1,可根据业务调整 order.setProductId(serviceGoods.getId()); order.setProductName(serviceGoods.getTitle()); order.setSku(payBefor.getSku()); order.setTotalPrice(payBefor.getAllmoney()); order.setPayPrice(payBefor.getWxmoney()); order.setCreateTime(new Date()); order.setType(1); // 服务订单 order.setCreateType(1); // 用户自主下单 order.setUname(""); // 可补充用户名称 if (userAddress != null) { order.setAddressId(userAddress.getId()); order.setName(userAddress.getName()); order.setPhone(userAddress.getPhone()); order.setAddress(userAddress.getAddressInfo()); } // 可补充其它字段,如拼团价、优惠券、备注等 // 6. 保存订单 orderService.insertOrder(order); // 7. 添加订单日志 OrderLog orderLog = new OrderLog(); orderLog.setOid(order.getId()); orderLog.setOrderId(order.getOrderId()); orderLog.setTitle("拼团订单创建"); orderLog.setType(new BigDecimal("1.0")); orderLog.setContent("拼团订单创建成功"); orderLog.setRemark("拼团订单自动创建"); orderLogService.insertOrderLog(orderLog); return order; } /** * 订单价格确认工具方法 * 根据服务ID、SKU、是否一口价和订单类型计算最终价格 * * @param serviceId 服务ID * @param sku SKU信息,格式:{"精细擦玻璃":"20㎡全屋精细擦窗","pic":"","price":"236","groupprice":"100","seckillprice":"99","stock":"1000"} * @param type 订单类别 1=拼团 2=次卡 3=秒杀 * @return 计算后的价格,如果计算失败返回null * * 使用示例: * // 一口价订单(单规格) * BigDecimal price1 = OrderUtil.confirmOrderPrice(1L, null, 1, 1); * * // 一口价订单(多规格) * String sku = "{\"精细擦玻璃\":\"20㎡全屋精细擦窗\",\"pic\":\"\",\"price\":\"236\",\"groupprice\":\"100\",\"seckillprice\":\"99\",\"stock\":\"1000\"}"; * BigDecimal price2 = OrderUtil.confirmOrderPrice(1L, sku, 1, 1); * * // 拼团订单(单规格) * BigDecimal price3 = OrderUtil.confirmOrderPrice(1L, null, 2, 1); * * // 秒杀订单(多规格) * BigDecimal price4 = OrderUtil.confirmOrderPrice(1L, sku, 2, 3); */ public static BigDecimal confirmOrderPrice(Long serviceId, String sku, Integer type) { try { // // 参数验证 // if (serviceId == null || isyikoujia == null || type == null) { // return null; // } // 获取服务商品信息 IServiceGoodsService serviceGoodsService = SpringUtils.getBean(IServiceGoodsService.class); ServiceGoods serviceGoods = serviceGoodsService.selectServiceGoodsById(serviceId); if (serviceGoods == null) { return null; } // 获取sku_type,默认为单规格 Integer skuType = serviceGoods.getSkuType(); if (skuType == null) { skuType = 1; // 默认为单规格 } // // 如果是一口价 // if (isyikoujia == 1) { // // 如果是多规格商品,从SKU中获取price // if (skuType == 2 && sku != null && !sku.trim().isEmpty()) { // return handleMultiSkuPrice(sku, null); // 传入null表示获取基础价格 // } // // 单规格商品直接返回商品的基础价格 // return serviceGoods.getPrice(); // } // 如果不是一口价,需要根据sku_type和订单类型判断 // 单规格商品 (sku_type = 1) if (skuType == 1) { return handleSingleSkuPrice(serviceGoods, type); } // 多规格商品 (sku_type = 2) else if (skuType == 2) { return handleMultiSkuPrice(sku, type); } return null; } catch (Exception e) { // 记录异常信息(这里可以添加日志记录) System.err.println("订单价格确认失败: " + e.getMessage()); return null; } } /** * 处理单规格商品价格计算 * * @param serviceGoods 服务商品对象 * @param type 订单类型 1=拼团 2=次卡 3=秒杀 * @return 计算后的价格 */ private static BigDecimal handleSingleSkuPrice(ServiceGoods serviceGoods, Integer type) { switch (type) { case 1: // 拼团 return serviceGoods.getGroupprice(); case 3: // 秒杀 return serviceGoods.getFixedprice(); case 2: // 一口价 return serviceGoods.getPrice(); default: return serviceGoods.getPrice(); // 默认返回基础价格 } } /** * 处理多规格商品价格计算 * * @param sku SKU信息JSON字符串 * @param type 订单类型 1=拼团 2=次卡 3=秒杀,null表示获取基础价格 * @return 计算后的价格 */ private static BigDecimal handleMultiSkuPrice(String sku, Integer type) { try { if (sku == null || sku.trim().isEmpty()) { return null; } // 解析SKU JSON JSONObject skuJson = JSONObject.parseObject(sku); // 如果type为null,获取基础价格 if (type == null) { String priceStr = skuJson.getString("price"); return parsePrice(priceStr); } switch (type) { case 1: // 拼团 String groupPriceStr = skuJson.getString("groupprice"); return parsePrice(groupPriceStr); case 3: // 秒杀 String seckillPriceStr = skuJson.getString("seckillprice"); return parsePrice(seckillPriceStr); case 2: // 一口价 String priceStr = skuJson.getString("price"); return parsePrice(priceStr); default: String defaultPriceStr = skuJson.getString("price"); return parsePrice(defaultPriceStr); } } catch (Exception e) { System.err.println("解析多规格SKU价格失败: " + e.getMessage()); return null; } } /** * 解析价格字符串为BigDecimal * * @param priceStr 价格字符串 * @return BigDecimal价格,解析失败返回null */ private static BigDecimal parsePrice(String priceStr) { try { if (priceStr == null || priceStr.trim().isEmpty()) { return null; } return new BigDecimal(priceStr.trim()); } catch (NumberFormatException e) { System.err.println("价格格式解析失败: " + priceStr); return null; } } /** * 预支付回调处理方法 * @param payBefor 预支付记录 * @param user 用户实体 * @return 新建的订单对象(仅拼团),或处理结果Map */ public static Object prepayCallback(UsersPayBefor payBefor, Users user) throws Exception { System.out.println("=== prepayCallback 方法开始 ==="); System.out.println("输入参数 - payBefor: " + (payBefor != null ? payBefor.toString() : "null")); System.out.println("输入参数 - user: " + (user != null ? user.toString() : "null")); if (payBefor == null || user == null) { System.out.println("参数验证失败 - payBefor或user为空"); return null; } int type = payBefor.getType() != null ? payBefor.getType().intValue() : 0; System.out.println("支付类型 - type: " + type); System.out.println("服务类型 - servicetype: " + payBefor.getServicetype()); IOrderService orderService = SpringUtils.getBean(IOrderService.class); // 单个商品支付 if (type == 5){ GoodsOrder gorder = new GoodsOrder(); gorder.setMainOrderId(payBefor.getOrderid()); List gorders = goodsOrderService.selectGoodsOrderList(gorder); if (gorders != null && !gorders.isEmpty()){ for (GoodsOrder g: gorders){ g.setStatus(2L); g.setPayTime(DateUtils.getNowDate()); goodsOrderService.updateGoodsOrder(g); // BenefitPointsUtil.processBenefitPoints(g.getId(),g.getTotalPrice(),"2"); } } //String openid, String orderid,String price,String Address, String title,String reamk //微信发送消息 WXsendMsgUtil.sendUserForMoneySuccess(user.getOpenid(),payBefor.getOrderid(),payBefor.getAllmoney().toString(),gorder.getAddress(),"商品支付","商品支付成功"); // updateInventoryAndSales(gorder.getOrderId(), 2); //处理服务金 return payBefor.getOrderid(); } if (type == 6){ GoodsOrder gorder = new GoodsOrder(); gorder.setMainOrderId(payBefor.getOrderid()); System.out.println("查询拼团商品订单 - orderid: " + payBefor.getOrderid()); List orderslist =goodsOrderService.selectGoodsOrderList(gorder); System.out.println("查询到的商品订单数量: " + (orderslist != null ? orderslist.size() : 0)); if (!orderslist.isEmpty()){ System.out.println("开始更新商品订单状态"); for (GoodsOrder goodsOrder : orderslist){ System.out.println("更新商品订单 - ID: " + goodsOrder.getId() + ", 原状态: " + goodsOrder.getStatus()); goodsOrder.setStatus(2L); goodsOrder.setPayTime(DateUtils.getNowDate()); goodsOrder.setTransactionId(payBefor.getPaycode()); int updateResult = goodsOrderService.updateGoodsOrder(goodsOrder); System.out.println("商品订单更新结果: " + updateResult); } } else { System.out.println("未找到相关商品订单"); } System.out.println("拼团商品订单处理完成,返回orderid: " + payBefor.getOrderid()); //微信发送消息给客户 WXsendMsgUtil.sendUserForMoneySuccess(user.getOpenid(),payBefor.getOrderid(),payBefor.getAllmoney().toString(),gorder.getAddress(),"商品支付","商品支付成功"); return payBefor.getOrderid(); } // 7上门费 8定金 9尾款 10差价 if (type == 11) { GoodsOrder order = goodsOrderService.selectGoodsOrderByorderId(payBefor.getOrderid()); if (order != null) { order.setStatus(2L); order.setPayTime(DateUtils.getNowDate()); order.setTransactionId(payBefor.getPaycode()); //BenefitPointsUtil.processBenefitPoints(order.getId(),order.getTotalPrice(),"2"); //微信发送消息 WXsendMsgUtil.sendUserForMoneySuccess(user.getOpenid(),payBefor.getOrderid(),payBefor.getAllmoney().toString(),order.getAddress(),"商品支付","商品支付成功"); int updateResult = goodsOrderService.updateGoodsOrder(order); } return null; } if (type == 7) { // 4. 查询对应的订单日志(上门费记录) OrderLog orderLog = orderLogService.selectOrderLogById(payBefor.getOid()); if (orderLog != null) { // 6. 更新上门费支付状态 orderLog.setPaid(2L); // 1:已支付 //orderLog.setWorkerCost(new BigDecimal(totalFee)); orderLog.setPayTime(System.currentTimeMillis()/1000); //orderLog.setUpdateTime(new Date()); int updateResult = orderLogService.updateOrderLog(orderLog); Order order = orderService.selectOrderByOrderId(payBefor.getLastorderid()); if (order != null){ order.setPayPrice(order.getPayPrice().add(payBefor.getAllmoney())); orderService.updateOrder(order); } if (updateResult > 0){ ISTOPAYSIZE(payBefor.getLastorderid()); } // int paynum=usersPayBeforService.countByLastOrderIdAndStatus(order.getOrderId(), 1); // Order order = orderService.selectOrderByOrderId(payBefor.getLastorderid()); // if (order != null) { // if (order.getStatus() == 6){ // // } // } WXsendMsgUtil.sendUserForMoneySuccess(user.getOpenid(),payBefor.getOrderid(),payBefor.getAllmoney().toString(),order.getAddress(),"上门费支付","上门费支付成功"); //微信发送消息给师傅 Users master = usersService.selectUsersById(order.getWorkerId()); WXsendMsgUtil.sendUserPayDoorMoneyForWorker(master.getOpenid(),order,"上门费支付成功"); } //微信发送消息 return 1; } if (type == 8) { // 4. 查询对应的订单日志(定金记录) OrderLog orderLog = orderLogService.selectOrderLogById(payBefor.getOid()); if (orderLog != null) { // 6. 更新定金支付状态 orderLog.setDepPaid(2); // 1:已支付 orderLog.setDepPayTime(System.currentTimeMillis()/1000); int updateResult = orderLogService.updateOrderLog(orderLog); if (updateResult > 0){ Order order = orderService.selectOrderByOrderId(payBefor.getLastorderid()); if (order != null){ order.setPayPrice(order.getPayPrice().add(payBefor.getAllmoney())); orderService.updateOrder(order); } WXsendMsgUtil.sendUserForMoneySuccess(user.getOpenid(),payBefor.getOrderid(),payBefor.getAllmoney().toString(),order.getAddress(),"定金支付","定金支付成功"); //微信发送消息给师傅 Users master = usersService.selectUsersById(order.getWorkerId()); WXsendMsgUtil.sendUserPayDoorMoneyForWorker(master.getOpenid(),order,"定金支付成功"); ISTOPAYSIZE(payBefor.getLastorderid()); } } return 1; } if (type == 9) { // 4. 查询对应的服务订单 Order order = orderService.selectOrderByOrderId(payBefor.getLastorderid()); if (order != null) { order.setPayPrice(order.getPayPrice().add(payBefor.getAllmoney())); orderService.updateOrder(order); //更新最新的一条日志信息 OrderLog orderLog = orderLogService.selectOrderLogById(payBefor.getOid()); orderLog.setPayTime(System.currentTimeMillis()/1000); orderLog.setPaid(2L); int updateResult = orderLogService.updateOrderLog(orderLog); // OrderLog orderLog1 = orderLogService.selectOrderLogById(payBefor.getOid()); // 6. 更新订单支付状态 // order.setStatus(4L); // 2:已支付 // // order.setTransactionId(transactionId); // order.setPayTime(new Date()); // //order.setUpdateTime(new Date()); // // 计算实际支付金额(分转换为元) // BigDecimal paidAmount = orderLog1.getPrice(); // order.setPayPrice(paidAmount); // int updateResult = orderService.updateOrder(order); if (updateResult > 0){ ISTOPAYSIZE(payBefor.getLastorderid()); } WXsendMsgUtil.sendUserForMoneySuccess(user.getOpenid(),payBefor.getOrderid(),payBefor.getAllmoney().toString(),order.getAddress(),"尾款支付","尾款支付成功"); //微信发送消息给师傅 Users master = usersService.selectUsersById(order.getWorkerId()); WXsendMsgUtil.sendUserPayDoorMoneyForWorker(master.getOpenid(),order,"尾款支付成功"); } return 1; } if (type == 10) { OrderLog orderLog = orderLogService.selectOrderLogById(payBefor.getOid()); if (orderLog != null) { // 6. 更新定金支付状态 orderLog.setCjPaid(2L); orderLog.setDepPayTime(System.currentTimeMillis()/1000); int updateResult = orderLogService.updateOrderLog(orderLog); if (updateResult > 0){ Order order = orderService.selectOrderByOrderId(payBefor.getLastorderid()); if (order != null){ order.setPayPrice(order.getPayPrice().add(payBefor.getAllmoney())); orderService.updateOrder(order); WXsendMsgUtil.sendUserForMoneySuccess(user.getOpenid(),payBefor.getOrderid(),payBefor.getAllmoney().toString(),order.getAddress(),"差价支付","差价支付成功"); //微信发送消息给师傅 Users master = usersService.selectUsersById(order.getWorkerId()); WXsendMsgUtil.sendUserPayDoorMoneyForWorker(master.getOpenid(),order,"差价支付成功"); } ISTOPAYSIZE(payBefor.getLastorderid()); } } return 1; } //需求报价 if (type == 4) { System.out.println("=== 处理需求报价订单 ==="); System.out.println("查询订单 - orderid: " + payBefor.getOrderid()); // 查询订单 Order order = orderService.selectOrderByOrderId(payBefor.getOrderid()); System.out.println("查询到的订单: " + (order != null ? order.toString() : "null")); if (order != null) { UserDemandQuotation userDemandQuotation=userDemandQuotationService.selectUserDemandQuotationById(payBefor.getBaojiaid()); if (userDemandQuotation!=null) { System.out.println("找到报价记录,开始处理"); //UserDemandQuotation userDemandQuotation=userDemandQuotationList.getFirst(); System.out.println("报价记录详情: " + userDemandQuotation.toString()); System.out.println("更新报价状态为被选中"); userDemandQuotation.setStatus(2L);//被选中状态 int quotationUpdateResult = userDemandQuotationService.updateUserDemandQuotation(userDemandQuotation); System.out.println("报价状态更新结果: " + quotationUpdateResult); System.out.println("查询师傅信息 - workerId: " + userDemandQuotation.getWorkerid()); Users users = usersService.selectUsersById(userDemandQuotation.getWorkerid()); System.out.println("查询到的师傅信息: " + (users != null ? users.toString() : "null")); if (users != null){ order.setStatus(2L); order.setJsonStatus(2); order.setPayPrice(order.getPayPrice().add(userDemandQuotation.getMoney())); order.setFirstWorkerId(users.getId()); order.setIsAccept(1); order.setWorkerPhone(users.getPhone()); order.setTotalPrice(userDemandQuotation.getMoney()); order.setWorkerId(users.getId()); int orderUpdateResult = orderService.updateOrder(order); System.out.println("订单更新结果: " + orderUpdateResult); // 添加订单日志 System.out.println("添加订单日志"); OrderLog orderLog = new OrderLog(); orderLog.setOid(order.getId()); orderLog.setOrderId(order.getOrderId()); orderLog.setTitle("报价订单支付成功"); orderLog.setType(new BigDecimal("2.0")); JSONObject jsonObject = new JSONObject(); jsonObject.put("name", "报价订单支付成功,待服务,师傅"+users.getName()); orderLog.setContent(jsonObject.toJSONString()); int logInsertResult = orderLogService.insertOrderLog(orderLog); //开始派单 if (logInsertResult>0){ DispatchUtil.dispatchOrder(order.getId()); } System.out.println("订单日志插入结果: " + logInsertResult); System.out.println("需求报价订单处理完成"); } else { System.out.println("未找到师傅信息,处理失败"); } } else { System.out.println("未找到报价记录,处理失败"); } System.out.println("需求报价订单处理完成,返回order: " + (order != null ? order.getOrderId() : "null")); WXsendMsgUtil.sendUserForMoneySuccess(user.getOpenid(),payBefor.getOrderid(),payBefor.getAllmoney().toString(),order.getAddress(),"报价支付","师傅报价支付成功"); // updateInventoryAndSales(order.getOrderId(), 1); //dispatchOrderCheck(order); return order; } else { System.out.println("未找到订单,处理失败"); } System.out.println("需求报价订单处理失败,返回null"); return null; } //次卡购买的回调 if (type == 12) { System.out.println("处理次卡订单"); IUserUseSecondaryCardService userUseSecondaryCardService = SpringUtils.getBean(IUserUseSecondaryCardService.class); UserUseSecondaryCard userUseSecondaryCard = userUseSecondaryCardService.selectUserUseSecondaryCardByorderId(payBefor.getOrderid()); System.out.println("查询到的次卡记录: " + (userUseSecondaryCard != null ? userUseSecondaryCard.toString() : "null")); if (userUseSecondaryCard != null) { System.out.println("更新次卡状态"); userUseSecondaryCard.setStatus(1L); int cardUpdateResult = userUseSecondaryCardService.updateUserUseSecondaryCard(userUseSecondaryCard); System.out.println("次卡状态更新结果: " + cardUpdateResult); WXsendMsgUtil.sendUserForMoneySuccess(user.getOpenid(),payBefor.getOrderid(),payBefor.getAllmoney().toString(),"","次卡支付","次卡支付成功"); } return null; } //秒杀的回调 if (type == 2) { Order order = orderService.selectOrderByOrderId(payBefor.getOrderid()); System.out.println("查询到的订单: " + (order != null ? order.toString() : "null")); if (order != null) { System.out.println("添加订单日志"); OrderLog orderLog = new OrderLog(); orderLog.setOid(order.getId()); orderLog.setOrderId(order.getOrderId()); orderLog.setTitle("订单支付"); orderLog.setType(new BigDecimal("1.1")); JSONObject jsonObject = new JSONObject(); jsonObject.put("name", "订单支付成功,待派单"); orderLog.setContent(jsonObject.toJSONString()); int logInsertResult = orderLogService.insertOrderLog(orderLog); System.out.println("订单日志插入结果: " + logInsertResult); System.out.println("更新订单状态为待派单"); order.setPayPrice(order.getPayPrice().add(payBefor.getAllmoney())); order.setStatus(1L); // 1=待预约 int orderUpdateResult = orderService.updateOrder(order); System.out.println("订单状态更新结果: " + orderUpdateResult); System.out.println("普通订单处理完成,返回order: " + order.getOrderId()); //派单效验 // dispatchOrderCheck(order); //库存及销量变更 // updateInventoryAndSales(order.getOrderId(), 1); //开始派单 派单模式 1:系统派单 2:后台手动派单 3:指定工人 if (logInsertResult>0){ DispatchUtil.dispatchOrder(order.getId()); } // if (logInsertResult>0){ // if (order.getReceiveType()==1){ // DispatchUtil.dispatchOrder(order.getId()); // }else{ // if (order.getReceiveType()==3){ // ServiceGoods serviceGoods = serviceGoodsService.selectServiceGoodsById(order.getProductId()); // if (serviceGoods!=null){ // Users newworker = usersService.selectUsersById(order.getWorkerId()); // } // // } // } // } WXsendMsgUtil.sendUserForMoneySuccess(user.getOpenid(),payBefor.getOrderid(),payBefor.getAllmoney().toString(),order.getAddress(),"秒杀订单支付","秒杀订单支付成功"); return order; } else { System.out.println("未找到订单"); } return null; } if (type == 1) { System.out.println("=== 处理拼团订单 ==="); String ptorderid= payBefor.getOrderid(); System.out.println("拼团订单ID: " + ptorderid); //第一步创建订单状态为待成团 Order order = new Order(); order.setOdertype(1); // 拼团 order.setStatus(9L); // 9=待成团 order.setOrderId(ptorderid); order.setUid(payBefor.getUid()); order.setNum(payBefor.getNum()); // 默认1,可根据业务调整 //order.setProductId(payBefor.getSku() != null ? Long.valueOf(payBefor.getSku()) : null); // 假设sku字段存储商品ID order.setProductId(payBefor.getServiceid()); // 假设sku字段存储商品ID System.out.println("商品ID: " + payBefor.getServiceid()); IServiceGoodsService serviceGoodsService = SpringUtils.getBean(IServiceGoodsService.class); ServiceGoods serviceGoods = serviceGoodsService.selectServiceGoodsById(payBefor.getServiceid()); System.out.println("查询到的商品信息: " + (serviceGoods != null ? serviceGoods.toString() : "null")); //派单模式 Integer dispatchtype=serviceGoods.getDispatchtype(); if (dispatchtype==null){ dispatchtype=1; } // 商品名、图片、类型、价格等 String productName = ""; if (serviceGoods != null) { productName = serviceGoods.getTitle(); System.out.println("商品名称: " + productName); } order.setProductName(productName); order.setSku(payBefor.getSku()); order.setTotalPrice(payBefor.getAllmoney()); order.setBigtype(3); order.setPayPrice(payBefor.getWxmoney()); order.setCreateTime(new Date()); order.setType(1); // 服务订单 order.setCreateType(1); // 用户自主下单 order.setUname(user.getName()); //20250809处理过的一个故障 order.setPayPrice(payBefor.getAllmoney()); order.setReceiveType(Long.valueOf(dispatchtype)); // 自由抢单 // 预约时间 System.out.println("预约时间: " + payBefor.getMaketime()); if (payBefor.getMaketime() != null && !payBefor.getMaketime().isEmpty()) { String[] makeTimeArr = payBefor.getMaketime().split(" "); if (makeTimeArr.length == 2) { try { SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd"); Date date = sdf.parse(makeTimeArr[0]); order.setMakeTime(date.getTime() / 1000); order.setMakeHour(makeTimeArr[1]); } catch (Exception e) { // 忽略解析异常 } } } System.out.println("地址ID: " + payBefor.getAddressid()); if (payBefor.getAddressid() != null) { IUserAddressService userAddressService = SpringUtils.getBean(IUserAddressService.class); UserAddress userAddress = userAddressService.selectUserAddressById(payBefor.getAddressid()); System.out.println("查询到的地址信息: " + (userAddress != null ? userAddress.toString() : "null")); if (userAddress != null) { order.setAddressId(userAddress.getId()); order.setName(userAddress.getName()); order.setPhone(userAddress.getPhone()); order.setAddress(userAddress.getAddressInfo()); System.out.println("地址信息设置完成"); } } // 可补充其它字段,如拼团价、优惠券、备注等 System.out.println("开始插入订单"); int orderInsertResult = orderService.insertOrder(order); System.out.println("订单插入结果: " + orderInsertResult + ", 订单ID: " + order.getId()); // 添加订单日志 System.out.println("添加订单日志"); IOrderLogService orderLogService = SpringUtils.getBean(IOrderLogService.class); //IOrderService orderService = SpringUtils.getBean(IOrderService.class); OrderLog orderLog = new OrderLog(); orderLog.setOid(order.getId()); orderLog.setOrderId(order.getOrderId()); orderLog.setTitle("订单生成"); orderLog.setType(new BigDecimal("1.0")); JSONObject jsonObject = new JSONObject(); jsonObject.put("name", "订单创建成功,待成团"); orderLog.setContent(jsonObject.toJSONString()); int logInsertResult = orderLogService.insertOrderLog(orderLog); System.out.println("订单日志插入结果: " + logInsertResult); //第二步修改拼团时候的状态 System.out.println("=== 第二步:修改拼团状态 ==="); IUserGroupBuyingService userGroupBuyingService = SpringUtils.getBean(IUserGroupBuyingService.class); UserGroupBuying userGroupBuying = userGroupBuyingService.selectUserGroupBuyingByptorderid(ptorderid); System.out.println("查询到的拼团记录: " + (userGroupBuying != null ? userGroupBuying.toString() : "null")); if (userGroupBuying != null){ System.out.println("更新拼团状态"); userGroupBuying.setStatus(1L); userGroupBuying.setPaystatus(1L); int groupUpdateResult = userGroupBuyingService.updateUserGroupBuying(userGroupBuying); System.out.println("拼团状态更新结果: " + groupUpdateResult); } else { System.out.println("未找到拼团记录"); } //第三步核验团数据,如果满足条件都修改为待预约 System.out.println("=== 第三步:核验团数据 ==="); System.out.println("团订单ID: " + payBefor.getGrouporderid()); System.out.println("商品拼团人数要求: " + (serviceGoods != null ? serviceGoods.getGroupnum() : "null")); UserGroupBuying userGroupBuyingData = new UserGroupBuying(); userGroupBuyingData.setOrderid(payBefor.getGrouporderid()); userGroupBuyingData.setPaystatus(1L); userGroupBuyingData.setStatus(1L); List userGroupBuyingList = userGroupBuyingService.selectUserGroupBuyingList(userGroupBuyingData); System.out.println("已支付的拼团人数: " + (userGroupBuyingList != null ? userGroupBuyingList.size() : 0)); if (userGroupBuyingList != null && serviceGoods != null && userGroupBuyingList.size() >= serviceGoods.getGroupnum()) { System.out.println("拼团人数已满足要求,开始更新所有拼团订单状态"); for (UserGroupBuying groupBuying1 : userGroupBuyingList) { System.out.println("更新拼团记录 - ID: " + groupBuying1.getId() + ", 订单ID: " + groupBuying1.getPtorderid()); groupBuying1.setStatus(2L); groupBuying1.setPaystatus(1L); int groupUpdateResult = userGroupBuyingService.updateUserGroupBuying(groupBuying1); System.out.println("拼团记录更新结果: " + groupUpdateResult); Order orderdata = orderService.selectOrderByOrderId(groupBuying1.getPtorderid()); System.out.println("查询到的订单: " + (orderdata != null ? orderdata.getOrderId() : "null")); if (orderdata != null) { System.out.println("更新订单状态为已成团待预约"); orderdata.setStatus(10L);//已成团待预约 int orderUpdateResult = orderService.updateOrder(orderdata); System.out.println("订单状态更新结果: " + orderUpdateResult); } } System.out.println("拼团成功,所有订单状态已更新"); } System.out.println("拼团订单处理完成,返回order: " + order.getOrderId()); //派单效验 dispatchOrderCheck(order); WXsendMsgUtil.sendUserForMoneySuccess(user.getOpenid(),payBefor.getOrderid(),payBefor.getAllmoney().toString(),order.getAddress(),"拼团订单支付","拼团订单支付成功"); //库存及销量变更 // updateInventoryAndSales(ptorderid, 1); return order; } else { // 其他类型 System.out.println("=== 处理其他类型订单 ==="); System.out.println("订单ID: " + payBefor.getOrderid()); // 只更新订单状态为待预约(假设为1) if (payBefor.getOrderid() != null) { if (type == 2){ System.out.println("处理次卡订单"); IUserUseSecondaryCardService userUseSecondaryCardService = SpringUtils.getBean(IUserUseSecondaryCardService.class); UserUseSecondaryCard userUseSecondaryCard = userUseSecondaryCardService.selectUserUseSecondaryCardByorderId(payBefor.getOrderid()); System.out.println("查询到的次卡记录: " + (userUseSecondaryCard != null ? userUseSecondaryCard.toString() : "null")); if (userUseSecondaryCard != null){ System.out.println("更新次卡状态"); userUseSecondaryCard.setStatus(1L); int cardUpdateResult = userUseSecondaryCardService.updateUserUseSecondaryCard(userUseSecondaryCard); System.out.println("次卡状态更新结果: " + cardUpdateResult); } else { Order order = orderService.selectOrderByOrderId(payBefor.getOrderid()); System.out.println("添加订单日志"); OrderLog orderLog = new OrderLog(); orderLog.setOid(order.getId()); orderLog.setOrderId(order.getOrderId()); orderLog.setTitle("订单支付"); orderLog.setType(new BigDecimal("1.1")); JSONObject jsonObject = new JSONObject(); jsonObject.put("name", "一口价订单支付成功,待派单"); orderLog.setContent(jsonObject.toJSONString()); int logInsertResult = orderLogService.insertOrderLog(orderLog); if (logInsertResult>0){ DispatchUtil.dispatchOrder(order.getId()); } order.setPayPrice(order.getPayPrice().add(payBefor.getAllmoney())); order.setStatus(1L); // 1=待预约 int orderUpdateResult = orderService.updateOrder(order); dispatchOrderCheck(order); WXsendMsgUtil.sendUserForMoneySuccess(user.getOpenid(),payBefor.getOrderid(),payBefor.getAllmoney().toString(),order.getAddress(),"次卡下单","次卡下单成功"); return order; } System.out.println("次卡订单处理完成,返回: " + (userUseSecondaryCard != null ? userUseSecondaryCard.getId() : "null")); return userUseSecondaryCard; }else{ System.out.println("处理普通订单"); Order order = orderService.selectOrderByOrderId(payBefor.getOrderid()); System.out.println("查询到的订单: " + (order != null ? order.toString() : "null")); if (order != null) { System.out.println("添加订单日志"); OrderLog orderLog = new OrderLog(); orderLog.setOid(order.getId()); orderLog.setOrderId(order.getOrderId()); orderLog.setTitle("订单支付"); orderLog.setType(new BigDecimal("1.1")); JSONObject jsonObject = new JSONObject(); jsonObject.put("name", "订单支付成功,待派单"); orderLog.setContent(jsonObject.toJSONString()); int logInsertResult = orderLogService.insertOrderLog(orderLog); if (logInsertResult>0){ DispatchUtil.dispatchOrder(order.getId()); } System.out.println("订单日志插入结果: " + logInsertResult); System.out.println("更新订单状态为待派单"); order.setPayPrice(order.getPayPrice().add(payBefor.getAllmoney())); order.setStatus(1L); // 1=待预约 int orderUpdateResult = orderService.updateOrder(order); System.out.println("订单状态更新结果: " + orderUpdateResult); System.out.println("普通订单处理完成,返回order: " + order.getOrderId()); dispatchOrderCheck(order); WXsendMsgUtil.sendUserForMoneySuccess(user.getOpenid(),payBefor.getOrderid(),payBefor.getAllmoney().toString(),order.getAddress(),"预约下单","预约下单成功"); return order; } else { System.out.println("未找到订单"); } } } else { System.out.println("订单ID为空,无法处理"); } System.out.println("其他类型订单处理失败,返回null"); return null; } } /** * 核验拼团订单 * @param orderId 主订单号 * @param uid 用户ID * @return 处理结果 true=拼团成功 false=未成团 */ public static boolean verifyGroupOrder(String orderId, Long uid) { IUserGroupBuyingService userGroupBuyingService = SpringUtils.getBean(IUserGroupBuyingService.class); IServiceGoodsService serviceGoodsService = SpringUtils.getBean(IServiceGoodsService.class); IOrderService orderService = SpringUtils.getBean(IOrderService.class); // 1. 查询拼团记录 UserGroupBuying query = new UserGroupBuying(); query.setOrderid(orderId); query.setUid(uid); List groupList = userGroupBuyingService.selectUserGroupBuyingList(query); if (groupList == null || groupList.isEmpty()) { return false; } UserGroupBuying group = groupList.get(0); // 2. 设置paystatus=1 group.setPaystatus(1L); userGroupBuyingService.updateUserGroupBuying(group); // 3. 查询服务详情 ServiceGoods serviceGoods = serviceGoodsService.selectServiceGoodsById(group.getProductId()); if (serviceGoods == null) { return false; } Integer groupNum = serviceGoods.getGroupnum(); if (groupNum == null || groupNum <= 0) { return false; } // 4. 统计已支付人数 UserGroupBuying paidQuery = new UserGroupBuying(); paidQuery.setOrderid(orderId); paidQuery.setPaystatus(1L); List paidList = userGroupBuyingService.selectUserGroupBuyingList(paidQuery); int paidCount = paidList != null ? paidList.size() : 0; // 5. 如果已支付人数达到拼团人数,更新订单状态 if (paidCount >= groupNum) { // 查询所有mainOrderId=orderId的订单 Order orderQuery = new Order(); orderQuery.setMainOrderId(orderId); List orderList = orderService.selectOrderList(orderQuery); if (orderList != null) { for (Order o : orderList) { o.setStatus(1L); // 1=待预约 orderService.updateOrder(o); } } return true; } return false; } /** * 用户付款后回调中修改订单状态的辅助方法 * 逻辑:如果用户付款的时候,查询paynum=0(没有可付款的数据), * 且订单最新状态大于等于6(师傅已完成),那么就修改订单为已完成状态 * * @param orderid 订单ID * @return 剩余可付款数量 */ public static int ISTOPAYSIZE(String orderid) { try { IUsersPayBeforService usersPayBeforService = SpringUtils.getBean(IUsersPayBeforService.class); IOrderService orderService = SpringUtils.getBean(IOrderService.class); // 1. 查询剩余可付款数量 int paynum = usersPayBeforService.countByLastOrderIdAndStatus(orderid); System.out.println("订单 " + orderid + " 剩余可付款数量: " + paynum); // 2. 查询订单信息 Order order = orderService.selectOrderByOrderId(orderid); if (order == null) { System.err.println("未找到订单信息,orderid: " + orderid); return paynum; } // 3. 查询订单最新日志 OrderLog orderLog = orderLogService.selectDataTheFirstNew(order.getId()); if (orderLog == null) { System.err.println("未找到订单最新日志,orderid: " + orderid); return paynum; } // 4. 判断订单最新状态是否大于等于6(师傅已完成) BigDecimal latestLogType = orderLog.getType(); boolean isWorkerCompleted = latestLogType != null && latestLogType.compareTo(new BigDecimal("6")) >= 0; System.out.println("订单 " + orderid + " 最新日志类型: " + latestLogType + ", 师傅是否已完成: " + isWorkerCompleted); // 5. 如果paynum=0且师傅已完成,则修改订单为已完成状态 if (paynum <= 0 && isWorkerCompleted) { System.out.println("订单 " + orderid + " 满足完成条件:无剩余付款且师傅已完成,开始修改订单状态"); // 修改订单状态为已完成 order.setStatus(4L); // 4:已完成 order.setReceiveType(3L); // 3:完成类型 order.setJsonStatus(9); // 9:已完成 order.setLogJson("{\"type\":8}"); // 8:完成状态 int updateResult = orderService.updateOrder(order); System.out.println("订单状态更新结果: " + updateResult); // 处理师傅佣金 if (order.getWorkerId() != null) { Users worker = usersService.selectUsersById(order.getWorkerId()); if (worker != null) { JSONObject commissionResult = WorkerCommissionUtil.calculateCompleteWorkerCommission(order.getId()); // WorkerCommissionUtil.processWorkerCommission(order, worker); System.out.println("师傅佣金处理完成,师傅ID: " + order.getWorkerId()); } } // // 处理用户通知(可选) // if (order.getUid() != null) { // Users user = usersService.selectUsersById(order.getUid()); // if (user != null) { // // 这里可以添加微信通知等逻辑 // // ServiceGoods serviceGoods = serviceGoodsService.selectServiceGoodsById(order.getProductId()); // // WXsendMsgUtil.sendWorkerFinishOrder(user.getOpenid(), order, serviceGoods); // System.out.println("用户通知处理完成,用户ID: " + order.getUid()); // } // } System.out.println("订单 " + orderid + " 状态修改为已完成"); } // else { // System.out.println("订单 " + orderid + " 不满足完成条件:剩余付款数量=" + paynum + ", 师傅是否已完成=" + isWorkerCompleted); // // // 如果还有剩余付款,但师傅已完成,可以设置为待付款状态 // if (paynum > 0 && isWorkerCompleted) { // order.setStatus(6L); // 6:待付款 // order.setJsonStatus(9); // 9:已完成 // int updateResult = orderService.updateOrder(order); // System.out.println("订单状态更新为待付款,更新结果: " + updateResult); // } // } return paynum; } catch (Exception e) { System.err.println("ISTOPAYSIZE方法执行异常,orderid: " + orderid + ", 错误: " + e.getMessage()); e.printStackTrace(); return 0; } } public static int addgoodsorderlog(Long oid,String orderId,String title,String type,JSONObject content,Long ordertype) { OrderLog orderLog = new OrderLog(); orderLog.setOid(oid); orderLog.setOrderId(orderId); orderLog.setTitle( title); orderLog.setContent(content.toJSONString()); orderLog.setType(new BigDecimal(type)); orderLog.setOrdertype(ordertype); orderLogService.insertOrderLog(orderLog); return 1; } /** * 派单效验方法 * @param order 订单对象,需包含 productId * @return 处理结果Map,包含派单方式、绑定工人等信息 */ public static Map dispatchOrderCheck(Order order) { IOrderService orderService = SpringUtils.getBean(IOrderService.class); Map result = new HashMap<>(); if (order == null || order.getProductId() == null) { result.put("success", false); result.put("msg", "订单或商品ID为空"); return result; } IServiceGoodsService serviceGoodsService = SpringUtils.getBean(IServiceGoodsService.class); IOrderLogService orderLogService = SpringUtils.getBean(IOrderLogService.class); ServiceGoods serviceGoods = serviceGoodsService.selectServiceGoodsById(order.getProductId()); if (serviceGoods == null) { result.put("success", false); result.put("msg", "未找到对应服务商品"); return result; } if(order.getOdertype()==4){ return result; } Integer dispatchType = serviceGoods.getDispatchtype(); result.put("dispatchtype", dispatchType); if (dispatchType != null && dispatchType == 3) { // 指定工人派单 String workerIdsStr = serviceGoods.getWorkerids(); result.put("workerids", workerIdsStr); if (workerIdsStr != null) { Users users = usersService.selectUsersById(Long.valueOf(workerIdsStr)); order.setStatus(1L); order.setFirstWorkerId(users.getId()); // order.setIsAccept(1); order.setWorkerPhone(users.getPhone()); order.setWorkerId(users.getId()); int orderUpdateResult = orderService.updateOrder(order); // 添加订单日志 OrderLog orderLog = new OrderLog(); orderLog.setOid(order.getId()); orderLog.setOrderId(order.getOrderId()); orderLog.setTitle("订单支付成功"); orderLog.setType(new BigDecimal("1.0")); JSONObject jsonObject = new JSONObject(); jsonObject.put("name", "一口价订单支付成功,待服务,师傅"+users.getName()); orderLog.setContent(jsonObject.toJSONString()); int logInsertResult = orderLogService.insertOrderLog(orderLog); return result; } else { result.put("success", false); result.put("msg", "服务未配置指定工人"); return result; } } // 智能派单 - 调用DispatchUtil进行智能派单 try { System.out.println("【OrderUtil】开始智能派单,订单ID: " + order.getId()); DispatchUtil.DispatchResult dispatchResult = DispatchUtil.dispatchOrder(order.getId()); if (dispatchResult.isSuccess()) { Users selectedWorker = dispatchResult.getWorker(); System.out.println("【OrderUtil】智能派单成功,选中师傅: " + selectedWorker.getName()); // 更新订单状态和师傅信息 order.setStatus(1L); // 待服务 order.setWorkerId(selectedWorker.getId()); order.setWorkerPhone(selectedWorker.getPhone()); orderService.updateOrder(order); // 添加订单日志 OrderLog orderLog = new OrderLog(); orderLog.setOid(order.getId()); orderLog.setOrderId(order.getOrderId()); orderLog.setTitle("智能派单成功"); orderLog.setType(new BigDecimal("1.0")); JSONObject jsonObject = new JSONObject(); jsonObject.put("name", "智能派单成功,师傅: " + selectedWorker.getName()); orderLog.setContent(jsonObject.toJSONString()); orderLogService.insertOrderLog(orderLog); result.put("success", true); result.put("msg", "智能派单成功,师傅: " + selectedWorker.getName()); result.put("workerId", selectedWorker.getId()); result.put("workerName", selectedWorker.getName()); result.put("workerPhone", selectedWorker.getPhone()); } else { System.out.println("【OrderUtil】智能派单失败: " + dispatchResult.getMessage()); result.put("success", false); result.put("msg", "智能派单失败: " + dispatchResult.getMessage()); } } catch (Exception e) { System.out.println("【OrderUtil】智能派单异常: " + e.getMessage()); e.printStackTrace(); result.put("success", false); result.put("msg", "智能派单异常: " + e.getMessage()); } return result; } /** * 获取维修订单派单师傅列表 * @param orderId 订单id * @return 符合条件的师傅列表 */ public static List getDispatchWorkerList(Long orderId) { IUsersService usersService = SpringUtils.getBean(IUsersService.class); IOrderService orderService = SpringUtils.getBean(IOrderService.class); IServiceGoodsService serviceGoodsService = SpringUtils.getBean(IServiceGoodsService.class); IUserAddressService userAddressService = SpringUtils.getBean(IUserAddressService.class); List result = new ArrayList<>(); // 2. 查询订单、服务、地址 Order order = orderService.selectOrderById(orderId); if (order == null) return result; ServiceGoods serviceGoods = serviceGoodsService.selectServiceGoodsById(order.getProductId()); if (serviceGoods == null) return result; UserAddress address = userAddressService.selectUserAddressById(order.getAddressId()); if (address == null) return result; // 服务技能要求 List requiredSkills = new ArrayList<>(); if (serviceGoods.getSkillIds() != null && !serviceGoods.getSkillIds().trim().isEmpty()) { requiredSkills = JSONArray.parseArray(serviceGoods.getSkillIds(), String.class); } // 1. 查找当日签到过的师傅(type=2,is_stop=0,worker_time为当天) String today = new SimpleDateFormat("yyyy-MM-dd").format(new Date()); Users query = new Users(); query.setType("2"); query.setWorkerTimeStr(today); query.setSkillArr(requiredSkills); query.setIsStop(0); List signedWorkers = usersService.selectUsersList(query); if (signedWorkers.isEmpty()) return result; // 3. 逐个师傅筛选技能和服务区域 for (Users worker : signedWorkers) { // // 技能匹配 // boolean skillMatch = false; // if (worker.getSkillIds() != null && !worker.getSkillIds().trim().isEmpty() && !requiredSkills.isEmpty()) { // List workerSkills = com.alibaba.fastjson.JSONArray.parseArray(worker.getSkillIds(), String.class); // for (String s : requiredSkills) { // if (workerSkills.contains(s)) { // skillMatch = true; // break; // } // } // } // if (!skillMatch) continue; // // 区域匹配 // boolean areaMatch = false; // // 假设addressInfo字段中包含城市ID(如有cityId字段请替换) // String addressCityId = null; // if (address.getAddressInfo() != null) { // addressCityId = address.getAddressInfo(); // 这里请根据实际情况提取城市ID // } // if (worker.getServiceCityIds() != null && !worker.getServiceCityIds().trim().isEmpty() && addressCityId != null) { // List workerAreas = com.alibaba.fastjson.JSONArray.parseArray(worker.getServiceCityIds(), String.class); // if (workerAreas.contains(addressCityId)) { // areaMatch = true; // } // } // if (!areaMatch) continue; result.add(worker); } // 排序:先按等级降序,再按质保金降序 result.sort((a, b) -> { int levelA = a.getLevel() != null ? a.getLevel() : 0; int levelB = b.getLevel() != null ? b.getLevel() : 0; int cmp = Integer.compare(levelB, levelA); if (cmp != 0) return cmp; BigDecimal marginA = a.getMargin() != null ? a.getMargin() : BigDecimal.ZERO; BigDecimal marginB = b.getMargin() != null ? b.getMargin() : BigDecimal.ZERO; return marginB.compareTo(marginA); }); return result; } /** * 库存及销量变更 * 根据订单ID更新商品/服务的销量和库存 * * @param orderid 订单ID * @param type 商品类型 1=服务类商品 2=商城类商品 * @return 处理结果,成功返回true,失败返回false */ /** * 库存及销量变更方法 * 根据订单ID更新商品/服务的销量和库存 * * @param orderid 订单ID * @param type 商品类型:1-服务类商品,2-商城类商品 * @return 处理结果,成功返回true,失败返回false */ public static boolean updateInventoryAndSales(String orderid, Integer type) { try { // 参数验证 if (orderid == null || orderid.trim().isEmpty()) { System.err.println("订单ID不能为空"); return false; } if (type == null || (type != 1 && type != 2)) { System.err.println("无效的商品类型,type: " + type + ", orderid: " + orderid); return false; } // 1. 根据type查询订单数据 Object order = null; if (type == 1) { // 服务类商品,调用IOrderService查询订单数据 IOrderService orderService = SpringUtils.getBean(IOrderService.class); order = orderService.selectOrderByOrderId(orderid); } else if (type == 2) { // 商城类商品,调用IGoodsOrderService查询订单数据 IGoodsOrderService goodsOrderService = SpringUtils.getBean(IGoodsOrderService.class); order = goodsOrderService.selectGoodsOrderByorderId(orderid); } if (order == null) { System.err.println("未找到订单数据,orderid: " + orderid + ", type: " + type); return false; } // 2. 提取订单信息 IServiceGoodsService serviceGoodsService = SpringUtils.getBean(IServiceGoodsService.class); Long productId = null; Long orderNum = null; String orderSku = null; if (type == 1) { // 服务类商品 Order serviceOrder = (Order) order; productId = serviceOrder.getProductId(); orderNum = serviceOrder.getNum() != null ? serviceOrder.getNum() : 1L; orderSku = serviceOrder.getSku(); } else if (type == 2) { // 商城类商品 GoodsOrder goodsOrder = (GoodsOrder) order; productId = goodsOrder.getProductId(); orderNum = goodsOrder.getNum() != null ? goodsOrder.getNum() : 1L; orderSku = goodsOrder.getSku(); } // 验证商品ID if (productId == null) { System.err.println("订单商品ID为空,orderid: " + orderid + ", type: " + type); return false; } // 3. 查询商品/服务数据 ServiceGoods serviceGoods = serviceGoodsService.selectServiceGoodsById(productId); if (serviceGoods == null) { System.err.println("未找到商品/服务数据,productId: " + productId + ", type: " + type); return false; } // 4. 增加销量(无论是否有SKU都要增加销量) Long currentSales = serviceGoods.getSales() != null ? serviceGoods.getSales() : 0L; serviceGoods.setSales(currentSales + orderNum); System.out.println("销量更新:商品ID: " + serviceGoods.getId() + ", 原销量: " + currentSales + ", 增加销量: " + orderNum + ", 新销量: " + serviceGoods.getSales()); // 5. 更新库存 updateStock(serviceGoods, orderSku, orderNum, type); // 6. 保存更新后的商品/服务数据 int updateResult = serviceGoodsService.updateServiceGoods(serviceGoods); if (updateResult > 0) { System.out.println("库存及销量更新成功,orderid: " + orderid + ", type: " + type + ", 销量增加: " + orderNum + ", 商品ID: " + serviceGoods.getId()); return true; } else { System.err.println("库存及销量更新失败,orderid: " + orderid + ", type: " + type); return false; } } catch (Exception e) { System.err.println("库存及销量变更异常,orderid: " + orderid + ", type: " + type + ", 错误: " + e.getMessage()); e.printStackTrace(); return false; } } /** * 库存及销量变更(兼容旧版本) * 根据订单ID更新商品/服务的销量和库存,默认为服务类商品 * * @param orderid 订单ID * @return 处理结果,成功返回true,失败返回false */ // public static boolean updateInventoryAndSales(String orderid) { //// return updateInventoryAndSales(orderid, 1); // 默认为服务类商品 // } /** * 更新库存逻辑 * * @param serviceGoods 商品/服务对象 * @param orderSku 订单SKU * @param orderNum 订单数量 * @param type 商品类型:1-服务类商品,2-商城类商品 */ private static void updateStock(ServiceGoods serviceGoods, String orderSku, Long orderNum, Integer type) { try { // 参数验证 if (serviceGoods == null) { System.err.println("商品对象为空,无法更新库存"); return; } if (orderNum == null || orderNum <= 0) { System.err.println("订单数量无效,orderNum: " + orderNum); return; } // 如果订单的sku为空或null,直接扣减ServiceGoods的库存 if (orderSku == null || orderSku.trim().isEmpty()) { Long currentStock = serviceGoods.getStock() != null ? serviceGoods.getStock() : 0L; Long newStock = Math.max(0, currentStock - orderNum); // 确保库存不为负数 serviceGoods.setStock(newStock); System.out.println("直接扣减库存,商品ID: " + serviceGoods.getId() + ", 原库存: " + currentStock + ", 扣减数量: " + orderNum + ", 剩余库存: " + newStock); } else { // 根据商品类型选择不同的SKU更新方法 if (type == 1) { // 服务类商品,使用原有的SKU更新逻辑 updateSkuStock(serviceGoods, orderSku, orderNum); } else if (type == 2) { // 商城类商品,使用新的SKU更新逻辑 updateGoodsSkuStock(serviceGoods, orderSku, orderNum); } else { System.err.println("无效的商品类型,type: " + type); } } } catch (Exception e) { System.err.println("更新库存异常,商品ID: " + (serviceGoods != null ? serviceGoods.getId() : "null") + ", 错误: " + e.getMessage()); } } /** * 更新SKU库存 * * @param serviceGoods 商品/服务对象 * @param orderSku 订单SKU(具体规格选择) * @param orderNum 订单数量 */ private static void updateSkuStock(ServiceGoods serviceGoods, String orderSku, Long orderNum) { try { // 参数验证 if (serviceGoods == null) { System.err.println("商品对象为空,无法更新SKU库存"); return; } if (orderSku == null || orderSku.trim().isEmpty()) { System.err.println("订单SKU为空,无法更新SKU库存"); return; } String serviceSku = serviceGoods.getSku(); if (serviceSku == null || serviceSku.trim().isEmpty()) { System.err.println("商品SKU为空,无法更新SKU库存,商品ID: " + serviceGoods.getId()); return; } // 解析ServiceGoods的SKU JSON(复杂多规格格式) JSONObject skuJson; try { skuJson = JSONObject.parseObject(serviceSku); } catch (Exception e) { System.err.println("商品SKU JSON格式错误,商品ID: " + serviceGoods.getId() + ", SKU: " + serviceSku); return; } // 检查是否是复杂多规格格式 if (!skuJson.containsKey("sku") || !skuJson.containsKey("type")) { System.err.println("商品SKU格式不是多规格格式,商品ID: " + serviceGoods.getId()); return; } // 获取sku数组 JSONArray skuArray = skuJson.getJSONArray("sku"); if (skuArray == null || skuArray.isEmpty()) { System.err.println("商品SKU数组为空,商品ID: " + serviceGoods.getId()); return; } // 解析订单SKU(具体规格选择) JSONObject orderSkuJson; try { orderSkuJson = JSONObject.parseObject(orderSku); } catch (Exception e) { System.err.println("订单SKU JSON格式错误,订单SKU: " + orderSku); return; } // 在sku数组中查找匹配的规格 boolean found = false; for (int i = 0; i < skuArray.size(); i++) { JSONObject skuItem = skuArray.getJSONObject(i); // 检查是否匹配订单SKU的所有属性 if (isSkuMatch(skuItem, orderSkuJson)) { // 找到匹配的SKU,更新库存 String stockStr = skuItem.getString("stock"); if (stockStr != null && !stockStr.trim().isEmpty()) { try { Long currentStock = Long.parseLong(stockStr); Long newStock = Math.max(0, currentStock - orderNum); // 确保库存不为负数 skuItem.put("stock", newStock.toString()); // 更新ServiceGoods的sku字段 serviceGoods.setSku(skuJson.toJSONString()); System.out.println("SKU库存更新成功,商品ID: " + serviceGoods.getId() + ", 订单SKU: " + orderSku + ", 原库存: " + currentStock + ", 扣减数量: " + orderNum + ", 剩余库存: " + newStock); found = true; break; } catch (NumberFormatException e) { System.err.println("SKU库存格式错误,商品ID: " + serviceGoods.getId() + ", SKU: " + orderSku + ", 库存值: " + stockStr); } } else { System.err.println("SKU库存为空,商品ID: " + serviceGoods.getId() + ", SKU: " + orderSku); } } } if (!found) { System.err.println("未找到匹配的SKU,商品ID: " + serviceGoods.getId() + ", 订单SKU: " + orderSku + ", 商品SKU数组大小: " + skuArray.size()); } } catch (Exception e) { System.err.println("更新SKU库存异常,商品ID: " + (serviceGoods != null ? serviceGoods.getId() : "null") + ", 订单SKU: " + orderSku + ", 错误: " + e.getMessage()); } } /** * 更新商城商品SKU库存 * * @param serviceGoods 商品/服务对象 * @param orderSku 订单SKU(具体规格选择) * @param orderNum 订单数量 */ private static void updateGoodsSkuStock(ServiceGoods serviceGoods, String orderSku, Long orderNum) { try { // 参数验证 if (serviceGoods == null) { System.err.println("商品对象为空,无法更新SKU库存"); return; } if (orderSku == null || orderSku.trim().isEmpty()) { System.err.println("订单SKU为空,无法更新SKU库存"); return; } String serviceSku = serviceGoods.getSku(); if (serviceSku == null || serviceSku.trim().isEmpty()) { System.err.println("商品SKU为空,无法更新SKU库存,商品ID: " + serviceGoods.getId()); return; } // 解析ServiceGoods的SKU JSON(商城商品格式) JSONObject skuJson; try { skuJson = JSONObject.parseObject(serviceSku); } catch (Exception e) { System.err.println("商品SKU JSON格式错误,商品ID: " + serviceGoods.getId() + ", SKU: " + serviceSku); return; } // 检查是否是商城商品格式 if (!skuJson.containsKey("sku") || !skuJson.containsKey("type")) { System.err.println("商品SKU格式不是商城商品格式,商品ID: " + serviceGoods.getId()); return; } // 获取sku数组 JSONArray skuArray = skuJson.getJSONArray("sku"); if (skuArray == null || skuArray.isEmpty()) { System.err.println("商品SKU数组为空,商品ID: " + serviceGoods.getId()); return; } // 解析订单SKU(具体规格选择) JSONObject orderSkuJson; try { orderSkuJson = JSONObject.parseObject(orderSku); } catch (Exception e) { System.err.println("订单SKU JSON格式错误,订单SKU: " + orderSku); return; } // 在sku数组中查找匹配的规格 boolean found = false; for (int i = 0; i < skuArray.size(); i++) { JSONObject skuItem = skuArray.getJSONObject(i); // 检查是否匹配订单SKU的"价格"属性 if (isGoodsSkuMatch(skuItem, orderSkuJson)) { // 找到匹配的SKU,更新库存 String stockStr = skuItem.getString("stock"); if (stockStr != null && !stockStr.trim().isEmpty()) { try { Long currentStock = Long.parseLong(stockStr); Long newStock = Math.max(0, currentStock - orderNum); // 确保库存不为负数 skuItem.put("stock", newStock.toString()); // 更新ServiceGoods的sku字段 serviceGoods.setSku(skuJson.toJSONString()); System.out.println("商城商品SKU库存更新成功,商品ID: " + serviceGoods.getId() + ", 订单SKU: " + orderSku + ", 原库存: " + currentStock + ", 扣减数量: " + orderNum + ", 剩余库存: " + newStock); found = true; break; } catch (NumberFormatException e) { System.err.println("SKU库存格式错误,商品ID: " + serviceGoods.getId() + ", SKU: " + orderSku + ", 库存值: " + stockStr); } } else { System.err.println("SKU库存为空,商品ID: " + serviceGoods.getId() + ", SKU: " + orderSku); } } } if (!found) { System.err.println("未找到匹配的SKU,商品ID: " + serviceGoods.getId() + ", 订单SKU: " + orderSku + ", 商品SKU数组大小: " + skuArray.size()); } } catch (Exception e) { System.err.println("更新商城商品SKU库存异常,商品ID: " + (serviceGoods != null ? serviceGoods.getId() : "null") + ", 订单SKU: " + orderSku + ", 错误: " + e.getMessage()); } } /** * 检查商城商品SKU是否匹配 * * @param skuItem 商品SKU项 * @param orderSkuJson 订单SKU JSON * @return 是否匹配 */ private static boolean isGoodsSkuMatch(JSONObject skuItem, JSONObject orderSkuJson) { try { // 参数验证 if (skuItem == null || orderSkuJson == null) { System.err.println("商城商品SKU匹配检查参数为空"); return false; } // 商城商品主要根据"价格"属性进行匹配 String orderPrice = orderSkuJson.getString("价格"); String skuPrice = skuItem.getString("价格"); if (orderPrice == null || skuPrice == null) { System.err.println("商城商品SKU价格属性为空,订单价格: " + orderPrice + ", 商品价格: " + skuPrice); return false; } // 如果价格属性匹配,返回true if (orderPrice.equals(skuPrice)) { return true; } return false; } catch (Exception e) { System.err.println("商城商品SKU匹配检查异常: " + e.getMessage()); return false; } } /** * 检查SKU是否匹配 * * @param skuItem 商品SKU项 * @param orderSkuJson 订单SKU JSON * @return 是否匹配 */ private static boolean isSkuMatch(JSONObject skuItem, JSONObject orderSkuJson) { try { // 参数验证 if (skuItem == null || orderSkuJson == null) { System.err.println("SKU匹配检查参数为空"); return false; } // 定义需要跳过的非属性字段 Set skipFields = new HashSet<>(Arrays.asList( "price", "groupprice", "seckillprice", "stock", "pic", "image" )); // 遍历订单SKU的所有属性,检查是否与商品SKU项匹配 for (String key : orderSkuJson.keySet()) { // 跳过非属性字段 if (skipFields.contains(key)) { continue; } String orderValue = orderSkuJson.getString(key); String skuValue = skuItem.getString(key); // 如果订单SKU中的属性在商品SKU中不存在,返回false if (skuValue == null) { System.err.println("商品SKU中缺少属性: " + key + ", 订单SKU值: " + orderValue); return false; } // 如果属性值不匹配,返回false if (!orderValue.equals(skuValue)) { System.err.println("SKU属性不匹配,属性: " + key + ", 订单值: " + orderValue + ", 商品值: " + skuValue); return false; } } return true; } catch (Exception e) { System.err.println("SKU匹配检查异常: " + e.getMessage()); return false; } } /** * 查找用户首次下单 * 根据用户ID查找该用户首次下单的订单ID * * @param userId 用户ID * @return 首次下单的订单ID,如果没有找到返回null */ public static String findUserFirstOrderId(Long userId) { try { if (userId == null) { System.err.println("用户ID不能为空"); return null; } IOrderService orderService = SpringUtils.getBean(IOrderService.class); String firstOrderId = orderService.selectUserFirstOrderId(userId); if (firstOrderId != null) { System.out.println("用户 " + userId + " 首次下单订单ID: " + firstOrderId); } else { System.out.println("用户 " + userId + " 没有找到首次下单记录"); } return firstOrderId; } catch (Exception e) { System.err.println("查找用户首次下单异常,用户ID: " + userId + ", 错误: " + e.getMessage()); e.printStackTrace(); return null; } } /** * 查找用户首次下单(重载方法,支持用户对象) * 根据用户对象查找该用户首次下单的订单ID * * @param user 用户对象 * @return 首次下单的订单ID,如果没有找到返回null */ public static String findUserFirstOrderId(Users user) { if (user == null || user.getId() == null) { System.err.println("用户对象或用户ID为空"); return null; } return findUserFirstOrderId(user.getId()); } // public static void main(String[] args) { // // 构造一个测试用的json字符串 // String testJson = "{\"project\":{\"name\":\"项目费用\",\"price\":1132.00},\"reduction\":{\"name\":\"优惠金额\",\"price\":\"1\"},\"deposit\":{\"name\":\"定金\",\"price\":\"10\"},\"basic\":[{\"name\":\"测试基建2\",\"select\":true},{\"name\":\"测试基建5\",\"select\":true},{\"name\":\"测试基建8\",\"select\":true}],\"craft\":[{\"name\":\"三挂一方柜\",\"price\":\"336.00\",\"pid\":192,\"id\":1889,\"count\":3}],\"material\":[{\"name\":\"其他辅料面议项\",\"price\":\"1.00\",\"id\":1241,\"pid\":93,\"count\":1},{\"name\":\"除味剂\",\"price\":\"28.00\",\"id\":1240,\"pid\":93,\"count\":1},{\"name\":\"除味剂\",\"price\":\"28.00\",\"id\":1196,\"pid\":93,\"count\":1},{\"name\":\"其他辅料面议项\",\"price\":\"1.00\",\"id\":1197,\"pid\":93,\"count\":1},{\"name\":\"其他辅料面议项\",\"price\":\"1.00\",\"id\":1197,\"pid\":92,\"count\":1},{\"name\":\"111\",\"price\":\"10.00\",\"id\":1250,\"pid\":92,\"count\":1},{\"name\":\"除味剂\",\"price\":\"28.00\",\"id\":1196,\"pid\":92,\"count\":2}]}"; // OrderUtil util = new OrderUtil(); // JSONObject result = util.getbaojiajson(testJson); // System.out.println("处理后的结果: " + result.toJSONString()); // // // 测试库存及销量变更方法 // System.out.println("=== 测试库存及销量变更方法 ==="); // // // 测试服务类商品(type=1) // String serviceOrderId = "TEST_SERVICE_ORDER_001"; // boolean serviceResult = updateInventoryAndSales(serviceOrderId, 1); // System.out.println("服务类商品库存及销量变更测试结果: " + serviceResult); // // // 测试商城类商品(type=2) // String goodsOrderId = "TEST_GOODS_ORDER_001"; // boolean goodsResult = updateInventoryAndSales(goodsOrderId, 2); // System.out.println("商城类商品库存及销量变更测试结果: " + goodsResult); // // // 测试兼容旧版本(默认为服务类商品) // String orderId = "TEST_ORDER_001"; // boolean result2 = updateInventoryAndSales(orderId); // System.out.println("兼容旧版本库存及销量变更测试结果: " + result2); // // // 测试SKU匹配逻辑 // System.out.println("=== 测试SKU匹配逻辑 ==="); // String testOrderSku = "{\"颜色\":\"黑\",\"大小\":\"小\",\"尺寸\":\"300*300\",\"pic\":[\"https://img.huafurenjia.cn/images/2025-07-15/c638e39be08941aaaa47ee926a1ac5e5.png\"],\"price\":\"100\",\"groupprice\":\"100\",\"seckillprice\":\"99\",\"stock\":\"100\"}"; // JSONObject orderSkuJson = JSONObject.parseObject(testOrderSku); // // // 模拟一个SKU项进行匹配测试 // JSONObject testSkuItem = new JSONObject(); // testSkuItem.put("颜色", "黑"); // testSkuItem.put("大小", "小"); // testSkuItem.put("尺寸", "300*300"); // testSkuItem.put("price", "100"); // testSkuItem.put("stock", "100"); // // boolean matchResult = isSkuMatch(testSkuItem, orderSkuJson); // System.out.println("SKU匹配测试结果: " + matchResult); // } }