From 8da030e0d103c93757724197d5255eeec3c3f7c9 Mon Sep 17 00:00:00 2001 From: renfan <2206580733@qq.com> Date: Mon, 20 Jan 2025 16:53:47 +0800 Subject: [PATCH] =?UTF-8?q?=E3=80=90admin=E3=80=91=20=E6=96=B0=E5=A2=9E=20?= =?UTF-8?q?1=E3=80=81=E6=96=B0=E5=A2=9E=E5=BC=80=E9=80=9A=E5=9F=8E?= =?UTF-8?q?=E5=B8=82=E7=AE=A1=E7=90=86?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../controller/city/OpenCityController.java | 95 ++++++++++ .../admin/service/city/IOpenCityService.java | 59 +++++++ .../city/impl/OpenCityServiceImpl.java | 166 ++++++++++++++++++ .../admin/validate/city/OpenCityParam.java | 39 ++++ .../hcy/admin/vo/city/OpenCityDetailVo.java | 20 +++ .../com/hcy/admin/vo/city/OpenCityListVo.java | 23 +++ admin/src/main/resources/application.yml | 6 +- .../com/hcy/common/entity/city/OpenCity.java | 27 +++ .../common/mapper/city/OpenCityMapper.java | 13 ++ .../service/order/impl/OrderServiceImpl.java | 14 ++ front/src/main/resources/application.yml | 4 +- 11 files changed, 461 insertions(+), 5 deletions(-) create mode 100644 admin/src/main/java/com/hcy/admin/controller/city/OpenCityController.java create mode 100644 admin/src/main/java/com/hcy/admin/service/city/IOpenCityService.java create mode 100644 admin/src/main/java/com/hcy/admin/service/city/impl/OpenCityServiceImpl.java create mode 100644 admin/src/main/java/com/hcy/admin/validate/city/OpenCityParam.java create mode 100644 admin/src/main/java/com/hcy/admin/vo/city/OpenCityDetailVo.java create mode 100644 admin/src/main/java/com/hcy/admin/vo/city/OpenCityListVo.java create mode 100644 common/src/main/java/com/hcy/common/entity/city/OpenCity.java create mode 100644 common/src/main/java/com/hcy/common/mapper/city/OpenCityMapper.java diff --git a/admin/src/main/java/com/hcy/admin/controller/city/OpenCityController.java b/admin/src/main/java/com/hcy/admin/controller/city/OpenCityController.java new file mode 100644 index 0000000..b2a9b8d --- /dev/null +++ b/admin/src/main/java/com/hcy/admin/controller/city/OpenCityController.java @@ -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 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(); + } + +} diff --git a/admin/src/main/java/com/hcy/admin/service/city/IOpenCityService.java b/admin/src/main/java/com/hcy/admin/service/city/IOpenCityService.java new file mode 100644 index 0000000..2e323d3 --- /dev/null +++ b/admin/src/main/java/com/hcy/admin/service/city/IOpenCityService.java @@ -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 + */ + PageResult 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); + +} diff --git a/admin/src/main/java/com/hcy/admin/service/city/impl/OpenCityServiceImpl.java b/admin/src/main/java/com/hcy/admin/service/city/impl/OpenCityServiceImpl.java new file mode 100644 index 0000000..1150ba5 --- /dev/null +++ b/admin/src/main/java/com/hcy/admin/service/city/impl/OpenCityServiceImpl.java @@ -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 + */ + @Override + public PageResult list(PageParam pageParam, OpenCityParam params) { + Integer page = pageParam.getPageNo(); + Integer limit = pageParam.getPageSize(); + + QueryWrapper queryWrapper = new QueryWrapper<>(); + queryWrapper.eq("is_delete", 0); + queryWrapper.orderByDesc(Arrays.asList("sort", "id")); + + IPage iPage = openCityMapper.selectPage(new Page<>(page, limit), queryWrapper); + List list = new ArrayList<>(); + + //获取城市名称 + Map 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() + .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() + .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() + .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() + .eq("id", id) + .eq("is_delete", 0) + .last("limit 1")); + + Assert.notNull(model, "数据不存在!"); + + model.setIsDelete(1L); + openCityMapper.updateById(model); + } + +} diff --git a/admin/src/main/java/com/hcy/admin/validate/city/OpenCityParam.java b/admin/src/main/java/com/hcy/admin/validate/city/OpenCityParam.java new file mode 100644 index 0000000..9b45b6b --- /dev/null +++ b/admin/src/main/java/com/hcy/admin/validate/city/OpenCityParam.java @@ -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; + +} diff --git a/admin/src/main/java/com/hcy/admin/vo/city/OpenCityDetailVo.java b/admin/src/main/java/com/hcy/admin/vo/city/OpenCityDetailVo.java new file mode 100644 index 0000000..d918e33 --- /dev/null +++ b/admin/src/main/java/com/hcy/admin/vo/city/OpenCityDetailVo.java @@ -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 + +} diff --git a/admin/src/main/java/com/hcy/admin/vo/city/OpenCityListVo.java b/admin/src/main/java/com/hcy/admin/vo/city/OpenCityListVo.java new file mode 100644 index 0000000..e03c18a --- /dev/null +++ b/admin/src/main/java/com/hcy/admin/vo/city/OpenCityListVo.java @@ -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; // 更新时间 +} diff --git a/admin/src/main/resources/application.yml b/admin/src/main/resources/application.yml index c21fb40..b7b47b8 100644 --- a/admin/src/main/resources/application.yml +++ b/admin/src/main/resources/application.yml @@ -1,7 +1,7 @@ # 项目配置 like: - upload-directory: /data/file/uploads/ # 文件上传目录 -# upload-directory: E:\img\ +# upload-directory: /data/file/uploads/ # 文件上传目录 + upload-directory: E:\img\ # 服务配置 server: @@ -24,7 +24,7 @@ spring: static-path-pattern: /api/static/** # 数据源配置 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 # 数据源类型 driver-class-name: com.mysql.jdbc.Driver # MySql的驱动 username: root # 数据库账号 diff --git a/common/src/main/java/com/hcy/common/entity/city/OpenCity.java b/common/src/main/java/com/hcy/common/entity/city/OpenCity.java new file mode 100644 index 0000000..c2031e4 --- /dev/null +++ b/common/src/main/java/com/hcy/common/entity/city/OpenCity.java @@ -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-删除 + +} \ No newline at end of file diff --git a/common/src/main/java/com/hcy/common/mapper/city/OpenCityMapper.java b/common/src/main/java/com/hcy/common/mapper/city/OpenCityMapper.java new file mode 100644 index 0000000..4cef325 --- /dev/null +++ b/common/src/main/java/com/hcy/common/mapper/city/OpenCityMapper.java @@ -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 { +} diff --git a/front/src/main/java/com/hcy/front/service/order/impl/OrderServiceImpl.java b/front/src/main/java/com/hcy/front/service/order/impl/OrderServiceImpl.java index 6047d8b..018b152 100644 --- a/front/src/main/java/com/hcy/front/service/order/impl/OrderServiceImpl.java +++ b/front/src/main/java/com/hcy/front/service/order/impl/OrderServiceImpl.java @@ -19,6 +19,7 @@ import com.hcy.common.dto.OrderDto; import com.hcy.common.dto.result.OrderPageResultDto; import com.hcy.common.entity.account.AccountLog; 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.coupon.Coupon; 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.mapper.account.AccountLogMapper; 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.enums.coupon.UserCouponStatusEnum; import com.hcy.common.mapper.coupon.CouponMapper; @@ -192,6 +194,9 @@ public class OrderServiceImpl extends ServiceImpl implements @Resource UserAuthMapper userAuthMapper; + @Resource + OpenCityMapper openCityMapper; + private String orderNotifyUrl; @Value("${byte.pay.order-refund-notify-url}") @@ -509,6 +514,15 @@ public class OrderServiceImpl extends ServiceImpl implements } } } + + //校验订单地址是否在服务城市 + OpenCity openCity = openCityMapper.selectOne(new LambdaQueryWrapper() + .eq(OpenCity::getCityId, orderParam.getCityId()) + .eq(OpenCity::getIsDelete, GlobalConstant.NOT_DELETE)); + if(openCity == null){ + throw new OperateException("该订单地址未开通家政服务"); + } + Order model = new Order(); // 订单编号 model.setSn(SnUtils.getOrderSn()); diff --git a/front/src/main/resources/application.yml b/front/src/main/resources/application.yml index 38225e9..06241c2 100644 --- a/front/src/main/resources/application.yml +++ b/front/src/main/resources/application.yml @@ -1,7 +1,7 @@ # 项目配置 like: - upload-directory: /data/file/uploads/ # 文件上传目录 -# upload-directory: E:\img\ +# upload-directory: /data/file/uploads/ # 文件上传目录 + upload-directory: E:\img\ # 服务配置 server: port: 8086