diff --git a/ghy-admin/src/main/java/com/ghy/web/controller/order/OrderController.java b/ghy-admin/src/main/java/com/ghy/web/controller/order/OrderController.java index f111a1e2..072b3bed 100644 --- a/ghy-admin/src/main/java/com/ghy/web/controller/order/OrderController.java +++ b/ghy-admin/src/main/java/com/ghy/web/controller/order/OrderController.java @@ -534,8 +534,40 @@ public class OrderController extends BaseController { List goodsList = goodsStandardService.selectByIds(goodsStandardIds); logger.info("商品信息{}", goodsList); // 商品所属师傅 + // 获取商品信息 Goods goods = goodsService.selectById(goodsList.get(0).getGoodsId()); logger.info("下单后的师傅信息{}", goods); + OrderMaster orderMaster = new OrderMaster(); + orderMaster.setOrderType(0); + // 判断是否是配件商品 + if (goods.getType() != null && goods.getType() == 2) { + // 配件商品,需要获取对应的服务商品 + logger.info("当前商品是配件商品,需要获取对应的服务商品"); + + // 通过商品的类目ID获取类目信息 + DeptGoodsCategory deptGoodsCategory = deptGoodsCategoryService.get(goods.getDeptGoodsCategoryId()); + if (deptGoodsCategory != null && deptGoodsCategory.getServiceCategoryId() != null) { + logger.info("配件商品的服务类目ID: {}", deptGoodsCategory.getServiceCategoryId()); + + // 通过服务类目ID查询对应的服务商品 + Goods serviceGoodsQuery = new Goods(); + serviceGoodsQuery.setDeptGoodsCategoryId(deptGoodsCategory.getServiceCategoryId()); + serviceGoodsQuery.setType(1); // 服务商品类型 + serviceGoodsQuery.setStatus(0); // 上架状态 + + List serviceGoodsList = goodsService.selectGoodsList(serviceGoodsQuery); + if (CollectionUtils.isNotEmpty(serviceGoodsList)) { + Goods serviceGoods = serviceGoodsList.get(0); // 取第一个服务商品 + logger.info("找到对应的服务商品: {}", serviceGoods); + orderMaster.setOrderType(1); + orderMaster.setServerGoodsId(serviceGoods.getGoodsId()); + } else { + logger.warn("未找到服务类目ID为 {} 的服务商品", deptGoodsCategory.getServiceCategoryId()); + } + } else { + logger.warn("配件商品的类目信息中未配置服务类目ID"); + } + } // 师傅信息 Worker worker = workerService.selectById(goods.getWorkerId()); // 商户ID @@ -543,10 +575,8 @@ public class OrderController extends BaseController { Assert.notNull(deptId, "deptId is null!"); // 生成主单 - OrderMaster orderMaster = new OrderMaster(); orderMaster.setDeptId(deptId); orderMaster.setCode(orderMasterService.createOrderCode()); - orderMaster.setOrderType(0); orderMaster.setPayType(appOrderRequest.getPayType()); orderMaster.setOrderStatus(OrderStatus.RECEIVE.code()); orderMaster.setCustomerId(appOrderRequest.getCustomerId()); @@ -563,7 +593,6 @@ public class OrderController extends BaseController { //处理新增订单的地址 CustomerAddress customerAddress = customerAddressService.selectByCustomerAddressId(appOrderRequest.getAddressId()); - logger.info("传入的新订单信息{},获取到的地址信息{}",appOrderRequest,customerAddress); SysArea sysArea = sysAreaService.selectById(customerAddress.getStreetId()); String addressSysArea = sysArea.getMergerName(); String[] array = addressSysArea.split(","); @@ -642,6 +671,9 @@ public class OrderController extends BaseController { } catch (Exception e) { logger.error(e.getMessage(), e); } + + + return AjaxResult.success(orderMaster); } @@ -1886,4 +1918,173 @@ public class OrderController extends BaseController { } return true; } + + /** + * 为配件订单生成对应的服务订单 + * + * @param request 包含主单ID和服务金额的请求参数 + * @return AjaxResult 返回生成的服务订单信息 + */ + @PostMapping("/generate/service/order") + @ResponseBody + @Transactional(rollbackFor = Exception.class) + public AjaxResult generateServiceOrder(@RequestBody Map request) { + try { + Long orderMasterId = Long.valueOf(request.get("orderMasterId").toString()); + + // 获取传入的服务金额 + BigDecimal serviceMoney = BigDecimal.ZERO; + if (request.get("serviceMoney") != null) { + serviceMoney = new BigDecimal(request.get("serviceMoney").toString()); + } + + // 校验参数 + if (orderMasterId == null) { + return AjaxResult.error("主单ID不能为空"); + } + + if (serviceMoney.compareTo(BigDecimal.ZERO) < 0) { + return AjaxResult.error("服务金额不能为负数"); + } + + // 查询配件主单信息 + OrderMaster accessoryOrderMaster = orderMasterService.selectById(orderMasterId); + if (accessoryOrderMaster == null) { + return AjaxResult.error("主单不存在"); + } + + // 判断是否为配件订单 + if (accessoryOrderMaster.getOrderType() == null || accessoryOrderMaster.getOrderType() != 1) { + return AjaxResult.error("当前订单不是配件订单,无法生成服务订单"); + } + + // 检查是否已经有对应的服务商品 + if (accessoryOrderMaster.getServerGoodsId() == null) { + return AjaxResult.error("配件订单未关联服务商品,无法生成服务订单"); + } + + // 获取服务商品信息 + Goods serverGoods = goodsService.selectById(accessoryOrderMaster.getServerGoodsId()); + if (serverGoods == null) { + return AjaxResult.error("关联的服务商品不存在"); + } + + // 获取服务商品的师傅信息 + Worker serverWorker = workerService.selectById(serverGoods.getWorkerId()); + if (serverWorker == null) { + return AjaxResult.error("服务商品未关联师傅信息"); + } + + // 创建服务主单 + OrderMaster serviceOrderMaster = new OrderMaster(); + serviceOrderMaster.setDeptId(accessoryOrderMaster.getDeptId()); + serviceOrderMaster.setCode(orderMasterService.createOrderCode()); + serviceOrderMaster.setOrderType(0); // 服务订单类型为0 + serviceOrderMaster.setPayType(accessoryOrderMaster.getPayType()); + serviceOrderMaster.setOrderStatus(OrderStatus.RECEIVE.code()); + serviceOrderMaster.setCustomerId(accessoryOrderMaster.getCustomerId()); + serviceOrderMaster.setAddressId(accessoryOrderMaster.getAddressId()); + serviceOrderMaster.setPayStatus(PayStatus.WAIT_PAY.getCode()); + serviceOrderMaster.setCreateTime(new Date()); + serviceOrderMaster.setWorkerId(serverWorker.getWorkerId()); // 使用服务商品的师傅 + serviceOrderMaster.setGoodsId(serverGoods.getGoodsId()); // 使用服务商品ID + serviceOrderMaster.setRemark("由配件订单[" + accessoryOrderMaster.getCode() + "]自动生成的服务订单,服务金额:" + serviceFee); + serviceOrderMaster.setExpectTimeStart(accessoryOrderMaster.getExpectTimeStart()); + serviceOrderMaster.setExpectTimeEnd(accessoryOrderMaster.getExpectTimeEnd()); + serviceOrderMaster.setInsuranceId(accessoryOrderMaster.getInsuranceId()); + + // 复制地址信息 + serviceOrderMaster.setProvinceId(accessoryOrderMaster.getProvinceId()); + serviceOrderMaster.setCityId(accessoryOrderMaster.getCityId()); + serviceOrderMaster.setCountryId(accessoryOrderMaster.getCountryId()); + serviceOrderMaster.setStreetId(accessoryOrderMaster.getStreetId()); + serviceOrderMaster.setAddress(accessoryOrderMaster.getAddress()); + serviceOrderMaster.setName(accessoryOrderMaster.getName()); + serviceOrderMaster.setPhone(accessoryOrderMaster.getPhone()); + serviceOrderMaster.setProvinceName(accessoryOrderMaster.getProvinceName()); + serviceOrderMaster.setCityName(accessoryOrderMaster.getCityName()); + serviceOrderMaster.setCountryName(accessoryOrderMaster.getCountryName()); + serviceOrderMaster.setStreetName(accessoryOrderMaster.getStreetName()); + + // 保存服务主单 + orderMasterService.insertOrderMaster(serviceOrderMaster); + Assert.notNull(serviceOrderMaster.getId(), "ServiceOrderMaster.id is null!"); + + // 获取服务商品的规格信息(取第一个可用规格) + GoodsStandard serviceGoodsStandard = null; + List serviceGoodsStandards = goodsStandardService.selectByGoodsId(serverGoods.getGoodsId()); + if (CollectionUtils.isNotEmpty(serviceGoodsStandards)) { + serviceGoodsStandard = serviceGoodsStandards.get(0); // 取第一个规格 + } + + if (serviceGoodsStandard == null) { + throw new RuntimeException("服务商品没有可用的规格信息"); + } + + // 生成财务主单(使用传入的服务金额) + FinancialMaster serviceFinancialMaster = new FinancialMaster( + financialMasterService.createCode(), + accessoryOrderMaster.getDeptId(), + serviceOrderMaster.getId(), + serviceOrderMaster.getCode(), + serviceMoney, + BigDecimal.ZERO, + serviceMoney + ); + serviceFinancialMaster.setServerMoney(serviceMoney); + financialMasterService.insertFinancialMaster(serviceFinancialMaster); + Assert.notNull(serviceFinancialMaster.getId(), "ServiceFinancialMaster.id is null!"); + + // 生成服务商品订单 + OrderGoods serviceOrderGoods = new OrderGoods( + serviceOrderMaster.getId(), + serviceGoodsStandard.getGoodsStandardId(), + serviceGoodsStandard.getGoodsStandardName(), + 1, // 数量默认为1 + 0 + ); + orderGoodsService.insertOrderGoods(serviceOrderGoods); + + // 更新配件主单,关联生成的服务订单 + OrderMaster accessoryUpdate = new OrderMaster(); + accessoryUpdate.setId(accessoryOrderMaster.getId()); + accessoryUpdate.setRemark(accessoryOrderMaster.getRemark() + " [已生成服务订单:" + serviceOrderMaster.getCode() + ",服务金额:" + serviceFee + "]"); + orderMasterService.updateOrderMaster(accessoryUpdate); + + // 通知服务师傅新订单 + try { + Map paramsNew = new HashMap<>(); + paramsNew.put("thing21", "您帐号收到1条新服务订单"); + paramsNew.put("thing31", "请进入【我的订单--新订单】操作处理"); + CustomerAddress address = customerAddressService.selectByCustomerAddressId(serviceOrderMaster.getAddressId()); + paramsNew.put("thing14", address.getName()); + paramsNew.put("time4", com.ghy.common.utils.DateUtils.parseDateToStr("yyyy年MM月dd日 HH:mm", new Date())); + WechatMsgUtils.sendWeChatMsg(WechatMsgUtils.getToken(), serverWorker.getWxOpenId(), WxMsgEnum.NORMAL_ORDER, paramsNew); + } catch (Exception e) { + logger.error("发送微信通知失败: {}", e.getMessage(), e); + } + + // 构建返回结果 + Map result = new HashMap<>(); + result.put("accessoryOrderId", accessoryOrderMaster.getId()); + result.put("accessoryOrderCode", accessoryOrderMaster.getCode()); + result.put("serviceOrderId", serviceOrderMaster.getId()); + result.put("serviceOrderCode", serviceOrderMaster.getCode()); + result.put("serviceFee", serviceFee); + result.put("serviceGoodsId", serverGoods.getGoodsId()); + result.put("serviceGoodsName", serverGoods.getGoodsName()); + result.put("serviceWorkerId", serverWorker.getWorkerId()); + result.put("serviceWorkerName", serverWorker.getName()); + result.put("serviceWorkerPhone", serverWorker.getPhone()); + + logger.info("成功为配件订单[{}]生成服务订单[{}],服务金额:{}", + accessoryOrderMaster.getCode(), serviceOrderMaster.getCode(), serviceFee); + + return AjaxResult.success("服务订单生成成功", result); + + } catch (Exception e) { + logger.error("生成服务订单失败: {}", e.getMessage(), e); + return AjaxResult.error("生成服务订单失败: " + e.getMessage()); + } + } } diff --git a/ghy-order/src/main/java/com/ghy/order/domain/OrderMaster.java b/ghy-order/src/main/java/com/ghy/order/domain/OrderMaster.java index f374c4ac..d6f20e4e 100644 --- a/ghy-order/src/main/java/com/ghy/order/domain/OrderMaster.java +++ b/ghy-order/src/main/java/com/ghy/order/domain/OrderMaster.java @@ -237,4 +237,13 @@ public class OrderMaster extends BaseEntity { private String streetName; private Integer withdrawn; + + @Excel(name = "服务商品ID") + private Long serverGoodsId; + + @Excel(name = "关联商品订单主单ID") + private Long goodsOrderMasterId; + + @Excel(name = "物流单号") + private String trackingNumber; } diff --git a/ghy-order/src/main/resources/mapper/order/OrderMasterMapper.xml b/ghy-order/src/main/resources/mapper/order/OrderMasterMapper.xml index a7fe4106..62c69c39 100644 --- a/ghy-order/src/main/resources/mapper/order/OrderMasterMapper.xml +++ b/ghy-order/src/main/resources/mapper/order/OrderMasterMapper.xml @@ -51,6 +51,9 @@ + + + @@ -99,7 +102,10 @@ street_name , phone, has_dispatched_all, - withdrawn + withdrawn, + server_goods_id, + goods_order_master_id, + tracking_number FROM order_master @@ -148,7 +154,10 @@ om.street_name , om.phone, om.has_dispatched_all, - om.withdrawn + om.withdrawn, + om.server_goods_id, + om.goods_order_master_id, + om.tracking_number FROM order_master om LEFT JOIN customer_address ca ON ca.customer_address_id = om.address_id LEFT JOIN goods g ON g.goods_id = om.goods_id @@ -440,6 +449,9 @@ is_contact = #{isContact}, timeout_ = #{timeout}, insurance_id = #{insuranceId}, + server_goods_id = #{serverGoodsId}, + goods_order_master_id = #{goodsOrderMasterId}, + tracking_number = #{trackingNumber}, update_time = SYSDATE() WHERE id = #{id} @@ -494,6 +506,9 @@ city_name, country_name, street_name, + server_goods_id, + goods_order_master_id, + tracking_number, create_time )VALUES( #{deptId}, @@ -529,6 +544,9 @@ #{cityName}, #{countryName}, #{streetName}, + #{serverGoodsId}, + #{goodsOrderMasterId}, + #{trackingNumber}, SYSDATE() )