no message

This commit is contained in:
cb 2025-06-19 18:10:43 +08:00
parent bd78980529
commit b2ddfb1502
3 changed files with 233 additions and 5 deletions

View File

@ -534,8 +534,40 @@ public class OrderController extends BaseController {
List<GoodsStandard> 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<Goods> 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<String, Object> 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<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(),
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<String, Object> 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<String, Object> 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());
}
}
}

View File

@ -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;
}

View File

@ -51,6 +51,9 @@
<result property="countryName" column="country_name"/>
<result property="streetName" column="street_name"/>
<result property="withdrawn" column="withdrawn"/>
<result property="serverGoodsId" column="server_goods_id"/>
<result property="goodsOrderMasterId" column="goods_order_master_id"/>
<result property="trackingNumber" column="tracking_number"/>
</resultMap>
@ -99,7 +102,10 @@
street_name ,
phone,
has_dispatched_all,
withdrawn
withdrawn,
server_goods_id,
goods_order_master_id,
tracking_number
FROM order_master
</sql>
@ -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 @@
<if test="isContact != null">is_contact = #{isContact},</if>
<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="goodsOrderMasterId != null">goods_order_master_id = #{goodsOrderMasterId},</if>
<if test="trackingNumber != null">tracking_number = #{trackingNumber},</if>
update_time = SYSDATE()
</set>
WHERE id = #{id}
@ -494,6 +506,9 @@
<if test="cityName != null">city_name,</if>
<if test="countryName != null">country_name,</if>
<if test="streetName != null">street_name,</if>
<if test="serverGoodsId != null">server_goods_id,</if>
<if test="goodsOrderMasterId != null">goods_order_master_id,</if>
<if test="trackingNumber != null and trackingNumber != ''">tracking_number,</if>
create_time
)VALUES(
<if test="deptId != null and deptId != 0">#{deptId},</if>
@ -529,6 +544,9 @@
<if test="cityName != null">#{cityName},</if>
<if test="countryName != null">#{countryName},</if>
<if test="streetName != null">#{streetName},</if>
<if test="serverGoodsId != null">#{serverGoodsId},</if>
<if test="goodsOrderMasterId != null">#{goodsOrderMasterId},</if>
<if test="trackingNumber != null and trackingNumber != ''">#{trackingNumber},</if>
SYSDATE()
)
</insert>