no message

This commit is contained in:
cb 2025-08-22 11:35:33 +08:00
parent 8c859e1866
commit 510e696030
8 changed files with 170 additions and 82 deletions

View File

@ -405,40 +405,112 @@ public class GoodsController extends BaseController {
try {
Goods result = goodsService.selectById(goods.getGoodsId());
Shop shop=shopService.getShop(result.getShopId());
result.setShop(shop);
// 获取用户当前位置
Double userLatitude = goods.getLatitude();
Double userLongitude = goods.getLongitude();
// 计算距离逻辑
if (LocationUtils.isValidCoordinate(userLatitude, userLongitude) && shop != null) {
// 获取商品店铺信息
Shop goodsShop = null;
if (result.getShopId() != null) {
try {
goodsShop = shopService.getShop(result.getShopId());
} catch (Exception e) {
logger.warn("获取商品店铺信息失败: {}", e.getMessage());
}
}
// 获取服务店铺信息
Shop serviceShop = null;
if (result.getDeptGoodsCategoryId() != null) {
try {
// 1. 通过商品的类目ID获取类目信息
DeptGoodsCategory deptGoodsCategory = deptGoodsCategoryService.selectOneByGoodsCategoryId(result.getDeptGoodsCategoryId());
if (deptGoodsCategory != null && deptGoodsCategory.getServiceCategoryId() != null) {
logger.debug("商品的服务类目ID: {}", deptGoodsCategory.getServiceCategoryId());
// 2. 通过服务类目ID查询所有使用该服务类目的商品
Goods queryGoods = new Goods();
queryGoods.setDeptGoodsCategoryId(deptGoodsCategory.getServiceCategoryId());
queryGoods.setStatus(0); // 只查询上架的商品
List<Goods> goodsList = goodsService.selectGoodsList(queryGoods);
// 3. 提取所有店铺ID去重
Set<Long> shopIds = goodsList.stream()
.filter(g -> g.getShopId() != null)
.map(Goods::getShopId)
.collect(Collectors.toSet());
if (!shopIds.isEmpty()) {
// 找到最近的店铺
Shop nearestShop = null;
double minDistance = Double.MAX_VALUE;
for (Long shopId : shopIds) {
Shop shop = shopService.getShop(shopId);
if (shop != null && LocationUtils.isValidCoordinate(shop.getLatitude(), shop.getLongitude())) {
if (LocationUtils.isValidCoordinate(userLatitude, userLongitude)) {
try {
if (LocationUtils.isValidCoordinate(shop.getLatitude(), shop.getLongitude())) {
// 计算距离
double distanceInMeters = LocationUtils.getDistanceInMeters(
userLatitude, userLongitude,
shop.getLatitude(), shop.getLongitude()
);
if (distanceInMeters < minDistance) {
minDistance = distanceInMeters;
nearestShop = shop;
}
} catch (Exception e) {
logger.warn("计算店铺[{}]距离失败: {}", shop.getShopName(), e.getMessage());
}
} else {
// 如果用户没有提供位置选择第一个有效店铺
if (nearestShop == null) {
nearestShop = shop;
}
}
}
}
serviceShop = nearestShop;
}
} else {
logger.debug("商品类目信息中未配置服务类目ID");
}
} catch (Exception e) {
logger.warn("获取服务店铺信息失败: {}", e.getMessage());
}
}
// 设置商品店铺和服务店铺信息
result.setShop(goodsShop);
// 计算距离逻辑
if (LocationUtils.isValidCoordinate(userLatitude, userLongitude) && serviceShop != null) {
try {
if (LocationUtils.isValidCoordinate(serviceShop.getLatitude(), serviceShop.getLongitude())) {
// 计算距离
double distanceInMeters = LocationUtils.getDistanceInMeters(
userLatitude, userLongitude,
serviceShop.getLatitude(), serviceShop.getLongitude()
);
// 格式化距离并设置到商品对象
result.setDistance(LocationUtils.formatDistance(distanceInMeters));
serviceShop.setDistance(LocationUtils.formatDistance(distanceInMeters));
logger.debug("商品[{}]距离用户: {}", result.getGoodsName(), result.getDistance());
} else {
// 店铺坐标不完整
result.setDistance(null);
serviceShop.setDistance(null);
}
} catch (Exception e) {
logger.warn("计算商品[{}]距离失败: {}", result.getGoodsName(), e.getMessage());
// 计算异常时设为null
result.setDistance(null);
serviceShop.setDistance(null);
}
} else {
// 用户未提供位置或店铺信息不存在
result.setDistance(null);
serviceShop.setDistance(null);
}
result.setServiceShop(serviceShop);
// 补全商品类目及父级类目信息
GoodsCategory goodsCategory = goodsCategoryService.selectById(result.getDeptGoodsCategoryId());
@ -664,20 +736,20 @@ public class GoodsController extends BaseController {
// 1. 通过配件商品ID获取商品信息
Goods goods = goodsService.selectById(goodsId);
if (goods == null) {
return AjaxResult.error("商品不存在");
return null;
}
// 2. 获取商品对应的服务类目ID
Long deptGoodsCategoryId = goods.getDeptGoodsCategoryId();
if (deptGoodsCategoryId == null) {
return AjaxResult.error("商品未关联服务类目");
return null;
}
// 3. 通过类目ID获取当前类目下的所有店铺信息
// 先获取类目信息找到所有使用该类目的商品
DeptGoodsCategory deptGoodsCategory = deptGoodsCategoryService.get(deptGoodsCategoryId);
if (deptGoodsCategory == null) {
return AjaxResult.error("服务类目不存在");
return null;
}
// 查询所有使用该服务类目的商品

View File

@ -26,6 +26,8 @@ import com.ghy.payment.domain.FinancialMaster;
import com.ghy.payment.service.FinancialChangeRecordService;
import com.ghy.payment.service.FinancialDetailService;
import com.ghy.payment.service.FinancialMasterService;
import com.ghy.shop.domain.Shop;
import com.ghy.shop.service.ShopService;
import com.ghy.system.domain.SysArea;
import com.ghy.system.service.ISysAreaService;
import com.ghy.system.service.IWxMsgService;
@ -115,6 +117,8 @@ public class OrderController extends BaseController {
@Resource
private LogisticsService logisticsService;
@Resource
private ShopService shopService;
@GetMapping("/imgs")
public String orderImgs(Long orderId, ModelMap mmap) {
mmap.put("orderId", orderId);
@ -585,33 +589,39 @@ public class OrderController extends BaseController {
OrderMaster orderMaster = new OrderMaster();
orderMaster.setOrderType(0);
// 判断是否是配件商品
if (goods.getType() != null && goods.getType() == 2) {
// 配件商品需要获取对应的服务商品
logger.info("当前商品是配件商品,需要获取对应的服务商品");
orderMaster.setOrderType(1);
// if (goods.getType() != null && goods.getType() == 2) {
// // 配件商品需要获取对应的服务商品
// logger.info("当前商品是配件商品,需要获取对应的服务商品");
// orderMaster.setOrderType(1);
// 通过商品的类目ID获取类目信息
DeptGoodsCategory deptGoodsCategory = deptGoodsCategoryService.selectOneByGoodsCategoryId(goods.getDeptGoodsCategoryId());
if (deptGoodsCategory != null && deptGoodsCategory.getServiceCategoryId() != null) {
logger.info("配件商品的服务类目ID: {}", deptGoodsCategory.getServiceCategoryId());
// // 通过商品的类目ID获取类目信息
// DeptGoodsCategory deptGoodsCategory = deptGoodsCategoryService.selectOneByGoodsCategoryId(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<Goods> serviceGoodsList = goodsService.selectGoodsList(serviceGoodsQuery);
if (CollectionUtils.isNotEmpty(serviceGoodsList)) {
Goods serviceGoods = serviceGoodsList.get(0); // 取第一个服务商品
logger.info("找到对应的服务商品: {}", serviceGoods);
orderMaster.setServerGoodsId(serviceGoods.getGoodsId());
} else {
logger.warn("未找到服务类目ID为 {} 的服务商品", deptGoodsCategory.getServiceCategoryId());
}
} else {
logger.warn("配件商品的类目信息中未配置服务类目ID");
}
}
// // 通过服务类目ID查询对应的服务商品
// Goods serviceGoodsQuery = new Goods();
// serviceGoodsQuery.setDeptGoodsCategoryId(deptGoodsCategory.getServiceCategoryId());
// serviceGoodsQuery.setType(1); // 服务商品类型
// serviceGoodsQuery.setStatus(0); // 上架状态
// List<Goods> serviceGoodsList = goodsService.selectGoodsList(serviceGoodsQuery);
// if (CollectionUtils.isNotEmpty(serviceGoodsList)) {
// Goods serviceGoods = serviceGoodsList.get(0); // 取第一个服务商品
// logger.info("找到对应的服务商品: {}", serviceGoods);
// orderMaster.setServerGoodsId(serviceGoods.getGoodsId());
// // 设置服务店铺ID
// if (serviceGoods.getShopId() != null) {
// orderMaster.setServiceShopId(serviceGoods.getShopId());
// logger.info("设置服务店铺ID: {}", serviceGoods.getShopId());
// }
// } else {
// logger.warn("未找到服务类目ID为 {} 的服务商品", deptGoodsCategory.getServiceCategoryId());
// }
// } else {
// logger.warn("配件商品的类目信息中未配置服务类目ID");
// }
// }
// 师傅信息
Worker worker = workerService.selectById(goods.getWorkerId());
// 商户ID
@ -619,6 +629,7 @@ public class OrderController extends BaseController {
Assert.notNull(deptId, "deptId is null!");
// 生成主单
orderMaster.setServiceShopId(appOrderRequest.getServiceShopId());
orderMaster.setDeptId(deptId);
orderMaster.setIsNeedBill(appOrderRequest.getIsNeedBill());
orderMaster.setCode(orderMasterService.createOrderCode());
@ -1574,6 +1585,7 @@ public class OrderController extends BaseController {
orderListResponse.setDrawCashTime(detail.getDrawCashTime());
orderListResponse.setCreateTime(detail.getCreateTime());
orderListResponse.setUpdateTime(detail.getUpdateTime());
orderListResponse.setServiceShopId(orderMaster.getServiceShopId());
orderListResponses.add(orderListResponse);
});
return orderListResponses;
@ -1699,6 +1711,7 @@ public class OrderController extends BaseController {
orderListResponse.setOriginalWorkerId(master.getOriginalWorkerId());
orderListResponse.setServerGoodsId(master.getServerGoodsId());
orderListResponse.setServiceShopId(master.getServiceShopId());
orderListResponse.setOrderType(master.getOrderType());
orderListResponse.setHasServiceOrder(master.getHasServiceOrder());
orderListResponse.setIsMonitoredOrder(condition);
@ -2001,6 +2014,7 @@ public class OrderController extends BaseController {
try {
Long orderMasterId = request.getId();
BigDecimal serviceMoney = request.getServerGoodsMoney();
Long serviceShopId = request.getServiceShopId();
// 校验参数
if (orderMasterId == null) {
@ -2011,6 +2025,10 @@ public class OrderController extends BaseController {
return AjaxResult.error("服务金额不能为空且不能为负数");
}
if (serviceShopId == null) {
return AjaxResult.error("服务店铺ID不能为空");
}
// 查询配件主单信息
OrderMaster accessoryOrderMaster = orderMasterService.selectById(orderMasterId);
if (accessoryOrderMaster == null) {
@ -2026,19 +2044,17 @@ public class OrderController extends BaseController {
if (accessoryOrderMaster.getHasServiceOrder() != null && accessoryOrderMaster.getHasServiceOrder() == 1) {
return AjaxResult.error("该配件订单已经派发过服务订单,不能重复操作");
}
if (accessoryOrderMaster.getServerGoodsId() == null) {
return AjaxResult.error("未关联服务商品");
}
// 获取服务商品信息
Goods serverGoods = goodsService.selectById(accessoryOrderMaster.getServerGoodsId());
if (serverGoods == null) {
return AjaxResult.error("关联的服务商品不存在");
// 获取服务店铺信息
Shop serviceShop = shopService.getShop(serviceShopId);
if (serviceShop == null) {
return AjaxResult.error("服务店铺不存在");
}
// 获取服务商品的师傅信息
Worker serverWorker = workerService.selectById(serverGoods.getWorkerId());
if (serverWorker == null) {
return AjaxResult.error("服务商品未关联师傅信息");
// 获取服务店铺的师傅信息创建店铺的师傅
Worker serviceWorker = workerService.selectById(serviceShop.getWorkerId());
if (serviceWorker == null) {
return AjaxResult.error("服务店铺未关联师傅信息");
}
// 创建服务主单
@ -2052,8 +2068,8 @@ public class OrderController extends BaseController {
serviceOrderMaster.setAddressId(accessoryOrderMaster.getAddressId());
serviceOrderMaster.setPayStatus(PayStatus.WAIT_PAY.getCode());
serviceOrderMaster.setCreateTime(new Date());
serviceOrderMaster.setWorkerId(request.getWorkerId()); // 使用服务商品的师傅
serviceOrderMaster.setGoodsId(serverGoods.getGoodsId()); // 使用服务商品ID
serviceOrderMaster.setWorkerId(serviceWorker.getWorkerId()); // 使用服务店铺的师傅ID
serviceOrderMaster.setServiceShopId(serviceShopId); // 设置服务店铺ID
serviceOrderMaster.setRemark("由配件订单[" + accessoryOrderMaster.getCode() + "]自动生成的服务订单,服务金额:" + serviceMoney);
serviceOrderMaster.setExpectTimeStart(accessoryOrderMaster.getExpectTimeStart());
serviceOrderMaster.setExpectTimeEnd(accessoryOrderMaster.getExpectTimeEnd());
@ -2079,17 +2095,6 @@ public class OrderController extends BaseController {
orderMasterService.insertOrderMaster(serviceOrderMaster);
Assert.notNull(serviceOrderMaster.getId(), "ServiceOrderMaster.id is null!");
// 获取服务商品的规格信息取第一个可用规格
GoodsStandard serviceGoodsStandard = null;
List<GoodsStandard> 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(),
@ -2104,16 +2109,6 @@ public class OrderController extends BaseController {
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());
@ -2129,7 +2124,7 @@ public class OrderController extends BaseController {
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);
WechatMsgUtils.sendWeChatMsg(WechatMsgUtils.getToken(), serviceWorker.getWxOpenId(), WxMsgEnum.NORMAL_ORDER, paramsNew);
} catch (Exception e) {
logger.error("发送微信通知失败: {}", e.getMessage(), e);
}
@ -2141,14 +2136,14 @@ public class OrderController extends BaseController {
result.put("serviceOrderId", serviceOrderMaster.getId());
result.put("serviceOrderCode", serviceOrderMaster.getCode());
result.put("serviceFee", serviceMoney);
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());
result.put("serviceShopId", serviceShopId);
result.put("serviceShopName", serviceShop.getShopName());
result.put("serviceWorkerId", serviceWorker.getWorkerId());
result.put("serviceWorkerName", serviceWorker.getName());
result.put("serviceWorkerPhone", serviceWorker.getPhone());
logger.info("成功为配件订单[{}]生成服务订单[{}],服务金额:{}",
accessoryOrderMaster.getCode(), serviceOrderMaster.getCode(), serviceMoney);
logger.info("成功为配件订单[{}]生成服务订单[{}],服务金额:{},服务店铺:{}",
accessoryOrderMaster.getCode(), serviceOrderMaster.getCode(), serviceMoney, serviceShop.getShopName());
return AjaxResult.success("服务订单生成成功", result);

View File

@ -248,6 +248,11 @@ public class OrderListResponse {
private Long serverGoodsId;
/**
* 服务店铺ID
*/
private Long serviceShopId;
private Date confirmStartTime;
private Integer deliveryType;

View File

@ -124,6 +124,8 @@ public class Goods extends BaseEntity {
private Shop shop;
private Shop serviceShop;
private List<Long> goodsIds;
private String goodsStandard;

View File

@ -244,6 +244,11 @@ public class OrderMaster extends BaseEntity {
private Long goodsOrderMasterId;
/**
* 服务店铺ID
*/
private Long serviceShopId;
private String trackingNumber;
/**

View File

@ -45,4 +45,6 @@ public class AppOrderRequest {
private Long goodsId;
private Long insuranceId;
private Long serviceShopId;
}

View File

@ -53,6 +53,7 @@
<result property="streetName" column="street_name"/>
<result property="withdrawn" column="withdrawn"/>
<result property="serverGoodsId" column="server_goods_id"/>
<result property="serviceShopId" column="service_shop_id"/>
<result property="goodsOrderMasterId" column="goods_order_master_id"/>
<result property="trackingNumber" column="tracking_number"/>
<result property="hasServiceOrder" column="has_service_order"/>
@ -114,6 +115,7 @@
has_dispatched_all,
withdrawn,
server_goods_id,
service_shop_id,
goods_order_master_id,
tracking_number,
server_goods_money,
@ -176,6 +178,7 @@
om.has_dispatched_all,
om.withdrawn,
om.server_goods_id,
om.service_shop_id,
om.goods_order_master_id,
om.tracking_number,
om.server_goods_money,
@ -480,6 +483,7 @@
<if test="timeout != null">timeout_ = #{timeout},</if>
<if test="insuranceId != null">insurance_id = #{insuranceId},</if>
<if test="serverGoodsId != null">server_goods_id = #{serverGoodsId},</if>
<if test="serviceShopId != null">service_shop_id = #{serviceShopId},</if>
<if test="goodsOrderMasterId != null">goods_order_master_id = #{goodsOrderMasterId},</if>
<if test="trackingNumber != null">tracking_number = #{trackingNumber},</if>
<if test="serverGoodsMoney != null">server_goods_money = #{serverGoodsMoney},</if>
@ -547,6 +551,7 @@
<if test="countryName != null">country_name,</if>
<if test="streetName != null">street_name,</if>
<if test="serverGoodsId != null">server_goods_id,</if>
<if test="serviceShopId != null">service_shop_id,</if>
<if test="goodsOrderMasterId != null">goods_order_master_id,</if>
<if test="trackingNumber != null and trackingNumber != ''">tracking_number,</if>
<if test="serverGoodsMoney != null">server_goods_money,</if>
@ -595,6 +600,7 @@
<if test="countryName != null">#{countryName},</if>
<if test="streetName != null">#{streetName},</if>
<if test="serverGoodsId != null">#{serverGoodsId},</if>
<if test="serviceShopId != null">#{serviceShopId},</if>
<if test="goodsOrderMasterId != null">#{goodsOrderMasterId},</if>
<if test="trackingNumber != null and trackingNumber != ''">#{trackingNumber},</if>
<if test="serverGoodsMoney != null">#{serverGoodsMoney},</if>

View File

@ -27,4 +27,5 @@ public class Shop implements Serializable {
private Double latitude; // 纬度
private Double longitude; // 经度
private String distance; // 距离
}