Просмотр исходного кода

解决feat与dev-xwt分支冲突

codingliang 1 год назад
Родитель
Сommit
b85adc76eb

+ 1 - 0
src/main/java/com/sqx/modules/errand/service/TbIndentService.java

@@ -4,6 +4,7 @@ import com.baomidou.mybatisplus.extension.service.IService;
 import com.sqx.common.utils.PageUtils;
 import com.sqx.common.utils.Result;
 import com.sqx.modules.app.entity.UserEntity;
+import com.sqx.modules.errand.dto.OrderRiderDeliveryDTO;
 import com.sqx.modules.errand.dto.RiderDeliveryDTO;
 import com.sqx.modules.errand.dto.RiderTransferOrderDTO;
 import com.sqx.modules.errand.dto.WaitForAcceptOrderQueryDTO;

+ 165 - 33
src/main/java/com/sqx/modules/errand/service/impl/TbIndentServiceImpl.java

@@ -57,7 +57,6 @@ import com.sqx.modules.utils.HttpClientUtil;
 import com.sqx.modules.utils.SenInfoCheckUtil;
 import lombok.extern.slf4j.Slf4j;
 import org.apache.commons.lang3.StringUtils;
-import org.apache.poi.ss.formula.functions.T;
 import org.gavaghan.geodesy.Ellipsoid;
 import org.gavaghan.geodesy.GlobalCoordinates;
 import org.redisson.api.RLock;
@@ -927,6 +926,96 @@ public class TbIndentServiceImpl extends ServiceImpl<TbIndentDao, TbIndent> impl
         noticeAfterTransfer(indent);
     }
 
+    //region
+    @Override
+    public Result orderRiderDelivery(Long userId, OrderRiderDeliveryDTO orderDeliveryDTO) {
+        // 添加拍照发短信逻辑
+        // 因为原有的确认送达方法代码比较凌乱,且不好重新封装,所以这里就在原有确认收货方法之前添加拍照发短信逻辑
+        try{
+            String acquireCode = orderDeliveryDTO.getAcquireCode();
+            TbIndent indentOrder = tbIndentDao.findIndentByOrderId(acquireCode);
+            if (ObjectUtil.isNull(indentOrder)) {
+                throw new SqxException("扫码无效的跑腿订单id");
+            }
+
+            // 如果是外卖订单
+            if (ObjectUtil.equal(indentOrder.getIndentType(), "5")) {
+                orderHandTakeoutOrder(indentOrder, userId, orderDeliveryDTO);
+            }
+
+            return orderFinshOrder(userId, indentOrder.getIndentNumber());
+        } catch (Exception e){
+            log.error("完成订单异常:"+e.getMessage(),e);
+            throw new SqxException(e.getMessage());
+        }
+    }
+
+    /**
+     * 处理外卖订单
+     * @param indentOrder 跑腿订单
+     * @param userId 当前用户id
+     * @param deliveryDTO 送达信息
+     */
+    private void orderHandTakeoutOrder(TbIndent indentOrder, Long userId, OrderRiderDeliveryDTO deliveryDTO) {
+        // 6表示跑腿订单处于已完成状态
+        if("6".equals(indentOrder.getIndentState())){
+            return;
+        }
+
+        Long smsTemplateId = deliveryDTO.getSmsTemplateId();
+        String imgs = deliveryDTO.getImgs();
+        if (ObjectUtil.isNull(smsTemplateId) || StrUtil.isBlank(imgs)) {
+            throw new SqxException("短信模板id或图片不能为空");
+        }
+
+        // 收货人手机
+        String userPhone = indentOrder.getUserPhone();
+        // 当前骑手
+        UserEntity riderUser = userService.getById(userId);
+
+        if (StrUtil.isBlank(userPhone)) {
+            log.error("外卖跑腿订单【{}】收货人手机号码为空...", indentOrder.getIndentNumber());
+            return;
+        }
+
+        if (ObjectUtil.isNull(riderUser) || StrUtil.isBlank(riderUser.getPhone())) {
+            log.error("外卖跑腿订单【{}】当前骑手id【{}】骑手不存在,或当前骑手手机号码为空...", indentOrder.getIndentNumber(), userId);
+            return;
+        }
+
+        // 订单新增送达图片
+        TbOrder tbOrder = appOrderService.getById(indentOrder.getOrderId());
+        tbOrder.setDeliveryImgs(imgs);
+        appOrderService.updateById(tbOrder);
+
+        // 发送短信并记录短信发送记录
+        SmsSendResult smsSendResult = smsTemplateService.sendSms(smsTemplateId, riderUser, userPhone);
+        // sourceType 1骑手、2商家
+        smsSendLogService.saveLog(indentOrder.getIndentId(), "1", smsSendResult);
+    }
+
+    @Transactional
+    public Result orderFinshOrder(Long userId, String indentNumber){
+        String date = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(new Date());
+        TbIndent indentByNumber = tbIndentDao.findIndentByNumber(indentNumber);
+        if("6".equals(indentByNumber.getIndentState())){
+            return Result.success();
+        }
+        if("4".equals(indentByNumber.getIndentState())){
+            if("5".equals(indentByNumber.getIndentType())){
+                log.info("操作完成订单1:"+indentByNumber.getOrderId());
+                appOrderService.accomplishOrder(indentByNumber.getOrderId());
+            }else{
+                tbIndentDao.riderDelivery(indentByNumber.getIndentId(), date);
+                finshIndent(userId, indentNumber);
+            }
+
+            return Result.success();
+        }
+        return Result.error("订单已完成!");
+    }
+    //endregion
+
     @Override
     public void riderUploadDeliveryImg(Long userId, String indentNumber, String imgs) {
         TbIndent indentOrder = tbIndentDao.findIndentByNumber(indentNumber);
@@ -1160,39 +1249,33 @@ public class TbIndentServiceImpl extends ServiceImpl<TbIndentDao, TbIndent> impl
     @Override
     @Transactional
     public void finshIndent(Long userId, String indentNumber){
-        try {
-            //用户确认送达以后,将配送费加到骑手余额账户
-            TbIndent tbIndent = tbIndentDao.selectIndentByIndentNumber(indentNumber);
-            UserEntity userMessage = userService.selectUserById(tbIndent.getRiderUserId());
-            BigDecimal balance = userMessage.getBalance().add(tbIndent.getRiderMoney());
-            tbIndentDao.updateRiderBalance(balance, tbIndent.getRiderUserId());
-            //将接单明细添加到钱包明细表里
-            UserMoneyDetails userMoneyDetails=new UserMoneyDetails();
-            userMoneyDetails.setMoney(tbIndent.getRiderMoney());
-            userMoneyDetails.setUserId(tbIndent.getRiderUserId());
-            userMoneyDetails.setTitle("[接单收入]接单ID:"+tbIndent.getIndentNumber());
-            userMoneyDetails.setContent("接单收入:"+tbIndent.getRiderMoney());
-            userMoneyDetails.setType(1);
-            userMoneyDetails.setClassify(3);
-            userMoneyDetails.setState(2);
-            SimpleDateFormat simpleDateFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
-            userMoneyDetails.setCreateTime(simpleDateFormat.format(new Date()));
-            //tbIndentDao.insertUserMoneyDetails(userMoneyDetails.getUserId(), userMoneyDetails.getTitle(), userMoneyDetails.getType(), userMoneyDetails.getMoney(), userMoneyDetails.getContent(), userMoneyDetails.getCreateTime());
-            userMoneyDetailsService.save(userMoneyDetails);
 
-            try {
-                String riderTemplate = commonInfoService.findOne(311).getValue();
-                List<String> msgList = new ArrayList<>();
-                msgList.add(indentNumber);
-                msgList.add(tbIndent.getCreateTime());
-                msgList.add("已完成");
-                msgList.add(DateUtils.format(new Date()));
-                UserEntity riderUser = userService.selectUserById(tbIndent.getRiderUserId());
-                SenInfoCheckUtil.sendRiderMsg(riderUser.getRiderOpenId(), riderTemplate, msgList, 2);
-            } catch (Exception e) {}
-        } catch (Exception e) {
-            log.error("骑手收益结算异常,跑腿订单号【{}】,异常原因【{}】:", indentNumber, e.getMessage());
-        }
+        //用户确认送达以后,将配送费加到骑手余额账户
+        TbIndent tbIndent = tbIndentDao.selectIndentByIndentNumber(indentNumber);
+        UserEntity userMessage = userService.selectUserById(tbIndent.getRiderUserId());
+        BigDecimal balance = userMessage.getBalance().add(tbIndent.getRiderMoney());
+        tbIndentDao.updateRiderBalance(balance, tbIndent.getRiderUserId());
+        //将接单明细添加到钱包明细表里
+        UserMoneyDetails userMoneyDetails=new UserMoneyDetails();
+        userMoneyDetails.setMoney(tbIndent.getRiderMoney());
+        userMoneyDetails.setUserId(tbIndent.getRiderUserId());
+        userMoneyDetails.setTitle("[接单收入]接单ID:"+tbIndent.getIndentNumber());
+        userMoneyDetails.setContent("接单收入:"+tbIndent.getRiderMoney());
+        userMoneyDetails.setType(1);
+        userMoneyDetails.setClassify(3);
+        userMoneyDetails.setState(2);
+        SimpleDateFormat simpleDateFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
+        userMoneyDetails.setCreateTime(simpleDateFormat.format(new Date()));
+        //tbIndentDao.insertUserMoneyDetails(userMoneyDetails.getUserId(), userMoneyDetails.getTitle(), userMoneyDetails.getType(), userMoneyDetails.getMoney(), userMoneyDetails.getContent(), userMoneyDetails.getCreateTime());
+        userMoneyDetailsService.save(userMoneyDetails);
+        String riderTemplate = commonInfoService.findOne(311).getValue();
+        List<String> msgList = new ArrayList<>();
+        msgList.add(indentNumber);
+        msgList.add(tbIndent.getCreateTime());
+        msgList.add("已完成");
+        msgList.add(DateUtils.format(new Date()));
+        UserEntity riderUser = userService.selectUserById(tbIndent.getRiderUserId());
+        SenInfoCheckUtil.sendRiderMsg(riderUser.getRiderOpenId(), riderTemplate, msgList, 2);
     }
 
     @Override
@@ -1577,6 +1660,55 @@ public class TbIndentServiceImpl extends ServiceImpl<TbIndentDao, TbIndent> impl
 
         return userEntity;
     }
+
+    @Override
+    public PageUtils selectIndentPage(Integer page, Integer limit, String acquireCode) {
+        IPage<TbIndent> pages = new Page<>(page, limit);
+        QueryWrapper<TbIndent> queryWrapper = new QueryWrapper();
+        queryWrapper.like(org.springframework.util.StringUtils.hasText(acquireCode), "order_id", acquireCode);
+        queryWrapper.orderByAsc("create_time");
+        IPage<TbIndent> result = baseMapper.selectPage(pages, queryWrapper);
+
+        return new PageUtils(result);
+    }
+
+    @Override
+    public Result checkIndent(Long userId, String orderId) {
+        try {
+            //判断骑手状态是否被封号
+            UserEntity userEntity1 = userService.selectUserById(userId);
+            if(userEntity1.getStatus()!=1){
+                return Result.error("您的帐号已被封禁,请联系客服解封!");
+            }
+            //判断骑手保证金是否大于可接单金额
+            UserEntity userMessage = userService.selectUserById(userId);
+            String format = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(new Date());
+            CommonInfo one1 = commonInfoService.findOne(273);
+            Double cashDeposit = Double.valueOf(one1.getValue());
+            if(userMessage.getCashDeposit().compareTo(BigDecimal.valueOf(cashDeposit)) > 0 ||userMessage.getCashDeposit().compareTo(BigDecimal.valueOf(cashDeposit))==0){
+                //  tbIndentDao.indentReceiving(userId, indentNumber, format);
+                //判断骑手是否超过最大接单数量
+                String maxNumStr = commonInfoService.findOne(342).getValue();
+                Integer maxNum=Integer.parseInt(maxNumStr);
+                int i = tbIndentDao.selectIndentByRiderUserCount(userId);
+                if(i>=maxNum){
+                    return Result.error("您已达最大接单数量,请先完成订单后再进行接单");
+                }
+                TbIndent tbIndent = tbIndentDao.findIndentByOrderId(orderId);
+                log.error("抢单:"+userId+"     "+tbIndent.getIndentState());
+                if(!"2".equals(tbIndent.getIndentState())){
+                    return Result.error("订单已被抢走!");
+                }
+            }else {
+                return Result.error("你的保证金不足,请缴纳保证金后再接单");
+            }
+            return Result.success();
+        }catch (Exception e){
+            e.printStackTrace();
+            log.error("骑手接单 异常:"+e.getMessage(),e);
+        }
+        return Result.error("系统繁忙,请稍后再试!");
+    }
 }