server/admin/src/main/java/com/doumee/api/business/PricingRuleController.java
@@ -134,35 +134,19 @@ } @PreventRepeat @ApiOperation("新增预计时效配置") @PostMapping("/estimatedDelivery/create") @ApiOperation("保存预计时效配置") @PostMapping("/estimatedDelivery/save") @RequiresPermissions("business:pricingRule:create") public ApiResponse createEstimatedDelivery(@RequestBody @Validated EstimatedDeliverySaveDTO request) { return ApiResponse.success(pricingRuleService.createEstimatedDelivery(request)); } @PreventRepeat @ApiOperation("修改预计时效配置") @PostMapping("/estimatedDelivery/update") @RequiresPermissions("business:pricingRule:update") public ApiResponse updateEstimatedDelivery(@RequestBody @Validated EstimatedDeliverySaveDTO request) { pricingRuleService.updateEstimatedDelivery(request); public ApiResponse saveEstimatedDelivery(@RequestBody @Validated EstimatedDeliverySaveDTO request) { pricingRuleService.saveEstimatedDelivery(request); return ApiResponse.success(null); } @ApiOperation("删除预计时效配置") @GetMapping("/estimatedDelivery/delete/{id}") @RequiresPermissions("business:pricingRule:delete") public ApiResponse deleteEstimatedDelivery(@PathVariable Integer id) { pricingRuleService.deleteEstimatedDelivery(id); return ApiResponse.success(null); } @ApiOperation("查询预计时效配置列表") @ApiOperation("查询预计时效配置") @GetMapping("/estimatedDelivery/list") @RequiresPermissions("business:pricingRule:query") public ApiResponse<List<EstimatedDeliveryVO>> listEstimatedDelivery(@RequestParam Integer cityId) { return ApiResponse.success(pricingRuleService.listEstimatedDelivery(cityId)); public ApiResponse<EstimatedDeliveryVO> listEstimatedDelivery(@RequestParam Integer cityId) { return ApiResponse.success(pricingRuleService.getEstimatedDelivery(cityId)); } @PreventRepeat server/services/src/main/java/com/doumee/dao/business/model/PricingRule.java
@@ -52,19 +52,19 @@ @ExcelColumn(name = "类型", index = 2, width = 10, valueMapping = "0=就地存取规则;1=异地存取规则;2=预计失效;3=门店注册押金;4=分成比例;") private Integer type; @ApiModelProperty(value = "参数1:type (0/1)= 关联 物品尺寸(category type =4);type (2)= 配送里程 ; type (3) = 企业类型(0=企业;1=个人);type (4) = 类型(0-4 企业寄/个人寄/企业取/个人取/配送员)") @ApiModelProperty(value = "参数1:type (0/1)= 关联 物品尺寸(category type =4);type (2)= 默认 1 ; type (3) = 企业类型(0=企业;1=个人);type (4) = 类型(企业/个人/配送员)") private String fieldA; @ApiModelProperty(value = "参数2:type (0)= 收费单价 ;type (1)= 配送起步里程公里数 ;type (2)= 配送时长 ; type (3) = 押金;type (4) = 分成比例") @ApiModelProperty(value = "参数2:type (0)= 收费单价 ;type (1)= 配送起步里程公里数 ;type (2)= 起送里程 km ; type (3) = 押金;type (4) = 地点类型(寄件点/取件点/分成比例)") private String fieldB; @ApiModelProperty(value = "参数3:type (1)= 配送起步里程每公里单价 ;") @ApiModelProperty(value = "参数3:type (1)= 配送起步里程每公里单价 ;type (2) = 起送时长; type (3) = 押金;type (4) = 分成比例") private String fieldC; @ApiModelProperty(value = "参数4:type=1 超出首单里程公里数") @ApiModelProperty(value = "参数4:type=1 超出首单里程公里数 ; type =2 续送里程 km;") private String fieldD; @ApiModelProperty(value = "参数5:type=1 超出首单里程每公里 单价") @ApiModelProperty(value = "参数5:type=1 超出首单里程每公里 单价 ; type =2 续送时长") private String fieldE; } server/services/src/main/java/com/doumee/dao/dto/EstimatedDeliverySaveDTO.java
@@ -16,18 +16,23 @@ @ApiModel("预计时效配置保存请求") public class EstimatedDeliverySaveDTO implements Serializable { @ApiModelProperty(value = "规则主键(修改时必传)") private Integer id; @ApiModelProperty(value = "城市主键", required = true, example = "1") @NotNull(message = "城市主键不能为空") private Integer cityId; @ApiModelProperty(value = "配送里程(公里)", required = true, example = "10") @NotNull(message = "配送里程不能为空") private String distance; @ApiModelProperty(value = "起送里程(公里)", required = true, example = "10") @NotNull(message = "起送里程不能为空") private String startDistance; @ApiModelProperty(value = "配送时长(小时)", required = true, example = "2") @NotNull(message = "配送时长不能为空") private String duration; @ApiModelProperty(value = "起送时长", required = true, example = "2") @NotNull(message = "起送时长不能为空") private String startTime; @ApiModelProperty(value = "续送里程(公里)", required = true, example = "5") @NotNull(message = "续送里程不能为空") private String continueDistance; @ApiModelProperty(value = "续送时长", required = true, example = "1") @NotNull(message = "续送时长不能为空") private String continueTime; } server/services/src/main/java/com/doumee/dao/vo/EstimatedDeliveryVO.java
@@ -7,7 +7,7 @@ import java.io.Serializable; /** * 预计时效配置列表返回 * 预计时效配置(列表返回) * @author rk * @date 2026/04/08 */ @@ -21,9 +21,15 @@ @ApiModelProperty(value = "城市主键") private Integer cityId; @ApiModelProperty(value = "配送里程(公里)") private String distance; @ApiModelProperty(value = "起送里程(公里)") private String startDistance; @ApiModelProperty(value = "配送时长(小时)") private String duration; @ApiModelProperty(value = "起送时长") private String startTime; @ApiModelProperty(value = "续送里程(公里)") private String continueDistance; @ApiModelProperty(value = "续送时长") private String continueTime; } server/services/src/main/java/com/doumee/service/business/PricingRuleService.java
@@ -133,30 +133,17 @@ List<RemoteDeliveryPricingVO> listRemoteDeliveryPricing(Integer cityId); /** * 新增预计时效配置 * @param request 保存请求 * @return 规则主键 */ Integer createEstimatedDelivery(EstimatedDeliverySaveDTO request); /** * 修改预计时效配置 * 保存预计时效配置(有则更新,无则新增) * @param request 保存请求 */ void updateEstimatedDelivery(EstimatedDeliverySaveDTO request); void saveEstimatedDelivery(EstimatedDeliverySaveDTO request); /** * 删除预计时效配置 * @param id 规则主键 */ void deleteEstimatedDelivery(Integer id); /** * 查询预计时效配置列表 * 查询预计时效配置(有且只有一条,无数据返回空对象) * @param cityId 城市主键 * @return 预计时效配置列表 * @return 预计时效配置 */ List<EstimatedDeliveryVO> listEstimatedDelivery(Integer cityId); EstimatedDeliveryVO getEstimatedDelivery(Integer cityId); /** * 批量保存门店注册押金 server/services/src/main/java/com/doumee/service/business/impl/DriverInfoServiceImpl.java
@@ -312,7 +312,7 @@ member.setNickName(telephone); member.setName(telephone); member.setUserType(Constants.ONE); member.setDriverStatus(Constants.ZERO); member.setBusinessStatus(Constants.ZERO); member.setPassword(secure.encryptPassword(defaultPassword, salt)); member.setSalt(salt); member.setWorkerIdentity(Constants.ZERO); @@ -482,7 +482,7 @@ // 更新会员司机认证状态为认证中 memberMapper.update(new UpdateWrapper<Member>().lambda() .set(Member::getDriverStatus, Constants.ONE) .set(Member::getBusinessStatus, Constants.ONE) .set(Member::getUpdateTime, now) .eq(Member::getId, memberId)); } @@ -559,7 +559,7 @@ // 更新会员司机认证状态:通过=2,驳回=3 Integer driverStatus = Constants.equalsInteger(newStatus, Constants.TWO) ? Constants.TWO : Constants.THREE; memberMapper.update(new UpdateWrapper<Member>().lambda() .set(Member::getDriverStatus, driverStatus) .set(Member::getBusinessStatus, driverStatus) .set(Member::getUpdateTime, now) .eq(Member::getId, driverInfo.getMemberId())); } server/services/src/main/java/com/doumee/service/business/impl/PricingRuleServiceImpl.java
@@ -379,66 +379,65 @@ } @Override public Integer createEstimatedDelivery(EstimatedDeliverySaveDTO request) { PricingRule rule = new PricingRule(); rule.setType(Constants.TWO); rule.setCityId(request.getCityId()); rule.setFieldA(request.getDistance()); rule.setFieldB(request.getDuration()); rule.setDeleted(Constants.ZERO); rule.setCreateTime(new Date()); rule.setUpdateTime(new Date()); pricingRuleMapper.insert(rule); return rule.getId(); } @Override public void updateEstimatedDelivery(EstimatedDeliverySaveDTO request) { if (request.getId() == null) { throw new BusinessException(ResponseStatus.BAD_REQUEST.getCode(), "主键不能为空"); } PricingRule existing = pricingRuleMapper.selectById(request.getId()); if (Objects.isNull(existing) || !Constants.equalsInteger(existing.getType(), Constants.TWO)) { throw new BusinessException(ResponseStatus.DATA_EMPTY); } existing.setFieldA(request.getDistance()); existing.setFieldB(request.getDuration()); existing.setCityId(request.getCityId()); existing.setUpdateTime(new Date()); pricingRuleMapper.updateById(existing); } @Override public void deleteEstimatedDelivery(Integer id) { PricingRule existing = pricingRuleMapper.selectById(id); if (Objects.isNull(existing) || !Constants.equalsInteger(existing.getType(), Constants.TWO)) { throw new BusinessException(ResponseStatus.DATA_EMPTY); } existing.setDeleted(Constants.ONE); existing.setUpdateTime(new Date()); pricingRuleMapper.updateById(existing); } @Override public List<EstimatedDeliveryVO> listEstimatedDelivery(Integer cityId) { @Transactional(rollbackFor = Exception.class) public void saveEstimatedDelivery(EstimatedDeliverySaveDTO request) { // 查询已有规则 type=2, fieldA=1, cityId, deleted=0 QueryWrapper<PricingRule> qw = new QueryWrapper<>(); qw.lambda() .eq(PricingRule::getType, Constants.TWO) .eq(PricingRule::getFieldA, "1") .eq(PricingRule::getCityId, request.getCityId()) .eq(PricingRule::getDeleted, Constants.ZERO) .last("limit 1"); PricingRule existing = pricingRuleMapper.selectOne(qw); Date now = new Date(); if (existing != null) { // 更新 existing.setFieldB(request.getStartDistance()); existing.setFieldC(request.getStartTime()); existing.setFieldD(request.getContinueDistance()); existing.setFieldE(request.getContinueTime()); existing.setUpdateTime(now); pricingRuleMapper.updateById(existing); } else { // 新增 PricingRule rule = new PricingRule(); rule.setType(Constants.TWO); rule.setFieldA("1"); rule.setFieldB(request.getStartDistance()); rule.setFieldC(request.getStartTime()); rule.setFieldD(request.getContinueDistance()); rule.setFieldE(request.getContinueTime()); rule.setCityId(request.getCityId()); rule.setDeleted(Constants.ZERO); rule.setCreateTime(now); rule.setUpdateTime(now); pricingRuleMapper.insert(rule); } } @Override public EstimatedDeliveryVO getEstimatedDelivery(Integer cityId) { QueryWrapper<PricingRule> qw = new QueryWrapper<>(); qw.lambda() .eq(PricingRule::getType, Constants.TWO) .eq(PricingRule::getFieldA, "1") .eq(PricingRule::getCityId, cityId) .eq(PricingRule::getDeleted, Constants.ZERO) .orderByAsc(PricingRule::getFieldA); List<PricingRule> rules = pricingRuleMapper.selectList(qw); if (CollectionUtils.isEmpty(rules)) { return new ArrayList<>(); } return rules.stream().map(rule -> { .last("limit 1"); PricingRule rule = pricingRuleMapper.selectOne(qw); EstimatedDeliveryVO vo = new EstimatedDeliveryVO(); vo.setCityId(cityId); if (rule != null) { vo.setPricingRuleId(rule.getId()); vo.setCityId(rule.getCityId()); vo.setDistance(rule.getFieldA()); vo.setDuration(rule.getFieldB()); vo.setStartDistance(rule.getFieldB()); vo.setStartTime(rule.getFieldC()); vo.setContinueDistance(rule.getFieldD()); vo.setContinueTime(rule.getFieldE()); } return vo; }).collect(Collectors.toList()); } @Override