FengChaoYu vor 6 Monaten
Ursprung
Commit
e6a573ccae

+ 19 - 0
mall-miniapp-service/src/main/java/com/gree/mall/miniapp/bean/order/WorkerTeamBean.java

@@ -0,0 +1,19 @@
+package com.gree.mall.miniapp.bean.order;
+
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+@Data
+@ApiModel
+public class WorkerTeamBean {
+
+    @ApiModelProperty("小工id")
+    private String workerId;
+    @ApiModelProperty("小工编号")
+    private String workerNumber;
+    @ApiModelProperty("小工名称")
+    private String workerName;
+    @ApiModelProperty("是否选中")
+    private Boolean isSelect;
+}

+ 12 - 3
mall-miniapp-service/src/main/java/com/gree/mall/miniapp/controller/workorder/OrderBaseController.java

@@ -1,6 +1,7 @@
 package com.gree.mall.miniapp.controller.workorder;
 
 import com.baomidou.mybatisplus.core.metadata.IPage;
+import com.gree.mall.miniapp.bean.order.WorkerTeamBean;
 import com.gree.mall.miniapp.bean.workorder.*;
 import com.gree.mall.miniapp.constant.Constant;
 import com.gree.mall.miniapp.enums.workorder.OrderBaseStatusEnum;
@@ -135,9 +136,10 @@ public class OrderBaseController {
     @PostMapping("/rece")
     @ApiOperation("确定接单")
     public ResponseHelper rece(
-            @RequestParam String orderBaseId
+            @ApiParam(value = "工单id", required = true) @RequestParam String orderBaseId,
+            @ApiParam(value = "小工师傅") @RequestParam List<String> workerList
     ){
-        orderBaseLogic.rece(orderBaseId);
+        orderBaseLogic.rece(orderBaseId, workerList);
         return ResponseHelper.success();
     }
 
@@ -199,5 +201,12 @@ public class OrderBaseController {
         return ResponseHelper.success(abnormalVO);
     }
 
-
+    @PostMapping("/slave/worker/team")
+    @ApiOperation("师傅队伍")
+    public ResponseHelper<List<WorkerTeamBean>> slaveWorkerTeam(
+            @ApiParam(value = "工单id") @RequestParam String orderBaseId
+    ) throws Exception {
+        List<WorkerTeamBean> beanList = orderBaseLogic.slaveWorkerTeam(orderBaseId);
+        return ResponseHelper.success(beanList);
+    }
 }

+ 23 - 0
mall-miniapp-service/src/main/java/com/gree/mall/miniapp/enums/WebsitAttrEnum.java

@@ -0,0 +1,23 @@
+package com.gree.mall.miniapp.enums;
+
+import com.baomidou.mybatisplus.annotation.EnumValue;
+import com.fasterxml.jackson.annotation.JsonValue;
+import com.gree.mall.miniapp.enums.base.BaseEnum;
+import lombok.AccessLevel;
+import lombok.Getter;
+import lombok.RequiredArgsConstructor;
+
+@Getter
+@RequiredArgsConstructor(access = AccessLevel.PRIVATE)
+public enum WebsitAttrEnum implements BaseEnum {
+    SELF("SELF","自建网点"),
+    MAJOR("MAJOR","第三方专业网点"),
+    MERCHANT("MERCHANT","第三方经销商家网点"),
+    ;
+
+    @EnumValue
+    @JsonValue
+    private final String key;
+    private final String remark;
+
+}

+ 5 - 4
mall-miniapp-service/src/main/java/com/gree/mall/miniapp/logic/order/PayOrderLogic.java

@@ -643,10 +643,11 @@ public class PayOrderLogic {
                         stock.setRealQty(stock.getRealQty().add(useTotalQty));
                         stock.setNormPrice(item.getGoodsAmount());
 
-                        if (!stockBean.getIsSmall() && stock.getRealQty().compareTo(stockBean.getStockQty()) > 0) {
-                            throw new RemoteServiceException("收费标准关联的 " + stockBean.getGoodsName() + "库存数量"
-                                    + stock.getStockQty() + ", 需扣" + stock.getRealQty() + ", 库存数量不够扣减");
-                        }
+                        // 7、收费标准如果和辅材没有对应关系,不判断库存;从总部同步下来订单,如果师傅的库存不足,不限制支付;(允许负库存)
+//                        if (!stockBean.getIsSmall() && stock.getRealQty().compareTo(stockBean.getStockQty()) > 0) {
+//                            throw new RemoteServiceException("收费标准关联的 " + stockBean.getGoodsName() + "库存数量"
+//                                    + stock.getStockQty() + ", 需扣" + stock.getRealQty() + ", 库存数量不够扣减");
+//                        }
                     }
                 }
             }

+ 134 - 9
mall-miniapp-service/src/main/java/com/gree/mall/miniapp/logic/workorder/OrderBaseLogic.java

@@ -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());
+    }
 
 }

+ 1 - 1
mall-miniapp-service/src/main/java/com/gree/mall/miniapp/logic/workorder/OrderLogLogic.java

@@ -15,7 +15,6 @@ import com.gree.mall.miniapp.plus.entity.*;
 import com.gree.mall.miniapp.plus.service.*;
 import com.gree.mall.miniapp.utils.StringUtil;
 import lombok.RequiredArgsConstructor;
-import org.apache.commons.lang.time.DateUtils;
 import org.apache.commons.lang3.StringUtils;
 import org.springframework.stereotype.Service;
 import org.springframework.transaction.annotation.Transactional;
@@ -322,4 +321,5 @@ public class OrderLogLogic {
 
         return abnormalService.lambdaQuery().eq(!StringUtil.isEmpty(exType),Abnormal::getExType,exType).list();
     }
+
 }

+ 5 - 4
mall-server-api/src/main/java/com/gree/mall/manager/logic/workorder/OrderBaseExcelLogic.java

@@ -9,8 +9,6 @@ import com.google.common.collect.Lists;
 import com.gree.mall.manager.bean.SyncOrderDto;
 import com.gree.mall.manager.bean.admin.AdminUserCom;
 import com.gree.mall.manager.bean.common.RegionBean;
-import com.gree.mall.manager.commonmapper.CommonMapper;
-import com.gree.mall.manager.commonmapper.workorder.OrderBaseCMapper;
 import com.gree.mall.manager.constant.SysDictConstant;
 import com.gree.mall.manager.enums.ExamineStatusEnum;
 import com.gree.mall.manager.enums.UserTypeEnum;
@@ -33,7 +31,6 @@ import org.apache.commons.collections4.CollectionUtils;
 import org.apache.commons.lang3.StringUtils;
 import org.springframework.stereotype.Service;
 import org.springframework.transaction.annotation.Transactional;
-import org.springframework.web.bind.annotation.RequestParam;
 
 import java.math.BigDecimal;
 import java.util.ArrayList;
@@ -275,6 +272,7 @@ public class OrderBaseExcelLogic {
 
                         if (workerIndex == 0) {
                             pgOrderBase.setWorkerId(worker.getUserId());
+                            pgOrderBase.setWorkerNumber(worker.getWorkerNumber());
                             pgOrderBase.setWorkerIdcard(worker.getIdCard());
                             pgOrderBase.setWorkerIdList(worker.getUserId());
                             pgOrderBase.setWorkerMobile(worker.getMobile());
@@ -288,6 +286,7 @@ public class OrderBaseExcelLogic {
                         pgOrderWorker.setWebsitId(pgOrderBase.getWebsitId());
                         pgOrderWorker.setWebsitName(pgOrderBase.getWebsitName());
                         pgOrderWorker.setWorkerId(worker.getUserId());
+                        pgOrderWorker.setWorkerNumber(worker.getWorkerNumber());
                         pgOrderWorker.setWorkerName(worker.getNickName());
                         pgOrderWorker.setWorkerIdcard(worker.getIdCard());
                         pgOrderWorker.setWorkerMobile(worker.getMobile());
@@ -637,6 +636,7 @@ public class OrderBaseExcelLogic {
 
                         if (workerIndex == 0) {
                             pgOrderBase.setWorkerId(worker.getUserId());
+                            pgOrderBase.setWorkerNumber(worker.getWorkerNumber());
                             pgOrderBase.setWorkerIdcard(worker.getIdCard());
                             pgOrderBase.setWorkerIdList(worker.getUserId());
                             pgOrderBase.setWorkerMobile(worker.getMobile());
@@ -650,6 +650,7 @@ public class OrderBaseExcelLogic {
                         pgOrderWorker.setWebsitId(pgOrderBase.getWebsitId());
                         pgOrderWorker.setWebsitName(pgOrderBase.getWebsitName());
                         pgOrderWorker.setWorkerId(worker.getUserId());
+                        pgOrderWorker.setWorkerNumber(worker.getWorkerNumber());
                         pgOrderWorker.setWorkerName(worker.getNickName());
                         pgOrderWorker.setWorkerIdcard(worker.getIdCard());
                         pgOrderWorker.setWorkerMobile(worker.getMobile());
@@ -1116,7 +1117,7 @@ public class OrderBaseExcelLogic {
                     User user = userMap.get(websitUser.getUserId());
 
                     if (!StringUtil.isEmpty(user.getMobile())) {
-                        pgOrderBase.setWorkerNumber(user.getMobile());
+                        pgOrderBase.setWorkerNumber(user.getWorkerNumber());
                         pgOrderWorker.setWorkerMobile(user.getMobile());
                     }
 

+ 3 - 0
mall-server-api/src/main/java/com/gree/mall/manager/logic/workorder/OrderBaseLogic.java

@@ -641,6 +641,7 @@ public class OrderBaseLogic {
             orderBaseStatusEnum = OrderBaseStatusEnum.DJD;
 
             pgOrderBase.setWorkerId(user.getUserId());
+            pgOrderBase.setWorkerNumber(user.getWorkerNumber());
             pgOrderBase.setWorkerName(user.getNickName());
             pgOrderBase.setWorkerMobile(user.getMobile());
             pgOrderBase.setWorkerIdList(user.getUserId());
@@ -1139,6 +1140,7 @@ public class OrderBaseLogic {
 
             PgOrderWorker masterWorker = orderAddBeanDTO.getOrderWorkers().get(0);
             pgOrderBase.setWorkerId(masterWorker.getWorkerId());
+            pgOrderBase.setWorkerNumber(masterWorker.getWorkerNumber());
             pgOrderBase.setWorkerName(masterWorker.getWorkerName());
             pgOrderBase.setWorkerMobile(masterWorker.getWorkerMobile());
             pgOrderBase.setWorkerIdcard(masterWorker.getWorkerIdcard());
@@ -1159,6 +1161,7 @@ public class OrderBaseLogic {
 
         } else {
             pgOrderBase.setWorkerId("");
+            pgOrderBase.setWorkerNumber("");
             pgOrderBase.setWorkerName("");
             pgOrderBase.setWorkerMobile("");
             pgOrderBase.setWorkerIdcard("");