【admin】 新增 1、新增开通城市管理

dev
renfan 2025-01-20 16:53:47 +08:00
parent bd4b382c23
commit 8da030e0d1
11 changed files with 461 additions and 5 deletions

View File

@ -0,0 +1,95 @@
package com.hcy.admin.controller.city;
import com.hcy.admin.config.aop.Log;
import com.hcy.admin.service.city.IOpenCityService;
import com.hcy.admin.validate.city.OpenCityParam;
import com.hcy.admin.validate.common.PageParam;
import com.hcy.admin.vo.city.OpenCityListVo;
import com.hcy.admin.vo.city.OpenCityDetailVo;
import com.hcy.common.core.AjaxResult;
import com.hcy.common.core.PageResult;
import com.hcy.common.validator.annotation.IDMust;
import org.springframework.validation.annotation.Validated;
import org.springframework.web.bind.annotation.*;
import javax.annotation.Resource;
import java.util.Map;
/**
*
*/
@RestController
@RequestMapping("api/city")
public class OpenCityController {
@Resource
IOpenCityService iOpenCityService;
/**
*
*
* @author hcy
* @param pageParam
* @return Object
*/
@GetMapping("/list")
public Object list(@Validated PageParam pageParam, OpenCityParam params) {
PageResult<OpenCityListVo> list = iOpenCityService.list(pageParam, params);
return AjaxResult.success(list);
}
/**
*
*
* @author hcy
* @param id ID
* @return Object
*/
@GetMapping("/detail")
public Object detail(@Validated @IDMust() @RequestParam("id") Integer id) {
OpenCityDetailVo detail = iOpenCityService.detail(id);
return AjaxResult.success(detail);
}
/**
*
*
* @author hcy
* @param openCityParam
* @return Object
*/
@Log(title = "开通城市新增")
@PostMapping("/add")
public Object add(@Validated(value = OpenCityParam.create.class) @RequestBody OpenCityParam openCityParam) {
iOpenCityService.add(openCityParam);
return AjaxResult.success();
}
/**
*
*
* @author hcy
* @param openCityParam
* @return Object
*/
@Log(title = "开通城市编辑")
@PostMapping("/edit")
public Object edit(@Validated(value = OpenCityParam.update.class) @RequestBody OpenCityParam openCityParam) {
iOpenCityService.edit(openCityParam);
return AjaxResult.success();
}
/**
*
*
* @author hcy
* @param openCityParam
* @return Object
*/
@Log(title = "开通城市删除")
@PostMapping("/del")
public Object del(@Validated(value = OpenCityParam.delete.class) @RequestBody OpenCityParam openCityParam) {
iOpenCityService.del(Math.toIntExact(openCityParam.getId()));
return AjaxResult.success();
}
}

View File

@ -0,0 +1,59 @@
package com.hcy.admin.service.city;
import com.hcy.admin.validate.common.PageParam;
import com.hcy.admin.validate.city.OpenCityParam;
import com.hcy.admin.vo.city.OpenCityListVo;
import com.hcy.admin.vo.city.OpenCityDetailVo;
import com.hcy.common.core.PageResult;
import java.util.Map;
/**
*
*/
public interface IOpenCityService {
/**
*
*
* @author hcy
* @param pageParam
* @param params
* @return PageResult<OpenCityVo>
*/
PageResult<OpenCityListVo> list(PageParam pageParam, OpenCityParam params);
/**
*
*
* @author hcy
* @param id ID
* @return OpenCity
*/
OpenCityDetailVo detail(Integer id);
/**
*
*
* @author hcy
* @param openCityParam
*/
void add(OpenCityParam openCityParam);
/**
*
*
* @author hcy
* @param openCityParam
*/
void edit(OpenCityParam openCityParam);
/**
*
*
* @author hcy
* @param id ID
*/
void del(Integer id);
}

View File

@ -0,0 +1,166 @@
package com.hcy.admin.service.city.impl;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.github.yulichang.query.MPJQueryWrapper;
import com.hcy.admin.service.city.IOpenCityService;
import com.hcy.admin.service.region.IDevRegionService;
import com.hcy.admin.validate.common.PageParam;
import com.hcy.admin.validate.city.OpenCityParam;
import com.hcy.admin.vo.city.OpenCityListVo;
import com.hcy.admin.vo.city.OpenCityDetailVo;
import com.hcy.common.constant.GlobalConstant;
import com.hcy.common.core.PageResult;
import com.hcy.common.entity.city.OpenCity;
import com.hcy.common.exception.OperateException;
import com.hcy.common.mapper.city.OpenCityMapper;
import com.hcy.common.utils.ArrayUtil;
import com.hcy.common.utils.TimeUtil;
import com.hcy.common.utils.UrlUtil;
import com.hcy.common.config.GlobalConfig;
import org.springframework.beans.BeanUtils;
import org.springframework.stereotype.Service;
import org.springframework.util.Assert;
import javax.annotation.Resource;
import java.util.*;
/**
*
*/
@Service
public class OpenCityServiceImpl implements IOpenCityService {
@Resource
OpenCityMapper openCityMapper;
@Resource
private IDevRegionService regionService;
/**
*
*
* @author hcy
* @param pageParam
* @param params
* @return PageResult<OpenCityListVo>
*/
@Override
public PageResult<OpenCityListVo> list(PageParam pageParam, OpenCityParam params) {
Integer page = pageParam.getPageNo();
Integer limit = pageParam.getPageSize();
QueryWrapper<OpenCity> queryWrapper = new QueryWrapper<>();
queryWrapper.eq("is_delete", 0);
queryWrapper.orderByDesc(Arrays.asList("sort", "id"));
IPage<OpenCity> iPage = openCityMapper.selectPage(new Page<>(page, limit), queryWrapper);
List<OpenCityListVo> list = new ArrayList<>();
//获取城市名称
Map<Long, String> regionMap = regionService.getRegionMap();
for (OpenCity item : iPage.getRecords()) {
OpenCityListVo openCityListVo = new OpenCityListVo();
BeanUtils.copyProperties(item, openCityListVo);
//城市名
openCityListVo.setName(regionMap.get(item.getCityId()));
list.add(openCityListVo);
}
return PageResult.iPageHandle(iPage.getTotal(), iPage.getCurrent(), iPage.getSize(), list);
}
/**
*
*
* @author hcy
* @param id
* @return OpenCity
*/
@Override
public OpenCityDetailVo detail(Integer id) {
OpenCity model = openCityMapper.selectOne(
new QueryWrapper<OpenCity>()
.eq("id", id)
.eq("is_delete", 0)
.last("limit 1"));
Assert.notNull(model, "数据不存在");
OpenCityDetailVo vo = new OpenCityDetailVo();
BeanUtils.copyProperties(model, vo);
return vo;
}
/**
*
*
* @author hcy
* @param openCityParam
*/
@Override
public void add(OpenCityParam openCityParam) {
//不可添加相同的城市
OpenCity openCity = openCityMapper.selectOne(new LambdaQueryWrapper<OpenCity>()
.eq(OpenCity::getCityId, openCityParam.getCityId())
.eq(OpenCity::getIsDelete, GlobalConstant.NOT_DELETE));
if(openCity != null){
throw new OperateException("不可添加相同的城市");
}
OpenCity model = new OpenCity();
model.setSort(openCityParam.getSort());
model.setProvinceId(openCityParam.getProvinceId());
model.setCityId(openCityParam.getCityId());
openCityMapper.insert(model);
}
/**
*
*
* @author hcy
* @param openCityParam
*/
@Override
public void edit(OpenCityParam openCityParam) {
OpenCity model = openCityMapper.selectOne(
new LambdaQueryWrapper<OpenCity>()
.ne(OpenCity::getId, openCityParam.getId()) //修改需要排除自身id不可添加相同的城市
.eq(OpenCity::getCityId, openCityParam.getCityId())
.eq(OpenCity::getIsDelete, GlobalConstant.NOT_DELETE)
.last("limit 1"));
if(model != null){
throw new OperateException("不可添加相同的城市");
}
model = new OpenCity(); // 初始化开通城市
BeanUtils.copyProperties(openCityParam, model);
openCityMapper.updateById(model);
}
/**
*
*
* @author hcy
* @param id ID
*/
@Override
public void del(Integer id) {
OpenCity model = openCityMapper.selectOne(
new QueryWrapper<OpenCity>()
.eq("id", id)
.eq("is_delete", 0)
.last("limit 1"));
Assert.notNull(model, "数据不存在!");
model.setIsDelete(1L);
openCityMapper.updateById(model);
}
}

View File

@ -0,0 +1,39 @@
package com.hcy.admin.validate.city;
import lombok.EqualsAndHashCode;
import lombok.experimental.Accessors;
import org.hibernate.validator.constraints.Length;
import lombok.Data;
import javax.validation.constraints.*;
import java.io.Serializable;
/**
*
*/
@Data
@EqualsAndHashCode(callSuper = false)
@Accessors(chain = true)
public class OpenCityParam implements Serializable {
private static final long serialVersionUID = 1L;
public interface create{}
public interface update{}
public interface delete{}
private Long id;
@NotNull(message = "sort参数缺失", groups = {create.class, update.class})
@DecimalMin(value = "0", message = "sort参数值不能少于0", groups = {create.class, update.class})
private Long sort;
@NotNull(message = "provinceId参数缺失", groups = {create.class, update.class})
@DecimalMin(value = "0", message = "provinceId参数值不能少于0", groups = {create.class, update.class})
private Long provinceId;
@NotNull(message = "cityId参数缺失", groups = {create.class, update.class})
@DecimalMin(value = "0", message = "cityId参数值不能少于0", groups = {create.class, update.class})
private Long cityId;
}

View File

@ -0,0 +1,20 @@
package com.hcy.admin.vo.city;
import lombok.Data;
import java.io.Serializable;
/**
* OpenCityVo
*/
@Data
public class OpenCityDetailVo implements Serializable {
private static final long serialVersionUID = 1L;
private Long id; //
private Long sort; // 排序
private Long provinceId; // 省id
private Long cityId; // 市id
}

View File

@ -0,0 +1,23 @@
package com.hcy.admin.vo.city;
import lombok.Data;
import java.io.Serializable;
import java.util.Date;
/**
* OpenCityVo
*/
@Data
public class OpenCityListVo implements Serializable {
private static final long serialVersionUID = 1L;
private Long id; //
private Long sort; // 排序
private Long provinceId; // 省id
private Long cityId; // 市id
private String name; // 城市名
private Date createTime; // 创建时间
private Date updateTime; // 更新时间
}

View File

@ -1,7 +1,7 @@
# 项目配置 # 项目配置
like: like:
upload-directory: /data/file/uploads/ # 文件上传目录 # upload-directory: /data/file/uploads/ # 文件上传目录
# upload-directory: E:\img\ upload-directory: E:\img\
# 服务配置 # 服务配置
server: server:
@ -24,7 +24,7 @@ spring:
static-path-pattern: /api/static/** static-path-pattern: /api/static/**
# 数据源配置 # 数据源配置
datasource: datasource:
url: jdbc:mysql://192.168.111.98:3306/homemaking_no_staff?useUnicode=true&characterEncoding=UTF-8&autoReconnect=true&useSSL=false url: jdbc:mysql://192.168.111.98:3306/homemaking?useUnicode=true&characterEncoding=UTF-8&autoReconnect=true&useSSL=false
type: com.zaxxer.hikari.HikariDataSource # 数据源类型 type: com.zaxxer.hikari.HikariDataSource # 数据源类型
driver-class-name: com.mysql.jdbc.Driver # MySql的驱动 driver-class-name: com.mysql.jdbc.Driver # MySql的驱动
username: root # 数据库账号 username: root # 数据库账号

View File

@ -0,0 +1,27 @@
package com.hcy.common.entity.city;
import com.baomidou.mybatisplus.annotation.IdType;
import com.baomidou.mybatisplus.annotation.TableId;
import lombok.Data;
import java.io.Serializable;
import java.util.Date;
/**
*
*/
@Data
public class OpenCity implements Serializable {
private static final long serialVersionUID = 1L;
@TableId(value="id", type= IdType.AUTO)
private Long id; //
private Long sort; // 排序
private Long provinceId; // 省id
private Long cityId; // 市id
private Date createTime; // 创建时间
private Date updateTime; // 更新时间
private Long isDelete; // 是否删除 0-正常 1-删除
}

View File

@ -0,0 +1,13 @@
package com.hcy.common.mapper.city;
import com.hcy.common.core.basics.IBaseMapper;
import com.hcy.common.entity.city.OpenCity;
import org.apache.ibatis.annotations.Mapper;
/**
* Mapper
*/
@Mapper
public interface OpenCityMapper extends IBaseMapper<OpenCity> {
}

View File

@ -19,6 +19,7 @@ import com.hcy.common.dto.OrderDto;
import com.hcy.common.dto.result.OrderPageResultDto; import com.hcy.common.dto.result.OrderPageResultDto;
import com.hcy.common.entity.account.AccountLog; import com.hcy.common.entity.account.AccountLog;
import com.hcy.common.entity.address.UserAddress; import com.hcy.common.entity.address.UserAddress;
import com.hcy.common.entity.city.OpenCity;
import com.hcy.common.entity.comment.GoodsComment; import com.hcy.common.entity.comment.GoodsComment;
import com.hcy.common.entity.coupon.Coupon; import com.hcy.common.entity.coupon.Coupon;
import com.hcy.common.entity.distribution.Distributor; import com.hcy.common.entity.distribution.Distributor;
@ -46,6 +47,7 @@ import com.hcy.common.enums.wxpay.WxToUrlEnum;
import com.hcy.common.exception.OperateException; import com.hcy.common.exception.OperateException;
import com.hcy.common.mapper.account.AccountLogMapper; import com.hcy.common.mapper.account.AccountLogMapper;
import com.hcy.common.mapper.address.UserAddressMapper; import com.hcy.common.mapper.address.UserAddressMapper;
import com.hcy.common.mapper.city.OpenCityMapper;
import com.hcy.common.mapper.distribution.DistributorCommissionMapper; import com.hcy.common.mapper.distribution.DistributorCommissionMapper;
import com.hcy.common.enums.coupon.UserCouponStatusEnum; import com.hcy.common.enums.coupon.UserCouponStatusEnum;
import com.hcy.common.mapper.coupon.CouponMapper; import com.hcy.common.mapper.coupon.CouponMapper;
@ -192,6 +194,9 @@ public class OrderServiceImpl extends ServiceImpl<OrderMapper, Order> implements
@Resource @Resource
UserAuthMapper userAuthMapper; UserAuthMapper userAuthMapper;
@Resource
OpenCityMapper openCityMapper;
private String orderNotifyUrl; private String orderNotifyUrl;
@Value("${byte.pay.order-refund-notify-url}") @Value("${byte.pay.order-refund-notify-url}")
@ -509,6 +514,15 @@ public class OrderServiceImpl extends ServiceImpl<OrderMapper, Order> implements
} }
} }
} }
//校验订单地址是否在服务城市
OpenCity openCity = openCityMapper.selectOne(new LambdaQueryWrapper<OpenCity>()
.eq(OpenCity::getCityId, orderParam.getCityId())
.eq(OpenCity::getIsDelete, GlobalConstant.NOT_DELETE));
if(openCity == null){
throw new OperateException("该订单地址未开通家政服务");
}
Order model = new Order(); Order model = new Order();
// 订单编号 // 订单编号
model.setSn(SnUtils.getOrderSn()); model.setSn(SnUtils.getOrderSn());

View File

@ -1,7 +1,7 @@
# 项目配置 # 项目配置
like: like:
upload-directory: /data/file/uploads/ # 文件上传目录 # upload-directory: /data/file/uploads/ # 文件上传目录
# upload-directory: E:\img\ upload-directory: E:\img\
# 服务配置 # 服务配置
server: server:
port: 8086 port: 8086