|
|
@@ -6,6 +6,7 @@ import com.baomidou.mybatisplus.core.toolkit.Wrappers;
|
|
|
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
|
|
|
import lombok.RequiredArgsConstructor;
|
|
|
import org.apache.dubbo.config.annotation.DubboReference;
|
|
|
+import org.apache.seata.spring.annotation.GlobalTransactional;
|
|
|
import org.dromara.api.RemoteCustomerService;
|
|
|
import org.dromara.api.RemotePetService;
|
|
|
import org.dromara.api.domain.vo.RemoteCustomerVo;
|
|
|
@@ -24,10 +25,7 @@ import org.dromara.order.domain.SysOrder;
|
|
|
import org.dromara.order.domain.SysSubOrder;
|
|
|
import org.dromara.order.domain.SysSubOrderLog;
|
|
|
import org.dromara.order.domain.bo.*;
|
|
|
-import org.dromara.order.domain.vo.SysSubOrderCountVo;
|
|
|
-import org.dromara.order.domain.vo.SysSubOrderListPageVo;
|
|
|
-import org.dromara.order.domain.vo.SysSubOrderPendingAcceptPageVo;
|
|
|
-import org.dromara.order.domain.vo.SysSubOrderVo;
|
|
|
+import org.dromara.order.domain.vo.*;
|
|
|
import org.dromara.order.enums.OrderLogActionTypeEnum;
|
|
|
import org.dromara.order.enums.OrderLogActionerTypeEnum;
|
|
|
import org.dromara.order.enums.OrderLogTypeEnum;
|
|
|
@@ -45,6 +43,7 @@ import org.springframework.stereotype.Service;
|
|
|
import org.springframework.transaction.annotation.Transactional;
|
|
|
|
|
|
import java.util.*;
|
|
|
+import java.util.stream.Collectors;
|
|
|
|
|
|
@Service
|
|
|
@RequiredArgsConstructor
|
|
|
@@ -145,6 +144,8 @@ public class SysSubOrderServiceImpl implements ISysSubOrderService {
|
|
|
}
|
|
|
vo.setPrice(e.getPrice());
|
|
|
vo.setRemark(e.getRemark());
|
|
|
+ vo.setNursingSummary(e.getNursingSummary());
|
|
|
+ vo.setNursingSummaryTime(e.getNursingSummaryTime());
|
|
|
return vo;
|
|
|
}));
|
|
|
}
|
|
|
@@ -275,6 +276,8 @@ public class SysSubOrderServiceImpl implements ISysSubOrderService {
|
|
|
}
|
|
|
vo.setPrice(e.getPrice());
|
|
|
vo.setRemark(e.getRemark());
|
|
|
+ vo.setNursingSummary(e.getNursingSummary());
|
|
|
+ vo.setNursingSummaryTime(e.getNursingSummaryTime());
|
|
|
return vo;
|
|
|
}));
|
|
|
|
|
|
@@ -393,4 +396,178 @@ public class SysSubOrderServiceImpl implements ISysSubOrderService {
|
|
|
vo.setPunishment(0L);
|
|
|
return vo;
|
|
|
}
|
|
|
+
|
|
|
+ @Transactional(rollbackFor = Exception.class)
|
|
|
+ @Override
|
|
|
+ public boolean clockIn(SysSubOrderClockInBo bo) {
|
|
|
+
|
|
|
+ SysSubOrder subOrder = baseMapper.selectById(bo.getOrderId());
|
|
|
+ if (subOrder.getStatus().equals(OrderStatusEnum.PENDING_SERVICE.getValue())) {
|
|
|
+ subOrder.setStatus(OrderStatusEnum.IN_SERVICE.getValue());
|
|
|
+ boolean flag = baseMapper.updateById(subOrder) == 0;
|
|
|
+ if (flag) {
|
|
|
+ throw new RuntimeException("修改订单状态失败");
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ if (bo.getType().equals(OrderLogActionTypeEnum.FINISH_SERVICE.getValue())) {
|
|
|
+ subOrder.setStatus(OrderStatusEnum.PENDING_CONFIRM.getValue());
|
|
|
+ boolean flag = baseMapper.updateById(subOrder) == 0;
|
|
|
+ if (flag) {
|
|
|
+ throw new RuntimeException("修改订单状态失败");
|
|
|
+ }
|
|
|
+
|
|
|
+ }
|
|
|
+
|
|
|
+ SysSubOrderLog log = new SysSubOrderLog();
|
|
|
+ log.setSubOrderId(subOrder.getId());
|
|
|
+ log.setActioner(LoginHelper.getUserId());
|
|
|
+ log.setActionerType(OrderLogActionerTypeEnum.FULFILLER.getValue());
|
|
|
+ log.setLogType(OrderLogTypeEnum.FULFILLER.getValue());
|
|
|
+ log.setActionType(bo.getType());
|
|
|
+ log.setTitle(bo.getTitle());
|
|
|
+ log.setContent(bo.getContent());
|
|
|
+ log.setPhotos(bo.getPhotos().stream().map(String::valueOf).collect(Collectors.joining(",")));
|
|
|
+ log.setTenantId(subOrder.getTenantId());
|
|
|
+ boolean flag = subOrderLogMapper.insert(log) == 0;
|
|
|
+ if (flag) {
|
|
|
+ throw new RuntimeException("记录服务进度失败");
|
|
|
+ }
|
|
|
+
|
|
|
+ if (bo.getType().equals(OrderLogActionTypeEnum.FINISH_SERVICE.getValue())) {
|
|
|
+ SysSubOrderLog waitingLog = new SysSubOrderLog();
|
|
|
+ waitingLog.setSubOrderId(subOrder.getId());
|
|
|
+ waitingLog.setActioner(LoginHelper.getUserId());
|
|
|
+ waitingLog.setActionerType(OrderLogActionerTypeEnum.FULFILLER.getValue());
|
|
|
+ waitingLog.setLogType(OrderLogTypeEnum.FULFILLER.getValue());
|
|
|
+ waitingLog.setActionType(OrderLogActionTypeEnum.WAITING_FOR_CONFIRM.getValue());
|
|
|
+ waitingLog.setTitle("待商家确认");
|
|
|
+ waitingLog.setContent("履约者已提交完成信息,等待商家确认订单");
|
|
|
+ waitingLog.setTenantId(subOrder.getTenantId());
|
|
|
+ boolean waitingLogFlag = subOrderLogMapper.insert(waitingLog) == 0;
|
|
|
+ if (waitingLogFlag) {
|
|
|
+ throw new RuntimeException("记录服务进度(待上架确认)失败");
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ if (bo.getType().equals(OrderLogActionTypeEnum.ARRIVE_LOCK_ON.getValue())) {
|
|
|
+ SysSubOrderLog systemLog = new SysSubOrderLog();
|
|
|
+ systemLog.setSubOrderId(subOrder.getId());
|
|
|
+ systemLog.setActioner(LoginHelper.getUserId());
|
|
|
+ systemLog.setActionerType(OrderLogActionerTypeEnum.SYS_USER.getValue());
|
|
|
+ systemLog.setLogType(OrderLogTypeEnum.ORDER.getValue());
|
|
|
+ systemLog.setActionType(OrderLogActionTypeEnum.ARRIVED.getValue());
|
|
|
+ systemLog.setTitle(OrderLogActionTypeEnum.ARRIVED.getLabel());
|
|
|
+ systemLog.setContent("履约者已打卡");
|
|
|
+ systemLog.setTenantId(subOrder.getTenantId());
|
|
|
+ boolean systemFlag = subOrderLogMapper.insert(systemLog) == 0;
|
|
|
+ if (systemFlag) {
|
|
|
+ throw new RuntimeException("记录订单日志失败");
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ return true;
|
|
|
+ }
|
|
|
+
|
|
|
+ @Override
|
|
|
+ public TableDataInfo<SysSubOrderListOnMyOrderPageVo> listOnMyOrder(SysSubOrderListOnMyOrderBo bo, PageQuery pageQuery) {
|
|
|
+
|
|
|
+ LambdaQueryWrapper<SysSubOrder> wrapper = Wrappers.lambdaQuery(SysSubOrder.class)
|
|
|
+ .eq(SysSubOrder::getStatus, bo.getStatus())
|
|
|
+ .ge(bo.getStartServiceTime() != null, SysSubOrder::getServiceTime, bo.getStartServiceTime())
|
|
|
+ .le(bo.getEndServiceTime() != null, SysSubOrder::getServiceTime, bo.getEndServiceTime())
|
|
|
+ .orderByDesc(SysSubOrder::getId);
|
|
|
+
|
|
|
+ if (StringUtils.isNotBlank(bo.getContent())) {
|
|
|
+ List<Long> ids = remoteCustomerService.getIdsByNameAndPhone(bo.getContent());
|
|
|
+ wrapper.in(SysSubOrder::getUsrCustomer, WrapperUtils.convertIds(ids));
|
|
|
+ }
|
|
|
+
|
|
|
+ Page<SysSubOrder> page = baseMapper.selectPage(pageQuery.build(), wrapper);
|
|
|
+
|
|
|
+ List<Long> petIds = new ArrayList<>();
|
|
|
+ List<Long> customerIds = new ArrayList<>();
|
|
|
+ Map<Long, RemotePetVo> petMap = new HashMap<>();
|
|
|
+ Map<Long, RemoteCustomerVo> customerMap = new HashMap<>();
|
|
|
+ page.getRecords().forEach(e -> {
|
|
|
+ petIds.add(e.getUsrPet());
|
|
|
+ customerIds.add(e.getUsrCustomer());
|
|
|
+ });
|
|
|
+ remotePetService.getByIds(petIds).forEach(e -> petMap.put(e.getId(), e));
|
|
|
+ remoteCustomerService.getByIds(customerIds).forEach(e -> customerMap.put(e.getId(), e));
|
|
|
+
|
|
|
+ return TableDataInfo.build(page.convert(e -> {
|
|
|
+ SysSubOrderListOnMyOrderPageVo vo = new SysSubOrderListOnMyOrderPageVo();
|
|
|
+ vo.setId(e.getId());
|
|
|
+ vo.setService(e.getService());
|
|
|
+ vo.setPrice(e.getPrice());
|
|
|
+ vo.setServiceTime(e.getServiceTime());
|
|
|
+ vo.setPet(e.getUsrPet());
|
|
|
+ RemotePetVo pet = petMap.get(e.getUsrPet());
|
|
|
+ if (pet != null) {
|
|
|
+ vo.setPetName(pet.getName());
|
|
|
+ vo.setBreed(pet.getBreed());
|
|
|
+ }
|
|
|
+ vo.setStore(e.getStore());
|
|
|
+// vo.setStoreName();
|
|
|
+// vo.setStoreAreaCode();
|
|
|
+// vo.setStoreAddress();
|
|
|
+ vo.setCustomer(e.getUsrCustomer());
|
|
|
+ RemoteCustomerVo customer = customerMap.get(e.getUsrCustomer());
|
|
|
+ if (customer != null) {
|
|
|
+ vo.setCustomerName(customer.getName());
|
|
|
+ vo.setCustomerPhone(customer.getAddress());
|
|
|
+ }
|
|
|
+ vo.setFromCode(e.getFromCode());
|
|
|
+ vo.setFromAddress(e.getFromAddress());
|
|
|
+ vo.setToCode(e.getToCode());
|
|
|
+ vo.setToAddress(e.getToAddress());
|
|
|
+ vo.setRemark(e.getRemark());
|
|
|
+ return vo;
|
|
|
+ }));
|
|
|
+ }
|
|
|
+
|
|
|
+ @GlobalTransactional(rollbackFor = Exception.class)
|
|
|
+ @Override
|
|
|
+ public boolean confirm(SysSubOrderConfirmBo bo) {
|
|
|
+
|
|
|
+ SysSubOrder subOrder = baseMapper.selectById(bo.getId());
|
|
|
+ subOrder.setStatus(OrderStatusEnum.COMPLETED.getValue());
|
|
|
+ boolean flag = baseMapper.updateById(subOrder) == 0;
|
|
|
+ if (flag) {
|
|
|
+ throw new RuntimeException("修改订单状态失败");
|
|
|
+ }
|
|
|
+
|
|
|
+ SysSubOrderLog log = new SysSubOrderLog();
|
|
|
+ log.setSubOrderId(subOrder.getId());
|
|
|
+ log.setActioner(LoginHelper.getUserId());
|
|
|
+ log.setActionerType(OrderLogActionerTypeEnum.SYS_USER.getValue());
|
|
|
+ log.setLogType(OrderLogTypeEnum.FULFILLER.getValue());
|
|
|
+ log.setActionType(OrderLogActionTypeEnum.FINISH.getValue());
|
|
|
+ log.setTitle(OrderLogActionTypeEnum.FINISH.getLabel());
|
|
|
+ log.setContent("用户/商家已确认,服务圆满结束");
|
|
|
+ log.setTenantId(subOrder.getTenantId());
|
|
|
+ boolean logFlag = subOrderLogMapper.insert(log) == 0;
|
|
|
+ if (logFlag) {
|
|
|
+ throw new RuntimeException("新增日志失败");
|
|
|
+ }
|
|
|
+
|
|
|
+ // 履约者拿到佣金
|
|
|
+ boolean fulfillerFlag = remoteFulfillerService.settlement(subOrder.getFulfiller(), subOrder.getPrice(), subOrder.getCode());
|
|
|
+ if (!fulfillerFlag) {
|
|
|
+ throw new RuntimeException("履约者新增佣金失败");
|
|
|
+ }
|
|
|
+
|
|
|
+ return true;
|
|
|
+ }
|
|
|
+
|
|
|
+ @Override
|
|
|
+ public boolean nursingSummary(SysSubOrderNursingSummaryBo bo) {
|
|
|
+ return baseMapper.update(
|
|
|
+ Wrappers.lambdaUpdate(SysSubOrder.class)
|
|
|
+ .eq(SysSubOrder::getId, bo.getOrderId())
|
|
|
+ .set(SysSubOrder::getNursingSummary, bo.getContent())
|
|
|
+ .set(SysSubOrder::getNursingSummaryTime, new Date())
|
|
|
+ ) > 0;
|
|
|
+ }
|
|
|
}
|