|
@@ -1,21 +1,25 @@
|
|
|
package com.gree.mall.miniapp.logic.workorder;
|
|
|
|
|
|
import cn.hutool.core.bean.BeanUtil;
|
|
|
+import cn.hutool.core.collection.CollectionUtil;
|
|
|
import cn.hutool.core.date.DateUtil;
|
|
|
import com.baomidou.mybatisplus.core.metadata.IPage;
|
|
|
import com.baomidou.mybatisplus.core.toolkit.CollectionUtils;
|
|
|
import com.baomidou.mybatisplus.extension.conditions.query.LambdaQueryChainWrapper;
|
|
|
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
|
|
|
import com.google.common.collect.Lists;
|
|
|
+import com.gree.mall.miniapp.bean.order.WorkerTeamBean;
|
|
|
import com.gree.mall.miniapp.bean.user.CurrentCompanyWechat;
|
|
|
import com.gree.mall.miniapp.bean.workorder.*;
|
|
|
import com.gree.mall.miniapp.commonmapper.workorder.OrderBaseCMapper;
|
|
|
+import com.gree.mall.miniapp.enums.ExamineStatusEnum;
|
|
|
+import com.gree.mall.miniapp.enums.StateEnum;
|
|
|
import com.gree.mall.miniapp.enums.UserTypeEnum;
|
|
|
+import com.gree.mall.miniapp.enums.WebsitAttrEnum;
|
|
|
import com.gree.mall.miniapp.enums.workorder.AppraiseStatusEnum;
|
|
|
import com.gree.mall.miniapp.enums.workorder.OrderBaseStatusEnum;
|
|
|
import com.gree.mall.miniapp.enums.workorder.OrderFlagEnum;
|
|
|
import com.gree.mall.miniapp.exception.RemoteServiceException;
|
|
|
-import com.gree.mall.miniapp.helper.ResponseHelper;
|
|
|
import com.gree.mall.miniapp.logic.common.CommonLogic;
|
|
|
import com.gree.mall.miniapp.logic.common.outside.WorkOrderApiLogic;
|
|
|
import com.gree.mall.miniapp.plus.entity.*;
|
|
@@ -28,6 +32,7 @@ import org.springframework.transaction.annotation.Transactional;
|
|
|
|
|
|
import java.text.SimpleDateFormat;
|
|
|
import java.util.*;
|
|
|
+import java.util.function.Function;
|
|
|
import java.util.stream.Collectors;
|
|
|
|
|
|
@RequiredArgsConstructor
|
|
@@ -44,7 +49,10 @@ public class OrderBaseLogic {
|
|
|
private final PgOrderWorkerService pgOrderWorkerService;
|
|
|
private final OrderBaseCMapper orderBaseCMapper;
|
|
|
private final PgOrderProductService pgOrderProductService;
|
|
|
-
|
|
|
+ private final UserService userService;
|
|
|
+ private final AdminWebsitService adminWebsitService;
|
|
|
+ private final WorkerTeamService workerTeamService;
|
|
|
+ private final WebsitUserService websitUserService;
|
|
|
|
|
|
/**
|
|
|
* 工单状态统计
|
|
@@ -378,29 +386,68 @@ public class OrderBaseLogic {
|
|
|
/**
|
|
|
* 接单确认
|
|
|
* @param orderBaseId
|
|
|
+ * @param workerList
|
|
|
*/
|
|
|
- public void rece(String orderBaseId){
|
|
|
+ public void rece(String orderBaseId, List<String> workerList) {
|
|
|
CurrentCompanyWechat currentCompanyWechat = commonLogic.getCurrentCompanyWechat();
|
|
|
PgOrderWorker one = pgOrderWorkerService.lambdaQuery()
|
|
|
.eq(PgOrderWorker::getOrderBaseId, orderBaseId)
|
|
|
.eq(PgOrderWorker::getWorkerId, currentCompanyWechat.getUserId())
|
|
|
.one();
|
|
|
- if(one == null){
|
|
|
+ if (one == null) {
|
|
|
throw new RemoteServiceException("暂无权限接单");
|
|
|
}
|
|
|
PgOrderBase pgOrderBase = pgOrderBaseService.getById(orderBaseId);
|
|
|
- if(!(StringUtils.equals(pgOrderBase.getOrderStatus(),OrderBaseStatusEnum.DJD.getKey())
|
|
|
- || StringUtils.equals(pgOrderBase.getOrderStatus(),OrderBaseStatusEnum.DSM.getKey())
|
|
|
- || StringUtils.equals(pgOrderBase.getOrderStatus(),OrderBaseStatusEnum.YZP.getKey())
|
|
|
- )){
|
|
|
+ if (!(StringUtils.equals(pgOrderBase.getOrderStatus(), OrderBaseStatusEnum.DJD.getKey())
|
|
|
+ || StringUtils.equals(pgOrderBase.getOrderStatus(), OrderBaseStatusEnum.DSM.getKey())
|
|
|
+ || StringUtils.equals(pgOrderBase.getOrderStatus(), OrderBaseStatusEnum.YZP.getKey())
|
|
|
+ )) {
|
|
|
throw new RemoteServiceException("当前状态不可接单");
|
|
|
}
|
|
|
+
|
|
|
+ final AdminWebsit adminWebsit = adminWebsitService.getById(pgOrderBase.getWebsitId());
|
|
|
+
|
|
|
+ if (adminWebsit.getAttr().equals(WebsitAttrEnum.SELF.getKey())
|
|
|
+ && "安装, 拆移".contains(pgOrderBase.getOrderSmallType())
|
|
|
+ && CollectionUtil.isEmpty(workerList)) {
|
|
|
+ throw new RemoteServiceException("工单的类型必须至少选一个小工");
|
|
|
+ }
|
|
|
+
|
|
|
+ StringBuilder joinSlaveStr = new StringBuilder();
|
|
|
+ if (CollectionUtil.isNotEmpty(workerList)) {
|
|
|
+ joinSlaveStr.append(", 辅助工程师");
|
|
|
+ List<PgOrderWorker> orderWorkerList = new ArrayList<>();
|
|
|
+ for (String workerId : workerList) {
|
|
|
+ final User user = userService.getById(workerId);
|
|
|
+ PgOrderWorker orderWorker = new PgOrderWorker();
|
|
|
+ orderWorker.setOrderBaseId(pgOrderBase.getId())
|
|
|
+ .setWebsitId(pgOrderBase.getWebsitId())
|
|
|
+ .setWebsitName(pgOrderBase.getWebsitName())
|
|
|
+ .setWorkerId(workerId)
|
|
|
+ .setWorkerName(Objects.nonNull(user) ? user.getNickName() : "")
|
|
|
+ .setWorkerMobile(Objects.nonNull(user) ? user.getMobile() : "")
|
|
|
+ .setWorkerIdcard(Objects.nonNull(user) ? user.getIdCard() : "")
|
|
|
+ .setWorkerNumber(Objects.nonNull(user) ? user.getWorkerNumber() : "")
|
|
|
+ .setIsMaster(false);
|
|
|
+
|
|
|
+ orderWorkerList.add(orderWorker);
|
|
|
+ joinSlaveStr.append("【").append(orderWorker.getWorkerName()).append("】");
|
|
|
+ }
|
|
|
+ // 清空小工
|
|
|
+ pgOrderWorkerService.lambdaUpdate()
|
|
|
+ .eq(PgOrderWorker::getOrderBaseId, pgOrderBase.getId())
|
|
|
+ .eq(PgOrderWorker::getIsMaster, false)
|
|
|
+ .remove();
|
|
|
+ pgOrderWorkerService.saveBatch(orderWorkerList);
|
|
|
+ }
|
|
|
+
|
|
|
+
|
|
|
pgOrderBase.setOrderStatus(OrderBaseStatusEnum.FWZ.getKey());
|
|
|
pgOrderBase.setOrderStatusText(OrderBaseStatusEnum.FWZ.getRemark());
|
|
|
pgOrderBase.setWorkerReceTime(new Date());
|
|
|
pgOrderBase.updateById();
|
|
|
|
|
|
- orderLogLogic.addLog(orderBaseId,"接收工单","工程师【"+one.getWorkerName()+"】确认接单",one.getWebsitName());
|
|
|
+ orderLogLogic.addLog(orderBaseId, "接收工单", "主要工程师【" + one.getWorkerName() + "】确认接单" + joinSlaveStr, one.getWebsitName());
|
|
|
}
|
|
|
|
|
|
/**
|
|
@@ -419,6 +466,7 @@ public class OrderBaseLogic {
|
|
|
throw new RemoteServiceException("当前身份不可抢单");
|
|
|
}
|
|
|
pgOrderBase.setWorkerId(currentCompanyWechat.getUserId());
|
|
|
+ pgOrderBase.setWorkerNumber(currentCompanyWechat.getUser().getWorkerNumber());
|
|
|
pgOrderBase.setWorkerName(user.getNickName());
|
|
|
pgOrderBase.setWorkerReceTime(new Date());
|
|
|
pgOrderBase.setWorkerIdcard(user.getIdCard());
|
|
@@ -511,5 +559,82 @@ public class OrderBaseLogic {
|
|
|
.eq(PgOrderBase::getId, orderBaseId).update();
|
|
|
}
|
|
|
|
|
|
+ /**
|
|
|
+ * 根据工单号获取大工有配队的小工师傅
|
|
|
+ * @param orderBaseId
|
|
|
+ * @return
|
|
|
+ */
|
|
|
+ public List<WorkerTeamBean> slaveWorkerTeam(String orderBaseId) {
|
|
|
+ final PgOrderBase orderBase = pgOrderBaseService.getById(orderBaseId);
|
|
|
+ if (StringUtils.equals(orderBase.getOrderStatus(), OrderBaseStatusEnum.YWG.getKey())) {
|
|
|
+ throw new RemoteServiceException("工单状态”已完工“");
|
|
|
+ }
|
|
|
+ final List<PgOrderWorker> orderWorkerList = pgOrderWorkerService.lambdaQuery()
|
|
|
+ .eq(PgOrderWorker::getOrderBaseId, orderBaseId)
|
|
|
+ .eq(PgOrderWorker::getIsMaster, false)
|
|
|
+ .ne(PgOrderWorker::getWorkerId, orderBase.getWorkerId())
|
|
|
+ .list();
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+ Map<String, WorkerTeamBean> workerTeamMap = new HashMap<>();
|
|
|
+ if (CollectionUtil.isNotEmpty(orderWorkerList)) {
|
|
|
+ for (PgOrderWorker orderWorker : orderWorkerList) {
|
|
|
+ WorkerTeamBean bean = new WorkerTeamBean();
|
|
|
+ bean.setWorkerId(orderWorker.getWorkerId());
|
|
|
+ bean.setWorkerName(orderWorker.getWorkerName());
|
|
|
+ bean.setWorkerNumber(orderWorker.getWorkerNumber());
|
|
|
+ bean.setIsSelect(true);
|
|
|
+ workerTeamMap.put(orderWorker.getWorkerId(), bean);
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ final List<WorkerTeam> teamList = workerTeamService.lambdaQuery()
|
|
|
+ .eq(WorkerTeam::getCompanyWechatId, orderBase.getCompanyWechatId())
|
|
|
+ .eq(WorkerTeam::getMasterWorkerId, orderBase.getWorkerNumber())
|
|
|
+ .eq(WorkerTeam::getStatus, StateEnum.ON.getKey())
|
|
|
+ .orderByAsc(WorkerTeam::getCreateTime)
|
|
|
+ .list();
|
|
|
+ if (CollectionUtil.isNotEmpty(teamList)) {
|
|
|
+ final List<User> userList = userService.lambdaQuery()
|
|
|
+ .in(User::getWorkerNumber, teamList.stream()
|
|
|
+ .map(WorkerTeam::getAssistantWorkerId)
|
|
|
+ .collect(Collectors.toList()))
|
|
|
+ .eq(User::getType, UserTypeEnum.WORKER.getKey())
|
|
|
+ .list();
|
|
|
+ final Map<String, User> userMap = userList.stream().collect(Collectors.toMap(User::getWorkerNumber, Function.identity()));
|
|
|
+ int index = 0;
|
|
|
+ for (WorkerTeam workerTeam : teamList) {
|
|
|
+ final User user = userMap.get(workerTeam.getAssistantWorkerId());
|
|
|
+ if (Objects.nonNull(user)) {
|
|
|
+ WorkerTeamBean bean = new WorkerTeamBean();
|
|
|
+ bean.setWorkerId(user.getUserId());
|
|
|
+ bean.setWorkerName(user.getNickName());
|
|
|
+ bean.setWorkerNumber(user.getWorkerNumber());
|
|
|
+ bean.setIsSelect(false);
|
|
|
+ if (index == 0 && CollectionUtil.isEmpty(workerTeamMap)) {
|
|
|
+ // 没有工单派工师傅并且下标为0时,默认选中
|
|
|
+ bean.setIsSelect(true);
|
|
|
+ }
|
|
|
+ workerTeamMap.put(user.getUserId(), bean);
|
|
|
+ index++;
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ // 清除非正常状态的小工师傅
|
|
|
+ final List<WebsitUser> websitUserList = websitUserService.lambdaQuery()
|
|
|
+ .eq(WebsitUser::getCompanyWechatId, orderBase.getCompanyWechatId())
|
|
|
+ .ne(WebsitUser::getExamineStatus, ExamineStatusEnum.OK.getKey())
|
|
|
+ .eq(WebsitUser::getWebsitId, orderBase.getWebsitId())
|
|
|
+ .in(WebsitUser::getUserId, workerTeamMap.keySet())
|
|
|
+ .list();
|
|
|
+
|
|
|
+ for (WebsitUser websitUser : websitUserList) {
|
|
|
+ workerTeamMap.remove(websitUser.getUserId());
|
|
|
+ }
|
|
|
+
|
|
|
+ return new ArrayList<>(workerTeamMap.values());
|
|
|
+ }
|
|
|
|
|
|
}
|