{{ index + 1 }}.
[{{ question.type === '培训' ? '填空题' : '选择题' }}]
@@ -86,7 +135,7 @@ export default {
data() {
return {
loading: false,
- activeTab: 'answers',
+ activeTab: 'base',
// examInfo: {
// name: '姓名',
// phone: '手机号',
diff --git a/CatmDogd-Mall-Front-test/src/views/model/AppletUsersTeacher/index.vue b/CatmDogd-Mall-Front-test/src/views/model/AppletUsersTeacher/index.vue
index a1748d4..c85a4b3 100644
--- a/CatmDogd-Mall-Front-test/src/views/model/AppletUsersTeacher/index.vue
+++ b/CatmDogd-Mall-Front-test/src/views/model/AppletUsersTeacher/index.vue
@@ -154,8 +154,24 @@
-
-
+
+
+ 是
+ 否
+
+
+
+
+ {{ {
+ '3': '猫',
+ '4': '狗',
+ '5': '异宠'
+ }[item] }}
+
+
@@ -227,12 +243,20 @@
+
+
+
-
+
+
+
+
-
-
+
+
+
+
@@ -433,6 +457,9 @@ export default {
const id = row.id || this.ids
getAppletUsersTeacher(id).then(response => {
this.form = response.data;
+
+ this.form.petType = this.form.petType ? this.form.petType.split(',') : [];
+
this.open = true;
this.title = "修改伴宠师认证";
});
@@ -441,6 +468,7 @@ export default {
submitForm() {
this.$refs["form"].validate(valid => {
if (valid) {
+ this.form.petType = this.form.petType.join(',');
if (this.form.id != null) {
updateAppletUsersTeacher(this.form).then(response => {
this.$modal.msgSuccess("修改成功");
diff --git a/CatmDogd-Mall-Front-test/src/views/model/AppletUsersTeacher/openindex.vue b/CatmDogd-Mall-Front-test/src/views/model/AppletUsersTeacher/openindex.vue
index 1f7733d..f534820 100644
--- a/CatmDogd-Mall-Front-test/src/views/model/AppletUsersTeacher/openindex.vue
+++ b/CatmDogd-Mall-Front-test/src/views/model/AppletUsersTeacher/openindex.vue
@@ -205,7 +205,10 @@
:value="parseInt(dict.value)">
-
+
+
+
+
@@ -250,7 +252,7 @@
-
+ -->
@@ -432,7 +434,7 @@ export default {
getAppletUsersTeacher(id).then(response => {
this.form = response.data;
this.open = true;
- this.title = "修改伴宠师认证";
+ this.title = "审核伴宠师认证";
});
},
/** 提交按钮 */
diff --git a/CatmDogd-Mall-Front-test/src/views/model/appletOrderDateFrequency/index.vue b/CatmDogd-Mall-Front-test/src/views/model/appletOrderDateFrequency/index.vue
index 9ac5017..b392b11 100644
--- a/CatmDogd-Mall-Front-test/src/views/model/appletOrderDateFrequency/index.vue
+++ b/CatmDogd-Mall-Front-test/src/views/model/appletOrderDateFrequency/index.vue
@@ -158,7 +158,7 @@
-
+
answerBase = JsonUtils.parseArray(list, AppletAnswerBase.class);
-//
-// Long userId = null;
-//
-// for (AppletAnswerBase appletAnswerBase : answerBase) {
-// if(appletAnswerBase.getUserId() == null){
-// return AjaxResult.error("userId用户信息标识不能为空");
-// }
-// if(appletAnswerBase.getQuestionId() == null){
-// return AjaxResult.error("questionId标识不能为空");
-// }
-// userId = appletAnswerBase.getUserId();
-// }
-//
-//
-//// //选删除之前的答案,再去添加新的
-// LambdaQueryWrapper
qw = Wrappers.lambdaQuery()
-// .eq(AppletAnswerBase::getUserId, userId);
-//
-// appletAnswerBaseService.remove(qw);
-//
-// return toAjax(appletAnswerBaseService.saveBatch(answerBase));
-// }
+ @ApiOperation("伴宠师工作台-添加用户基本考核答案V2")
+ @PostMapping("/addBaseAnswerV2")
+ @Transactional
+ public AjaxResult addBaseAnswerV2(@RequestBody AppletAnswerSubmitBo answerSubmitBo){
+
+ Long userId = null;
+
+ for (AppletAnswerBase appletAnswerBase : answerSubmitBo.getAnswerBase()) {
+ if(appletAnswerBase.getUserId() == null){
+ return AjaxResult.error("userId用户信息标识不能为空");
+ }
+ if(appletAnswerBase.getQuestionId() == null){
+ return AjaxResult.error("questionId标识不能为空");
+ }
+ userId = appletAnswerBase.getUserId();
+ }
+
+// //选删除之前的答案,再去添加新的
+ LambdaQueryWrapper qw = Wrappers.lambdaQuery()
+ .eq(AppletAnswerBase::getUserId, userId);
+
+ appletAnswerBaseService.remove(qw);
+
+ AppletUsersTeacher byId = appletUsersTeacherService.lambdaQuery()
+ .eq(AppletUsersTeacher::getUserId, userId).one();
+
+ //累计考试次数
+ if (ObjectUtils.isNotEmpty(byId)){
+ Integer examNumber = byId.getExamNumber() == null ? 0 : byId.getExamNumber();
+ byId.setExamNumber(examNumber + 1);
+ byId.setExamTime(LocalDateTime.now());
+ appletUsersTeacherService.updateById(byId);
+ }
+
+ return toAjax(appletAnswerBaseService.saveBatch(answerSubmitBo.getAnswerBase()));
+ }
+
+ @ApiOperation("伴宠师工作台-查询考试结果对象")
+ @GetMapping("/getAnswerBuildData")
+ public AjaxResult getAnswerBuildData(Long userId){
+ AppletUsersTeacher teacher = appletUsersTeacherService.selectAppletUsersTeacherByUserId(userId);
+ appletUsersTeacherService.buildData(teacher);
+ return AjaxResult.success(teacher);
+ }
@ApiOperation("伴宠师工作台-查询用户培训考核答案列表")
@@ -324,12 +341,15 @@ public class ApiAppletExaminationController {
@ApiOperation("伴宠师工作台-重新考试")
@GetMapping("/retakeExam")
- public AjaxResult retakeExam(Long userId){
+ public AjaxResult retakeExam(Long userId, Integer type){
- LambdaQueryWrapper qw1 = Wrappers.lambdaQuery()
- .eq(AppletAnswerBase::getUserId, userId);
+ if (type == 0){//清除基本考核
+
+ LambdaQueryWrapper qw1 = Wrappers.lambdaQuery()
+ .eq(AppletAnswerBase::getUserId, userId);
- appletAnswerBaseMapper.delete(qw1);
+ appletAnswerBaseMapper.delete(qw1);
+ }
LambdaQueryWrapper qw2 = Wrappers.lambdaQuery()
.eq(AppletAnswerTrain::getUserId, userId);
@@ -342,6 +362,7 @@ public class ApiAppletExaminationController {
if (ObjectUtils.isNotEmpty(one)){
one.setStatus(0L);
+ one.setReason("");
appletUsersTeacherService.updateById(one);
}
diff --git a/ruoyi-catdog/src/main/java/com/ruoyi/applet/contoller/ApiAppletOrderController.java b/ruoyi-catdog/src/main/java/com/ruoyi/applet/contoller/ApiAppletOrderController.java
index 11b3df5..265f5ec 100644
--- a/ruoyi-catdog/src/main/java/com/ruoyi/applet/contoller/ApiAppletOrderController.java
+++ b/ruoyi-catdog/src/main/java/com/ruoyi/applet/contoller/ApiAppletOrderController.java
@@ -8,10 +8,13 @@ import com.cyl.h5.service.H5OrderService;
import com.cyl.h5.service.H5PetCareService;
import com.cyl.h5.service.H5PetService;
import com.cyl.manager.oms.domain.OmsOrderService;
+import com.cyl.manager.oms.domain.Order;
import com.cyl.manager.oms.domain.OrderItem;
+import com.cyl.manager.oms.domain.OrderOperateHistory;
import com.cyl.manager.oms.mapper.OmsOrderServiceMapper;
import com.cyl.manager.oms.mapper.OrderItemMapper;
import com.cyl.manager.oms.mapper.OrderMapper;
+import com.cyl.manager.oms.mapper.OrderOperateHistoryMapper;
import com.cyl.manager.oms.service.OrderService;
import com.cyl.manager.ums.domain.Pet;
import com.cyl.manager.ums.domain.PetCare;
@@ -21,9 +24,11 @@ import com.ruoyi.applet.pojo.dto.AppletOrderDateVo;
import com.ruoyi.applet.pojo.vo.AppletOrderDateAddressReturn;
import com.ruoyi.applet.pojo.vo.AppletOrderDateVoReturn;
import com.ruoyi.applet.service.IMallOrderService;
+import com.ruoyi.common.constant.Constants;
import com.ruoyi.common.core.controller.BaseController;
import com.ruoyi.common.core.domain.AjaxResult;
import com.ruoyi.common.core.page.TableDataInfo;
+import com.ruoyi.common.exception.ServiceException;
import com.ruoyi.common.utils.StringUtils;
import com.ruoyi.common.utils.uuid.IdUtils;
import com.ruoyi.model.domain.*;
@@ -40,6 +45,7 @@ import java.math.BigDecimal;
import java.math.RoundingMode;
import java.text.SimpleDateFormat;
import java.time.LocalDateTime;
+import java.time.temporal.ChronoUnit;
import java.util.*;
import java.util.stream.Collectors;
@@ -95,6 +101,10 @@ public class ApiAppletOrderController extends BaseController {
@Autowired
private IAppletOrderDateFrequencyService appletOrderDateFrequencyService;
+ @Autowired
+ private OrderOperateHistoryMapper orderOperateHistoryMapper;
+
+
@ApiOperation("接单大厅列表-带分页")
@GetMapping("/list")
@@ -520,7 +530,7 @@ public class ApiAppletOrderController extends BaseController {
@ApiOperation("接单大厅 - 立即接单")
@PostMapping("/startByOrderId")
@Synchronized
- @Transactional
+ @Transactional(timeout = 30)
public AjaxResult startByOrderId(@RequestBody AppletOrder appletOrder){
if(appletOrder.getId() == null){
return AjaxResult.error("订单标识不能为空");
@@ -530,6 +540,9 @@ public class ApiAppletOrderController extends BaseController {
}
AppletOrder order = appletOrderService.selectAppletOrderById(appletOrder.getId());
+ if (order == null){
+ return AjaxResult.error("无效订单");
+ }
if(order.getStatus() == 1){
return AjaxResult.error("该订单已被接单");
}
@@ -573,27 +586,38 @@ public class ApiAppletOrderController extends BaseController {
appletOrderItemService.insertAppletOrderItem(appletOrderItem);
- appletOrder.setStatus(1);
- appletOrderService.updateAppletOrder(appletOrder);
+ order.setStatus(1);//修改状态成已接单
+ order.setUserId(appletOrder.getUserId());//
+ order.setAcceptTime(LocalDateTime.now());//接单时间
+ order.setWhenTakOrders(ChronoUnit.SECONDS.between(order.getPayTime(), order.getAcceptTime()));//接单用时
+ // 只更新必要的字段
+ appletOrderService.lambdaUpdate()
+ .eq(AppletOrder::getId, order.getId())
+ .set(AppletOrder::getStatus, order.getStatus())
+ .set(AppletOrder::getUserId, order.getUserId())
+ .set(AppletOrder::getAcceptTime, order.getAcceptTime())
+ .set(AppletOrder::getWhenTakOrders, order.getWhenTakOrders())
+ .update();
- H5OrderVO h5OrderVO = h5OrderService.orderDetail(order.getOrderId());
- //根据服务频率 服务日期 生成日订单
- for (OmsOrderService service : h5OrderVO.getOrderServiceList()) {
- AppletOrderItemDate appletOrderItemDate = new AppletOrderItemDate();
-
- appletOrderItemDate.setUserId(appletOrder.getUserId());
- appletOrderItemDate.setOrderId(id);
- appletOrderItemDate.setStatus(0);
- appletOrderItemDate.setOrderServiceId(service.getId());
- appletOrderItemDate.setServiceDate(service.getServiceDate());
- appletOrderItemDate.setCityAddress(h5OrderVO.getReceiverProvince() + h5OrderVO.getReceiverCity() + h5OrderVO.getReceiverDistrict());
- appletOrderItemDate.setAddress(h5OrderVO.getReceiverDetailAddress());
- appletOrderItemDateService.insertAppletOrderItemDate(appletOrderItemDate);
- }
+ H5OrderVO h5OrderVO = h5OrderService.orderDetail(order.getOrderId());
+ //根据服务频率 服务日期 生成日订单 【废弃】
+// for (OmsOrderService service : h5OrderVO.getOrderServiceList()) {
+// AppletOrderItemDate appletOrderItemDate = new AppletOrderItemDate();
+//
+// appletOrderItemDate.setUserId(appletOrder.getUserId());
+// appletOrderItemDate.setOrderId(id);
+// appletOrderItemDate.setStatus(0);
+// appletOrderItemDate.setOrderServiceId(service.getId());
+// appletOrderItemDate.setServiceDate(service.getServiceDate());
+// appletOrderItemDate.setCityAddress(h5OrderVO.getReceiverProvince() + h5OrderVO.getReceiverCity() + h5OrderVO.getReceiverDistrict());
+// appletOrderItemDate.setAddress(h5OrderVO.getReceiverDetailAddress());
+// appletOrderItemDateService.insertAppletOrderItemDate(appletOrderItemDate);
+// }
+ //TODO 这里需要优化流失订单的逻辑
//生成其他人的流失订单
String[] split = order.getUserIdJson().split(",");
@@ -641,14 +665,32 @@ public class ApiAppletOrderController extends BaseController {
}
+ //生成下单小程序的订单记录
+ OrderOperateHistory optHistory = new OrderOperateHistory();
+ optHistory.setOrderId(order.getOrderId());
+ optHistory.setOrderSn(order.getOrderSn());
+ optHistory.setOperateMan("接单伴宠师-" + order.getUserId());
+ optHistory.setOrderStatus(Constants.H5OrderStatus.DELIVERED);
+ optHistory.setCreateTime(LocalDateTime.now());
+ optHistory.setCreateBy(order.getUserId());
+ optHistory.setUpdateBy(order.getUserId());
+ optHistory.setUpdateTime(LocalDateTime.now());
+ orderOperateHistoryMapper.insert(optHistory);
+
+ //修改下单小程序的订单状态
+ Order omsOrder = orderMapper.selectById(order.getOrderId());
+
+ if (omsOrder != null && omsOrder.getStatus() == Constants.H5OrderStatus.NOT_DELIVERED){
+ omsOrder.setStatus(Constants.H5OrderStatus.DELIVERED);
+ orderMapper.updateById(omsOrder);
+ }else {
+ throw new ServiceException("订单已被接单");
+ }
-
+ // 生成日订单数据
appletOrderDateFrequencyService.aceptOrdersGenerateDayOrdersByOrderVO(h5OrderVO, appletOrder.getUserId());
-
-
-
return AjaxResult.success("接单成功",appletOrder);
}
diff --git a/ruoyi-catdog/src/main/java/com/ruoyi/applet/pojo/dto/AppletAnswerSubmitBo.java b/ruoyi-catdog/src/main/java/com/ruoyi/applet/pojo/dto/AppletAnswerSubmitBo.java
new file mode 100644
index 0000000..d72b0ff
--- /dev/null
+++ b/ruoyi-catdog/src/main/java/com/ruoyi/applet/pojo/dto/AppletAnswerSubmitBo.java
@@ -0,0 +1,13 @@
+package com.ruoyi.applet.pojo.dto;
+
+import com.ruoyi.model.domain.AppletAnswerBase;
+import lombok.Data;
+
+import java.util.List;
+
+@Data
+public class AppletAnswerSubmitBo {
+
+ private List answerBase;
+
+}
diff --git a/ruoyi-catdog/src/main/java/com/ruoyi/applet/pojo/dto/filterQualifiedUsersVo.java b/ruoyi-catdog/src/main/java/com/ruoyi/applet/pojo/dto/filterQualifiedUsersVo.java
new file mode 100644
index 0000000..3e8df9d
--- /dev/null
+++ b/ruoyi-catdog/src/main/java/com/ruoyi/applet/pojo/dto/filterQualifiedUsersVo.java
@@ -0,0 +1,25 @@
+package com.ruoyi.applet.pojo.dto;
+
+import lombok.AllArgsConstructor;
+import lombok.Builder;
+import lombok.Data;
+import lombok.NoArgsConstructor;
+
+@Data
+@AllArgsConstructor
+@NoArgsConstructor
+@Builder
+public class filterQualifiedUsersVo {
+
+ /** 指定的伴宠师等级 */
+ private Integer companionLevel;
+
+ /** 经度 */
+ private Double longitude;
+
+ /** 纬度 */
+ private Double latitude;
+
+ private Long orderId;
+
+}
diff --git a/ruoyi-catdog/src/main/java/com/ruoyi/applet/service/impl/IMallOrderServiceImpl.java b/ruoyi-catdog/src/main/java/com/ruoyi/applet/service/impl/IMallOrderServiceImpl.java
index c24b2e6..82b9551 100644
--- a/ruoyi-catdog/src/main/java/com/ruoyi/applet/service/impl/IMallOrderServiceImpl.java
+++ b/ruoyi-catdog/src/main/java/com/ruoyi/applet/service/impl/IMallOrderServiceImpl.java
@@ -106,6 +106,10 @@ public class IMallOrderServiceImpl implements IMallOrderService {
appletOrder.setCompanionLevel(h5OrderVO.getCompanionLevel());
appletOrder.setLongitude(Double.valueOf(h5OrderVO.getLongitude()));
appletOrder.setLatitude(Double.valueOf(h5OrderVO.getLatitude()));
+
+ appletOrder.setCreateType(appletOrder.getType());//开始接单类型
+ appletOrder.setNewOrderTime(LocalDateTime.now());//最新派单时间
+
appletOrderService.insertAppletOrder(appletOrder);
@@ -173,6 +177,10 @@ public class IMallOrderServiceImpl implements IMallOrderService {
appletOrder.setCompanionLevel(h5OrderVO.getCompanionLevel());
appletOrder.setLongitude(Double.valueOf(h5OrderVO.getLongitude()));
appletOrder.setLatitude(Double.valueOf(h5OrderVO.getLatitude()));
+
+ appletOrder.setCreateType(appletOrder.getType());//开始接单类型
+ appletOrder.setNewOrderTime(LocalDateTime.now());//最新派单时间
+
appletOrderService.insertAppletOrder(appletOrder);
@@ -210,6 +218,9 @@ public class IMallOrderServiceImpl implements IMallOrderService {
//获取经纬度
H5OrderVO h5OrderVO = orderMapper.selectOrderDetail(orderId);
log.info("订单数据:{}",h5OrderVO);
+
+ //TODO 系统派单逻辑 acceptDispatch
+
// 获取经度
String longitudeStr = h5OrderVO.getLongitude();
longitudeStr = "112.89175415039062";
diff --git a/ruoyi-catdog/src/main/java/com/ruoyi/job/AppletUserExaminationJob.java b/ruoyi-catdog/src/main/java/com/ruoyi/job/AppletUserExaminationJob.java
new file mode 100644
index 0000000..ffa1079
--- /dev/null
+++ b/ruoyi-catdog/src/main/java/com/ruoyi/job/AppletUserExaminationJob.java
@@ -0,0 +1,44 @@
+package com.ruoyi.job;
+
+import com.ruoyi.model.domain.AppletUsersTeacher;
+import com.ruoyi.model.service.IAppletOrderService;
+import com.ruoyi.model.service.IAppletUsersTeacherService;
+import lombok.extern.slf4j.Slf4j;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.scheduling.annotation.Async;
+import org.springframework.scheduling.annotation.Scheduled;
+import org.springframework.stereotype.Component;
+
+import java.time.LocalDateTime;
+import java.util.Date;
+
+@Component
+@Slf4j
+public class AppletUserExaminationJob {
+
+
+
+ @Autowired
+ private IAppletUsersTeacherService appletUsersTeacherService;
+
+ /**
+ * 检查伴宠师是否可以重新考试
+ */
+
+ @Async
+ @Scheduled(cron = "0 0 3 * * ?")
+ public void check(){
+
+ LocalDateTime localDateTime = LocalDateTime.now().minusYears(1);
+
+ boolean update = appletUsersTeacherService
+ .lambdaUpdate()
+ .le(AppletUsersTeacher::getExamTime, localDateTime)
+ .gt(AppletUsersTeacher::getExamNumber, 0)
+ .set(AppletUsersTeacher::getExamNumber, 0)
+ .update();
+
+ log.info("定时任务[检查伴宠师是否可以重新考试], 重新考试人数 {}", update);
+ }
+
+}
diff --git a/ruoyi-catdog/src/main/java/com/ruoyi/job/OrderTimeoutNoticeJob.java b/ruoyi-catdog/src/main/java/com/ruoyi/job/OrderTimeoutNoticeJob.java
new file mode 100644
index 0000000..aef8906
--- /dev/null
+++ b/ruoyi-catdog/src/main/java/com/ruoyi/job/OrderTimeoutNoticeJob.java
@@ -0,0 +1,37 @@
+package com.ruoyi.job;
+
+import com.ruoyi.model.service.IAppletOrderService;
+import lombok.extern.slf4j.Slf4j;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.scheduling.annotation.Async;
+import org.springframework.scheduling.annotation.Scheduled;
+import org.springframework.stereotype.Component;
+
+@Component
+@Slf4j
+public class OrderTimeoutNoticeJob {
+
+ private static final Logger log = LoggerFactory.getLogger(OrderTimeoutNoticeJob.class);
+
+ @Autowired
+ private IAppletOrderService appletOrderService;
+
+ /**
+ * 每5分钟检查订单是否未接单超时
+ */
+
+ @Async
+ @Scheduled(cron = "0 */5 * * * ?")
+ // @Scheduled(cron = "0 * * * * ?")
+ public void check(){
+ log.info("定时任务[订单未接单超时检查]开始执行");
+ //系统订单超过3小时未接单,通知管理员
+ appletOrderService.systemOrderTimeoutNotice();
+ //个人订单超过3小时未接单转成系统派单
+ appletOrderService.personalSystemTransferOrder();
+ log.info("定时任务[订单未接单超时检查]执行结束");
+ }
+
+}
diff --git a/ruoyi-catdog/src/main/java/com/ruoyi/model/controller/AppletOrderController.java b/ruoyi-catdog/src/main/java/com/ruoyi/model/controller/AppletOrderController.java
index c5ad74b..9261cf3 100644
--- a/ruoyi-catdog/src/main/java/com/ruoyi/model/controller/AppletOrderController.java
+++ b/ruoyi-catdog/src/main/java/com/ruoyi/model/controller/AppletOrderController.java
@@ -7,6 +7,7 @@ import javax.servlet.http.HttpServletResponse;
import com.cyl.h5.pojo.vo.H5OrderVO;
import com.cyl.h5.service.H5OrderService;
import com.cyl.manager.oms.service.OrderService;
+import com.ruoyi.applet.service.IApiMallOrderService;
import com.ruoyi.applet.service.IMallOrderService;
import com.ruoyi.common.utils.StringUtils;
import com.ruoyi.model.service.IAppletUsersService;
@@ -51,6 +52,10 @@ public class AppletOrderController extends BaseController
@Autowired
private IAppletUsersService appletUsersService;
+ @Autowired
+ private IApiMallOrderService apiMallOrderService;
+
+
/**
* 查询订单信息列表
*/
@@ -85,6 +90,18 @@ public class AppletOrderController extends BaseController
return success(appletOrderService.selectAppletOrderById(id));
}
+ /**
+ * 获取订单信息详细信息
+ */
+ @PreAuthorize("@ss.hasPermi('model:AppletOrder:query')")
+ @GetMapping(value = "/detail/{orderId}")
+ public AjaxResult getInfoDetail(@PathVariable("orderId") Long orderId)
+ {
+ return success(apiMallOrderService.orderDetail(orderId));
+ }
+
+
+
/**
* 新增订单信息
*/
diff --git a/ruoyi-catdog/src/main/java/com/ruoyi/model/domain/AppletOrder.java b/ruoyi-catdog/src/main/java/com/ruoyi/model/domain/AppletOrder.java
index 84b04b8..395d598 100644
--- a/ruoyi-catdog/src/main/java/com/ruoyi/model/domain/AppletOrder.java
+++ b/ruoyi-catdog/src/main/java/com/ruoyi/model/domain/AppletOrder.java
@@ -2,6 +2,7 @@ package com.ruoyi.model.domain;
import java.math.BigDecimal;
import java.time.LocalDateTime;
+import java.util.Date;
import java.util.List;
import com.baomidou.mybatisplus.annotation.TableField;
@@ -61,20 +62,30 @@ public class AppletOrder {
@Excel(name = "地址")
private String address;
- /** 订单类型 0系统派单 1指定伴宠师 */
- @Excel(name = "订单类型")
+ //开始派单类型
+ @Excel(name = "开始派单类型")
+ private String createType;
+
+ /** 最新派单-订单类型 0系统派单 1指定伴宠师 */
+ @Excel(name = "最新派单类型")
private String type;
+ //最新派单时间
+ @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
+ @Excel(name = "最新派单时间", width = 30, dateFormat = "yyyy-MM-dd HH:mm:ss")
+ private LocalDateTime newOrderTime;
+
+
/** 无法接单原因 */
@Excel(name = "无法接单原因")
private String reason;
- /** 关联服务者ID */
- @Excel(name = "关联服务者ID")
+ /** 接单伴宠师ID */
+ @Excel(name = "接单伴宠师ID")
private Long userId;
- /** 派单给的用户集合 */
+ /** 派单给的用户集合 多个用,隔开 */
@Excel(name = "派单给的用户集合")
private String userIdJson;
@@ -82,11 +93,36 @@ public class AppletOrder {
@Excel(name = "关联宠物ID")
private Integer petId;
+ /** 超时未接单,通知次数 -1通知了管理员 其他通知次数 */
+ @Excel(name = "超时未接单,通知次数")
+ private Integer noticeSystemFlag;
+
+
+ //订单接单时间
+ @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
+ @Excel(name = "订单接单时间", width = 30, dateFormat = "yyyy-MM-dd HH:mm:ss")
+ private LocalDateTime acceptTime;
+
+ //接单用时(秒)
+ @Excel(name = "接单用时(秒)", width = 30)
+ private Long whenTakOrders;
+
private Long orderId;
private String orderSn;
private Integer orderTime;
+ //指定的伴宠师等级
+ private Integer companionLevel;
+
+ /** 经度 */
+ private Double longitude;
+
+ /** 纬度 */
+ private Double latitude;
+
+
+
@TableField(exist = false)
private H5OrderVO h5OrderVO;
@@ -105,13 +141,4 @@ public class AppletOrder {
@TableField(exist = false)
private String userName;
-
- //指定的伴宠师等级
- private Integer companionLevel;
-
- /** 经度 */
- private Double longitude;
-
- /** 纬度 */
- private Double latitude;
}
\ No newline at end of file
diff --git a/ruoyi-catdog/src/main/java/com/ruoyi/model/domain/AppletUsersTeacher.java b/ruoyi-catdog/src/main/java/com/ruoyi/model/domain/AppletUsersTeacher.java
index 47e3cb9..16c937b 100644
--- a/ruoyi-catdog/src/main/java/com/ruoyi/model/domain/AppletUsersTeacher.java
+++ b/ruoyi-catdog/src/main/java/com/ruoyi/model/domain/AppletUsersTeacher.java
@@ -8,6 +8,7 @@ import com.ruoyi.common.annotation.Excel;
import com.ruoyi.common.core.domain.BaseEntity;
import java.time.LocalDateTime;
+import java.util.Date;
import java.util.List;
@Data
@@ -92,7 +93,17 @@ public class AppletUsersTeacher {
@Excel(name = "专业执照选项")
private String license;
+ /** 基本已考试次数 */
+ @Excel(name = "基本已考试次数")
+ private Integer examNumber;
+ /** 基本考试日期 */
+ @Excel(name = "基本考试日期")
+ private LocalDateTime examTime;
+
+ /** 驳回原因 */
+ @Excel(name = "驳回原因")
+ private String reason;
/** 个人简介绍 */
@Excel(name = "个人简介绍")
diff --git a/ruoyi-catdog/src/main/java/com/ruoyi/model/mapper/AppUsersMapper.java b/ruoyi-catdog/src/main/java/com/ruoyi/model/mapper/AppUsersMapper.java
index 9d570c6..76fb98a 100644
--- a/ruoyi-catdog/src/main/java/com/ruoyi/model/mapper/AppUsersMapper.java
+++ b/ruoyi-catdog/src/main/java/com/ruoyi/model/mapper/AppUsersMapper.java
@@ -1,6 +1,8 @@
package com.ruoyi.model.mapper;
import java.util.List;
+
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.ruoyi.model.domain.AppUsers;
/**
@@ -9,7 +11,7 @@ import com.ruoyi.model.domain.AppUsers;
* @author ruoyi
* @date 2025-03-27
*/
-public interface AppUsersMapper
+public interface AppUsersMapper extends BaseMapper
{
/**
* 查询用户
diff --git a/ruoyi-catdog/src/main/java/com/ruoyi/model/service/IAppUsersService.java b/ruoyi-catdog/src/main/java/com/ruoyi/model/service/IAppUsersService.java
index b24caba..0349bf0 100644
--- a/ruoyi-catdog/src/main/java/com/ruoyi/model/service/IAppUsersService.java
+++ b/ruoyi-catdog/src/main/java/com/ruoyi/model/service/IAppUsersService.java
@@ -1,7 +1,11 @@
package com.ruoyi.model.service;
import java.util.List;
+
+import com.baomidou.mybatisplus.extension.service.IService;
+import com.ruoyi.applet.pojo.dto.filterQualifiedUsersVo;
import com.ruoyi.model.domain.AppUsers;
+import com.ruoyi.model.domain.AppletOrder;
/**
* 用户Service接口
@@ -9,7 +13,7 @@ import com.ruoyi.model.domain.AppUsers;
* @author ruoyi
* @date 2025-03-27
*/
-public interface IAppUsersService
+public interface IAppUsersService extends IService
{
/**
* 查询用户
@@ -60,4 +64,7 @@ public interface IAppUsersService
public int deleteAppUsersByUserId(Long userId);
AppUsers selectAppUsersByOpenId(String wxOpenid);
+
+
+ public List filterQualifiedUsers(filterQualifiedUsersVo filterVo);
}
diff --git a/ruoyi-catdog/src/main/java/com/ruoyi/model/service/IAppletOrderService.java b/ruoyi-catdog/src/main/java/com/ruoyi/model/service/IAppletOrderService.java
index f873bdb..e8d6eda 100644
--- a/ruoyi-catdog/src/main/java/com/ruoyi/model/service/IAppletOrderService.java
+++ b/ruoyi-catdog/src/main/java/com/ruoyi/model/service/IAppletOrderService.java
@@ -62,4 +62,25 @@ public interface IAppletOrderService extends IService
* @return 结果
*/
public int deleteAppletOrderById(Long id);
+
+
+
+ /**
+ * 个人订单超过未接单通知或者转成系统派单逻辑
+ * @return 结果
+ */
+ public int personalSystemTransferOrder();
+
+
+ /**
+ * 系统订单超过未接单通知逻辑
+ * @return 结果
+ */
+ public int systemOrderTimeoutNotice();
+
+
+ /**
+ * 短信通知符合条件的伴宠师有新订单
+ */
+ public void noticePersonalByOrderIds(List ids);
}
diff --git a/ruoyi-catdog/src/main/java/com/ruoyi/model/service/IAppletUsersTeacherService.java b/ruoyi-catdog/src/main/java/com/ruoyi/model/service/IAppletUsersTeacherService.java
index 3ef2f08..84e8188 100644
--- a/ruoyi-catdog/src/main/java/com/ruoyi/model/service/IAppletUsersTeacherService.java
+++ b/ruoyi-catdog/src/main/java/com/ruoyi/model/service/IAppletUsersTeacherService.java
@@ -21,6 +21,9 @@ public interface IAppletUsersTeacherService extends IService
public AppletUsersTeacher selectAppletUsersTeacherById(Long id);
public AppletUsersTeacher selectAppletUsersTeacherByUserId(Long userId);
+
+ public void buildData(AppletUsersTeacher appletUsersTeacher);
+
/**
* 查询伴宠师认证列表
*
diff --git a/ruoyi-catdog/src/main/java/com/ruoyi/model/service/impl/AppUsersServiceImpl.java b/ruoyi-catdog/src/main/java/com/ruoyi/model/service/impl/AppUsersServiceImpl.java
index 6924c91..73e092f 100644
--- a/ruoyi-catdog/src/main/java/com/ruoyi/model/service/impl/AppUsersServiceImpl.java
+++ b/ruoyi-catdog/src/main/java/com/ruoyi/model/service/impl/AppUsersServiceImpl.java
@@ -1,7 +1,27 @@
package com.ruoyi.model.service.impl;
+import java.math.BigDecimal;
+import java.text.ParseException;
+import java.text.SimpleDateFormat;
+import java.util.ArrayList;
+import java.util.Date;
import java.util.List;
+import java.util.stream.Collectors;
+
+import com.baomidou.mybatisplus.core.toolkit.ObjectUtils;
+import com.baomidou.mybatisplus.core.toolkit.Wrappers;
+import com.baomidou.mybatisplus.extension.conditions.query.LambdaQueryChainWrapper;
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import com.cyl.manager.oms.domain.OmsOrderService;
+import com.cyl.manager.oms.mapper.OmsOrderServiceMapper;
+import com.ruoyi.applet.pojo.dto.filterQualifiedUsersVo;
import com.ruoyi.common.utils.DateUtils;
+import com.ruoyi.common.utils.StringUtils;
+import com.ruoyi.model.domain.AppletAddress;
+import com.ruoyi.model.domain.AppletOrder;
+import com.ruoyi.model.domain.AppletOutDate;
+import com.ruoyi.model.service.IAppletAddressService;
+import com.ruoyi.model.service.IAppletOutDateService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import com.ruoyi.model.mapper.AppUsersMapper;
@@ -15,11 +35,20 @@ import com.ruoyi.model.service.IAppUsersService;
* @date 2025-03-27
*/
@Service
-public class AppUsersServiceImpl implements IAppUsersService
+public class AppUsersServiceImpl extends ServiceImpl implements IAppUsersService
{
@Autowired
private AppUsersMapper appUsersMapper;
+ @Autowired
+ private IAppletOutDateService appletOutDateService;
+
+ @Autowired
+ private OmsOrderServiceMapper omsOrderServiceMapper;
+
+ @Autowired
+ private IAppletAddressService appletAddressService;
+
/**
* 查询用户
*
@@ -98,4 +127,110 @@ public class AppUsersServiceImpl implements IAppUsersService
public AppUsers selectAppUsersByOpenId(String openid) {
return appUsersMapper.selectAppUsersByOpenId(openid);
}
+
+ // 根据订单筛选符合条件的技师
+ @Override
+ public List filterQualifiedUsers(filterQualifiedUsersVo filterVo) {
+ List qualifiedTechnicians = new ArrayList<>();
+
+ ArrayList notAddressIds = new ArrayList<>();
+
+ LambdaQueryChainWrapper addressQW = appletAddressService.lambdaQuery();
+
+ SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
+
+ //根据不接单日期排除地址
+ if (ObjectUtils.isNotEmpty(filterVo.getOrderId())){
+ List dates = omsOrderServiceMapper.selectList(Wrappers.
+ lambdaQuery()
+ .select(OmsOrderService::getServiceDate)
+ .eq(OmsOrderService::getOrderId, filterVo.getOrderId()))
+ .stream().map(n -> {
+ try {
+ return sdf.parse(n.getServiceDate());
+ } catch (ParseException e) {
+ return null;
+ }
+ })
+ .filter(n -> ObjectUtils.isNotEmpty(n))
+ .collect(Collectors.toList());
+
+ appletOutDateService.lambdaQuery().in(AppletOutDate::getDate, dates)
+ .select(AppletOutDate::getAddressId)
+ .groupBy(AppletOutDate::getAddressId)
+ .list().stream().forEach(n ->
+ notAddressIds.add(n.getAddressId())
+ );
+ }
+
+
+ // 2. 根据订单经纬度查询范围内的地址
+ if (ObjectUtils.isNotEmpty(filterVo.getLatitude()) &&
+ ObjectUtils.isNotEmpty(filterVo.getLongitude())) {
+
+ BigDecimal orderLat = new BigDecimal(filterVo.getLatitude());
+ BigDecimal orderLng = new BigDecimal(filterVo.getLongitude());
+
+ // 将15公里转换为经纬度范围
+ // 1度纬度约等于111公里
+ // 1度经度约等于111*cos(纬度)公里
+ BigDecimal range = new BigDecimal("15"); // 15公里范围
+ BigDecimal latRange = range.divide(new BigDecimal("111"), 6, BigDecimal.ROUND_HALF_UP);
+ BigDecimal lngRange = range.divide(new BigDecimal("111").multiply(new BigDecimal(Math.cos(orderLat.doubleValue() * Math.PI / 180))), 6, BigDecimal.ROUND_HALF_UP);
+
+ // 计算经纬度范围
+ BigDecimal latMin = orderLat.subtract(latRange);
+ BigDecimal latMax = orderLat.add(latRange);
+ BigDecimal lngMin = orderLng.subtract(lngRange);
+ BigDecimal lngMax = orderLng.add(lngRange);
+
+ // 查询所有有效的地址,并且在15公里范围内
+ List addressList = appletAddressService.lambdaQuery()
+ .eq(AppletAddress::getStatus, "true")
+ .notIn(!notAddressIds.isEmpty(), AppletAddress::getId, notAddressIds)
+ .ge(AppletAddress::getLatitude, latMin.toString())
+ .le(AppletAddress::getLatitude, latMax.toString())
+ .ge(AppletAddress::getLongitude, lngMin.toString())
+ .le(AppletAddress::getLongitude, lngMax.toString())
+ .list();
+
+ // 3. 筛选在范围内的地址
+ List qualifiedUserId = new ArrayList<>();
+ for (AppletAddress address : addressList) {
+ if (StringUtils.isNotEmpty(address.getLatitude()) &&
+ StringUtils.isNotEmpty(address.getLongitude()) &&
+ StringUtils.isNotEmpty(address.getRangeNo())) {
+
+ BigDecimal addressLat = new BigDecimal(address.getLatitude());
+ BigDecimal addressLng = new BigDecimal(address.getLongitude());
+ BigDecimal rangeKm = new BigDecimal(address.getRangeNo()); // 公里数
+
+ // 将公里数转换为经纬度范围
+ // 1度纬度约等于111公里
+ // 1度经度约等于111*cos(纬度)公里
+ latRange = rangeKm.divide(new BigDecimal("111"), 6, BigDecimal.ROUND_HALF_UP);
+ lngRange = rangeKm.divide(new BigDecimal("111").multiply(new BigDecimal(Math.cos(addressLat.doubleValue() * Math.PI / 180))), 6, BigDecimal.ROUND_HALF_UP);
+
+ // 计算距离(经纬度差值)
+ BigDecimal latDiff = orderLat.subtract(addressLat).abs();
+ BigDecimal lngDiff = orderLng.subtract(addressLng).abs();
+
+ // 如果在范围内,添加到合格地址列表
+ if (latDiff.compareTo(latRange) <= 0 && lngDiff.compareTo(lngRange) <= 0) {
+ qualifiedUserId.add(address.getUserId());
+ }
+ }
+ }
+
+ // 4. 根据地址ID和技师等级查询符合条件的技师
+ qualifiedTechnicians = appUsersMapper.selectList(
+ Wrappers.lambdaQuery()
+ .eq(ObjectUtils.isNotEmpty(filterVo.getCompanionLevel()),
+ AppUsers::getUserBcsRole, filterVo.getCompanionLevel())
+ .in(qualifiedUserId.size() > 0, AppUsers::getUserId, qualifiedUserId)
+ );
+ }
+
+ return qualifiedTechnicians;
+ }
}
diff --git a/ruoyi-catdog/src/main/java/com/ruoyi/model/service/impl/AppletOrderDateFrequencyServiceImpl.java b/ruoyi-catdog/src/main/java/com/ruoyi/model/service/impl/AppletOrderDateFrequencyServiceImpl.java
index d7a2698..1128710 100644
--- a/ruoyi-catdog/src/main/java/com/ruoyi/model/service/impl/AppletOrderDateFrequencyServiceImpl.java
+++ b/ruoyi-catdog/src/main/java/com/ruoyi/model/service/impl/AppletOrderDateFrequencyServiceImpl.java
@@ -13,14 +13,18 @@ import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.cyl.h5.pojo.vo.H5OrderVO;
import com.cyl.h5.service.H5MemberService;
import com.cyl.manager.oms.domain.OmsOrderService;
+import com.cyl.manager.oms.domain.Order;
import com.cyl.manager.oms.domain.OrderItem;
import com.cyl.manager.oms.mapper.OmsOrderServiceMapper;
import com.cyl.manager.oms.mapper.OrderItemMapper;
+import com.cyl.manager.oms.mapper.OrderMapper;
import com.cyl.manager.oms.service.OmsOrderServiceService;
import com.cyl.manager.ums.domain.Pet;
import com.cyl.manager.ums.mapper.PetMapper;
import com.cyl.manager.ums.service.MemberService;
import com.cyl.manager.ums.service.PetService;
+import com.ruoyi.common.constant.Constants;
+import com.ruoyi.common.exception.ServiceException;
import com.ruoyi.model.domain.*;
import com.ruoyi.model.mapper.AppletOrderItemMapper;
import com.ruoyi.model.service.*;
@@ -66,6 +70,9 @@ public class AppletOrderDateFrequencyServiceImpl extends ServiceImpl orderItemList = h5OrderVO.getOrderItemList().stream().
- filter(n -> {
- for (OmsOrderService omsOrderService : serviceList) {
- if(n.getOrderServiceId().equals(omsOrderService.getId())){
- omsOrderService.getOrderItems().add(n);
- return true;
- }
- }
- return false;
- }).collect(Collectors.toList());
-
- // 找出最大次数,生成对应个数的日订单
- for (OrderItem orderItem : orderItemList) {
- maxIndex = Math.max(maxIndex, orderItem.getQuantity());
- }
+// List orderItemList = h5OrderVO.getOrderItemList().stream().
+// filter(n -> {
+// for (OmsOrderService omsOrderService : serviceList) {
+// if(n.getOrderServiceId().equals(omsOrderService.getId())){
+// omsOrderService.getOrderItems().add(n);
+// return true;
+// }
+// }
+// return false;
+// }).collect(Collectors.toList());
+
+
+ //给服务日期配上对应的项目
+ h5OrderVO.getOrderItemList().forEach(n -> {
+ for (OmsOrderService omsOrderService : serviceList) {
+ if(n.getOrderServiceId().equals(omsOrderService.getId())){
+ omsOrderService.getOrderItems().add(n);
+ }
+ }
+ });
// 根据次数生成
while (index < maxIndex){
@@ -309,6 +321,10 @@ public class AppletOrderDateFrequencyServiceImpl extends ServiceImpl implements IAppletOrderService {
+
@Autowired
private AppletOrderMapper appletOrderMapper;
+ @Autowired
+ private IAppUsersService appUsersService;
+
+ private static final Logger log = LoggerFactory.getLogger(AppletOrderServiceImpl.class);
+
/**
* 查询订单信息
*
@@ -67,7 +88,10 @@ public class AppletOrderServiceImpl extends ServiceImpl orders = lambdaQuery()
+ .eq(AppletOrder::getStatus, 0)
+ .eq(AppletOrder::getType, 1)
+ .le(AppletOrder::getNewOrderTime, time)
+ .eq(AppletOrder::getNoticeSystemFlag, 0)
+ .list();
+
+ List ids = orders.stream().map(n -> n.getId()).collect(Collectors.toList());
+
+ if (ids.size() > 0) {
+ //修改订单状态
+ lambdaUpdate()
+ .in(AppletOrder::getId, ids)
+ .set(AppletOrder::getUpdateTime, LocalDateTime.now())
+ .set(AppletOrder::getNoticeSystemFlag, 1)
+ .update();
+ }
+
+ log.info("[personalSystemTransferOrder] 开始检查个人订单超时转系统派单");
+ LocalDateTime threeHoursAgo = LocalDateTime.now().minusHours(3);
+ List timeoutOrders = lambdaQuery()
+ .eq(AppletOrder::getStatus, 0)
+ .eq(AppletOrder::getType, 1)
+ .le(AppletOrder::getNewOrderTime, threeHoursAgo)
+ .eq(AppletOrder::getNoticeSystemFlag, 1)
+ .list();
+
+ List ids2 = timeoutOrders.stream().map(n -> {
+ orders.add(n);
+ return n.getId();
+ }).collect(Collectors.toList());
+
+ if (ids2.size() > 0) {
+ //修改
+ lambdaUpdate()
+ .in(AppletOrder::getId, ids2)
+ .set(AppletOrder::getType, 0)
+ .set(AppletOrder::getUpdateTime, LocalDateTime.now())
+ .set(AppletOrder::getNoticeSystemFlag, 0)
+ .set(AppletOrder::getNewOrderTime, LocalDateTime.now())
+ .update();
+ }
+
+ log.info("[personalSystemTransferOrder] 处理完成,转为系统派单订单数:{}", orders.size());
+
+ //通知用户
+ noticePersonalByOrderList(orders);
+
+ return orders.size();
+ }
+
+ /**
+ * 系统订单超过未接单通知逻辑
+ * @return 结果
+ */
+ @Override
+ public int systemOrderTimeoutNotice() {
+
+ ArrayList list = new ArrayList<>();
+
+ //60分钟未接单
+ LocalDateTime oneHoursAgo = LocalDateTime.now().minusMinutes(60);
+ List oneTimeoutOrders = lambdaQuery()
+ .eq(AppletOrder::getStatus, 0)
+ .eq(AppletOrder::getType, 0)
+ .le(AppletOrder::getNewOrderTime, oneHoursAgo)
+ .eq(AppletOrder::getNoticeSystemFlag, 0)
+ .list();
+
+ if (oneTimeoutOrders.size() > 0){
+ //60分钟未接单修改订单状态
+ lambdaUpdate()
+ .in(AppletOrder::getId, oneTimeoutOrders.stream().map(n -> n.getId()).collect(Collectors.toList()))
+ .set(AppletOrder::getUpdateTime, LocalDateTime.now())
+ .set(AppletOrder::getNoticeSystemFlag, 1)
+ .update();
+ }
+
+ //120分钟未接单
+ LocalDateTime twoHoursAgo = LocalDateTime.now().minusHours(2);
+ List twoTimeoutOrders = lambdaQuery()
+ .eq(AppletOrder::getStatus, 0)
+ .eq(AppletOrder::getType, 0)
+ .le(AppletOrder::getNewOrderTime, twoHoursAgo)
+ .eq(AppletOrder::getNoticeSystemFlag, 1)
+ .list();
+
+
+ if (twoTimeoutOrders.size() > 0) {
+ //120分钟未接单修改订单状态
+ lambdaUpdate()
+ .in(AppletOrder::getId, twoTimeoutOrders.stream().map(n -> n.getId()).collect(Collectors.toList()))
+ .set(AppletOrder::getUpdateTime, LocalDateTime.now())
+ .set(AppletOrder::getNoticeSystemFlag, 2)
+ .update();
+ }
+
+ log.info("[systemOrderTimeoutNotice] 开始检查系统订单超时未接单");
+ LocalDateTime threeHoursAgo = LocalDateTime.now().minusHours(3);
+ List timeoutOrders = lambdaQuery()
+ .eq(AppletOrder::getStatus, 0)
+ .eq(AppletOrder::getType, 0)
+ .le(AppletOrder::getNewOrderTime, threeHoursAgo)
+ .eq(AppletOrder::getNoticeSystemFlag, 2)
+ .list();
+
+ if(timeoutOrders.size() > 0){
+ //180分钟未接单修改订单状态
+ lambdaUpdate()
+ .in(AppletOrder::getId, timeoutOrders.stream().map(n -> n.getId()).collect(Collectors.toList()))
+ .set(AppletOrder::getUpdateTime, LocalDateTime.now())
+ .set(AppletOrder::getNoticeSystemFlag, -1)//通知过管理员了
+ .update();
+ }
+
+ log.info("[systemOrderTimeoutNotice] 检查完成,超时1小时订单数:{},超时2小时订单数:{}超时3小时订单数:{}",
+ oneTimeoutOrders.size(),
+ twoTimeoutOrders.size(),
+ timeoutOrders.size()
+ );
+
+ oneTimeoutOrders.forEach(list::add);
+ twoTimeoutOrders.forEach(list::add);
+
+ noticePersonalByOrderList(list);
+
+ return timeoutOrders.size() + oneTimeoutOrders.size() + twoTimeoutOrders.size();
+ }
+
+ /**
+ * 短信通知符合条件的伴宠师有新订单
+ */
+ @Override
+ public void noticePersonalByOrderIds(List ids) {
+ List list = lambdaQuery()
+ .in(AppletOrder::getId, ids)
+ .list();
+
+ noticePersonalByOrderList(list);
+ }
+
+ public void noticePersonalByOrderList(List list) {
+ // 需要通知的用户id
+ ArrayList userIds = new ArrayList<>();
+ // 需要通知的用户
+ HashMap userMap = new HashMap<>();
+
+ // 提取需要通知的用户
+ for (AppletOrder appletOrder : list) {
+ List qualifiedTechnicians;
+ if ("0".equals(appletOrder.getType())) { // 系统派单
+ // 使用新的筛选逻辑
+
+ qualifiedTechnicians = appUsersService
+ .filterQualifiedUsers(filterQualifiedUsersVo.builder()
+ .orderId(appletOrder.getOrderId())
+ .companionLevel(appletOrder.getCompanionLevel())
+ .latitude(appletOrder.getLatitude())
+ .longitude(appletOrder.getLongitude())
+ .build());
+
+ } else if (StringUtils.isNotEmpty(appletOrder.getUserIdJson())) { // 个人订单
+ List userIdList = Arrays.stream(appletOrder.getUserIdJson()
+ .split(",")).map(n -> Long.parseLong(n))
+ .filter(id -> !userIds.contains(id))
+ .collect(Collectors.toList());
+
+ qualifiedTechnicians = appUsersService.lambdaQuery()
+ .in(AppUsers::getUserId, userIdList).list();
+ } else {
+ qualifiedTechnicians = new ArrayList<>();
+ }
+
+ for (AppUsers technician : qualifiedTechnicians) {
+ userIds.add(technician.getUserId());
+ userMap.put(technician.getUserId(), technician);
+ }
+ }
+
+ // 发起通知
+ userMap.forEach((id, user) -> {
+ AliyunSmsUtils.sendBcshHasOrderSMS(user.getUserTelephone());
+ });
+ }
+
}
diff --git a/ruoyi-catdog/src/main/java/com/ruoyi/model/service/impl/AppletUsersTeacherServiceImpl.java b/ruoyi-catdog/src/main/java/com/ruoyi/model/service/impl/AppletUsersTeacherServiceImpl.java
index 0fcc48e..9ad4d12 100644
--- a/ruoyi-catdog/src/main/java/com/ruoyi/model/service/impl/AppletUsersTeacherServiceImpl.java
+++ b/ruoyi-catdog/src/main/java/com/ruoyi/model/service/impl/AppletUsersTeacherServiceImpl.java
@@ -39,6 +39,12 @@ public class AppletUsersTeacherServiceImpl extends ServiceImpl appletQuestions = appletQuestionMapper.selectAppletQuestionList(null);
//循环设置答案列表
@@ -67,7 +73,6 @@ public class AppletUsersTeacherServiceImpl extends ServiceImpl
+
+
+
+
+
select id, create_time, create_by, update_time, update_by, pay_time, status, price, address, type, reason, user_id,
pet_id,num,user_id_json,order_id,order_sn,order_time,companion_level,
- longitude, latitude
+ longitude, latitude, create_type, new_order_time, accept_time, when_tak_orders,
+ notice_system_flag
from applet_order
@@ -44,7 +50,7 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
and user_id = #{userId}
and pet_id = #{petId}
and num = #{num}
- and user_id_json = #{userIdJson}
+ and user_id_json like concat('%', #{userIdJson}, '%')
and order_sn = #{orderSn}
and order_id = #{orderId}
and order_time = #{orderTime}
@@ -117,7 +123,11 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
companion_level,
longitude,
latitude,
-
+ create_type,
+ new_order_time,
+ accept_time,
+ when_tak_orders,
+ notice_system_flag,
@@ -142,7 +152,11 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
#{companionLevel},
#{longitude},
#{latitude},
-
+ #{createType},
+ #{newOrderTime},
+ #{acceptTime},
+ #{whenTakOrders},
+ #{noticeSystemFlag},
@@ -172,6 +186,11 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
latitude = #{latitude},
+ create_type = #{createType},
+ new_order_time = #{newOrderTime},
+ accept_time = #{acceptTime},
+ when_tak_orders = #{whenTakOrders},
+ notice_system_flag = #{noticeSystemFlag},
where id = #{id}
diff --git a/ruoyi-catdog/src/main/resources/mapper/model/AppletUsersTeacherMapper.xml b/ruoyi-catdog/src/main/resources/mapper/model/AppletUsersTeacherMapper.xml
index 2b73642..77909c3 100644
--- a/ruoyi-catdog/src/main/resources/mapper/model/AppletUsersTeacherMapper.xml
+++ b/ruoyi-catdog/src/main/resources/mapper/model/AppletUsersTeacherMapper.xml
@@ -29,10 +29,13 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
+
+
+
- select id, user_id, name, id_card, sex, phone, experience, is_have, pet_type, status, images, create_time, area, update_time, address, longitude, latitude, create_by, update_by, age, license, user_brief, thumbs_up from applet_users_teacher
+ select id, user_id, name, id_card, sex, phone, experience, is_have, pet_type, status, images, create_time, area, update_time, address, longitude, latitude, create_by, update_by, age, license, user_brief, thumbs_up, exam_number, exam_time, reason from applet_users_teacher
@@ -96,6 +100,7 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
license,
user_brief,
thumbs_up,
+ reason,
#{id},
@@ -121,6 +126,10 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
#{license},
user_brief,
thumbs_up,
+ reason,
+ reason,
+ exam_number,
+ exam_time,
@@ -149,6 +158,9 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
license = #{license},
user_brief = #{userBrief},
thumbs_up = #{thumbsUp},
+ reason = #{reason},
+ exam_number = #{examNumber},
+ exam_time = #{examTime},
where id = #{id}
diff --git a/ruoyi-common/src/main/java/com/ruoyi/common/constant/Constants.java b/ruoyi-common/src/main/java/com/ruoyi/common/constant/Constants.java
index cfe74f3..20bd9b8 100644
--- a/ruoyi-common/src/main/java/com/ruoyi/common/constant/Constants.java
+++ b/ruoyi-common/src/main/java/com/ruoyi/common/constant/Constants.java
@@ -223,18 +223,21 @@ public class Constants
public static final Integer UNVAILD = 5;
}
+ //-1->全部 0->待付款;1->待发货;2->待收货;3->已完成;4->已关闭;5->无效订单 -2->售后单
+
/**
* H5订单查询状态
- * -1->全部 0->待付款;1->待发货;2->待收货;3->已完成;4->已关闭;5->无效订单 -2->售后单
+ * -1->全部 0->待付款;1->待接单;2->已接单;3->已完成;4->已关闭;5->无效订单 -2->售后单 11->服务中
*/
public static class H5OrderStatus{
public static final Integer ALL = -1;
public static final Integer UN_PAY = 0;
- public static final Integer NOT_DELIVERED = 1;
- public static final Integer DELIVERED = 2;
- public static final Integer COMPLETED = 3;
+ public static final Integer NOT_DELIVERED = 1;//待接单
+ public static final Integer DELIVERED = 2;//已接单
+ public static final Integer COMPLETED = 3;//订单完成
public static final Integer CLOSED = 4;
public static final Integer INVALID = 5;
+ public static final Integer SERVICE = 11;//服务中
public static final Integer REFUND = -2;
}