|
|
@@ -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("系统繁忙,请稍后再试!");
|
|
|
+ }
|
|
|
}
|
|
|
|
|
|
|