| | |
| | | queryWrapper.like(StringUtils.isNotBlank(pageWrap.getModel().getDepositShopName()), "s1.name", pageWrap.getModel().getDepositShopName()); |
| | | queryWrapper.like(StringUtils.isNotBlank(pageWrap.getModel().getTakeShopName()), "s2.name", pageWrap.getModel().getTakeShopName()); |
| | | queryWrapper.like(StringUtils.isNotBlank(pageWrap.getModel().getGoodsInfo()), Orders::getGoodsInfo, pageWrap.getModel().getGoodsInfo()); |
| | | queryWrapper.ge(pageWrap.getModel().getCreateStartTime() != null, Orders::getCreateTime, Utils.Date.getStart(pageWrap.getModel().getCreateStartTime())); |
| | | queryWrapper.le(pageWrap.getModel().getCreateEndTime() != null, Orders::getCreateTime, Utils.Date.getEnd(pageWrap.getModel().getCreateEndTime())); |
| | | queryWrapper.ge(pageWrap.getModel().getCreateStartTime() != null, Orders::getCreateTime, pageWrap.getModel().getCreateStartTime()); |
| | | queryWrapper.le(pageWrap.getModel().getCreateEndTime() != null, Orders::getCreateTime, pageWrap.getModel().getCreateEndTime()); |
| | | queryWrapper.eq(pageWrap.getModel().getDepositShopId() != null, Orders::getDepositShopId, pageWrap.getModel().getDepositShopId()); |
| | | queryWrapper.eq(pageWrap.getModel().getType() != null, Orders::getType, pageWrap.getModel().getType()); |
| | | queryWrapper.eq(pageWrap.getModel().getStatus() != null, Orders::getStatus, pageWrap.getModel().getStatus()); |
| | |
| | | queryWrapper.and(pageWrap.getModel().getDriverKeyword() != null, i->i.like(DriverInfo::getName, pageWrap.getModel().getDriverKeyword()) |
| | | .or().like(DriverInfo::getTelephone, pageWrap.getModel().getDriverKeyword())); |
| | | queryWrapper.eq(pageWrap.getModel().getSettlementStatus() != null, Orders::getSettlementStatus, pageWrap.getModel().getSettlementStatus()); |
| | | queryWrapper.eq(pageWrap.getModel().getAcceptDriver() != null, Orders::getAcceptDriver, pageWrap.getModel().getAcceptDriver()); |
| | | queryWrapper.and(pageWrap.getModel().getShopId() != null, i -> i.eq(Orders::getDepositShopId, pageWrap.getModel().getShopId()) |
| | | .or().eq(Orders::getTakeShopId, pageWrap.getModel().getShopId())); |
| | | for (PageWrap.SortData sortData : pageWrap.getSorts()) { |
| | | if (sortData.getDirection().equalsIgnoreCase(PageWrap.DESC)) { |
| | | queryWrapper.orderByDesc(sortData.getProperty()); |
| | |
| | | queryWrapper.like(StringUtils.isNotBlank(pageWrap.getModel().getDepositShopName()), "s1.name", pageWrap.getModel().getDepositShopName()); |
| | | queryWrapper.like(StringUtils.isNotBlank(pageWrap.getModel().getTakeShopName()), "s2.name", pageWrap.getModel().getTakeShopName()); |
| | | queryWrapper.like(StringUtils.isNotBlank(pageWrap.getModel().getGoodsInfo()), Orders::getGoodsInfo, pageWrap.getModel().getGoodsInfo()); |
| | | queryWrapper.ge(pageWrap.getModel().getCreateStartTime() != null, Orders::getCreateTime, Utils.Date.getStart(pageWrap.getModel().getCreateStartTime())); |
| | | queryWrapper.le(pageWrap.getModel().getCreateEndTime() != null, Orders::getCreateTime, Utils.Date.getEnd(pageWrap.getModel().getCreateEndTime())); |
| | | queryWrapper.ge(pageWrap.getModel().getCreateStartTime() != null, Orders::getCreateTime, pageWrap.getModel().getCreateStartTime()); |
| | | queryWrapper.le(pageWrap.getModel().getCreateEndTime() != null, Orders::getCreateTime, pageWrap.getModel().getCreateEndTime()); |
| | | queryWrapper.eq(pageWrap.getModel().getDepositShopId() != null, Orders::getDepositShopId, pageWrap.getModel().getDepositShopId()); |
| | | queryWrapper.eq(pageWrap.getModel().getType() != null, Orders::getType, pageWrap.getModel().getType()); |
| | | queryWrapper.eq(pageWrap.getModel().getStatus() != null, Orders::getStatus, pageWrap.getModel().getStatus()); |
| | |
| | | queryWrapper.and(pageWrap.getModel().getDriverKeyword() != null, i->i.like(DriverInfo::getName, pageWrap.getModel().getDriverKeyword()) |
| | | .or().like(DriverInfo::getTelephone, pageWrap.getModel().getDriverKeyword())); |
| | | queryWrapper.eq(pageWrap.getModel().getSettlementStatus() != null, Orders::getSettlementStatus, pageWrap.getModel().getSettlementStatus()); |
| | | queryWrapper.eq(pageWrap.getModel().getAcceptDriver() != null, Orders::getAcceptDriver, pageWrap.getModel().getAcceptDriver()); |
| | | queryWrapper.and(pageWrap.getModel().getShopId() != null, i -> i.eq(Orders::getDepositShopId, pageWrap.getModel().getShopId()) |
| | | .or().eq(Orders::getTakeShopId, pageWrap.getModel().getShopId())); |
| | | |
| | | queryWrapper.select( |
| | | "IFNULL(SUM(t.total_amount), 0) as total_amount_sum", |
| | |
| | | insuranceFeeFen = insuranceFeeYuan.multiply(new BigDecimal(100)).longValue(); |
| | | } |
| | | |
| | | // 5. 加急费用:物品价格 × 加急系数(字典 URGENT_COEFFICIENT) |
| | | // 5. 加急费用:物品价格 × (加急系数-1),如150%表示增加50% |
| | | long urgentFeeFen = 0L; |
| | | String urgentRateStr = systemDictDataBiz.queryByCode( |
| | | Constants.OPERATION_CONFIG, Constants.OP_URGENT_COEFFICIENT).getCode(); |
| | | BigDecimal urgentRate = new BigDecimal(urgentRateStr); |
| | | urgentFeeFen = new BigDecimal(itemPriceTotal).multiply(urgentRate) |
| | | BigDecimal urgentIncreaseRate = urgentRate.subtract(BigDecimal.ONE); |
| | | urgentFeeFen = new BigDecimal(itemPriceTotal).multiply(urgentIncreaseRate) |
| | | .setScale(0, RoundingMode.HALF_UP).longValue(); |
| | | |
| | | // 6. 总价格 = 物品价格 + 保价费用 + 加急费用(加急时才包含加急费) |
| | | long totalPrice = itemPriceTotal + insuranceFeeFen; |
| | | if (Boolean.TRUE.equals(dto.getUrgent())) { |
| | | totalPrice += urgentFeeFen; |
| | | // 加急时更新物品明细单价和小计 |
| | | for (ItemPriceVO vo : itemList) { |
| | | long adjustedUnitPrice = new BigDecimal(vo.getUnitPrice()).multiply(urgentRate) |
| | | .setScale(0, RoundingMode.HALF_UP).longValue(); |
| | | vo.setUnitPrice(adjustedUnitPrice); |
| | | vo.setSubtotal(adjustedUnitPrice * vo.getQuantity()); |
| | | } |
| | | } |
| | | |
| | | PriceCalculateVO result = new PriceCalculateVO(); |
| | |
| | | orders.setEstimatedAmount(priceResult.getTotalPrice()); |
| | | orders.setTotalAmount(priceResult.getTotalPrice()); |
| | | orders.setUrgentAmount(priceResult.getUrgentFee()); |
| | | // 存储加急系数 |
| | | if (Constants.ONE.equals(dto.getType()) && Constants.ONE.equals(dto.getIsUrgent())) { |
| | | String urgentRateStr = systemDictDataBiz.queryByCode( |
| | | Constants.OPERATION_CONFIG, Constants.OP_URGENT_COEFFICIENT).getCode(); |
| | | orders.setUrgentRata(new BigDecimal(urgentRateStr)); |
| | | } |
| | | if (dto.getDeclaredAmount() != null && dto.getDeclaredAmount().compareTo(BigDecimal.ZERO) > 0) { |
| | | orders.setDeclaredAmount(dto.getDeclaredAmount().multiply(new BigDecimal(100)).longValue()); |
| | | } else { |
| | |
| | | orderLogService.create(createLog); |
| | | |
| | | // ========== 7. 创建订单明细 ========== |
| | | // 异地寄存极速达时,按加急比例计算明细行单价 |
| | | BigDecimal urgentIncreaseRate = null; |
| | | if (Constants.ONE.equals(dto.getType()) && Constants.ONE.equals(dto.getIsUrgent())) { |
| | | String urgentRateStr = systemDictDataBiz.queryByCode( |
| | | Constants.OPERATION_CONFIG, Constants.OP_URGENT_COEFFICIENT).getCode(); |
| | | urgentIncreaseRate = new BigDecimal(urgentRateStr).subtract(BigDecimal.ONE); |
| | | } |
| | | for (ItemPriceVO itemVO : priceResult.getItemList()) { |
| | | OrdersDetail detail = new OrdersDetail(); |
| | | detail.setOrderId(orderId); |
| | |
| | | detail.setLuggageName(itemVO.getCategoryName()); |
| | | detail.setLuggageDetail(itemVO.getDetail()); |
| | | detail.setNum(itemVO.getQuantity()); |
| | | detail.setUnitPrice(itemVO.getUnitPrice()); |
| | | long detailUnitPrice = itemVO.getUnitPrice(); |
| | | if (urgentIncreaseRate != null) { |
| | | detailUnitPrice = new BigDecimal(detailUnitPrice) |
| | | .multiply(BigDecimal.ONE.add(urgentIncreaseRate)) |
| | | .setScale(0, RoundingMode.HALF_UP).longValue(); |
| | | } |
| | | detail.setUnitPrice(detailUnitPrice); |
| | | detail.setStartDistance(itemVO.getStartDistance()); |
| | | detail.setStartPrice(itemVO.getStartPrice()); |
| | | if (urgentIncreaseRate != null && itemVO.getStartPrice() != null) { |
| | | detail.setStartPrice(new BigDecimal(itemVO.getStartPrice()) |
| | | .multiply(BigDecimal.ONE.add(urgentIncreaseRate)) |
| | | .setScale(0, RoundingMode.HALF_UP).longValue()); |
| | | } else { |
| | | detail.setStartPrice(itemVO.getStartPrice()); |
| | | } |
| | | detail.setExtraDistance(itemVO.getExtraDistance()); |
| | | detail.setExtraPrice(itemVO.getExtraPrice()); |
| | | if (urgentIncreaseRate != null && itemVO.getExtraPrice() != null) { |
| | | detail.setExtraPrice(new BigDecimal(itemVO.getExtraPrice()) |
| | | .multiply(BigDecimal.ONE.add(urgentIncreaseRate)) |
| | | .setScale(0, RoundingMode.HALF_UP).longValue()); |
| | | } else { |
| | | detail.setExtraPrice(itemVO.getExtraPrice()); |
| | | } |
| | | detail.setLocallyPrice(itemVO.getLocallyPrice()); |
| | | detail.setDeleted(Constants.ZERO); |
| | | detail.setCreateTime(now); |
| | |
| | | vo.setMemberVerifyCode(order.getMemberVerifyCode()); |
| | | } |
| | | |
| | | // 异地寄存经纬度(就地寄存不返回) |
| | | if (Constants.ONE.equals(order.getType())) { |
| | | // status=3(已接单):返回存件门店经纬度 + 司机经纬度 |
| | | if (Constants.equalsInteger(status, Constants.OrderStatus.accepted.getStatus())) { |
| | | ShopInfo depositShop = shopInfoMapper.selectById(order.getDepositShopId()); |
| | | if (depositShop != null) { |
| | | vo.setDepositShopLng(depositShop.getLongitude()); |
| | | vo.setDepositShopLat(depositShop.getLatitude()); |
| | | } |
| | | if (order.getAcceptDriver() != null) { |
| | | DriverInfo driver = driverInfoMapper.selectById(order.getAcceptDriver()); |
| | | if (driver != null) { |
| | | vo.setDriverLng(driver.getLongitude()); |
| | | vo.setDriverLat(driver.getLatitude()); |
| | | } |
| | | } |
| | | } |
| | | // status=4(配送中):返回取件点经纬度 + 司机经纬度 |
| | | if (Constants.equalsInteger(status, Constants.OrderStatus.delivering.getStatus())) { |
| | | // 取件点经纬度(优先取件门店,否则订单上的取件坐标) |
| | | if (order.getTakeShopId() != null) { |
| | | ShopInfo takeShop = shopInfoMapper.selectById(order.getTakeShopId()); |
| | | if (takeShop != null) { |
| | | vo.setTakeLng(takeShop.getLongitude()); |
| | | vo.setTakeLat(takeShop.getLatitude()); |
| | | } |
| | | } else if (order.getTakeLgt() != null && order.getTakeLat() != null) { |
| | | vo.setTakeLng(order.getTakeLgt().doubleValue()); |
| | | vo.setTakeLat(order.getTakeLat().doubleValue()); |
| | | } |
| | | if (order.getAcceptDriver() != null) { |
| | | DriverInfo driver = driverInfoMapper.selectById(order.getAcceptDriver()); |
| | | if (driver != null) { |
| | | vo.setDriverLng(driver.getLongitude()); |
| | | vo.setDriverLat(driver.getLatitude()); |
| | | } |
| | | } |
| | | } |
| | | vo.setDepositShopLng(order.getDepositLgt().doubleValue()); |
| | | vo.setDepositShopLat(order.getDepositLat().doubleValue()); |
| | | // 取件点经纬度 |
| | | vo.setTakeLng(order.getTakeLgt().doubleValue()); |
| | | vo.setTakeLat(order.getTakeLat().doubleValue()); |
| | | //司机经纬度 |
| | | DriverInfo driver = driverInfoMapper.selectById(order.getAcceptDriver()); |
| | | if (driver != null) { |
| | | vo.setDriverLng(driver.getLongitude()); |
| | | vo.setDriverLat(driver.getLatitude()); |
| | | } |
| | | |
| | | // 评价信息 |
| | | vo.setCommentStatus(order.getCommentStatus()); |
| | | if (Constants.equalsInteger(order.getCommentStatus(), Constants.ONE)) { |
| | |
| | | public PayResponse payShopDeposit(Integer memberId) { |
| | | // 1. 查询门店信息 |
| | | ShopInfo shopInfo = shopInfoMapper.selectOne(new QueryWrapper<ShopInfo>().lambda() |
| | | .eq(ShopInfo::getDeleted,Constants.ZERO) |
| | | .eq(ShopInfo::getRegionMemberId,memberId)); |
| | | if (shopInfo == null) { |
| | | throw new BusinessException(ResponseStatus.DATA_EMPTY.getCode(), "门店不存在"); |
| | |
| | | sendSmsNotify(shopInfo.getTelephone(), |
| | | Constants.SmsNotify.SHOP_AUTH_SUCCESS, |
| | | "storeName", shopInfo.getName(), |
| | | "phone", shopInfo.getTelephone() != null ? shopInfo.getTelephone() : "", |
| | | "password", rawPassword); |
| | | |
| | | // 6. 押金支付完成后,若城市未开通则自动开通 |
| | | if (shopInfo.getAreaId() != null) { |
| | | Areas shopArea = areasBiz.resolveArea(shopInfo.getAreaId()); |
| | | Areas shopArea = areasService.getById(shopInfo.getAreaId()); |
| | | if (shopArea != null && shopArea.getParentId() != null) { |
| | | Areas cityArea = areasBiz.resolveArea(shopArea.getParentId()); |
| | | Areas cityArea = areasService.getById(shopArea.getParentId()); |
| | | if (cityArea != null && !Constants.equalsInteger(cityArea.getStatus(), Constants.ONE)) { |
| | | cityArea.setStatus(Constants.ONE); |
| | | cityArea.setEditDate(now); |
| | |
| | | .eq(Orders::getDeleted, Constants.ZERO) |
| | | .eq(Orders::getStatus, Constants.OrderStatus.finished.getStatus()) |
| | | .eq(Orders::getSettlementStatus, Constants.ZERO) |
| | | .le(Orders::getFinishTime, deadline)); |
| | | .le(Orders::getFinishTime, deadline) |
| | | ); |
| | | if (ordersList == null || ordersList.isEmpty()) { |
| | | return; |
| | | } |
| | |
| | | } else if (Constants.equalsInteger(revenue.getMemberType(), Constants.TWO)) { |
| | | // 门店:通过 memberId 查 ShopInfo(regionMemberId),更新 balance / totalBalance |
| | | ShopInfo shop = shopInfoMapper.selectOne(new QueryWrapper<ShopInfo>().lambda() |
| | | .eq(ShopInfo::getRegionMemberId, revenue.getMemberId()) |
| | | .eq(ShopInfo::getId, revenue.getMemberId()) |
| | | .eq(ShopInfo::getDeleted, Constants.ZERO) |
| | | .last("limit 1")); |
| | | if (shop != null) { |
| | |
| | | // 存件门店收益 |
| | | if (depositShopFee > 0 && order.getDepositShopId() != null) { |
| | | ShopInfo depositShop = shopInfoMapper.selectById(order.getDepositShopId()); |
| | | if (depositShop != null && depositShop.getRegionMemberId() != null) { |
| | | revenueMapper.insert(buildRevenue(depositShop.getRegionMemberId(), Constants.TWO, |
| | | if (depositShop != null && depositShop.getId() != null) { |
| | | revenueMapper.insert(buildRevenue(depositShop.getId(), Constants.TWO, |
| | | depositShopFee, orderId, order.getCode())); |
| | | } |
| | | } |
| | |
| | | // 取件门店收益(异地寄存且有取件门店) |
| | | if (takeShopFee > 0 && order.getTakeShopId() != null) { |
| | | ShopInfo takeShop = shopInfoMapper.selectById(order.getTakeShopId()); |
| | | if (takeShop != null && takeShop.getRegionMemberId() != null) { |
| | | revenueMapper.insert(buildRevenue(takeShop.getRegionMemberId(), Constants.TWO, |
| | | if (takeShop != null && takeShop.getId() != null) { |
| | | revenueMapper.insert(buildRevenue(takeShop.getId(), Constants.TWO, |
| | | takeShopFee, orderId, order.getCode())); |
| | | } |
| | | } |
| | |
| | | QueryWrapper<Orders> wrapper = new QueryWrapper<>(); |
| | | wrapper.eq("MEMBER_ID", memberId) |
| | | .in("STATUS", 0, 1, 2, 3, 4, 5) |
| | | .orderByDesc("CREATE_TIME") |
| | | .orderByAsc("CREATE_TIME") |
| | | .last("LIMIT 1"); |
| | | Orders order = ordersMapper.selectOne(wrapper); |
| | | if (order == null) { |
| | |
| | | for (int i = 0; i < paramPairs.length - 1; i += 2) { |
| | | templateParam.put(paramPairs[i], paramPairs[i + 1]); |
| | | } |
| | | boolean result = AliSmsService.sendSms(phone, smsNotify.getTemplateCode(), |
| | | String error = AliSmsService.sendSms(phone, smsNotify.getTemplateCode(), |
| | | templateParam.toJSONString()); |
| | | if (result) { |
| | | log.info("短信发送成功: phone={}, template={}", phone, smsNotify.name()); |
| | | } else { |
| | | log.warn("短信发送失败: phone={}, template={}", phone, smsNotify.name()); |
| | | } |
| | | // 存储短信记录 |
| | | Smsrecord record = new Smsrecord(); |
| | | record.setPhone(phone); |
| | | record.setContent(content); |
| | | record.setType(Constants.ONE); // 1=订单通知 |
| | | record.setStatus(result ? Constants.ONE : Constants.ZERO); // 1=已发送, 0=发送失败 |
| | | record.setType(Constants.ONE); |
| | | record.setStatus(error == null ? Constants.ONE : Constants.ZERO); |
| | | if (error != null) { |
| | | record.setRemark(error); |
| | | } |
| | | record.setCreateTime(new Date()); |
| | | record.setDeleted(Constants.ZERO); |
| | | smsrecordMapper.insert(record); |
| | | } catch (Exception e) { |
| | | log.error("短信发送异常: phone={}, template={}, error={}", phone, smsNotify.name(), e.getMessage()); |
| | | // 异常也记录 |
| | | try { |
| | | Smsrecord record = new Smsrecord(); |
| | | record.setPhone(phone); |
| | | record.setContent(content); |
| | | record.setType(Constants.ONE); |
| | | record.setStatus(Constants.ZERO); // 发送失败 |
| | | record.setStatus(Constants.ZERO); |
| | | record.setRemark(e.getMessage()); |
| | | record.setCreateTime(new Date()); |
| | | record.setDeleted(Constants.ZERO); |
| | | smsrecordMapper.insert(record); |