|
|
@@ -20,17 +20,18 @@ import org.dromara.common.satoken.utils.LoginHelper;
|
|
|
import org.dromara.fulfiller.api.RemoteFulfillerService;
|
|
|
import org.dromara.fulfiller.api.domain.vo.RemoteFulfillerVo;
|
|
|
import org.dromara.fulfiller.api.model.FulfillerLoginUser;
|
|
|
-import org.dromara.order.api.enums.OrderLogActionerTypeEnum;
|
|
|
-import org.dromara.order.api.enums.OrderLogSystemStepEnum;
|
|
|
-import org.dromara.order.api.enums.OrderLogTypeEnum;
|
|
|
-import org.dromara.order.api.enums.OrderStatusEnum;
|
|
|
+import org.dromara.order.api.enums.*;
|
|
|
+import org.dromara.order.config.OrderRabbitMqConfig;
|
|
|
import org.dromara.order.domain.SysSubOrder;
|
|
|
import org.dromara.order.domain.SysSubOrderLog;
|
|
|
import org.dromara.order.domain.bo.*;
|
|
|
import org.dromara.order.domain.vo.*;
|
|
|
+import org.dromara.common.rabbitmq.message.SubOrderDispatchMessage;
|
|
|
+import org.dromara.common.rabbitmq.message.SubOrderRejectMessage;
|
|
|
import org.dromara.order.mapper.SysSubOrderLogMapper;
|
|
|
import org.dromara.order.mapper.SysSubOrderMapper;
|
|
|
import org.dromara.order.service.ISysSubOrderService;
|
|
|
+import org.dromara.common.rabbitmq.core.RabbitMqProducer;
|
|
|
import org.dromara.resource.api.RemoteFileService;
|
|
|
import org.dromara.resource.api.domain.RemoteFile;
|
|
|
import org.dromara.system.api.RemoteAreaStationService;
|
|
|
@@ -40,9 +41,11 @@ import org.dromara.system.api.RemoteUserService;
|
|
|
import org.dromara.system.api.domain.vo.RemoteStoreVo;
|
|
|
import org.dromara.system.api.domain.vo.RemoteUserVo;
|
|
|
import org.dromara.system.api.model.LoginUser;
|
|
|
+import org.springframework.beans.BeanUtils;
|
|
|
import org.springframework.stereotype.Service;
|
|
|
import org.springframework.transaction.annotation.Transactional;
|
|
|
|
|
|
+import java.text.SimpleDateFormat;
|
|
|
import java.util.*;
|
|
|
import java.util.concurrent.atomic.AtomicLong;
|
|
|
import java.util.stream.Collectors;
|
|
|
@@ -51,6 +54,9 @@ import java.util.stream.Collectors;
|
|
|
@RequiredArgsConstructor
|
|
|
public class SysSubOrderServiceImpl implements ISysSubOrderService {
|
|
|
|
|
|
+ // 此代码为AI生成
|
|
|
+ private final RabbitMqProducer rabbitMqProducer;
|
|
|
+
|
|
|
private final SysSubOrderMapper baseMapper;
|
|
|
private final SysSubOrderLogMapper subOrderLogMapper;
|
|
|
|
|
|
@@ -83,8 +89,8 @@ public class SysSubOrderServiceImpl implements ISysSubOrderService {
|
|
|
orderWrapper.and(w -> w
|
|
|
.in(SysSubOrder::getTenantId, tenantIds.isEmpty() ? List.of(TenantConstants.DEFAULT_TENANT_ID) : tenantIds).or()
|
|
|
.in(SysSubOrder::getOrderPlacer, WrapperUtils.convertIds(userIds)).or()
|
|
|
- .in(SysSubOrder::getUsrCustomer, WrapperUtils.convertIds(customerIds))
|
|
|
- );
|
|
|
+ .in(SysSubOrder::getUsrCustomer, WrapperUtils.convertIds(customerIds)).or()
|
|
|
+ .like(SysSubOrder::getCode, bo.getContent()));
|
|
|
}
|
|
|
|
|
|
orderWrapper.in(SysSubOrder::getStoreSite, WrapperUtils.convertIds(remoteAreaStationService.listByUserId(LoginHelper.getUserId())));
|
|
|
@@ -147,6 +153,7 @@ public class SysSubOrderServiceImpl implements ISysSubOrderService {
|
|
|
if (fulfiller != null) {
|
|
|
vo.setFulfillerName(fulfiller.getName());
|
|
|
vo.setFulfillerStatus(fulfiller.getStatus());
|
|
|
+ vo.setFulfillerPhone(fulfiller.getPhone());
|
|
|
}
|
|
|
vo.setFulfillmentCommission(e.getFulfillmentCommission());
|
|
|
vo.setRemark(e.getRemark());
|
|
|
@@ -192,6 +199,28 @@ public class SysSubOrderServiceImpl implements ISysSubOrderService {
|
|
|
throw new RuntimeException("记录日志失败");
|
|
|
}
|
|
|
|
|
|
+ // 此代码为AI生成 - 派单时发送RabbitMQ消息用于后续消息通知 (暂时禁用)
|
|
|
+ /*
|
|
|
+ try {
|
|
|
+ SubOrderDispatchMessage message = new SubOrderDispatchMessage();
|
|
|
+ BeanUtils.copyProperties(subOrder, message);
|
|
|
+
|
|
|
+ // 补全派单人信息
|
|
|
+ message.setDispatcherId(LoginHelper.getUserId());
|
|
|
+ if (LoginHelper.getLoginUser() != null) {
|
|
|
+ message.setDispatcherName(LoginHelper.getLoginUser().getNickname());
|
|
|
+ }
|
|
|
+
|
|
|
+ rabbitMqProducer.sendMessage(
|
|
|
+ OrderRabbitMqConfig.ORDER_EXCHANGE,
|
|
|
+ OrderRabbitMqConfig.ORDER_ROUTING_KEY,
|
|
|
+ message
|
|
|
+ );
|
|
|
+ } catch (Exception e) {
|
|
|
+ // 消息发送失败不影响派单,仅记录日志
|
|
|
+ }
|
|
|
+ */
|
|
|
+
|
|
|
return true;
|
|
|
}
|
|
|
|
|
|
@@ -210,15 +239,17 @@ public class SysSubOrderServiceImpl implements ISysSubOrderService {
|
|
|
SysSubOrderLog log = new SysSubOrderLog();
|
|
|
|
|
|
LoginUser loginUser = LoginHelper.getLoginUser();
|
|
|
- if (loginUser.getUserType().equals(UserType.FULFILLER_USER.getUserType())) {
|
|
|
+ // 此代码由AI生成 - 判断是否为履约者取消
|
|
|
+ boolean isFulfillerCancel = loginUser.getUserType().equals(UserType.FULFILLER_USER.getUserType());
|
|
|
+ if (isFulfillerCancel) {
|
|
|
log.setSubOrderId(subOrder.getId());
|
|
|
log.setActioner(LoginHelper.getUserId());
|
|
|
log.setActionerType(OrderLogActionerTypeEnum.FULFILLER.getValue());
|
|
|
log.setLogType(OrderLogTypeEnum.FULFILLER.getValue());
|
|
|
- org.dromara.order.api.enums.OrderLogFulfillerStepEnum step = org.dromara.order.api.enums.OrderLogFulfillerStepEnum.REJECT;
|
|
|
+ OrderLogFulfillerStepEnum step = OrderLogFulfillerStepEnum.REJECT;
|
|
|
log.setStep(step.getStep());
|
|
|
log.setTitle(step.getTitle());
|
|
|
- log.setContent(String.format(step.getContent(), loginUser.getNickname()));
|
|
|
+ log.setContent(String.format(step.getContent(), loginUser.getNickname(), bo.getReason()));
|
|
|
log.setTenantId(subOrder.getTenantId());
|
|
|
} else {
|
|
|
log.setSubOrderId(subOrder.getId());
|
|
|
@@ -228,7 +259,7 @@ public class SysSubOrderServiceImpl implements ISysSubOrderService {
|
|
|
OrderLogSystemStepEnum step = OrderLogSystemStepEnum.CANCEL;
|
|
|
log.setStep(step.getStep());
|
|
|
log.setTitle(step.getTitle());
|
|
|
- log.setContent(step.getContent());
|
|
|
+ log.setContent(String.format(step.getContent(), loginUser.getNickname(), bo.getReason()));
|
|
|
log.setTenantId(subOrder.getTenantId());
|
|
|
}
|
|
|
|
|
|
@@ -237,14 +268,134 @@ public class SysSubOrderServiceImpl implements ISysSubOrderService {
|
|
|
throw new RuntimeException("日志追加失败");
|
|
|
}
|
|
|
|
|
|
+ // 此代码由AI生成 - 履约者取消订单时发送消息通知
|
|
|
+ if (isFulfillerCancel) {
|
|
|
+ try {
|
|
|
+ SubOrderRejectMessage msg = new SubOrderRejectMessage();
|
|
|
+ msg.setOrderCode(subOrder.getCode());
|
|
|
+ msg.setOrderId(subOrder.getId());
|
|
|
+ msg.setStoreSite(subOrder.getStoreSite());
|
|
|
+ msg.setFulfillerId(LoginHelper.getUserId());
|
|
|
+ msg.setFulfillerName(loginUser.getNickname());
|
|
|
+ msg.setRejectReason(bo.getReason());
|
|
|
+ // 获取门店名称
|
|
|
+ String storeName = remoteStoreService.getNameById(subOrder.getStore());
|
|
|
+ msg.setStoreName(storeName != null ? storeName : "未知门店");
|
|
|
+ // 设置取消时间
|
|
|
+ msg.setCancelTime(new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(new Date()));
|
|
|
+ // 此代码由AI生成 - 标识为取消操作
|
|
|
+ msg.setActionType("CANCEL");
|
|
|
+
|
|
|
+ rabbitMqProducer.sendMessage(
|
|
|
+ OrderRabbitMqConfig.ORDER_EXCHANGE,
|
|
|
+ OrderRabbitMqConfig.ORDER_REJECT_ROUTING_KEY,
|
|
|
+ msg
|
|
|
+ );
|
|
|
+ } catch (Exception e) {
|
|
|
+ // 消息发送失败不影响主流程
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
return true;
|
|
|
}
|
|
|
|
|
|
@Override
|
|
|
public SysSubOrderVo getInfo(Long id) {
|
|
|
- return baseMapper.selectVoById(id);
|
|
|
+ SysSubOrderVo vo = baseMapper.selectVoById(id);
|
|
|
+ if (vo == null) {
|
|
|
+ return null;
|
|
|
+ }
|
|
|
+ return vo;
|
|
|
}
|
|
|
|
|
|
+// @Override
|
|
|
+// public TableDataInfo<SysSubOrderListPageVo> listOnMerchant(SysSubOrderListPageBo bo, PageQuery pageQuery) {
|
|
|
+//
|
|
|
+// LambdaQueryWrapper<SysSubOrder> orderWrapper = Wrappers.lambdaQuery(SysSubOrder.class);
|
|
|
+//
|
|
|
+// if (StringUtils.isNotBlank(bo.getContent())) {
|
|
|
+// List<Long> storeIds = remoteStoreService.selectIdsByName(bo.getContent());
|
|
|
+// List<Long> userIds = remoteUserService.selectUserIdsByName(bo.getContent());
|
|
|
+// List<Long> customerIds = remoteCustomerService.selectIdsByName(bo.getContent());
|
|
|
+// orderWrapper.and(w -> w
|
|
|
+// .in(SysSubOrder::getStore, WrapperUtils.convertIds(storeIds)).or()
|
|
|
+// .in(SysSubOrder::getOrderPlacer, WrapperUtils.convertIds(userIds)).or()
|
|
|
+// .in(SysSubOrder::getUsrCustomer, WrapperUtils.convertIds(customerIds))
|
|
|
+// );
|
|
|
+//
|
|
|
+// }
|
|
|
+//
|
|
|
+// Page<SysSubOrder> page = baseMapper.selectPage(
|
|
|
+// pageQuery.build(),
|
|
|
+// orderWrapper.orderByDesc(SysSubOrder::getId)
|
|
|
+// .eq(bo.getStatus() != null, SysSubOrder::getStatus, bo.getStatus())
|
|
|
+// .eq(bo.getService() != null, SysSubOrder::getService, bo.getService())
|
|
|
+// );
|
|
|
+//
|
|
|
+// List<Long> petIds = new ArrayList<>();
|
|
|
+// List<Long> storeIds = new ArrayList<>();
|
|
|
+// List<Long> customerIds = new ArrayList<>();
|
|
|
+// List<Long> userIds = new ArrayList<>();
|
|
|
+// List<Long> fulfillerIds = new ArrayList<>();
|
|
|
+// page.getRecords().forEach(e -> {
|
|
|
+// petIds.add(e.getUsrPet());
|
|
|
+// customerIds.add(e.getUsrCustomer());
|
|
|
+// storeIds.add(e.getStore());
|
|
|
+// userIds.add(e.getOrderPlacer());
|
|
|
+// if (e.getFulfiller() != null) {
|
|
|
+// fulfillerIds.add(e.getFulfiller());
|
|
|
+// }
|
|
|
+// });
|
|
|
+// Map<Long, RemotePetVo> petMap = new HashMap<>();
|
|
|
+// Map<Long, RemoteStoreVo> storeMap = new HashMap<>();
|
|
|
+// Map<Long, RemoteCustomerVo> customerMap = new HashMap<>();
|
|
|
+// Map<Long, RemoteUserVo> userMap = new HashMap<>();
|
|
|
+// Map<Long, RemoteFulfillerVo> fulfillerMap = new HashMap<>();
|
|
|
+// remotePetService.getByIds(petIds).forEach(e -> petMap.put(e.getId(), e));
|
|
|
+// remoteStoreService.getByIds(storeIds).forEach(e -> storeMap.put(e.getId(), e));
|
|
|
+// remoteUserService.getByIds(userIds).forEach(e -> userMap.put(e.getUserId(), e));
|
|
|
+// remoteCustomerService.getByIds(customerIds).forEach(e -> customerMap.put(e.getId(), e));
|
|
|
+// remoteFulfillerService.getByIds(fulfillerIds).forEach(e -> fulfillerMap.put(e.getId(), e));
|
|
|
+//
|
|
|
+// return TableDataInfo.build(page.convert(e -> {
|
|
|
+// SysSubOrderListPageVo vo = new SysSubOrderListPageVo();
|
|
|
+// vo.setId(e.getId());
|
|
|
+// vo.setCode(e.getCode());
|
|
|
+// vo.setService(e.getService());
|
|
|
+// vo.setServiceTime(e.getServiceTime());
|
|
|
+// vo.setMode(e.getMode());
|
|
|
+// vo.setType(e.getType());
|
|
|
+// vo.setPet(e.getUsrPet());
|
|
|
+// RemotePetVo pet = petMap.get(e.getUsrPet());
|
|
|
+// vo.setPetName(pet.getName());
|
|
|
+// vo.setPetBreed(pet.getBreed());
|
|
|
+// vo.setCustomer(e.getUsrCustomer());
|
|
|
+// RemoteCustomerVo customer = customerMap.get(e.getUsrCustomer());
|
|
|
+// vo.setCustomerName(customer.getName());
|
|
|
+// vo.setToAddress(e.getToAddress());
|
|
|
+// vo.setSite(e.getStoreSite());
|
|
|
+// vo.setStore(e.getStore());
|
|
|
+// RemoteStoreVo store = storeMap.get(e.getStore());
|
|
|
+// vo.setStoreName(store.getName());
|
|
|
+// vo.setPlacer(e.getOrderPlacer());
|
|
|
+// RemoteUserVo placer = userMap.get(e.getOrderPlacer());
|
|
|
+// vo.setPlacerUsername(placer.getUserName());
|
|
|
+// vo.setCreateTime(e.getCreateTime());
|
|
|
+// vo.setStatus(e.getStatus());
|
|
|
+// vo.setFulfiller(e.getFulfiller());
|
|
|
+// RemoteFulfillerVo fulfiller = fulfillerMap.get(e.getFulfiller());
|
|
|
+// if (fulfiller != null) {
|
|
|
+// vo.setFulfillerName(fulfiller.getName());
|
|
|
+// vo.setFulfillerStatus(fulfiller.getStatus());
|
|
|
+// }
|
|
|
+// vo.setRemark(e.getRemark());
|
|
|
+// vo.setNursingSummary(e.getNursingSummary());
|
|
|
+// vo.setNursingSummaryTime(e.getNursingSummaryTime());
|
|
|
+// return vo;
|
|
|
+// }));
|
|
|
+//
|
|
|
+// }
|
|
|
+
|
|
|
@Override
|
|
|
public TableDataInfo<SysSubOrderPendingAcceptPageVo> listPendingAccept(SysSubOrderPendingAcceptPageBo bo, PageQuery pageQuery) {
|
|
|
|
|
|
@@ -545,7 +696,6 @@ public class SysSubOrderServiceImpl implements ISysSubOrderService {
|
|
|
vo.setToAddress(e.getToAddress());
|
|
|
vo.setRemark(e.getRemark());
|
|
|
vo.setStatus(e.getStatus());
|
|
|
- vo.setServiceFlag(e.getServiceFlag());
|
|
|
return vo;
|
|
|
}));
|
|
|
}
|
|
|
@@ -653,16 +803,42 @@ public class SysSubOrderServiceImpl implements ISysSubOrderService {
|
|
|
log.setActioner(LoginHelper.getUserId());
|
|
|
log.setActionerType(OrderLogActionerTypeEnum.FULFILLER.getValue());
|
|
|
log.setLogType(OrderLogTypeEnum.FULFILLER.getValue());
|
|
|
- org.dromara.order.api.enums.OrderLogFulfillerStepEnum step = org.dromara.order.api.enums.OrderLogFulfillerStepEnum.REJECT;
|
|
|
+ OrderLogFulfillerStepEnum step = OrderLogFulfillerStepEnum.REJECT;
|
|
|
log.setStep(step.getStep());
|
|
|
log.setTitle(step.getTitle());
|
|
|
- log.setContent(bo.getRejectReason());
|
|
|
+ log.setContent(String.format(step.getContent(), LoginHelper.getLoginUser().getNickname(), bo.getRejectReason()));
|
|
|
log.setTenantId(subOrder.getTenantId());
|
|
|
boolean logFlag = subOrderLogMapper.insert(log) == 0;
|
|
|
if (logFlag) {
|
|
|
throw new RuntimeException("日志新增失败");
|
|
|
}
|
|
|
|
|
|
+ // 此代码由AI生成 - 发送拒单消息(包含门店名称和取消时间)
|
|
|
+ try {
|
|
|
+ SubOrderRejectMessage msg = new SubOrderRejectMessage();
|
|
|
+ msg.setOrderCode(subOrder.getCode());
|
|
|
+ msg.setOrderId(subOrder.getId());
|
|
|
+ msg.setStoreSite(subOrder.getStoreSite());
|
|
|
+ msg.setFulfillerId(LoginHelper.getUserId());
|
|
|
+ msg.setFulfillerName(LoginHelper.getLoginUser().getNickname());
|
|
|
+ msg.setRejectReason(bo.getRejectReason());
|
|
|
+ // 获取门店名称
|
|
|
+ String storeName = remoteStoreService.getNameById(subOrder.getStore());
|
|
|
+ msg.setStoreName(storeName != null ? storeName : "未知门店");
|
|
|
+ // 设置取消时间
|
|
|
+ msg.setCancelTime(new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(new Date()));
|
|
|
+ // 此代码由AI生成 - 标识为拒单操作
|
|
|
+ msg.setActionType("REJECT");
|
|
|
+
|
|
|
+ rabbitMqProducer.sendMessage(
|
|
|
+ OrderRabbitMqConfig.ORDER_EXCHANGE,
|
|
|
+ OrderRabbitMqConfig.ORDER_REJECT_ROUTING_KEY,
|
|
|
+ msg
|
|
|
+ );
|
|
|
+ } catch (Exception e) {
|
|
|
+ // 忽略发送异常,以不影响主流程
|
|
|
+ }
|
|
|
+
|
|
|
return true;
|
|
|
}
|
|
|
|
|
|
@@ -899,6 +1075,7 @@ public class SysSubOrderServiceImpl implements ISysSubOrderService {
|
|
|
RemoteCustomerVo customer = customerMap.get(e.getUsrCustomer());
|
|
|
if (customer != null) {
|
|
|
vo.setCustomerName(customer.getName());
|
|
|
+ vo.setCustomerPhone(customer.getPhone());
|
|
|
}
|
|
|
vo.setToAddress(e.getToAddress());
|
|
|
vo.setSite(e.getStoreSite());
|