| | |
| | | import com.baomidou.mybatisplus.core.metadata.IPage; |
| | | import com.baomidou.mybatisplus.extension.conditions.query.LambdaQueryChainWrapper; |
| | | import com.baomidou.mybatisplus.extension.plugins.pagination.Page; |
| | | import com.ruoyi.admin.entity.Evaluate; |
| | | import com.ruoyi.admin.entity.MasterWorker; |
| | | import com.ruoyi.admin.service.EvaluateService; |
| | | import com.ruoyi.admin.service.MasterWorkerService; |
| | | import com.ruoyi.admin.vo.MasterWorkerDetailVO; |
| | | import com.ruoyi.common.core.constant.Constants; |
| | | import com.ruoyi.common.core.domain.R; |
| | | import com.ruoyi.common.core.utils.StringUtils; |
| | | import com.ruoyi.common.core.utils.bean.BeanUtils; |
| | | import com.ruoyi.order.api.entity.Evaluate; |
| | | import com.ruoyi.order.api.feignClient.EvaluateClient; |
| | | import io.swagger.annotations.Api; |
| | | import io.swagger.annotations.ApiImplicitParam; |
| | | import io.swagger.annotations.ApiImplicitParams; |
| | | import io.swagger.annotations.ApiOperation; |
| | | import org.springframework.security.crypto.bcrypt.BCryptPasswordEncoder; |
| | | import org.springframework.validation.annotation.Validated; |
| | | import org.springframework.web.bind.annotation.*; |
| | | |
| | | import javax.annotation.Resource; |
| | | import java.math.BigDecimal; |
| | | import java.math.RoundingMode; |
| | | import java.util.Arrays; |
| | | import java.util.List; |
| | | import java.util.stream.Collectors; |
| | | |
| | |
| | | @Resource |
| | | private MasterWorkerService masterWorkerService; |
| | | @Resource |
| | | private EvaluateService evaluateService; |
| | | private EvaluateClient evaluateClient; |
| | | |
| | | /** |
| | | * 师傅列表分页查询 (添加订单-选择师傅列表) |
| | |
| | | @GetMapping(value = "/selectServe") |
| | | @ApiImplicitParams({ |
| | | @ApiImplicitParam(value = "师傅姓名", name = "workerName", dataType = "String"), |
| | | @ApiImplicitParam(value = "师傅电话", name = "workerPhone", dataType = "String"), |
| | | @ApiImplicitParam(value = "师傅电话", name = "phone", dataType = "String"), |
| | | @ApiImplicitParam(value = "服务城市", name = "city", dataType = "String"), |
| | | @ApiImplicitParam(value = "账号启用状态", name = "state", dataType = "Integer"), |
| | | @ApiImplicitParam(value = "页码", name = "pageNum", dataType = "Integer", required = true), |
| | | @ApiImplicitParam(value = "每页显示条数", name = "pageSize", dataType = "Integer", required = true) |
| | | }) |
| | | public R<IPage<MasterWorker>> selectServe(String workerName, String workerPhone, String city, |
| | | public R<IPage<MasterWorker>> selectServe(String workerName, String phone, String city, Integer state, |
| | | @RequestParam(name = "pageNum", defaultValue = "1") Integer pageNum, |
| | | @RequestParam(name = "pageSize", defaultValue = "10") Integer pageSize) { |
| | | LambdaQueryChainWrapper<MasterWorker> wrapper = masterWorkerService.lambdaQuery(); |
| | | wrapper = StringUtils.isNotBlank(workerName) ? wrapper.like(MasterWorker::getRealName, workerName) : wrapper; |
| | | wrapper = StringUtils.isNotBlank(workerPhone) ? wrapper.like(MasterWorker::getPhone, workerPhone) : wrapper; |
| | | wrapper = StringUtils.isNotBlank(phone) ? wrapper.like(MasterWorker::getPhone, phone) : wrapper; |
| | | wrapper = StringUtils.isNotBlank(city) ? wrapper.like(MasterWorker::getCity, city) : wrapper; |
| | | return R.ok(wrapper.eq(MasterWorker::getIsDelete, 0) |
| | | if (null != state) { |
| | | wrapper.eq(MasterWorker::getIsEnable, Constants.ONE); |
| | | } |
| | | return R.ok(wrapper.eq(MasterWorker::getIsDelete, Constants.ZERO) |
| | | .orderByDesc(MasterWorker::getCreateTime).page(Page.of(pageNum, pageSize))); |
| | | } |
| | | |
| | |
| | | @ApiOperation(value = "新增师傅信息", tags = {"后台-师傅管理-师傅列表管理"}) |
| | | @PostMapping(value = "/save") |
| | | public R<String> save(@RequestBody MasterWorker masterWorker) { |
| | | // MD5加密登录密码(新) |
| | | BCryptPasswordEncoder passwordEncoder = new BCryptPasswordEncoder(); |
| | | String md5Password = passwordEncoder.encode(Constants.DEFAULT_PASSWORD); |
| | | masterWorker.setPassword(md5Password); |
| | | return masterWorkerService.save(masterWorker) ? R.ok() : R.fail(); |
| | | boolean check = masterWorkerService.checkOnlyPhone(masterWorker.getPhone(), null); |
| | | if (check) { |
| | | // MD5加密登录密码(新) |
| | | BCryptPasswordEncoder passwordEncoder = new BCryptPasswordEncoder(); |
| | | String md5Password = passwordEncoder.encode(Constants.DEFAULT_PASSWORD); |
| | | masterWorker.setPassword(md5Password); |
| | | return masterWorkerService.save(masterWorker) ? R.ok() : R.fail(); |
| | | } else { |
| | | return R.fail("该手机号已注册账号!"); |
| | | } |
| | | } |
| | | |
| | | /** |
| | | * 新增师傅信息 |
| | | * 根据id批量删除账号 |
| | | * |
| | | * @param ids 账号id拼接 |
| | | */ |
| | | @ApiOperation(value = "删除师傅信息", tags = {"后台-师傅管理-师傅列表管理"}) |
| | | @GetMapping(value = "/batchDelete") |
| | | @ApiImplicitParams({ |
| | | @ApiImplicitParam(value = "多条账号id ',' 拼接", name = "ids", dataType = "String", required = true) |
| | | }) |
| | | public R<String> batchDelete(@RequestParam String ids) { |
| | | List<String> idList = Arrays.stream(ids.split(",")).collect(Collectors.toList()); |
| | | List<MasterWorker> list = masterWorkerService.lambdaQuery().in(MasterWorker::getId, idList).list(); |
| | | list.forEach(data -> data.setIsDelete(1)); |
| | | return masterWorkerService.updateBatchById(list) ? R.ok() : R.fail(); |
| | | } |
| | | |
| | | /** |
| | | * 修改师傅信息 |
| | | * |
| | | * @param masterWorker 师傅信息 |
| | | */ |
| | | @ApiOperation(value = "修改师傅信息", tags = {"后台-师傅管理-师傅列表管理"}) |
| | | @PostMapping(value = "/update") |
| | | public R<String> update(@RequestBody @Validated MasterWorker masterWorker) { |
| | | boolean check = masterWorkerService.checkOnlyPhone(masterWorker.getPhone(), masterWorker.getId()); |
| | | if (check) { |
| | | return masterWorkerService.updateById(masterWorker) ? R.ok() : R.fail(); |
| | | } else { |
| | | return R.fail("该手机号已注册账号!"); |
| | | } |
| | | } |
| | | |
| | | /** |
| | | * 启用/关闭师傅账号 |
| | | * |
| | | * @param id 师傅信息id |
| | | * @param enable 启用/关闭 |
| | | */ |
| | | @ApiOperation(value = "启用/关闭师傅账号", tags = {"后台-师傅管理-师傅列表管理"}) |
| | | @GetMapping(value = "/enable") |
| | | @ApiImplicitParams({ |
| | | @ApiImplicitParam(value = "师傅id", name = "id", dataType = "Integer", required = true), |
| | | @ApiImplicitParam(value = "0:关闭;1:启用", name = "enable", dataType = "Integer", required = true) |
| | | }) |
| | | public R<String> enable(@RequestParam Integer id, @RequestParam Integer enable) { |
| | | boolean update = masterWorkerService.lambdaUpdate().set(MasterWorker::getIsEnable, enable) |
| | | .eq(MasterWorker::getId, id).update(); |
| | | return update ? R.ok() : R.fail(); |
| | | } |
| | | |
| | | /** |
| | | * 师傅详细信息 |
| | | * |
| | | * @param workerId 师傅id |
| | | */ |
| | |
| | | MasterWorkerDetailVO workerDetail = new MasterWorkerDetailVO(); |
| | | BeanUtils.copyProperties(worker, workerDetail); |
| | | // 计算服务星级 |
| | | List<Evaluate> evaluateList = evaluateService.lambdaQuery().eq(Evaluate::getWorkerId, workerId) |
| | | .eq(Evaluate::getIsDelete, 0).list(); |
| | | List<BigDecimal> star = evaluateList.stream().map(Evaluate::getStarRating).collect(Collectors.toList()); |
| | | // 总评分 / 评价数量 |
| | | BigDecimal starRating = star.stream().reduce(BigDecimal.ZERO, BigDecimal::add); |
| | | BigDecimal result = starRating.divide(new BigDecimal(star.size()), 1, RoundingMode.HALF_UP); |
| | | workerDetail.setStarRating(result); |
| | | return R.fail(workerDetail); |
| | | List<Evaluate> evaluateList = evaluateClient.evaluateByWorkerId(worker.getId()).getData(); |
| | | List<Double> star = evaluateList.stream().map(Evaluate::getStarRating).collect(Collectors.toList()); |
| | | if (!star.isEmpty()) { |
| | | // 总评分 / 评价数量 |
| | | double sum = star.stream().mapToDouble(Double::doubleValue).sum(); |
| | | workerDetail.setStarRating(new BigDecimal(sum / star.size())); |
| | | } |
| | | return R.ok(workerDetail); |
| | | } |
| | | |
| | | } |